瀏覽代碼

流程修改

wangliang 3 年之前
父節點
當前提交
82b89afe34

+ 36 - 17
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ActivitiServiceImpl.java

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qmth.distributed.print.business.entity.ExamTask;
 import com.qmth.distributed.print.business.entity.TFFlowApprove;
 import com.qmth.distributed.print.business.entity.TFFlowLog;
-import com.qmth.distributed.print.business.enums.ExamStatusEnum;
 import com.qmth.distributed.print.business.service.ActivitiService;
 import com.qmth.distributed.print.business.service.ExamTaskService;
 import com.qmth.distributed.print.business.service.TFFlowApproveService;
@@ -12,10 +11,7 @@ import com.qmth.distributed.print.business.service.TFFlowLogService;
 import com.qmth.teachcloud.common.contant.SpringContextHolder;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;
-import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
-import com.qmth.teachcloud.common.enums.FlowApproveOperationEnum;
-import com.qmth.teachcloud.common.enums.FlowGdykdxApproveSetupEnum;
-import com.qmth.teachcloud.common.enums.FlowStatusEnum;
+import com.qmth.teachcloud.common.enums.*;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.activiti.bpmn.model.BpmnModel;
 import org.activiti.bpmn.model.FlowNode;
@@ -240,23 +236,29 @@ public class ActivitiServiceImpl implements ActivitiService {
                 tfFlowLog = new TFFlowLog(Long.parseLong(processInstanceId), examTask.getId(), sysUser.getId(), sysUser.getId(), remark);
                 FlowGdykdxApproveSetupEnum setupEnum = FlowGdykdxApproveSetupEnum.convertToInstance(userTask.getId());
                 if (setupEnum == FlowGdykdxApproveSetupEnum.SUBMIT) {//命题提交
+                    Task taskUser = taskService.createTaskQuery().taskId(flowTaskId).taskAssignee(String.valueOf(sysUser.getId())).singleResult();
+                    if (Objects.isNull(taskUser)) {
+                        throw ExceptionResultEnum.ERROR.exception("不能提交他人的任务");
+                    }
                     tfFlowLog.setApproveSetup(FlowGdykdxApproveSetupEnum.SUBMIT.getSetup());
                     tfFlowLog.setApproveOperation(FlowApproveOperationEnum.SUBMIT);
                     tfFlowApprove.setStatus(FlowStatusEnum.AUDITING);
                     tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE.getSetup());
                 } else if (setupEnum == FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE) {//主任提交
-                    if (Objects.isNull(map.get(SystemConstant.APPROVE))) {
-                        throw ExceptionResultEnum.ERROR.exception("流程变量不能为空");
+                    Task taskUser = taskService.createTaskQuery().taskId(flowTaskId).taskCandidateUser(String.valueOf(sysUser.getId())).singleResult();
+                    if (Objects.isNull(taskUser)) {
+                        throw ExceptionResultEnum.ERROR.exception("不能提交他人的任务");
+                    }
+                    if (Objects.isNull(map.get(SystemConstant.APPROVE_OPERATION))) {
+                        throw ExceptionResultEnum.ERROR.exception("流程审核操作不能为空");
                     }
-                    String approve = map.get(SystemConstant.APPROVE).toString();
+                    FlowApprovePassEnum approvePass = (FlowApprovePassEnum) map.get(SystemConstant.APPROVE_OPERATION);
+                    String approve = approvePass == FlowApprovePassEnum.PASS ? "1" : "0";
                     tfFlowLog.setApproveSetup(FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE.getSetup());
                     if (Objects.equals(approve, "0")) {//驳回命题
                         tfFlowLog.setApproveOperation(FlowApproveOperationEnum.REJECT);
                         tfFlowApprove.setStatus(FlowStatusEnum.REJECT);
                         tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.SUBMIT.getSetup());
-//                        examTask.setStatus(ExamStatusEnum.DRAFT);
-//                        examTask.updateInfo(sysUser.getId());
-//                        examTaskService.updateById(examTask);
                     } else if (Objects.equals(approve, "1")) {//提交
                         tfFlowLog.setApproveOperation(FlowApproveOperationEnum.APPROVE);
                         tfFlowApprove.setStatus(FlowStatusEnum.AUDITING);
@@ -264,19 +266,34 @@ public class ActivitiServiceImpl implements ActivitiService {
                     } else {
                         throw ExceptionResultEnum.ERROR.exception("流程变量值错误");
                     }
+                    map.computeIfAbsent(SystemConstant.APPROVE, v -> approve);
                 } else if (setupEnum == FlowGdykdxApproveSetupEnum.SECOND_APPROVE) {//院长提交
-                    if (Objects.isNull(map.get(SystemConstant.APPROVE))) {
-                        throw ExceptionResultEnum.ERROR.exception("流程变量不能为空");
+                    Task taskUser = taskService.createTaskQuery().taskId(flowTaskId).taskCandidateUser(String.valueOf(sysUser.getId())).singleResult();
+                    if (Objects.isNull(taskUser)) {
+                        throw ExceptionResultEnum.ERROR.exception("不能提交他人的任务");
+                    }
+                    if (Objects.isNull(map.get(SystemConstant.APPROVE_OPERATION))) {
+                        throw ExceptionResultEnum.ERROR.exception("流程审核操作不能为空");
+                    }
+                    FlowApprovePassEnum approvePass = (FlowApprovePassEnum) map.get(SystemConstant.APPROVE_OPERATION);
+                    String approve = null;
+                    if (approvePass == FlowApprovePassEnum.PASS) {
+                        approve = "2";
+                    } else {
+                        if (Objects.isNull(map.get(SystemConstant.APPROVE_SETUP))) {
+                            throw ExceptionResultEnum.ERROR.exception("流程驳回节点不能为空");
+                        }
+                        Integer setup = Integer.parseInt(map.get(SystemConstant.APPROVE_SETUP).toString());
+                        if (setup.intValue() < FlowGdykdxApproveSetupEnum.SUBMIT.getSetup() || setup.intValue() >= FlowGdykdxApproveSetupEnum.SECOND_APPROVE.getSetup()) {
+                            throw ExceptionResultEnum.ERROR.exception("流程驳回节点有误");
+                        }
+                        approve = setup.intValue() == 1 ? "0" : "1";
                     }
-                    String approve = map.get(SystemConstant.APPROVE).toString();
                     tfFlowLog.setApproveSetup(FlowGdykdxApproveSetupEnum.SECOND_APPROVE.getSetup());
                     if (Objects.equals(approve, "0")) {//驳回命题
                         tfFlowLog.setApproveOperation(FlowApproveOperationEnum.REJECT);
                         tfFlowApprove.setStatus(FlowStatusEnum.REJECT);
                         tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.SUBMIT.getSetup());
-//                        examTask.setStatus(ExamStatusEnum.DRAFT);
-//                        examTask.updateInfo(sysUser.getId());
-//                        examTaskService.updateById(examTask);
                     } else if (Objects.equals(approve, "1")) {//驳回主任
                         tfFlowLog.setApproveOperation(FlowApproveOperationEnum.REJECT);
                         tfFlowApprove.setStatus(FlowStatusEnum.REJECT);
@@ -288,6 +305,8 @@ public class ActivitiServiceImpl implements ActivitiService {
                     } else {
                         throw ExceptionResultEnum.ERROR.exception("流程变量值错误");
                     }
+                    String finalApprove = approve;
+                    map.computeIfAbsent(SystemConstant.APPROVE, v -> finalApprove);
                 }
                 tfFlowApprove.updateInfo(sysUser.getId());
             }

+ 89 - 19
distributed-print-business/src/main/resources/mapper/ExamTaskMapper.xml

@@ -664,6 +664,31 @@
     </sql>
 
     <select id="getFlowTaskReadyList" resultType="com.qmth.distributed.print.business.bean.result.WorkResult">
+        /*select
+        *
+        from
+        ACT_RU_TASK art
+        join
+        (
+        select
+        ari.USER_ID_ as userId,
+        ari.PROC_INST_ID_ as procInstId,
+        (
+        select
+        t.TASK_ID_
+        from
+        ACT_RU_IDENTITYLINK t
+        where
+        t.TYPE_ = 'candidate'
+        and t.USER_ID_ = '153080457649455104') as taskId
+        from
+        ACT_RU_IDENTITYLINK ari
+        where
+        ari.TYPE_ = 'participant'
+        and ari.USER_ID_ = '153080457649455104') temp on
+        art.PROC_INST_ID_ = temp.procInstId*/
+
+
         select
         et.id,
         et.school_id schoolId,
@@ -677,7 +702,7 @@
         et.card_rule_id when -1 then '全部通卡'
         else b.name
         end cardRuleName,
-        flow.userId,
+        art.ASSIGNEE_ as userId,
         c.real_name userName,
         et.start_time startTime,
         et.end_time endTime,
@@ -691,26 +716,71 @@
         art.ID_ as taskId,
         tffa.setup
         from
-        (
+        ACT_RU_TASK art
+        left join exam_task et on
+        et.flow_id = art.PROC_INST_ID_
+        left join basic_card_rule b ON
+        et.card_rule_id = b.id
+        left join t_f_flow_approve tffa on
+        tffa.flow_id = et.flow_id
+        left join sys_user c ON
+        art.ASSIGNEE_ = c.id
+        <where>
+            <if test="userId != null and userId != ''">
+                and art.ASSIGNEE_ = #{userId}
+            </if>
+            <if test="schoolId != null and schoolId != ''">
+                and et.school_id = #{schoolId}
+            </if>
+            <if test="orgId != null and orgId != ''">
+                and et.org_id = #{orgId}
+            </if>
+        </where>
+        UNION all
         select
-        t.USER_ID_ as userId,
-        t.TASK_ID_ as taskId,
-        t.PROC_INST_ID_ as procInstId
-        from act_ru_identitylink t
-        where
-            EXISTS(
-            select art.ID_ from exam_task et
-            left join ACT_RU_TASK art on art.PROC_INST_ID_ = et.flow_id
-            where (art.ID_ = t.TASK_ID_ or art.PROC_INST_ID_ = t.PROC_INST_ID_)
-            )
-        and t.USER_ID_ = #{userId}) flow
-        left join ACT_RU_TASK art on (art.ID_ = flow.taskId or art.PROC_INST_ID_ = flow.procInstId)
-        left join exam_task et on et.flow_id = art.PROC_INST_ID_
-        LEFT JOIN
-        basic_card_rule b ON et.card_rule_id = b.id
-        LEFT JOIN sys_user c ON flow.userId = c.id
-        left join t_f_flow_approve tffa on tffa.flow_id = et.flow_id
+        et.id,
+        et.school_id schoolId,
+        et.org_id as orgId,
+        et.course_code courseCode,
+        et.course_name courseName,
+        et.specialty,
+        et.paper_number paperNumber,
+        et.card_rule_id cardRuleId,
+        case
+        et.card_rule_id when -1 then '全部通卡'
+        else b.name
+        end cardRuleName,
+        ari.USER_ID_ as userId,
+        c.real_name userName,
+        et.start_time startTime,
+        et.end_time endTime,
+        tffa.status,
+        et.enable,
+        et.create_time createTime,
+        art.EXECUTION_ID_ as executionId,
+        et.flow_id as flowId,
+        art.NAME_ as taskName,
+        art.TASK_DEF_KEY_ as taskDefKey,
+        art.ID_ as taskId,
+        tffa.setup
+        from
+        ACT_RU_TASK art
+        left join exam_task et on
+        et.flow_id = art.PROC_INST_ID_
+        left join act_ru_identitylink ari on
+        ari.TASK_ID_ = art.ID_
+        left join basic_card_rule b ON
+        et.card_rule_id = b.id
+        left join t_f_flow_approve tffa on
+        tffa.flow_id = et.flow_id
+        left join sys_user c ON
+        ari.USER_ID_ = c.id
         <where>
+            and art.ASSIGNEE_ is null
+            and ari.TYPE_ = 'candidate'
+            <if test="userId != null and userId != ''">
+                and ari.USER_ID_ = #{userId}
+            </if>
             <if test="schoolId != null and schoolId != ''">
                 and et.school_id = #{schoolId}
             </if>

+ 84 - 84
distributed-print/src/main/java/com/qmth/distributed/print/api/ActivitiController.java

@@ -1,84 +1,84 @@
-package com.qmth.distributed.print.api;
-
-import com.qmth.boot.api.annotation.Aac;
-import com.qmth.boot.api.annotation.BOOL;
-import com.qmth.boot.api.constant.ApiConstant;
-import com.qmth.distributed.print.business.service.ActivitiService;
-import com.qmth.teachcloud.common.util.Result;
-import com.qmth.teachcloud.common.util.ResultUtil;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.annotation.Resource;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @Description: activiti demo api
- * @Param:
- * @return:
- * @Author: wangliang
- * @Date: 2021/7/12
- */
-@Api(tags = "工作流Controller")
-@RestController
-@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.basic}/activiti")
-@Aac(strict = BOOL.FALSE, auth = BOOL.FALSE)
-public class ActivitiController {
-
-    @Resource
-    private ActivitiService activitiService;
-
-    @ApiOperation(value = "注册流程")
-    @RequestMapping(value = "/createDeployment", method = RequestMethod.POST)
-    public Result createDeployment(@RequestParam(value = "processFileName") String processFileName) {
-        activitiService.createDeployment(processFileName);
-        return ResultUtil.ok();
-    }
-
-    @ApiOperation(value = "上传流程")
-    @RequestMapping(value = "/updateDeployment", method = RequestMethod.POST)
-    public Result uploadDeployment(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file) throws IOException {
-        activitiService.uploadDeployment(file);
-        return ResultUtil.ok();
-    }
-
-    @ApiOperation(value = "启动流程")
-    @RequestMapping(value = "/startActivity", method = RequestMethod.POST)
-    public Result startActivity(@RequestParam(value = "processKey") String processKey) {
-        Map<String, Object> map = new HashMap<>();
-        map.put("userId", 1L);
-        map.put("approveId", 2L);
-        map.put("assigneeId", 3L);
-        activitiService.startActivity(processKey, null);
-        return ResultUtil.ok();
-    }
-
-    @ApiOperation(value = "获取待办")
-    @RequestMapping(value = "/getTaskList", method = RequestMethod.POST)
-    public Result getTaskList() {
-        activitiService.getTaskList();
-        return ResultUtil.ok();
-    }
-
-    @ApiOperation(value = "提交")
-    @RequestMapping(value = "/complete", method = RequestMethod.POST)
-    public Result complete(@RequestParam(value = "taskId") String taskId) {
-        activitiService.complete(taskId);
-        return ResultUtil.ok();
-    }
-
-    @ApiOperation(value = "根据流程id直接结束流程")
-    @RequestMapping(value = "/deleteProcessInstance", method = RequestMethod.POST)
-    public Result deleteProcessInstance(@RequestParam(value = "flowId") String flowId) {
-        activitiService.deleteProcessInstance(flowId);
-        return ResultUtil.ok();
-    }
-}
+//package com.qmth.distributed.print.api;
+//
+//import com.qmth.boot.api.annotation.Aac;
+//import com.qmth.boot.api.annotation.BOOL;
+//import com.qmth.boot.api.constant.ApiConstant;
+//import com.qmth.distributed.print.business.service.ActivitiService;
+//import com.qmth.teachcloud.common.util.Result;
+//import com.qmth.teachcloud.common.util.ResultUtil;
+//import io.swagger.annotations.Api;
+//import io.swagger.annotations.ApiOperation;
+//import io.swagger.annotations.ApiParam;
+//import org.springframework.web.bind.annotation.RequestMapping;
+//import org.springframework.web.bind.annotation.RequestMethod;
+//import org.springframework.web.bind.annotation.RequestParam;
+//import org.springframework.web.bind.annotation.RestController;
+//import org.springframework.web.multipart.MultipartFile;
+//
+//import javax.annotation.Resource;
+//import java.io.IOException;
+//import java.util.HashMap;
+//import java.util.Map;
+//
+///**
+// * @Description: activiti demo api
+// * @Param:
+// * @return:
+// * @Author: wangliang
+// * @Date: 2021/7/12
+// */
+//@Api(tags = "工作流Controller")
+//@RestController
+//@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.basic}/activiti")
+//@Aac(strict = BOOL.FALSE, auth = BOOL.FALSE)
+//public class ActivitiController {
+//
+//    @Resource
+//    private ActivitiService activitiService;
+//
+//    @ApiOperation(value = "注册流程")
+//    @RequestMapping(value = "/createDeployment", method = RequestMethod.POST)
+//    public Result createDeployment(@RequestParam(value = "processFileName") String processFileName) {
+//        activitiService.createDeployment(processFileName);
+//        return ResultUtil.ok();
+//    }
+//
+//    @ApiOperation(value = "上传流程")
+//    @RequestMapping(value = "/updateDeployment", method = RequestMethod.POST)
+//    public Result uploadDeployment(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file) throws IOException {
+//        activitiService.uploadDeployment(file);
+//        return ResultUtil.ok();
+//    }
+//
+//    @ApiOperation(value = "启动流程")
+//    @RequestMapping(value = "/startActivity", method = RequestMethod.POST)
+//    public Result startActivity(@RequestParam(value = "processKey") String processKey) {
+//        Map<String, Object> map = new HashMap<>();
+//        map.put("userId", 1L);
+//        map.put("approveId", 2L);
+//        map.put("assigneeId", 3L);
+//        activitiService.startActivity(processKey, null);
+//        return ResultUtil.ok();
+//    }
+//
+//    @ApiOperation(value = "获取待办")
+//    @RequestMapping(value = "/getTaskList", method = RequestMethod.POST)
+//    public Result getTaskList() {
+//        activitiService.getTaskList();
+//        return ResultUtil.ok();
+//    }
+//
+//    @ApiOperation(value = "提交")
+//    @RequestMapping(value = "/complete", method = RequestMethod.POST)
+//    public Result complete(@RequestParam(value = "taskId") String taskId) {
+//        activitiService.complete(taskId);
+//        return ResultUtil.ok();
+//    }
+//
+//    @ApiOperation(value = "根据流程id直接结束流程")
+//    @RequestMapping(value = "/deleteProcessInstance", method = RequestMethod.POST)
+//    public Result deleteProcessInstance(@RequestParam(value = "flowId") String flowId) {
+//        activitiService.deleteProcessInstance(flowId);
+//        return ResultUtil.ok();
+//    }
+//}

+ 17 - 13
distributed-print/src/main/java/com/qmth/distributed/print/api/TFFlowController.java

@@ -16,6 +16,8 @@ import com.qmth.teachcloud.common.entity.BasicAttachment;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.FieldUniqueEnum;
+import com.qmth.teachcloud.common.enums.FlowApproveOperationEnum;
+import com.qmth.teachcloud.common.enums.FlowApprovePassEnum;
 import com.qmth.teachcloud.common.enums.UploadFileEnum;
 import com.qmth.teachcloud.common.service.BasicAttachmentService;
 import com.qmth.teachcloud.common.util.Result;
@@ -137,27 +139,29 @@ public class TFFlowController {
         return ResultUtil.ok(tfFlowService.list(new Page<>(pageNumber, pageSize), name, SystemConstant.getHeadOrUserSchoolId(), sysUser.getOrgId()));
     }
 
-    @ApiOperation(value = "启动流程")
-    @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = ResultUtil.class)})
-    @RequestMapping(value = "/start", method = RequestMethod.POST)
-    public Result start() {
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        Map<String, Object> map = new HashMap<>();
-        map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> String.valueOf(sysUser.getId()));
-        activitiService.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
-        return ResultUtil.ok();
-    }
+//    @ApiOperation(value = "启动流程")
+//    @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = ResultUtil.class)})
+//    @RequestMapping(value = "/start", method = RequestMethod.POST)
+//    public Result start() {
+//        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+//        Map<String, Object> map = new HashMap<>();
+//        map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> String.valueOf(sysUser.getId()));
+//        activitiService.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
+//        return ResultUtil.ok();
+//    }
 
     @ApiOperation(value = "审批流程")
     @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = ResultUtil.class)})
     @RequestMapping(value = "/task/approve", method = RequestMethod.POST)
     public Result teachTaskList(@ApiParam(value = "流程任务id", required = true) @RequestParam String taskId,
-                                @ApiParam(value = "流程变量", required = false) @RequestParam(required = false) String approve,
-                                @ApiParam(value = "流程审核意见", required = false) @RequestParam(required = false) String remark) {
+                                @ApiParam(value = "流程审批操作", required = false) @RequestParam(required = false) FlowApprovePassEnum approvePass,
+                                @ApiParam(value = "流程审核意见", required = false) @RequestParam(required = false) String remark,
+                                @ApiParam(value = "流程驳回节点", required = false) @RequestParam(required = false) Integer setup) {
         Map<String, Object> map = new HashMap<>();
         map.computeIfAbsent(SystemConstant.FLOW_TASK_ID, v -> taskId);
-        map.computeIfAbsent(SystemConstant.APPROVE, v -> approve);
+        map.computeIfAbsent(SystemConstant.APPROVE_OPERATION, v -> approvePass);
         map.computeIfAbsent(SystemConstant.APPROVE_REMARK, v -> remark);
+        map.computeIfAbsent(SystemConstant.APPROVE_SETUP, v -> setup);
         activitiService.taskApprove(map);
         return ResultUtil.ok();
     }

