gaoluyang
2 天以前 23ec64ed997fc206fba9f0d6a84975f7b36c47be
天津-奇缘恒艺
录数据需求修改
已修改5个文件
67 ■■■■■ 文件已修改
src/main/java/com/ruoyi/basic/service/IProductService.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/basic/service/IProductService.java
@@ -22,9 +22,9 @@
    IPage<ProductModelVo> listPageProductModel(Page<ProductModelVo> page, ProductModel productModel);
    /**
     * 台账手工录入品名/材质/规格型号时,自动注册产品大类(品名)-子类(材质)-规格型号,已存在则复用
     * 台账手工录入产品大类/规格型号时,统一注册到「成品」大类下:成品-产品大类-规格型号,已存在则复用
     *
     * @return 规格型号记录,未注册时返回 null
     */
    ProductModel ensureProductHierarchy(String productName, String material, String modelName, String unit);
    ProductModel ensureProductHierarchy(String productName, String modelName, String unit);
}
src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java
@@ -172,49 +172,51 @@
        return deleteCount;
    }
    /** 台账手工录入的产品大类/规格型号统一挂到这个大类下 */
    private static final String TOP_CATEGORY_NAME = "成品";
    @Override
    public ProductModel ensureProductHierarchy(String productName, String material, String modelName, String unit) {
    public ProductModel ensureProductHierarchy(String productName, String modelName, String unit) {
        productName = StringUtils.trim(productName);
        material = StringUtils.trim(material);
        modelName = StringUtils.trim(modelName);
        if (StringUtils.isEmpty(productName) || StringUtils.isEmpty(material) || StringUtils.isEmpty(modelName)) {
        if (StringUtils.isEmpty(productName) || StringUtils.isEmpty(modelName)) {
            return null;
        }
        // 品名:一级大类(parentId 为空)
        // 一级大类:固定「成品」(不存在则建)
        LambdaQueryWrapper<Product> categoryWrapper = new LambdaQueryWrapper<>();
        categoryWrapper.isNull(Product::getParentId)
                .eq(Product::getProductName, productName)
                .eq(Product::getProductName, TOP_CATEGORY_NAME)
                .last("limit 1");
        Product category = productMapper.selectOne(categoryWrapper);
        if (category == null) {
            category = new Product();
            category.setProductName(productName);
            category.setProductName(TOP_CATEGORY_NAME);
            productMapper.insert(category);
        }
        // 材质:大类下的子类
        LambdaQueryWrapper<Product> materialWrapper = new LambdaQueryWrapper<>();
        materialWrapper.eq(Product::getParentId, category.getId())
                .eq(Product::getProductName, material)
        // 二级:产品大类(成品下的子类)
        LambdaQueryWrapper<Product> nameWrapper = new LambdaQueryWrapper<>();
        nameWrapper.eq(Product::getParentId, category.getId())
                .eq(Product::getProductName, productName)
                .last("limit 1");
        Product materialProduct = productMapper.selectOne(materialWrapper);
        if (materialProduct == null) {
            materialProduct = new Product();
            materialProduct.setParentId(category.getId());
            materialProduct.setProductName(material);
            productMapper.insert(materialProduct);
        Product nameProduct = productMapper.selectOne(nameWrapper);
        if (nameProduct == null) {
            nameProduct = new Product();
            nameProduct.setParentId(category.getId());
            nameProduct.setProductName(productName);
            productMapper.insert(nameProduct);
        }
        // 规格型号:子类下的规格
        // 三级:规格型号(产品大类下的规格)
        LambdaQueryWrapper<ProductModel> modelWrapper = new LambdaQueryWrapper<>();
        modelWrapper.eq(ProductModel::getProductId, materialProduct.getId())
        modelWrapper.eq(ProductModel::getProductId, nameProduct.getId())
                .eq(ProductModel::getModel, modelName)
                .last("limit 1");
        ProductModel productModel = productModelMapper.selectOne(modelWrapper);
        if (productModel == null) {
            productModel = new ProductModel();
            productModel.setProductId(materialProduct.getId());
            productModel.setProductId(nameProduct.getId());
            productModel.setModel(modelName);
            productModel.setUnit(unit);
            productModelMapper.insert(productModel);
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -44,15 +44,14 @@
    private BigDecimal warnNum;
    /**
     * 产品大类(品名)
     * 产品大类
     */
    @Excel(name = "产品大类")
    private String productCategory;
    /**
     * 材质
     * 材质(已废弃:台账不再录入,保留该列以兼容历史数据)
     */
    @Excel(name = "材质")
    private String material;
    /**
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -183,12 +183,10 @@
    @Transactional(rollbackFor = Exception.class)
    public int addOrUpdateSalesLedgerProduct(SalesLedgerProduct salesLedgerProduct) {
        // 销售台账(type=1)手工录入品名/材质/规格型号时,自动注册到产品维护
        if (Integer.valueOf(1).equals(salesLedgerProduct.getType())
                && StringUtils.isNotBlank(salesLedgerProduct.getMaterial())) {
        // 销售台账(type=1)手工录入产品大类/规格型号时,自动注册到产品维护(统一挂「成品」大类下)
        if (Integer.valueOf(1).equals(salesLedgerProduct.getType())) {
            ProductModel productModel = productService.ensureProductHierarchy(
                    salesLedgerProduct.getProductCategory(),
                    salesLedgerProduct.getMaterial(),
                    salesLedgerProduct.getSpecificationModel(),
                    salesLedgerProduct.getUnit());
            if (productModel != null) {
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -613,7 +613,7 @@
    @Override
    public void handleSalesLedgerProducts(Long salesLedgerId, List<SalesLedgerProduct> products, SaleEnum type) {
        // 销售台账手工录入「品名+材质+规格型号」时,自动注册到产品维护
        // 销售台账手工录入「产品大类+规格型号」时,自动注册到产品维护(统一挂「成品」大类下)
        if (SaleEnum.SALE.equals(type)) {
            for (SalesLedgerProduct product : products) {
                registerProductFromLedgerProduct(product);
@@ -647,21 +647,19 @@
    }
    /**
     * 手工录入「品名+材质+规格型号」时,在产品维护自动注册:
     * 品名=一级大类,材质=大类下的子类,规格型号=子类下的规格
     * 手工录入「产品大类+规格型号」时,在产品维护自动注册:
     * 统一挂在「成品」大类下 —— 成品=一级大类,产品大类=子类,规格型号=子类下的规格
     */
    private void registerProductFromLedgerProduct(SalesLedgerProduct product) {
        String productName = StringUtils.trim(product.getProductCategory());
        String material = StringUtils.trim(product.getMaterial());
        String modelName = StringUtils.trim(product.getSpecificationModel());
        if (StringUtils.isEmpty(productName) || StringUtils.isEmpty(material) || StringUtils.isEmpty(modelName)) {
        if (StringUtils.isEmpty(productName) || StringUtils.isEmpty(modelName)) {
            return;
        }
        product.setProductCategory(productName);
        product.setMaterial(material);
        product.setSpecificationModel(modelName);
        ProductModel productModel = productService.ensureProductHierarchy(productName, material, modelName, product.getUnit());
        ProductModel productModel = productService.ensureProductHierarchy(productName, modelName, product.getUnit());
        if (productModel != null) {
            product.setProductId(productModel.getProductId());
            product.setProductModelId(productModel.getId());