diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InventoryController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InventoryController.java index e177bfbb..d8c57492 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InventoryController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InventoryController.java @@ -65,7 +65,6 @@ public class InventoryController extends BaseController { /** * 库存查看 - * * @param request 请求参数 */ @PostMapping("search") @@ -75,7 +74,6 @@ public class InventoryController extends BaseController { /** * 发起库存检测任务 - * * @param request 库存检测申请参数 */ @PostMapping("detection/apply") @@ -86,7 +84,6 @@ public class InventoryController extends BaseController { /** * 保存库存盘点任务 - * * @param request 请求参数 */ @PostMapping("check/save") @@ -97,7 +94,6 @@ public class InventoryController extends BaseController { /** * 查询库存盘点任务 - * * @param request 请求参数 */ @PostMapping("check/search") @@ -107,7 +103,6 @@ public class InventoryController extends BaseController { /** * 获取库存盘点任务库存地点列表 - * * @param id 任务ID * @return 库存地点列表 */ @@ -137,7 +132,6 @@ public class InventoryController extends BaseController { /** * 发布库存盘点任务 - * * @param id 任务id */ @PostMapping("check/publish") @@ -148,7 +142,6 @@ public class InventoryController extends BaseController { /** * 删除库存盘点任务 - * * @param id ID */ @PostMapping("check/delete") @@ -167,7 +160,6 @@ public class InventoryController extends BaseController { /** * 盘点任务扫码(PDA使用) - * * @param request 请求参数 */ @PostMapping("check/scan") @@ -208,7 +200,6 @@ public class InventoryController extends BaseController { /** * 批量保存盘点结果(PDA使用) - * * @param request 请求参数 */ @PostMapping("check/saveScan") @@ -284,7 +275,6 @@ public class InventoryController extends BaseController { /** * 查看盘点结果 - * * @param request 请求参数 */ @PostMapping("check/getMaterials") @@ -294,7 +284,6 @@ public class InventoryController extends BaseController { /** * 查询物料扫码记录 - * * @param materialId 物料记录id * @return 扫码记录列表 */ @@ -305,7 +294,6 @@ public class InventoryController extends BaseController { /** * 获取推荐出库批次信息 - * * @param qo 请求参数 */ @PostMapping("getForOut") @@ -314,33 +302,46 @@ public class InventoryController extends BaseController { , qo.getItems().stream().map(InventoryForOutItemQO::getMaterialNo).collect(Collectors.toSet()) ); List vos = new ArrayList<>(); - qo.getItems().forEach(item -> { - InventoryForOutVO vo = new InventoryForOutVO() - .setMaterialNo(item.getMaterialNo()) - .setItems(new ArrayList<>()); - List mis = inventories.stream() - .filter(inventory -> StrUtil.equals(inventory.getMaterialNo(), item.getMaterialNo())) - .toList(); - if (CollectionUtil.isNotEmpty(mis)) { - BigDecimal num = item.getNum(); - for (WmsInventory inventory : mis) { - InventoryForOutItemQO mqo=qo.getItems().stream() - .filter(q -> StrUtil.equals(q.getMaterialNo(), inventory.getMaterialNo())) - .findFirst() - .get(); - if (StrUtil.isNotBlank(mqo.getBinNo()) && !StrUtil.equals(mqo.getBinNo(), inventory.getBinLocation())){ - continue; + qo.getItems() + .forEach(item -> { + if (StrUtil.isBlank(item.getMaterialNo())) { + return; } - BigDecimal outNum = NumberUtil.min(num, inventory.getNum()); - vo.getItems().add(new InventoryForOutItemVO(inventory.getBatchNo(), inventory.getSerialNo(), inventory.getBinLocation(), outNum)); - num = num.subtract(outNum); - if (num.compareTo(BigDecimal.ZERO) == 0) { - break; + InventoryForOutVO vo = new InventoryForOutVO() + .setMaterialNo(item.getMaterialNo()) + .setItems(new ArrayList<>()); + // 优先分配库位匹配的库存 + List binMatched = inventories.stream() + .filter(inventory -> StrUtil.equals(inventory.getMaterialNo(), item.getMaterialNo()) + && StrUtil.equals(inventory.getBinLocation(), item.getBinNo())) + .toList(); + getForOut(vo, binMatched, inventories, item); + // 库位匹配不足时,使用同物料的其他库存补足 + if (item.getNum().compareTo(BigDecimal.ZERO) > 0) { + List materialMatched = inventories.stream() + .filter(inventory -> StrUtil.equals(inventory.getMaterialNo(), item.getMaterialNo())) + .toList(); + getForOut(vo, materialMatched, inventories, item); } - } - vos.add(vo); - } - }); + if (CollectionUtil.isNotEmpty(vo.getItems())) { + vos.add(vo); + } + }); return ApiResult.success(vos); } -} + + private void getForOut(InventoryForOutVO vo, List candidates, List inventories, InventoryForOutItemQO item) { + for (WmsInventory inventory : candidates) { + if (item.getNum().compareTo(BigDecimal.ZERO) == 0) { + break; + } + BigDecimal outNum = NumberUtil.min(item.getNum(), inventory.getNum()); + vo.getItems().add(new InventoryForOutItemVO(inventory.getBatchNo(), inventory.getSerialNo(), inventory.getBinLocation(), outNum)); + item.setNum(item.getNum().subtract(outNum)); + inventory.setNum(inventory.getNum().subtract(outNum)); + if (inventory.getNum().compareTo(BigDecimal.ZERO) == 0) { + inventories.remove(inventory); + } + } + } +} \ No newline at end of file