wangliang 1 tahun lalu
induk
melakukan
b433a390f8

+ 4 - 9
sop-business/src/main/java/com/qmth/sop/business/activiti/listener/ProcessEventListener.java

@@ -7,7 +7,10 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qmth.sop.business.bean.dto.FlowRejectSequenceDto;
 import com.qmth.sop.business.bean.result.*;
 import com.qmth.sop.business.entity.*;
-import com.qmth.sop.business.service.*;
+import com.qmth.sop.business.service.SysMessageService;
+import com.qmth.sop.business.service.TFCustomFlowEntityService;
+import com.qmth.sop.business.service.TFCustomFlowService;
+import com.qmth.sop.business.service.TSJobRemindService;
 import com.qmth.sop.business.util.SmsSendUtil;
 import com.qmth.sop.common.contant.SpringContextHolder;
 import com.qmth.sop.common.contant.SystemConstant;
@@ -53,8 +56,6 @@ public class ProcessEventListener implements ActivitiEventListener, Serializable
             case PROCESS_COMPLETED:
                 // 流程结束
                 log.info("流程结束_PROCESS_COMPLETED:ProcessInstanceId:{},ExecutionId:{},ProcessDefinitionId:{}", event.getProcessInstanceId(), event.getExecutionId(), event.getProcessDefinitionId());
-                TBCrmService tbCrmService = SpringContextHolder.getBean(TBCrmService.class);
-                TFFlowApproveService tfFlowApproveService = SpringContextHolder.getBean(TFFlowApproveService.class);
                 HistoryService historyService = SpringContextHolder.getBean(HistoryService.class);
 
                 List<HistoricVariableInstance> historicVariableInstanceList = historyService.createHistoricVariableInstanceQuery().processInstanceId(event.getProcessInstanceId()).list();
@@ -82,12 +83,6 @@ public class ProcessEventListener implements ActivitiEventListener, Serializable
                         }
                     }
                     this.sendFlowFinishSms(tfCustomFlow.getType(), tfCustomFlowEntity, tfFlowApprove.getStatus(), tfFlowLog);
-                    if (tfCustomFlow.getType() == TFCustomTypeEnum.OFFICE_SOP_FLOW || tfCustomFlow.getType() == TFCustomTypeEnum.CLOUD_MARK_SOP_FLOW) {
-                        int count = tfFlowApproveService.findFlowPassageSopByCrmNo(tfCustomFlowEntity.getCrmNo());
-                        if (count == 0) {
-                            tbCrmService.updateCrmStatus(tfCustomFlowEntity.getCrmNo(), CrmStatusEnum.FINISH);
-                        }
-                    }
                 }
                 break;
             case TASK_CREATED:

+ 8 - 0
sop-business/src/main/java/com/qmth/sop/business/activiti/service/ActivitiService.java

