Commit acea73c9915e6c8ec9e20efd336b18c982e63b3b
1 parent
ba4b3701
BPM:新增【流程任务】菜单,用于全部流程实例的查询
Showing
5 changed files
with
83 additions
and
15 deletions
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(); | ... | ... |