Commit e67591225157d936c8576c61bb368c2fd2a10886

Authored by YunaiV
1 parent 60206ea6

[BUG] ERP:采购入库单反审批后订单入库进度不回退——inCount 汇总不按审核状态过滤

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<ErpPurchaseInDO> {
65 65 }
66 66  
67 67 default List<ErpPurchaseInDO> selectListByOrderId(Long orderId) {
68   - // 入库进度只统计「已审核」的入库单:未审核/已反审核的入库单不计入订单 inCount(反审核后自然回退)
69   - return selectList(new LambdaQueryWrapper<ErpPurchaseInDO>()
70   - .eq(ErpPurchaseInDO::getOrderId, orderId)
71   - .eq(ErpPurchaseInDO::getStatus, ErpAuditStatus.APPROVE.getStatus()));
  68 + return selectList(ErpPurchaseInDO::getOrderId, orderId);
72 69 }
73 70  
74   - default List<ErpPurchaseInDO> selectListAllByOrderId(Long orderId) {
75   - // 超订单数量校验需要统计「全部」入库单(含未审核):未审核入库单同样占用订单可入库额度
  71 + default List<ErpPurchaseInDO> selectListByOrderIdAndStatus(Long orderId, Integer status) {
76 72 return selectList(new LambdaQueryWrapper<ErpPurchaseInDO>()
77   - .eq(ErpPurchaseInDO::getOrderId, orderId));
  73 + .eq(ErpPurchaseInDO::getOrderId, orderId)
  74 + .eq(ErpPurchaseInDO::getStatus, status));
78 75 }
79 76  
80   -}
81 77 \ No newline at end of file
  78 +}
... ...
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseInServiceImpl.java
... ... @@ -145,15 +145,16 @@ public class ErpPurchaseInServiceImpl implements ErpPurchaseInService {
145 145 }
146 146  
147 147 private void updatePurchaseOrderInCount(Long orderId) {
148   - // 1.1 查询「已审核」采购入库单:入库进度(inCount 展示)只统计已审核的入库单,反审核后自然回退
149   - List<ErpPurchaseInDO> approvedIns = purchaseInMapper.selectListByOrderId(orderId);
  148 + // 1.1 查询已审核入库单,计算入库进度
  149 + List<ErpPurchaseInDO> approvedIns = purchaseInMapper.selectListByOrderIdAndStatus(
  150 + orderId, ErpAuditStatus.APPROVE.getStatus());
150 151 Map<Long, BigDecimal> inCountMap = purchaseInItemMapper.selectOrderItemCountSumMapByInIds(
151 152 convertList(approvedIns, ErpPurchaseInDO::getId));
152   - // 1.2 查询「全部」采购入库单(含未审核):超订单数量校验需统计全部入库单,未审核入库单同样占用可入库额度
153   - List<ErpPurchaseInDO> allIns = purchaseInMapper.selectListAllByOrderId(orderId);
  153 + // 1.2 查询全部入库单,计算占用数量
  154 + List<ErpPurchaseInDO> allIns = purchaseInMapper.selectListByOrderId(orderId);
154 155 Map<Long, BigDecimal> allCountMap = purchaseInItemMapper.selectOrderItemCountSumMapByInIds(
155 156 convertList(allIns, ErpPurchaseInDO::getId));
156   - // 2. 超订单数量校验:全部入库单(含未审核)数量之和不得超过采购订单项数量
  157 + // 1.3 校验全部入库数量未超过采购订单项数量
157 158 List<ErpPurchaseOrderItemDO> orderItems = purchaseOrderService.getPurchaseOrderItemListByOrderId(orderId);
158 159 for (ErpPurchaseOrderItemDO item : orderItems) {
159 160 BigDecimal allCount = allCountMap.getOrDefault(item.getId(), BigDecimal.ZERO);
... ... @@ -162,7 +163,8 @@ public class ErpPurchaseInServiceImpl implements ErpPurchaseInService {
162 163 productService.getProduct(item.getProductId()).getName(), item.getCount());
163 164 }
164 165 }
165   - // 3. 更新采购订单的入库数量(inCount 展示 = 已审核)
  166 +
  167 + // 2. 更新采购订单的入库数量
166 168 purchaseOrderService.updatePurchaseOrderInCount(orderId, inCountMap);
167 169 }
168 170  
... ... @@ -199,7 +201,7 @@ public class ErpPurchaseInServiceImpl implements ErpPurchaseInService {
199 201 bizType, purchaseInItem.getInId(), purchaseInItem.getId(), purchaseIn.getNo()));
200 202 });
201 203  
202   - // 4. 状态变更后重算采购订单入库进度(反审核的入库单不再计入,inCount 自然回退)
  204 + // 4. 更新采购订单的入库数量
203 205 updatePurchaseOrderInCount(purchaseIn.getOrderId());
204 206 }
205 207  
... ...