From 5ec1f5263486a851e40e75402c368efcb6dcfc08 Mon Sep 17 00:00:00 2001
From: tuqin <tuqin@tuqin.cn>
Date: 星期六, 24 十月 2026 12:56:19 +0800
Subject: [PATCH] feat(hrm): 调岗申请新增「调岗人」选择并自动带出原部门/原岗位;修复部门名称与调岗人为空

---
 yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/employee/vo/HrmEmployeeSimpleRespVO.java |   11 +++++
 yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeServiceImpl.java              |   50 +++++++++++++++++++++++++
 yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmTransferApplicationServiceImpl.java   |   33 +++++++++++-----
 yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java                   |    2 +
 4 files changed, 85 insertions(+), 11 deletions(-)

diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/employee/vo/HrmEmployeeSimpleRespVO.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/employee/vo/HrmEmployeeSimpleRespVO.java
index 2bf625f..0859adb 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/employee/vo/HrmEmployeeSimpleRespVO.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/employee/vo/HrmEmployeeSimpleRespVO.java
@@ -3,6 +3,8 @@
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
+import java.util.List;
+
 @Schema(description = "绠$悊鍚庡彴 - 鍛樺伐绠�鍗曚俊鎭� Response VO")
 @Data
 public class HrmEmployeeSimpleRespVO {
@@ -16,9 +18,18 @@
     @Schema(description = "鍛樺伐濮撳悕")
     private String name;
 
+    @Schema(description = "閮ㄩ棬ID")
+    private Long deptId;
+
     @Schema(description = "閮ㄩ棬鍚嶇О")
     private String deptName;
 
+    @Schema(description = "宀椾綅ID鍒楄〃")
+    private List<Long> postIds;
+
+    @Schema(description = "宀椾綅鍚嶇О锛堝涓敤閫楀彿鍒嗛殧锛�")
+    private String postName;
+
     @Schema(description = "鍛樺伐鐘舵��")
     private Integer employeeStatus;
 
diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmTransferApplicationServiceImpl.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmTransferApplicationServiceImpl.java
index c3272ee..3d02148 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmTransferApplicationServiceImpl.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmTransferApplicationServiceImpl.java
@@ -13,7 +13,9 @@
 import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmTransferApplicationRespVO;
 import cn.iocoder.yudao.module.hrm.controller.admin.approval.vo.HrmTransferApplicationSaveReqVO;
 import cn.iocoder.yudao.module.hrm.dal.dataobject.approval.HrmTransferApplicationDO;
+import cn.iocoder.yudao.module.hrm.dal.dataobject.employee.HrmEmployeeDO;
 import cn.iocoder.yudao.module.hrm.dal.mysql.approval.HrmTransferApplicationMapper;
+import cn.iocoder.yudao.module.hrm.service.employee.HrmEmployeeService;
 import cn.iocoder.yudao.module.hrm.dal.redis.HrmNoRedisDAO;
 import cn.iocoder.yudao.module.hrm.enums.HrmAuditStatusEnum;
 import cn.iocoder.yudao.module.hrm.enums.HrmTransferTypeEnum;
@@ -66,6 +68,8 @@
     @Resource
     private AdminUserApi adminUserApi;
     @Resource
+    private HrmEmployeeService employeeService;
+    @Resource
     private BpmProcessInstanceApi bpmProcessInstanceApi;
     @Resource
     private BpmCategoryService bpmCategoryService;
@@ -87,14 +91,14 @@
         }
         // 3. 鐢熸垚鐢宠鍗曞彿
         String no = generateUniqueNo();
-        // 4. 璁剧疆鐢宠浜轰俊鎭�
+        // 4. 璁剧疆璋冨矖浜猴紙鍛樺伐ID锛夛細涓虹┖鏃跺彇褰撳墠鐧诲綍鐢ㄦ埛瀵瑰簲鐨勫憳宸�
         Long userId = createReqVO.getUserId();
         if (userId == null) {
-            userId = getCurrentUserId();
+            HrmEmployeeDO currentEmployee = employeeService.getEmployeeByUserId(getCurrentUserId());
+            userId = currentEmployee != null ? currentEmployee.getId() : null;
         }
