|
@@ -221,10 +221,8 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
|
|
|
//根据BOM明细冻结库存
|
|
|
List<Long> productIds = bomDetailList.stream().map(BomDetail::getProductId).collect(Collectors.toList());
|
|
|
Map<Long, List<Stock>> productMap = stockService.mapKGroup(Stock::getProductId, q -> q.in(Stock::getProductId, productIds));
|
|
|
- Map<Long, ProductInfo> productInfoMap = productInfoService.mapKEntity(ProductInfo::getId, q -> q
|
|
|
- .in(ObjectUtil.isNotEmpty(productIds), ProductInfo::getId, productIds)
|
|
|
- );
|
|
|
List<StockFrozen> stockFrozenList = new ArrayList<>();
|
|
|
+ List<Long> errProductIdList = new ArrayList();
|
|
|
for (BomDetail bomDetail : bomDetailList) {
|
|
|
Long productId = bomDetail.getProductId();
|
|
|
//计算总数量 需要的物料数量*工单生产数量
|
|
@@ -232,8 +230,8 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
|
|
|
//添加冻结库存
|
|
|
List<Stock> stocks = productMap.get(productId);
|
|
|
if (ObjectUtil.isEmpty(stocks)) {
|
|
|
- ProductInfo productInfo = productInfoMap.get(productId);
|
|
|
- throw new ServiceException(String.format("物料%s(%s)库存不足!", productInfo.getName(), productInfo.getSpec()));
|
|
|
+ //物料不存在添加到异常列表
|
|
|
+ errProductIdList.add(productId);
|
|
|
}
|
|
|
//计算库存是否充足(可用库存 - 冻结库存 - 所需的数量)是否大等于0
|
|
|
BigDecimal quantity = stocks.stream().map(Stock::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
@@ -246,15 +244,27 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
|
|
|
}
|
|
|
BigDecimal subtract = quantity.subtract(stockFrozen.getFrozenQuantity()).subtract(multiply);
|
|
|
if (subtract.compareTo(BigDecimal.ZERO) < 0) {
|
|
|
- ProductInfo productInfo = productInfoMap.get(productId);
|
|
|
- throw new ServiceException(String.format("物料%s(%s)库存不足!", productInfo.getName(), productInfo.getSpec()));
|
|
|
+ //物料不足添加到异常列表
|
|
|
+ errProductIdList.add(productId);
|
|
|
}
|
|
|
+
|
|
|
//存在库存
|
|
|
BigDecimal add = stockFrozen.getFrozenQuantity().add(multiply);
|
|
|
stockFrozen.setFrozenQuantity(add);
|
|
|
|
|
|
stockFrozenList.add(stockFrozen);
|
|
|
}
|
|
|
+
|
|
|
+ //判断库存是否充足
|
|
|
+ if(errProductIdList.size()>0){
|
|
|
+ List<String> productNames = productInfoService.listObject(ProductInfo::getName, q -> q
|
|
|
+ .in(ObjectUtil.isNotEmpty(errProductIdList), ProductInfo::getId, errProductIdList)
|
|
|
+ );
|
|
|
+ String collect = productNames.stream().collect(Collectors.joining(","));
|
|
|
+ throw new ServiceException(String.format("以下物料库存不足 %s", collect));
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
stockFrozenService.saveOrUpdateBatch(stockFrozenList);
|
|
|
|
|
|
}
|