From 310da8ec2f87930444b62212ba513aab9e2fa878 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 23 三月 2026 08:58:36 +0800
Subject: [PATCH] yys 1.修改产品基础模块

---
 src/main/java/com/ruoyi/basic/pojo/Product.java                         |    7 ++
 src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java |  136 +++++++++++++++++++++++++++++---------------
 2 files changed, 96 insertions(+), 47 deletions(-)

diff --git a/src/main/java/com/ruoyi/basic/pojo/Product.java b/src/main/java/com/ruoyi/basic/pojo/Product.java
index 6b4e14b..2499702 100644
--- a/src/main/java/com/ruoyi/basic/pojo/Product.java
+++ b/src/main/java/com/ruoyi/basic/pojo/Product.java
@@ -1,6 +1,7 @@
 package com.ruoyi.basic.pojo;
 
 import com.baomidou.mybatisplus.annotation.*;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -26,6 +27,12 @@
      */
     private String productName;
 
+//    /**
+//     * 瑙勬牸鍨嬪彿
+//     */
+//    @Excel(name = "鍥剧焊缂栧彿")
+//    private String model;
+
     @ApiModelProperty(value = "绉熸埛ID")
     @TableField(fill = FieldFill.INSERT)
     private Long tenantId;
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 632edec..26715f3 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
@@ -26,6 +26,7 @@
 
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
+import java.util.AbstractMap;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
@@ -51,7 +52,8 @@
             throw new RuntimeException("浜у搧鍚嶇О涓嶈兘涓虹┖");
         }
         Product product = productMapper.selectOne(new LambdaQueryWrapper<Product>()
-                .eq(Product::getProductName, productModelDto.getProductName()));
+//                        .eq(Product::getModel, productModelDto.getModel())
+                        .eq(Product::getProductName, productModelDto.getProductName()));
         if (productModelDto.getId() == null) {
             if(product == null){
                 product = new Product();
@@ -63,9 +65,10 @@
             productModel.setProductId(product.getId());
             return productModelMapper.insert(productModel);
         } else {
-            if(product != null){
-                product.setProductName(productModelDto.getProductName());
-                productMapper.updateById(product);
+            Product product1 = productMapper.selectById(productModelDto.getProductId());
+            if(product1 != null){
+                product1.setProductName(productModelDto.getProductName());
+                productMapper.updateById(product1);
             }
 
             return productModelMapper.updateById(productModelDto);
@@ -105,59 +108,50 @@
         return productModelMapper.selectPage(page, queryWrapper);
     }
 
+
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean importProduct(MultipartFile file) {
         try {
             ExcelUtil<ProductModelExcelCopyDto> productModelExcelUtil = new ExcelUtil<>(ProductModelExcelCopyDto.class);
             List<ProductModelExcelCopyDto> productModelList = productModelExcelUtil.importExcel(file.getInputStream());
-            List<Product> productList = productMapper.selectList(new LambdaQueryWrapper<Product>()
-                    .isNull(Product::getParentId));
-            if(CollectionUtils.isEmpty(productList)) {
-                throw new RuntimeException("璇峰厛娣诲姞鐖剁骇浜у搧");
-            }
+//            List<Product> productList = productMapper.selectList(new LambdaQueryWrapper<Product>()
+//                    .isNull(Product::getParentId));
+//            if(CollectionUtils.isEmpty(productList)) {
+//                throw new RuntimeException("璇峰厛娣诲姞鐖剁骇浜у搧");
+//            }
             if(CollectionUtils.isNotEmpty(productModelList)){
-                // 2. 鎸変骇鍝佸悕绉板垎缁�
-                Map<String, List<ProductModelExcelCopyDto>> groupedByProductName = productModelList.stream()
-                        .collect(Collectors.groupingBy(ProductModelExcelCopyDto::getProductName));
-                for (Map.Entry<String, List<ProductModelExcelCopyDto>> entry : groupedByProductName.entrySet()) {
-                    // 鏍规嵁鍚嶇О鏌ヨ鏄惁瀛樺湪浜у搧
-                    Product product = productMapper.selectOne(new LambdaQueryWrapper<Product>()
-                            .eq(Product::getProductName, entry.getKey())
-                            .last("limit 1"));
-                    if(product == null){
-                        product = new Product();
-                        product.setProductName(entry.getKey());
-                        product.setParentId(null); // 鐖惰妭鐐笽D
-                        // 2. 鎻掑叆褰撳墠鑺傜偣锛孧yBatis浼氳嚜鍔ㄥ洖濉玴roduct鐨刬d灞炴��
-                        productMapper.insert(product);
+                // 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;
                     }
-                    Product finalProduct = product;
-                    entry.getValue().forEach(productModelExcelDto -> {
-                        // 鏍规嵁鍥剧焊缂栧彿鏌ヨ
-                        ProductModel productModel = productModelMapper.selectOne(new LambdaQueryWrapper<ProductModel>()
-                                .eq(ProductModel::getModel, productModelExcelDto.getModel())
-                                .last("limit 1"));
-                        if(productModel == null){
-                            productModel = new ProductModel();
-                            BeanUtils.copyProperties(productModelExcelDto,productModel);
-                            if(productModelExcelDto.getProductType() == null) {
-                                productModel.setProductType(1);
-                            }
-                            productModel.setProductId(finalProduct.getId());
-                            productModelMapper.insert(productModel);
-                        }else{
-                            BeanUtils.copyProperties(productModelExcelDto,productModel);
-                            productModel.setProductId(finalProduct.getId());
-                            productModelMapper.updateById(productModel);
-                        }
-                    });
+                    ProductModelExcelCopyDto firstDto = dtoList.get(0);
+                    String model = firstDto.getModel();
+
+                    // 3. 鏌ヨ/鏂板浜у搧锛堟寜浜у搧鍚嶇О+鍥剧焊缂栧彿锛屾洿绮惧噯锛�
+                    Product product = getOrCreateProduct(productName, drawingNumber);
+
+                    // 4. 鎵归噺澶勭悊浜у搧鍨嬪彿锛堟寜鍥剧焊缂栧彿+鍨嬪彿锛�
+                    processProductModel(dtoList, product.getId(), model, drawingNumber);
                 }
             }
-//            List<ProductModelExcelDto> productModelExcelDtos = OrderUtils.buildTree(productModelList);
-//            if(CollectionUtils.isNotEmpty(productModelExcelDtos)){
-//                recursiveSaveProduct(productModelExcelDtos.get(0),null);
-//            }
             return true;
         }catch (Exception e) {
             e.printStackTrace();
@@ -166,6 +160,54 @@
     }
 
     /**
+     * 鎶藉彇閫氱敤鏂规硶锛氭煡璇㈡垨鏂板浜у搧
+     */
+    private Product getOrCreateProduct(String productName, String model) {
+        // 绮惧噯鏌ヨ锛氫骇鍝佸悕绉�+鍨嬪彿锛堥伩鍏嶅悓鍚嶄笉鍚屽瀷鍙风殑闂锛�
+        Product product = productMapper.selectOne(new LambdaQueryWrapper<Product>()
+                .eq(Product::getProductName, productName)
+//                .eq(Product::getModel, model)
+                .last("limit 1"));
+
+        if (product == null) {
+            product = new Product();
+            product.setProductName(productName);
+//            product.setModel(model); // 琛ュ厖鍨嬪彿锛屽瓧娈垫洿瀹屾暣
+            product.setParentId(null);
+            productMapper.insert(product);
+        }
+        return product;
+    }
+
+    /**
+     * 鎶藉彇閫氱敤鏂规硶锛氬鐞嗕骇鍝佸瀷鍙凤紙鏂板/鏇存柊锛�
+     */
+    private void processProductModel(List<ProductModelExcelCopyDto> dtoList,
+                                     Long productId, String model, String drawingNumber) {
+        for (ProductModelExcelCopyDto dto : dtoList) {
+            // 鏌ヨ鏉′欢锛氬瀷鍙�+鍥剧焊缂栧彿锛堟洿绮惧噯锛岀鍚堝垎缁勯�昏緫锛�
+            ProductModel productModel = productModelMapper.selectOne(new LambdaQueryWrapper<ProductModel>()
+                    .eq(ProductModel::getModel, model)
+                    .last("limit 1"));
+
+            if (productModel == null) {
+                productModel = new ProductModel();
+                BeanUtils.copyProperties(dto, productModel);
+                // 鍏滃簳榛樿鍊硷紝閬垮厤绌哄��
+                if (productModel.getProductType() == null) {
+                    productModel.setProductType(1);
+                }
+                productModel.setProductId(productId);
+                productModelMapper.insert(productModel);
+            } else {
+                BeanUtils.copyProperties(dto, productModel);
+                productModel.setProductId(productId);
+                productModelMapper.updateById(productModel);
+            }
+        }
+    }
+
+    /**
      * 閫掑綊瀵煎叆鏍戝舰浜у搧鏁版嵁
      * @param excelDto Excel瑙f瀽鍚庣殑鏍戝舰鑺傜偣
      * @param parentId 鐖惰妭鐐笽D锛堥《绾ц妭鐐逛紶null/0锛�

--
Gitblit v1.9.3