出库管理-自动分配物料当前库存容量不够时剩余分配计划分配到其它库位
This commit is contained in:
+23
-2
@@ -614,8 +614,8 @@ public class StockOutOrderApplicationService {
|
|||||||
List<OutMaterialDetail> outMaterialDetailList = outMaterialDetailService.list(new QueryWrapper<OutMaterialDetail>().lambda()
|
List<OutMaterialDetail> outMaterialDetailList = outMaterialDetailService.list(new QueryWrapper<OutMaterialDetail>().lambda()
|
||||||
.eq(OutMaterialDetail::getOutOrderNumber, stockOutOrderDb.getOutOrderNumber()));
|
.eq(OutMaterialDetail::getOutOrderNumber, stockOutOrderDb.getOutOrderNumber()));
|
||||||
List<OutMaterialDetailDO> materialDetailList = cn.hutool.core.bean.BeanUtil.copyToList(outMaterialDetailList, OutMaterialDetailDO.class);
|
List<OutMaterialDetailDO> materialDetailList = cn.hutool.core.bean.BeanUtil.copyToList(outMaterialDetailList, OutMaterialDetailDO.class);
|
||||||
|
List<OutMaterialDetailDO> materialDetailList2 = new ArrayList<>();
|
||||||
for (OutMaterialDetailDO detail : materialDetailList) {
|
for (OutMaterialDetailDO detail : materialDetailList) {
|
||||||
detail.setAllocationQuantity(detail.getQuantity());
|
|
||||||
String batchRefNo = detail.getBatchRefNo();
|
String batchRefNo = detail.getBatchRefNo();
|
||||||
String sheetRefNo = detail.getSheetRefNo();
|
String sheetRefNo = detail.getSheetRefNo();
|
||||||
String boxPalletNo = detail.getBoxPalletNo();
|
String boxPalletNo = detail.getBoxPalletNo();
|
||||||
@@ -630,7 +630,23 @@ public class StockOutOrderApplicationService {
|
|||||||
if (materialInventories == null || materialInventories.isEmpty()) {
|
if (materialInventories == null || materialInventories.isEmpty()) {
|
||||||
throw new ServiceException("库存不存在:" + batchRefNo + " " + sheetRefNo + " " + boxPalletNo);
|
throw new ServiceException("库存不存在:" + batchRefNo + " " + sheetRefNo + " " + boxPalletNo);
|
||||||
}
|
}
|
||||||
MaterialInventory materialInventory = materialInventories.get(0);
|
|
||||||
|
BigDecimal remainingQuantity = detail.getQuantity(); // 计划数量
|
||||||
|
for (MaterialInventory materialInventory : materialInventories) {
|
||||||
|
if (remainingQuantity.compareTo(BigDecimal.ZERO) <= 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// 当前物料的可用库存
|
||||||
|
BigDecimal availableStock = materialInventory.getAllocationQuantity();
|
||||||
|
// 如果当前物料没有库存,跳过
|
||||||
|
if (availableStock == null || availableStock.compareTo(BigDecimal.ZERO) <= 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// 计算本次能扣减的数量:取 剩余计划 和 当前库存 的较小值
|
||||||
|
BigDecimal deductQuantity = remainingQuantity.compareTo(availableStock) <= 0
|
||||||
|
? remainingQuantity // 剩余计划 <= 库存,扣剩余计划
|
||||||
|
: availableStock; // 剩余计划 > 库存,扣全部库存
|
||||||
|
|
||||||
detail.setMaterialInventoryId(materialInventory.getMaterialInventoryId());
|
detail.setMaterialInventoryId(materialInventory.getMaterialInventoryId());
|
||||||
detail.setStorageLocationId(materialInventory.getStorageLocationId());
|
detail.setStorageLocationId(materialInventory.getStorageLocationId());
|
||||||
detail.setStorageLocationName(materialInventory.getStorageLocationName());
|
detail.setStorageLocationName(materialInventory.getStorageLocationName());
|
||||||
@@ -639,6 +655,11 @@ public class StockOutOrderApplicationService {
|
|||||||
detail.setStorageName(materialInventory.getStorageName());
|
detail.setStorageName(materialInventory.getStorageName());
|
||||||
detail.setStorageCode(materialInventory.getStorageCode());
|
detail.setStorageCode(materialInventory.getStorageCode());
|
||||||
detail.setInventoryQuantity(materialInventory.getInventoryQuantity());
|
detail.setInventoryQuantity(materialInventory.getInventoryQuantity());
|
||||||
|
detail.setAllocationQuantity(deductQuantity);
|
||||||
|
materialDetailList2.add(detail);
|
||||||
|
// 更新剩余计划数量
|
||||||
|
remainingQuantity = remainingQuantity.subtract(deductQuantity);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
stockOutOrderD.setMaterialDetailList(materialDetailList);
|
stockOutOrderD.setMaterialDetailList(materialDetailList);
|
||||||
StockOutOrderDO assembleStockOutOrderDO = assembleParamByOutOrder(stockOutOrderD);
|
StockOutOrderDO assembleStockOutOrderDO = assembleParamByOutOrder(stockOutOrderD);
|
||||||
|
|||||||
Reference in New Issue
Block a user