Browse Source

1、审批中心查询员工的任务

dongpo 6 months ago
parent
commit
3eba6e327f

+ 11 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java

@@ -16,6 +16,8 @@ import cn.iocoder.yudao.module.bpm.service.definition.BpmCategoryService;
 import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService;
 import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
 import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService;
+import cn.iocoder.yudao.module.employee.api.EmployeeApi;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 import cn.iocoder.yudao.module.system.api.dept.DeptApi;
 import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
@@ -33,6 +35,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -60,14 +63,21 @@ public class BpmProcessInstanceController {
     private AdminUserApi adminUserApi;
     @Resource
     private DeptApi deptApi;
+    @Resource
+    private EmployeeApi employeeApi;
 
     @GetMapping("/my-page")
     @Operation(summary = "获得我已发起的流程实例分页列表", description = "在【我的流程】菜单中,进行调用")
     // @PreAuthorize("@ss.hasPermission('bpm:process-instance:query')")
     public CommonResult<PageResult<BpmProcessInstanceRespVO>> getProcessInstanceMyPage(
             @Valid @ParameterObject BpmProcessInstancePageReqVO pageReqVO) {
+        Long loginUserId = getLoginUserId();
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            return success(PageResult.empty(0L));
+        }
         PageResult<HistoricProcessInstance> pageResult = processInstanceService.getProcessInstancePage(
-                getLoginUserId(), pageReqVO);
+                loginEmployee.getId(), pageReqVO);
         if (CollUtil.isEmpty(pageResult.getList())) {
             return success(PageResult.empty(pageResult.getTotal()));
         }

+ 35 - 10
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmTaskController.java

@@ -12,6 +12,8 @@ import cn.iocoder.yudao.module.bpm.service.definition.BpmFormService;
 import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService;
 import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
 import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService;
+import cn.iocoder.yudao.module.employee.api.EmployeeApi;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 import cn.iocoder.yudao.module.system.api.dept.DeptApi;
 import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
@@ -61,13 +63,20 @@ public class BpmTaskController {
     private AdminUserApi adminUserApi;
     @Resource
     private DeptApi deptApi;
+    @Resource
+    private EmployeeApi employeeApi;
 
     @GetMapping("todo-count")
     @Operation(summary = "获取我的待办任务数量")
     @ApiOperationSupport(order = 1)
     // @PreAuthorize("@ss.hasPermission('bpm:task:count')")
     public CommonResult<Long> getTaskTodoCount(@Valid @ParameterObject BpmTaskPageReqVO pageVO) {
-        Long todoCount = taskService.getTaskTodoCount(getLoginUserId(), pageVO);
+        Long loginUserId = getLoginUserId();
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            return success(0L, "员工信息不存在");
+        }
+        Long todoCount = taskService.getTaskTodoCount(loginEmployee.getId(), pageVO);
         return success(todoCount, "查询我的待办任务数量成功");
     }
 
