浏览代码

流程修改

wangliang 3 年之前
父节点
当前提交
0b9e2bee6a

+ 155 - 130
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ActivitiServiceImpl.java

@@ -1,6 +1,7 @@
 package com.qmth.distributed.print.business.service.impl;
 package com.qmth.distributed.print.business.service.impl;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qmth.boot.api.exception.ApiException;
 import com.qmth.distributed.print.business.entity.ExamTask;
 import com.qmth.distributed.print.business.entity.ExamTask;
 import com.qmth.distributed.print.business.entity.TFFlowApprove;
 import com.qmth.distributed.print.business.entity.TFFlowApprove;
 import com.qmth.distributed.print.business.entity.TFFlowApproveLog;
 import com.qmth.distributed.print.business.entity.TFFlowApproveLog;
@@ -10,6 +11,8 @@ import com.qmth.teachcloud.common.contant.SpringContextHolder;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.*;
 import com.qmth.teachcloud.common.enums.*;
+import com.qmth.teachcloud.common.util.RedisUtil;
+import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.activiti.bpmn.model.BpmnModel;
 import org.activiti.bpmn.model.BpmnModel;
 import org.activiti.bpmn.model.FlowNode;
 import org.activiti.bpmn.model.FlowNode;
@@ -72,6 +75,9 @@ public class ActivitiServiceImpl implements ActivitiService {
     @Resource
     @Resource
     TFFlowApproveLogService tfFlowApproveLogService;
     TFFlowApproveLogService tfFlowApproveLogService;
 
 
+    @Resource
+    RedisUtil redisUtil;
+
     /**
     /**
      * 注册流程
      * 注册流程
      *
      *
@@ -206,144 +212,163 @@ public class ActivitiServiceImpl implements ActivitiService {
     @Override
     @Override
     @Transactional
     @Transactional
     public void taskApprove(Map<String, Object> map) {
     public void taskApprove(Map<String, Object> map) {
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        if (Objects.isNull(map.get(SystemConstant.FLOW_TASK_ID))) {
-            throw ExceptionResultEnum.ERROR.exception("流程任务id不能为空");
-        }
-        String flowTaskId = (String) map.get(SystemConstant.FLOW_TASK_ID);
-        Task task = taskService.createTaskQuery().taskId(flowTaskId).singleResult();
-        if (Objects.isNull(task)) {
-            throw ExceptionResultEnum.ERROR.exception("流程任务为空");
-        }
-        String processInstanceId = task.getProcessInstanceId();
-        QueryWrapper<ExamTask> examTaskQueryWrapper = new QueryWrapper<>();
-        examTaskQueryWrapper.lambda().eq(ExamTask::getFlowId, Long.parseLong(processInstanceId));
-        ExamTask examTask = examTaskService.getOne(examTaskQueryWrapper);
+        String flowTaskId = null;
+        try {
+            SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+            if (Objects.isNull(map.get(SystemConstant.FLOW_TASK_ID))) {
+                throw ExceptionResultEnum.ERROR.exception("流程任务id不能为空");
+            }
+            flowTaskId = (String) map.get(SystemConstant.FLOW_TASK_ID);
+            if (redisUtil.lock(SystemConstant.REDIS_LOCK_FLOW_TASK_PREFIX + flowTaskId, SystemConstant.REDIS_LOCK_FLOW_TASK_TIME_OUT)) {
+                Task task = taskService.createTaskQuery().taskId(flowTaskId).singleResult();
+                if (Objects.isNull(task)) {
+                    throw ExceptionResultEnum.ERROR.exception("流程任务为空");
+                }
+                String processInstanceId = task.getProcessInstanceId();
+                QueryWrapper<ExamTask> examTaskQueryWrapper = new QueryWrapper<>();
+                examTaskQueryWrapper.lambda().eq(ExamTask::getFlowId, Long.parseLong(processInstanceId));
+                ExamTask examTask = examTaskService.getOne(examTaskQueryWrapper);
 
 
-        String processDefinitionId = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult().getProcessDefinitionId();
-        ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService).getDeployedProcessDefinition(processDefinitionId);
-        //获取当前流程节点
-        String currActivityId = task.getTaskDefinitionKey();
-        BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());
-        FlowNode currFlow = (FlowNode) bpmnModel.getMainProcess().getFlowElement(currActivityId);
+                String processDefinitionId = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult().getProcessDefinitionId();
+                ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService).getDeployedProcessDefinition(processDefinitionId);
+                //获取当前流程节点
+                String currActivityId = task.getTaskDefinitionKey();
+                BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());
+                FlowNode currFlow = (FlowNode) bpmnModel.getMainProcess().getFlowElement(currActivityId);
 
 
-        //流程审批
-        QueryWrapper<TFFlowApprove> tfFlowApproveQueryWrapper = new QueryWrapper<>();
-        tfFlowApproveQueryWrapper.lambda().eq(TFFlowApprove::getFlowId, processInstanceId);
-        TFFlowApprove tfFlowApprove = tfFlowApproveService.getOne(tfFlowApproveQueryWrapper);
+                //流程审批
+                QueryWrapper<TFFlowApprove> tfFlowApproveQueryWrapper = new QueryWrapper<>();
+                tfFlowApproveQueryWrapper.lambda().eq(TFFlowApprove::getFlowId, processInstanceId);
+                TFFlowApprove tfFlowApprove = tfFlowApproveService.getOne(tfFlowApproveQueryWrapper);
 
 
-        //流程审批记录
-        QueryWrapper<TFFlowApproveLog> tfFlowApproveLogQueryWrapper = new QueryWrapper<>();
-        tfFlowApproveLogQueryWrapper.lambda().eq(TFFlowApproveLog::getFlowId, processInstanceId)
-                .eq(TFFlowApproveLog::getTaskId, examTask.getId());
-        TFFlowApproveLog tfFlowApproveLog = tfFlowApproveLogService.getOne(tfFlowApproveLogQueryWrapper);
+                //流程审批记录
+                QueryWrapper<TFFlowApproveLog> tfFlowApproveLogQueryWrapper = new QueryWrapper<>();
+                tfFlowApproveLogQueryWrapper.lambda().eq(TFFlowApproveLog::getFlowId, processInstanceId)
+                        .eq(TFFlowApproveLog::getTaskId, examTask.getId());
+                TFFlowApproveLog tfFlowApproveLog = tfFlowApproveLogService.getOne(tfFlowApproveLogQueryWrapper);
 
 
-        TFFlowLog tfFlowLog = null;
-        if (currFlow instanceof UserTask) {
-            UserTask userTask = (UserTask) currFlow;
-            //广东医科大学流程
-            if (Objects.nonNull(processDefinitionEntity) && processDefinitionEntity.getKey().contains(SystemConstant.GDYKDX_FLOW_KEY)) {
-                String remark = Objects.nonNull(map.get(SystemConstant.APPROVE_REMARK)) ? map.get(SystemConstant.APPROVE_REMARK).toString() : null;
-                tfFlowLog = new TFFlowLog(sysUser.getSchoolId(), sysUser.getOrgId(), 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("不能提交他人的任务");
-                    }
-                    if (Objects.isNull(tfFlowApproveLog)) {
-                        tfFlowApproveLog = new TFFlowApproveLog(sysUser.getSchoolId(), sysUser.getOrgId(), Long.parseLong(processInstanceId), examTask.getId(), sysUser.getId(), sysUser.getId());
-                    }
-                    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) {//主任提交
-                    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);
-                    FlowApproveVariableEnum approve = approvePass == FlowApprovePassEnum.PASS ? FlowApproveVariableEnum.PRIMARY_APPROVE : FlowApproveVariableEnum.PRIMARY_REJECT;
-                    tfFlowLog.setApproveSetup(FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE.getSetup());
-                    tfFlowApproveLog.setPrimaryApproveId(sysUser.getId());
-                    tfFlowApproveLog.setPrimaryApproveRemark(remark);
-                    if (approve == FlowApproveVariableEnum.PRIMARY_REJECT) {//驳回命题
-                        tfFlowLog.setApproveOperation(FlowApproveOperationEnum.REJECT);
-                        tfFlowApproveLog.setPrimaryApproveOperation(FlowApproveOperationEnum.REJECT);
-                        tfFlowApprove.setStatus(FlowStatusEnum.REJECT);
-                        tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.SUBMIT.getSetup());
-                    } else if (approve == FlowApproveVariableEnum.PRIMARY_APPROVE) {//提交
-                        tfFlowLog.setApproveOperation(FlowApproveOperationEnum.APPROVE);
-                        tfFlowApproveLog.setPrimaryApproveOperation(FlowApproveOperationEnum.APPROVE);
-                        tfFlowApprove.setStatus(FlowStatusEnum.AUDITING);
-                        tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.SECOND_APPROVE.getSetup());
-                    } else {
-                        throw ExceptionResultEnum.ERROR.exception("流程变量值错误");
-                    }
-                    map.computeIfAbsent(SystemConstant.APPROVE, v -> approve.getId());
-                } else if (setupEnum == FlowGdykdxApproveSetupEnum.SECOND_APPROVE) {//院长提交
-                    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);
-                    FlowApproveVariableEnum approve = null;
-                    tfFlowApproveLog.setSecondApproveId(sysUser.getId());
-                    tfFlowApproveLog.setSecondApproveRemark(remark);
-                    if (approvePass == FlowApprovePassEnum.PASS) {
-                        approve = FlowApproveVariableEnum.SECOND_APPROVE;
-                    } else {
-                        if (Objects.isNull(map.get(SystemConstant.APPROVE_SETUP))) {
-                            throw ExceptionResultEnum.ERROR.exception("流程驳回节点不能为空");
+                TFFlowLog tfFlowLog = null;
+                if (currFlow instanceof UserTask) {
+                    UserTask userTask = (UserTask) currFlow;
+                    //广东医科大学流程
+                    if (Objects.nonNull(processDefinitionEntity) && processDefinitionEntity.getKey().contains(SystemConstant.GDYKDX_FLOW_KEY)) {
+                        String remark = Objects.nonNull(map.get(SystemConstant.APPROVE_REMARK)) ? map.get(SystemConstant.APPROVE_REMARK).toString() : null;
+                        tfFlowLog = new TFFlowLog(sysUser.getSchoolId(), sysUser.getOrgId(), 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("不能提交他人的任务");
+                            }
+                            if (Objects.isNull(tfFlowApproveLog)) {
+                                tfFlowApproveLog = new TFFlowApproveLog(sysUser.getSchoolId(), sysUser.getOrgId(), Long.parseLong(processInstanceId), examTask.getId(), sysUser.getId(), sysUser.getId());
+                            }
+                            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) {//主任提交
+                            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);
+                            FlowApproveVariableEnum approve = approvePass == FlowApprovePassEnum.PASS ? FlowApproveVariableEnum.PRIMARY_APPROVE : FlowApproveVariableEnum.PRIMARY_REJECT;
+                            tfFlowLog.setApproveSetup(FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE.getSetup());
+                            tfFlowApproveLog.setPrimaryApproveId(sysUser.getId());
+                            tfFlowApproveLog.setPrimaryApproveRemark(remark);
+                            if (approve == FlowApproveVariableEnum.PRIMARY_REJECT) {//驳回命题
+                                tfFlowLog.setApproveOperation(FlowApproveOperationEnum.REJECT);
+                                tfFlowApproveLog.setPrimaryApproveOperation(FlowApproveOperationEnum.REJECT);
+                                tfFlowApprove.setStatus(FlowStatusEnum.REJECT);
+                                tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.SUBMIT.getSetup());
+                            } else if (approve == FlowApproveVariableEnum.PRIMARY_APPROVE) {//提交
+                                tfFlowLog.setApproveOperation(FlowApproveOperationEnum.APPROVE);
+                                tfFlowApproveLog.setPrimaryApproveOperation(FlowApproveOperationEnum.APPROVE);
+                                tfFlowApprove.setStatus(FlowStatusEnum.AUDITING);
+                                tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.SECOND_APPROVE.getSetup());
+                            } else {
+                                throw ExceptionResultEnum.ERROR.exception("流程变量值错误");
+                            }
+                            map.computeIfAbsent(SystemConstant.APPROVE, v -> approve.getId());
+                        } else if (setupEnum == FlowGdykdxApproveSetupEnum.SECOND_APPROVE) {//院长提交
+                            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);
+                            FlowApproveVariableEnum approve = null;
+                            tfFlowApproveLog.setSecondApproveId(sysUser.getId());
+                            tfFlowApproveLog.setSecondApproveRemark(remark);
+                            if (approvePass == FlowApprovePassEnum.PASS) {
+                                approve = FlowApproveVariableEnum.SECOND_APPROVE;
+                            } 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 ? FlowApproveVariableEnum.SECOND_REJECT_ONE : FlowApproveVariableEnum.SECOND_REJECT_TWO;
+                            }
+                            tfFlowLog.setApproveSetup(FlowGdykdxApproveSetupEnum.SECOND_APPROVE.getSetup());
+                            if (approve == FlowApproveVariableEnum.SECOND_REJECT_ONE) {//驳回命题
+                                tfFlowLog.setApproveOperation(FlowApproveOperationEnum.REJECT);
+                                tfFlowApproveLog.setSecondApproveOperation(FlowApproveOperationEnum.REJECT);
+                                tfFlowApprove.setStatus(FlowStatusEnum.REJECT);
+                                tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.SUBMIT.getSetup());
+                            } else if (approve == FlowApproveVariableEnum.SECOND_REJECT_TWO) {//驳回主任
+                                tfFlowLog.setApproveOperation(FlowApproveOperationEnum.REJECT);
+                                tfFlowApproveLog.setSecondApproveOperation(FlowApproveOperationEnum.REJECT);
+                                tfFlowApprove.setStatus(FlowStatusEnum.REJECT);
+                                tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE.getSetup());
+                            } else if (approve == FlowApproveVariableEnum.SECOND_APPROVE) {//提交
+                                tfFlowLog.setApproveOperation(FlowApproveOperationEnum.APPROVE);
+                                tfFlowApproveLog.setSecondApproveOperation(FlowApproveOperationEnum.APPROVE);
+                                tfFlowApprove.setStatus(FlowStatusEnum.FINISH);
+                                tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.END.getSetup());
+                            } else {
+                                throw ExceptionResultEnum.ERROR.exception("流程变量值错误");
+                            }
+                            FlowApproveVariableEnum finalApprove = approve;
+                            map.computeIfAbsent(SystemConstant.APPROVE, v -> finalApprove.getId());
                         }
                         }
-                        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 ? FlowApproveVariableEnum.SECOND_REJECT_ONE : FlowApproveVariableEnum.SECOND_REJECT_TWO;
-                    }
-                    tfFlowLog.setApproveSetup(FlowGdykdxApproveSetupEnum.SECOND_APPROVE.getSetup());
-                    if (approve == FlowApproveVariableEnum.SECOND_REJECT_ONE) {//驳回命题
-                        tfFlowLog.setApproveOperation(FlowApproveOperationEnum.REJECT);
-                        tfFlowApproveLog.setSecondApproveOperation(FlowApproveOperationEnum.REJECT);
-                        tfFlowApprove.setStatus(FlowStatusEnum.REJECT);
-                        tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.SUBMIT.getSetup());
-                    } else if (approve == FlowApproveVariableEnum.SECOND_REJECT_TWO) {//驳回主任
-                        tfFlowLog.setApproveOperation(FlowApproveOperationEnum.REJECT);
-                        tfFlowApproveLog.setSecondApproveOperation(FlowApproveOperationEnum.REJECT);
-                        tfFlowApprove.setStatus(FlowStatusEnum.REJECT);
-                        tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.PRIMARY_APPROVE.getSetup());
-                    } else if (approve == FlowApproveVariableEnum.SECOND_APPROVE) {//提交
-                        tfFlowLog.setApproveOperation(FlowApproveOperationEnum.APPROVE);
-                        tfFlowApproveLog.setSecondApproveOperation(FlowApproveOperationEnum.APPROVE);
-                        tfFlowApprove.setStatus(FlowStatusEnum.FINISH);
-                        tfFlowApprove.setSetup(FlowGdykdxApproveSetupEnum.END.getSetup());
-                    } else {
-                        throw ExceptionResultEnum.ERROR.exception("流程变量值错误");
+                        tfFlowApprove.updateInfo(sysUser.getId());
+                        tfFlowApproveLog.updateInfo(sysUser.getId());
                     }
                     }
-                    FlowApproveVariableEnum finalApprove = approve;
-                    map.computeIfAbsent(SystemConstant.APPROVE, v -> finalApprove.getId());
                 }
                 }
-                tfFlowApprove.updateInfo(sysUser.getId());
-                tfFlowApproveLog.updateInfo(sysUser.getId());
+                tfFlowApprove.setApproveId(sysUser.getId());
+                //当前实例的执行到哪个节点
+                taskService.complete(String.valueOf(flowTaskId), map);
+                tfFlowApproveService.saveOrUpdate(tfFlowApprove);
+                if (Objects.nonNull(tfFlowLog)) {
+                    tfFlowLogService.save(tfFlowLog);
+                }
+                if (Objects.nonNull(tfFlowApproveLog)) {
+                    tfFlowApproveLogService.saveOrUpdate(tfFlowApproveLog);
+                }
+            } else {
+                throw ExceptionResultEnum.ERROR.exception("正在审批中,请稍候再试!");
+            }
+        } catch (Exception e) {
+            log.error("请求出错", e);
+            e.printStackTrace();
+            if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        } finally {
+            if (Objects.nonNull(flowTaskId)) {
+                redisUtil.releaseLock(SystemConstant.REDIS_LOCK_FLOW_TASK_PREFIX + flowTaskId);
             }
             }
-        }
-        tfFlowApprove.setApproveId(sysUser.getId());
-        //当前实例的执行到哪个节点
-        taskService.complete(String.valueOf(flowTaskId), map);
-        tfFlowApproveService.saveOrUpdate(tfFlowApprove);
-        if (Objects.nonNull(tfFlowLog)) {
-            tfFlowLogService.save(tfFlowLog);
-        }
-        if (Objects.nonNull(tfFlowApproveLog)) {
-            tfFlowApproveLogService.saveOrUpdate(tfFlowApproveLog);
         }
         }
     }
     }
 }
 }

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

@@ -74,7 +74,7 @@ public class SystemConstant {
     public static final String SCHOOL_CODE = "wdfx";
     public static final String SCHOOL_CODE = "wdfx";
     public static final String ADMIN_CODE = "admin";
     public static final String ADMIN_CODE = "admin";
     public static final String AUTH = "auth";//命题老师id
     public static final String AUTH = "auth";//命题老师id
-//    public static final int MAX_RETRY_CREATE_PDF_COUNT = 5;
+    //    public static final int MAX_RETRY_CREATE_PDF_COUNT = 5;
     //英文字母、数字、中文括号、英文括号、下划线(_)、减号(-)、中文横线(—)
     //英文字母、数字、中文括号、英文括号、下划线(_)、减号(-)、中文横线(—)
     public static final String REGULAR_EXPRESSION_OF_CODE = "[a-zA-Z0-9](\\w+)?-?(\\w+)?—?(\\w+)?(\\((\\w+)?-?(\\w+)?—?(\\w+)?\\))?(\\((\\w+)?-?(\\w+)?—?(\\w+)?\\))?(\\w+)?";
     public static final String REGULAR_EXPRESSION_OF_CODE = "[a-zA-Z0-9](\\w+)?-?(\\w+)?—?(\\w+)?(\\((\\w+)?-?(\\w+)?—?(\\w+)?\\))?(\\((\\w+)?-?(\\w+)?—?(\\w+)?\\))?(\\w+)?";
     public static final String SYS_USER = "sysUser";
     public static final String SYS_USER = "sysUser";
@@ -195,6 +195,8 @@ public class SystemConstant {
     public static final String APPROVE_OPERATION = "approveOperation";//流程节点
     public static final String APPROVE_OPERATION = "approveOperation";//流程节点
     public static final String FLOW_STATUS = "flowStatus";//流程状态
     public static final String FLOW_STATUS = "flowStatus";//流程状态
     public static final String APPROVE_REMARK = "approveRemark";//流程审批意见
     public static final String APPROVE_REMARK = "approveRemark";//流程审批意见
+    public static final String REDIS_LOCK_FLOW_TASK_PREFIX = "redis:lock:flow:task";//流程节点锁
+    public static final long REDIS_LOCK_FLOW_TASK_TIME_OUT = 60L * 2;
 
 
     /**
     /**
      * 初始化附件文件路径
      * 初始化附件文件路径