|
@@ -171,52 +171,10 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
|
|
workOrderDto.setCode(CodeEnum.WORK_ORDER.getCode());
|
|
workOrderDto.setCode(CodeEnum.WORK_ORDER.getCode());
|
|
workOrderDto.setStatus(0);
|
|
workOrderDto.setStatus(0);
|
|
this.save(workOrderDto);
|
|
this.save(workOrderDto);
|
|
- //获取产品信息
|
|
|
|
- ProductInfo productInfo = productInfoService.getById(workOrderDto.getProductId());
|
|
|
|
- if (ObjectUtil.isEmpty(productInfo)) {
|
|
|
|
- throw new ServiceException("查询不到产品信息 产品id->" + workOrderDto.getProductId());
|
|
|
|
- }
|
|
|
|
- //搜索BOM明细并到冻结库存
|
|
|
|
- BomInfo bomInfo = bomInfoService.getOne(q -> q.eq(BomInfo::getProductId, workOrderDto.getProductId()).eq(BomInfo::getCurrentVersion, 1));
|
|
|
|
- if (ObjectUtil.isEmpty(bomInfo)) {
|
|
|
|
- throw new ServiceException("查询不到产品的BOM信息 产品名称->" + productInfo.getName());
|
|
|
|
- }
|
|
|
|
- List<BomDetail> bomDetailList = bomDetailService.list(q -> q.eq(BomDetail::getBomInfoId, bomInfo.getId()));
|
|
|
|
- if (ObjectUtil.isEmpty(bomDetailList)) {
|
|
|
|
- throw new ServiceException("查询不到产品BOM明细 产品名称->" + productInfo.getName());
|
|
|
|
|
|
+ //根据BOM冻结物料库存
|
|
|
|
+ if(ObjectUtil.isNotEmpty(workOrderDto.getProductionQuantity())) {
|
|
|
|
+ freezeMaterial(workOrderDto);
|
|
}
|
|
}
|
|
- 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(workOrderDto.getQuantity());
|
|
|
|
- //添加冻结库存
|
|
|
|
- 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);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -390,6 +348,63 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
|
|
stockWaitDetails.setStatus(0);
|
|
stockWaitDetails.setStatus(0);
|
|
stockWaitDetailsService.save(stockWaitDetails);
|
|
stockWaitDetailsService.save(stockWaitDetails);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ //根据BOM冻结物料库存
|
|
|
|
+ if(ObjectUtil.isNotEmpty(dto.getProductionQuantity())) {
|
|
|
|
+ freezeMaterial(dto);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 冻结工单BOM
|
|
|
|
+ */
|
|
|
|
+ private void freezeMaterial(WorkOrderDto workOrderDto){
|
|
|
|
+ //获取产品信息
|
|
|
|
+ ProductInfo productInfo = productInfoService.getById(workOrderDto.getProductId());
|
|
|
|
+ if (ObjectUtil.isEmpty(productInfo)) {
|
|
|
|
+ throw new ServiceException("查询不到产品信息 产品id->" + workOrderDto.getProductId());
|
|
|
|
+ }
|
|
|
|
+ //搜索BOM明细并到冻结库存
|
|
|
|
+ BomInfo bomInfo = bomInfoService.getOne(q -> q.eq(BomInfo::getProductId, workOrderDto.getProductId()).eq(BomInfo::getCurrentVersion, 1));
|
|
|
|
+ if (ObjectUtil.isEmpty(bomInfo)) {
|
|
|
|
+ throw new ServiceException("查询不到产品的BOM信息 产品名称->" + productInfo.getName());
|
|
|
|
+ }
|
|
|
|
+ List<BomDetail> bomDetailList = bomDetailService.list(q -> q.eq(BomDetail::getBomInfoId, bomInfo.getId()));
|
|
|
|
+ if (ObjectUtil.isEmpty(bomDetailList)) {
|
|
|
|
+ throw new ServiceException("查询不到产品BOM明细 产品名称->" + productInfo.getName());
|
|
|
|
+ }
|
|
|
|
+ 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(workOrderDto.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);
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|