From ce96310177bdd6d24ac90bd6f92d8def30b680af Mon Sep 17 00:00:00 2001
From: tuqin <tuqin@tuqin.cn>
Date: 星期一, 26 十月 2026 13:58:23 +0800
Subject: [PATCH] fix(hrm): 修复修改员工时的「部门不存在」与「系统异常」
---
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeServiceImpl.java | 24 +++++++++++++++++-------
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java | 1 +
yudao-module-hrm-api/src/main/java/cn/iocoder/yudao/module/hrm/enums/ErrorCodeConstants.java | 2 ++
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/employee/HrmEmployeeMapper.java | 16 ++++++++++++++++
4 files changed, 36 insertions(+), 7 deletions(-)
diff --git a/yudao-module-hrm-api/src/main/java/cn/iocoder/yudao/module/hrm/enums/ErrorCodeConstants.java b/yudao-module-hrm-api/src/main/java/cn/iocoder/yudao/module/hrm/enums/ErrorCodeConstants.java
index 3af9511..1d0a320 100644
--- a/yudao-module-hrm-api/src/main/java/cn/iocoder/yudao/module/hrm/enums/ErrorCodeConstants.java
+++ b/yudao-module-hrm-api/src/main/java/cn/iocoder/yudao/module/hrm/enums/ErrorCodeConstants.java
@@ -31,6 +31,8 @@
ErrorCode EMPLOYEE_CONTRACT_IMPORT_EMPLOYEE_NAME_NOT_EXISTS = new ErrorCode(1_030_000_018, "鍛樺伐濮撳悕銆恵}銆戜笉瀛樺湪锛岃鍏堢淮鎶ゅ憳宸ユ。妗�");
ErrorCode EMPLOYEE_CONTRACT_IMPORT_EMPLOYEE_NAME_MULTIPLE = new ErrorCode(1_030_000_019, "鍛樺伐濮撳悕銆恵}銆戝搴斿涓憳宸ユ。妗堬紝鏃犳硶鑷姩鍖归厤锛岃鍏堝湪椤甸潰鎵嬪伐涓鸿鍛樺伐鏂板鍚堝悓");
ErrorCode EMPLOYEE_CONTRACT_IMPORT_CONTRACT_EXISTS = new ErrorCode(1_030_000_020, "璇ュ憳宸ャ�恵}銆戝凡瀛樺湪鐩稿悓绫诲瀷銆佺浉鍚屽紑濮嬫棩鏈熺殑鍚堝悓锛屽闇�瑕嗙洊璇峰嬀閫夆�滃凡瀛樺湪鏃舵洿鏂扳��");
+ ErrorCode EMPLOYEE_PHONE_OCCUPIED_BY_DELETED = new ErrorCode(1_030_000_021, "鎵嬫満鍙枫�恵}銆戝凡琚竴鏉°�愬凡鍒犻櫎銆戠殑鍛樺伐妗f鍗犵敤锛岃鏇存崲鎵嬫満鍙凤紝鎴栬仈绯荤鐞嗗憳娓呯悊璇ュ巻鍙叉。妗�");
+ ErrorCode EMPLOYEE_NO_OCCUPIED_BY_DELETED = new ErrorCode(1_030_000_022, "鍛樺伐缂栧彿銆恵}銆戝凡琚竴鏉°�愬凡鍒犻櫎銆戠殑鍛樺伐妗f鍗犵敤锛岃鏇存崲鍛樺伐缂栧彿锛屾垨鑱旂郴绠$悊鍛樻竻鐞嗚鍘嗗彶妗f");
// ========== 璇峰亣鐢宠 1-030-001-000 ==========
ErrorCode LEAVE_APPLICATION_NOT_EXISTS = new ErrorCode(1_030_001_000, "璇峰亣鐢宠涓嶅瓨鍦�");
diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/employee/HrmEmployeeMapper.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/employee/HrmEmployeeMapper.java
index 0a48fa0..7ce97b7 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/employee/HrmEmployeeMapper.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/employee/HrmEmployeeMapper.java
@@ -7,6 +7,8 @@
import cn.iocoder.yudao.module.hrm.controller.admin.employee.vo.HrmEmployeePageReqVO;
import cn.iocoder.yudao.module.hrm.dal.dataobject.employee.HrmEmployeeDO;
import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
import java.util.Collection;
import java.util.List;
@@ -23,6 +25,20 @@
return selectOne(HrmEmployeeDO::getPhone, phone);
}
+ /**
+ * 鎸夋墜鏈哄彿鏌ヨ锛�**鍖呭惈宸查�昏緫鍒犻櫎鐨勮褰�**锛夈��
+ * 鍞竴鎬ф牎楠屽繀椤诲寘鍚凡鍒犻櫎璁板綍锛歨rm_employee.uk_phone 鍞竴绱㈠紩涓嶅尯鍒� deleted锛�
+ * 鑻ュ彧鏌ユ湭鍒犻櫎璁板綍浼氭紡鍒わ紝鍐欏簱鏃舵姏鍞竴绾︽潫寮傚父锛屽墠绔〃鐜颁负鈥滅郴缁熷紓甯糕�濄��
+ */
+ @Select("SELECT * FROM hrm_employee WHERE phone = #{phone} LIMIT 1")
+ HrmEmployeeDO selectByPhoneIgnoreDeleted(@Param("phone") String phone);
+
+ /**
+ * 鎸夊憳宸ョ紪鍙锋煡璇紙**鍖呭惈宸查�昏緫鍒犻櫎鐨勮褰�**锛夛紝鐢ㄩ�斿悓涓娿��
+ */
+ @Select("SELECT * FROM hrm_employee WHERE employee_no = #{employeeNo} LIMIT 1")
+ HrmEmployeeDO selectByEmployeeNoIgnoreDeleted(@Param("employeeNo") String employeeNo);
+
default HrmEmployeeDO selectByName(String name) {
return selectOne(HrmEmployeeDO::getName, name);
}
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 d32b4c5..f2a01a6 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
@@ -104,9 +104,15 @@
deptApi.validateDeptList(Collections.singleton(createReqVO.getDeptId()));
// 2. 鏍¢獙宀椾綅
postApi.validPostList(createReqVO.getPostIds());
- // 3. 鏍¢獙鎵嬫満鍙锋槸鍚﹀凡瀛樺湪
- if (employeeMapper.selectByPhone(createReqVO.getPhone()) != null) {
- throw exception(EMPLOYEE_PHONE_EXISTS);
+ // 3. 鏍¢獙鎵嬫満鍙锋槸鍚﹀凡瀛樺湪锛�**鍖呭惈宸插垹闄ゆ。妗�**锛歶k_phone 鍞竴绱㈠紩涓嶅尯鍒� deleted锛�
+ // 鍙煡鏈垹闄よ褰曚細婕忓垽锛屽鑷村啓搴撴椂鎶涘敮涓�绾︽潫寮傚父锛屽墠绔樉绀衡�滅郴缁熷紓甯糕�濓級
+ if (createReqVO.getPhone() != null) {
+ HrmEmployeeDO existPhone = employeeMapper.selectByPhoneIgnoreDeleted(createReqVO.getPhone());
+ if (existPhone != null) {
+ throw existPhone.getDeleted() != null && existPhone.getDeleted()
+ ? exception(EMPLOYEE_PHONE_OCCUPIED_BY_DELETED, createReqVO.getPhone())
+ : exception(EMPLOYEE_PHONE_EXISTS);
+ }
}
// 4. 鍚屾鍒涘缓绯荤粺鐢ㄦ埛
AdminUserCreateReqDTO userCreateReqDTO = new AdminUserCreateReqDTO();
@@ -186,10 +192,14 @@
deptApi.validateDeptList(Collections.singleton(updateReqVO.getDeptId()));
// 鏍¢獙宀椾綅
postApi.validPostList(updateReqVO.getPostIds());
- // 鏍¢獙鎵嬫満鍙锋槸鍚﹀凡瀛樺湪锛堝鏋滄墜鏈哄彿鏈夊彉鏇达級
- if (!Objects.equals(employee.getPhone(), updateReqVO.getPhone())
- && employeeMapper.selectByPhone(updateReqVO.getPhone()) != null) {
- throw exception(EMPLOYEE_PHONE_EXISTS);
+ // 鏍¢獙鎵嬫満鍙锋槸鍚﹀凡瀛樺湪锛堝鏋滄墜鏈哄彿鏈夊彉鏇达紱**鍖呭惈宸插垹闄ゆ。妗�**锛屽師鍥犺 createEmployee锛�
+ if (!Objects.equals(employee.getPhone(), updateReqVO.getPhone()) && updateReqVO.getPhone() != null) {
+ HrmEmployeeDO existPhone = employeeMapper.selectByPhoneIgnoreDeleted(updateReqVO.getPhone());
+ if (existPhone != null && !Objects.equals(existPhone.getId(), updateReqVO.getId())) {
+ throw existPhone.getDeleted() != null && existPhone.getDeleted()
+ ? exception(EMPLOYEE_PHONE_OCCUPIED_BY_DELETED, updateReqVO.getPhone())
+ : exception(EMPLOYEE_PHONE_EXISTS);
+ }
}
// 鏇存柊鍛樺伐涓昏〃
HrmEmployeeDO updateObj = BeanUtils.toBean(updateReqVO, HrmEmployeeDO.class);
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 360f66d..9e14757 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
@@ -223,6 +223,7 @@
}
@Override
+ @DataPermission(enable = false) // 浠呮牎楠岄儴闂ㄦ槸鍚﹀瓨鍦�/鍚敤锛屼笉鍙楁暟鎹潈闄愰檺鍒讹紙鍚﹀垯闈炶秴绠′細璇姤"閮ㄩ棬涓嶅瓨鍦�"锛�
public void validateDeptList(Collection<Long> ids) {
if (CollUtil.isEmpty(ids)) {
return;
--
Gitblit v1.9.3