diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsQcMaterialControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsQcMaterialControllerService.java index f851c838..c19b92f4 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsQcMaterialControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsQcMaterialControllerService.java @@ -38,7 +38,9 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * 质检物料业务逻辑 @@ -242,6 +244,13 @@ public class QmsQcMaterialControllerService { LocalDateTime now = LocalDateTime.now(); boolean allSuccess = true; + // 检查Excel数据中是否存在重复的联合主键(物料编号+图号版本号) + Map compositeKeyCount = new HashMap<>(); + for (QmsQcMaterialImportDTO dto : data) { + String compositeKey = buildCompositeKey(dto.getMaterialNo(), dto.getDrawingNoVer()); + compositeKeyCount.merge(compositeKey, 1L, Long::sum); + } + for (QmsQcMaterialImportDTO dto : data) { StringBuilder sb = new StringBuilder(); @@ -252,7 +261,6 @@ public class QmsQcMaterialControllerService { if (StrUtil.isBlank(dto.getMaterialCategoryCode())) { sb.append("物料类别编码不能为空;"); } - // 图号版本号可以为空,作为联合主键的一部分 if (!sb.isEmpty()) { dto.setError(sb.toString()); @@ -260,6 +268,15 @@ public class QmsQcMaterialControllerService { continue; } + // 检查Excel中是否有重复的联合主键 + String compositeKey = buildCompositeKey(dto.getMaterialNo(), dto.getDrawingNoVer()); + if (compositeKeyCount.get(compositeKey) > 1) { + sb.append("Excel中存在重复的物料编号+图号版本号组合;"); + dto.setError(sb.toString()); + allSuccess = false; + continue; + } + // 校验物料类别是否存在 QmsQcMaterialCategory category = qcMaterialCategoryService.lambdaQuery() .eq(QmsQcMaterialCategory::getCategoryCode, dto.getMaterialCategoryCode()) @@ -271,18 +288,8 @@ public class QmsQcMaterialControllerService { continue; } - // 根据物料编号+图号版本号查询是否存在 - var query = qcMaterialService.lambdaQuery() - .eq(QmsQcMaterial::getMaterialNo, dto.getMaterialNo()); - // 图号版本号为空时查询为空的记录 - if (StrUtil.isBlank(dto.getDrawingNoVer())) { - query.and(q -> q.isNull(QmsQcMaterial::getDrawingNoVer) - .or() - .eq(QmsQcMaterial::getDrawingNoVer, "")); - } else { - query.eq(QmsQcMaterial::getDrawingNoVer, dto.getDrawingNoVer()); - } - QmsQcMaterial exist = query.one(); + // 根据物料编号+图号版本号查询是否存在(联合主键) + QmsQcMaterial exist = findByCompositeKey(dto.getMaterialNo(), dto.getDrawingNoVer()); String categoryPathName = buildCategoryPathName(category); @@ -329,6 +336,27 @@ public class QmsQcMaterialControllerService { return allSuccess; } + /** + * 根据联合主键(物料编号+图号版本号)查询物料 + */ + private QmsQcMaterial findByCompositeKey(String materialNo, String drawingNoVer) { + return qcMaterialService.lambdaQuery() + .eq(QmsQcMaterial::getMaterialNo, materialNo) + .and(StrUtil.isBlank(drawingNoVer), + q -> q.isNull(QmsQcMaterial::getDrawingNoVer) + .or() + .eq(QmsQcMaterial::getDrawingNoVer, "")) + .eq(StrUtil.isNotBlank(drawingNoVer), QmsQcMaterial::getDrawingNoVer, drawingNoVer) + .one(); + } + + /** + * 构建联合主键字符串(用于重复检查) + */ + private String buildCompositeKey(String materialNo, String drawingNoVer) { + return materialNo + "|" + (StrUtil.isBlank(drawingNoVer) ? "" : drawingNoVer); + } + /** * 导出质检物料(不分页) */ diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/QmsQcMaterialExportDTO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/QmsQcMaterialExportDTO.java index 87b7b321..a13972f7 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/QmsQcMaterialExportDTO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/QmsQcMaterialExportDTO.java @@ -42,9 +42,9 @@ public class QmsQcMaterialExportDTO { private String drawingNo; /** - * 图号版本号 + * 图号版本号(联合主键,可为空) */ - @ExcelColumn("*图号版本号") + @ExcelColumn("图号版本号") private String drawingNoVer; /** diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/QmsQcMaterialImportDTO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/QmsQcMaterialImportDTO.java index 1a93965a..cade7402 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/QmsQcMaterialImportDTO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/QmsQcMaterialImportDTO.java @@ -36,9 +36,9 @@ public class QmsQcMaterialImportDTO { private String drawingNo; /** - * 图号版本号(联合主键) + * 图号版本号(联合主键,可为空) */ - @ExcelColumn("*图号版本号") + @ExcelColumn("图号版本号") private String drawingNoVer; /**