-        AdminUserRespDTO user = adminUserApi.getUser(userId);
-        if (user == null) {
-            userId = getCurrentUserId();
+        if (userId != null && employeeService.getEmployee(userId) == null) {
+            throw exception(EMPLOYEE_NOT_EXISTS);
         }
         // 5. 鎻掑叆
         HrmTransferApplicationDO application = BeanUtils.toBean(createReqVO, HrmTransferApplicationDO.class);
@@ -168,9 +172,9 @@
         }
         HrmTransferApplicationRespVO respVO = BeanUtils.toBean(application, HrmTransferApplicationRespVO.class);
         if (application.getUserId() != null) {
-            AdminUserRespDTO user = adminUserApi.getUser(application.getUserId());
-            if (user != null) {
-                respVO.setUserName(user.getNickname());
+            HrmEmployeeDO employee = employeeService.getEmployee(application.getUserId());
+            if (employee != null) {
+                respVO.setUserName(employee.getName());
             }
         }
         fillDeptNames(respVO, application);
@@ -215,7 +219,14 @@
                 .map(HrmTransferApplicationDO::getUserId)
                 .filter(Objects::nonNull)
                 .collect(Collectors.toSet());
-        Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(userIds);
+        // userId 瀛樼殑鏄憳宸D锛屾寜鍛樺伐琛ㄦ煡璇㈠鍚�
+        Map<Long, String> employeeNameMap = new HashMap<>();
+        for (Long userId : userIds) {
+            HrmEmployeeDO employee = employeeService.getEmployee(userId);
+            if (employee != null) {
+                employeeNameMap.put(userId, employee.getName());
+            }
+        }
         Set<Long> deptIds = pageResult.getList().stream()
                 .flatMap(app -> Stream.of(app.getCurrentDeptId(), app.getTargetDeptId()))
                 .filter(Objects::nonNull)
@@ -228,8 +239,8 @@
         Map<Long, PostRespDTO> postMap = postApi.getPostMap(postIds);
         List<HrmTransferApplicationRespVO> list = pageResult.getList().stream().map(app -> {
             HrmTransferApplicationRespVO vo = BeanUtils.toBean(app, HrmTransferApplicationRespVO.class);
-            if (app.getUserId() != null && userMap.containsKey(app.getUserId())) {
-                vo.setUserName(userMap.get(app.getUserId()).getNickname());
+            if (app.getUserId() != null && employeeNameMap.containsKey(app.getUserId())) {
+                vo.setUserName(employeeNameMap.get(app.getUserId()));
             }
             if (app.getCurrentDeptId() != null && deptMap.containsKey(app.getCurrentDeptId())) {
                 vo.setCurrentDeptName(deptMap.get(app.getCurrentDeptId()).getName());
diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeServiceImpl.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeServiceImpl.java
index 54cc87d..d32b4c5 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeServiceImpl.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeServiceImpl.java
@@ -48,6 +48,7 @@
 import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
@@ -370,19 +371,68 @@
                 .filter(Objects::nonNull)
                 .collect(Collectors.toSet());
         Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap(deptIds);
+        // 瑙f瀽宀椾綅ID锛坧ost_ids 瀛樼殑鏄� JSON 鏁扮粍瀛楃涓诧紝濡� [38]锛夛紝骞舵壒閲忓姞杞藉矖浣嶅悕绉�
+        Map<Long, List<Long>> empPostIdsMap = new LinkedHashMap<>();
+        Set<Long> allPostIds = new LinkedHashSet<>();
+        for (HrmEmployeeDO emp : list) {
+            List<Long> postIdList = parseEmployeePostIds(emp.getPostIds());
+            empPostIdsMap.put(emp.getId(), postIdList);
+            allPostIds.addAll(postIdList);
+        }
+        Map<Long, PostRespDTO> postMap = CollUtil.isEmpty(allPostIds)
+                ? Collections.emptyMap() : postApi.getPostMap(allPostIds);
         return list.stream().map(emp -> {
             HrmEmployeeSimpleRespVO vo = new HrmEmployeeSimpleRespVO();
             vo.setId(emp.getId());
             vo.setEmployeeNo(emp.getEmployeeNo());
             vo.setName(emp.getName());
             vo.setEmployeeStatus(emp.getEmployeeStatus());
+            vo.setDeptId(emp.getDeptId());
             if (emp.getDeptId() != null && deptMap.containsKey(emp.getDeptId())) {
                 vo.setDeptName(deptMap.get(emp.getDeptId()).getName());
+            }
+            // 宀椾綅淇℃伅锛堢敤浜庤皟宀楃瓑鍦烘櫙鑷姩甯﹀嚭鍘熷矖浣嶏級
+            List<Long> postIdList = empPostIdsMap.getOrDefault(emp.getId(), Collections.emptyList());
+            vo.setPostIds(postIdList);
+            if (CollUtil.isNotEmpty(postIdList)) {
+                vo.setPostName(postIdList.stream()
+                        .map(postMap::get)
+                        .filter(Objects::nonNull)
+                        .map(PostRespDTO::getName)
+                        .collect(Collectors.joining(",")));
             }
             return vo;
         }).collect(Collectors.toList());
     }
 
+    /**
+     * 瑙f瀽鍛樺伐鐨勫矖浣岻D瀛楃涓诧紙JSON 鏁扮粍鏍煎紡锛屽 [38] 鎴� [1,2]锛�
+     */
+
+    /**
+     * 瑙f瀽鍛樺伐宀椾綅ID瀛楃涓诧紙post_ids 瀛� JSON 鏁扮粍锛屽 [38] 鎴� [1,2]锛�
+     */
+    private java.util.List<Long> parseEmployeePostIds(String postIds) {
+        if (StrUtil.isBlank(postIds)) {
+            return Collections.emptyList();
+        }
+
+        // post_ids 褰㈠ "[38]" 鎴� "[1,2]"锛氬幓鎺変腑鎷彿鍚庢寜閫楀彿瑙f瀽
+        return Arrays.stream(postIds.replace("[", "").replace("]", "").split(","))
+                .map(String::trim)
+                .filter(StrUtil::isNotBlank)
+                .map(s -> {
+                    try {
+                        return Long.valueOf(s);
+                    } catch (NumberFormatException ex) {
+                        return null;
+                    }
+                })
+                .filter(Objects::nonNull)
+                .collect(Collectors.toList());
+    }
+
+
     @Override
     public HrmEmployeeDO getEmployeeByUserId(Long userId) {
         return employeeMapper.selectByUserId(userId);
diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java
index 79da07a..360f66d 100644
--- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java
+++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java
@@ -174,6 +174,7 @@
     }
 
     @Override
+    @DataPermission(enable = false) // 閮ㄩ棬灞炰簬缁勭粐鏋舵瀯鍩虹鏁版嵁锛屼緵涓嬫媺/鍚嶇О鍥炴樉浣跨敤锛屼笉鍋氭暟鎹潈闄愯繃婊�
     public List<DeptDO> getDeptList(Collection<Long> ids) {
         if (CollUtil.isEmpty(ids)) {
             return Collections.emptyList();
@@ -182,6 +183,7 @@
     }
 
     @Override
+    @DataPermission(enable = false) // 鍚屼笂锛氶伩鍏嶉潪瓒呯鍙兘鐪嬪埌鏈儴闂紝瀵艰嚧閮ㄩ棬涓嬫媺/鍚嶇О灞曠ず缂哄け
     public List<DeptDO> getDeptList(DeptListReqVO reqVO) {
         List<DeptDO> list = deptMapper.selectList(reqVO);
         list.sort(Comparator.comparing(DeptDO::getSort));

--
Gitblit v1.9.3