Browse Source

BOM改为所有工单都单独存储一份

yzc 1 year ago
parent
commit
3f6124f02a

+ 17 - 15
hx-jxst/src/main/java/com/fjhx/jxst/service/after/impl/AfterSalesRecordServiceImpl.java

@@ -117,21 +117,23 @@ public class AfterSalesRecordServiceImpl extends ServiceImpl<AfterSalesRecordMap
         //获取工单信息
         WorkOrder workOrder = workOrderService.getById(productionTaskDetailVo.getWorkOrderId());
         //查询BOM信息
-        BomInfo bomInfo = bomInfoService.getOne(q -> q.eq(BomInfo::getProductId, workOrder.getProductId()).eq(BomInfo::getCurrentVersion, 1));
-        Assert.notEmpty(bomInfo, "查询不到产品的BOM信息");
-        result.setBomInfoId(bomInfo.getId());
-
-        List<BomDetailVo> bomDetailList = new ArrayList<>();
-        //判断是否定制
-        if ("1".equals(workOrder.getIsCustomized())) {
-            //是定制
-            List<WorkOrderBom> list = workOrderBomService.list(q -> q.eq(WorkOrderBom::getWorkOrderId, workOrder.getId()));
-            bomDetailList = BeanUtil.copyToList(list, BomDetailVo.class);
-        } else {
-            //不是定制
-            List<BomDetail> list = bomDetailService.list(q -> q.eq(BomDetail::getBomInfoId, bomInfo.getId()));
-            bomDetailList = BeanUtil.copyToList(list, BomDetailVo.class);
-        }
+        List<WorkOrderBom> workOrderBomList = workOrderBomService.list(q -> q.eq(WorkOrderBom::getWorkOrderId, workOrder.getId()));
+        List<BomDetailVo> bomDetailList = BeanUtil.copyToList(workOrderBomList, BomDetailVo.class);
+//        BomInfo bomInfo = bomInfoService.getOne(q -> q.eq(BomInfo::getProductId, workOrder.getProductId()).eq(BomInfo::getCurrentVersion, 1));
+//        Assert.notEmpty(bomInfo, "查询不到产品的BOM信息");
+//        result.setBomInfoId(bomInfo.getId());
+//
+//        List<BomDetailVo> bomDetailList = new ArrayList<>();
+//        //判断是否定制
+//        if ("1".equals(workOrder.getIsCustomized())) {
+//            //是定制
+//            List<WorkOrderBom> list = workOrderBomService.list(q -> q.eq(WorkOrderBom::getWorkOrderId, workOrder.getId()));
+//            bomDetailList = BeanUtil.copyToList(list, BomDetailVo.class);
+//        } else {
+//            //不是定制
+//            List<BomDetail> list = bomDetailService.list(q -> q.eq(BomDetail::getBomInfoId, bomInfo.getId()));
+//            bomDetailList = BeanUtil.copyToList(list, BomDetailVo.class);
+//        }
         Assert.notEmpty(bomDetailList, "查询不到产品的BOM明细");
         //给bom明细赋值产品名称
         productInfoService.attributeAssign(bomDetailList, BomDetailVo::getProductId, (item, productInfo) -> {

+ 4 - 0
hx-mes/src/main/java/com/fjhx/mes/service/bom/BomInfoService.java

@@ -66,4 +66,8 @@ public interface BomInfoService extends BaseService<BomInfo> {
      */
     List<BomProductVo> getProductList();
 
+    /**
+     * 获取产品BOM
+     */
+    BomInfoVo getProductBom(Long productId);
 }

+ 16 - 0
hx-mes/src/main/java/com/fjhx/mes/service/bom/impl/BomInfoServiceImpl.java

@@ -248,4 +248,20 @@ public class BomInfoServiceImpl extends ServiceImpl<BomInfoMapper, BomInfo> impl
         return bomProductList;
     }
 
+    /**
+     * 获取产品BOM
+     */
+    @Override
+    public BomInfoVo getProductBom(Long productId){
+        BomInfo bomInfo = this.getOne(q -> q.eq(BomInfo::getProductId, productId).eq(BomInfo::getCurrentVersion, 1));
+        if (ObjectUtil.isEmpty(bomInfo)) {
+            return null;
+        }
+        BomInfoVo bomInfoVo = BeanUtil.copyProperties(bomInfo, BomInfoVo.class);
+        List<BomDetail> bomDetailList = bomDetailService.list(q -> q.eq(BomDetail::getBomInfoId, bomInfo.getId()));
+        List<BomDetailVo> bomDetailVos = BeanUtil.copyToList(bomDetailList, BomDetailVo.class);
+        bomInfoVo.setBomDetailVoList(bomDetailVos);
+        return bomInfoVo;
+    }
+
 }

