PC上架数量修改

This commit is contained in:
秦鸿展
2026-04-01 15:05:19 +08:00
parent 04875e1715
commit f83b9c8756
2 changed files with 67 additions and 17 deletions
@@ -542,11 +542,15 @@ public class StockShelfOrderDomainService {
stockShelfOrder.setShelfOrderId(stockShelfOrderDO.getShelfOrderId());
stockShelfOrder.setStatus(2);
BigDecimal currentShelvesQuantity = stockShelfOrderPO.getShelvesQuantity() != null ? stockShelfOrderPO.getShelvesQuantity() : BigDecimal.ZERO;
BigDecimal actualQuantity = stockShelfOrderDO.getActualQuantity() != null ? stockShelfOrderDO.getActualQuantity() : BigDecimal.ZERO;
BigDecimal reduce = stockShelfOrderDO.getMaterialDetailList().stream().map(ShelfMaterialDetailDO::getShelvesQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
// PDAfromApp=true)累加已有上架数量;PC 直接覆盖
BigDecimal orderIncrementQuantity = stockShelfOrderDO.getActualQuantity() != null ? stockShelfOrderDO.getActualQuantity() : BigDecimal.ZERO;
// PDAfromApp=true):本单本次作业量 = assembleParamByShelf 汇总的 actualQuantity(含主行+子行),累加到单头
// PC:单头「上架数量」= 各明细累计已上架数量之和(递归含子行),不可仅顶层 shelvesQuantity 汇总,否则子行数量漏计、统计与完成判断错误
boolean fromApp = Boolean.TRUE.equals(stockShelfOrderDO.getFromApp());
stockShelfOrder.setShelvesQuantity(fromApp ? currentShelvesQuantity.add(reduce) : reduce);
if (fromApp) {
stockShelfOrder.setShelvesQuantity(currentShelvesQuantity.add(orderIncrementQuantity));
} else {
stockShelfOrder.setShelvesQuantity(sumShelfDetailAlreadyShelvesQuantityRecursive(stockShelfOrderDO.getMaterialDetailList()));
}
stockShelfOrder.setShelvesMaterialQuantity(stockShelfOrderPO.getShelvesMaterialQuantity() + stockShelfOrderDO.getActualReceiptMaterialQuantity());
stockShelfOrder.setUpdateBy(loginUser.getUserid());
stockShelfOrder.setUpdateByName(loginUser.getUsername());
@@ -560,6 +564,26 @@ public class StockShelfOrderDomainService {
return true;
}
/**
* 递归汇总上架明细的累计已上架数量(主行 + 子行),用于 PC 端写入上架单头 shelves_quantity。
*/
private BigDecimal sumShelfDetailAlreadyShelvesQuantityRecursive(List<ShelfMaterialDetailDO> list) {
if (CollectionUtils.isEmpty(list)) {
return BigDecimal.ZERO;
}
BigDecimal sum = BigDecimal.ZERO;
for (ShelfMaterialDetailDO d : list) {
if (d == null) {
continue;
}
if (d.getAlreadyShelvesQuantity() != null) {
sum = sum.add(d.getAlreadyShelvesQuantity());
}
sum = sum.add(sumShelfDetailAlreadyShelvesQuantityRecursive(d.getChildren()));
}
return sum;
}
/**
* @param stockShelfOrderPO
* @param status 入库状态: 1-已创建 2-已审核 3-收货中 4-上架中 5-已入