refactor(inventory): 优化库存盘点和出库逻辑
- 移除控制器方法注释中的多余空行 - 重构库存出库推荐逻辑,优先分配库位匹配的库存 - 添加物料编号为空时的验证检查 - 实现库位匹配不足时使用同物料其他库存补足机制 - 提取库存分配逻辑到独立的私有方法中 - 优化库存数量计算和更新流程
This commit is contained in:
parent
c6fb4c27d3
commit
cde1f03b98
|
|
@ -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<InventoryForOutVO> vos = new ArrayList<>();
|
||||
qo.getItems().forEach(item -> {
|
||||
qo.getItems()
|
||||
.forEach(item -> {
|
||||
if (StrUtil.isBlank(item.getMaterialNo())) {
|
||||
return;
|
||||
}
|
||||
InventoryForOutVO vo = new InventoryForOutVO()
|
||||
.setMaterialNo(item.getMaterialNo())
|
||||
.setItems(new ArrayList<>());
|
||||
List<WmsInventory> mis = inventories.stream()
|
||||
// 优先分配库位匹配的库存
|
||||
List<WmsInventory> 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<WmsInventory> materialMatched = 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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
getForOut(vo, materialMatched, inventories, item);
|
||||
}
|
||||
if (CollectionUtil.isNotEmpty(vo.getItems())) {
|
||||
vos.add(vo);
|
||||
}
|
||||
});
|
||||
return ApiResult.success(vos);
|
||||
}
|
||||
|
||||
private void getForOut(InventoryForOutVO vo, List<WmsInventory> candidates, List<WmsInventory> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue