mirror of
https://gitee.com/yudaocode/yudao-boot-mini.git
synced 2026-10-06 14:13:14 +08:00
fix(erp):A39修正——inCount展示只统计已审核,超订单数量校验单独统计全部入库单(含未审核)
原A39修复把 selectListByOrderId 过滤成只查已审核,导致同方法内的超订单数量校验 (inCount>count 抛错)也只算已审核——未审核的超额入库单不再触发拦截,ERP-22 复验时 超额入库被误放行(回归)。现拆成两条口径:inCount 展示用已审核(反审核自然回退), 超量校验用新增 selectListAllByOrderId 查全部入库单,二者互不影响。
This commit is contained in:
+6
@@ -71,4 +71,10 @@ public interface ErpPurchaseInMapper extends BaseMapperX<ErpPurchaseInDO> {
|
||||
.eq(ErpPurchaseInDO::getStatus, ErpAuditStatus.APPROVE.getStatus()));
|
||||
}
|
||||
|
||||
default List<ErpPurchaseInDO> selectListAllByOrderId(Long orderId) {
|
||||
// 超订单数量校验需要统计「全部」入库单(含未审核):未审核入库单同样占用订单可入库额度
|
||||
return selectList(new LambdaQueryWrapper<ErpPurchaseInDO>()
|
||||
.eq(ErpPurchaseInDO::getOrderId, orderId));
|
||||
}
|
||||
|
||||
}
|
||||
+20
-7
@@ -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<ErpPurchaseInDO> purchaseIns = purchaseInMapper.selectListByOrderId(orderId);
|
||||
// 1.2 查询对应的采购订单项的入库数量
|
||||
Map<Long, BigDecimal> returnCountMap = purchaseInItemMapper.selectOrderItemCountSumMapByInIds(
|
||||
convertList(purchaseIns, ErpPurchaseInDO::getId));
|
||||
// 2. 更新采购订单的入库数量
|
||||
purchaseOrderService.updatePurchaseOrderInCount(orderId, returnCountMap);
|
||||
// 1.1 查询「已审核」采购入库单:入库进度(inCount 展示)只统计已审核的入库单,反审核后自然回退
|
||||
List<ErpPurchaseInDO> approvedIns = purchaseInMapper.selectListByOrderId(orderId);
|
||||
Map<Long, BigDecimal> inCountMap = purchaseInItemMapper.selectOrderItemCountSumMapByInIds(
|
||||
convertList(approvedIns, ErpPurchaseInDO::getId));
|
||||
// 1.2 查询「全部」采购入库单(含未审核):超订单数量校验需统计全部入库单,未审核入库单同样占用可入库额度
|
||||
List<ErpPurchaseInDO> allIns = purchaseInMapper.selectListAllByOrderId(orderId);
|
||||
Map<Long, BigDecimal> allCountMap = purchaseInItemMapper.selectOrderItemCountSumMapByInIds(
|
||||
convertList(allIns, ErpPurchaseInDO::getId));
|
||||
// 2. 超订单数量校验:全部入库单(含未审核)数量之和不得超过采购订单项数量
|
||||
List<ErpPurchaseOrderItemDO> 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
|
||||
|
||||
Reference in New Issue
Block a user