فهرست منبع

!715 update 优化工作流待办任务查询
* update 优化工作流待办任务查询

AprilWind 1 سال پیش
والد
کامیت
9dfe9f610d

+ 1 - 0
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowTaskVo.java

@@ -145,6 +145,7 @@ public class FlowTaskVo implements Serializable {
     /**
      * 办理人名称
      */
+    @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "assigneeIds")
     private String assigneeNames;
 
     /**

+ 0 - 8
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwInstanceService.java

@@ -141,14 +141,6 @@ public interface IFlwInstanceService {
      */
     FlowInstance selectByTaskId(Long taskId);
 
-    /**
-     * 按任务id查询实例
-     *
-     * @param taskIdList 任务id
-     * @return 结果
-     */
-    List<FlowInstance> selectByTaskIdList(List<Long> taskIdList);
-
     /**
      * 作废流程
      *

+ 0 - 25
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java

@@ -14,7 +14,6 @@ import org.dromara.workflow.domain.vo.FlowHisTaskVo;
 import org.dromara.workflow.domain.vo.FlowTaskVo;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * 任务 服务层
@@ -150,14 +149,6 @@ public interface IFlwTaskService {
      */
     List<FlowNode> getNextNodeList(FlowNextNodeBo bo);
 
-    /**
-     * 按照任务id查询任务
-     *
-     * @param taskIdList 任务id
-     * @return 结果
-     */
-    List<FlowHisTask> selectHisTaskByIdList(List<Long> taskIdList);
-
     /**
      * 按照任务id查询任务
      *
@@ -166,14 +157,6 @@ public interface IFlwTaskService {
      */
     FlowHisTask selectHisTaskById(Long taskId);
 
-    /**
-     * 按照实例id查询任务
-     *
-     * @param instanceIdList 流程实例id
-     * @return 结果
-     */
-    List<FlowTask> selectByInstIdList(List<Long> instanceIdList);
-
     /**
      * 按照实例id查询任务
      *
@@ -191,14 +174,6 @@ public interface IFlwTaskService {
      */
     boolean taskOperation(TaskOperationBo bo, String taskOperation);
 
