Commit acea73c9915e6c8ec9e20efd336b18c982e63b3b

Authored by YunaiV
1 parent ba4b3701

BPM:新增【流程任务】菜单,用于全部流程实例的查询

yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmTaskController.java
... ... @@ -59,8 +59,12 @@ public class BpmTaskController {
59 59 @GetMapping("todo-page")
60 60 @Operation(summary = "获取 Todo 待办任务分页")
61 61 @PreAuthorize("@ss.hasPermission('bpm:task:query')")
62   - public CommonResult<PageResult<BpmTaskRespVO>> getTodoTaskPage(@Valid BpmTaskPageReqVO pageVO) {
63   - PageResult<Task> pageResult = taskService.getTodoTaskPage(getLoginUserId(), pageVO);
  62 + public CommonResult<PageResult<BpmTaskRespVO>> getTaskTodoPage(@Valid BpmTaskPageReqVO pageVO) {
  63 + PageResult<Task> pageResult = taskService.getTaskTodoPage(getLoginUserId(), pageVO);
  64 + if (CollUtil.isEmpty(pageResult.getList())) {
  65 + return success(PageResult.empty());
  66 + }
  67 +
64 68 // 拼接数据
65 69 Map<String, ProcessInstance> processInstanceMap = processInstanceService.getProcessInstanceMap(
66 70 convertSet(pageResult.getList(), Task::getProcessInstanceId));
... ... @@ -72,14 +76,39 @@ public class BpmTaskController {
72 76 @GetMapping("done-page")
73 77 @Operation(summary = "获取 Done 已办任务分页")
74 78 @PreAuthorize("@ss.hasPermission('bpm:task:query')")
75   - public CommonResult<PageResult<BpmTaskRespVO>> getDoneTaskPage(@Valid BpmTaskPageReqVO pageVO) {
76   - PageResult<HistoricTaskInstance> pageResult = taskService.getDoneTaskPage(getLoginUserId(), pageVO);
  79 + public CommonResult<PageResult<BpmTaskRespVO>> getTaskDonePage(@Valid BpmTaskPageReqVO pageVO) {
  80 + PageResult<HistoricTaskInstance> pageResult = taskService.getTaskDonePage(getLoginUserId(), pageVO);
  81 + if (CollUtil.isEmpty(pageResult.getList())) {
  82 + return success(PageResult.empty());
  83 + }
  84 +
77 85 // 拼接数据
78 86 Map<String, HistoricProcessInstance> processInstanceMap = processInstanceService.getHistoricProcessInstanceMap(
79 87 convertSet(pageResult.getList(), HistoricTaskInstance::getProcessInstanceId));
80 88 Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(
81 89 convertSet(processInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId())));
82   - return success(BpmTaskConvert.INSTANCE.buildDoneTaskPage(pageResult, processInstanceMap, userMap));
  90 + return success(BpmTaskConvert.INSTANCE.buildTaskPage(pageResult, processInstanceMap, userMap, null));
  91 + }
  92 +
  93 + @GetMapping("manager-page")
  94 + @Operation(summary = "获取全部任务的分页", description = "用于【流程任务】菜单")
  95 + @PreAuthorize("@ss.hasPermission('bpm:task:mananger-query')")
  96 + public CommonResult<PageResult<BpmTaskRespVO>> getDoneTaskPage(@Valid BpmTaskPageReqVO pageVO) {
  97 + PageResult<HistoricTaskInstance> pageResult = taskService.getTaskPage(getLoginUserId(), pageVO);
  98 + if (CollUtil.isEmpty(pageResult.getList())) {
  99 + return success(PageResult.empty());
  100 + }
  101 +
  102 + // 拼接数据
  103 + Map<String, HistoricProcessInstance> processInstanceMap = processInstanceService.getHistoricProcessInstanceMap(
  104 + convertSet(pageResult.getList(), HistoricTaskInstance::getProcessInstanceId));
  105 + // 获得 User 和 Dept Map
  106 + Set<Long> userIds = convertSet(processInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId()));
  107 + userIds.addAll(convertSet(pageResult.getList(), task -> NumberUtils.parseLong(task.getAssignee())));
  108 + Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(userIds);
  109 + Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap(
  110 + convertSet(userMap.values(), AdminUserRespDTO::getDeptId));
  111 + return success(BpmTaskConvert.INSTANCE.buildTaskPage(pageResult, processInstanceMap, userMap, deptMap));
83 112 }
84 113  
85 114 @GetMapping("/list-by-process-instance-id")
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmProcessInstanceConvert.java
... ... @@ -51,9 +51,11 @@ public interface BpmProcessInstanceConvert {
51 51 MapUtils.findAndThen(categoryMap, respVO.getCategory(), category -> respVO.setCategoryName(category.getName()));
52 52 respVO.setTasks(BeanUtils.toBean(taskMap.get(respVO.getId()), BpmProcessInstanceRespVO.Task.class));
53 53 // user
54   - AdminUserRespDTO startUser = userMap.get(NumberUtils.parseLong(pageResult.getList().get(i).getStartUserId()));
55   - respVO.setStartUser(BeanUtils.toBean(startUser, BpmProcessInstanceRespVO.User.class));
56   - MapUtils.findAndThen(deptMap, startUser.getDeptId(), dept -> respVO.getStartUser().setDeptName(dept.getName()));
  54 + if (userMap != null) {
  55 + AdminUserRespDTO startUser = userMap.get(NumberUtils.parseLong(pageResult.getList().get(i).getStartUserId()));
  56 + respVO.setStartUser(BeanUtils.toBean(startUser, BpmProcessInstanceRespVO.User.class));
  57 + MapUtils.findAndThen(deptMap, startUser.getDeptId(), dept -> respVO.getStartUser().setDeptName(dept.getName()));
  58 + }
57 59 }
58 60 return vpPageResult;
59 61 }
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.java
... ... @@ -52,12 +52,19 @@ public interface BpmTaskConvert {
52 52 });
53 53 }
54 54  
55   - default PageResult<BpmTaskRespVO> buildDoneTaskPage(PageResult<HistoricTaskInstance> pageResult,
56   - Map<String, HistoricProcessInstance> processInstanceMap,
57   - Map<Long, AdminUserRespDTO> userMap) {
  55 + default PageResult<BpmTaskRespVO> buildTaskPage(PageResult<HistoricTaskInstance> pageResult,
  56 + Map<String, HistoricProcessInstance> processInstanceMap,
  57 + Map<Long, AdminUserRespDTO> userMap,
  58 + Map<Long, DeptRespDTO> deptMap) {
58 59 List<BpmTaskRespVO> taskVOList = CollectionUtils.convertList(pageResult.getList(), task -> {
59 60 BpmTaskRespVO taskVO = BeanUtils.toBean(task, BpmTaskRespVO.class);
60 61 taskVO.setStatus(FlowableUtils.getTaskStatus(task)).setReason(FlowableUtils.getTaskReason(task));
  62 + // 用户信息
  63 + AdminUserRespDTO assignUser = userMap.get(NumberUtils.parseLong(task.getAssignee()));
  64 + if (assignUser != null) {
  65 + taskVO.setAssigneeUser(BeanUtils.toBean(assignUser, BpmProcessInstanceRespVO.User.class));
  66 + findAndThen(deptMap, assignUser.getDeptId(), dept -> taskVO.getAssigneeUser().setDeptName(dept.getName()));
  67 + }
61 68 // 流程实例
62 69 HistoricProcessInstance processInstance = processInstanceMap.get(taskVO.getProcessInstanceId());
63 70 if (processInstance != null) {
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java
... ... @@ -27,7 +27,7 @@ public interface BpmTaskService {
27 27 * @param pageReqVO 分页请求
28 28 * @return 流程任务分页
29 29 */
30   - PageResult<Task> getTodoTaskPage(Long userId, BpmTaskPageReqVO pageReqVO);
  30 + PageResult<Task> getTaskTodoPage(Long userId, BpmTaskPageReqVO pageReqVO);
31 31  
32 32 /**
33 33 * 获得已办的流程任务分页
... ... @@ -36,7 +36,16 @@ public interface BpmTaskService {
36 36 * @param pageReqVO 分页请求
37 37 * @return 流程任务分页
38 38 */
39   - PageResult<HistoricTaskInstance> getDoneTaskPage(Long userId, BpmTaskPageReqVO pageReqVO);
  39 + PageResult<HistoricTaskInstance> getTaskDonePage(Long userId, BpmTaskPageReqVO pageReqVO);
  40 +
  41 + /**
  42 + * 获得全部的流程任务分页
  43 + *
  44 + * @param userId 用户编号
  45 + * @param pageReqVO 分页请求
  46 + * @return 流程任务分页
  47 + */
  48 + PageResult<HistoricTaskInstance> getTaskPage(Long userId, BpmTaskPageReqVO pageReqVO);
40 49  
41 50 /**
42 51 * 获得流程任务 Map
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
... ... @@ -86,7 +86,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
86 86 private AdminUserApi adminUserApi;
87 87  
88 88 @Override
89   - public PageResult<Task> getTodoTaskPage(Long userId, BpmTaskPageReqVO pageVO) {
  89 + public PageResult<Task> getTaskTodoPage(Long userId, BpmTaskPageReqVO pageVO) {
90 90 TaskQuery taskQuery = taskService.createTaskQuery()
91 91 .taskAssignee(String.valueOf(userId)) // 分配给自己
92 92 .active()
... ... @@ -108,7 +108,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
108 108 }
109 109  
110 110 @Override
111   - public PageResult<HistoricTaskInstance> getDoneTaskPage(Long userId, BpmTaskPageReqVO pageVO) {
  111 + public PageResult<HistoricTaskInstance> getTaskDonePage(Long userId, BpmTaskPageReqVO pageVO) {
112 112 HistoricTaskInstanceQuery taskQuery = historyService.createHistoricTaskInstanceQuery()
113 113 .finished() // 已完成
114 114 .taskAssignee(String.valueOf(userId)) // 分配给自己
... ... @@ -131,6 +131,27 @@ public class BpmTaskServiceImpl implements BpmTaskService {
131 131 }
132 132  
133 133 @Override
  134 + public PageResult<HistoricTaskInstance> getTaskPage(Long userId, BpmTaskPageReqVO pageVO) {
  135 + HistoricTaskInstanceQuery taskQuery = historyService.createHistoricTaskInstanceQuery()
  136 + .includeTaskLocalVariables()
  137 + .orderByHistoricTaskInstanceEndTime().desc(); // 审批时间倒序
  138 + if (StrUtil.isNotBlank(pageVO.getName())) {
  139 + taskQuery.taskNameLike("%" + pageVO.getName() + "%");
  140 + }
  141 + if (ArrayUtil.isNotEmpty(pageVO.getCreateTime())) {
  142 + taskQuery.taskCreatedAfter(DateUtils.of(pageVO.getCreateTime()[0]));
  143 + taskQuery.taskCreatedAfter(DateUtils.of(pageVO.getCreateTime()[1]));
  144 + }
  145 + // 执行查询
  146 + long count = taskQuery.count();
  147 + if (count == 0) {
  148 + return PageResult.empty();
  149 + }
  150 + List<HistoricTaskInstance> tasks = taskQuery.listPage(PageUtils.getStart(pageVO), pageVO.getPageSize());
  151 + return new PageResult<>(tasks, count);
  152 + }
  153 +
  154 + @Override
134 155 public List<Task> getTasksByProcessInstanceIds(List<String> processInstanceIds) {
135 156 if (CollUtil.isEmpty(processInstanceIds)) {
136 157 return Collections.emptyList();
... ...