Browse Source

优化子流程逻辑

hubin 1 year ago
parent
commit
ca3a0c11b3

+ 3 - 0
src/main/java/com/aizuda/boot/modules/flw/entity/ApprovalContent.java

@@ -19,6 +19,9 @@ public class ApprovalContent {
     @Schema(description = "节点分配处理用户")
     private List<NodeAssignee> nodeUserList;
 
+    @Schema(description = "调用外部流程")
+    private String callProcess;
+
     @Schema(description = "节点分配处理角色")
     private List<NodeAssignee> nodeRoleList;
 

+ 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,自动拒绝")
+    @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,调用外部流程任务【办理子流程】")
     @NotNull(groups = Create.class)
     @PositiveOrZero
     private Integer type;

+ 11 - 1
src/main/java/com/aizuda/boot/modules/flw/flow/FlowTaskListener.java

@@ -47,7 +47,6 @@ public class FlowTaskListener implements TaskListener {
 
         // 监听处理其它任务事件
         FlwProcessApproval fpa = new FlwProcessApproval();
-        fpa.setType(this.getType(eventType));
         if (null != flwTask) {
             fpa.setInstanceId(flwTask.getInstanceId());
             fpa.setTaskId(flwTask.getId());
@@ -93,6 +92,9 @@ public class FlowTaskListener implements TaskListener {
                     saveContent = true;
                 }
 
+                // 记录是否调用流程
+                content.setCallProcess(currentNodeModel.getCallProcess());
+
                 // 记录审批内容
                 if (saveContent) {
                     fpa.setContent(content);
@@ -108,6 +110,11 @@ public class FlowTaskListener implements TaskListener {
             fpa.setCreateId(0L);
             fpa.setCreateBy("admin");
         }
+
+        if (null == fpa.getType()) {
+            // 其它类型转换
+            fpa.setType(this.getType(eventType));
+        }
         return flwProcessApprovalService.save(fpa);
     }
 
@@ -163,6 +170,9 @@ public class FlowTaskListener implements TaskListener {
         } else if (eventType == EventType.autoReject) {
             // 自动拒绝
             type = 21;
+        } else if (eventType == EventType.callProcess) {
+            // 调用外部流程任务【办理子流程】
+            type = 22;
         }
         return type;
     }

+ 8 - 2
src/main/java/com/aizuda/boot/modules/flw/service/impl/ProcessTaskServiceImpl.java

@@ -97,8 +97,14 @@ public class ProcessTaskServiceImpl implements IProcessTaskService {
         vo.setCreateId(hisInstance.getCreateId());
         vo.setCreateBy(hisInstance.getCreateBy());
         vo.setCreateTime(hisInstance.getCreateTime());
-        // 表单填写内容
-        FlwProcessForm flwProcessForm = flwProcessFormService.getByInstanceId(instanceId);
+
+        // 表单填写内容,子流程需要获取主流程表单
+        FlwProcessForm flwProcessForm;
+        if (null != hisInstance.getParentInstanceId()) {
+            flwProcessForm = flwProcessFormService.getByInstanceId(hisInstance.getParentInstanceId());
+        } else {
+            flwProcessForm = flwProcessFormService.getByInstanceId(instanceId);
+        }
         if (null != flwProcessForm) {
             vo.setFormContent(flwProcessForm.getContent());
         }