From fc24827d4eb7b15c28a184123376eb758d93a9ad Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期五, 10 四月 2026 17:25:30 +0800
Subject: [PATCH] feat: 生产计划导入验证产品是否存在、申请单编号重复、强度是否正确

---
 src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java |   74 ++++++++++++++++++++++++++++--------
 1 files changed, 57 insertions(+), 17 deletions(-)

diff --git a/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java b/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java
index fcee832..c84b469 100644
--- a/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java
+++ b/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java
@@ -504,28 +504,68 @@
         if (list == null || list.isEmpty()) {
             throw new ServiceException("Excel娌℃湁鏁版嵁");
         }
-        List<ProductionPlan> entityList = new ArrayList<>(list.size());
-        ProductionPlan entity;
-        for (ProductionPlanImportDto dto : list) {
-            entity = new ProductionPlan();
-            BeanUtils.copyProperties(dto, entity);
-            entity.setAssignedQuantity(BigDecimal.ZERO);
-            entity.setCreateTime(LocalDateTime.now());
-            entity.setUpdateTime(LocalDateTime.now());
-            entity.setDataSourceType(DataSourceTypeEnum.MANUAL.getCode());
 
-            // 鏍规嵁鐗╂枡缂栫爜濉厖鍏宠仈ID
-            if (StringUtils.isNotEmpty(dto.getMaterialCode())) {
-                LambdaQueryWrapper<ProductMaterialSku> skuQueryWrapper = new LambdaQueryWrapper<>();
-                skuQueryWrapper.eq(ProductMaterialSku::getMaterialCode, dto.getMaterialCode());
-                ProductMaterialSku sku = productMaterialSkuService.getOne(skuQueryWrapper);
-                if (sku != null) {
-                    entity.setProductMaterialSkuId(sku.getId());
+        Set<String> applyNos = new HashSet<>();
+        Set<String> materialCodes = new HashSet<>();
+        for (int i = 0; i < list.size(); i++) {
+            ProductionPlanImportDto dto = list.get(i);
+            String applyNo = dto.getApplyNo();
+            String materialCode = dto.getMaterialCode();
+
+            if (StringUtils.isEmpty(applyNo)) {
+                throw new ServiceException("瀵煎叆澶辫触锛氱 " + (i + 2) + " 琛岀敵璇峰崟缂栧彿涓嶈兘涓虹┖");
+            }
+            if (!applyNos.add(applyNo)) {
+                throw new ServiceException("瀵煎叆澶辫触锛欵xcel 涓瓨鍦ㄩ噸澶嶇殑鐢宠鍗曠紪鍙�: " + applyNo);
+            }
+            if (StringUtils.isEmpty(materialCode)) {
+                throw new ServiceException("瀵煎叆澶辫触锛氱 " + (i + 2) + " 琛岀墿鏂欑紪鐮佷笉鑳戒负绌�");
+            }
+
+            String strength = dto.getStrength();
+            if (StringUtils.isNotEmpty(strength)) {
+                if (!"A3.5".equals(strength) && !"A5.0".equals(strength)) {
+                    throw new ServiceException("瀵煎叆澶辫触锛氱 " + (i + 2) + " 琛屽己搴﹀彧鑳芥槸 A3.5 鎴� A5.0");
                 }
             }
 
-            entityList.add(entity);
+            materialCodes.add(materialCode);
         }
+
+        //  鐢宠鍗曠紪鍙锋槸鍚﹀凡瀛樺湪
+        Long existApplyNoCount = baseMapper.selectCount(Wrappers.<ProductionPlan>lambdaQuery()
+                .in(ProductionPlan::getApplyNo, applyNos));
+        if (existApplyNoCount > 0) {
+            List<String> existApplyNos = baseMapper.selectList(Wrappers.<ProductionPlan>lambdaQuery()
+                            .in(ProductionPlan::getApplyNo, applyNos))
+                    .stream().map(ProductionPlan::getApplyNo).collect(Collectors.toList());
+            throw new ServiceException("瀵煎叆澶辫触锛岀敵璇峰崟缂栧彿宸插瓨鍦�: " + String.join(", ", existApplyNos));
+        }
+
+        Map<String, Long> skuMap = productMaterialSkuService.list(Wrappers.<ProductMaterialSku>lambdaQuery()
+                        .in(ProductMaterialSku::getMaterialCode, materialCodes))
+                .stream().collect(Collectors.toMap(ProductMaterialSku::getMaterialCode, ProductMaterialSku::getId, (k1, k2) -> k1));
+
+        List<String> missingCodes = materialCodes.stream()
+                .filter(code -> !skuMap.containsKey(code))
+                .collect(Collectors.toList());
+        if (!missingCodes.isEmpty()) {
+            throw new ServiceException("瀵煎叆澶辫触锛屼互涓嬬墿鏂欑紪鐮佷笉瀛樺湪: " + String.join(", ", missingCodes));
+        }
+
+        LocalDateTime now = LocalDateTime.now();
+        List<ProductionPlan> entityList = list.stream().map(dto -> {
+            ProductionPlan entity = new ProductionPlan();
+            BeanUtils.copyProperties(dto, entity);
+            entity.setProductMaterialSkuId(skuMap.get(dto.getMaterialCode()));
+            entity.setAssignedQuantity(BigDecimal.ZERO);
+            entity.setDataSourceType(DataSourceTypeEnum.MANUAL.getCode());
+            entity.setStatus(0);
+            entity.setCreateTime(now);
+            entity.setUpdateTime(now);
+            return entity;
+        }).collect(Collectors.toList());
+
         this.saveBatch(entityList);
     }
 

--
Gitblit v1.9.3