+ 2 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

@@ -188,6 +188,8 @@ public class SystemConstant {
     public static final String TASK_ID = "taskId";//命题任务id
     public static final String FLOW_TASK_ID = "flowTaskId";//流程任务id
     public static final String APPROVE = "approve";//流程审核变量
+    public static final String APPROVE_SETUP = "approveSetup";//流程节点
+    public static final String APPROVE_OPERATION = "approveOperation";//流程节点
     public static final String FLOW_STATUS = "flowStatus";//流程状态
     public static final String APPROVE_REMARK = "approveRemark";//流程审批意见
 

+ 42 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/FlowApprovePassEnum.java

@@ -0,0 +1,42 @@
+package com.qmth.teachcloud.common.enums;
+
+import java.util.Objects;
+
+/**
+ * @Description: 流程审批操作 enum
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2021/8/2
+ */
+public enum FlowApprovePassEnum {
+
+    PASS("通过"),
+
+    REJECT("驳回");
+
+    private String title;
+
+    private FlowApprovePassEnum(String title) {
+        this.title = title;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * 状态转换 toName
+     *
+     * @param title
+     * @return
+     */
+    public static String convertToName(String title) {
+        for (FlowApprovePassEnum e : FlowApprovePassEnum.values()) {
+            if (Objects.equals(title, e.getTitle())) {
+                return e.name();
+            }
+        }
+        return null;
+    }
+}