Răsfoiți Sursa

Merge branch 'dev_v3.0.0' of http://git.qmth.com.cn/wangliang/distributed-print-service into dev_v3.0.0

xiaof 3 ani în urmă
părinte
comite
c714c45486

+ 2 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/FlowApproveListResult.java

@@ -54,10 +54,10 @@ public class FlowApproveListResult implements Serializable {
     @ApiModelProperty(value = "下一级处理人id/当前处理人")
     private String pendApproveUserName;
 
-    @ApiModelProperty(value = "状态,START:已开始,AUDITING:审核中,REJECT:已驳回,END:已终止,FINISH:已结束")
+    @ApiModelProperty(value = "状态,START:待审核,AUDITING:审核中,REJECT:已驳回,END:已终止,FINISH:已结束")
     private FlowStatusEnum status;
 
-    @ApiModelProperty(value = "状态,START:已开始,AUDITING:审核中,REJECT:已驳回,END:已终止,FINISH:已结束")
+    @ApiModelProperty(value = "状态,START:待审核,AUDITING:审核中,REJECT:已驳回,END:已终止,FINISH:已结束")
     private String statusStr;
 
     @ApiModelProperty(value = "当前节点")

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TFFlowApprove.java

@@ -42,7 +42,7 @@ public class TFFlowApprove extends BaseEntity implements Serializable {
     @JsonSerialize(using = ToStringSerializer.class)
     private Long approveId;
 
-    @ApiModelProperty(value = "状态,START:已开始,AUDITING:审核中,REJECT:已驳回,END:已终止,FINISH:已结束")
+    @ApiModelProperty(value = "状态,START:待审核,AUDITING:审核中,REJECT:已驳回,END:已终止,FINISH:已结束")
     private FlowStatusEnum status;
 
     @ApiModelProperty(value = "计划步骤")

+ 37 - 23
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ActivitiServiceImpl.java

@@ -348,7 +348,7 @@ public class ActivitiServiceImpl implements ActivitiService {
                         rejectLinkMap.remove(userTask.getId());
                         tfFlowApprove.setRejectLink(rejectLinkMap.size() == 0 ? null : JacksonUtil.parseJson(rejectLinkMap));
                     }
-                } else if (approvePass == FlowApprovePassEnum.REJECT) {
+                } else if (approvePass == FlowApprovePassEnum.REJECT || approvePass == FlowApprovePassEnum.CANCEL) {
                     Optional.ofNullable(map.get(SystemConstant.APPROVE_SETUP)).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("流程驳回节点不能为空"));
                     Integer rejectSetup = Integer.parseInt(map.get(SystemConstant.APPROVE_SETUP).toString());
 
@@ -369,7 +369,8 @@ public class ActivitiServiceImpl implements ActivitiService {
                             tfFlowApprove,
                             tfFlowLog,
                             agginessMap,
-                            gson);
+                            gson,
+                            approvePass);
                 }
                 //获取流程变量
                 this.getAgginess(nextFlowTaskResult,
@@ -520,6 +521,7 @@ public class ActivitiServiceImpl implements ActivitiService {
      * @param tfFlowLog
      * @param agginessMap
      * @param gson
+     * @param approvePass
      */
     protected void approveReject(boolean multiInstance,
                                  Map<String, Object> map,
@@ -529,16 +531,17 @@ public class ActivitiServiceImpl implements ActivitiService {
                                  TFFlowApprove tfFlowApprove,
                                  TFFlowLog tfFlowLog,
                                  Map<String, CustomFlowVarDto> agginessMap,
-                                 Gson gson) {
+                                 Gson gson,
+                                 FlowApprovePassEnum approvePass) {
         if (multiInstance) {
             map.computeIfAbsent(FlowApproveOperationEnum.REJECT.getId() + id, v -> 1);
         }
         map.put(SystemConstant.APPROVE, nextFlowTaskResult.getTaskKey());
         tfFlowApprove.setSetup(nextFlowTaskResult.getSetup());
-        tfFlowApprove.setStatus(FlowStatusEnum.REJECT);
-        tfFlowLog.setApproveOperation(FlowApproveOperationEnum.REJECT);
+        tfFlowApprove.setStatus(FlowStatusEnum.convertToEnum(approvePass.name()));
+        tfFlowLog.setApproveOperation(FlowApproveOperationEnum.convertToEnum(approvePass.name()));
         CustomFlowVarDto customFlowVarDto = gson.fromJson(gson.toJson(agginessMap.get(currFlowTaskResult.getTaskKey())), CustomFlowVarDto.class);
-        if (Objects.nonNull(customFlowVarDto) && customFlowVarDto.getRejectResubmitType() == CustomFlowRejectResubmitTypeEnum.PREV_STEP) {
+        if (approvePass == FlowApprovePassEnum.REJECT && Objects.nonNull(customFlowVarDto) && customFlowVarDto.getRejectResubmitType() == CustomFlowRejectResubmitTypeEnum.PREV_STEP) {
             Map<String, FlowTaskResult> rejectLinkMap = null;
             if (Objects.nonNull(tfFlowApprove.getRejectLink())) {
                 rejectLinkMap = JacksonUtil.readJson(tfFlowApprove.getRejectLink(), Map.class);
@@ -579,7 +582,7 @@ public class ActivitiServiceImpl implements ActivitiService {
             } else {
                 nextFlowTaskResult = this.getNextFlowTaskResult(setupMap, gson, currSetup, nextFlowTaskResult);
             }
-        } else if (approvePass == FlowApprovePassEnum.REJECT) {
+        } else if (approvePass == FlowApprovePassEnum.REJECT || approvePass == FlowApprovePassEnum.CANCEL) {
             nextFlowTaskResult = this.getNextFlowTaskResult(setupMap, gson, currSetup, nextFlowTaskResult);
         }
         Optional.ofNullable(nextFlowTaskResult).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("该节点不能审批通过"));
@@ -714,44 +717,56 @@ public class ActivitiServiceImpl implements ActivitiService {
     @Override
     @Transactional
     public boolean taskApproverExchange(String userId, String taskId) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        if (Objects.equals(String.valueOf(sysUser.getId()), userId)) {
+            throw ExceptionResultEnum.ERROR.exception("不能转给自己");
+        }
         Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
         Optional.ofNullable(task).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("流程任务为空或该流程已被他人审核,请刷新再试!"));
         String flowId = task.getProcessInstanceId();
-        TFFlowApprove tfFlowApprove = tfFlowApproveService.findByFlowId(SystemConstant.convertIdToLong(flowId), Long.parseLong((String) ServletUtil.getRequestHeaderSchoolId()));
+        TFFlowApprove tfFlowApprove = tfFlowApproveService.findByFlowId(SystemConstant.convertIdToLong(flowId), sysUser.getSchoolId());
         Optional.ofNullable(tfFlowApprove).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未找到流程状态记录"));
         if (tfFlowApprove.getSetup() <= 0) {
             throw ExceptionResultEnum.ERROR.exception("流程已结束或已终止");
         }
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        if (Objects.nonNull(task) && Objects.nonNull(task.getAssignee()) && Objects.equals(task.getAssignee(), userId)) {
-            throw ExceptionResultEnum.ERROR.exception("不能转给自己");
-        }
-        Task taskUser = taskService.createTaskQuery().taskId(taskId).taskCandidateOrAssigned(userId).singleResult();
-        if (Objects.nonNull(taskUser)) {
-            throw ExceptionResultEnum.ERROR.exception("该审批人已有审批权限,无需流转");
+
+        TFCustomFlowEntity tfCustomFlowEntity = tfCustomFlowEntityService.findByFlowId(tfFlowApprove.getFlowId());
+        Map<String, Object> flowProcessVarMap = this.getFlowProcessVarMap(tfCustomFlowEntity);
+        Map<String, CustomFlowVarDto> agginessMap = (Map<String, CustomFlowVarDto>) flowProcessVarMap.get(SystemConstant.AGGINESS_MAP);
+        if (Objects.nonNull(tfFlowApprove.getTransferAssignee())) {
+            agginessMap = JacksonUtil.readJson(tfFlowApprove.getTransferAssignee(), Map.class);
         }
 
         //获取当前流程节点
         String currActivityId = task.getTaskDefinitionKey();
         BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());
         FlowNode currFlow = (FlowNode) bpmnModel.getMainProcess().getFlowElement(currActivityId);
+
         UserTask userTask = null;
         if (currFlow instanceof UserTask) {
             userTask = (UserTask) currFlow;
         }
+
+        Gson gson = new Gson();
         Integer nrOfCompletedInstances = null, nrOfInstances = null;
         boolean multiInstance = false;
-        if (currFlow.getBehavior() instanceof MultiInstanceActivityBehavior) {
+        if (currFlow.getBehavior() instanceof MultiInstanceActivityBehavior) {//会签
             nrOfCompletedInstances = (Integer) taskService.getVariable(task.getId(), DefaultInstanceConvertToMultiInstance.NR_OF_COMPLETED_INSTANCES);
             nrOfInstances = (Integer) taskService.getVariable(task.getId(), DefaultInstanceConvertToMultiInstance.NR_OF_INSTANCES);
             multiInstance = true;
-        }
 
-        TFCustomFlowEntity tfCustomFlowEntity = tfCustomFlowEntityService.findByFlowId(tfFlowApprove.getFlowId());
-        Map<String, Object> flowProcessVarMap = this.getFlowProcessVarMap(tfCustomFlowEntity);
-        Map<String, CustomFlowVarDto> agginessMap = (Map<String, CustomFlowVarDto>) flowProcessVarMap.get(SystemConstant.AGGINESS_MAP);
-        if (Objects.nonNull(tfFlowApprove.getTransferAssignee())) {
-            agginessMap = JacksonUtil.readJson(tfFlowApprove.getTransferAssignee(), Map.class);
+            CustomFlowVarDto customFlowVarDto = gson.fromJson(gson.toJson(agginessMap.get(userTask.getId())), CustomFlowVarDto.class);
+            if (Objects.nonNull(customFlowVarDto)) {
+                List<String> approveIds = customFlowVarDto.getApproveIds();
+                if (Objects.nonNull(approveIds) && approveIds.size() > 0 && approveIds.contains(userId)) {
+                    throw ExceptionResultEnum.ERROR.exception("该审批人已有审批权限,无需流转");
+                }
+            }
+        } else {//或签
+            Task taskUser = taskService.createTaskQuery().taskId(taskId).taskCandidateOrAssigned(userId).singleResult();
+            if (Objects.nonNull(taskUser)) {
+                throw ExceptionResultEnum.ERROR.exception("该审批人已有审批权限,无需流转");
+            }
         }
 
         ExamTask examTask = examTaskService.findByFlowId(SystemConstant.convertIdToLong(flowId));
@@ -761,7 +776,6 @@ public class ActivitiServiceImpl implements ActivitiService {
 
         //流程流水日志
         TFFlowLog tfFlowLog = new TFFlowLog(sysUser.getSchoolId(), sysUser.getOrgId(), examTask.getFlowId(), examTask.getId(), sysUser.getId(), sysUser.getRealName() + "转" + exchangeUser.getRealName() + "审批", FlowApproveOperationEnum.EXCHANGE, sysUser.getId(), String.valueOf(exchangeUser.getId()), tfFlowJoin.getObjectTable());
-        Gson gson = new Gson();
         CustomFlowVarDto customFlowVarDto = gson.fromJson(gson.toJson(agginessMap.get(userTask.getId())), CustomFlowVarDto.class);
         if (customFlowVarDto.getApproveIds().size() == 1) {
             customFlowVarDto.setApproveIds(new ArrayList<>(Arrays.asList(userId)));

+ 8 - 14
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -107,9 +107,6 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     @Resource
     private ExamDetailService examDetailService;
 
-    @Resource
-    private BasicTemplateService basicTemplateService;
-
     @Resource
     TBTaskService tbTaskService;
 
@@ -146,9 +143,6 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     @Resource
     RedisUtil redisUtil;
 
-    @Resource
-    TFFlowLogService tfFlowLogService;
-
     @Resource
     SysOrgService sysOrgService;
 
@@ -1052,18 +1046,18 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         TFFlowApprove tfFlowApprove = tfFlowApproveService.findByFlowId(task.getFlowId(), task.getSchoolId());
         Optional.ofNullable(tfFlowApprove).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("审核流程进度丢失,不能撤回"));
 
-//        if (!tfFlowApprove.getSetup().equals(FlowApproveSetupEnum.PRIMARY_APPROVE.getSetup())) {
-//            throw ExceptionResultEnum.ERROR.exception("当前审核节点不能撤回");
-//        }
+        if (tfFlowApprove.getSetup().intValue() != 2) {
+            throw ExceptionResultEnum.ERROR.exception("当前审核节点不能撤回");
+        }
 
-        Task flowTask = taskService.createTaskQuery().processInstanceId(String.valueOf(task.getFlowId())).singleResult();
+        List<Task> flowTaskList = taskService.createTaskQuery().processInstanceId(String.valueOf(task.getFlowId())).list();
         Map<String, Object> map = new HashMap<>();
-        map.computeIfAbsent(SystemConstant.FLOW_TASK_ID, v -> flowTask.getId());
-        map.computeIfAbsent(SystemConstant.APPROVE_OPERATION, v -> FlowApprovePassEnum.REJECT);
+        map.computeIfAbsent(SystemConstant.FLOW_TASK_ID, v -> flowTaskList.get(0).getId());
+        map.computeIfAbsent(SystemConstant.APPROVE_OPERATION, v -> FlowApprovePassEnum.CANCEL);
         map.computeIfAbsent(SystemConstant.APPROVE_REMARK, v -> "命题" + FlowApprovePassEnum.CANCEL.getTitle());
         map.computeIfAbsent(SystemConstant.APPROVE_SETUP, v -> FlowApproveSetupEnum.SUBMIT.getSetup());
-        map.computeIfAbsent(SystemConstant.APPROVE_CANCEL, v -> FlowApprovePassEnum.CANCEL);
-        map.computeIfAbsent(SystemConstant.APPROVE_CANCEL_USER, v -> SystemConstant.APPROVE_CANCEL_USER_ID);
+//        map.computeIfAbsent(SystemConstant.APPROVE_CANCEL, v -> FlowApprovePassEnum.CANCEL);
+//        map.computeIfAbsent(SystemConstant.APPROVE_CANCEL_USER, v -> SystemConstant.APPROVE_CANCEL_USER_ID);
         activitiService.taskApprove(map);
         return true;
     }

+ 15 - 15
distributed-print/src/main/java/com/qmth/distributed/print/api/TFCustomFlowController.java

@@ -145,20 +145,20 @@ public class TFCustomFlowController {
         return ResultUtil.ok(true);
     }
 
-    @ApiOperation(value = "测试启动流程")
-    @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})
-    @RequestMapping(value = "/testStart", method = RequestMethod.POST)
-    @Transactional
-    public Result testStart(@ApiParam(value = "实体id", required = true) @RequestParam String objectId,
-                            @ApiParam(value = "命题老师id", required = true) @RequestParam String approveId,
-                            @ApiParam(value = "实体表", required = true) @RequestParam TFCustomTypeEnum flowType) {
-        Map<String, Object> map = new HashMap<>();
-        map.computeIfAbsent(SystemConstant.OBJECT_ID, v -> SystemConstant.convertIdToLong(objectId));
-        map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> SystemConstant.convertIdToLong(approveId));
-        map.computeIfAbsent(SystemConstant.FLOW_TYPE, v -> flowType);
-        activitiService.customFlowStart(map);
-        return ResultUtil.ok(true);
-    }
+//    @ApiOperation(value = "测试启动流程")
+//    @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})
+//    @RequestMapping(value = "/testStart", method = RequestMethod.POST)
+//    @Transactional
+//    public Result testStart(@ApiParam(value = "实体id", required = true) @RequestParam String objectId,
+//                            @ApiParam(value = "命题老师id", required = true) @RequestParam String approveId,
+//                            @ApiParam(value = "实体表", required = true) @RequestParam TFCustomTypeEnum flowType) {
+//        Map<String, Object> map = new HashMap<>();
+//        map.computeIfAbsent(SystemConstant.OBJECT_ID, v -> SystemConstant.convertIdToLong(objectId));
+//        map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> SystemConstant.convertIdToLong(approveId));
+//        map.computeIfAbsent(SystemConstant.FLOW_TYPE, v -> flowType);
+//        activitiService.customFlowStart(map);
+//        return ResultUtil.ok(true);
+//    }
 
     @ApiOperation(value = "审批流程")
     @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})
@@ -207,7 +207,7 @@ public class TFCustomFlowController {
                        @ApiParam(value = "页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                        @ApiParam(value = "数量", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        return ResultUtil.ok(tfCustomFlowService.list(new Page<>(pageNumber, pageSize), name, SystemConstant.getHeadOrUserSchoolId(), sysUser.getOrgId()));
+        return ResultUtil.ok(tfCustomFlowService.list(new Page<>(pageNumber, pageSize), name, SystemConstant.getHeadOrUserSchoolId(), null));
     }
 
     @ApiOperation(value = "流程编辑")

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

@@ -224,9 +224,9 @@ public class SystemConstant {
 //    public static final String APPROVE_PRESIDENT_USER_IDS = "approvePresidentUserIds";//流程院长审批人列表
 //    public static final String APPROVE_PRINT_USER_IDS = "approvePrintUserIds";//印刷人员审批人列表
     public static final String APPROVE_OPERATION = "approveOperation";//流程操作
-    public static final String APPROVE_CANCEL = "cancel";//流程撤销操作
-    public static final String APPROVE_CANCEL_USER = "approveCancelUserId";//流程撤销用户id操作
-    public static final Long APPROVE_CANCEL_USER_ID = -1L;//流程撤销用户id操作
+//    public static final String APPROVE_CANCEL = "cancel";//流程撤销操作
+//    public static final String APPROVE_CANCEL_USER = "approveCancelUserId";//流程撤销用户id操作
+//    public static final Long APPROVE_CANCEL_USER_ID = -1L;//流程撤销用户id操作
 //    public static final String APPROVE_EXCHANGE_USER_ID = "approveExchangeUserId:";//转审审批人列表
     public static final String FLOW_STATUS = "flowStatus";//流程状态
     public static final String APPROVE_REMARK = "approveRemark";//流程审批意见

+ 15 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/FlowApproveOperationEnum.java

@@ -56,4 +56,19 @@ public enum FlowApproveOperationEnum {
         }
         return null;
     }
+
+    /**
+     * 状态转换 toEnum
+     *
+     * @param name
+     * @return
+     */
+    public static FlowApproveOperationEnum convertToEnum(String name) {
+        for (FlowApproveOperationEnum e : FlowApproveOperationEnum.values()) {
+            if (Objects.equals(name, e.name())) {
+                return e;
+            }
+        }
+        return null;
+    }
 }

+ 16 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/FlowStatusEnum.java

@@ -11,7 +11,7 @@ import java.util.Objects;
  */
 public enum FlowStatusEnum {
 
-    START("已开始"),
+    START("待审核"),
 
     AUDITING("审核中"),
 
@@ -47,4 +47,19 @@ public enum FlowStatusEnum {
         }
         return null;
     }
+
+    /**
+     * 状态转换 toEnum
+     *
+     * @param name
+     * @return
+     */
+    public static FlowStatusEnum convertToEnum(String name) {
+        for (FlowStatusEnum e : FlowStatusEnum.values()) {
+            if (Objects.equals(name, e.name())) {
+                return e;
+            }
+        }
+        return null;
+    }
 }