Jelajahi Sumber

新增自定义流程属性-完整测试修改

wangliang 3 tahun lalu
induk
melakukan
44ababdacf

+ 12 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TFFlowApprove.java

@@ -64,6 +64,10 @@ public class TFFlowApprove extends BaseEntity implements Serializable {
     @TableField(value = "all_assignee", updateStrategy = FieldStrategy.IGNORED)
     private String allAssignee;
 
+    @ApiModelProperty(value = "驳回路线")
+    @TableField(value = "reject_link", updateStrategy = FieldStrategy.IGNORED)
+    private String rejectLink;
+
     public TFFlowApprove() {
 
     }
@@ -79,6 +83,14 @@ public class TFFlowApprove extends BaseEntity implements Serializable {
         this.setup = FlowApproveSetupEnum.SUBMIT.getSetup();
     }
 
+    public String getRejectLink() {
+        return rejectLink;
+    }
+
+    public void setRejectLink(String rejectLink) {
+        this.rejectLink = rejectLink;
+    }
+
     public String getAllAssignee() {
         return allAssignee;
     }

+ 40 - 9
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ActivitiServiceImpl.java

@@ -11,6 +11,7 @@ import com.qmth.distributed.print.business.bean.flow.link.FlowTaskNode;
 import com.qmth.distributed.print.business.bean.result.*;
 import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.CustomFlowMultipleUserApproveTypeEnum;
+import com.qmth.distributed.print.business.enums.CustomFlowRejectResubmitTypeEnum;
 import com.qmth.distributed.print.business.enums.CustomFlowTypeEnum;
 import com.qmth.distributed.print.business.enums.ExamStatusEnum;
 import com.qmth.distributed.print.business.service.*;
@@ -374,17 +375,25 @@ public class ActivitiServiceImpl implements ActivitiService {
                 //获取当前流程和下一流程setup
                 currFlowTaskResult = gson.fromJson(gson.toJson(setupMap.get(userTask.getId())), FlowTaskResult.class);
                 if (approvePass == FlowApprovePassEnum.PASS) {
+                    int currSetup = currFlowTaskResult.getSetup().intValue();
+                    currSetup = currSetup == setupMap.size() - 1 ? 0 : currSetup + 1;
                     //驳回再提交时,需要走网关路线
                     if (tfFlowApprove.getStatus() == FlowStatusEnum.REJECT) {
-                        //获取最后一条审批记录,确认网关走向流程节点
-                        TFFlowLog tfFlowLogLast = tfFlowLogService.findByLast(flowId, examTask.getSchoolId(), FlowApproveOperationEnum.REJECT);
-                        Optional.ofNullable(tfFlowLogLast).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("流程驳回节点数据为空"));
+                        //获取驳回路线
+                        FlowTaskResult flowTaskResultRejectLinkDto = null;
+                        Map<String, FlowTaskResult> rejectLinkMap = null;
+                        if (Objects.nonNull(tfFlowApprove.getRejectLink())) {
+                            rejectLinkMap = JacksonUtil.readJson(tfFlowApprove.getRejectLink(), Map.class);
+                            if (Objects.nonNull(rejectLinkMap.get(userTask.getId()))) {
+                                flowTaskResultRejectLinkDto = gson.fromJson(gson.toJson(rejectLinkMap.get(userTask.getId())), FlowTaskResult.class);
+                            }
+                        }
 
                         nextFlowTaskResult = this.getNextFlowTaskResult(nrOfCompletedInstances,
                                 nrOfInstances,
                                 currFlowTaskResult,
                                 nextFlowTaskResult,
-                                tfFlowLogLast.getApproveSetup().intValue(),
+                                Objects.nonNull(flowTaskResultRejectLinkDto) ? flowTaskResultRejectLinkDto.getSetup() : currSetup,
                                 setupMap,
                                 gson,
                                 approvePass);
@@ -399,10 +408,12 @@ public class ActivitiServiceImpl implements ActivitiService {
                                 nextFlowTaskResult,
                                 map,
                                 id);
-                    } else {//走正常路线
-                        int currSetup = currFlowTaskResult.getSetup().intValue();
-                        currSetup = currSetup == setupMap.size() - 1 ? 0 : currSetup + 1;
 
+                        if (Objects.nonNull(flowTaskResultRejectLinkDto)) {
+                            rejectLinkMap.remove(userTask.getId());
+                            tfFlowApprove.setRejectLink(rejectLinkMap.size() == 0 ? null : JacksonUtil.parseJson(rejectLinkMap));
+                        }
+                    } else {//走正常路线
                         nextFlowTaskResult = this.getNextFlowTaskResult(nrOfCompletedInstances,
                                 nrOfInstances,
                                 currFlowTaskResult,
@@ -439,9 +450,12 @@ public class ActivitiServiceImpl implements ActivitiService {
                     this.approveReject(multiInstance,
                             map,
                             id,
+                            currFlowTaskResult,
                             nextFlowTaskResult,
                             tfFlowApprove,
-                            tfFlowLog);
+                            tfFlowLog,
+                            agginessMap,
+                            gson);
                 }
                 //获取流程变量
                 this.getAgginess(nextFlowTaskResult,
@@ -590,16 +604,22 @@ public class ActivitiServiceImpl implements ActivitiService {
      * @param multiInstance
      * @param map
      * @param id
+     * @param currFlowTaskResult
      * @param nextFlowTaskResult
      * @param tfFlowApprove
      * @param tfFlowLog
+     * @param agginessMap
+     * @param gson
      */
     protected void approveReject(boolean multiInstance,
                                  Map<String, Object> map,
                                  String id,
+                                 FlowTaskResult currFlowTaskResult,
                                  FlowTaskResult nextFlowTaskResult,
                                  TFFlowApprove tfFlowApprove,
-                                 TFFlowLog tfFlowLog) {
+                                 TFFlowLog tfFlowLog,
+                                 Map<String, CustomFlowVarDto> agginessMap,
+                                 Gson gson) {
         if (multiInstance) {
             map.computeIfAbsent(FlowApproveOperationEnum.REJECT.getId() + id, v -> 1);
         }
@@ -607,6 +627,17 @@ public class ActivitiServiceImpl implements ActivitiService {
         tfFlowApprove.setSetup(nextFlowTaskResult.getSetup());
         tfFlowApprove.setStatus(FlowStatusEnum.REJECT);
         tfFlowLog.setApproveOperation(FlowApproveOperationEnum.REJECT);
+        CustomFlowVarDto customFlowVarDto = gson.fromJson(gson.toJson(agginessMap.get(currFlowTaskResult.getTaskKey())), CustomFlowVarDto.class);
+        if (Objects.nonNull(customFlowVarDto) && customFlowVarDto.getRejectResubmitType() == CustomFlowRejectResubmitTypeEnum.PREV_STEP) {
+            Map<String, FlowTaskResult> rejectLinkMap = null;
+            if (Objects.nonNull(tfFlowApprove.getRejectLink())) {
+                rejectLinkMap = JacksonUtil.readJson(tfFlowApprove.getRejectLink(), Map.class);
+            } else {
+                rejectLinkMap = new HashMap<>();
+            }
+            rejectLinkMap.put(nextFlowTaskResult.getTaskKey(), currFlowTaskResult);
+            tfFlowApprove.setRejectLink(JacksonUtil.parseJson(rejectLinkMap));
+        }
     }
 
     /**