diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/purchase/ErpPurchaseInMapper.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/purchase/ErpPurchaseInMapper.java index d39fec8..6de4579 100644 --- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/purchase/ErpPurchaseInMapper.java +++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/purchase/ErpPurchaseInMapper.java @@ -71,4 +71,10 @@ public interface ErpPurchaseInMapper extends BaseMapperX { .eq(ErpPurchaseInDO::getStatus, ErpAuditStatus.APPROVE.getStatus())); } + default List selectListAllByOrderId(Long orderId) { + // 超订单数量校验需要统计「全部」入库单(含未审核):未审核入库单同样占用订单可入库额度 + return selectList(new LambdaQueryWrapper() + .eq(ErpPurchaseInDO::getOrderId, orderId)); + } + } \ No newline at end of file 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 5a4b0bf..deede89 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 @@ -11,6 +11,7 @@ import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO; import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpPurchaseInDO; import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpPurchaseInItemDO; import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpPurchaseOrderDO; +import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpPurchaseOrderItemDO; import cn.iocoder.yudao.module.erp.dal.mysql.purchase.ErpPurchaseInItemMapper; import cn.iocoder.yudao.module.erp.dal.mysql.purchase.ErpPurchaseInMapper; import cn.iocoder.yudao.module.erp.dal.redis.no.ErpNoRedisDAO; @@ -144,13 +145,25 @@ public class ErpPurchaseInServiceImpl implements ErpPurchaseInService { } private void updatePurchaseOrderInCount(Long orderId) { - // 1.1 查询采购订单对应的采购入库单列表 - List purchaseIns = purchaseInMapper.selectListByOrderId(orderId); - // 1.2 查询对应的采购订单项的入库数量 - Map returnCountMap = purchaseInItemMapper.selectOrderItemCountSumMapByInIds( - convertList(purchaseIns, ErpPurchaseInDO::getId)); - // 2. 更新采购订单的入库数量 - purchaseOrderService.updatePurchaseOrderInCount(orderId, returnCountMap); + // 1.1 查询「已审核」采购入库单:入库进度(inCount 展示)只统计已审核的入库单,反审核后自然回退 + List approvedIns = purchaseInMapper.selectListByOrderId(orderId); + Map inCountMap = purchaseInItemMapper.selectOrderItemCountSumMapByInIds( + convertList(approvedIns, ErpPurchaseInDO::getId)); + // 1.2 查询「全部」采购入库单(含未审核):超订单数量校验需统计全部入库单,未审核入库单同样占用可入库额度 + List allIns = purchaseInMapper.selectListAllByOrderId(orderId); + Map allCountMap = purchaseInItemMapper.selectOrderItemCountSumMapByInIds( + convertList(allIns, ErpPurchaseInDO::getId)); + // 2. 超订单数量校验:全部入库单(含未审核)数量之和不得超过采购订单项数量 + List orderItems = purchaseOrderService.getPurchaseOrderItemListByOrderId(orderId); + for (ErpPurchaseOrderItemDO item : orderItems) { + BigDecimal allCount = allCountMap.getOrDefault(item.getId(), BigDecimal.ZERO); + if (allCount.compareTo(item.getCount()) > 0) { + throw exception(PURCHASE_ORDER_ITEM_IN_FAIL_PRODUCT_EXCEED, + productService.getProduct(item.getProductId()).getName(), item.getCount()); + } + } + // 3. 更新采购订单的入库数量(inCount 展示 = 已审核) + purchaseOrderService.updatePurchaseOrderInCount(orderId, inCountMap); } @Override