From d5af1602f907e0c325d72c8e67ea4d469bd1f7ab Mon Sep 17 00:00:00 2001 From: wkc <978997012@qq.com> Date: Fri, 6 Feb 2026 09:37:54 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84validateEmployeeD?= =?UTF-8?q?ata=E6=96=B9=E6=B3=95=E5=A4=8D=E7=94=A8=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改validateEmployeeData方法,增加existingIds参数支持导入场景 - 删除validateEmployeeDataForImport方法,统一使用validateEmployeeData - 单条新增场景(existingIds=null)执行原有验证逻辑 - 导入场景(existingIds!=null)跳过柜员号唯一性检查(已在调用前批量查询) - 保持性能优化:批量查询一次existingIds,而非每条记录单独查询 Co-Authored-By: Claude Sonnet 4.5 --- .../service/impl/CcdiEmployeeServiceImpl.java | 87 +++++++------------ 1 file changed, 29 insertions(+), 58 deletions(-) diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java index 31c073d..43d8122 100644 --- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java +++ b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java @@ -203,7 +203,7 @@ public class CcdiEmployeeServiceImpl implements ICcdiEmployeeService { BeanUtils.copyProperties(excel, addDTO); // 验证数据 - validateEmployeeData(addDTO, isUpdateSupport); + validateEmployeeData(addDTO, isUpdateSupport, null); CcdiEmployee employee = new CcdiEmployee(); BeanUtils.copyProperties(addDTO, employee); @@ -351,8 +351,12 @@ public class CcdiEmployeeServiceImpl implements ICcdiEmployeeService { /** * 验证员工数据 + * + * @param addDTO 新增DTO + * @param isUpdateSupport 是否支持更新 + * @param existingIds 已存在的员工ID集合(导入场景使用,传null表示单条新增) */ - private void validateEmployeeData(CcdiEmployeeAddDTO addDTO, Boolean isUpdateSupport) { + private void validateEmployeeData(CcdiEmployeeAddDTO addDTO, Boolean isUpdateSupport, Set existingIds) { // 验证必填字段 if (StringUtils.isEmpty(addDTO.getName())) { throw new RuntimeException("姓名不能为空"); @@ -379,16 +383,29 @@ public class CcdiEmployeeServiceImpl implements ICcdiEmployeeService { throw new RuntimeException(idCardError); } - // 检查柜员号(employeeId)唯一性 - if (employeeMapper.selectById(addDTO.getEmployeeId()) != null) { - throw new RuntimeException("该柜员号已存在"); - } + // 单条新增场景:检查柜员号和身份证号唯一性 + if (existingIds == null) { + // 检查柜员号(employeeId)唯一性 + if (employeeMapper.selectById(addDTO.getEmployeeId()) != null) { + throw new RuntimeException("该柜员号已存在"); + } - // 检查身份证号唯一性 - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(CcdiEmployee::getIdCard, addDTO.getIdCard()); - if (employeeMapper.selectCount(wrapper) > 0) { - throw new RuntimeException("该身份证号已存在"); + // 检查身份证号唯一性 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(CcdiEmployee::getIdCard, addDTO.getIdCard()); + if (employeeMapper.selectCount(wrapper) > 0) { + throw new RuntimeException("该身份证号已存在"); + } + } else { + // 导入场景:如果柜员号不存在,才检查身份证号唯一性 + if (!existingIds.contains(addDTO.getEmployeeId())) { + // 检查身份证号唯一性 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(CcdiEmployee::getIdCard, addDTO.getIdCard()); + if (employeeMapper.selectCount(wrapper) > 0) { + throw new RuntimeException("该身份证号已存在"); + } + } } // 验证状态 @@ -432,7 +449,7 @@ public class CcdiEmployeeServiceImpl implements ICcdiEmployeeService { BeanUtils.copyProperties(excel, addDTO); // 验证数据(支持更新模式) - validateEmployeeDataForImport(addDTO, isUpdateSupport, existingIds); + validateEmployeeData(addDTO, isUpdateSupport, existingIds); CcdiEmployee employee = convertToEntity(excel); @@ -552,52 +569,6 @@ public class CcdiEmployeeServiceImpl implements ICcdiEmployeeService { redisTemplate.opsForHash().putAll(key, statusData); } - /** - * 验证员工数据(导入模式,支持更新) - */ - private void validateEmployeeDataForImport(CcdiEmployeeAddDTO addDTO, Boolean isUpdateSupport, Set existingIds) { - // 验证必填字段 - if (StringUtils.isEmpty(addDTO.getName())) { - throw new RuntimeException("姓名不能为空"); - } - if (addDTO.getEmployeeId() == null) { - throw new RuntimeException("柜员号不能为空"); - } - if (addDTO.getDeptId() == null) { - throw new RuntimeException("所属部门不能为空"); - } - if (StringUtils.isEmpty(addDTO.getIdCard())) { - throw new RuntimeException("身份证号不能为空"); - } - if (StringUtils.isEmpty(addDTO.getPhone())) { - throw new RuntimeException("电话不能为空"); - } - if (StringUtils.isEmpty(addDTO.getStatus())) { - throw new RuntimeException("状态不能为空"); - } - - // 验证身份证号格式 - String idCardError = IdCardUtil.getErrorMessage(addDTO.getIdCard()); - if (idCardError != null) { - throw new RuntimeException(idCardError); - } - - // 如果柜员号不存在,检查身份证号唯一性 - if (!existingIds.contains(addDTO.getEmployeeId())) { - // 检查身份证号唯一性 - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(CcdiEmployee::getIdCard, addDTO.getIdCard()); - if (employeeMapper.selectCount(wrapper) > 0) { - throw new RuntimeException("该身份证号已存在"); - } - } - - // 验证状态 - if (!"0".equals(addDTO.getStatus()) && !"1".equals(addDTO.getStatus())) { - throw new RuntimeException("状态只能填写'在职'或'离职'"); - } - } - /** * 导入结果内部类 */