|
@@ -1,5 +1,6 @@
|
|
|
package com.fjhx.mes.service.production.impl;
|
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
@@ -7,19 +8,29 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
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.po.BomInfo;
|
|
|
import com.fjhx.mes.entity.production.dto.ProductionTaskDto;
|
|
|
import com.fjhx.mes.entity.production.dto.ProductionTaskSelectDto;
|
|
|
import com.fjhx.mes.entity.production.po.ProductionPlan;
|
|
|
import com.fjhx.mes.entity.production.po.ProductionTask;
|
|
|
+import com.fjhx.mes.entity.production.po.ProductionTaskDetail;
|
|
|
import com.fjhx.mes.entity.production.vo.ProductionTaskVo;
|
|
|
+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.mapper.production.ProductionTaskMapper;
|
|
|
+import com.fjhx.mes.service.applicable.ApplicableProductsService;
|
|
|
import com.fjhx.mes.service.bom.BomDetailService;
|
|
|
import com.fjhx.mes.service.bom.BomInfoService;
|
|
|
import com.fjhx.mes.service.production.ProductionPlanService;
|
|
|
+import com.fjhx.mes.service.production.ProductionTaskDetailService;
|
|
|
import com.fjhx.mes.service.production.ProductionTaskService;
|
|
|
+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.mes.utils.code.CodeEnum;
|
|
|
import com.fjhx.wms.entity.stock.emums.StockWaitType;
|
|
@@ -65,6 +76,16 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
|
|
|
private StockWaitService stockWaitService;
|
|
|
@Autowired
|
|
|
private StockWaitDetailsService stockWaitDetailsService;
|
|
|
+ @Autowired
|
|
|
+ private WorkOrderBomService workOrderBomService;
|
|
|
+ @Autowired
|
|
|
+ private WorkOrderProductionProcessesService workOrderProductionProcessesService;
|
|
|
+ @Autowired
|
|
|
+ private TechnologyService technologyService;
|
|
|
+ @Autowired
|
|
|
+ private ApplicableProductsService applicableProductsService;
|
|
|
+ @Autowired
|
|
|
+ private ProductionTaskDetailService productionTaskDetailService;
|
|
|
|
|
|
@Override
|
|
|
public Page<ProductionTaskVo> getPage(ProductionTaskSelectDto dto) {
|
|
@@ -123,20 +144,30 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
|
|
|
ProductionPlan productionPlan = productionPlanService.getById(productionPlanId);
|
|
|
productionPlan.setStatus(1);
|
|
|
productionPlanService.updateById(productionPlan);
|
|
|
- //添加待出库数据
|
|
|
- //查询工单中的产品信息
|
|
|
+
|
|
|
+ //根据工单是否是定制工单 创建BOM待出库数据
|
|
|
WorkOrder workOrder = workOrderService.getById(productionPlan.getWorkOrderId());
|
|
|
if (ObjectUtil.isEmpty(workOrder)) {
|
|
|
throw new ServiceException("查询不到该任务的工单信息");
|
|
|
}
|
|
|
- //查询BOM信息
|
|
|
- BomInfo bomInfo = bomInfoService.getOne(q -> q.eq(BomInfo::getProductId, workOrder.getProductId()));
|
|
|
- if (ObjectUtil.isEmpty(bomInfo)) {
|
|
|
- throw new ServiceException("查询不到产品的BOM信息");
|
|
|
- }
|
|
|
- List<BomDetail> bomDetailList = bomDetailService.list(q -> q.eq(BomDetail::getBomInfoId, bomInfo.getId()));
|
|
|
- if (ObjectUtil.isEmpty(bomDetailList)) {
|
|
|
- throw new ServiceException("查询不到BOM明细");
|
|
|
+
|
|
|
+ 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()));
|
|
|
+ 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();
|
|
@@ -178,4 +209,68 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
|
|
|
return baseMapper.myListByIds(queryWrapper);
|
|
|
}
|
|
|
|
|
|
+ @DSTransactional
|
|
|
+ @Override
|
|
|
+ public void addByJxst(ProductionTaskDto productionTaskDto) {
|
|
|
+ add(productionTaskDto);
|
|
|
+ //获取生产计划信息
|
|
|
+ ProductionPlan productionPlan = productionPlanService.getById(productionTaskDto.getProductionPlanId());
|
|
|
+ if (ObjectUtil.isEmpty(productionPlan)) {
|
|
|
+ throw new ServiceException("查询不到该任务的生产计划信息");
|
|
|
+ }
|
|
|
+ //获取工单信息
|
|
|
+ WorkOrder workOrder = workOrderService.getById(productionPlan.getWorkOrderId());
|
|
|
+ if (ObjectUtil.isEmpty(workOrder)) {
|
|
|
+ throw new ServiceException("查询不到该任务的工单信息");
|
|
|
+ }
|
|
|
+ //判断是否为定制 获取工序信息
|
|
|
+ Long productionProcessesId;
|
|
|
+ if ("1".equals(workOrder.getIsCustomized())) {
|
|
|
+ WorkOrderProductionProcesses workOrderProductionProcesses = workOrderProductionProcessesService.getOne(q -> q
|
|
|
+ .eq(WorkOrderProductionProcesses::getWorkOrderId, workOrder.getId())
|
|
|
+ .orderByAsc(WorkOrderProductionProcesses::getSort));
|
|
|
+ if (ObjectUtil.isEmpty(workOrderProductionProcesses)) {
|
|
|
+ throw new ServiceException("定制工单 工序列表为空");
|
|
|
+ }
|
|
|
+ productionProcessesId = workOrderProductionProcesses.getId();
|
|
|
+ } else {
|
|
|
+ ApplicableProducts applicableProducts = applicableProductsService.getOne(q -> q.eq(ApplicableProducts::getProductId, workOrder.getProductId()));
|
|
|
+ if (ObjectUtil.isEmpty(applicableProducts)) {
|
|
|
+ throw new ServiceException("未找到适用于该产品的工艺信息");
|
|
|
+ }
|
|
|
+ Technology technology = technologyService.getById(applicableProducts.getTechnologyId());
|
|
|
+ if (ObjectUtil.isEmpty(technology)) {
|
|
|
+ throw new ServiceException("工艺信息不存在");
|
|
|
+ }
|
|
|
+ String processRoute = technology.getProcessRoute();
|
|
|
+ if (ObjectUtil.isEmpty(processRoute)) {
|
|
|
+ throw new ServiceException("工艺线路为空");
|
|
|
+ }
|
|
|
+ String[] split = processRoute.split(",");
|
|
|
+ productionProcessesId = Long.valueOf(split[0]);
|
|
|
+ }
|
|
|
+ //创建任务明细
|
|
|
+ List<ProductionTaskDetail> productionTaskDetailList = new ArrayList<>();
|
|
|
+ for (int i = 0; i < productionTaskDto.getQuantity().intValue(); i++) {
|
|
|
+ ProductionTaskDetail productionTaskDetail = new ProductionTaskDetail();
|
|
|
+ productionTaskDetail.setProductionTaskId(productionTaskDto.getId());//任务id
|
|
|
+ productionTaskDetail.setFinishStatus(0);//默认状态未完工
|
|
|
+ productionTaskDetail.setProductId(workOrder.getProductId());//产品id
|
|
|
+ productionTaskDetail.setProductionProcessesId(productionProcessesId);//第一个工序id
|
|
|
+ //生成SN
|
|
|
+ productionTaskDetail.setProductSn(String.format("%s-%03d", productionTaskDto.getCode(), i + 1));
|
|
|
+ productionTaskDetail.setPersonChargeId(productionTaskDto.getPersonLiableId());//负责人ID
|
|
|
+ productionTaskDetailList.add(productionTaskDetail);
|
|
|
+ }
|
|
|
+ productionTaskDetailService.saveBatch(productionTaskDetailList);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ProductionTaskVo detailByJxst(Long id) {
|
|
|
+ ProductionTaskVo detail = detail(id);
|
|
|
+ List<ProductionTaskDetail> list = productionTaskDetailService.list(q -> q.eq(ProductionTaskDetail::getProductionTaskId, id));
|
|
|
+ detail.setProductionTaskDetailList(list);
|
|
|
+ return detail;
|
|
|
+ }
|
|
|
+
|
|
|
}
|