@@ -56,6 +56,14 @@ public interface ActivitiService {
      */
     public Map<String, Object> taskApprove(FlowApproveParam flowApproveParam) throws InterruptedException;
 
+    /**
+     * 审批任务
+     *
+     * @param flowApproveParam
+     * @return
+     */
+    public Map<String, Object> taskApproveCommon(FlowApproveParam flowApproveParam) throws InterruptedException;
+
     /**
      * 获取流程表单属性接口
      *

+ 45 - 14
sop-business/src/main/java/com/qmth/sop/business/activiti/service/impl/ActivitiServiceImpl.java

@@ -183,8 +183,33 @@ public class ActivitiServiceImpl implements ActivitiService {
      * @return
      */
     @Override
-    @Transactional
     public Map<String, Object> taskApprove(FlowApproveParam flowApproveParam) throws InterruptedException {
+        ActivitiService activitiService = SpringContextHolder.getBean(ActivitiService.class);
+        Map<String, Object> map = activitiService.taskApproveCommon(flowApproveParam);
+
+        TFCustomFlow tfCustomFlow = (TFCustomFlow) map.get(SystemConstant.FLOW_CUSTOM);
+        Optional.ofNullable(tfCustomFlow).orElseThrow(() -> ExceptionResultEnum.FLOW_CUSTOM_NO_DATA.exception());
+
+        TFCustomFlowEntity tfCustomFlowEntity = (TFCustomFlowEntity) map.get(SystemConstant.FLOW_ENTITY);
+        Optional.ofNullable(tfCustomFlowEntity).orElseThrow(() -> ExceptionResultEnum.FLOW_ENTITY_NO_DATA.exception());
+
+        if (tfCustomFlow.getType() == TFCustomTypeEnum.OFFICE_SOP_FLOW || tfCustomFlow.getType() == TFCustomTypeEnum.CLOUD_MARK_SOP_FLOW) {
+            int count = tfFlowApproveService.findFlowPassageSopByCrmNo(tfCustomFlowEntity.getCrmNo());
+            if (count == 0) {
+                tbCrmService.updateCrmStatus(tfCustomFlowEntity.getCrmNo(), CrmStatusEnum.FINISH);
+            }
+        }
+        return map;
+    }
+
+    /**
+     * 审批任务
+     *
+     * @param flowApproveParam
+     * @return
+     */
+    @Transactional
+    public Map<String, Object> taskApproveCommon(FlowApproveParam flowApproveParam) throws InterruptedException {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         Map<String, Object> map = new HashMap<>();
         List<String> approveUserIds = flowApproveParam.getApproveUserIds();
@@ -273,13 +298,14 @@ public class ActivitiServiceImpl implements ActivitiService {
                             currFlowTaskResult.getSetup(), Long.parseLong(processFlowId),
                             Long.parseLong(task.getId()), tfCustomFlowEntity.getId(), StringUtils.join(approveUserIds, SystemConstant.LIST_JOIN_SPLIT));
                     if (flowApproveParam.getApprove() == FlowApprovePassEnum.PASS || flowApproveParam.getApprove() == FlowApprovePassEnum.DRAFT || flowApproveParam.getApprove() == FlowApprovePassEnum.START) {
+                        boolean dingExceptionNoPass = false;
                         if (Objects.nonNull(flowApproveParam.getSetup())) {
                             currSetup = flowApproveParam.getSetup();
                         } else {
                             if (tfCustomFlow.getType() == TFCustomTypeEnum.DING_EXCEPTION_FLOW && currSetup == 2 && Objects.nonNull(flowApproveParam.getApproveRemark()) && Objects.equals(DingExceptionApproveEnum.NO_PASS.getTitle(), flowApproveParam.getApproveRemark())) {
                                 currSetup = 0;
                                 nrOfCompletedInstances = nrOfInstances;
-                                multiInstance = false;
+                                dingExceptionNoPass = true;
                             } else {
                                 currSetup = currSetup == setupMap.size() - 1 ? 0 : currSetup + 1;
                             }
@@ -303,6 +329,9 @@ public class ActivitiServiceImpl implements ActivitiService {
                                 map,
                                 flowApproveParam.getApprove(),
                                 flowApproveParam.getApproveRemark());
+                        if (dingExceptionNoPass) {
+                            map.put(FlowApproveOperationEnum.REJECT.getId() + currFlowTaskResult.getSetup(), 1);
+                        }
                         map.put(SystemConstant.ASSIGNEE + nextFlowTaskResult.getSetup(), approveUserIds);
                         map.put(SystemConstant.DEFAULT_ASSIGNEE_LIST + nextFlowTaskResult.getSetup(), approveUserIds);
                     } else if (flowApproveParam.getApprove() == FlowApprovePassEnum.REJECT || flowApproveParam.getApprove() == FlowApprovePassEnum.CANCEL) {
@@ -1050,21 +1079,23 @@ public class ActivitiServiceImpl implements ActivitiService {
                             String approveRemark) {
         if (multiInstance) {
             map.computeIfAbsent(FlowApproveOperationEnum.REJECT.getId() + currFlowTaskResult.getSetup(), v -> 0);
-        } else {
-            map.computeIfAbsent(FlowApproveOperationEnum.REJECT.getId() + currFlowTaskResult.getSetup(), v -> 1);
         }
         if (currFlowTaskResult.getSetup().intValue() == setupMap.size() - 1) {
-            if (multiInstance && Objects.nonNull(nrOfCompletedInstances)
-                    && Objects.nonNull(nrOfInstances)
-                    && nrOfCompletedInstances.intValue() == nrOfInstances.intValue()) {
-                tfFlowApprove.setStatus(FlowStatusEnum.FINISH);
-                tfFlowApprove.setSetup(FlowApproveSetupEnum.FINISH.getSetup());
-            } else if (!multiInstance) {
-                tfFlowApprove.setStatus(FlowStatusEnum.FINISH);
-                tfFlowApprove.setSetup(FlowApproveSetupEnum.FINISH.getSetup());
+            if (approvePass == FlowApprovePassEnum.DRAFT) {
+                tfFlowApprove.setStatus(FlowStatusEnum.valueOf(approvePass.name()));
             } else {
-                tfFlowApprove.setStatus(FlowStatusEnum.AUDITING);
-                tfFlowApprove.setSetup(nextFlowTaskResult.getSetup());
+                if (multiInstance && Objects.nonNull(nrOfCompletedInstances)
+                        && Objects.nonNull(nrOfInstances)
+                        && nrOfCompletedInstances.intValue() == nrOfInstances.intValue()) {
+                    tfFlowApprove.setStatus(FlowStatusEnum.FINISH);
+                    tfFlowApprove.setSetup(FlowApproveSetupEnum.FINISH.getSetup());
+                } else if (!multiInstance) {
+                    tfFlowApprove.setStatus(FlowStatusEnum.FINISH);
+                    tfFlowApprove.setSetup(FlowApproveSetupEnum.FINISH.getSetup());
+                } else {
+                    tfFlowApprove.setStatus(FlowStatusEnum.AUDITING);
+                    tfFlowApprove.setSetup(nextFlowTaskResult.getSetup());
+                }
             }
         } else {
             if (approvePass == FlowApprovePassEnum.DRAFT || approvePass == FlowApprovePassEnum.START) {