From c3b0503f8e2ecf955d0e8e4ca9294e6cd5199c0b Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期四, 27 八月 2026 11:02:30 +0800
Subject: [PATCH] HRM: 员工台账岗位支持多选并同步系统用户岗位
---
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeServiceImpl.java | 75 ++++++++++++++++++++++++++++---------
1 files changed, 56 insertions(+), 19 deletions(-)
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 c538b8c..c326a89 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
@@ -33,6 +33,7 @@
import cn.iocoder.yudao.module.system.api.permission.dto.RoleRespDTO;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserCreateReqDTO;
+import cn.iocoder.yudao.module.system.api.user.dto.AdminUserUpdateReqDTO;
import jakarta.annotation.Resource;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -91,7 +92,7 @@
// 1. 鏍¢獙閮ㄩ棬
deptApi.validateDeptList(Collections.singleton(createReqVO.getDeptId()));
// 2. 鏍¢獙宀椾綅
- postApi.validPostList(Collections.singleton(createReqVO.getPostId()));
+ postApi.validPostList(createReqVO.getPostIds());
// 3. 鏍¢獙鎵嬫満鍙锋槸鍚﹀凡瀛樺湪
if (employeeMapper.selectByPhone(createReqVO.getPhone()) != null) {
throw exception(EMPLOYEE_PHONE_EXISTS);
@@ -101,7 +102,7 @@
userCreateReqDTO.setUsername(createReqVO.getPhone());
userCreateReqDTO.setNickname(createReqVO.getName());
userCreateReqDTO.setDeptId(createReqVO.getDeptId());
- userCreateReqDTO.setPostIds(Collections.singleton(createReqVO.getPostId()));
+ userCreateReqDTO.setPostIds(new LinkedHashSet<>(createReqVO.getPostIds()));
userCreateReqDTO.setMobile(createReqVO.getPhone());
userCreateReqDTO.setPassword(createReqVO.getPhone());
userCreateReqDTO.setSex(createReqVO.getGender());
@@ -121,6 +122,10 @@
// roleIds 瀛樺偍涓� JSON
if (CollUtil.isNotEmpty(createReqVO.getRoleIds())) {
employee.setRoleIds(JSONUtil.toJsonStr(createReqVO.getRoleIds()));
+ }
+ // postIds 瀛樺偍涓� JSON
+ if (CollUtil.isNotEmpty(createReqVO.getPostIds())) {
+ employee.setPostIds(JSONUtil.toJsonStr(createReqVO.getPostIds()));
}
employeeMapper.insert(employee);
Long employeeId = employee.getId();
@@ -167,7 +172,7 @@
// 鏍¢獙閮ㄩ棬
deptApi.validateDeptList(Collections.singleton(updateReqVO.getDeptId()));
// 鏍¢獙宀椾綅
- postApi.validPostList(Collections.singleton(updateReqVO.getPostId()));
+ postApi.validPostList(updateReqVO.getPostIds());
// 鏍¢獙鎵嬫満鍙锋槸鍚﹀凡瀛樺湪锛堝鏋滄墜鏈哄彿鏈夊彉鏇达級
if (!Objects.equals(employee.getPhone(), updateReqVO.getPhone())
&& employeeMapper.selectByPhone(updateReqVO.getPhone()) != null) {
@@ -179,7 +184,24 @@
if (CollUtil.isNotEmpty(updateReqVO.getRoleIds())) {
updateObj.setRoleIds(JSONUtil.toJsonStr(updateReqVO.getRoleIds()));
}
+ // postIds 瀛樺偍涓� JSON
+ if (CollUtil.isNotEmpty(updateReqVO.getPostIds())) {
+ updateObj.setPostIds(JSONUtil.toJsonStr(updateReqVO.getPostIds()));
+ }
employeeMapper.updateById(updateObj);
+ // 鍚屾鏇存柊鍏宠仈绯荤粺鐢ㄦ埛锛堝矖浣�/閮ㄩ棬/鏄电О/瑙掕壊/閭/澶囨敞锛夛紝淇濇寔涓庣敤鎴风鐞嗕竴鑷�
+ if (employee.getUserId() != null) {
+ AdminUserUpdateReqDTO userUpdateReqDTO = new AdminUserUpdateReqDTO();
+ userUpdateReqDTO.setId(employee.getUserId());
+ userUpdateReqDTO.setNickname(updateReqVO.getName());
+ userUpdateReqDTO.setDeptId(updateReqVO.getDeptId());
+ userUpdateReqDTO.setPostIds(new LinkedHashSet<>(updateReqVO.getPostIds()));
+ userUpdateReqDTO.setRoleIds(CollUtil.isEmpty(updateReqVO.getRoleIds()) ? null
+ : new LinkedHashSet<>(updateReqVO.getRoleIds()));
+ userUpdateReqDTO.setEmail(updateReqVO.getEmail());
+ userUpdateReqDTO.setRemark(updateReqVO.getRemark());
+ adminUserApi.updateUser(userUpdateReqDTO);
+ }
Long employeeId = updateReqVO.getId();
// 鍚屾鏁欒偛缁忓巻
@@ -270,12 +292,16 @@
respVO.setDeptName(dept.getName());
}
}
- // 濉厖宀椾綅鍚嶇О
- if (employee.getPostId() != null) {
- Map<Long, PostRespDTO> postMap = postApi.getPostMap(Collections.singleton(employee.getPostId()));
- PostRespDTO post = postMap.get(employee.getPostId());
- if (post != null) {
- respVO.setPostName(post.getName());
+ // 濉厖宀椾綅淇℃伅
+ if (StrUtil.isNotBlank(employee.getPostIds())) {
+ List<Long> postIds = JSONUtil.toList(employee.getPostIds(), Long.class);
+ respVO.setPostIds(postIds);
+ if (CollUtil.isNotEmpty(postIds)) {
+ Map<Long, PostRespDTO> postMap = postApi.getPostMap(postIds);
+ respVO.setPostNames(postIds.stream()
+ .filter(postMap::containsKey)
+ .map(postId -> postMap.get(postId).getName())
+ .collect(Collectors.joining(",")));
}
}
// 濉厖瑙掕壊鍚嶇О
@@ -370,10 +396,10 @@
try {
// 3.1 鍚嶇О杞� ID
Long deptId = parseDeptId(importEmployee.getDeptName(), deptMap);
- Long postId = parsePostId(importEmployee.getPostName(), postMap);
+ Set<Long> postIds = parsePostIds(importEmployee.getPostName(), postMap);
Set<Long> roleIds = parseRoleIds(importEmployee.getRoleNames(), roleMap);
// 3.2 鏋勫缓淇濆瓨璇锋眰
- HrmEmployeeSaveReqVO saveReqVO = buildImportSaveReqVO(importEmployee, deptId, postId, roleIds);
+ HrmEmployeeSaveReqVO saveReqVO = buildImportSaveReqVO(importEmployee, deptId, postIds, roleIds);
// 3.3 鍒ゆ柇瀛樺湪鎬э細鎸夋墜鏈哄彿
HrmEmployeeDO existEmployee = employeeMapper.selectByPhone(importEmployee.getPhone());
if (existEmployee == null) {
@@ -398,7 +424,7 @@
}
private HrmEmployeeSaveReqVO buildImportSaveReqVO(HrmEmployeeImportExcelVO importEmployee,
- Long deptId, Long postId, Set<Long> roleIds) {
+ Long deptId, Set<Long> postIds, Set<Long> roleIds) {
if (StrUtil.isBlank(importEmployee.getName())) {
throw exception(EMPLOYEE_IMPORT_FIELD_REQUIRED, "鍛樺伐濮撳悕");
}
@@ -413,7 +439,7 @@
reqVO.setGender(importEmployee.getGender() != null ? importEmployee.getGender() : 1); // 榛樿鐢�
reqVO.setPhone(importEmployee.getPhone());
reqVO.setDeptId(deptId);
- reqVO.setPostId(postId);
+ reqVO.setPostIds(CollUtil.isEmpty(postIds) ? null : new ArrayList<>(postIds));
reqVO.setRoleIds(CollUtil.isEmpty(roleIds) ? null : new ArrayList<>(roleIds));
reqVO.setHireDate(importEmployee.getHireDate());
reqVO.setEmployeeStatus(importEmployee.getEmployeeStatus() != null
@@ -441,15 +467,26 @@
return dept.getId();
}
- private Long parsePostId(String postName, Map<String, PostRespDTO> postMap) {
- if (StrUtil.isBlank(postName)) {
+ private Set<Long> parsePostIds(String postNames, Map<String, PostRespDTO> postMap) {
+ if (StrUtil.isBlank(postNames)) {
throw exception(EMPLOYEE_IMPORT_FIELD_REQUIRED, "宀椾綅鍚嶇О");
}
- PostRespDTO post = postMap.get(postName.trim());
- if (post == null) {
- throw exception(EMPLOYEE_POST_NAME_NOT_EXISTS, postName.trim());
+ Set<Long> postIds = new LinkedHashSet<>();
+ for (String postName : postNames.split("[,锛宂")) {
+ String trimmed = postName.trim();
+ if (StrUtil.isBlank(trimmed)) {
+ continue;
+ }
+ PostRespDTO post = postMap.get(trimmed);
+ if (post == null) {
+ throw exception(EMPLOYEE_POST_NAME_NOT_EXISTS, trimmed);
+ }
+ postIds.add(post.getId());
}
- return post.getId();
+ if (CollUtil.isEmpty(postIds)) {
+ throw exception(EMPLOYEE_IMPORT_FIELD_REQUIRED, "宀椾綅鍚嶇О");
+ }
+ return postIds;
}
private Set<Long> parseRoleIds(String roleNames, Map<String, RoleRespDTO> roleMap) {
--
Gitblit v1.9.3