Ver Fonte

获取减签用户优化

caixiaofeng há 7 meses atrás
pai
commit
31e5089d49

+ 3 - 2
flow-workflow/flow-workflow-api/src/main/java/com/flow/service/FlowTaskService.java

@@ -12,6 +12,7 @@ import org.flowable.task.api.TaskInfo;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 public interface FlowTaskService extends BaseService<FlowTask> {
     /**
@@ -153,10 +154,10 @@ public interface FlowTaskService extends BaseService<FlowTask> {
     List<Node> getParentNodes(String taskId);
 
     /**
-     * 获取多实例用户
+     * 获取多实例任务未完成用户
      * @param taskId
      * @return
      */
-    List<String> getMultiInstanceUnStartedUsers(String taskId);
+    Set<String> getMultiInstanceTaskUnUsers(String taskId);
 
 }

+ 25 - 4
flow-workflow/flow-workflow-biz/src/main/java/com/flow/service/impl/FlowTaskServiceImpl.java

@@ -501,14 +501,35 @@ public class FlowTaskServiceImpl extends BaseServiceImpl<FlowTaskDao, FlowTask>
     }
 
     @Override
-    public List<String> getMultiInstanceUnStartedUsers(String taskId) {
+    public Set<String> getMultiInstanceTaskUnUsers(String taskId) {
         Task task = taskService.createTaskQuery()
                 .taskId(taskId)
                 .singleResult();
-        List<Task> list = taskService.createTaskQuery()
+        if (Objects.isNull(task)) {
+            throw new BaseException("任务不存在");
+        }
+        Set<String> unUsers = new HashSet<>();
+        List<ActivityInstance> activityList = runtimeService.createActivityInstanceQuery()
                 .processInstanceId(task.getProcessInstanceId())
-                .taskDefinitionKey(task.getTaskDefinitionKey())
+                .activityId(task.getTaskDefinitionKey())
                 .list();
-        return list.stream().map(Task::getAssignee).collect(Collectors.toList());
+        for (ActivityInstance activityInstance : activityList) {
+            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);
+        for (String assignee : assigneeList) {
+            if (!unUsers.contains(assignee)) {
+                boolean noneMatch = activityList
+                        .stream()
+                        .noneMatch(activityInstance -> activityInstance.getAssignee().equals(assignee));
+                if (noneMatch) {
+                    unUsers.add(assignee);
+                }
+            }
+        }
+        return unUsers;
     }
 }

+ 4 - 3
flow-workflow/flow-workflow-controller/src/main/java/com/flow/controller/FlowTaskController.java

@@ -10,6 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Set;
 
 @RestController
 @RequestMapping("/task")
@@ -92,9 +93,9 @@ public class FlowTaskController {
         return Result.success(flowTaskService.getParentNodes(taskId));
     }
 
-    @GetMapping("/unStartedUsers/{taskId}")
-    public Result<List<String>> getMultiInstanceUnStartedUsers(@PathVariable String taskId) {
-        return Result.success(flowTaskService.getMultiInstanceUnStartedUsers(taskId));
+    @GetMapping("/unUsers/{taskId}")
+    public Result<Set<String>> getMultiInstanceTaskUnUsers(@PathVariable String taskId) {
+        return Result.success(flowTaskService.getMultiInstanceTaskUnUsers(taskId));
     }
 
 }