Browse Source

refactor(inventory): 重构库存移动服务中的托盘验证逻辑

- 将validateHandlingUnits方法重命名为validateHandlingUnitsForPallet
- 新增专门的托盘验证方法,包含完整的业务逻辑
- 添加对HandlingUnit是否存在及site匹配的校验
- 增加对库存状态的检查,确保只有在库的HandlingUnit才能移动
- 实现安全的迭代器方式删除符合条件的HandlingUnit
- 当目标库位与当前库位相同时,跳过该HandlingUnit的处理
master
常熟吴彦祖 1 month ago
parent
commit
ef2a1eb960
  1. 31
      src/main/java/com/gaotao/modules/other/service/impl/InventoryMoveServiceImpl.java

31
src/main/java/com/gaotao/modules/other/service/impl/InventoryMoveServiceImpl.java

@ -105,7 +105,7 @@ public class InventoryMoveServiceImpl implements InventoryMoveService {
try {
// 2. 验证HandlingUnit
List<HandlingUnit> handlingUnits = validateHandlingUnits(dto);
List<HandlingUnit> handlingUnits = validateHandlingUnitsForPallet(dto);
// 3. 先保存原库位信息用于IFS同步然后处理每个HandlingUnit
Map<String, String> originalLocations = new HashMap<>();
@ -247,6 +247,35 @@ public class InventoryMoveServiceImpl implements InventoryMoveService {
return handlingUnits;
}
private List<HandlingUnit> validateHandlingUnitsForPallet(InventoryMoveRequestDto dto) {
List<HandlingUnit> handlingUnits = handlingUnitService.lambdaQuery()
.eq(HandlingUnit::getSite, dto.getSite())
.in(HandlingUnit::getUnitId, dto.getHandlingUnitIds())
.list();
if (handlingUnits.size() != dto.getHandlingUnitIds().size()) {
throw new XJException("部分HandlingUnit不存在或site不匹配");
}
// 使用 Iterator 安全地遍历并删除
Iterator<HandlingUnit> iterator = handlingUnits.iterator();
while (iterator.hasNext()) {
HandlingUnit hu = iterator.next();
// 校验是否在库
if (!"Y".equals(hu.getInStockFlag())) {
throw new XJException("HandlingUnit不在库,无法移库: " + hu.getUnitId());
}
// 如果目标库位和当前库位相同跳过从列表中移除
if (dto.getTargetLocationId().equals(hu.getLocationId())) {
iterator.remove(); // 安全删除
}
}
return handlingUnits;
}
/**
* 批量同步到IFS - 按sitepartNolocationNolotBatchNo合并后调用
*/

Loading…
Cancel
Save