Browse Source

兼容任务触发器情况

hubin 1 year ago
parent
commit
a88e35bbcb

+ 17 - 14
src/main/java/com/aizuda/boot/modules/flw/entity/ApprovalContent.java

@@ -5,6 +5,7 @@ import com.aizuda.bpm.engine.model.NodeAssignee;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Setter;
+import org.apache.commons.collections.CollectionUtils;
 
 import java.util.List;
 import java.util.Objects;
@@ -26,20 +27,22 @@ public class ApprovalContent {
     private List<NodeAssignee> nodeRoleList;
 
     public void appendNodeAssignee(List<FlwTaskActor> flwTaskActors) {
-        List<NodeAssignee> nodeAssigneeList = flwTaskActors.stream().map(t -> {
-            NodeAssignee nodeAssignee = new NodeAssignee();
-            nodeAssignee.setTenantId(t.getTenantId());
-            nodeAssignee.setId(t.getActorId());
-            nodeAssignee.setName(t.getActorName());
-            nodeAssignee.setWeight(t.getWeight());
-            return nodeAssignee;
-        }).toList();
-        // 参与者类型 0,用户 1,角色 2,部门
-        FlwTaskActor flwTaskActor = flwTaskActors.get(0);
-        if (Objects.equals(0, flwTaskActor.getActorType())) {
-            this.setNodeUserList(nodeAssigneeList);
-        } else {
-            this.setNodeRoleList(nodeAssigneeList);
+        if (CollectionUtils.isNotEmpty(flwTaskActors)) {
+            List<NodeAssignee> nodeAssigneeList = flwTaskActors.stream().map(t -> {
+                NodeAssignee nodeAssignee = new NodeAssignee();
+                nodeAssignee.setTenantId(t.getTenantId());
+                nodeAssignee.setId(t.getActorId());
+                nodeAssignee.setName(t.getActorName());
+                nodeAssignee.setWeight(t.getWeight());
+                return nodeAssignee;
+            }).toList();
+            // 参与者类型 0,用户 1,角色 2,部门
+            FlwTaskActor flwTaskActor = flwTaskActors.get(0);
+            if (Objects.equals(0, flwTaskActor.getActorType())) {
+                this.setNodeUserList(nodeAssigneeList);
+            } else {
+                this.setNodeRoleList(nodeAssigneeList);
+            }
         }
     }
 }

+ 1 - 1
src/main/java/com/aizuda/boot/modules/flw/entity/FlwProcessApproval.java

@@ -56,7 +56,7 @@ public class FlwProcessApproval extends SuperEntity {
     @Schema(description = "任务 key 唯一标识")
     private String taskKey;
 
-    @Schema(description = "审批类型 -1,待审 0,评论 1,发起 2,抄送 3,办理 4,驳回 5,认领 6,转办 7,委派 8,跳转 9,拿回 10,唤醒 11,前加签 12,并加签 13,后加签 14,减签 15,撤销 16,终止 17,超时 18,委派归还任务 19,自动跳转 20,自动完成 21,自动拒绝 22,调用外部流程任务【办理子流程】")
+    @Schema(description = "审批类型 -1,待审 0,评论 1,发起 2,抄送 3,办理 4,驳回 5,认领 6,转办 7,委派 8,跳转 9,拿回 10,唤醒 11,前加签 12,并加签 13,后加签 14,减签 15,撤销 16,终止 17,超时 18,委派归还任务 19,自动跳转 20,自动完成 21,自动拒绝 22,调用外部流程任务【办理子流程】 23,触发器任务")
     @NotNull(groups = Create.class)
     @PositiveOrZero
     private Integer type;

+ 5 - 4
src/main/java/com/aizuda/boot/modules/flw/flow/FlowTaskActorProvider.java

@@ -53,18 +53,19 @@ public class FlowTaskActorProvider implements TaskActorProvider {
 
     @Override
     public List<FlwTaskActor> getTaskActors(NodeModel nodeModel, Execution execution) {
-        if (TaskType.callProcess.eq(nodeModel.getType())) {
-            // 子流程情况
+        final Integer nodeType = nodeModel.getType();
+        if (TaskType.callProcess.eq(nodeType) || TaskType.trigger.eq(nodeType)) {
+            // 子流程,触发器情况
             return null;
         }
 
         final FlowCreator flowCreator = execution.getFlowCreator();
-        if (TaskType.major.eq(nodeModel.getType())) {
+        if (TaskType.major.eq(nodeType)) {
             // 发起人审批,经过 isAllowed 验证合法,直接返回当前执行人
             return Collections.singletonList(FlwTaskActor.ofFlowCreator(flowCreator));
         }
 
-        if (TaskType.approval.eq(nodeModel.getType())) {
+        if (TaskType.approval.eq(nodeType)) {
             /*
              * 审核人类型
              * <p>

+ 3 - 0
src/main/java/com/aizuda/boot/modules/flw/flow/FlowTaskListener.java

@@ -173,6 +173,9 @@ public class FlowTaskListener implements TaskListener {
         } else if (eventType == EventType.callProcess) {
             // 调用外部流程任务【办理子流程】
             type = 22;
+        } else if (eventType == EventType.trigger) {
+            // 触发器任务
+            type = 23;
         }
         return type;
     }

+ 16 - 0
src/main/java/com/aizuda/boot/modules/flw/flow/FlowTaskTrigger.java

@@ -0,0 +1,16 @@
+package com.aizuda.boot.modules.flw.flow;
+
+import com.aizuda.bpm.engine.TaskTrigger;
+import com.aizuda.bpm.engine.core.Execution;
+import com.aizuda.bpm.engine.model.NodeModel;
+import org.springframework.stereotype.Component;
+
+@Component
+public class FlowTaskTrigger implements TaskTrigger {
+
+    @Override
+    public boolean execute(NodeModel nodeModel, Execution execution) {
+        System.out.println("FlowTaskTrigger = " + nodeModel.getNodeName());
+        return true;
+    }
+}