From e67591225157d936c8576c61bb368c2fd2a10886 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sat, 26 Sep 2026 10:18:04 +0800 Subject: [PATCH] [BUG] ERP:采购入库单反审批后订单入库进度不回退——inCount 汇总不按审核状态过滤 --- yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/purchase/ErpPurchaseInMapper.java | 13 +++++-------- yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseInServiceImpl.java | 16 +++++++++------- 2 files changed, 14 insertions(+), 15 deletions(-) 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 6de4579..3fce4db 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 @@ -65,16 +65,13 @@ public interface ErpPurchaseInMapper extends BaseMapperX { } default List selectListByOrderId(Long orderId) { - // 入库进度只统计「已审核」的入库单:未审核/已反审核的入库单不计入订单 inCount(反审核后自然回退) - return selectList(new LambdaQueryWrapper() - .eq(ErpPurchaseInDO::getOrderId, orderId) - .eq(ErpPurchaseInDO::getStatus, ErpAuditStatus.APPROVE.getStatus())); + return selectList(ErpPurchaseInDO::getOrderId, orderId); } - default List selectListAllByOrderId(Long orderId) { - // 超订单数量校验需要统计「全部」入库单(含未审核):未审核入库单同样占用订单可入库额度 + default List selectListByOrderIdAndStatus(Long orderId, Integer status) { return selectList(new LambdaQueryWrapper() - .eq(ErpPurchaseInDO::getOrderId, orderId)); + .eq(ErpPurchaseInDO::getOrderId, orderId) + .eq(ErpPurchaseInDO::getStatus, status)); } -} \ 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 deede89..9bf1d23 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 @@ -145,15 +145,16 @@ public class ErpPurchaseInServiceImpl implements ErpPurchaseInService { } private void updatePurchaseOrderInCount(Long orderId) { - // 1.1 查询「已审核」采购入库单:入库进度(inCount 展示)只统计已审核的入库单,反审核后自然回退 - List approvedIns = purchaseInMapper.selectListByOrderId(orderId); + // 1.1 查询已审核入库单,计算入库进度 + List approvedIns = purchaseInMapper.selectListByOrderIdAndStatus( + orderId, ErpAuditStatus.APPROVE.getStatus()); Map inCountMap = purchaseInItemMapper.selectOrderItemCountSumMapByInIds( convertList(approvedIns, ErpPurchaseInDO::getId)); - // 1.2 查询「全部」采购入库单(含未审核):超订单数量校验需统计全部入库单,未审核入库单同样占用可入库额度 - List allIns = purchaseInMapper.selectListAllByOrderId(orderId); + // 1.2 查询全部入库单,计算占用数量 + List allIns = purchaseInMapper.selectListByOrderId(orderId); Map allCountMap = purchaseInItemMapper.selectOrderItemCountSumMapByInIds( convertList(allIns, ErpPurchaseInDO::getId)); - // 2. 超订单数量校验:全部入库单(含未审核)数量之和不得超过采购订单项数量 + // 1.3 校验全部入库数量未超过采购订单项数量 List orderItems = purchaseOrderService.getPurchaseOrderItemListByOrderId(orderId); for (ErpPurchaseOrderItemDO item : orderItems) { BigDecimal allCount = allCountMap.getOrDefault(item.getId(), BigDecimal.ZERO); @@ -162,7 +163,8 @@ public class ErpPurchaseInServiceImpl implements ErpPurchaseInService { productService.getProduct(item.getProductId()).getName(), item.getCount()); } } - // 3. 更新采购订单的入库数量(inCount 展示 = 已审核) + + // 2. 更新采购订单的入库数量 purchaseOrderService.updatePurchaseOrderInCount(orderId, inCountMap); } @@ -199,7 +201,7 @@ public class ErpPurchaseInServiceImpl implements ErpPurchaseInService { bizType, purchaseInItem.getInId(), purchaseInItem.getId(), purchaseIn.getNo())); }); - // 4. 状态变更后重算采购订单入库进度(反审核的入库单不再计入,inCount 自然回退) + // 4. 更新采购订单的入库数量 updatePurchaseOrderInCount(purchaseIn.getOrderId()); } -- libgit2 0.21.4