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