From ac6db1c4fddcb89c9668e34a35f023817a59f838 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 01 四月 2026 17:54:44 +0800
Subject: [PATCH] yys 1.产品导入新增excel错误提示 2.bom导入新增excel错误提示 3.仓储物流增加库位字段 4.修改发货出库-新增库位 5.修改采购入库审核-新增库位 6.生产入库-新增库位,审核

---
 src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java |   88 ++++++++++++++++++++++++-------------------
 1 files changed, 49 insertions(+), 39 deletions(-)

diff --git a/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
index 066d886..b2918bd 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
@@ -32,6 +32,7 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
@@ -130,46 +131,52 @@
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Boolean importProduct(MultipartFile file) {
+    public void importProduct(MultipartFile file, HttpServletResponse response) {
+        ExcelUtil<ProductModelExcelCopyDto> productModelExcelUtil = new ExcelUtil<>(ProductModelExcelCopyDto.class);
+        List<ProductModelExcelCopyDto> productModelList = null;
         try {
-            ExcelUtil<ProductModelExcelCopyDto> productModelExcelUtil = new ExcelUtil<>(ProductModelExcelCopyDto.class);
-            List<ProductModelExcelCopyDto> productModelList = productModelExcelUtil.importExcel(file.getInputStream());
-            if(CollectionUtils.isNotEmpty(productModelList)){
-                // 2. 鎸変骇鍝佸悕绉�,鍥剧焊缂栧彿鍒嗙粍
-                Map<Map.Entry<String, String>, List<ProductModelExcelCopyDto>> groupedByProductNameAndDrawingNumber =
-                        productModelList.stream()
-                                .collect(Collectors.groupingBy(
-                                        dto -> new AbstractMap.SimpleEntry<>(
-                                                dto.getProductName(),
-                                                dto.getModel()
-                                        )
-                                ));
-                // 2. 閬嶅巻鍒嗙粍缁撴灉澶勭悊鏁版嵁
-                for (Map.Entry<Map.Entry<String, String>, List<ProductModelExcelCopyDto>> entry : groupedByProductNameAndDrawingNumber.entrySet()) {
-                    Map.Entry<String, String> groupKey = entry.getKey();
-                    String productName = groupKey.getKey(); // 浜у搧鍚嶇О
-                    String drawingNumber = groupKey.getValue(); // 鍥剧焊缂栧彿
-                    List<ProductModelExcelCopyDto> dtoList = entry.getValue();
-
-                    // 绌哄垪琛ㄨ烦杩囷紝閬垮厤鍚庣画NPE
-                    if (CollectionUtils.isEmpty(dtoList)) {
-                        continue;
-                    }
-                    ProductModelExcelCopyDto firstDto = dtoList.get(0);
-                    String model = firstDto.getModel();
-
-                    // 3. 鏌ヨ/鏂板浜у搧锛堟寜浜у搧鍚嶇О+鍥剧焊缂栧彿锛屾洿绮惧噯锛�
-                    Product product = getOrCreateProduct(productName, drawingNumber);
-
-                    // 4. 鎵归噺澶勭悊浜у搧鍨嬪彿锛堟寜鍥剧焊缂栧彿+鍨嬪彿锛�
-                    processProductModel(dtoList, product.getId(), model, drawingNumber);
-                }
-            }
-            return true;
+            productModelList = productModelExcelUtil.importExcel(file.getInputStream());
         }catch (Exception e) {
-            e.printStackTrace();
+            throw new ServiceException("鏂囦欢瑙f瀽澶辫触");
         }
-        return false;
+        if(CollectionUtils.isNotEmpty(productModelList)){
+            // 2. 鎸変骇鍝佸悕绉�,鍥剧焊缂栧彿鍒嗙粍
+            Map<Map.Entry<String, String>, List<ProductModelExcelCopyDto>> groupedByProductNameAndDrawingNumber =
+                    productModelList.stream()
+                            .collect(Collectors.groupingBy(
+                                    dto -> new AbstractMap.SimpleEntry<>(
+                                            dto.getProductName(),
+                                            dto.getModel()
+                                    )
+                            ));
+            List<ProductModelExcelCopyErrorDto> errorList = new ArrayList<>();
+            // 2. 閬嶅巻鍒嗙粍缁撴灉澶勭悊鏁版嵁
+            for (Map.Entry<Map.Entry<String, String>, List<ProductModelExcelCopyDto>> entry : groupedByProductNameAndDrawingNumber.entrySet()) {
+                Map.Entry<String, String> groupKey = entry.getKey();
+                String productName = groupKey.getKey(); // 浜у搧鍚嶇О
+                String drawingNumber = groupKey.getValue(); // 鍥剧焊缂栧彿
+                List<ProductModelExcelCopyDto> dtoList = entry.getValue();
+
+                // 绌哄垪琛ㄨ烦杩囷紝閬垮厤鍚庣画NPE
+                if (CollectionUtils.isEmpty(dtoList)) {
+                    continue;
+                }
+                ProductModelExcelCopyDto firstDto = dtoList.get(0);
+                String model = firstDto.getModel();
+
+                // 3. 鏌ヨ/鏂板浜у搧锛堟寜浜у搧鍚嶇О+鍥剧焊缂栧彿锛屾洿绮惧噯锛�
+                Product product = getOrCreateProduct(productName, drawingNumber);
+
+                // 4. 鎵归噺澶勭悊浜у搧鍨嬪彿锛堟寜鍥剧焊缂栧彿+鍨嬪彿锛�
+                processProductModel(dtoList, product.getId(), model, drawingNumber,errorList);
+            }
+            if(CollectionUtils.isNotEmpty(errorList)){
+                // 5. 鎵归噺澶勭悊閿欒鏁版嵁
+                ExcelUtil<ProductModelExcelCopyErrorDto> errorExcelUtil = new ExcelUtil<>(ProductModelExcelCopyErrorDto.class);
+                errorExcelUtil.exportExcel(response,errorList, "閿欒鏁版嵁");
+            }
+        }
+
     }
 
     /**
@@ -196,11 +203,14 @@
      * 鎶藉彇閫氱敤鏂规硶锛氬鐞嗕骇鍝佸瀷鍙凤紙鏂板/鏇存柊锛�
      */
     private void processProductModel(List<ProductModelExcelCopyDto> dtoList,
-                                     Long productId, String model, String drawingNumber) {
+                                     Long productId,
+                                     String model,
+                                     String drawingNumber,
+                                     List<ProductModelExcelCopyErrorDto> errorList) {
         // 鏌ヨ鎵�鏈夊伐鑹鸿矾绾�
         List<ProductProcess> productRoutes = productProcessMapper.selectList(new QueryWrapper<ProductProcess>());
         if(CollectionUtils.isEmpty(productRoutes)){
-            throw new ServiceException("璇峰厛鍒涘缓浜у搧宸ヨ壓璺嚎");
+            productRoutes = new ArrayList<>();
         }
         for (ProductModelExcelCopyDto dto : dtoList) {
             // 鏌ヨ鏉′欢锛氬瀷鍙�+鍥剧焊缂栧彿锛堟洿绮惧噯锛岀鍚堝垎缁勯�昏緫锛�

--
Gitblit v1.9.3