From 320f03d434299518324e6b9de60a6156b4ca280d Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期日, 13 九月 2026 14:46:29 +0800
Subject: [PATCH] fix: 添加型号缓存以避免重复导入相同产品型号
---
src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java | 43 +++++++++++++++++++++++++++++++++----------
1 files changed, 33 insertions(+), 10 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 bd46fb4..cb0c373 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
@@ -51,7 +51,7 @@
private final TechnologyBomMapper technologyBomMapper;
private ProductModelMapper productModelMapper;
- private static final List<String> IMPORT_SHEET_NAMES = Arrays.asList("鍘熸枡", "鍗婃垚鍝�", "鎴愬搧");
+ private static final List<String> IMPORT_SHEET_NAMES = Arrays.asList("鍘熸潗鏂�", "鍘熸枡", "鍗婃垚鍝�", "鎴愬搧");
@Override
public int addOrEditProductModel(ProductModelDto productModelDto) {
@@ -156,29 +156,38 @@
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;
String parentName = trimToNull(row.getProductParentName());
String categoryName = trimToNull(row.getProductCategoryName());
String productName = trimToNull(row.getProductName());
- if (categoryName == null) {
- throw new ServiceException("绗� " + rowNum + " 琛� [浜у搧澶х被] 涓嶈兘涓虹┖");
- }
if (productName == null) {
throw new ServiceException("绗� " + rowNum + " 琛� [浜у搧鍚嶇О] 涓嶈兘涓虹┖");
}
String path = String.valueOf(topId);
- Long parentNodeId = topId;
+ Long currentParentId = topId;
if (parentName != null) {
path = path + ">" + parentName;
- parentNodeId = ensureChildNode(nodeCache, path, parentNodeId, parentName);
+ currentParentId = ensureChildNode(nodeCache, path, currentParentId, parentName);
}
- path = path + ">" + categoryName;
- Long categoryId = ensureChildNode(nodeCache, path, parentNodeId, categoryName);
+ if (categoryName != null) {
+ path = path + ">" + categoryName;
+ currentParentId = ensureChildNode(nodeCache, path, currentParentId, categoryName);
+ }
path = path + ">" + productName;
- Long leafId = ensureChildNode(nodeCache, path, categoryId, 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) {
@@ -193,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++;
@@ -253,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