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("状态只能填写'在职'或'离职'"); - } - } - /** * 导入结果内部类 */