|
@@ -180,10 +180,6 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
|
|
|
workOrderDto.setCode(CodeEnum.WORK_ORDER.getCode());
|
|
|
workOrderDto.setStatus(0);
|
|
|
this.save(workOrderDto);
|
|
|
- //根据BOM冻结物料库存
|
|
|
- if(ObjectUtil.isNotEmpty(workOrderDto.getProductionQuantity())) {
|
|
|
- freezeMaterial(workOrderDto);
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -358,12 +354,6 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
|
|
|
stockWaitDetails.setStatus(0);
|
|
|
stockWaitDetailsService.save(stockWaitDetails);
|
|
|
}
|
|
|
-
|
|
|
- //根据BOM冻结物料库存
|
|
|
- if(ObjectUtil.isNotEmpty(workOrder.getProductionQuantity())) {
|
|
|
- dto.setProductId(workOrder.getProductId());
|
|
|
- freezeMaterial(dto);
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -400,62 +390,62 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
|
|
|
return bomDetailList;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 冻结工单BOM
|
|
|
- */
|
|
|
- @DSTransactional
|
|
|
- @Override
|
|
|
- public void freezeMaterial(WorkOrder workOrderDto){
|
|
|
- WorkOrder workOrder = this.getById(workOrderDto.getId());
|
|
|
-
|
|
|
- //如果定制且BOM未定制直接跳出
|
|
|
- if ("1".equals(workOrder.getIsCustomized())){
|
|
|
- //如果BOM未定制
|
|
|
- if (ObjectUtil.isEmpty(workOrder.getBomStatus())||workOrder.getBomStatus()!=1) {
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
- //如果待生产数量为空(需要如果干预)直接跳过
|
|
|
- if (ObjectUtil.isEmpty(workOrder.getProductionQuantity())){
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- //获取Bom明细
|
|
|
- List<BomDetail> bomDetailList = getBomInfo(workOrder);
|
|
|
-
|
|
|
- //根据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));
|
|
|
- List<StockFrozen> stockFrozenList = new ArrayList<>();
|
|
|
- for (BomDetail bomDetail : bomDetailList) {
|
|
|
- Long productId = bomDetail.getProductId();
|
|
|
- //计算总数量 需要的物料数量*工单生产数量
|
|
|
- BigDecimal multiply = bomDetail.getQuantity().multiply(workOrder.getProductionQuantity());
|
|
|
- //添加冻结库存
|
|
|
- List<Stock> stocks = productMap.get(productId);
|
|
|
- if (ObjectUtil.isEmpty(stocks)) {
|
|
|
- throw new ServiceException("物料库存不存在");
|
|
|
- }
|
|
|
- //计算库存是否充足(可用库存 - 冻结库存 - 所需的数量)是否大等于0
|
|
|
- BigDecimal quantity = stocks.stream().map(Stock::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- Map<Long, StockFrozen> stockFrozenMap = stockFrozenService.mapKEntity(StockFrozen::getProductId, q -> q.in(StockFrozen::getProductId, productIds));
|
|
|
- StockFrozen stockFrozen = stockFrozenMap.get(bomDetail.getProductId());
|
|
|
- if (ObjectUtil.isEmpty(stockFrozen)) {
|
|
|
- stockFrozen = new StockFrozen();
|
|
|
- stockFrozen.setProductId(bomDetail.getProductId());
|
|
|
- stockFrozen.setFrozenQuantity(BigDecimal.ZERO);
|
|
|
- }
|
|
|
- BigDecimal subtract = quantity.subtract(stockFrozen.getFrozenQuantity()).subtract(multiply);
|
|
|
- if (subtract.compareTo(BigDecimal.ZERO) < 0) {
|
|
|
- throw new ServiceException("物料库存不足");
|
|
|
- }
|
|
|
- //存在库存
|
|
|
- BigDecimal add = stockFrozen.getFrozenQuantity().add(multiply);
|
|
|
- stockFrozen.setFrozenQuantity(add);
|
|
|
-
|
|
|
- stockFrozenList.add(stockFrozen);
|
|
|
- }
|
|
|
- stockFrozenService.saveOrUpdateBatch(stockFrozenList);
|
|
|
- }
|
|
|
+// /**
|
|
|
+// * 冻结工单BOM
|
|
|
+// */
|
|
|
+// @DSTransactional
|
|
|
+// @Override
|
|
|
+// public void freezeMaterial(WorkOrder workOrderDto){
|
|
|
+// WorkOrder workOrder = this.getById(workOrderDto.getId());
|
|
|
+//
|
|
|
+// //如果定制且BOM未定制直接跳出
|
|
|
+// if ("1".equals(workOrder.getIsCustomized())){
|
|
|
+// //如果BOM未定制
|
|
|
+// if (ObjectUtil.isEmpty(workOrder.getBomStatus())||workOrder.getBomStatus()!=1) {
|
|
|
+// return;
|
|
|
+// }
|
|
|
+// }
|
|
|
+// //如果待生产数量为空(需要如果干预)直接跳过
|
|
|
+// if (ObjectUtil.isEmpty(workOrder.getProductionQuantity())){
|
|
|
+// return;
|
|
|
+// }
|
|
|
+//
|
|
|
+// //获取Bom明细
|
|
|
+// List<BomDetail> bomDetailList = getBomInfo(workOrder);
|
|
|
+//
|
|
|
+// //根据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));
|
|
|
+// List<StockFrozen> stockFrozenList = new ArrayList<>();
|
|
|
+// for (BomDetail bomDetail : bomDetailList) {
|
|
|
+// Long productId = bomDetail.getProductId();
|
|
|
+// //计算总数量 需要的物料数量*工单生产数量
|
|
|
+// BigDecimal multiply = bomDetail.getQuantity().multiply(workOrder.getProductionQuantity());
|
|
|
+// //添加冻结库存
|
|
|
+// List<Stock> stocks = productMap.get(productId);
|
|
|
+// if (ObjectUtil.isEmpty(stocks)) {
|
|
|
+// throw new ServiceException("物料库存不存在");
|
|
|
+// }
|
|
|
+// //计算库存是否充足(可用库存 - 冻结库存 - 所需的数量)是否大等于0
|
|
|
+// BigDecimal quantity = stocks.stream().map(Stock::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+// Map<Long, StockFrozen> stockFrozenMap = stockFrozenService.mapKEntity(StockFrozen::getProductId, q -> q.in(StockFrozen::getProductId, productIds));
|
|
|
+// StockFrozen stockFrozen = stockFrozenMap.get(bomDetail.getProductId());
|
|
|
+// if (ObjectUtil.isEmpty(stockFrozen)) {
|
|
|
+// stockFrozen = new StockFrozen();
|
|
|
+// stockFrozen.setProductId(bomDetail.getProductId());
|
|
|
+// stockFrozen.setFrozenQuantity(BigDecimal.ZERO);
|
|
|
+// }
|
|
|
+// BigDecimal subtract = quantity.subtract(stockFrozen.getFrozenQuantity()).subtract(multiply);
|
|
|
+// if (subtract.compareTo(BigDecimal.ZERO) < 0) {
|
|
|
+// throw new ServiceException("物料库存不足");
|
|
|
+// }
|
|
|
+// //存在库存
|
|
|
+// BigDecimal add = stockFrozen.getFrozenQuantity().add(multiply);
|
|
|
+// stockFrozen.setFrozenQuantity(add);
|
|
|
+//
|
|
|
+// stockFrozenList.add(stockFrozen);
|
|
|
+// }
|
|
|
+// stockFrozenService.saveOrUpdateBatch(stockFrozenList);
|
|
|
+// }
|
|
|
|
|
|
}
|