+ 7 - 2
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionTaskDetailServiceImpl.java

@@ -27,12 +27,14 @@ import com.fjhx.mes.entity.production.vo.ProductionTaskDetailRecordVo;
 import com.fjhx.mes.entity.production.vo.ProductionTaskDetailVo;
 import com.fjhx.mes.entity.technology.po.Technology;
 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.production.ProductionTaskDetailMapper;
 import com.fjhx.mes.service.applicable.ApplicableProductsService;
 import com.fjhx.mes.service.production.*;
 import com.fjhx.mes.service.technology.TechnologyService;
+import com.fjhx.mes.service.work.WorkOrderBomService;
 import com.fjhx.mes.service.work.WorkOrderProductionProcessesService;
 import com.fjhx.mes.service.work.WorkOrderService;
 import com.fjhx.socket.core.PushTypeEnum;
@@ -98,6 +100,8 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
     private TechnologyService technologyService;
     @Autowired
     private CustomerService customerService;
+    @Autowired
+    private WorkOrderBomService workOrderBomService;
 
     @Override
     public Page<ProductionTaskDetailVo> getPage(ProductionTaskDetailSelectDto dto) {
@@ -444,8 +448,9 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
         result.setProductionTaskDetailRecordList(productionTaskDetailRecordVos);
 
         //获取BOM信息
-        List<BomDetail> bomInfo = workOrderService.getBomInfo(workOrder);
-        List<BomDetailVo> bomDetailVos = BeanUtil.copyToList(bomInfo, BomDetailVo.class);
+//        List<BomDetail> bomInfo = workOrderService.getBomInfo(workOrder);
+        List<WorkOrderBom> workOrderBomList = workOrderBomService.list(q -> q.eq(WorkOrderBom::getProductId, workOrder.getProductId()));
+        List<BomDetailVo> bomDetailVos = BeanUtil.copyToList(workOrderBomList, BomDetailVo.class);
         //赋值物料信息
         productInfoService.attributeAssign(bomDetailVos, BomDetailVo::getProductId, (item, productInfo1) -> {
             item.setProductCode(productInfo1.getCode());

+ 22 - 21
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionTaskServiceImpl.java

@@ -175,24 +175,25 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
             throw new ServiceException("查询不到该任务的工单信息");
         }
 
-        List<BomDetail> bomDetailList = new ArrayList<>();
-        if ("1".equals(workOrder.getIsCustomized())) {
-            List<WorkOrderBom> workOrderBomList = workOrderBomService.list(q -> q.eq(WorkOrderBom::getWorkOrderId, workOrder.getId()));
-            if (ObjectUtil.isEmpty(workOrderBomList)) {
-                throw new ServiceException("该工单为定制工单 未配置定制BOM");
-            }
-            bomDetailList = BeanUtil.copyToList(workOrderBomList, BomDetail.class);
-        } else {
-            //查询BOM信息
-            BomInfo bomInfo = bomInfoService.getOne(q -> q.eq(BomInfo::getProductId, workOrder.getProductId()).eq(BomInfo::getCurrentVersion, 1));
-            if (ObjectUtil.isEmpty(bomInfo)) {
-                throw new ServiceException("查询不到产品的BOM信息");
-            }
-            bomDetailList = bomDetailService.list(q -> q.eq(BomDetail::getBomInfoId, bomInfo.getId()));
-            if (ObjectUtil.isEmpty(bomDetailList)) {
-                throw new ServiceException("查询不到BOM明细");
-            }
-        }
+        List<WorkOrderBom> bomDetailList = workOrderBomService.list(q -> q.eq(WorkOrderBom::getWorkOrderId, workOrder.getId()));
+//        List<BomDetail> bomDetailList = new ArrayList<>();
+//        if ("1".equals(workOrder.getIsCustomized())) {
+//            List<WorkOrderBom> workOrderBomList = workOrderBomService.list(q -> q.eq(WorkOrderBom::getWorkOrderId, workOrder.getId()));
+//            if (ObjectUtil.isEmpty(workOrderBomList)) {
+//                throw new ServiceException("该工单为定制工单 未配置定制BOM");
+//            }
+//            bomDetailList = BeanUtil.copyToList(workOrderBomList, BomDetail.class);
+//        } else {
+//            //查询BOM信息
+//            BomInfo bomInfo = bomInfoService.getOne(q -> q.eq(BomInfo::getProductId, workOrder.getProductId()).eq(BomInfo::getCurrentVersion, 1));
+//            if (ObjectUtil.isEmpty(bomInfo)) {
+//                throw new ServiceException("查询不到产品的BOM信息");
+//            }
+//            bomDetailList = bomDetailService.list(q -> q.eq(BomDetail::getBomInfoId, bomInfo.getId()));
+//            if (ObjectUtil.isEmpty(bomDetailList)) {
+//                throw new ServiceException("查询不到BOM明细");
+//            }
+//        }
         //创建待出库信息
         StockWait stockWait = new StockWait();
         stockWait.setBusinessId(productionTaskDto.getId());
@@ -205,7 +206,7 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
         stockWaitService.save(stockWait);
         //创建待出库明细
         List<StockWaitDetails> stockWaitDetailsList = new ArrayList<>();
-        for (BomDetail bomDetail : bomDetailList) {
+        for (WorkOrderBom bomDetail : bomDetailList) {
             //计算数量
             BigDecimal multiply = bomDetail.getQuantity().multiply(productionTaskDto.getQuantity());
             //创建待出库明细
@@ -220,10 +221,10 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
 
 
         //根据BOM明细冻结库存
-        List<Long> productIds = bomDetailList.stream().map(BomDetail::getProductId).collect(Collectors.toList());
+        List<Long> productIds = bomDetailList.stream().map(WorkOrderBom::getProductId).collect(Collectors.toList());
         Map<Long, List<Stock>> productMap = stockService.mapKGroup(Stock::getProductId, q -> q.in(Stock::getProductId, productIds));
         List<Long> errProductIdList = new ArrayList();
-        for (BomDetail bomDetail : bomDetailList) {
+        for (WorkOrderBom bomDetail : bomDetailList) {
             Long productId = bomDetail.getProductId();
             //计算总数量 需要的物料数量*工单生产数量
             BigDecimal multiply = bomDetail.getQuantity().multiply(productionTaskDto.getQuantity());

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

@@ -63,10 +63,10 @@ public interface WorkOrderService extends BaseService<WorkOrder> {
      */
     void distribute(WorkOrderDto dto);
 
-    /**
-     * 获取工单BOM信息
-     */
-    List<BomDetail> getBomInfo(WorkOrder workOrder);
+//    /**
+//     * 获取工单BOM信息
+//     */
+//    List<BomDetail> getBomInfo(WorkOrder workOrder);
 
     /**
      * 研发上传附件

+ 8 - 11
hx-mes/src/main/java/com/fjhx/mes/service/work/impl/WorkOrderBomServiceImpl.java

@@ -5,14 +5,13 @@ import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.item.service.product.ProductInfoService;
-import com.fjhx.mes.entity.bom.po.BomDetail;
-import com.fjhx.mes.entity.bom.po.BomInfo;
+import com.fjhx.mes.entity.bom.vo.BomDetailVo;
+import com.fjhx.mes.entity.bom.vo.BomInfoVo;
 import com.fjhx.mes.entity.work.dto.WorkOrderBomDto;
 import com.fjhx.mes.entity.work.po.WorkOrder;
 import com.fjhx.mes.entity.work.po.WorkOrderBom;
 import com.fjhx.mes.entity.work.vo.WorkOrderBomVo;
 import com.fjhx.mes.mapper.work.WorkOrderBomMapper;
-import com.fjhx.mes.service.bom.BomDetailService;
 import com.fjhx.mes.service.bom.BomInfoService;
 import com.fjhx.mes.service.work.WorkOrderBomService;
 import com.fjhx.mes.service.work.WorkOrderService;
@@ -42,8 +41,6 @@ public class WorkOrderBomServiceImpl extends ServiceImpl<WorkOrderBomMapper, Wor
     @Autowired
     private BomInfoService bomInfoService;
     @Autowired
-    private BomDetailService bomDetailService;
-    @Autowired
     private WorkOrderService workOrderService;
     @Autowired
     private ProductInfoService productInfoService;
@@ -55,19 +52,19 @@ public class WorkOrderBomServiceImpl extends ServiceImpl<WorkOrderBomMapper, Wor
             throw new ServiceException("查询不到工单信息");
         }
         List<WorkOrderBom> workOrderBomList = list(q -> q.eq(WorkOrderBom::getWorkOrderId, dto.getWorkOrderId()));
+
+        //如果工单BOM为空就查询基本BOM信息
         if (ObjectUtil.isEmpty(workOrderBomList)) {
-            //如果不存在定制BOM就查询基本BOM信息
-            BomInfo bomInfo = bomInfoService.getOne(q -> q.eq(BomInfo::getProductId, workOrder.getProductId()).eq(BomInfo::getCurrentVersion, 1));
+            BomInfoVo bomInfo = bomInfoService.getProductBom(workOrder.getProductId());
             if (ObjectUtil.isNotEmpty(bomInfo)) {
-                List<BomDetail> bomDetailList = bomDetailService.list(q -> q.eq(BomDetail::getBomInfoId, bomInfo.getId()));
+                List<BomDetailVo> bomDetailList = bomInfo.getBomDetailVoList();
                 if (ObjectUtil.isNotEmpty(bomDetailList)) {
+                    bomDetailList.forEach(item -> item.setId(null));//清空复制过来的id
                     workOrderBomList = BeanUtil.copyToList(bomDetailList, WorkOrderBom.class);
                 }
             }
-//            for (WorkOrderBom workOrderBomVo : workOrderBomList) {
-//                workOrderBomVo.setId(null);//清空id
-//            }
         }
+
         List<WorkOrderBomVo> workOrderBomVos = BeanUtil.copyToList(workOrderBomList, WorkOrderBomVo.class);
         //赋值产品明细
         productInfoService.attributeAssign(workOrderBomVos, WorkOrderBomVo::getProductId, (item, productInfo) -> {

+ 66 - 53
hx-mes/src/main/java/com/fjhx/mes/service/work/impl/WorkOrderServiceImpl.java

@@ -20,6 +20,7 @@ import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.mes.entity.bom.dto.BomInfoDto;
 import com.fjhx.mes.entity.bom.po.BomDetail;
 import com.fjhx.mes.entity.bom.po.BomInfo;
+import com.fjhx.mes.entity.bom.vo.BomInfoVo;
 import com.fjhx.mes.entity.production.po.ProductionPlan;
 import com.fjhx.mes.entity.production.po.ProductionProcesses;
 import com.fjhx.mes.entity.production.po.ProductionTask;
@@ -218,6 +219,15 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
         workOrderDto.setCode(codingRuleService.createCode(CodingRuleEnum.JXST_WORK_ORDER.getKey(), null));
         workOrderDto.setStatus(0);
         this.save(workOrderDto);
+
+        //创建工单BOM(将基本BOM拷贝一份)
+        BomInfoVo productBom = bomInfoService.getProductBom(workOrderDto.getProductId());
+        if(ObjectUtil.isNotEmpty(productBom)) {
+            List<WorkOrderBom> workOrderBomList = BeanUtil.copyToList(productBom.getBomDetailVoList(), WorkOrderBom.class);
+            if (ObjectUtil.isNotEmpty(workOrderBomList)) {
+                workOrderBomService.saveBatch(workOrderBomList);
+            }
+        }
     }
 
     @Override
@@ -369,34 +379,34 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
      *
      * @return
      */
-    @Override
-    public List<BomDetail> getBomInfo(WorkOrder workOrder) {
-        //获取产品信息
-        ProductInfo productInfo = productInfoService.getById(workOrder.getProductId());
-        if (ObjectUtil.isEmpty(productInfo)) {
-            throw new ServiceException("查询不到产品信息 产品id->" + workOrder.getProductId());
-        }
-
-        //搜索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());
-        }
-        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;
-    }
+//    @Override
+//    public List<BomDetail> getBomInfo(WorkOrder workOrder) {
+//        //获取产品信息
+//        ProductInfo productInfo = productInfoService.getById(workOrder.getProductId());
+//        if (ObjectUtil.isEmpty(productInfo)) {
+//            throw new ServiceException("查询不到产品信息 产品id->" + workOrder.getProductId());
+//        }
+//
+//        //搜索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());
+//        }
+//        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
@@ -513,31 +523,34 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
                 .set(WorkOrder::getUpdateUser, SecurityUtils.getUserId())
         );
 
-        //判断定制还是非定制
-        if (Objects.equals(workOrder.getIsCustomized(), "1")) {
-            //定制-修改定制BOM
-            workOrderBomService.edit(workOrderBomDto);
-        } else {
-            //非定制-修改普通BOM
-            List<WorkOrderBom> workOrderBomList = workOrderBomDto.getWorkOrderBomList();
-            //将数据转换成普通BOM
-            BomInfoDto bomInfoDto = new BomInfoDto();
-            List<BomDetail> bomDetailList = BeanUtil.copyToList(workOrderBomList, BomDetail.class);
-            bomInfoDto.setBomDetailList(bomDetailList);
-
-            //查询基本BOM
-            BomInfo bomInfo = bomInfoService.getOne(q -> q.eq(BomInfo::getProductId, workOrder.getProductId()).eq(BomInfo::getCurrentVersion, 1));
-            if (ObjectUtil.isNotEmpty(bomInfo)) {
-                //修改
-                bomInfoDto.setId(bomInfo.getId());
-                bomInfoService.editByJxst(bomInfoDto);
-            } else {
-                //添加
-                bomInfoDto.setAddType(1);
-                bomInfoDto.setProductId(workOrder.getProductId());
-                bomInfoService.addByJxst(bomInfoDto);
-            }
-        }
+        //所有工单BOM会复制一份 工单调整BOM直接调工单BOM
+        workOrderBomService.edit(workOrderBomDto);
+
+//        //判断定制还是非定制
+//        if (Objects.equals(workOrder.getIsCustomized(), "1")) {
+//            //定制-修改定制BOM
+//            workOrderBomService.edit(workOrderBomDto);
+//        } else {
+//            //非定制-修改普通BOM
+//            List<WorkOrderBom> workOrderBomList = workOrderBomDto.getWorkOrderBomList();
+//            //将数据转换成普通BOM
+//            BomInfoDto bomInfoDto = new BomInfoDto();
+//            List<BomDetail> bomDetailList = BeanUtil.copyToList(workOrderBomList, BomDetail.class);
+//            bomInfoDto.setBomDetailList(bomDetailList);
+//
+//            //查询基本BOM
+//            BomInfo bomInfo = bomInfoService.getOne(q -> q.eq(BomInfo::getProductId, workOrder.getProductId()).eq(BomInfo::getCurrentVersion, 1));
+//            if (ObjectUtil.isNotEmpty(bomInfo)) {
+//                //修改
+//                bomInfoDto.setId(bomInfo.getId());
+//                bomInfoService.editByJxst(bomInfoDto);
+//            } else {
+//                //添加
+//                bomInfoDto.setAddType(1);
+//                bomInfoDto.setProductId(workOrder.getProductId());
+//                bomInfoService.addByJxst(bomInfoDto);
+//            }
+//        }
 
         //检查工单状态
         checkWorkOrderStatus(workOrderId);