Browse Source

Merge remote-tracking branch 'origin/lc_saas' into master_20240722

dongpo 1 year ago
parent
commit
9c1fd18e2c

+ 2 - 42
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/universal/vo/OaUniversalPageReqVO.java

@@ -17,64 +17,24 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
 @ToString(callSuper = true)
 public class OaUniversalPageReqVO extends PageParam {
 
-    @Schema(description = "uuid", example = "12260")
-    private String universalId;
-
-    @Schema(description = "申请人id", example = "14065")
-    private Long employeeId;
-
     @Schema(description = "申请员工姓名", example = "芋艿")
     private String employeeName;
 
     @Schema(description = "申请员工手机号", example = "13900000000")
     private String employeePhone;
 
-    @Schema(description = "申请用户账号id", example = "18283")
-    private Long userId;
-
-    @Schema(description = "申请用户账号手机号", example = "13900000000")
-    private String userPhone;
-
     @Schema(description = "部门id", example = "12910")
     private Long deptId;
 
-    @Schema(description = "部门uuid", example = "18681")
-    private String deptUuid;
-
-    @Schema(description = "职位")
-    private String position;
+    @Schema(description = "职位id")
+    private String postId;
 
     @Schema(description = "申请事项标题")
     private String title;
 
-    @Schema(description = "详细描述", example = "随便")
-    private String description;
-
-    @Schema(description = "备注")
-    private String remarks;
-
-    @Schema(description = "流程实例id", example = "18345")
-    private String procInstId;
-
     @Schema(description = "审核状态(0暂存、1已提交、2审核中、3已审核、4已关闭、5已驳回)", example = "1")
     private String auditStatus;
 
-    @Schema(description = "当前审核人用户id", example = "31811")
-    private Long currentAuditUserId;
-
-    @Schema(description = "当前审核人员工id", example = "2375")
-    private Long currentAuditEmployeeId;
-
-    @Schema(description = "当前审核人员工姓名")
-    private String currentAuditEmployeeName;
-
-    @Schema(description = "最后审核时间")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
-    private LocalDateTime[] finalAuditDate;
-
-    @Schema(description = "数据来源,0流程添加、1手动添加")
-    private String infoSource;
-
     @Schema(description = "创建时间")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;

+ 6 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/universal/vo/OaUniversalRespVO.java

@@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.bpm.controller.admin.oa.universal.vo;
 
 import cn.iocoder.yudao.framework.common.util.date.DateUtils;
 import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 import cn.iocoder.yudao.module.infra.api.file.dto.FileDTO;
 import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
@@ -56,6 +57,10 @@ public class OaUniversalRespVO {
     @ExcelProperty("部门名称")
     private String deptName;
 
+    @Schema(description = "职位id")
+    @ExcelProperty("职位id")
+    private Long postId;
+
     @Schema(description = "职位")
     @ExcelProperty("职位")
     private String position;
@@ -117,7 +122,7 @@ public class OaUniversalRespVO {
     private List<BpmTaskRespVO> auditRecordList;
 
     @Schema(description = "审批人员列表")
-    private List<AdminUserRespDTO> auditUserList;
+    private List<EmployeeRespDTO> auditUserList;
 
     @Schema(description = "当前用户待处理的任务id")
     private String taskId;

+ 1 - 1
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/universal/vo/OaUniversalSaveReqVO.java

@@ -10,7 +10,7 @@ import java.util.List;
 @Data
 public class OaUniversalSaveReqVO {
 
-    @Schema(description = "自增主键", requiredMode = Schema.RequiredMode.AUTO, example = "1")
+    @Schema(description = "自增主键", example = "1")
     private Long id;
 
     @Schema(description = "申请事项标题",  example = "申请事项标题,最多20字")

+ 4 - 0
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/universal/OaUniversalDO.java

@@ -68,6 +68,10 @@ public class OaUniversalDO extends BaseDO {
      * 部门uuid
      */
     private String deptUuid;
+    /**
+     * 职位id
+     */
+    private Long postId;
     /**
      * 职位
      */

+ 1 - 13
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/universal/OaUniversalMapper.java

@@ -17,24 +17,12 @@ public interface OaUniversalMapper extends BaseMapperX<OaUniversalDO> {
 
     default PageResult<OaUniversalDO> selectPage(OaUniversalPageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<OaUniversalDO>()
-                .eqIfPresent(OaUniversalDO::getUniversalId, reqVO.getUniversalId())
-                .eqIfPresent(OaUniversalDO::getEmployeeId, reqVO.getEmployeeId())
                 .likeIfPresent(OaUniversalDO::getEmployeeName, reqVO.getEmployeeName())
                 .likeIfPresent(OaUniversalDO::getEmployeePhone, reqVO.getEmployeePhone())
-                .eqIfPresent(OaUniversalDO::getUserId, reqVO.getUserId())
-                .likeIfPresent(OaUniversalDO::getUserPhone, reqVO.getUserPhone())
                 .eqIfPresent(OaUniversalDO::getDeptId, reqVO.getDeptId())
-                .eqIfPresent(OaUniversalDO::getDeptUuid, reqVO.getDeptUuid())
-                .eqIfPresent(OaUniversalDO::getPosition, reqVO.getPosition())
+                .eqIfPresent(OaUniversalDO::getPostId, reqVO.getPostId())
                 .likeIfPresent(OaUniversalDO::getTitle, reqVO.getTitle())
-                .eqIfPresent(OaUniversalDO::getDescription, reqVO.getDescription())
-                .eqIfPresent(OaUniversalDO::getRemarks, reqVO.getRemarks())
-                .eqIfPresent(OaUniversalDO::getProcInstId, reqVO.getProcInstId())
                 .eqIfPresent(OaUniversalDO::getAuditStatus, reqVO.getAuditStatus())
-                .eqIfPresent(OaUniversalDO::getCurrentAuditUserId, reqVO.getCurrentAuditUserId())
-                .eqIfPresent(OaUniversalDO::getCurrentAuditEmployeeId, reqVO.getCurrentAuditEmployeeId())
-                .betweenIfPresent(OaUniversalDO::getFinalAuditDate, reqVO.getFinalAuditDate())
-                .eqIfPresent(OaUniversalDO::getInfoSource, reqVO.getInfoSource())
                 .betweenIfPresent(OaUniversalDO::getCreateTime, reqVO.getCreateTime())
                 .orderByDesc(OaUniversalDO::getId));
     }

+ 69 - 51
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/universal/OaUniversalServiceImpl.java

@@ -6,7 +6,9 @@ import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.security.core.LoginUser;
 import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
 import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
 import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
@@ -22,6 +24,8 @@ import cn.iocoder.yudao.module.bpm.enums.DictDataConstants;
 import cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants;
 import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmConstants;
 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.infra.api.file.FileApi;
 import cn.iocoder.yudao.module.infra.api.file.dto.FileDTO;
 import cn.iocoder.yudao.module.system.api.dept.DeptApi;
@@ -81,14 +85,18 @@ public class OaUniversalServiceImpl implements OaUniversalService {
     @Resource
     private DeptApi deptApi;
 
+    @Resource
+    private EmployeeApi employeeApi;
+
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long stagingOaUniversal(OaUniversalSaveReqVO stagingReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
         AdminUserRespDTO loginUser = adminUserApi.getUser(loginUserId);
         Objects.requireNonNull(loginUser, "登录用户不能为空");
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
 
         OaUniversalDO oaUniversal = BeanUtils.toBean(stagingReqVO, OaUniversalDO.class);
         if (StringUtils.isBlank(oaUniversal.getUniversalId())) {
@@ -96,12 +104,14 @@ public class OaUniversalServiceImpl implements OaUniversalService {
             String uuid = IdUtil.fastSimpleUUID();
             oaUniversal.setUniversalId(uuid);
         }
-        oaUniversal.setEmployeeId(loginUser.getId());
-        oaUniversal.setEmployeeName(loginUser.getNickname());
-        oaUniversal.setEmployeePhone(loginUser.getMobile());
-        oaUniversal.setDeptId(loginUser.getDeptId());
-        oaUniversal.setPosition("员工职位");
-        oaUniversal.setUserId(loginUser.getId());
+        oaUniversal.setEmployeeId(loginEmployee.getId());
+        oaUniversal.setEmployeeName(loginEmployee.getName());
+        oaUniversal.setEmployeePhone(loginEmployee.getPhone());
+        oaUniversal.setDeptId(loginEmployee.getDeptId());
+        oaUniversal.setPostId(loginEmployee.getPostId());
+        oaUniversal.setPosition(loginEmployee.getPosition());
+        oaUniversal.setCreator(String.valueOf(loginEmployee.getId()));
+        oaUniversal.setUserId(loginUserId);
         oaUniversal.setUserPhone(loginUser.getMobile());
         oaUniversal.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_STAGING);
         oaUniversal.setInfoSource("0");
@@ -121,7 +131,7 @@ public class OaUniversalServiceImpl implements OaUniversalService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long commitOaUniversal(OaUniversalSaveReqVO commitReqVO) {
         if (CollectionUtil.isEmpty(commitReqVO.getStartUserSelectAssignees())) {
             throw exception(ErrorCodeConstants.TASK_CREATE_FAIL_NO_START_SELECT_ASSIGNEE);
@@ -130,7 +140,8 @@ public class OaUniversalServiceImpl implements OaUniversalService {
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
         AdminUserRespDTO loginUser = adminUserApi.getUser(loginUserId);
         Objects.requireNonNull(loginUser, "登录用户不能为空");
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
 
         OaUniversalDO oaUniversal = BeanUtils.toBean(commitReqVO, OaUniversalDO.class);
         if (StringUtils.isBlank(oaUniversal.getUniversalId())) {
@@ -138,11 +149,13 @@ public class OaUniversalServiceImpl implements OaUniversalService {
             String uuid = IdUtil.fastSimpleUUID();
             oaUniversal.setUniversalId(uuid);
         }
-        oaUniversal.setEmployeeId(loginUser.getId());
-        oaUniversal.setEmployeeName(loginUser.getNickname());
-        oaUniversal.setEmployeePhone(loginUser.getMobile());
-        oaUniversal.setDeptId(loginUser.getDeptId());
-        oaUniversal.setPosition("员工职位");
+        oaUniversal.setEmployeeId(loginEmployee.getId());
+        oaUniversal.setEmployeeName(loginEmployee.getName());
+        oaUniversal.setEmployeePhone(loginEmployee.getPhone());
+        oaUniversal.setDeptId(loginEmployee.getDeptId());
+        oaUniversal.setPostId(loginEmployee.getPostId());
+        oaUniversal.setPosition(loginEmployee.getPosition());
+        oaUniversal.setCreator(String.valueOf(loginEmployee.getId()));
         oaUniversal.setUserId(loginUser.getId());
         oaUniversal.setUserPhone(loginUser.getMobile());
         oaUniversal.setInfoSource("0");
@@ -164,7 +177,7 @@ public class OaUniversalServiceImpl implements OaUniversalService {
         List<Long> selectAssignees = commitReqVO.getStartUserSelectAssignees();
         startUserSelectAssignees.put("approver", selectAssignees);
         String processInstanceId = processInstanceApi
-                .createProcessInstance(loginUser.getId(),
+                .createProcessInstance(loginEmployee.getId(),
                         new BpmProcessInstanceCreateReqDTO()
                                 .setProcessDefinitionKey(PROCESS_KEY)
                                 .setVariables(processInstanceVariables)
@@ -181,7 +194,7 @@ public class OaUniversalServiceImpl implements OaUniversalService {
         agreeReqVO.setTaskStatus(Integer.valueOf(DictDataConstants.OA_AUDIT_STATUS_COMMITTED));
         taskService.setVariable(task.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_COMMITTED);
         taskService.setVariable(task.getId(), "auditPass", "true");
-        bpmTaskService.approveTask(loginUserId, agreeReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), agreeReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult();
         if (nextTask == null) {
@@ -203,11 +216,12 @@ public class OaUniversalServiceImpl implements OaUniversalService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long agreeOaUniversal(BpmTaskApproveReqVO agreeReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
 
         Task currentTask = bpmTaskService.getTask(agreeReqVO.getId());
         if (currentTask == null) {
@@ -235,7 +249,7 @@ public class OaUniversalServiceImpl implements OaUniversalService {
         agreeReqVO.setReason(reason);
         agreeReqVO.setTaskStatus(Integer.valueOf(DictDataConstants.OA_AUDIT_STATUS_AUDITING));
         taskService.setVariable(agreeReqVO.getId(), "auditPass", "true");
-        bpmTaskService.approveTask(loginUserId, agreeReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), agreeReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         OaUniversalDO oaUniversalDO = new OaUniversalDO();
@@ -253,7 +267,8 @@ public class OaUniversalServiceImpl implements OaUniversalService {
                     .setFinalAuditDate(LocalDateTime.now())
                     .setId(oaUniversal.getId());
 
-            // TODO 复制业务单据信息到业务模块单据表
+            // 复制业务单据信息到业务模块单据表
+            // 通用审批没有业务模块
 
         }
         oaUniversalMapper.updateById(oaUniversalDO);
@@ -264,11 +279,12 @@ public class OaUniversalServiceImpl implements OaUniversalService {
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long disagreeOaUniversal(BpmTaskReturnReqVO disagreeReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
 
         Task currentTask = bpmTaskService.getTask(disagreeReqVO.getId());
 
@@ -277,7 +293,7 @@ public class OaUniversalServiceImpl implements OaUniversalService {
         disagreeReqVO.setTaskStatus(Integer.valueOf(DictDataConstants.OA_AUDIT_STATUS_RETURNED));
         taskService.setVariable(disagreeReqVO.getId(), "auditPass", "false");
         taskService.setVariable(disagreeReqVO.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_RETURNED);
-        bpmTaskService.returnTask(loginUserId, disagreeReqVO);
+        bpmTaskService.returnTask(loginEmployee.getId(), disagreeReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
 
@@ -299,7 +315,8 @@ public class OaUniversalServiceImpl implements OaUniversalService {
     public Long revocationOaUniversal(BpmTaskApproveReqVO revocationReqVO) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
 
         Task currentTask = bpmTaskService.getTask(revocationReqVO.getId());
         if (currentTask == null) {
@@ -309,7 +326,7 @@ public class OaUniversalServiceImpl implements OaUniversalService {
                 .eq(OaUniversalDO::getProcInstId, currentTask.getProcessInstanceId());
         OaUniversalDO oaUniversalDO = oaUniversalMapper.selectOne(lambdaQueryWrapper);
         if (!DictDataConstants.OA_AUDIT_STATUS_COMMITTED.equals(oaUniversalDO.getAuditStatus())
-            || !Objects.equals(String.valueOf(loginUserId), oaUniversalDO.getCreator())) {
+            || !Objects.equals(String.valueOf(loginEmployee.getId()), oaUniversalDO.getCreator())) {
             throw ServiceExceptionUtil.exception(ErrorCodeConstants.TASK_REVOCATION_NOT_ALLOWED);
         }
 
@@ -322,7 +339,7 @@ public class OaUniversalServiceImpl implements OaUniversalService {
         returnReqVO.setReason(reason);
         returnReqVO.setTaskStatus(Integer.valueOf(DictDataConstants.OA_AUDIT_STATUS_RECALLED));
         taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_RECALLED);
-        bpmTaskService.revocationTask(loginUserId, returnReqVO);
+        bpmTaskService.revocationTask(loginEmployee.getId(), returnReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
 
@@ -347,7 +364,8 @@ public class OaUniversalServiceImpl implements OaUniversalService {
         }
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
 
         OaUniversalDO oaUniversalNew = BeanUtils.toBean(reCommitReqVO, OaUniversalDO.class);
         OaUniversalDO oaUniversalOld = validateOaUniversalExists(oaUniversalNew.getId());
@@ -371,7 +389,7 @@ public class OaUniversalServiceImpl implements OaUniversalService {
         taskService.setVariable(currentTask.getId(), "auditPass", "true");
         taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_COMMITTED);
         // 再次提交,和审批通过逻辑相同
-        bpmTaskService.approveTask(loginUserId, approveReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), approveReqVO);
 
         Task nextTask = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).singleResult();
         oaUniversalNew.setAuditStatus(DictDataConstants.OA_AUDIT_STATUS_COMMITTED)
@@ -393,7 +411,8 @@ public class OaUniversalServiceImpl implements OaUniversalService {
         }
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
 
         OaUniversalDO oaUniversalDO = validateOaUniversalExists(id);
         if (!DictDataConstants.OA_AUDIT_STATUS_RETURNED.equals(oaUniversalDO.getAuditStatus())
@@ -409,7 +428,7 @@ public class OaUniversalServiceImpl implements OaUniversalService {
         taskService.setVariable(currentTask.getId(), "auditPass", "false");
         taskService.setVariable(currentTask.getId(),BpmConstants.PROCESS_INSTANCE_VARIABLE_STATUS, DictDataConstants.OA_AUDIT_STATUS_CLOSED);
         // 关闭,使用审批通过的方法实现
-        bpmTaskService.approveTask(loginUserId, approveReqVO);
+        bpmTaskService.approveTask(loginEmployee.getId(), approveReqVO);
 
         LambdaUpdateWrapper<OaUniversalDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
         lambdaUpdateWrapper.set(OaUniversalDO::getAuditStatus, DictDataConstants.OA_AUDIT_STATUS_CLOSED)
@@ -433,7 +452,8 @@ public class OaUniversalServiceImpl implements OaUniversalService {
     public OaUniversalRespVO getOaUniversal(Long id) {
         // 登录人信息
         Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
-        // TODO DP 根据登录人查询出对应的员工信息
+        // 根据登录人查询出对应的员工信息
+        EmployeeRespDTO loginEmployee = employeeApi.getEmployeeByUserId(loginUserId);
 
         OaUniversalDO oaUniversalDO = validateOaUniversalExists(id);
         OaUniversalRespVO oaUniversalRespVO = BeanUtils.toBean(oaUniversalDO, OaUniversalRespVO.class);
@@ -448,7 +468,7 @@ public class OaUniversalServiceImpl implements OaUniversalService {
         if (StrUtil.isNotBlank(procInstId)) {
             Task task = taskService.createTaskQuery()
                     .processInstanceId(procInstId)
-                    .taskAssignee(String.valueOf(loginUserId))
+                    .taskAssignee(String.valueOf(loginEmployee.getId()))
                     .singleResult();
             if (DictDataConstants.OA_AUDIT_STATUS_COMMITTED.equals(oaUniversalDO.getAuditStatus())) {
                 // 如果是已提交,不限制任务处理人是当前登录人,用于直接撤回
@@ -474,16 +494,15 @@ public class OaUniversalServiceImpl implements OaUniversalService {
         // 审批人
         String startUserSelectAssignees = oaUniversalDO.getStartUserSelectAssignees();
         if (StrUtil.isNotEmpty(startUserSelectAssignees)) {
-            List<Long> userIdList = Arrays.stream(startUserSelectAssignees.split(","))
+            List<Long> employeeIdList = Arrays.stream(startUserSelectAssignees.split(","))
                     .map(Long::valueOf).collect(Collectors.toList());
-            List<AdminUserRespDTO> userList = adminUserApi.getUserList(userIdList);
-            List<AdminUserRespDTO> auditUserList = new ArrayList<>();
-            for (Long userId : userIdList) {
-                for (AdminUserRespDTO adminUserRespDTO : userList) {
-                    if (Objects.equals(userId, adminUserRespDTO.getId())) {
-                        auditUserList.add(adminUserRespDTO);
-                        break;
-                    }
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
+            List<EmployeeRespDTO> auditUserList = new ArrayList<>();
+            for (Long employeeId : employeeIdList) {
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(employeeId);
+                if (employeeRespDTO != null) {
+                    auditUserList.add(employeeRespDTO);
                 }
             }
             oaUniversalRespVO.setAuditUserList(auditUserList);
@@ -516,16 +535,15 @@ public class OaUniversalServiceImpl implements OaUniversalService {
         // 审批人
         String startUserSelectAssignees = oaUniversalDO.getStartUserSelectAssignees();
         if (StrUtil.isNotEmpty(startUserSelectAssignees)) {
-            List<Long> userIdList = Arrays.stream(startUserSelectAssignees.split(","))
+            List<Long> employeeIdList = Arrays.stream(startUserSelectAssignees.split(","))
                     .map(Long::valueOf).collect(Collectors.toList());
-            List<AdminUserRespDTO> userList = adminUserApi.getUserList(userIdList);
-            List<AdminUserRespDTO> auditUserList = new ArrayList<>();
-            for (Long userId : userIdList) {
-                for (AdminUserRespDTO adminUserRespDTO : userList) {
-                    if (Objects.equals(userId, adminUserRespDTO.getId())) {
-                        auditUserList.add(adminUserRespDTO);
-                        break;
-                    }
+            List<EmployeeRespDTO> employeeRespDTOList = employeeApi.getEmployeeListByIds(employeeIdList);
+            Map<Long, EmployeeRespDTO> longEmployeeRespDTOMap = CollectionUtils.convertMap(employeeRespDTOList, EmployeeRespDTO::getId);
+            List<EmployeeRespDTO> auditUserList = new ArrayList<>();
+            for (Long employeeId : employeeIdList) {
+                EmployeeRespDTO employeeRespDTO = longEmployeeRespDTOMap.get(employeeId);
+                if (employeeRespDTO != null) {
+                    auditUserList.add(employeeRespDTO);
                 }
             }
             oaUniversalRespVO.setAuditUserList(auditUserList);

+ 10 - 0
yudao-module-personnel/yudao-module-employee-api/src/main/java/cn/iocoder/yudao/module/employee/api/dto/EmployeeRespDTO.java

@@ -28,6 +28,11 @@ public class EmployeeRespDTO {
      */
     private String name;
 
+    /**
+     * 员工头像
+     */
+    private String avatar;
+
     /**
      * 部门ID
      */
@@ -48,6 +53,11 @@ public class EmployeeRespDTO {
      */
     private String position;
 
+    /**
+     * 手机号
+     */
+    private String phone;
+
     /**
      * 员工编号
      */

+ 1 - 1
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/info/EmployeeInfoController.java

@@ -153,7 +153,7 @@ public class EmployeeInfoController {
     }
 
     @GetMapping("/listForSelectAssigns")
-    @Operation(summary = "获得员工信息列表用于选择审批人")
+    @Operation(summary = "获得员工信息列表用于选择审批人")
     // @PreAuthorize("@ss.hasPermission('employee:info:listForSelectAssigns')")
     public CommonResult<List<EmployeeInfoRespVO>> getInfoListForSelectAssigns() {
         List<EmployeeInfoDO> listResult = infoService.getInfoListForSelectAssigns();

+ 76 - 13
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/service/info/EmployeeInfoServiceImpl.java

@@ -2,28 +2,34 @@ package cn.iocoder.yudao.module.employee.service.info;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.IdUtil;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
 import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
-import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
+import cn.iocoder.yudao.module.employee.controller.admin.info.vo.EmployeeInfoHistorySaveReqVO;
+import cn.iocoder.yudao.module.employee.controller.admin.info.vo.EmployeeInfoPageReqVO;
+import cn.iocoder.yudao.module.employee.controller.admin.info.vo.EmployeeInfoQueryReqVO;
+import cn.iocoder.yudao.module.employee.controller.admin.info.vo.EmployeeInfoSaveReqVO;
+import cn.iocoder.yudao.module.employee.dal.dataobject.info.EmployeeInfoDO;
+import cn.iocoder.yudao.module.employee.dal.mysql.info.EmployeeInfoMapper;
+import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO;
+import cn.iocoder.yudao.module.system.service.dept.DeptService;
+import cn.iocoder.yudao.module.system.service.dept.PostService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import org.apache.catalina.security.SecurityUtil;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
-import cn.iocoder.yudao.module.employee.controller.admin.info.vo.*;
-import cn.iocoder.yudao.module.employee.dal.dataobject.info.EmployeeInfoDO;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-
-import cn.iocoder.yudao.module.employee.dal.mysql.info.EmployeeInfoMapper;
-
 import javax.annotation.Resource;
-
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
 import static cn.iocoder.yudao.module.employee.enums.ErrorCodeConstants.EMPLOYEE_INFO_NOT_EXISTS;
 
 /**
@@ -40,6 +46,12 @@ public class EmployeeInfoServiceImpl implements EmployeeInfoService {
     @Resource
     private EmployeeInfoHistoryService employeeInfoHistoryService;
 
+    @Resource
+    private DeptService deptService;
+
+    @Resource
+    private PostService postService;
+
     @Override
     public List<EmployeeInfoDO> getEmployeeListByIds(Collection<Long> ids) {
         if (CollUtil.isEmpty(ids)) {
@@ -50,12 +62,44 @@ public class EmployeeInfoServiceImpl implements EmployeeInfoService {
 
     @Override
     public EmployeeInfoDO getEmployeeByUserId(Long userId) {
+        // 检查用户ID是否为空
+        // 如果用户ID为空,则不执行任何操作,返回null
         if (userId == null) {
-            return EmployeeInfoDO.builder().build();
+            return null;
         }
+
+        // 创建查询包装器,用于查询特定用户ID的员工信息
         LambdaQueryWrapper<EmployeeInfoDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
         lambdaQueryWrapper.eq(EmployeeInfoDO::getUserId, userId);
-        return  infoMapper.selectOne(lambdaQueryWrapper);
+        // 使用包装器查询员工信息
+        EmployeeInfoDO employeeInfoDO = infoMapper.selectOne(lambdaQueryWrapper);
+        // 检查员工信息对象是否为空
+        if (employeeInfoDO == null) {
+            // 如果为空,则返回null,表示无法继续处理
+            return null;
+        }
+
+        // 如果部门ID不为空,则尝试获取部门详细信息
+        Long deptId = employeeInfoDO.getDeptId();
+        if (deptId != null) {
+            DeptDO dept = deptService.getDept(deptId);
+            // 如果成功获取到部门信息,则设置部门名称到员工信息中
+            if (dept != null) {
+                employeeInfoDO.setDeptName(dept.getName());
+            }
+        }
+
+        // 如果职位ID不为空,则尝试获取职位详细信息
+        Long postId = employeeInfoDO.getPostId();
+        if (postId != null) {
+            PostDO post = postService.getPost(postId);
+            // 如果成功获取到职位信息,则设置职位名称到员工信息中
+            if (post != null) {
+                employeeInfoDO.setPosition(post.getName());
+            }
+        }
+        // 返回查询到的员工信息
+        return employeeInfoDO;
     }
 
     @Override
@@ -65,7 +109,26 @@ public class EmployeeInfoServiceImpl implements EmployeeInfoService {
         }
         LambdaQueryWrapper<EmployeeInfoDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
         lambdaQueryWrapper.in(EmployeeInfoDO::getUserId, userIds);
-        return infoMapper.selectList(lambdaQueryWrapper);
+        List<EmployeeInfoDO> employeeInfoDOList = infoMapper.selectList(lambdaQueryWrapper);
+
+        // 拼接数据
+        Map<Long, DeptDO> deptMap = deptService.getDeptMap(
+                convertList(employeeInfoDOList, EmployeeInfoDO::getDeptId));
+        List<Long> postIdList = employeeInfoDOList.stream().map(EmployeeInfoDO::getPostId).collect(Collectors.toList());
+        List<PostDO> postList = postService.getPostList(postIdList);
+        Map<Long, PostDO> postMap = CollectionUtils.convertMap(postList, PostDO::getId);
+        for (EmployeeInfoDO employeeInfoDO : employeeInfoDOList) {
+            DeptDO deptDO = deptMap.get(employeeInfoDO.getDeptId());
+            if (deptDO != null) {
+                employeeInfoDO.setDeptName(deptDO.getName());
+            }
+            PostDO postDO = postMap.get(employeeInfoDO.getPostId());
+            if (postDO != null) {
+                employeeInfoDO.setPosition(postDO.getName());
+            }
+        }
+
+        return employeeInfoDOList;
     }
 
     @Override

+ 25 - 3
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java

@@ -8,6 +8,8 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.security.config.SecurityProperties;
 import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
+import cn.iocoder.yudao.module.employee.api.EmployeeApi;
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
 import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
 import cn.iocoder.yudao.module.system.controller.admin.auth.vo.*;
 import cn.iocoder.yudao.module.system.convert.auth.AuthConvert;
@@ -68,6 +70,9 @@ public class AuthController {
     @Resource
     private TenantService tenantService;
 
+    @Resource
+    private EmployeeApi employeeApi;
+
     @PostMapping("/login")
     @PermitAll
     @Operation(summary = "使用账号密码登录")
@@ -96,7 +101,7 @@ public class AuthController {
     }
 
     @GetMapping("/get-permission-info")
-    @Operation(summary = "获取登录用户的权限信息")
+    @Operation(summary = "获取登录用户对应员工的权限信息")
     public CommonResult<AuthPermissionInfoRespVO> getPermissionInfo() {
         // 1.1 获得用户信息
         AdminUserDO user = userService.getUser(getLoginUserId());
@@ -104,14 +109,31 @@ public class AuthController {
             return success(null);
         }
         AdminUserRespDTO dto = BeanUtils.toBean(user, AdminUserRespDTO.class);
-        TenantDO tenantDO = tenantService.getTenant(user.getTenantId()); // 获得租户信息,用于判断是否需要切换租户
+        // 根据用户ID查询员工信息
+        EmployeeRespDTO employee = employeeApi.getEmployeeByUserId(user.getId());
+        if (employee != null) {
+            // 设置员工ID
+            dto.setId(employee.getId());
+            // 设置员工昵称
+            dto.setNickname(employee.getName());
+            // 设置员工头像
+            dto.setAvatar(employee.getAvatar());
+            // 设置员工部门ID
+            dto.setDeptId(employee.getDeptId());
+            // 设置员工手机号
+            dto.setMobile(employee.getPhone());
+        } else {
+            return success(null, "员工信息为空");
+        }
+
+        TenantDO tenantDO = tenantService.getTenant(dto.getTenantId()); // 获得租户信息,用于判断是否需要切换租户
         if (tenantDO != null && tenantDO.getName() != null) {
             dto.setTenantName(tenantDO.getName());
             dto.setCorpId(tenantDO.getCorpId());
         }
 
         // 1.2 获得角色列表
-        Set<Long> roleIds = permissionService.getUserRoleIdListByUserId(getLoginUserId());
+        Set<Long> roleIds = permissionService.getUserRoleIdListByUserId(dto.getId());
         if (CollUtil.isEmpty(roleIds)) {
             return success(AuthConvert.INSTANCE.convert(dto, Collections.emptyList(), Collections.emptyList()));
         }