-    /**
-     * 获取任务所有办理人
-     *
-     * @param taskIdList 任务id
-     * @return 结果
-     */
-    Map<Long, List<UserDTO>> currentTaskAllUser(List<Long> taskIdList);
-
     /**
      * 获取当前任务的所有办理人
      *

+ 0 - 25
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java

@@ -379,31 +379,6 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
         return null;
     }
 
-    /**
-     * 按任务id查询实例
-     *
-     * @param taskIdList 任务id
-     */
-    @Override
-    public List<FlowInstance> selectByTaskIdList(List<Long> taskIdList) {
-        if (CollUtil.isEmpty(taskIdList)) {
-            return Collections.emptyList();
-        }
-        Set<Long> instanceIds = new HashSet<>();
-        List<FlowTask> flowTaskList = flwTaskService.selectByIdList(taskIdList);
-        for (FlowTask flowTask : flowTaskList) {
-            instanceIds.add(flowTask.getInstanceId());
-        }
-        List<FlowHisTask> flowHisTaskList = flwTaskService.selectHisTaskByIdList(taskIdList);
-        for (FlowHisTask flowHisTask : flowHisTaskList) {
-            instanceIds.add(flowHisTask.getInstanceId());
-        }
-        if (!instanceIds.isEmpty()) {
-            return this.selectInstListByIdList(new ArrayList<>(instanceIds));
-        }
-        return Collections.emptyList();
-    }
-
     /**
      * 作废流程
      *

+ 32 - 78
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java

@@ -55,7 +55,6 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.*;
-import java.util.stream.Collectors;
 
 import static org.dromara.workflow.common.constant.FlowConstant.*;
 
@@ -252,14 +251,12 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
         hisTask.setCreateTime(updateTime);
         hisTask.setUpdateTime(updateTime);
         hisTaskService.save(hisTask);
-        List<User> userList = flowCopyList.stream()
-            .map(flowCopy -> {
-                FlowUser flowUser = new FlowUser();
-                flowUser.setType(TaskAssigneeType.COPY.getCode());
-                flowUser.setProcessedBy(String.valueOf(flowCopy.getUserId()));
-                flowUser.setAssociated(taskId);
-                return flowUser;
-            }).collect(Collectors.toList());
+        List<User> userList = StreamUtils.toList(flowCopyList, x ->
+            new FlowUser()
+                .setType(TaskAssigneeType.COPY.getCode())
+                .setProcessedBy(String.valueOf(x.getUserId()))
+                .setAssociated(taskId)
+        );
         // 批量保存抄送人员
         FlowEngine.userService().saveBatch(userList);
     }
@@ -276,7 +273,8 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
         queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey());
         queryWrapper.in("t.processed_by", LoginHelper.getUserIdStr());
         queryWrapper.in("t.flow_status", BusinessStatusEnum.WAITING.getStatus());
-        Page<FlowTaskVo> page = this.getFlowTaskVoPage(pageQuery, queryWrapper);
+        Page<FlowTaskVo> page = flwTaskMapper.getListRunTask(pageQuery.build(), queryWrapper);
+        this.wrapAssigneeInfo(page.getRecords());
         return TableDataInfo.build(page);
     }
 
@@ -306,25 +304,28 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
     public TableDataInfo<FlowTaskVo> pageByAllTaskWait(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
         QueryWrapper<FlowTaskBo> queryWrapper = buildQueryWrapper(flowTaskBo);
         queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey());
-        Page<FlowTaskVo> page = getFlowTaskVoPage(pageQuery, queryWrapper);
+        Page<FlowTaskVo> page = flwTaskMapper.getListRunTask(pageQuery.build(), queryWrapper);
+        this.wrapAssigneeInfo(page.getRecords());
         return TableDataInfo.build(page);
     }
 
-    private Page<FlowTaskVo> getFlowTaskVoPage(PageQuery pageQuery, QueryWrapper<FlowTaskBo> queryWrapper) {
-        Page<FlowTaskVo> page = flwTaskMapper.getListRunTask(pageQuery.build(), queryWrapper);
-        List<FlowTaskVo> records = page.getRecords();
-        if (CollUtil.isNotEmpty(records)) {
-            List<Long> taskIds = StreamUtils.toList(records, FlowTaskVo::getId);
-            Map<Long, List<UserDTO>> listMap = currentTaskAllUser(taskIds);
-            records.forEach(t -> {
-                List<UserDTO> userList = listMap.getOrDefault(t.getId(), Collections.emptyList());
-                if (CollUtil.isNotEmpty(userList)) {
-                    t.setAssigneeIds(StreamUtils.join(userList, e -> String.valueOf(e.getUserId())));
-                    t.setAssigneeNames(StreamUtils.join(userList, UserDTO::getNickName));
-                }
-            });
+    /**
+     * 为流程任务列表封装处理人 ID(assigneeIds)
+     *
+     * @param taskList 流程任务列表
+     */
+    private void wrapAssigneeInfo(List<FlowTaskVo> taskList) {
+        if (CollUtil.isEmpty(taskList)) {
+            return;
+        }
+        List<User> associatedUsers = FlowEngine.userService()
+            .getByAssociateds(StreamUtils.toList(taskList, FlowTaskVo::getId));
+        Map<Long, List<User>> taskUserMap = StreamUtils.groupByKey(associatedUsers, User::getAssociated);
+        // 组装用户数据回任务列表
+        for (FlowTaskVo task : taskList) {
+            List<User> users = taskUserMap.get(task.getId());
+            task.setAssigneeIds(StreamUtils.join(users, User::getProcessedBy));
         }
-        return page;
     }
 
     /**
@@ -548,18 +549,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
         return nextFlowNodes;
     }
 
-    /**
-     * 按照任务id查询任务
-     *
-     * @param taskIdList 任务id
-     * @return 结果
-     */
-    @Override
-    public List<FlowHisTask> selectHisTaskByIdList(List<Long> taskIdList) {
-        return flowHisTaskMapper.selectList(new LambdaQueryWrapper<>(FlowHisTask.class)
-            .in(FlowHisTask::getId, taskIdList));
-    }
-
     /**
      * 按照任务id查询任务
      *
@@ -572,17 +561,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
             .eq(FlowHisTask::getId, taskId));
     }
 
-    /**
-     * 按照实例id查询任务
-     *
-     * @param instanceIdList 流程实例id
-     */
-    @Override
-    public List<FlowTask> selectByInstIdList(List<Long> instanceIdList) {
-        return flowTaskMapper.selectList(new LambdaQueryWrapper<>(FlowTask.class)
-            .in(FlowTask::getInstanceId, instanceIdList));
-    }
-
     /**
      * 按照实例id查询任务
      *
@@ -683,15 +661,12 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
             // 批量删除现有任务的办理人记录
             if (CollUtil.isNotEmpty(flowTasks)) {
                 FlowEngine.userService().deleteByTaskIds(StreamUtils.toList(flowTasks, FlowTask::getId));
-                List<User> userList = flowTasks.stream()
-                    .map(flowTask -> {
-                        FlowUser flowUser = new FlowUser();
-                        flowUser.setType(TaskAssigneeType.APPROVER.getCode());
-                        flowUser.setProcessedBy(userId);
-                        flowUser.setAssociated(flowTask.getId());
-                        return flowUser;
-                    })
-                    .collect(Collectors.toList());
+                List<User> userList = StreamUtils.toList(flowTasks, flowTask ->
+                    new FlowUser()
+                        .setType(TaskAssigneeType.APPROVER.getCode())
+                        .setProcessedBy(userId)
+                        .setAssociated(flowTask.getId())
+                );
                 if (CollUtil.isNotEmpty(userList)) {
                     FlowEngine.userService().saveBatch(userList);
                 }
@@ -703,27 +678,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
         return true;
     }
 
-    /**
-     * 获取任务所有办理人
-     *
-     * @param taskIdList 任务id
-     */
-    @Override
-    public Map<Long, List<UserDTO>> currentTaskAllUser(List<Long> taskIdList) {
-        Map<Long, List<UserDTO>> map = new HashMap<>();
-        // 获取与当前任务关联的用户列表
-        List<User> associatedUsers = FlowEngine.userService().getByAssociateds(taskIdList);
-        Map<Long, List<User>> listMap = StreamUtils.groupByKey(associatedUsers, User::getAssociated);
-        for (Map.Entry<Long, List<User>> entry : listMap.entrySet()) {
-            List<User> value = entry.getValue();
-            if (CollUtil.isNotEmpty(value)) {
-                List<UserDTO> userDtoList = userService.selectListByIds(StreamUtils.toList(value, e -> Convert.toLong(e.getProcessedBy())));
-                map.put(entry.getKey(), userDtoList);
-            }
-        }
-        return map;
-    }
-
     /**
      * 获取当前任务的所有办理人
      *