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,8 +59,12 @@ public class BpmTaskController {
59 @GetMapping("todo-page") 59 @GetMapping("todo-page")
60 @Operation(summary = "获取 Todo 待办任务分页") 60 @Operation(summary = "获取 Todo 待办任务分页")
61 @PreAuthorize("@ss.hasPermission('bpm:task:query')") 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 Map<String, ProcessInstance> processInstanceMap = processInstanceService.getProcessInstanceMap( 69 Map<String, ProcessInstance> processInstanceMap = processInstanceService.getProcessInstanceMap(
66 convertSet(pageResult.getList(), Task::getProcessInstanceId)); 70 convertSet(pageResult.getList(), Task::getProcessInstanceId));
@@ -72,14 +76,39 @@ public class BpmTaskController { @@ -72,14 +76,39 @@ public class BpmTaskController {
72 @GetMapping("done-page") 76 @GetMapping("done-page")
73 @Operation(summary = "获取 Done 已办任务分页") 77 @Operation(summary = "获取 Done 已办任务分页")
74 @PreAuthorize("@ss.hasPermission('bpm:task:query')") 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 Map<String, HistoricProcessInstance> processInstanceMap = processInstanceService.getHistoricProcessInstanceMap( 86 Map<String, HistoricProcessInstance> processInstanceMap = processInstanceService.getHistoricProcessInstanceMap(
79 convertSet(pageResult.getList(), HistoricTaskInstance::getProcessInstanceId)); 87 convertSet(pageResult.getList(), HistoricTaskInstance::getProcessInstanceId));
80 Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap( 88 Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(
81 convertSet(processInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId()))); 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 @GetMapping("/list-by-process-instance-id") 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,9 +51,11 @@ public interface BpmProcessInstanceConvert {
51 MapUtils.findAndThen(categoryMap, respVO.getCategory(), category -> respVO.setCategoryName(category.getName())); 51 MapUtils.findAndThen(categoryMap, respVO.getCategory(), category -> respVO.setCategoryName(category.getName()));
52 respVO.setTasks(BeanUtils.toBean(taskMap.get(respVO.getId()), BpmProcessInstanceRespVO.Task.class)); 52 respVO.setTasks(BeanUtils.toBean(taskMap.get(respVO.getId()), BpmProcessInstanceRespVO.Task.class));
53 // user 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 return vpPageResult; 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,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 List<BpmTaskRespVO> taskVOList = CollectionUtils.convertList(pageResult.getList(), task -> { 59 List<BpmTaskRespVO> taskVOList = CollectionUtils.convertList(pageResult.getList(), task -> {
59 BpmTaskRespVO taskVO = BeanUtils.toBean(task, BpmTaskRespVO.class); 60 BpmTaskRespVO taskVO = BeanUtils.toBean(task, BpmTaskRespVO.class);
60 taskVO.setStatus(FlowableUtils.getTaskStatus(task)).setReason(FlowableUtils.getTaskReason(task)); 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 HistoricProcessInstance processInstance = processInstanceMap.get(taskVO.getProcessInstanceId()); 69 HistoricProcessInstance processInstance = processInstanceMap.get(taskVO.getProcessInstanceId());
63 if (processInstance != null) { 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,7 +27,7 @@ public interface BpmTaskService {
27 * @param pageReqVO 分页请求 27 * @param pageReqVO 分页请求
28 * @return 流程任务分页 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,7 +36,16 @@ public interface BpmTaskService {
36 * @param pageReqVO 分页请求 36 * @param pageReqVO 分页请求
37 * @return 流程任务分页 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 * 获得流程任务 Map 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,7 +86,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
86 private AdminUserApi adminUserApi; 86 private AdminUserApi adminUserApi;
87 87
88 @Override 88 @Override
89 - public PageResult<Task> getTodoTaskPage(Long userId, BpmTaskPageReqVO pageVO) { 89 + public PageResult<Task> getTaskTodoPage(Long userId, BpmTaskPageReqVO pageVO) {
90 TaskQuery taskQuery = taskService.createTaskQuery() 90 TaskQuery taskQuery = taskService.createTaskQuery()
91 .taskAssignee(String.valueOf(userId)) // 分配给自己 91 .taskAssignee(String.valueOf(userId)) // 分配给自己
92 .active() 92 .active()
@@ -108,7 +108,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -108,7 +108,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
108 } 108 }
109 109
110 @Override 110 @Override
111 - public PageResult<HistoricTaskInstance> getDoneTaskPage(Long userId, BpmTaskPageReqVO pageVO) { 111 + public PageResult<HistoricTaskInstance> getTaskDonePage(Long userId, BpmTaskPageReqVO pageVO) {
112 HistoricTaskInstanceQuery taskQuery = historyService.createHistoricTaskInstanceQuery() 112 HistoricTaskInstanceQuery taskQuery = historyService.createHistoricTaskInstanceQuery()
113 .finished() // 已完成 113 .finished() // 已完成
114 .taskAssignee(String.valueOf(userId)) // 分配给自己 114 .taskAssignee(String.valueOf(userId)) // 分配给自己
@@ -131,6 +131,27 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -131,6 +131,27 @@ public class BpmTaskServiceImpl implements BpmTaskService {
131 } 131 }
132 132
133 @Override 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 public List<Task> getTasksByProcessInstanceIds(List<String> processInstanceIds) { 155 public List<Task> getTasksByProcessInstanceIds(List<String> processInstanceIds) {
135 if (CollUtil.isEmpty(processInstanceIds)) { 156 if (CollUtil.isEmpty(processInstanceIds)) {
136 return Collections.emptyList(); 157 return Collections.emptyList();