Jelajahi Sumber

根据sn获取产品信息字段修改

yzc 1 tahun lalu
induk
melakukan
18a8cdec10

+ 12 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/production/vo/ProductionTaskDetailVo.java

@@ -1,7 +1,9 @@
 package com.fjhx.mes.entity.production.vo;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fjhx.mes.entity.bom.vo.BomDetailVo;
 import com.fjhx.mes.entity.production.po.ProductionTaskDetail;
+import com.fjhx.mes.entity.work.po.WorkOrderProductionProcesses;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -72,6 +74,16 @@ public class ProductionTaskDetailVo extends ProductionTaskDetail {
      */
     private String productSpec;
 
+    /**
+     * 工序列表
+     */
+    private List<WorkOrderProductionProcesses> productionProcessesList;
+
+    /**
+     * 物料明细
+     */
+    List<BomDetailVo> bomDetail;
+
     //-------------------生产进度--------------------------
     /**
      * 销售合同号

+ 36 - 6
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionTaskDetailServiceImpl.java

@@ -14,6 +14,8 @@ import com.fjhx.file.utils.ObsFileUtil;
 import com.fjhx.item.entity.product.po.ProductInfo;
 import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.mes.entity.applicable.po.ApplicableProducts;
+import com.fjhx.mes.entity.bom.po.BomDetail;
+import com.fjhx.mes.entity.bom.vo.BomDetailVo;
 import com.fjhx.mes.entity.production.dto.ProductionTaskDetailDto;
 import com.fjhx.mes.entity.production.dto.ProductionTaskDetailSelectDto;
 import com.fjhx.mes.entity.production.po.*;
@@ -31,6 +33,7 @@ import com.fjhx.mes.service.work.WorkOrderProductionProcessesService;
 import com.fjhx.mes.service.work.WorkOrderService;
 import com.fjhx.socket.core.PushTypeEnum;
 import com.fjhx.socket.core.WebSocketPush;
+import com.fjhx.wms.entity.monthly.vo.MonthlyInventoryReportVo;
 import com.fjhx.wms.entity.stock.emums.StockWaitType;
 import com.fjhx.wms.entity.stock.po.StockWait;
 import com.fjhx.wms.entity.stock.po.StockWaitDetails;
@@ -389,12 +392,39 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
     @Override
     public ProductionTaskDetailVo snInfo(String sn) {
         Assert.notEmpty(sn, "sn不能为空");
-        ProductionTaskDetailVo productionTaskDetailVo = baseMapper.snInfo(sn);
-        Assert.notEmpty(productionTaskDetailVo, "查询不到sn信息");
-        ProductInfo productInfo = productInfoService.getById(productionTaskDetailVo.getProductId());
-        Assert.notEmpty(productInfo, "查询不到产品信息");
-        productionTaskDetailVo.setProductName(productInfo.getName());
-        return productionTaskDetailVo;
+        ProductionTaskDetailVo result = baseMapper.snInfo(sn);
+        Assert.notEmpty(result, "查询不到sn信息");
+
+        //赋值产品信息
+        ProductInfo productInfo = productInfoService.getById(result.getProductId());
+        if(ObjectUtil.isNotEmpty(productInfo)) {
+            result.setProductName(productInfo.getName());
+            result.setProductSpec(productInfo.getSpec());
+        }
+
+        //赋值客户信息
+        Customer customer = customerService.getById(result.getCustomerId());
+        if(ObjectUtil.isNotEmpty(customer)) {
+            result.setCustomerName(customer.getName());
+        }
+
+        //赋值工序列表
+        WorkOrder workOrder = workOrderService.getById(result.getWorkOrderId());
+        result.setProductionProcessesList(workOrderService.getProductionProcessesList(workOrder));
+
+        //获取BOM信息
+        List<BomDetail> bomInfo = workOrderService.getBomInfo(workOrder);
+        List<BomDetailVo> bomDetailVos = BeanUtil.copyToList(bomInfo, BomDetailVo.class);
+        //赋值物料信息
+        productInfoService.attributeAssign(bomDetailVos, BomDetailVo::getProductId, (item, productInfo1) -> {
+            item.setProductCode(productInfo1.getCode());
+            item.setProductName(productInfo1.getName());
+            item.setProductSpec(productInfo1.getSpec());
+            item.setProductUnit(productInfo1.getUnit());
+        });
+        result.setBomDetail(bomDetailVos);
+
+        return result;
     }
 
     /**

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

@@ -1,6 +1,7 @@
 package com.fjhx.mes.service.work;
 
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.fjhx.mes.entity.bom.po.BomDetail;
 import com.fjhx.mes.entity.work.po.WorkOrder;
 import com.fjhx.mes.entity.work.po.WorkOrderProductionProcesses;
 import com.ruoyi.common.core.service.BaseService;
@@ -71,4 +72,14 @@ public interface WorkOrderService extends BaseService<WorkOrder> {
      * 下发需要人工干预的工单
      */
     void distribute(WorkOrderDto dto);
+
+    /**
+     * 获取工单BOM信息
+     */
+    List<BomDetail> getBomInfo(WorkOrder workOrder);
+
+    /**
+     * 冻结工单BOM
+     */
+    void freezeMaterial(WorkOrder workOrder);
 }

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

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

