From 9f3b274ba9fa0e1637301a7573ac65e979c468a5 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sat, 26 Sep 2026 10:26:21 +0800 Subject: [PATCH] [BUG] CRM/ERP:产品删除无引用校验——被业务单据引用的产品可被直接软删,留下悬空引用 #1242 --- yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessService.java | 8 ++++++++ yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java | 5 +++++ yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractService.java | 8 ++++++++ yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java | 5 +++++ yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/product/CrmProductServiceImpl.java | 18 ++++++++++-------- yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/product/ErpProductServiceImpl.java | 49 +++++++++++++++++++++++++------------------------ yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseInService.java | 10 +++++++++- yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseInServiceImpl.java | 5 +++++ yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseOrderService.java | 10 +++++++++- yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseOrderServiceImpl.java | 5 +++++ yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseReturnService.java | 10 +++++++++- yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseReturnServiceImpl.java | 5 +++++ yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderService.java | 10 +++++++++- yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderServiceImpl.java | 5 +++++ yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOutService.java | 10 +++++++++- yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOutServiceImpl.java | 5 +++++ yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleReturnService.java | 10 +++++++++- yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleReturnServiceImpl.java | 5 +++++ 18 files changed, 145 insertions(+), 38 deletions(-) diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessService.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessService.java index 67a6cf3..7ad4e0e 100644 --- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessService.java +++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessService.java @@ -165,6 +165,14 @@ public interface CrmBusinessService { Long getBusinessCountByCustomerId(Long customerId); /** + * 获得引用指定产品的商机产品数量 + * + * @param productId 产品编号 + * @return 数量 + */ + Long getBusinessProductCountByProductId(Long productId); + + /** * 获得使用指定商机状态组的商机数量 * * @param statusTypeId 商机状态组编号 diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java index 1828558..79f2b0a 100644 --- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java +++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java @@ -376,6 +376,11 @@ public class CrmBusinessServiceImpl implements CrmBusinessService { } @Override + public Long getBusinessProductCountByProductId(Long productId) { + return businessProductMapper.selectCount(CrmBusinessProductDO::getProductId, productId); + } + + @Override public Long getBusinessCountByStatusTypeId(Long statusTypeId) { return businessMapper.selectCountByStatusTypeId(statusTypeId); } diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractService.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractService.java index 0d8964f..e4a6a63 100644 --- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractService.java +++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractService.java @@ -178,6 +178,14 @@ public interface CrmContractService { List getContractProductListByContractId(Long contactId); /** + * 获得引用指定产品的合同产品数量 + * + * @param productId 产品编号 + * @return 数量 + */ + Long getContractProductCountByProductId(Long productId); + + /** * 获得待审核合同数量 * * @param userId 用户编号 diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java index d25d7c0..02b2e87 100644 --- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java +++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java @@ -395,6 +395,11 @@ public class CrmContractServiceImpl implements CrmContractService { } @Override + public Long getContractProductCountByProductId(Long productId) { + return contractProductMapper.selectCount(CrmContractProductDO::getProductId, productId); + } + + @Override public Long getAuditContractCount(Long userId) { return contractMapper.selectCountByAudit(userId); } diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/product/CrmProductServiceImpl.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/product/CrmProductServiceImpl.java index 2629bd6..fbb2b16 100644 --- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/product/CrmProductServiceImpl.java +++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/product/CrmProductServiceImpl.java @@ -5,17 +5,15 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.crm.controller.admin.product.vo.product.CrmProductPageReqVO; import cn.iocoder.yudao.module.crm.controller.admin.product.vo.product.CrmProductSaveReqVO; -import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessProductDO; -import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractProductDO; import cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductCategoryDO; import cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductDO; -import cn.iocoder.yudao.module.crm.dal.mysql.business.CrmBusinessProductMapper; -import cn.iocoder.yudao.module.crm.dal.mysql.contract.CrmContractProductMapper; import cn.iocoder.yudao.module.crm.dal.mysql.product.CrmProductMapper; import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; import cn.iocoder.yudao.module.crm.enums.product.CrmProductStatusEnum; import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission; +import cn.iocoder.yudao.module.crm.service.business.CrmBusinessService; +import cn.iocoder.yudao.module.crm.service.contract.CrmContractService; import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO; import cn.iocoder.yudao.module.system.api.user.AdminUserApi; @@ -23,6 +21,7 @@ import com.mzt.logapi.context.LogRecordContext; import com.mzt.logapi.service.impl.DiffParseFunction; import com.mzt.logapi.starter.annotation.LogRecord; import jakarta.annotation.Resource; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -53,9 +52,11 @@ public class CrmProductServiceImpl implements CrmProductService { @Resource private CrmProductCategoryService productCategoryService; @Resource - private CrmContractProductMapper contractProductMapper; + @Lazy // 延迟加载,避免循环依赖 + private CrmContractService contractService; @Resource - private CrmBusinessProductMapper businessProductMapper; + @Lazy // 延迟加载,避免循环依赖 + private CrmBusinessService businessService; @Resource private CrmPermissionService permissionService; @@ -137,12 +138,13 @@ public class CrmProductServiceImpl implements CrmProductService { // 校验存在 validateProductExists(id); // 校验未被合同/商机引用,避免删除后产生悬空引用 - if (contractProductMapper.selectCount(CrmContractProductDO::getProductId, id) > 0) { + if (contractService.getContractProductCountByProductId(id) > 0) { throw exception(PRODUCT_DELETE_FAIL_CONTRACT_EXISTS); } - if (businessProductMapper.selectCount(CrmBusinessProductDO::getProductId, id) > 0) { + if (businessService.getBusinessProductCountByProductId(id) > 0) { throw exception(PRODUCT_DELETE_FAIL_BUSINESS_EXISTS); } + // 删除 productMapper.deleteById(id); } diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/product/ErpProductServiceImpl.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/product/ErpProductServiceImpl.java index 0193a87..65cb6fa 100644 --- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/product/ErpProductServiceImpl.java +++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/product/ErpProductServiceImpl.java @@ -11,20 +11,15 @@ import cn.iocoder.yudao.module.erp.controller.admin.product.vo.product.ProductSa import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductCategoryDO; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductUnitDO; -import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpPurchaseInItemDO; -import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpPurchaseOrderItemDO; -import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpPurchaseReturnItemDO; -import cn.iocoder.yudao.module.erp.dal.dataobject.sale.ErpSaleOrderItemDO; -import cn.iocoder.yudao.module.erp.dal.dataobject.sale.ErpSaleOutItemDO; -import cn.iocoder.yudao.module.erp.dal.dataobject.sale.ErpSaleReturnItemDO; import cn.iocoder.yudao.module.erp.dal.mysql.product.ErpProductMapper; -import cn.iocoder.yudao.module.erp.dal.mysql.purchase.ErpPurchaseInItemMapper; -import cn.iocoder.yudao.module.erp.dal.mysql.purchase.ErpPurchaseOrderItemMapper; -import cn.iocoder.yudao.module.erp.dal.mysql.purchase.ErpPurchaseReturnItemMapper; -import cn.iocoder.yudao.module.erp.dal.mysql.sale.ErpSaleOrderItemMapper; -import cn.iocoder.yudao.module.erp.dal.mysql.sale.ErpSaleOutItemMapper; -import cn.iocoder.yudao.module.erp.dal.mysql.sale.ErpSaleReturnItemMapper; +import cn.iocoder.yudao.module.erp.service.purchase.ErpPurchaseInService; +import cn.iocoder.yudao.module.erp.service.purchase.ErpPurchaseOrderService; +import cn.iocoder.yudao.module.erp.service.purchase.ErpPurchaseReturnService; +import cn.iocoder.yudao.module.erp.service.sale.ErpSaleOrderService; +import cn.iocoder.yudao.module.erp.service.sale.ErpSaleOutService; +import cn.iocoder.yudao.module.erp.service.sale.ErpSaleReturnService; import jakarta.annotation.Resource; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -51,17 +46,23 @@ public class ErpProductServiceImpl implements ErpProductService { @Resource private ErpProductUnitService productUnitService; @Resource - private ErpPurchaseOrderItemMapper purchaseOrderItemMapper; + @Lazy // 延迟加载,避免循环依赖 + private ErpPurchaseOrderService purchaseOrderService; @Resource - private ErpPurchaseInItemMapper purchaseInItemMapper; + @Lazy // 延迟加载,避免循环依赖 + private ErpPurchaseInService purchaseInService; @Resource - private ErpPurchaseReturnItemMapper purchaseReturnItemMapper; + @Lazy // 延迟加载,避免循环依赖 + private ErpPurchaseReturnService purchaseReturnService; @Resource - private ErpSaleOrderItemMapper saleOrderItemMapper; + @Lazy // 延迟加载,避免循环依赖 + private ErpSaleOrderService saleOrderService; @Resource - private ErpSaleOutItemMapper saleOutItemMapper; + @Lazy // 延迟加载,避免循环依赖 + private ErpSaleOutService saleOutService; @Resource - private ErpSaleReturnItemMapper saleReturnItemMapper; + @Lazy // 延迟加载,避免循环依赖 + private ErpSaleReturnService saleReturnService; @Override public Long createProduct(ProductSaveReqVO createReqVO) { @@ -88,22 +89,22 @@ public class ErpProductServiceImpl implements ErpProductService { // 校验存在 validateProductExists(id); // 校验未被任何业务单据明细引用,避免删除后产生悬空引用 - if (purchaseOrderItemMapper.selectCount(ErpPurchaseOrderItemDO::getProductId, id) > 0) { + if (purchaseOrderService.getPurchaseOrderItemCountByProductId(id) > 0) { throw exception(PRODUCT_DELETE_FAIL_PURCHASE_ORDER_EXISTS); } - if (purchaseInItemMapper.selectCount(ErpPurchaseInItemDO::getProductId, id) > 0) { + if (purchaseInService.getPurchaseInItemCountByProductId(id) > 0) { throw exception(PRODUCT_DELETE_FAIL_PURCHASE_IN_EXISTS); } - if (purchaseReturnItemMapper.selectCount(ErpPurchaseReturnItemDO::getProductId, id) > 0) { + if (purchaseReturnService.getPurchaseReturnItemCountByProductId(id) > 0) { throw exception(PRODUCT_DELETE_FAIL_PURCHASE_RETURN_EXISTS); } - if (saleOrderItemMapper.selectCount(ErpSaleOrderItemDO::getProductId, id) > 0) { + if (saleOrderService.getSaleOrderItemCountByProductId(id) > 0) { throw exception(PRODUCT_DELETE_FAIL_SALE_ORDER_EXISTS); } - if (saleOutItemMapper.selectCount(ErpSaleOutItemDO::getProductId, id) > 0) { + if (saleOutService.getSaleOutItemCountByProductId(id) > 0) { throw exception(PRODUCT_DELETE_FAIL_SALE_OUT_EXISTS); } - if (saleReturnItemMapper.selectCount(ErpSaleReturnItemDO::getProductId, id) > 0) { + if (saleReturnService.getSaleReturnItemCountByProductId(id) > 0) { throw exception(PRODUCT_DELETE_FAIL_SALE_RETURN_EXISTS); } // 删除 diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseInService.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseInService.java index 37aa452..19b3233 100644 --- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseInService.java +++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseInService.java @@ -98,4 +98,12 @@ public interface ErpPurchaseInService { */ List getPurchaseInItemListByInIds(Collection inIds); -} \ No newline at end of file + /** + * 获得引用指定产品的采购入库项数量 + * + * @param productId 产品编号 + * @return 数量 + */ + Long getPurchaseInItemCountByProductId(Long productId); + +} diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseInServiceImpl.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseInServiceImpl.java index 9bf1d23..620aeb0 100644 --- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseInServiceImpl.java +++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseInServiceImpl.java @@ -323,4 +323,9 @@ public class ErpPurchaseInServiceImpl implements ErpPurchaseInService { return purchaseInItemMapper.selectListByInIds(inIds); } + @Override + public Long getPurchaseInItemCountByProductId(Long productId) { + return purchaseInItemMapper.selectCount(ErpPurchaseInItemDO::getProductId, productId); + } + } diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseOrderService.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseOrderService.java index bfea076..6fbfcab 100644 --- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseOrderService.java +++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseOrderService.java @@ -107,4 +107,12 @@ public interface ErpPurchaseOrderService { */ List getPurchaseOrderItemListByOrderIds(Collection orderIds); -} \ No newline at end of file + /** + * 获得引用指定产品的采购订单项数量 + * + * @param productId 产品编号 + * @return 数量 + */ + Long getPurchaseOrderItemCountByProductId(Long productId); + +} diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseOrderServiceImpl.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseOrderServiceImpl.java index b93ca55..881367f 100644 --- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseOrderServiceImpl.java +++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseOrderServiceImpl.java @@ -292,4 +292,9 @@ public class ErpPurchaseOrderServiceImpl implements ErpPurchaseOrderService { return purchaseOrderItemMapper.selectListByOrderIds(orderIds); } + @Override + public Long getPurchaseOrderItemCountByProductId(Long productId) { + return purchaseOrderItemMapper.selectCount(ErpPurchaseOrderItemDO::getProductId, productId); + } + } diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseReturnService.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseReturnService.java index b6826fa..7fa944d 100644 --- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseReturnService.java +++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseReturnService.java @@ -98,4 +98,12 @@ public interface ErpPurchaseReturnService { */ List getPurchaseReturnItemListByReturnIds(Collection returnIds); -} \ No newline at end of file + /** + * 获得引用指定产品的采购退货项数量 + * + * @param productId 产品编号 + * @return 数量 + */ + Long getPurchaseReturnItemCountByProductId(Long productId); + +} diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseReturnServiceImpl.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseReturnServiceImpl.java index 18fe5ce..79601a4 100644 --- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseReturnServiceImpl.java +++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseReturnServiceImpl.java @@ -301,4 +301,9 @@ public class ErpPurchaseReturnServiceImpl implements ErpPurchaseReturnService { return purchaseReturnItemMapper.selectListByReturnIds(returnIds); } + @Override + public Long getPurchaseReturnItemCountByProductId(Long productId) { + return purchaseReturnItemMapper.selectCount(ErpPurchaseReturnItemDO::getProductId, productId); + } + } diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderService.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderService.java index c75f201..d61313c 100644 --- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderService.java +++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderService.java @@ -107,4 +107,12 @@ public interface ErpSaleOrderService { */ List getSaleOrderItemListByOrderIds(Collection orderIds); -} \ No newline at end of file + /** + * 获得引用指定产品的销售订单项数量 + * + * @param productId 产品编号 + * @return 数量 + */ + Long getSaleOrderItemCountByProductId(Long productId); + +} diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderServiceImpl.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderServiceImpl.java index 0edd206..7eff07a 100644 --- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderServiceImpl.java +++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderServiceImpl.java @@ -304,4 +304,9 @@ public class ErpSaleOrderServiceImpl implements ErpSaleOrderService { return saleOrderItemMapper.selectListByOrderIds(orderIds); } + @Override + public Long getSaleOrderItemCountByProductId(Long productId) { + return saleOrderItemMapper.selectCount(ErpSaleOrderItemDO::getProductId, productId); + } + } diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOutService.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOutService.java index 616f778..eeaf9c8 100644 --- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOutService.java +++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOutService.java @@ -99,4 +99,12 @@ public interface ErpSaleOutService { List getSaleOutItemListByOutIds(Collection outIds); -} \ No newline at end of file + /** + * 获得引用指定产品的销售出库项数量 + * + * @param productId 产品编号 + * @return 数量 + */ + Long getSaleOutItemCountByProductId(Long productId); + +} diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOutServiceImpl.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOutServiceImpl.java index f8af202..9d9a21e 100644 --- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOutServiceImpl.java +++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOutServiceImpl.java @@ -313,4 +313,9 @@ public class ErpSaleOutServiceImpl implements ErpSaleOutService { return saleOutItemMapper.selectListByOutIds(outIds); } + @Override + public Long getSaleOutItemCountByProductId(Long productId) { + return saleOutItemMapper.selectCount(ErpSaleOutItemDO::getProductId, productId); + } + } diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleReturnService.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleReturnService.java index bc192a1..faea4d7 100644 --- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleReturnService.java +++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleReturnService.java @@ -98,4 +98,12 @@ public interface ErpSaleReturnService { */ List getSaleReturnItemListByReturnIds(Collection returnIds); -} \ No newline at end of file + /** + * 获得引用指定产品的销售退货项数量 + * + * @param productId 产品编号 + * @return 数量 + */ + Long getSaleReturnItemCountByProductId(Long productId); + +} diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleReturnServiceImpl.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleReturnServiceImpl.java index 6b3976c..27543f4 100644 --- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleReturnServiceImpl.java +++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleReturnServiceImpl.java @@ -313,4 +313,9 @@ public class ErpSaleReturnServiceImpl implements ErpSaleReturnService { return saleReturnItemMapper.selectListByReturnIds(returnIds); } + @Override + public Long getSaleReturnItemCountByProductId(Long productId) { + return saleReturnItemMapper.selectCount(ErpSaleReturnItemDO::getProductId, productId); + } + } -- libgit2 0.21.4