yuan
2 天以前 775262c1dd192df3450c1bcf7c66b74d75e9dc9f
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);