PC上架数量修改
This commit is contained in:
+39
-13
@@ -1033,7 +1033,8 @@ public class StockShelfOrderApplicationService {
|
||||
//未进行上架直接跳过
|
||||
continue;
|
||||
}
|
||||
BigDecimal actualQuantity = BigDecimal.ZERO;//当前作业上架数
|
||||
BigDecimal mainItemActualQuantity = shelvesQuantity;//主项本次上架数(不含子项)
|
||||
BigDecimal childrenActualQuantity = BigDecimal.ZERO;//子项本次上架总数
|
||||
// PDA 权重/体积/面积:记录“本次增量”
|
||||
BigDecimal netIncrement = BigDecimal.ZERO;
|
||||
BigDecimal grossIncrement = BigDecimal.ZERO;
|
||||
@@ -1047,8 +1048,7 @@ public class StockShelfOrderApplicationService {
|
||||
// setContainerInfo(shelfMaterialDetailDO);
|
||||
//上架后 设置该记录不允许被修改
|
||||
shelfMaterialDetailDO.setAllowModify(2);
|
||||
//未上过架 统计到当前收货单作业收货数
|
||||
actualQuantity = shelfMaterialDetailDO.getShelvesQuantity();
|
||||
// 未上过架:主项本次上架数量已由 shelvesQuantity 表示
|
||||
}
|
||||
//判断是否存在子项
|
||||
List<ShelfMaterialDetailDO> returnShelfMaterialDetailDOChildList = new ArrayList<>();
|
||||
@@ -1058,7 +1058,7 @@ public class StockShelfOrderApplicationService {
|
||||
// 从而 alreadyShelvesQuantity 不累计(覆盖问题的根因)。
|
||||
// 当没有子项时,actualQuantity 应直接等于本次上架数量 shelvesQuantity。
|
||||
if (CollectionUtils.isEmpty(shelfMaterialDetailDOChildList)) {
|
||||
actualQuantity = shelvesQuantity;
|
||||
mainItemActualQuantity = shelvesQuantity;
|
||||
if (fromApp) {
|
||||
// 若本次未上架数量(shelvesQuantity=0),则不允许用 PDA 提交的重量更新累计值
|
||||
// 否则会出现:数量仍为 0,但 total_* 已经被累加到计划值 => pending 全 0
|
||||
@@ -1100,11 +1100,16 @@ public class StockShelfOrderApplicationService {
|
||||
areaIncrement = areaIncrement.add(childAreaInc);
|
||||
}
|
||||
if (shelfMaterialDetailPOChildDb != null){
|
||||
// 子项已存在:累加上架数量,并加入返回列表供 batchShelfUpdate 更新(与收货一致,避免重复提交/漏更新)
|
||||
actualQuantity = actualQuantity.add(childShelvesQty);
|
||||
// 子项已存在:仅累计到子项总量,不能并到主项累计
|
||||
childrenActualQuantity = childrenActualQuantity.add(childShelvesQty);
|
||||
ShelfMaterialDetailDO returnShelfMaterialDetailDOChild = new ShelfMaterialDetailDO();
|
||||
BeanUtils.copyProperties(shelfMaterialDetailPOChildDb, returnShelfMaterialDetailDOChild);
|
||||
BeanUtils.copyProperties(shelfMaterialDetailDOChild, returnShelfMaterialDetailDOChild, IgnoreNullUtil.getNullPropertyNames(shelfMaterialDetailDOChild));
|
||||
BigDecimal childDbAlreadyQty = shelfMaterialDetailPOChildDb.getAlreadyShelvesQuantity() != null
|
||||
? shelfMaterialDetailPOChildDb.getAlreadyShelvesQuantity()
|
||||
: BigDecimal.ZERO;
|
||||
// PC:already_shelves_quantity 使用本次上架量;PDA 保持累计口径
|
||||
returnShelfMaterialDetailDOChild.setAlreadyShelvesQuantity(fromApp ? childDbAlreadyQty.add(childShelvesQty) : childShelvesQty);
|
||||
if (fromApp) {
|
||||
// 子项已存在:total* 回传的是“本次增量”,需要累加到已有 already(并不超过计划)
|
||||
// oldAlready:优先用 DB 的累计值 total_*。
|
||||
@@ -1177,6 +1182,8 @@ public class StockShelfOrderApplicationService {
|
||||
returnShelfMaterialDetailDOChild.setAllowModify(2);
|
||||
returnShelfMaterialDetailDOChild.setLevel(2);
|
||||
returnShelfMaterialDetailDOChild.setParentUniqueId(shelfMaterialDetailPO.getUniqueId());
|
||||
// 子项不维护独立计划数量,计划量仅由主项承载
|
||||
returnShelfMaterialDetailDOChild.setQuantity(null);
|
||||
returnShelfMaterialDetailDOChild.setActualQuantity(childShelvesQty);
|
||||
returnShelfMaterialDetailDOChildList.add(returnShelfMaterialDetailDOChild);
|
||||
continue;
|
||||
@@ -1232,6 +1239,8 @@ public class StockShelfOrderApplicationService {
|
||||
returnShelfMaterialDetailDOChild.setUniqueId(idGenerator.snowflakeId(SnowFlakeConstants.wmsId));
|
||||
returnShelfMaterialDetailDOChild.setLevel(2);
|
||||
returnShelfMaterialDetailDOChild.setParentUniqueId(shelfMaterialDetailPO.getUniqueId());
|
||||
// 子项不维护独立计划数量,计划量仅由主项承载
|
||||
returnShelfMaterialDetailDOChild.setQuantity(null);
|
||||
if (shelfMaterialDetailPO.getSerialNumberManage() == 1){
|
||||
if (CollectionUtils.isEmpty(shelfMaterialDetailPO.getMaterialDetailSerialNumberList())){
|
||||
throw new ServiceException("物料【" + shelfMaterialDetailPO.getMaterialName() + "】开启了序列号管理的序列号不能为空");
|
||||
@@ -1239,12 +1248,15 @@ public class StockShelfOrderApplicationService {
|
||||
}
|
||||
returnShelfMaterialDetailDOChild.setMaterialDetailSerialNumberList(shelfMaterialDetailDO.getMaterialDetailSerialNumberList());
|
||||
returnShelfMaterialDetailDOChild.setActualQuantity(returnShelfMaterialDetailDOChild.getShelvesQuantity());
|
||||
returnShelfMaterialDetailDOChild.setAlreadyShelvesQuantity(childShelvesQty);
|
||||
returnShelfMaterialDetailDOChildList.add(returnShelfMaterialDetailDOChild);
|
||||
actualQuantity = actualQuantity.add(returnShelfMaterialDetailDOChild.getShelvesQuantity());
|
||||
childrenActualQuantity = childrenActualQuantity.add(returnShelfMaterialDetailDOChild.getShelvesQuantity());
|
||||
}
|
||||
}
|
||||
//现在已上架数量=之前已上架数量+现在作业数量
|
||||
shelfMaterialDetailDO.setAlreadyShelvesQuantity(shelfMaterialDetailPO.getAlreadyShelvesQuantity().add(actualQuantity));
|
||||
BigDecimal dbParentAlready = shelfMaterialDetailPO.getAlreadyShelvesQuantity() != null
|
||||
? shelfMaterialDetailPO.getAlreadyShelvesQuantity() : BigDecimal.ZERO;
|
||||
// PC:already_shelves_quantity 使用本次上架量;PDA 保持累计口径
|
||||
shelfMaterialDetailDO.setAlreadyShelvesQuantity(fromApp ? dbParentAlready.add(mainItemActualQuantity) : mainItemActualQuantity);
|
||||
if (fromApp) {
|
||||
// 父项:total* 回传的是“本次增量”,需要累加到已有 already(并不超过计划)
|
||||
// oldAlready:优先用 DB 的累计值 total_*。
|
||||
@@ -1297,11 +1309,25 @@ public class StockShelfOrderApplicationService {
|
||||
shelfMaterialDetailDO.setTotalVolume(newAlreadyVol);
|
||||
shelfMaterialDetailDO.setTotalArea(newAlreadyArea);
|
||||
}
|
||||
//记录本次上架单上架总数
|
||||
totalActualQuantity = totalActualQuantity.add(actualQuantity);
|
||||
//判断上架数量是否大于计划数量
|
||||
Integer shelvesStatus = judgeShelfQuantity(shelfMaterialDetailDO.getAlreadyShelvesQuantity(), shelfMaterialDetailPO.getQuantity());
|
||||
// 记录本次上架单上架总数:主项 + 子项(与收货口径一致)
|
||||
totalActualQuantity = totalActualQuantity.add(mainItemActualQuantity.add(childrenActualQuantity));
|
||||
// 主项上架状态按「主项 + 子项」组内累计与主项计划比较(子项不单独维护计划量)
|
||||
BigDecimal groupShelved = shelfMaterialDetailDO.getAlreadyShelvesQuantity() != null
|
||||
? shelfMaterialDetailDO.getAlreadyShelvesQuantity() : BigDecimal.ZERO;
|
||||
if (!CollectionUtils.isEmpty(returnShelfMaterialDetailDOChildList)) {
|
||||
for (ShelfMaterialDetailDO ch : returnShelfMaterialDetailDOChildList) {
|
||||
BigDecimal childAlready = ch.getAlreadyShelvesQuantity() != null ? ch.getAlreadyShelvesQuantity() : BigDecimal.ZERO;
|
||||
groupShelved = groupShelved.add(childAlready);
|
||||
}
|
||||
}
|
||||
Integer shelvesStatus = judgeShelfQuantity(groupShelved, shelfMaterialDetailPO.getQuantity());
|
||||
shelfMaterialDetailDO.setShelvesStatus(shelvesStatus);
|
||||
// 子项状态与所属主项一致(主子共用主项计划量)
|
||||
if (!CollectionUtils.isEmpty(returnShelfMaterialDetailDOChildList)) {
|
||||
for (ShelfMaterialDetailDO ch : returnShelfMaterialDetailDOChildList) {
|
||||
ch.setShelvesStatus(shelvesStatus);
|
||||
}
|
||||
}
|
||||
if (shelvesStatus > 2){
|
||||
totalActualShelfMaterialQuantity += 1;
|
||||
}
|
||||
|
||||
+28
-4
@@ -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);
|
||||
// PDA(fromApp=true)累加已有上架数量;PC 直接覆盖
|
||||
BigDecimal orderIncrementQuantity = stockShelfOrderDO.getActualQuantity() != null ? stockShelfOrderDO.getActualQuantity() : BigDecimal.ZERO;
|
||||
// PDA(fromApp=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-已入
|
||||
|
||||
Reference in New Issue
Block a user