Prechádzať zdrojové kódy

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

wangliang 3 rokov pred
rodič
commit
620f8d379f

+ 61 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/flow/CustomFlowVarDto.java

@@ -1,5 +1,9 @@
 package com.qmth.distributed.print.business.bean.flow;
 
+import com.qmth.distributed.print.business.enums.CustomFlowApproveUserTypeEnum;
+import com.qmth.distributed.print.business.enums.CustomFlowMultipleUserApproveTypeEnum;
+import com.qmth.distributed.print.business.enums.CustomFlowRejectResubmitTypeEnum;
+import com.qmth.distributed.print.business.enums.CustomFlowRejectTypeEnum;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
@@ -20,6 +24,18 @@ public class CustomFlowVarDto implements Serializable {
     @ApiModelProperty(value = "审批人")
     List<String> approveIds;
 
+    @ApiModelProperty(value = "属性")
+    CustomFlowApproveUserTypeEnum approveUserType;
+
+    @ApiModelProperty(value = "自定义流程审核类型")
+    CustomFlowMultipleUserApproveTypeEnum multipleUserApproveType;
+
+    @ApiModelProperty(value = "自定义流程驳回类型")
+    CustomFlowRejectTypeEnum rejectType;
+
+    @ApiModelProperty(value = "自定义流程驳回重新提交类型")
+    CustomFlowRejectResubmitTypeEnum rejectResubmitType;
+
     public CustomFlowVarDto() {
 
     }
@@ -33,6 +49,51 @@ public class CustomFlowVarDto implements Serializable {
         this.approveIds = approveIds;
     }
 
+    public CustomFlowVarDto(String flowTaskVar, List<String> approveIds,
+                            CustomFlowApproveUserTypeEnum approveUserType,
+                            CustomFlowMultipleUserApproveTypeEnum multipleUserApproveType,
+                            CustomFlowRejectTypeEnum rejectType,
+                            CustomFlowRejectResubmitTypeEnum rejectResubmitType) {
+        this.flowTaskVar = flowTaskVar;
+        this.approveIds = approveIds;
+        this.approveUserType = approveUserType;
+        this.multipleUserApproveType = multipleUserApproveType;
+        this.rejectType = rejectType;
+        this.rejectResubmitType = rejectResubmitType;
+    }
+
+    public CustomFlowApproveUserTypeEnum getApproveUserType() {
+        return approveUserType;
+    }
+
+    public void setApproveUserType(CustomFlowApproveUserTypeEnum approveUserType) {
+        this.approveUserType = approveUserType;
+    }
+
+    public CustomFlowMultipleUserApproveTypeEnum getMultipleUserApproveType() {
+        return multipleUserApproveType;
+    }
+
+    public void setMultipleUserApproveType(CustomFlowMultipleUserApproveTypeEnum multipleUserApproveType) {
+        this.multipleUserApproveType = multipleUserApproveType;
+    }
+
+    public CustomFlowRejectTypeEnum getRejectType() {
+        return rejectType;
+    }
+
+    public void setRejectType(CustomFlowRejectTypeEnum rejectType) {
+        this.rejectType = rejectType;
+    }
+
+    public CustomFlowRejectResubmitTypeEnum getRejectResubmitType() {
+        return rejectResubmitType;
+    }
+
+    public void setRejectResubmitType(CustomFlowRejectResubmitTypeEnum rejectResubmitType) {
+        this.rejectResubmitType = rejectResubmitType;
+    }
+
     public String getFlowTaskVar() {
         return flowTaskVar;
     }

+ 29 - 14
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ActivitiServiceImpl.java

@@ -32,6 +32,8 @@ import org.activiti.engine.RuntimeService;
 import org.activiti.engine.TaskService;
 import org.activiti.engine.impl.RepositoryServiceImpl;
 import org.activiti.engine.impl.bpmn.behavior.MultiInstanceActivityBehavior;
+import org.activiti.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior;
+import org.activiti.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior;
 import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
 import org.activiti.engine.repository.Deployment;
 import org.activiti.engine.repository.DeploymentBuilder;
@@ -1012,7 +1014,8 @@ public class ActivitiServiceImpl implements ActivitiService {
             throw ExceptionResultEnum.ERROR.exception("不能转给自己");
         }
         Task taskUser = taskService.createTaskQuery().taskId(taskId).taskAssignee(userId).singleResult();
-        if (Objects.nonNull(taskUser)) {
+        Task taskCandidateUser = taskService.createTaskQuery().taskId(taskId).taskCandidateUser(userId).singleResult();
+        if (Objects.nonNull(taskUser) || Objects.nonNull(taskCandidateUser)) {
             throw ExceptionResultEnum.ERROR.exception("该审批人已有审批权限,无需流转");
         }
 
@@ -1045,9 +1048,15 @@ public class ActivitiServiceImpl implements ActivitiService {
             customFlowVarDto.setApproveIds(new ArrayList<>(Arrays.asList(userId)));
         } else {
             if (multiInstance && Objects.nonNull(nrOfCompletedInstances)) {
-                List<String> approveIds = customFlowVarDto.getApproveIds();
-                approveIds.remove(nrOfCompletedInstances.intValue());
-                approveIds.add(nrOfCompletedInstances.intValue(), userId);
+                if (currFlow.getBehavior() instanceof SequentialMultiInstanceBehavior) {
+                    List<String> approveIds = customFlowVarDto.getApproveIds();
+                    approveIds.remove(nrOfCompletedInstances.intValue());
+                    approveIds.add(nrOfCompletedInstances.intValue(), userId);
+                } else if (currFlow.getBehavior() instanceof ParallelMultiInstanceBehavior) {
+                    removeApproveUserId(customFlowVarDto, String.valueOf(sysUser.getId()), userId);
+                }
+            } else {
+                removeApproveUserId(customFlowVarDto, String.valueOf(sysUser.getId()), userId);
             }
         }
 
@@ -1070,6 +1079,19 @@ public class ActivitiServiceImpl implements ActivitiService {
         return true;
     }
 
+    /**
+     * 删除审批人
+     *
+     * @param customFlowVarDto
+     * @param userId
+     * @param exchangeUserId
+     */
+    protected void removeApproveUserId(CustomFlowVarDto customFlowVarDto, String userId, String exchangeUserId) {
+        List<String> approveIds = customFlowVarDto.getApproveIds();
+        approveIds.remove(userId);
+        approveIds.add(exchangeUserId);
+    }
+
     /**
      * 获取转他人审批人
      *
@@ -1778,15 +1800,7 @@ public class ActivitiServiceImpl implements ActivitiService {
                             default:
                                 break;
                         }
-                        //审批属性
-                        switch (customFlowPropertyDto.getMultipleUserApproveType()) {
-                            case ORDER://依次审批
-                            case ALL://会签审批
-                                agginessMap.put(node.getTask().getFlowTaskId(), new CustomFlowVarDto(DefaultInstanceConvertToMultiInstance.DEFAULT_ASSIGNEE_LIST + i, approveUserIds));
-                                break;
-                            default:
-                                break;
-                        }
+                        agginessMap.put(node.getTask().getFlowTaskId(), new CustomFlowVarDto(DefaultInstanceConvertToMultiInstance.DEFAULT_ASSIGNEE_LIST + i, approveUserIds, node.getTask().getProperty().getApproveUserType(), node.getTask().getProperty().getMultipleUserApproveType(), node.getTask().getProperty().getRejectType(), node.getTask().getProperty().getRejectResubmitType()));
                         if (Objects.nonNull(customFlowPropertyDto.getRejectType()) && !Objects.equals(customFlowPropertyDto.getRejectType(), "")) {
                             //驳回属性
                             switch (customFlowPropertyDto.getRejectType()) {
@@ -2230,7 +2244,8 @@ public class ActivitiServiceImpl implements ActivitiService {
      * @param conditionExpression 网关每一种线路走向的条件表达式
      * @return
      */
-    protected SequenceFlow createSequenceFlow(String from, String to, String id, String name, String conditionExpression) {
+    protected SequenceFlow createSequenceFlow(String from, String to, String id, String name, String
+            conditionExpression) {
         SequenceFlow flow = new SequenceFlow();
         flow.setSourceRef(from);
         flow.setTargetRef(to);