Pārlūkot izejas kodu

新增自定义流程属性-并行/串行会签驳回

wangliang 3 gadi atpakaļ
vecāks
revīzija
4214bdbeea

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/activiti/custom/service/AbstractMultiWorkFlowService.java

@@ -74,7 +74,7 @@ public abstract class AbstractMultiWorkFlowService implements DefaultInstanceCon
     public UserTask createMultiInstanceBehavior(UserTask userTask, boolean sequential) {
         String id = userTask.getId().substring(userTask.getId().length() - 1, userTask.getId().length());
         MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = this.createMultiInstanceLoopCharacteristics(id, sequential);
-        multiInstanceLoopCharacteristics.setCompletionCondition(DefaultInstanceConvertToMultiInstance.REJECT_EXP);
+        multiInstanceLoopCharacteristics.setCompletionCondition(DefaultInstanceConvertToMultiInstance.REJECT_EXP + id + DefaultInstanceConvertToMultiInstance.REJECT_EXP_SUFFIX);
         userTask.setAssignee(new StringJoiner("").add(MessageFormat.format("{0}{1}{2}", ASSIGNEE_USER_EXP, id, EXP_SUFFIX)).toString());
         userTask.setLoopCharacteristics(multiInstanceLoopCharacteristics);
         return createMultiInstanceBehavior(userTask, sequential, new StringJoiner("").add(MessageFormat.format("{0}{1}{2}", DEFAULT_ASSIGNEE_LIST_EXP, id, EXP_SUFFIX)).toString(), new StringJoiner("").add(MessageFormat.format("{0}{1}", ASSIGNEE_USER, id)).toString());

+ 8 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/activiti/custom/service/DefaultInstanceConvertToMultiInstance.java

@@ -12,12 +12,14 @@ import org.activiti.bpmn.model.UserTask;
  */
 public interface DefaultInstanceConvertToMultiInstance extends MultiWorkFlow {
 
+    public static final String EXP_PREFIX = "${";
+    public static final String EXP_SUFFIX = "}";
+    public static final String EXP_EQUAL = "==";
     public static final String ASSIGNEE_USER = "assignee";
     public static final String DEFAULT_ASSIGNEE_LIST = "assigneeList";
-    public static final String DEFAULT_ASSIGNEE_LIST_EXP = "${assigneeList";
-    public static final String ASSIGNEE_USER_EXP = "${" + ASSIGNEE_USER;
-    public static final String EXP_SUFFIX = "}";
-    public static final String APPROVE_ID_EXP = "${approveId}";
+    public static final String DEFAULT_ASSIGNEE_LIST_EXP = EXP_PREFIX + DEFAULT_ASSIGNEE_LIST;
+    public static final String ASSIGNEE_USER_EXP = EXP_PREFIX + ASSIGNEE_USER;
+    public static final String APPROVE_ID_EXP = EXP_PREFIX + "approveId" + EXP_SUFFIX;
     public static final String DEFAULT_USER_TASK = "_default";
     public static final String DEFAULT_USER_TASK_NAME = "提交试卷";
     public static final String USER_TASK_APPROVE_NAME = "审批人";
@@ -28,7 +30,8 @@ public interface DefaultInstanceConvertToMultiInstance extends MultiWorkFlow {
     public static final String BPMN_NAME = "bpmn";
     public static final String GATEWAY_NAME = "gateway";
     public static final String SEQUENCE_NAME = "sequence";
-    public static final String REJECT_EXP = "${nrOfCompletedInstances/nrOfInstances == 1 || reject == 1}";
+    public static final String REJECT_EXP = "${nrOfCompletedInstances/nrOfInstances == 1 || reject";
+    public static final String REJECT_EXP_SUFFIX = " == 1}";
 
     /**
      * 创建多实例行为解释器

+ 7 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ActivitiServiceImpl.java

@@ -405,6 +405,7 @@ public class ActivitiServiceImpl implements ActivitiService {
 
             if (currFlow instanceof UserTask) {
                 UserTask userTask = (UserTask) currFlow;
+                String id = userTask.getId().substring(userTask.getId().length() - 1, userTask.getId().length());
                 String remark = Objects.nonNull(map.get(SystemConstant.APPROVE_REMARK)) ? map.get(SystemConstant.APPROVE_REMARK).toString() : null;
                 //流程流水日志
                 tfFlowLog = new TFFlowLog(sysUser.getSchoolId(), sysUser.getOrgId(), SystemConstant.convertIdToLong(processInstanceId), examTask.getId(), sysUser.getId(), sysUser.getId(), remark);
@@ -435,7 +436,7 @@ public class ActivitiServiceImpl implements ActivitiService {
                         }
                         map.put(SystemConstant.APPROVE, usertaskId);
                         if (currFlow.getBehavior() instanceof MultiInstanceActivityBehavior) {
-                            map.computeIfAbsent(CustomFlowElementEnum.REJECT.getId(), v -> 0);
+                            map.computeIfAbsent(CustomFlowElementEnum.REJECT.getId() + id, v -> 0);
                         }
                     }
                 } else if (approvePass == FlowApprovePassEnum.REJECT) {
@@ -458,7 +459,7 @@ public class ActivitiServiceImpl implements ActivitiService {
                     }
                     map.put(SystemConstant.APPROVE, usertaskId);
                     if (currFlow.getBehavior() instanceof MultiInstanceActivityBehavior) {
-                        map.computeIfAbsent(CustomFlowElementEnum.REJECT.getId(), v -> 1);
+                        map.computeIfAbsent(CustomFlowElementEnum.REJECT.getId() + id, v -> 1);
                     }
                 }
                 //获取流程变量
@@ -1600,7 +1601,7 @@ public class ActivitiServiceImpl implements ActivitiService {
                                     while (!isProcess) {
                                         if (flowTaskNode.getTask().getType() == CustomFlowTypeEnum.PROCESS) {
                                             isProcess = true;
-                                            flowTaskIds.add(new CustomFlowGatewayDto(flowTaskNode.getTask().getFlowTaskId(), "${" + SystemConstant.APPROVE + "=='" + flowTaskNode.getTask().getFlowTaskId() + "'}"));
+                                            flowTaskIds.add(new CustomFlowGatewayDto(flowTaskNode.getTask().getFlowTaskId(), DefaultInstanceConvertToMultiInstance.EXP_PREFIX + SystemConstant.APPROVE + DefaultInstanceConvertToMultiInstance.EXP_EQUAL + "'" + flowTaskNode.getTask().getFlowTaskId() + "'" + DefaultInstanceConvertToMultiInstance.EXP_SUFFIX));
                                         }
                                         flowTaskNode = flowTaskNode.getBefore();
                                     }
@@ -1612,7 +1613,7 @@ public class ActivitiServiceImpl implements ActivitiService {
                                             flowTaskIds);
                                     break;
                                 case START://发起人节点
-                                    flowTaskIds.add(new CustomFlowGatewayDto(customFlowDefaultDto.getFlowTaskId(), "${" + SystemConstant.APPROVE + "=='" + customFlowDefaultDto.getFlowTaskId() + "'}"));
+                                    flowTaskIds.add(new CustomFlowGatewayDto(customFlowDefaultDto.getFlowTaskId(), DefaultInstanceConvertToMultiInstance.EXP_PREFIX + SystemConstant.APPROVE + DefaultInstanceConvertToMultiInstance.EXP_EQUAL + "'" + customFlowDefaultDto.getFlowTaskId() + "'" + DefaultInstanceConvertToMultiInstance.EXP_SUFFIX));
                                     createCustomFlowExclusiveGateway(flowTaskLink,
                                             gatewayMap,
                                             process,
@@ -1624,7 +1625,7 @@ public class ActivitiServiceImpl implements ActivitiService {
                                     flowTaskNode = node.getBefore();
                                     while (Objects.nonNull(flowTaskNode)) {
                                         if (flowTaskNode.getTask().getType() == CustomFlowTypeEnum.PROCESS) {
-                                            flowTaskIds.add(new CustomFlowGatewayDto(flowTaskNode.getTask().getFlowTaskId(), "${" + SystemConstant.APPROVE + "=='" + flowTaskNode.getTask().getFlowTaskId() + "'}"));
+                                            flowTaskIds.add(new CustomFlowGatewayDto(flowTaskNode.getTask().getFlowTaskId(), DefaultInstanceConvertToMultiInstance.EXP_PREFIX + SystemConstant.APPROVE + DefaultInstanceConvertToMultiInstance.EXP_EQUAL + "'" + flowTaskNode.getTask().getFlowTaskId() + "'" + DefaultInstanceConvertToMultiInstance.EXP_SUFFIX));
                                         }
                                         flowTaskNode = flowTaskNode.getBefore();
                                     }
@@ -1682,7 +1683,7 @@ public class ActivitiServiceImpl implements ActivitiService {
                 while (!isProcess) {
                     if (flowTaskNodeTemp.getTask().getType() == CustomFlowTypeEnum.PROCESS) {
                         isProcess = true;
-                        customFlowGatewayDto = new CustomFlowGatewayDto(flowTaskNodeTemp.getTask().getFlowTaskId(), "${" + SystemConstant.APPROVE + "=='" + flowTaskNode.getTask().getFlowTaskId() + "'}");
+                        customFlowGatewayDto = new CustomFlowGatewayDto(flowTaskNodeTemp.getTask().getFlowTaskId(), DefaultInstanceConvertToMultiInstance.EXP_PREFIX + SystemConstant.APPROVE + DefaultInstanceConvertToMultiInstance.EXP_EQUAL + "'" + flowTaskNode.getTask().getFlowTaskId() + "'" + DefaultInstanceConvertToMultiInstance.EXP_SUFFIX);
                     }
                     flowTaskNodeTemp = flowTaskNodeTemp.getBefore();
                 }