Selaa lähdekoodia

update 优化 调整流程监听

疯狂的狮子Li 1 vuosi sitten
vanhempi
commit
281d0d336a

+ 20 - 10
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java

@@ -13,21 +13,11 @@ public interface FlowConstant {
      */
     String INITIATOR = "initiator";
 
-    /**
-     * 流程实例id
-     */
-    String PROCESS_INSTANCE_ID = "processInstanceId";
-
     /**
      * 业务id
      */
     String BUSINESS_ID = "businessId";
 
-    /**
-     * 任务id
-     */
-    String TASK_ID = "taskId";
-
     /**
      * 委托
      */
@@ -63,4 +53,24 @@ public interface FlowConstant {
      */
     Long FLOW_CATEGORY_ID = 100L;
 
+    /**
+     * 是否为申请人提交常量
+     */
+    String SUBMIT = "submit";
+
+    /**
+     * 抄送常量
+     */
+    String FLOW_COPY_LIST = "flowCopyList";
+
+    /**
+     * 消息类型常量
+     */
+    String MESSAGE_TYPE = "messageType";
+
+    /**
+     * 消息通知常量
+     */
+    String MESSAGE_NOTICE = "messageNotice";
+
 }

+ 20 - 13
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java

@@ -1,6 +1,7 @@
 package org.dromara.workflow.listener;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ObjectUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -14,6 +15,7 @@ import org.dromara.warm.flow.core.listener.GlobalListener;
 import org.dromara.warm.flow.core.listener.ListenerVariable;
 import org.dromara.warm.flow.orm.entity.FlowTask;
 import org.dromara.workflow.common.ConditionalOnEnable;
+import org.dromara.workflow.common.constant.FlowConstant;
 import org.dromara.workflow.common.enums.TaskStatusEnum;
 import org.dromara.workflow.domain.bo.FlowCopyBo;
 import org.dromara.workflow.handler.FlowProcessEventHandler;
@@ -37,7 +39,7 @@ import java.util.Map;
 @RequiredArgsConstructor
 public class WorkflowGlobalListener implements GlobalListener {
 
-    private final IFlwTaskService taskService;
+    private final IFlwTaskService flwTaskService;
     private final IFlwInstanceService instanceService;
     private final FlowProcessEventHandler flowProcessEventHandler;
     private final IFlwCommonService flwCommonService;
@@ -51,11 +53,19 @@ public class WorkflowGlobalListener implements GlobalListener {
     public void create(ListenerVariable listenerVariable) {
         Instance instance = listenerVariable.getInstance();
         Definition definition = listenerVariable.getDefinition();
+        FlowParams flowParams = listenerVariable.getFlowParams();
+        Map<String, Object> variable = flowParams.getVariable();
         Task task = listenerVariable.getTask();
         if (task != null) {
             // 判断流程状态(发布审批中事件)
             flowProcessEventHandler.processCreateTaskHandler(definition.getFlowCode(), instance, task.getId());
         }
+        Boolean submit = MapUtil.getBool(variable, FlowConstant.SUBMIT);
+        if (submit != null && submit) {
+            flowProcessEventHandler.processHandler(definition.getFlowCode(), instance, instance.getFlowStatus(), variable, true);
+        }
+        variable.remove(FlowConstant.SUBMIT);
+        flowParams.variable(variable);
     }
 
     /**
@@ -111,8 +121,6 @@ public class WorkflowGlobalListener implements GlobalListener {
     public void finish(ListenerVariable listenerVariable) {
         Instance instance = listenerVariable.getInstance();
         Definition definition = listenerVariable.getDefinition();
-        String businessId = instance.getBusinessId();
-        String flowStatus = instance.getFlowStatus();
         Map<String, Object> params = new HashMap<>();
         FlowParams flowParams = listenerVariable.getFlowParams();
         if (ObjectUtil.isNotNull(flowParams)) {
@@ -128,25 +136,24 @@ public class WorkflowGlobalListener implements GlobalListener {
         if (StringUtils.isNotBlank(status)) {
             flowProcessEventHandler.processHandler(definition.getFlowCode(), instance, status, params, false);
         }
-
+        Map<String, Object> variable = listenerVariable.getVariable();
         // 只有办理或者退回的时候才执行消息通知和抄送
         if (TaskStatusEnum.PASS.getStatus().equals(flowParams.getHisStatus())
             || TaskStatusEnum.BACK.getStatus().equals(flowParams.getHisStatus())) {
             Task task = listenerVariable.getTask();
-            Map<String, Object> variable = listenerVariable.getVariable();
-            List<FlowCopyBo> flowCopyList = (List<FlowCopyBo>) variable.get("flowCopyList");
-            List<String> messageType = (List<String>) variable.get("messageType");
-            String notice = (String) variable.get("notice");
+            List<FlowCopyBo> flowCopyList = (List<FlowCopyBo>) variable.get(FlowConstant.FLOW_COPY_LIST);
+            List<String> messageType = (List<String>) variable.get(FlowConstant.MESSAGE_TYPE);
+            String notice = (String) variable.get(FlowConstant.MESSAGE_NOTICE);
 
             // 添加抄送人
-            taskService.setCopy(task, flowCopyList);
-            variable.remove("flowCopyList");
+            flwTaskService.setCopy(task, flowCopyList);
+            variable.remove(FlowConstant.FLOW_COPY_LIST);
 
             // 消息通知
             if (CollUtil.isNotEmpty(messageType)) {
                 flwCommonService.sendMessage(definition.getFlowName(), instance.getId(), messageType, notice);
-                variable.remove("messageType");
-                variable.remove("notice");
+                variable.remove(FlowConstant.MESSAGE_TYPE);
+                variable.remove(FlowConstant.MESSAGE_NOTICE);
             }
         }
     }
@@ -164,7 +171,7 @@ public class WorkflowGlobalListener implements GlobalListener {
             return flowStatus;
         } else {
             Long instanceId = instance.getId();
-            List<FlowTask> flowTasks = taskService.selectByInstId(instanceId);
+            List<FlowTask> flowTasks = flwTaskService.selectByInstId(instanceId);
             if (CollUtil.isEmpty(flowTasks)) {
                 String status = BusinessStatusEnum.FINISH.getStatus();
                 // 更新流程状态为已完成

+ 0 - 2
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java

@@ -25,7 +25,6 @@ import org.dromara.warm.flow.core.entity.Definition;
 import org.dromara.warm.flow.core.entity.Instance;
 import org.dromara.warm.flow.core.entity.Task;
 import org.dromara.warm.flow.core.enums.NodeType;
-import org.dromara.warm.flow.core.enums.SkipType;
 import org.dromara.warm.flow.core.service.ChartService;
 import org.dromara.warm.flow.core.service.DefService;
 import org.dromara.warm.flow.core.service.InsService;
@@ -248,7 +247,6 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
             BusinessStatusEnum.checkCancelStatus(instance.getFlowStatus());
             FlowParams flowParams = FlowParams.build()
                 .message(message)
-                .skipType(SkipType.PASS.getKey())
                 .flowStatus(BusinessStatusEnum.CANCEL.getStatus())
                 .hisStatus(BusinessStatusEnum.CANCEL.getStatus())
                 .handler(userIdStr)

+ 5 - 6
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java

@@ -40,6 +40,7 @@ import org.dromara.warm.flow.orm.mapper.FlowNodeMapper;
 import org.dromara.warm.flow.orm.mapper.FlowTaskMapper;
 import org.dromara.workflow.api.domain.RemoteStartProcessReturn;
 import org.dromara.workflow.common.ConditionalOnEnable;
+import org.dromara.workflow.common.constant.FlowConstant;
 import org.dromara.workflow.common.enums.TaskAssigneeType;
 import org.dromara.workflow.common.enums.TaskStatusEnum;
 import org.dromara.workflow.domain.bo.*;
@@ -160,22 +161,20 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
             // 获取抄送人
             List<FlowCopyBo> flowCopyList = completeTaskBo.getFlowCopyList();
             // 设置抄送人
-            completeTaskBo.getVariables().put("flowCopyList", flowCopyList);
+            completeTaskBo.getVariables().put(FlowConstant.FLOW_COPY_LIST, flowCopyList);
             // 消息类型
-            completeTaskBo.getVariables().put("messageType", messageType);
+            completeTaskBo.getVariables().put(FlowConstant.MESSAGE_TYPE, messageType);
             // 消息通知
-            completeTaskBo.getVariables().put("notice", notice);
+            completeTaskBo.getVariables().put(FlowConstant.MESSAGE_NOTICE, notice);
 
             FlowTask flowTask = flowTaskMapper.selectById(taskId);
             if (ObjectUtil.isNull(flowTask)) {
                 throw new ServiceException("流程任务不存在或任务已审批!");
             }
             Instance ins = insService.getById(flowTask.getInstanceId());
-            // 获取流程定义信息
-            Definition definition = defService.getById(flowTask.getDefinitionId());
             // 检查流程状态是否为草稿、已撤销或已退回状态,若是则执行流程提交监听
             if (BusinessStatusEnum.isDraftOrCancelOrBack(ins.getFlowStatus())) {
-                flowProcessEventHandler.processHandler(definition.getFlowCode(), ins, ins.getFlowStatus(), null, true);
+                completeTaskBo.getVariables().put(FlowConstant.SUBMIT, true);
             }
             // 设置弹窗处理人
             Map<String, Object> assigneeMap = setPopAssigneeMap(completeTaskBo.getAssigneeMap(), ins.getVariableMap());