From 9776d76d1a5c1230fe04427e3c76d1ff0b960b2d Mon Sep 17 00:00:00 2001 From: wkc <978997012@qq.com> Date: Wed, 11 Feb 2026 15:20:08 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=91=98=E5=B7=A5=E4=BA=B2=E5=B1=9E?= =?UTF-8?q?=E5=85=B3=E7=B3=BB=E5=AF=BC=E5=85=A5=E6=B7=BB=E5=8A=A0=E8=BA=AB?= =?UTF-8?q?=E4=BB=BD=E8=AF=81=E5=8F=B7=E5=AD=98=E5=9C=A8=E6=80=A7=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...CcdiStaffFmyRelationImportServiceImpl.java | 44 ++++++++++++++++--- 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffFmyRelationImportServiceImpl.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffFmyRelationImportServiceImpl.java index 2e1eb40..aff8d2a 100644 --- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffFmyRelationImportServiceImpl.java +++ b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffFmyRelationImportServiceImpl.java @@ -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 redisTemplate; + @Resource + private CcdiBaseStaffMapper baseStaffMapper; + @Override @Async @Transactional @@ -55,14 +62,32 @@ public class CcdiStaffFmyRelationImportServiceImpl implements ICcdiStaffFmyRelat List newRecords = new ArrayList<>(); List failures = new ArrayList<>(); + // 批量验证员工身份证号是否存在 + Set excelPersonIds = excelList.stream() + .map(CcdiStaffFmyRelationExcel::getPersonId) + .filter(StringUtils::isNotEmpty) + .collect(Collectors.toSet()); + + Set existingPersonIds = new HashSet<>(); + if (!excelPersonIds.isEmpty()) { + ImportLogUtils.logBatchQueryStart(log, taskId, "员工身份证号", excelPersonIds.size()); + + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.select(CcdiBaseStaff::getIdCard) + .in(CcdiBaseStaff::getIdCard, excelPersonIds); + + List existingStaff = baseStaffMapper.selectList(wrapper); + existingPersonIds = existingStaff.stream() + .map(CcdiBaseStaff::getIdCard) + .collect(Collectors.toSet()); + + ImportLogUtils.logBatchQueryComplete(log, taskId, "员工身份证号", existingPersonIds.size()); + } + // ========== 第一步:批量唯一性校验 ========== - // 1. 提取Excel中所有的personId和relationCertNo - Set excelPersonIds = new HashSet<>(); + // 1. 提取Excel中所有的relationCertNo(personId已在前面提取) Set 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 existingKeys = new HashSet<>(); - if (!excelPersonIds.isEmpty() && !excelRelationCertNos.isEmpty()) { + if (!excelRelationCertNos.isEmpty()) { ImportLogUtils.logBatchQueryStart(log, taskId, "已存在的亲属关系", excelList.size()); List 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();