fix(oms):入库链路计划数量翻倍修复

明细batchUpdate软删条件缺陷(入/出库共6个明细实现类):软删旧明细要求本次提交
   至少一行走更新分支,"删光旧物料全部换新物料"时提交列表全为新增行,旧行漏软删
   (del_flag仍=1),下发后执行单计划数量=旧+新叠加。改为库内有明细即对账软删
This commit is contained in:
rcx
2026-08-20 14:45:13 +08:00
parent ff2b1965f7
commit 33d085f9b9
6 changed files with 30 additions and 12 deletions
@@ -260,8 +260,11 @@ public class ExecutionInMaterialDetailImpl extends ServiceImpl<ExecutionInMateri
}
inMaterialDetailList.add(inMaterialDetail);
}
//需修改的物料明细id集合不为空
if (!CollectionUtils.isEmpty(inMaterialDetailDbList) && !CollectionUtils.isEmpty(materialDetailIdsByUpdate)){
// 库内存在有效明细即做对账软删:提交列表未覆盖的库内行视为用户已删除。
// 修复:此前还要求 materialDetailIdsByUpdate 非空(至少一行走更新分支),
// "删光旧物料全部换新物料"时该集合为空,旧行漏软删(del_flag仍=1)
// 下发后计划数量=旧+新叠加。removeAll(空列表)为安全no-op
if (!CollectionUtils.isEmpty(inMaterialDetailDbList)){
List<Long> materialDetailIdsByDb = inMaterialDetailDbList.stream().map(ExecutionInMaterialDetail::getMaterialDetailId).collect(Collectors.toList());
//过滤需要修改的id集合
materialDetailIdsByDb.removeAll(materialDetailIdsByUpdate);
@@ -217,8 +217,11 @@ public class ExecutionOutMaterialDetailImpl extends ServiceImpl<ExecutionOutMate
}
outMaterialDetailList.add(outMaterialDetail);
}
//需修改的物料明细id集合不为空
if (!CollectionUtils.isEmpty(materialDetailIdsByUpdate)){
// 库内存在明细即做对账软删:提交列表未覆盖的库内行视为用户已删除。
// 修复:此前要求 materialDetailIdsByUpdate 非空(至少一行走更新分支),
// "删光旧物料全部换新物料"时该集合为空,旧行漏软删(del_flag仍=1)
// 下发后计划数量=旧+新叠加。removeAll(空列表)为安全no-op
if (!CollectionUtils.isEmpty(outMaterialDetailDbList)){
List<Long> materialDetailIdsByDb = outMaterialDetailDbList.stream().map(ExecutionOutMaterialDetail::getMaterialDetailId).collect(Collectors.toList());
//过滤需要修改的id集合
materialDetailIdsByDb.removeAll(materialDetailIdsByUpdate);
@@ -256,8 +256,11 @@ public class ReservationInMaterialDetailImpl extends ServiceImpl<ReservationInMa
}
inMaterialDetailList.add(inMaterialDetail);
}
//需修改的物料明细id集合不为空
if (!CollectionUtils.isEmpty(inMaterialDetailDbList) && !CollectionUtils.isEmpty(materialDetailIdsByUpdate)){
// 库内存在有效明细即做对账软删:提交列表未覆盖的库内行视为用户已删除。
// 修复:此前还要求 materialDetailIdsByUpdate 非空(至少一行走更新分支),
// "删光旧物料全部换新物料"时该集合为空,旧行漏软删(del_flag仍=1)
// 下发后执行单计划数量=旧+新叠加。removeAll(空列表)为安全no-op
if (!CollectionUtils.isEmpty(inMaterialDetailDbList)){
List<Long> materialDetailIdsByDb = inMaterialDetailDbList.stream().map(ReservationInMaterialDetail::getMaterialDetailId).collect(Collectors.toList());
//过滤需要修改的id集合
materialDetailIdsByDb.removeAll(materialDetailIdsByUpdate);
@@ -221,8 +221,11 @@ public class ReservationOutMaterialDetailImpl extends ServiceImpl<ReservationOut
}
outMaterialDetailList.add(outMaterialDetail);
}
//需修改的物料明细id集合不为空
if (!CollectionUtils.isEmpty(materialDetailIdsByUpdate)){
// 库内存在明细即做对账软删:提交列表未覆盖的库内行视为用户已删除。
// 修复:此前要求 materialDetailIdsByUpdate 非空(至少一行走更新分支),
// "删光旧物料全部换新物料"时该集合为空,旧行漏软删(del_flag仍=1)
// 下发后计划数量=旧+新叠加。removeAll(空列表)为安全no-op
if (!CollectionUtils.isEmpty(outMaterialDetailDbList)){
List<Long> materialDetailIdsByDb = outMaterialDetailDbList.stream().map(ReservationOutMaterialDetail::getMaterialDetailId).collect(Collectors.toList());
//过滤需要修改的id集合
materialDetailIdsByDb.removeAll(materialDetailIdsByUpdate);
@@ -261,8 +261,11 @@ public class ReserveInMaterialDetailImpl extends ServiceImpl<ReserveInMaterialDe
}
inMaterialDetailList.add(inMaterialDetail);
}
//需修改的物料明细id集合不为空
if (!CollectionUtils.isEmpty(inMaterialDetailDbList) && !CollectionUtils.isEmpty(materialDetailIdsByUpdate)){
// 库内存在有效明细即做对账软删:提交列表未覆盖的库内行视为用户已删除。
// 修复:此前还要求 materialDetailIdsByUpdate 非空(至少一行走更新分支),
// "删光旧物料全部换新物料"时该集合为空,旧行漏软删(del_flag仍=1)
// 下发后计划数量=旧+新叠加。removeAll(空列表)为安全no-op
if (!CollectionUtils.isEmpty(inMaterialDetailDbList)){
List<Long> materialDetailIdsByDb = inMaterialDetailDbList.stream().map(ReserveInMaterialDetail::getMaterialDetailId).collect(Collectors.toList());
//过滤需要修改的id集合
materialDetailIdsByDb.removeAll(materialDetailIdsByUpdate);
@@ -223,8 +223,11 @@ public class ReserveOutMaterialDetailImpl extends ServiceImpl<ReserveOutMaterial
}
outMaterialDetailList.add(outMaterialDetail);
}
//需修改的物料明细id集合不为空
if (!CollectionUtils.isEmpty(materialDetailIdsByUpdate)){
// 库内存在明细即做对账软删:提交列表未覆盖的库内行视为用户已删除。
// 修复:此前要求 materialDetailIdsByUpdate 非空(至少一行走更新分支),
// "删光旧物料全部换新物料"时该集合为空,旧行漏软删(del_flag仍=1)
// 下发后计划数量=旧+新叠加。removeAll(空列表)为安全no-op
if (!CollectionUtils.isEmpty(outMaterialDetailDbList)){
List<Long> materialDetailIdsByDb = outMaterialDetailDbList.stream().map(ReserveOutMaterialDetail::getMaterialDetailId).collect(Collectors.toList());
//过滤需要修改的id集合
materialDetailIdsByDb.removeAll(materialDetailIdsByUpdate);