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,16 +65,13 @@ public interface ErpPurchaseInMapper extends BaseMapperX<ErpPurchaseInDO> {
65 } 65 }
66 66
67 default List<ErpPurchaseInDO> selectListByOrderId(Long orderId) { 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 return selectList(new LambdaQueryWrapper<ErpPurchaseInDO>() 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 \ No newline at end of file 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,15 +145,16 @@ public class ErpPurchaseInServiceImpl implements ErpPurchaseInService {
145 } 145 }
146 146
147 private void updatePurchaseOrderInCount(Long orderId) { 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 Map<Long, BigDecimal> inCountMap = purchaseInItemMapper.selectOrderItemCountSumMapByInIds( 151 Map<Long, BigDecimal> inCountMap = purchaseInItemMapper.selectOrderItemCountSumMapByInIds(
151 convertList(approvedIns, ErpPurchaseInDO::getId)); 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 Map<Long, BigDecimal> allCountMap = purchaseInItemMapper.selectOrderItemCountSumMapByInIds( 155 Map<Long, BigDecimal> allCountMap = purchaseInItemMapper.selectOrderItemCountSumMapByInIds(
155 convertList(allIns, ErpPurchaseInDO::getId)); 156 convertList(allIns, ErpPurchaseInDO::getId));
156 - // 2. 超订单数量校验:全部入库单(含未审核)数量之和不得超过采购订单项数量 157 + // 1.3 校验全部入库数量未超过采购订单项数量
157 List<ErpPurchaseOrderItemDO> orderItems = purchaseOrderService.getPurchaseOrderItemListByOrderId(orderId); 158 List<ErpPurchaseOrderItemDO> orderItems = purchaseOrderService.getPurchaseOrderItemListByOrderId(orderId);
158 for (ErpPurchaseOrderItemDO item : orderItems) { 159 for (ErpPurchaseOrderItemDO item : orderItems) {
159 BigDecimal allCount = allCountMap.getOrDefault(item.getId(), BigDecimal.ZERO); 160 BigDecimal allCount = allCountMap.getOrDefault(item.getId(), BigDecimal.ZERO);
@@ -162,7 +163,8 @@ public class ErpPurchaseInServiceImpl implements ErpPurchaseInService { @@ -162,7 +163,8 @@ public class ErpPurchaseInServiceImpl implements ErpPurchaseInService {
162 productService.getProduct(item.getProductId()).getName(), item.getCount()); 163 productService.getProduct(item.getProductId()).getName(), item.getCount());
163 } 164 }
164 } 165 }
165 - // 3. 更新采购订单的入库数量(inCount 展示 = 已审核) 166 +
  167 + // 2. 更新采购订单的入库数量
166 purchaseOrderService.updatePurchaseOrderInCount(orderId, inCountMap); 168 purchaseOrderService.updatePurchaseOrderInCount(orderId, inCountMap);
167 } 169 }
168 170
@@ -199,7 +201,7 @@ public class ErpPurchaseInServiceImpl implements ErpPurchaseInService { @@ -199,7 +201,7 @@ public class ErpPurchaseInServiceImpl implements ErpPurchaseInService {
199 bizType, purchaseInItem.getInId(), purchaseInItem.getId(), purchaseIn.getNo())); 201 bizType, purchaseInItem.getInId(), purchaseInItem.getId(), purchaseIn.getNo()));
200 }); 202 });
201 203
202 - // 4. 状态变更后重算采购订单入库进度(反审核的入库单不再计入,inCount 自然回退) 204 + // 4. 更新采购订单的入库数量
203 updatePurchaseOrderInCount(purchaseIn.getOrderId()); 205 updatePurchaseOrderInCount(purchaseIn.getOrderId());
204 } 206 }
205 207