分支
用户 xiaoyi <908147524@qq.com>
星期二, 十一月 3, 2026 18:43 +0800
提交者 xiaoyi <908147524@qq.com>
星期二, 十一月 3, 2026 18:43 +0800
提交d887e78813015e8d40972b5e6016983e7caa37ff
目录 253831d9153b48e17c86dff2c14be8df23833d0b 目录 | zip | gz
上一版本 bf5f52656e128f578ed42c7979c31cf4b476ce46 查看 | 对比
fix(hrm): 修复修改员工手机号报 500 - 隔离软删除历史数据占用的唯一索引

现象:员工档案修改手机号,若该手机号被「已软删除」的历史档案占用,接口返回 500「系统异常」,日志报 DuplicateKeyException: Duplicate entry 'xxx' for key 'hrm_employee.uk_phone'

原因:hrm_employee.uk_phone 唯一索引建在 phone 列上(不含 deleted),已软删除的记录仍占用该手机号;而 selectByPhone 会被逻辑删除插件过滤,预校验查不到,写库时被数据库唯一索引拦下

修复(不改库结构):

1. 新增 HrmEmployeeMapper.selectByPhoneIncludeDeleted,可查到软删除记录

2. 新增 validatePhoneUniqueAndReleaseStale:手机号被软删除历史记录占用时自动清空其手机号释放索引;被活跃员工占用时抛业务异常「手机号已存在」

3. createEmployee / updateEmployee / importEmployeeList 三处统一走该校验

4. deleteEmployee 软删除前清空 phone 与 user_id,避免历史数据长期占用 uk_phone / uk_user_id

验证:改手机号同步账号OK;撞活跃员工返回业务错误(1030000002)不再500;撞软删除历史数据自动释放并保存成功
已修改2个文件
75 ■■■■■ 文件已修改
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/employee/HrmEmployeeMapper.java 13 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/employee/HrmEmployeeServiceImpl.java 62 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史