feat: 员工亲属关系导入添加身份证号存在性校验
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
package com.ruoyi.ccdi.service.impl;
|
||||
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.ruoyi.ccdi.domain.CcdiBaseStaff;
|
||||
import com.ruoyi.ccdi.domain.CcdiStaffFmyRelation;
|
||||
import com.ruoyi.ccdi.domain.dto.CcdiStaffFmyRelationAddDTO;
|
||||
import com.ruoyi.ccdi.domain.excel.CcdiStaffFmyRelationExcel;
|
||||
@@ -8,6 +10,7 @@ import com.ruoyi.ccdi.domain.vo.ImportResult;
|
||||
import com.ruoyi.ccdi.domain.vo.ImportStatusVO;
|
||||
import com.ruoyi.ccdi.domain.vo.StaffFmyRelationImportFailureVO;
|
||||
import com.ruoyi.ccdi.enums.GenderEnum;
|
||||
import com.ruoyi.ccdi.mapper.CcdiBaseStaffMapper;
|
||||
import com.ruoyi.ccdi.mapper.CcdiStaffFmyRelationMapper;
|
||||
import com.ruoyi.ccdi.service.ICcdiStaffFmyRelationImportService;
|
||||
import com.ruoyi.ccdi.utils.ImportLogUtils;
|
||||
@@ -24,6 +27,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 员工亲属关系异步导入服务层处理
|
||||
@@ -43,6 +47,9 @@ public class CcdiStaffFmyRelationImportServiceImpl implements ICcdiStaffFmyRelat
|
||||
@Resource
|
||||
private RedisTemplate<String, Object> redisTemplate;
|
||||
|
||||
@Resource
|
||||
private CcdiBaseStaffMapper baseStaffMapper;
|
||||
|
||||
@Override
|
||||
@Async
|
||||
@Transactional
|
||||
@@ -55,14 +62,32 @@ public class CcdiStaffFmyRelationImportServiceImpl implements ICcdiStaffFmyRelat
|
||||
List<CcdiStaffFmyRelation> newRecords = new ArrayList<>();
|
||||
List<StaffFmyRelationImportFailureVO> failures = new ArrayList<>();
|
||||
|
||||
// 批量验证员工身份证号是否存在
|
||||
Set<String> excelPersonIds = excelList.stream()
|
||||
.map(CcdiStaffFmyRelationExcel::getPersonId)
|
||||
.filter(StringUtils::isNotEmpty)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
Set<String> existingPersonIds = new HashSet<>();
|
||||
if (!excelPersonIds.isEmpty()) {
|
||||
ImportLogUtils.logBatchQueryStart(log, taskId, "员工身份证号", excelPersonIds.size());
|
||||
|
||||
LambdaQueryWrapper<CcdiBaseStaff> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.select(CcdiBaseStaff::getIdCard)
|
||||
.in(CcdiBaseStaff::getIdCard, excelPersonIds);
|
||||
|
||||
List<CcdiBaseStaff> existingStaff = baseStaffMapper.selectList(wrapper);
|
||||
existingPersonIds = existingStaff.stream()
|
||||
.map(CcdiBaseStaff::getIdCard)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
ImportLogUtils.logBatchQueryComplete(log, taskId, "员工身份证号", existingPersonIds.size());
|
||||
}
|
||||
|
||||
// ========== 第一步:批量唯一性校验 ==========
|
||||
// 1. 提取Excel中所有的personId和relationCertNo
|
||||
Set<String> excelPersonIds = new HashSet<>();
|
||||
// 1. 提取Excel中所有的relationCertNo(personId已在前面提取)
|
||||
Set<String> excelRelationCertNos = new HashSet<>();
|
||||
for (CcdiStaffFmyRelationExcel excel : excelList) {
|
||||
if (StringUtils.isNotEmpty(excel.getPersonId())) {
|
||||
excelPersonIds.add(excel.getPersonId());
|
||||
}
|
||||
if (StringUtils.isNotEmpty(excel.getRelationCertNo())) {
|
||||
excelRelationCertNos.add(excel.getRelationCertNo());
|
||||
}
|
||||
@@ -70,7 +95,7 @@ public class CcdiStaffFmyRelationImportServiceImpl implements ICcdiStaffFmyRelat
|
||||
|
||||
// 2. 批量查询数据库中已存在的记录
|
||||
Set<String> existingKeys = new HashSet<>();
|
||||
if (!excelPersonIds.isEmpty() && !excelRelationCertNos.isEmpty()) {
|
||||
if (!excelRelationCertNos.isEmpty()) {
|
||||
ImportLogUtils.logBatchQueryStart(log, taskId, "已存在的亲属关系", excelList.size());
|
||||
List<CcdiStaffFmyRelation> existingRecords = relationMapper.selectExistingRelations(
|
||||
new ArrayList<>(excelPersonIds),
|
||||
@@ -100,6 +125,13 @@ public class CcdiStaffFmyRelationImportServiceImpl implements ICcdiStaffFmyRelat
|
||||
// 验证数据
|
||||
validateRelationData(addDTO);
|
||||
|
||||
// 身份证号存在性检查(在基本验证之后)
|
||||
if (!existingPersonIds.contains(excel.getPersonId())) {
|
||||
throw new RuntimeException(String.format(
|
||||
"第%d行: 身份证号[%s]不存在于员工信息表中,请先添加员工信息",
|
||||
i + 1, excel.getPersonId()));
|
||||
}
|
||||
|
||||
// 生成唯一键
|
||||
String uniqueKey = excel.getPersonId() + "|" + excel.getRelationCertNo();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user