Procházet zdrojové kódy

修改物料冻结为创建任务时和待出库数据一起生成

yzc před 1 rokem
rodič
revize
41879db27d

+ 44 - 0
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionTaskServiceImpl.java

@@ -37,8 +37,12 @@ import com.fjhx.mes.utils.code.CodeEnum;
 import com.fjhx.socket.core.PushTypeEnum;
 import com.fjhx.socket.core.WebSocketPush;
 import com.fjhx.wms.entity.stock.emums.StockWaitType;
+import com.fjhx.wms.entity.stock.po.Stock;
+import com.fjhx.wms.entity.stock.po.StockFrozen;
 import com.fjhx.wms.entity.stock.po.StockWait;
 import com.fjhx.wms.entity.stock.po.StockWaitDetails;
+import com.fjhx.wms.service.stock.StockFrozenService;
+import com.fjhx.wms.service.stock.StockService;
 import com.fjhx.wms.service.stock.StockWaitDetailsService;
 import com.fjhx.wms.service.stock.StockWaitService;
 import com.ruoyi.common.exception.ServiceException;
@@ -94,6 +98,10 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
     private ProductionTaskDetailRecordService productionTaskDetailRecordService;
     @Autowired
     private ProductionTaskProcessesDetailService productionTaskProcessesDetailService;
+    @Autowired
+    private StockService stockService;
+    @Autowired
+    private StockFrozenService stockFrozenService;
 
     @Override
     public Page<ProductionTaskVo> getPage(ProductionTaskSelectDto dto) {
@@ -197,6 +205,42 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
             stockWaitDetailsList.add(stockWaitDetails);
         }
         stockWaitDetailsService.saveBatch(stockWaitDetailsList);
+
+
+        //根据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(productionTaskDto.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);
+
     }
 
     @Override

+ 4 - 4
hx-mes/src/main/java/com/fjhx/mes/service/work/WorkOrderService.java

@@ -78,8 +78,8 @@ public interface WorkOrderService extends BaseService<WorkOrder> {
      */
     List<BomDetail> getBomInfo(WorkOrder workOrder);
 
-    /**
-     * 冻结工单BOM
-     */
-    void freezeMaterial(WorkOrder workOrder);
+//    /**
+//     * 冻结工单BOM
+//     */
+//    void freezeMaterial(WorkOrder workOrder);
 }

+ 0 - 4
hx-mes/src/main/java/com/fjhx/mes/service/work/impl/WorkOrderBomServiceImpl.java

@@ -95,10 +95,6 @@ public class WorkOrderBomServiceImpl extends ServiceImpl<WorkOrderBomMapper, Wor
 
         //检查定制工单是否配置BOM、工艺 配置完成发消息
         workOrderService.checkCustomizedInfo(workOrderBomDto.getWorkOrderId());
-
-        //定制调整完BOM冻结物料库存
-        WorkOrder workOrder = workOrderService.getById(workOrderBomDto.getWorkOrderId());
-        workOrderService.freezeMaterial(workOrder);
     }
 
 }

+ 57 - 67
hx-mes/src/main/java/com/fjhx/mes/service/work/impl/WorkOrderServiceImpl.java

@@ -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);
+//    }
 
 }