@@ -76,7 +85,13 @@ public class BpmTaskController {
     @ApiOperationSupport(order = 2)
     // @PreAuthorize("@ss.hasPermission('bpm:task:query')")
     public CommonResult<PageResult<BpmTaskRespVO>> getTaskTodoPage(@Valid @ParameterObject BpmTaskPageReqVO pageVO) {
-        PageResult<Task> pageResult = taskService.getTaskTodoPage(getLoginUserId(), pageVO);
+        Long loginUserId = getLoginUserId();
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            return success(PageResult.empty(), "员工信息不存在");
+        }
+
+        PageResult<Task> pageResult = taskService.getTaskTodoPage(loginEmployee.getId(), pageVO);
         if (CollUtil.isEmpty(pageResult.getList())) {
             return success(PageResult.empty());
         }
@@ -85,12 +100,14 @@ public class BpmTaskController {
         Map<String, Task> taskMap = convertMap(pageResult.getList(), Task::getId);
         Map<String, ProcessInstance> processInstanceMap = processInstanceService.getProcessInstanceMap(
                 convertSet(pageResult.getList(), Task::getProcessInstanceId));
-        Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(
+        // Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(
+        //         convertSet(processInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId())));
+        Map<Long, EmployeeRespDTO> employeeMap = employeeApi.getEmployeeMap(
                 convertSet(processInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId())));
         Map<String, BpmProcessDefinitionExtDO> bpmProcessDefinitionExtDOMap = processDefinitionService.getProcessDefinitionExtMap(
                 convertSet(processInstanceMap.values(), ProcessInstance::getProcessDefinitionId)
         );
-        PageResult<BpmTaskRespVO> taskRespVOPageResult = BpmTaskConvert.INSTANCE.buildTodoTaskPage(pageResult, processInstanceMap, userMap, bpmProcessDefinitionExtDOMap, taskMap);
+        PageResult<BpmTaskRespVO> taskRespVOPageResult = BpmTaskConvert.INSTANCE.buildTodoTaskPage(pageResult, processInstanceMap, employeeMap, bpmProcessDefinitionExtDOMap, taskMap);
         return success(taskRespVOPageResult, "查询我的待办任务成功");
     }
 
@@ -98,7 +115,12 @@ public class BpmTaskController {
     @Operation(summary = "获取我的已处理任务分页")
     // @PreAuthorize("@ss.hasPermission('bpm:task:query')")
     public CommonResult<PageResult<BpmTaskRespVO>> getTaskDonePage(@Valid @ParameterObject BpmTaskPageReqVO pageVO) {
-        PageResult<HistoricTaskInstance> pageResult = taskService.getTaskDonePage(getLoginUserId(), pageVO);
+        Long loginUserId = getLoginUserId();
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
+        if (loginEmployee == null) {
+            return success(PageResult.empty(), "员工信息不存在");
+        }
+        PageResult<HistoricTaskInstance> pageResult = taskService.getTaskDonePage(loginEmployee.getId(), pageVO);
         if (CollUtil.isEmpty(pageResult.getList())) {
             return success(PageResult.empty());
         }
@@ -106,12 +128,14 @@ public class BpmTaskController {
         // 拼接数据
         Map<String, HistoricProcessInstance> processInstanceMap = processInstanceService.getHistoricProcessInstanceMap(
                 convertSet(pageResult.getList(), HistoricTaskInstance::getProcessInstanceId));
-        Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(
+        // Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(
+        //         convertSet(processInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId())));
+        Map<Long, EmployeeRespDTO> employeeMap = employeeApi.getEmployeeMap(
                 convertSet(processInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId())));
         Map<String, BpmProcessDefinitionExtDO> bpmProcessDefinitionExtDOMap = processDefinitionService.getProcessDefinitionExtMap(
                 convertSet(processInstanceMap.values(), HistoricProcessInstance::getProcessDefinitionId)
         );
-        return success(BpmTaskConvert.INSTANCE.buildTaskPage(pageResult, processInstanceMap, userMap, null, bpmProcessDefinitionExtDOMap));
+        return success(BpmTaskConvert.INSTANCE.buildTaskPage(pageResult, processInstanceMap, employeeMap, null, bpmProcessDefinitionExtDOMap));
     }
 
     @GetMapping("manager-page")
@@ -129,10 +153,11 @@ public class BpmTaskController {
         // 获得 User 和 Dept Map
         Set<Long> userIds = convertSet(processInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId()));
         userIds.addAll(convertSet(pageResult.getList(), task -> NumberUtils.parseLong(task.getAssignee())));
-        Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(userIds);
+        // Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(userIds);
+        Map<Long, EmployeeRespDTO> employeeMap = employeeApi.getEmployeeMap(userIds);
         Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap(
-                convertSet(userMap.values(), AdminUserRespDTO::getDeptId));
-        return success(BpmTaskConvert.INSTANCE.buildTaskPage(pageResult, processInstanceMap, userMap, deptMap, null));
+                convertSet(employeeMap.values(), EmployeeRespDTO::getDeptId));
+        return success(BpmTaskConvert.INSTANCE.buildTaskPage(pageResult, processInstanceMap, employeeMap, deptMap, null));
     }
 
     @GetMapping("/list-by-process-instance-id")

+ 17 - 10
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.java

@@ -14,6 +14,7 @@ import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitio
 import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmConstants;
 import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.FlowableUtils;
 import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
 import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
 import org.flowable.engine.history.HistoricProcessInstance;
@@ -46,7 +47,7 @@ public interface BpmTaskConvert {
 
     default PageResult<BpmTaskRespVO> buildTodoTaskPage(PageResult<Task> pageResult,
                                                         Map<String, ProcessInstance> processInstanceMap,
-                                                        Map<Long, AdminUserRespDTO> userMap,
+                                                        Map<Long, EmployeeRespDTO> employeeMap,
                                                         Map<String, BpmProcessDefinitionExtDO> bpmProcessDefinitionExtDOMap,
                                                         Map<String, Task> taskMap) {
         return BeanUtils.toBean(pageResult, BpmTaskRespVO.class, taskVO -> {
@@ -62,16 +63,18 @@ public interface BpmTaskConvert {
                 return;
             }
             taskVO.setProcessInstance(BeanUtils.toBean(processInstance, BpmTaskRespVO.ProcessInstance.class));
-            AdminUserRespDTO startUser = userMap.get(NumberUtils.parseLong(processInstance.getStartUserId()));
+            EmployeeRespDTO startEmployee = employeeMap.get(NumberUtils.parseLong(processInstance.getStartUserId()));
             BpmProcessDefinitionExtDO bpmProcessDefinitionExtDO = bpmProcessDefinitionExtDOMap.get(processInstance.getProcessDefinitionId());
             taskVO.setProcessDefinition(BeanUtils.toBean(bpmProcessDefinitionExtDO, BpmProcessDefinitionExtDO.class));
-            taskVO.getProcessInstance().setStartUser(BeanUtils.toBean(startUser, BpmProcessInstanceRespVO.User.class));
+            BpmProcessInstanceRespVO.User user = BeanUtils.toBean(startEmployee, BpmProcessInstanceRespVO.User.class);
+            user.setNickname(startEmployee.getName());
+            taskVO.getProcessInstance().setStartUser(user);
         });
     }
 
     default PageResult<BpmTaskRespVO> buildTaskPage(PageResult<HistoricTaskInstance> pageResult,
                                                     Map<String, HistoricProcessInstance> processInstanceMap,
-                                                    Map<Long, AdminUserRespDTO> userMap,
+                                                    Map<Long, EmployeeRespDTO> employeeMap,
                                                     Map<Long, DeptRespDTO> deptMap,
                                                     Map<String, BpmProcessDefinitionExtDO> bpmProcessDefinitionExtDOMap) {
         List<BpmTaskRespVO> taskVOList = CollectionUtils.convertList(pageResult.getList(), task -> {
@@ -80,17 +83,21 @@ public interface BpmTaskConvert {
             String taskReason = FlowableUtils.getTaskReason(task);
             taskVO.setStatus(taskStatus).setReason(taskReason);
             // 用户信息
-            AdminUserRespDTO assignUser = userMap.get(NumberUtils.parseLong(task.getAssignee()));
-            if (assignUser != null) {
-                taskVO.setAssigneeUser(BeanUtils.toBean(assignUser, BpmProcessInstanceRespVO.User.class));
-                findAndThen(deptMap, assignUser.getDeptId(), dept -> taskVO.getAssigneeUser().setDeptName(dept.getName()));
+            EmployeeRespDTO assignEmployee = employeeMap.get(NumberUtils.parseLong(task.getAssignee()));
+            if (assignEmployee != null) {
+                BpmProcessInstanceRespVO.User user = BeanUtils.toBean(assignEmployee, BpmProcessInstanceRespVO.User.class);
+                user.setNickname(assignEmployee.getName());
+                taskVO.setAssigneeUser(user);
+                findAndThen(deptMap, assignEmployee.getDeptId(), dept -> taskVO.getAssigneeUser().setDeptName(dept.getName()));
             }
             // 流程实例
             HistoricProcessInstance processInstance = processInstanceMap.get(taskVO.getProcessInstanceId());
             if (processInstance != null) {
-                AdminUserRespDTO startUser = userMap.get(NumberUtils.parseLong(processInstance.getStartUserId()));
+                EmployeeRespDTO startEmployee = employeeMap.get(NumberUtils.parseLong(processInstance.getStartUserId()));
                 taskVO.setProcessInstance(BeanUtils.toBean(processInstance, BpmTaskRespVO.ProcessInstance.class));
-                taskVO.getProcessInstance().setStartUser(BeanUtils.toBean(startUser, BpmProcessInstanceRespVO.User.class));
+                BpmProcessInstanceRespVO.User user = BeanUtils.toBean(startEmployee, BpmProcessInstanceRespVO.User.class);
+                user.setNickname(startEmployee.getName());
+                taskVO.getProcessInstance().setStartUser(user);
 
                 BpmProcessDefinitionExtDO bpmProcessDefinitionExtDO = bpmProcessDefinitionExtDOMap.get(processInstance.getProcessDefinitionId());
                 taskVO.setProcessDefinition(BeanUtils.toBean(bpmProcessDefinitionExtDO, BpmProcessDefinitionExtDO.class));

+ 2 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java

@@ -114,6 +114,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
     public PageResult<Task> getTaskTodoPage(Long userId, BpmTaskPageReqVO pageVO) {
         TaskQuery taskQuery = taskService.createTaskQuery()
                 .taskAssignee(String.valueOf(userId)) // 分配给自己
+                .taskTenantId(FlowableUtils.getTenantId())
                 .active()
                 .includeProcessVariables()
                 .orderByTaskCreateTime().desc(); // 创建时间倒序
@@ -137,6 +138,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
         HistoricTaskInstanceQuery taskQuery = historyService.createHistoricTaskInstanceQuery()
                 .finished() // 已完成
                 .taskAssignee(String.valueOf(userId)) // 分配给自己
+                .taskTenantId(FlowableUtils.getTenantId())
                 .includeTaskLocalVariables()
                 .orderByHistoricTaskInstanceEndTime().desc(); // 审批时间倒序
         if (StrUtil.isNotBlank(pageVO.getName())) {

+ 13 - 0
yudao-module-personnel/yudao-module-employee-api/src/main/java/cn/iocoder/yudao/module/employee/api/EmployeeApi.java

@@ -1,11 +1,13 @@
 package cn.iocoder.yudao.module.employee.api;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 import cn.iocoder.yudao.module.employee.api.dto.*;
 
 import javax.validation.Valid;
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 员工 API 接口
@@ -30,6 +32,17 @@ public interface EmployeeApi {
      */
     List<EmployeeRespDTO> getEmployeeListByIds(Collection<Long> ids);
 
+    /**
+     * 获得员工 Map
+     *
+     * @param ids 用户编号数组
+     * @return 用户 Map
+     */
+    default Map<Long, EmployeeRespDTO> getEmployeeMap(Collection<Long> ids) {
+        List<EmployeeRespDTO> employeeListByIds = getEmployeeListByIds(ids);
+        return CollectionUtils.convertMap(employeeListByIds, EmployeeRespDTO::getId);
+    }
+
     /**
      * 根据用户id查询对应员工信息
      *