yuan
9 小时以前 775262c1dd192df3450c1bcf7c66b74d75e9dc9f
fix: 添加型号缓存以避免重复导入相同产品型号
已修改1个文件
26 ■■■■■ 文件已修改
src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);