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