+ 52 - 8
hx-mes/src/main/java/com/fjhx/mes/service/work/impl/WorkOrderServiceImpl.java

@@ -21,6 +21,7 @@ import com.fjhx.mes.entity.production.po.ProductionTaskDetail;
 import com.fjhx.mes.entity.work.dto.WorkOrderDto;
 import com.fjhx.mes.entity.work.dto.WorkOrderSelectDto;
 import com.fjhx.mes.entity.work.po.WorkOrder;
+import com.fjhx.mes.entity.work.po.WorkOrderBom;
 import com.fjhx.mes.entity.work.po.WorkOrderProductionProcesses;
 import com.fjhx.mes.entity.work.vo.WorkOrderVo;
 import com.fjhx.mes.mapper.work.WorkOrderMapper;
@@ -30,6 +31,7 @@ import com.fjhx.mes.service.production.ProductionPlanService;
 import com.fjhx.mes.service.production.ProductionProcessesService;
 import com.fjhx.mes.service.production.ProductionTaskDetailService;
 import com.fjhx.mes.service.production.ProductionTaskService;
+import com.fjhx.mes.service.work.WorkOrderBomService;
 import com.fjhx.mes.service.work.WorkOrderProductionProcessesService;
 import com.fjhx.mes.service.work.WorkOrderService;
 import com.fjhx.mes.utils.code.CodeEnum;
@@ -101,6 +103,8 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
     private StockWaitService stockWaitService;
     @Autowired
     private StockWaitDetailsService stockWaitDetailsService;
+    @Autowired
+    private WorkOrderBomService workOrderBomService;
 
     @Override
     public Page<WorkOrderVo> getPage(WorkOrderSelectDto dto) {
@@ -169,6 +173,9 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
     @DSTransactional
     @Override
     public void add(WorkOrderDto workOrderDto) {
+        //查询一下BOM信息看看是否已经配置
+        getBomInfo(workOrderDto);
+
         //生成工单编号,以及设置默认状态
         workOrderDto.setCode(CodeEnum.WORK_ORDER.getCode());
         workOrderDto.setStatus(0);
@@ -360,30 +367,67 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
     }
 
     /**
-     * 冻结工单BOM
+     * 获取bom信息
+     *
+     * @return
      */
-    private void freezeMaterial(WorkOrderDto workOrderDto){
+    @Override
+    public List<BomDetail> getBomInfo(WorkOrder workOrder) {
         //获取产品信息
-        ProductInfo productInfo = productInfoService.getById(workOrderDto.getProductId());
+        ProductInfo productInfo = productInfoService.getById(workOrder.getProductId());
         if (ObjectUtil.isEmpty(productInfo)) {
-            throw new ServiceException("查询不到产品信息 产品id->" + workOrderDto.getProductId());
+            throw new ServiceException("查询不到产品信息 产品id->" + workOrder.getProductId());
         }
-        //搜索BOM明细并到冻结库存
-        BomInfo bomInfo = bomInfoService.getOne(q -> q.eq(BomInfo::getProductId, workOrderDto.getProductId()).eq(BomInfo::getCurrentVersion, 1));
+
+        //搜索BOM明细
+        List<BomDetail> bomDetailList = new ArrayList<>();
+        //非定制
+        BomInfo bomInfo = bomInfoService.getOne(q -> q.eq(BomInfo::getProductId, workOrder.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()));
+        bomDetailList = bomDetailService.list(q -> q.eq(BomDetail::getBomInfoId, bomInfo.getId()));
         if (ObjectUtil.isEmpty(bomDetailList)) {
             throw new ServiceException("查询不到产品BOM明细 产品名称->" + productInfo.getName());
         }
+
+        //如果是定制就获取定制的BOM
+        if ("1".equals(workOrder.getIsCustomized())) {
+            //定制
+            List<WorkOrderBom> workOrderBoms = workOrderBomService.list(q -> q.eq(WorkOrderBom::getWorkOrderId, workOrder.getId()));
+            bomDetailList = BeanUtil.copyToList(workOrderBoms, BomDetail.class);
+        }
+        return bomDetailList;
+    }
+
+    /**
+     * 冻结工单BOM
+     */
+    @DSTransactional
+    @Override
+    public void freezeMaterial(WorkOrder workOrderDto){
+        WorkOrder workOrder = this.getById(workOrderDto.getId());
+
+        //如果定制且BOM未定制直接跳出
+        if ("1".equals(workOrder.getIsCustomized())&&workOrderDto.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(workOrderDto.getProductionQuantity());
+            BigDecimal multiply = bomDetail.getQuantity().multiply(workOrder.getProductionQuantity());
             //添加冻结库存
             List<Stock> stocks = productMap.get(productId);
             if (ObjectUtil.isEmpty(stocks)) {

+ 3 - 2
hx-mes/src/main/resources/mapper/production/ProductionTaskDetailMapper.xml

@@ -47,8 +47,9 @@
         SELECT
             ptd.product_id,
             ptd.product_sn,
-            sc.`code`,
-            wo.id workOrderId
+            sc.`code` as contractCode,
+            wo.id workOrderId,
+            sc.customer_id
         FROM
             production_task_detail ptd
                 JOIN production_task pt ON ptd.production_task_id = pt.id