Browse Source

优化减签

caixiaofeng 6 tháng trước cách đây
mục cha
commit
ee15c665cb

+ 24 - 0
flow-common/flow-common-flowable-starter/src/main/java/com/flow/flowable/cmd/DeleteActivityEntityCmd.java

@@ -0,0 +1,24 @@
+package com.flow.flowable.cmd;
+
+import org.flowable.common.engine.impl.interceptor.Command;
+import org.flowable.common.engine.impl.interceptor.CommandContext;
+import org.flowable.engine.impl.persistence.entity.ActivityInstanceEntityManager;
+import org.flowable.engine.impl.persistence.entity.HistoricActivityInstanceEntityManager;
+import org.flowable.engine.impl.util.CommandContextUtil;
+
+public class DeleteActivityEntityCmd implements Command<Void> {
+    protected String id;
+
+    public DeleteActivityEntityCmd(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public Void execute(CommandContext commandContext) {
+        ActivityInstanceEntityManager activityInstanceEntityManager = CommandContextUtil.getActivityInstanceEntityManager(commandContext);
+        HistoricActivityInstanceEntityManager historicActivityInstanceEntityManager = CommandContextUtil.getHistoricActivityInstanceEntityManager(commandContext);
+        activityInstanceEntityManager.delete(this.id);
+        historicActivityInstanceEntityManager.delete(this.id);
+        return null;
+    }
+}

+ 8 - 10
flow-common/flow-common-flowable-starter/src/main/java/com/flow/flowable/cmd/DeleteTaskExecutionCmd.java

@@ -28,11 +28,11 @@ public class DeleteTaskExecutionCmd implements Command<Void> {
 
     @Override
     public Void execute(CommandContext commandContext) {
-        ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration();
+        ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration(commandContext);
         ManagementService managementService = processEngineConfiguration.getManagementService();
-        ActivityInstanceEntityManager activityInstanceEntityManager = processEngineConfiguration.getActivityInstanceEntityManager();
         MultiInstanceLoopCharacteristics loopCharacteristics = managementService.executeCommand(new GetLoopCharacteristicsCmd(this.task.getProcessInstanceId(), this.task.getTaskDefinitionKey()));
         if (Objects.nonNull(loopCharacteristics)) {
+            ActivityInstanceEntityManager activityInstanceEntityManager = processEngineConfiguration.getActivityInstanceEntityManager();
             RuntimeService runtimeService = processEngineConfiguration.getRuntimeService();
             TaskService taskService = processEngineConfiguration.getTaskService();
             String collectionName = loopCharacteristics.getInputDataItem();
@@ -53,16 +53,14 @@ public class DeleteTaskExecutionCmd implements Command<Void> {
                 Integer loopCounter = runtimeService.getVariableLocal(this.task.getExecutionId(), "loopCounter", Integer.class);
                 if (assigneeList.subList(loopCounter, assigneeList.size() - 1).contains(this.assignee)) {
                     // 减签已开始人员
-                    List<Task> deleteTasks = taskService.createTaskQuery()
+                    Task deleteTask = 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);
-                    }
+                            .singleResult();
+                    runtimeService.deleteMultiInstanceExecution(deleteTask.getExecutionId(), true);
+                    ActivityInstanceEntity activityInstanceEntity = activityInstanceEntityManager.findActivityInstanceByTaskId(deleteTask.getId());
+                    managementService.executeCommand(new DeleteActivityEntityCmd(activityInstanceEntity.getId()));
                 } else {
                     // 减签未开始人员
                     Integer nrOfInstances = runtimeService.getVariableLocal(miExecution.getId(), "nrOfInstances", Integer.class);
@@ -87,7 +85,7 @@ public class DeleteTaskExecutionCmd implements Command<Void> {
                 for (Task deleteTask : deleteTasks) {
                     runtimeService.deleteMultiInstanceExecution(deleteTask.getExecutionId(), false);
                     ActivityInstanceEntity activityInstanceEntity = activityInstanceEntityManager.findActivityInstanceByTaskId(deleteTask.getId());
-                    activityInstanceEntityManager.delete(activityInstanceEntity);
+                    managementService.executeCommand(new DeleteActivityEntityCmd(activityInstanceEntity.getId()));
                 }
             }
             assigneeList.remove(this.assignee);

+ 3 - 2
flow-workflow/flow-workflow-biz/src/main/java/com/flow/service/impl/FlowTaskServiceImpl.java

@@ -451,10 +451,11 @@ public class FlowTaskServiceImpl extends BaseServiceImpl<FlowTaskDao, FlowTask>
         List<ActivityInstance> activityList = runtimeService.createActivityInstanceQuery()
                 .processInstanceId(task.getProcessInstanceId())
                 .activityId(task.getTaskDefinitionKey())
-                .unfinished()
                 .list();
         for (ActivityInstance activityInstance : activityList) {
-            unUsers.add(activityInstance.getAssignee());
+            if (Objects.isNull(activityInstance.getEndTime())) {
+                unUsers.add(activityInstance.getAssignee());
+            }
         }
         String collectionName = String.format("%sCollection", task.getTaskDefinitionKey());
         List<String> assigneeList = runtimeService.getVariable(task.getExecutionId(), collectionName, List.class);