Ver Fonte

优化减签

caixiaofeng há 7 meses atrás
pai
commit
47c2fe1241

+ 17 - 3
flow-common/flow-common-flowable-starter/src/main/java/com/flow/flowable/cmd/DeleteTaskExecutionCmd.java

@@ -34,6 +34,7 @@ public class DeleteTaskExecutionCmd implements Command<Void> {
         MultiInstanceLoopCharacteristics loopCharacteristics = managementService.executeCommand(new GetLoopCharacteristicsCmd(this.task.getProcessInstanceId(), this.task.getTaskDefinitionKey()));
         if (Objects.nonNull(loopCharacteristics)) {
             RuntimeService runtimeService = processEngineConfiguration.getRuntimeService();
+            TaskService taskService = processEngineConfiguration.getTaskService();
             String collectionName = loopCharacteristics.getInputDataItem();
             collectionName = collectionName.substring(2, collectionName.length() - 1);
             List<String> assigneeList = runtimeService.getVariable(
@@ -50,11 +51,24 @@ public class DeleteTaskExecutionCmd implements Command<Void> {
             Execution miExecution = managementService.executeCommand(new GetMultiInstanceRootExecutionCmd(this.task.getProcessInstanceId(), this.task.getTaskDefinitionKey()));
             if (loopCharacteristics.isSequential()) {
                 Integer loopCounter = runtimeService.getVariableLocal(this.task.getExecutionId(), "loopCounter", Integer.class);
-                if (!assigneeList.subList(loopCounter, assigneeList.size() - 1).contains(this.assignee)) {
-                    throw new FlowableException(String.format("会签后续办理者中没有用户:%s", this.assignee));
+                if (assigneeList.subList(loopCounter, assigneeList.size() - 1).contains(this.assignee)) {
+                    // 减签已开始人员
+                    List<Task> deleteTasks = taskService.createTaskQuery()
+                            .processInstanceId(this.task.getProcessInstanceId())
+                            .taskDefinitionKey(this.task.getTaskDefinitionKey())
+                            .taskAssignee(this.assignee)
+                            .list();
+                    for (Task deleteTask : deleteTasks) {
+                        runtimeService.deleteMultiInstanceExecution(deleteTask.getExecutionId(), true);
+                        ActivityInstanceEntity activityInstanceEntity = activityInstanceEntityManager.findActivityInstanceByTaskId(deleteTask.getId());
+                        activityInstanceEntityManager.delete(activityInstanceEntity);
+                    }
+                } else {
+                    // 减签未开始人员
+                    Integer nrOfInstances = runtimeService.getVariableLocal(miExecution.getId(), "nrOfInstances", Integer.class);
+                    runtimeService.setVariableLocal(miExecution.getId(), "nrOfInstances", nrOfInstances - 1);
                 }
             } else {
-                TaskService taskService = processEngineConfiguration.getTaskService();
                 List<Task> tasks = taskService.createTaskQuery()
                         .processInstanceId(this.task.getProcessInstanceId())
                         .taskDefinitionKey(this.task.getTaskDefinitionKey())