src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -22,7 +22,6 @@ import com.ruoyi.basic.pojo.Product; import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.basic.pojo.SupplierManage; import com.ruoyi.basic.service.IProductService; import com.ruoyi.basic.utils.FileUtil; import com.ruoyi.common.enums.ApprovalStatusEnum; import com.ruoyi.common.enums.ReviewStatusEnum; @@ -104,7 +103,6 @@ private final SupplierManageMapper supplierManageMapper; private final ProductMapper productMapper; private final ProductModelMapper productModelMapper; private final IProductService productService; private final SysUserMapper sysUserMapper; private final StringRedisTemplate redisTemplate; private final QualityInspectMapper qualityInspectMapper; @@ -633,11 +631,6 @@ } Integer ledgerType = type == null ? 2 : type; // 手工录入「品名+材质+规格型号」时,自动注册到产品维护 for (SalesLedgerProduct product : products) { registerProductFromLedgerProduct(product); } // 提前收集所有需要查询的ID Set<Long> productIds = products.stream() .map(SalesLedgerProduct::getProductId) @@ -665,11 +658,6 @@ // 设置字段 for (SalesLedgerProduct product : products) { product.setSalesLedgerId(salesLedgerId); // 手工录入品名/材质/规格型号的行已在注册时写入,不再用产品树节点名称覆盖 if (StringUtils.isNotEmpty(product.getMaterial())) { continue; } Long productId = product.getProductId(); if (productId != null && productMap.containsKey(productId)) { @@ -719,28 +707,6 @@ if (salesLedgerId != null) { // 直接更新指定ID的记录的contractAmount字段为totalTaxInclusiveAmount purchaseLedgerMapper.updateContractAmountById(salesLedgerId, totalTaxInclusiveAmount); } } /** * 手工录入「品名+材质+规格型号」时,在产品维护自动注册: * 品名=一级大类,材质=大类下的子类,规格型号=子类下的规格 */ 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)) { return; } product.setProductCategory(productName); product.setMaterial(material); product.setSpecificationModel(modelName); ProductModel productModel = productService.ensureProductHierarchy(productName, material, modelName, product.getUnit()); if (productModel != null) { product.setProductId(productModel.getProductId()); product.setProductModelId(productModel.getId()); } } src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -183,8 +183,8 @@ @Transactional(rollbackFor = Exception.class) public int addOrUpdateSalesLedgerProduct(SalesLedgerProduct salesLedgerProduct) { // 采购台账(type=2)手工录入品名/材质/规格型号时,自动注册到产品维护 if (Integer.valueOf(2).equals(salesLedgerProduct.getType()) // 销售台账(type=1)手工录入品名/材质/规格型号时,自动注册到产品维护 if (Integer.valueOf(1).equals(salesLedgerProduct.getType()) && StringUtils.isNotBlank(salesLedgerProduct.getMaterial())) { ProductModel productModel = productService.ensureProductHierarchy( salesLedgerProduct.getProductCategory(), src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -18,6 +18,8 @@ import com.ruoyi.basic.mapper.ProductMapper; import com.ruoyi.basic.mapper.ProductModelMapper; import com.ruoyi.basic.pojo.Customer; import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.basic.service.IProductService; import com.ruoyi.basic.utils.FileUtil; import com.ruoyi.common.enums.FileNameType; import com.ruoyi.common.enums.SaleEnum; @@ -106,6 +108,7 @@ private final FileUtil fileUtil; private final AccountInvoiceApplicationMapper accountInvoiceApplicationMapper; private final AccountSalesCollectionMapper accountSalesCollectionMapper; private final IProductService productService; @Autowired private SysDeptMapper sysDeptMapper; @@ -610,6 +613,13 @@ @Override public void handleSalesLedgerProducts(Long salesLedgerId, List<SalesLedgerProduct> products, SaleEnum type) { // 销售台账手工录入「品名+材质+规格型号」时,自动注册到产品维护 if (SaleEnum.SALE.equals(type)) { for (SalesLedgerProduct product : products) { registerProductFromLedgerProduct(product); } } // 按ID分组,区分新增和更新的记录 Map<Boolean, List<SalesLedgerProduct>> partitionedProducts = products.stream() .peek(p -> p.setSalesLedgerId(salesLedgerId)) @@ -636,6 +646,28 @@ } } /** * 手工录入「品名+材质+规格型号」时,在产品维护自动注册: * 品名=一级大类,材质=大类下的子类,规格型号=子类下的规格 */ 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)) { return; } product.setProductCategory(productName); product.setMaterial(material); product.setSpecificationModel(modelName); ProductModel productModel = productService.ensureProductHierarchy(productName, material, modelName, product.getUnit()); if (productModel != null) { product.setProductId(productModel.getProductId()); product.setProductModelId(productModel.getId()); } } private SalesLedger convertToEntity(SalesLedgerDto dto) { SalesLedger entity = new SalesLedger(); BeanUtils.copyProperties(dto, entity);