From 9e3609b8ad6489a4fc1ce5557f2ca083e3eca55d Mon Sep 17 00:00:00 2001 From: wkc <978997012@qq.com> Date: Wed, 11 Feb 2026 15:31:31 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=E5=91=98?= =?UTF-8?q?=E5=B7=A5=E8=B0=83=E5=8A=A8=E5=AF=BC=E5=85=A5=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E4=BB=8E2=E6=AC=A1=E9=81=8D?= =?UTF-8?q?=E5=8E=86=E4=BC=98=E5=8C=96=E4=B8=BA1=E6=AC=A1=E9=81=8D?= =?UTF-8?q?=E5=8E=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CcdiStaffTransferImportServiceImpl.java | 105 +++++------------- 1 file changed, 27 insertions(+), 78 deletions(-) diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffTransferImportServiceImpl.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffTransferImportServiceImpl.java index 1368f86..a7feb06 100644 --- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffTransferImportServiceImpl.java +++ b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffTransferImportServiceImpl.java @@ -65,8 +65,27 @@ public class CcdiStaffTransferImportServiceImpl implements ICcdiStaffTransferImp List newRecords = new ArrayList<>(); List failures = new ArrayList<>(); - // 批量验证员工ID是否存在 - Set existingStaffIds = batchValidateStaffIds(excelList, taskId, failures); + // 批量查询员工ID存在性 + Set excelStaffIds = excelList.stream() + .map(CcdiStaffTransferExcel::getStaffId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + + Set existingStaffIds = new HashSet<>(); + if (!excelStaffIds.isEmpty()) { + ImportLogUtils.logBatchQueryStart(log, taskId, "员工ID", excelStaffIds.size()); + + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.select(CcdiBaseStaff::getStaffId) + .in(CcdiBaseStaff::getStaffId, excelStaffIds); + + List existingStaff = baseStaffMapper.selectList(wrapper); + existingStaffIds = existingStaff.stream() + .map(CcdiBaseStaff::getStaffId) + .collect(Collectors.toSet()); + + ImportLogUtils.logBatchQueryComplete(log, taskId, "员工ID", existingStaffIds.size()); + } // 批量查询已存在的唯一键组合 ImportLogUtils.logBatchQueryStart(log, taskId, "已存在的调动记录", excelList.size()); @@ -80,12 +99,13 @@ public class CcdiStaffTransferImportServiceImpl implements ICcdiStaffTransferImp for (int i = 0; i < excelList.size(); i++) { CcdiStaffTransferExcel excel = excelList.get(i); - // 跳过已在预验证阶段失败的记录 - if (isRowAlreadyFailed(excel, failures)) { - continue; - } - try { + // 员工ID存在性检查 + if (excel.getStaffId() != null && !existingStaffIds.contains(excel.getStaffId())) { + throw new RuntimeException(String.format( + "员工ID %s 不存在", excel.getStaffId())); + } + // 转换为AddDTO进行验证 CcdiStaffTransferAddDTO addDTO = new CcdiStaffTransferAddDTO(); BeanUtils.copyProperties(excel, addDTO); @@ -355,75 +375,4 @@ public class CcdiStaffTransferImportServiceImpl implements ICcdiStaffTransferImp return JSON.parseArray(JSON.toJSONString(failuresObj), StaffTransferImportFailureVO.class); } - - /** - * 批量验证员工ID是否存在 - * - * @param excelList Excel数据列表 - * @param taskId 任务ID - * @param failures 失败记录列表(会追加验证失败的记录) - * @return 存在的员工ID集合 - */ - private Set batchValidateStaffIds(List excelList, - String taskId, - List failures) { - // 1. 提取并去重员工ID - Set allStaffIds = excelList.stream() - .map(CcdiStaffTransferExcel::getStaffId) - .filter(Objects::nonNull) - .collect(Collectors.toSet()); - - if (allStaffIds.isEmpty()) { - return Collections.emptySet(); - } - - // 2. 批量查询存在的员工ID - ImportLogUtils.logBatchQueryStart(log, taskId, "员工ID", allStaffIds.size()); - - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.select(CcdiBaseStaff::getStaffId) - .in(CcdiBaseStaff::getStaffId, allStaffIds); - - List existingStaff = baseStaffMapper.selectList(wrapper); - Set existingStaffIds = existingStaff.stream() - .map(CcdiBaseStaff::getStaffId) - .collect(Collectors.toSet()); - - ImportLogUtils.logBatchQueryComplete(log, taskId, "员工ID", existingStaffIds.size()); - - // 3. 预验证并标记不存在的员工ID - for (int i = 0; i < excelList.size(); i++) { - CcdiStaffTransferExcel excel = excelList.get(i); - Long staffId = excel.getStaffId(); - - if (staffId != null && !existingStaffIds.contains(staffId)) { - StaffTransferImportFailureVO failure = new StaffTransferImportFailureVO(); - BeanUtils.copyProperties(excel, failure); - failure.setErrorMessage(String.format("第%d行: 员工ID %s 不存在", i + 1, staffId)); - failures.add(failure); - - String keyData = String.format("员工ID=%s", staffId); - ImportLogUtils.logValidationError(log, taskId, i + 1, - failure.getErrorMessage(), keyData); - } - } - - return existingStaffIds; - } - - /** - * 检查某行数据是否已在失败列表中 - * - * @param excel Excel数据 - * @param failures 失败记录列表 - * @return true-已失败,false-未失败 - */ - private boolean isRowAlreadyFailed(CcdiStaffTransferExcel excel, - List failures) { - return failures.stream() - .anyMatch(f -> Objects.equals(f.getStaffId(), excel.getStaffId()) - && Objects.equals(f.getTransferDate(), excel.getTransferDate()) - && Objects.equals(f.getDeptIdBefore(), excel.getDeptIdBefore()) - && Objects.equals(f.getDeptIdAfter(), excel.getDeptIdAfter())); - } }