From 775262c1dd192df3450c1bcf7c66b74d75e9dc9f Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期日, 13 九月 2026 14:44:47 +0800
Subject: [PATCH] fix: 添加型号缓存以避免重复导入相同产品型号

---
 src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java |   26 +++++++++++++++++++++++++-
 1 files changed, 25 insertions(+), 1 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 cf2e3d9..cb0c373 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
@@ -156,6 +156,7 @@
             Long topId = findOrCreateTopProduct(sheetName);
             Map<String, Long> nodeCache = new HashMap<>();
             Map<Long, Set<String>> codeCache = new HashMap<>();
+            Map<Long, Set<String>> modelCache = new HashMap<>();
             for (int i = 0; i < rows.size(); i++) {
                 ProductImportRowDto row = rows.get(i);
                 int rowNum = i + 2;
@@ -179,6 +180,15 @@
                 path = path + ">" + productName;
                 Long leafId = ensureChildNode(nodeCache, path, currentParentId, productName);
 
+                String model = StringUtils.isEmpty(row.getModel()) ? "/" : row.getModel().trim();
+
+                // 鍚屼竴浜у搧涓嬪悕绉帮紙浜у搧鑺傜偣锛�+ 鍨嬪彿鐩稿悓鍒欒烦杩�
+                Set<String> models = modelCache.computeIfAbsent(leafId, this::loadProductModels);
+                if (!models.add(model)) {
+                    skipCount++;
+                    continue;
+                }
+
                 String code = trimToNull(row.getProductCode());
                 if (code == null) {
                     code = generateUniqueCode(generatedCodes);
@@ -192,7 +202,7 @@
                 ProductModel productModel = new ProductModel();
                 productModel.setProductId(leafId);
                 productModel.setProductCode(code);
-                productModel.setModel(StringUtils.isEmpty(row.getModel()) ? "/" : row.getModel().trim());
+                productModel.setModel(model);
                 productModel.setUnit(trimToNull(row.getUnit()));
                 productModelMapper.insert(productModel);
                 successCount++;
@@ -252,6 +262,20 @@
         return codes;
     }
 
+    private Set<String> loadProductModels(Long productId) {
+        List<ProductModel> list = productModelMapper.selectList(new LambdaQueryWrapper<ProductModel>()
+                .eq(ProductModel::getProductId, productId));
+        Set<String> models = new HashSet<>();
+        for (ProductModel productModel : list) {
+            if (StringUtils.isEmpty(productModel.getModel())) {
+                models.add("/");
+            } else {
+                models.add(productModel.getModel().trim());
+            }
+        }
+        return models;
+    }
+
     private String generateUniqueCode(Set<String> generatedCodes) {
         for (int i = 0; i < 200; i++) {
             String code = randomCode(5);

--
Gitblit v1.9.3