refactor: 重构validateEmployeeData方法复用逻辑
- 修改validateEmployeeData方法,增加existingIds参数支持导入场景 - 删除validateEmployeeDataForImport方法,统一使用validateEmployeeData - 单条新增场景(existingIds=null)执行原有验证逻辑 - 导入场景(existingIds!=null)跳过柜员号唯一性检查(已在调用前批量查询) - 保持性能优化:批量查询一次existingIds,而非每条记录单独查询 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -203,7 +203,7 @@ public class CcdiEmployeeServiceImpl implements ICcdiEmployeeService {
|
|||||||
BeanUtils.copyProperties(excel, addDTO);
|
BeanUtils.copyProperties(excel, addDTO);
|
||||||
|
|
||||||
// 验证数据
|
// 验证数据
|
||||||
validateEmployeeData(addDTO, isUpdateSupport);
|
validateEmployeeData(addDTO, isUpdateSupport, null);
|
||||||
|
|
||||||
CcdiEmployee employee = new CcdiEmployee();
|
CcdiEmployee employee = new CcdiEmployee();
|
||||||
BeanUtils.copyProperties(addDTO, employee);
|
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<Long> existingIds) {
|
||||||
// 验证必填字段
|
// 验证必填字段
|
||||||
if (StringUtils.isEmpty(addDTO.getName())) {
|
if (StringUtils.isEmpty(addDTO.getName())) {
|
||||||
throw new RuntimeException("姓名不能为空");
|
throw new RuntimeException("姓名不能为空");
|
||||||
@@ -379,16 +383,29 @@ public class CcdiEmployeeServiceImpl implements ICcdiEmployeeService {
|
|||||||
throw new RuntimeException(idCardError);
|
throw new RuntimeException(idCardError);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查柜员号(employeeId)唯一性
|
// 单条新增场景:检查柜员号和身份证号唯一性
|
||||||
if (employeeMapper.selectById(addDTO.getEmployeeId()) != null) {
|
if (existingIds == null) {
|
||||||
throw new RuntimeException("该柜员号已存在");
|
// 检查柜员号(employeeId)唯一性
|
||||||
}
|
if (employeeMapper.selectById(addDTO.getEmployeeId()) != null) {
|
||||||
|
throw new RuntimeException("该柜员号已存在");
|
||||||
|
}
|
||||||
|
|
||||||
// 检查身份证号唯一性
|
// 检查身份证号唯一性
|
||||||
LambdaQueryWrapper<CcdiEmployee> wrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<CcdiEmployee> wrapper = new LambdaQueryWrapper<>();
|
||||||
wrapper.eq(CcdiEmployee::getIdCard, addDTO.getIdCard());
|
wrapper.eq(CcdiEmployee::getIdCard, addDTO.getIdCard());
|
||||||
if (employeeMapper.selectCount(wrapper) > 0) {
|
if (employeeMapper.selectCount(wrapper) > 0) {
|
||||||
throw new RuntimeException("该身份证号已存在");
|
throw new RuntimeException("该身份证号已存在");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 导入场景:如果柜员号不存在,才检查身份证号唯一性
|
||||||
|
if (!existingIds.contains(addDTO.getEmployeeId())) {
|
||||||
|
// 检查身份证号唯一性
|
||||||
|
LambdaQueryWrapper<CcdiEmployee> 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);
|
BeanUtils.copyProperties(excel, addDTO);
|
||||||
|
|
||||||
// 验证数据(支持更新模式)
|
// 验证数据(支持更新模式)
|
||||||
validateEmployeeDataForImport(addDTO, isUpdateSupport, existingIds);
|
validateEmployeeData(addDTO, isUpdateSupport, existingIds);
|
||||||
|
|
||||||
CcdiEmployee employee = convertToEntity(excel);
|
CcdiEmployee employee = convertToEntity(excel);
|
||||||
|
|
||||||
@@ -552,52 +569,6 @@ public class CcdiEmployeeServiceImpl implements ICcdiEmployeeService {
|
|||||||
redisTemplate.opsForHash().putAll(key, statusData);
|
redisTemplate.opsForHash().putAll(key, statusData);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 验证员工数据(导入模式,支持更新)
|
|
||||||
*/
|
|
||||||
private void validateEmployeeDataForImport(CcdiEmployeeAddDTO addDTO, Boolean isUpdateSupport, Set<Long> 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<CcdiEmployee> 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("状态只能填写'在职'或'离职'");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 导入结果内部类
|
* 导入结果内部类
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user