|
@@ -3,6 +3,7 @@ package com.fjhx.mes.service.production.impl;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.fjhx.item.service.product.ProductInfoService;
|
|
|
import com.fjhx.mes.entity.applicable.po.ApplicableProducts;
|
|
|
import com.fjhx.mes.entity.production.dto.ProductionTaskDetailDto;
|
|
|
import com.fjhx.mes.entity.production.dto.ProductionTaskDetailSelectDto;
|
|
@@ -15,19 +16,30 @@ import com.fjhx.mes.entity.technology.po.Technology;
|
|
|
import com.fjhx.mes.entity.work.po.WorkOrder;
|
|
|
import com.fjhx.mes.entity.work.po.WorkOrderProductionProcesses;
|
|
|
import com.fjhx.mes.mapper.production.ProductionTaskDetailMapper;
|
|
|
+import com.fjhx.mes.service.applicable.ApplicableProductsService;
|
|
|
import com.fjhx.mes.service.production.ProductionPlanService;
|
|
|
import com.fjhx.mes.service.production.ProductionTaskDetailRecordService;
|
|
|
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.WorkOrderProductionProcessesService;
|
|
|
import com.fjhx.mes.service.work.WorkOrderService;
|
|
|
+import com.fjhx.wms.entity.stock.emums.StockWaitType;
|
|
|
+import com.fjhx.wms.entity.stock.po.StockWait;
|
|
|
+import com.fjhx.wms.entity.stock.po.StockWaitDetails;
|
|
|
+import com.fjhx.wms.service.stock.StockWaitDetailsService;
|
|
|
+import com.fjhx.wms.service.stock.StockWaitService;
|
|
|
import com.obs.services.internal.ServiceException;
|
|
|
import com.ruoyi.common.utils.SecurityUtils;
|
|
|
import com.ruoyi.common.utils.wrapper.IWrapper;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.Date;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
/**
|
|
@@ -50,6 +62,16 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
|
|
|
private WorkOrderService workOrderService;
|
|
|
@Autowired
|
|
|
private WorkOrderProductionProcessesService workOrderProductionProcessesService;
|
|
|
+ @Autowired
|
|
|
+ private ApplicableProductsService applicableProductsService;
|
|
|
+ @Autowired
|
|
|
+ private TechnologyService technologyService;
|
|
|
+ @Autowired
|
|
|
+ private StockWaitService stockWaitService;
|
|
|
+ @Autowired
|
|
|
+ private StockWaitDetailsService stockWaitDetailsService;
|
|
|
+ @Autowired
|
|
|
+ private ProductInfoService productInfoService;
|
|
|
|
|
|
@Override
|
|
|
public Page<ProductionTaskDetailVo> getPage(ProductionTaskDetailSelectDto dto) {
|
|
@@ -58,17 +80,34 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
|
|
|
wrapper.eq(ProductionTaskDetail::getPersonLiableId, SecurityUtils.getUserId());
|
|
|
wrapper.orderByDesc("ptd", ProductionTaskDetail::getId);
|
|
|
Page<ProductionTaskDetailVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
|
|
|
+ List<ProductionTaskDetailVo> records = page.getRecords();
|
|
|
+ //赋值产品名
|
|
|
+ productInfoService.attributeAssign(records, ProductionTaskDetailVo::getProductId, (item, productInfo) -> {
|
|
|
+ item.setProductName(productInfo.getName());
|
|
|
+ });
|
|
|
+ //赋值当前工序名 目标工序名
|
|
|
+ List<Long> productionTaskIds = records.stream().map(ProductionTaskDetail::getProductionTaskId).collect(Collectors.toList());
|
|
|
+ List<Long> productionPlanIds = productionTaskService.listObject(ProductionTask::getProductionPlanId, q -> q.in(ProductionTask::getId, productionTaskIds));
|
|
|
+// workOrderService.listObject()
|
|
|
+ for (ProductionTaskDetailVo record : records) {
|
|
|
+// ProductionTask productionTask = productionTaskService.getById(record.getProductionTaskId());
|
|
|
+// ProductionPlan productionPlan = productionPlanService.getById(productionTask.getId());
|
|
|
+// WorkOrder workOrder = workOrderService.getById(productionPlan.getWorkOrderId());
|
|
|
+// //如果是定制工单差定制工序
|
|
|
+// if("1".equals(workOrder.getIsCustomized())){
|
|
|
+// Map<Long, String> stringMap = workOrderProductionProcessesService.mapKV(WorkOrderProductionProcesses::getId, WorkOrderProductionProcesses::getName, q -> q
|
|
|
+// .eq(WorkOrderProductionProcesses::getWorkOrderId, workOrder.getId())
|
|
|
+// .orderByAsc(WorkOrderProductionProcesses::getSort));
|
|
|
+//
|
|
|
+// }
|
|
|
+ }
|
|
|
return page;
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public void edit(ProductionTaskDetailDto productionTaskDetailDto) {
|
|
|
- this.updateById(productionTaskDetailDto);
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 任务流转
|
|
|
*/
|
|
|
+ @Override
|
|
|
public void circulation(ProductionTaskDetailDto productionTaskDetailDto) {
|
|
|
//修改流转状态
|
|
|
productionTaskDetailDto.setCirculationStatus(1);
|
|
@@ -77,9 +116,34 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
|
|
|
this.updateById(productionTaskDetailDto);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void productStorage(Long id) {
|
|
|
+ ProductionTaskDetail productionTaskDetail = getById(id);
|
|
|
+ if (ObjectUtil.isEmpty(productionTaskDetail)) {
|
|
|
+ throw new ServiceException("未查询到任务明细信息");
|
|
|
+ }
|
|
|
+ productionTaskDetail.setFinishStatus(1);//标记为完成
|
|
|
+ productionTaskDetail.setFinishTime(new Date());//记录完成时间
|
|
|
+ this.updateById(productionTaskDetail);
|
|
|
+
|
|
|
+ StockWait stockWait = new StockWait();
|
|
|
+ stockWait.setType(1);//入库
|
|
|
+ stockWait.setStatus(0);//待入库
|
|
|
+ stockWait.setBusinessType(StockWaitType.COMPLETION_IN.getDetailType());//
|
|
|
+ stockWait.setBusinessId(productionTaskDetail.getId());//生产任务明细id
|
|
|
+ stockWait.setBusinessCode(productionTaskDetail.getProductSn());//产品sn
|
|
|
+ stockWaitService.save(stockWait);
|
|
|
+ StockWaitDetails stockWaitDetails = new StockWaitDetails();
|
|
|
+ stockWaitDetails.setStockWaitId(stockWait.getId());
|
|
|
+ stockWaitDetails.setProductId(productionTaskDetail.getProductId());
|
|
|
+ stockWaitDetails.setQuantity(BigDecimal.ONE);//生产任务明细入库 数量默认只有1
|
|
|
+ stockWaitDetailsService.save(stockWaitDetails);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 任务流转接收
|
|
|
*/
|
|
|
+ @Override
|
|
|
public void receive(ProductionTaskDetailDto productionTaskDetailDto) {
|
|
|
//修改流转状态
|
|
|
productionTaskDetailDto.setCirculationStatus(0);
|
|
@@ -89,49 +153,54 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
|
|
|
productionTaskDetailDto.setPersonLiableId(SecurityUtils.getUserId());
|
|
|
|
|
|
//赋值下一工序相关信息
|
|
|
-// ProductionTask productionTask = productionTaskService.getById(productionTaskDetailDto.getProductionTaskId());
|
|
|
-// ProductionPlan productionPlan = productionPlanService.getById(productionTask.getProductionPlanId());
|
|
|
-// WorkOrder workOrder = workOrderService.getById(productionPlan.getWorkOrderId());
|
|
|
-// if ("1".equals(workOrder.getIsCustomized())) {
|
|
|
-// List<WorkOrderProductionProcesses> workOrderProductionProcesses = workOrderProductionProcessesService.list(q -> q
|
|
|
-// .eq(WorkOrderProductionProcesses::getWorkOrderId, workOrder.getId())
|
|
|
-// .orderByAsc(WorkOrderProductionProcesses::getSort));
|
|
|
-// if (ObjectUtil.isEmpty(workOrderProductionProcesses)) {
|
|
|
-// throw new ServiceException("定制工单 工序列表为空");
|
|
|
-// }
|
|
|
-//
|
|
|
-// for (int i = 0; i < workOrderProductionProcesses.size(); i++) {
|
|
|
-// WorkOrderProductionProcesses wopp = workOrderProductionProcesses.get(i);
|
|
|
-// if(wopp.getId().equals(productionTaskDetailDto.getProductionProcessesId())){
|
|
|
-//
|
|
|
-// }
|
|
|
-// }
|
|
|
-//
|
|
|
-// productionProcessesId = workOrderProductionProcesses.get(0).getId();
|
|
|
-// //赋值下一工序id
|
|
|
-// if (workOrderProductionProcesses.size() > 1) {
|
|
|
-// nextProductionProcessesId = workOrderProductionProcesses.get(1).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]);
|
|
|
-// //赋值下一工序id
|
|
|
-// if (split.length > 1) {
|
|
|
-// nextProductionProcessesId = Long.valueOf(split[1]);
|
|
|
-// }
|
|
|
-// }
|
|
|
+ ProductionTask productionTask = productionTaskService.getById(productionTaskDetailDto.getProductionTaskId());
|
|
|
+ ProductionPlan productionPlan = productionPlanService.getById(productionTask.getProductionPlanId());
|
|
|
+ WorkOrder workOrder = workOrderService.getById(productionPlan.getWorkOrderId());
|
|
|
+ if ("1".equals(workOrder.getIsCustomized())) {
|
|
|
+ List<WorkOrderProductionProcesses> workOrderProductionProcesses = workOrderProductionProcessesService.list(q -> q
|
|
|
+ .eq(WorkOrderProductionProcesses::getWorkOrderId, workOrder.getId())
|
|
|
+ .orderByAsc(WorkOrderProductionProcesses::getSort));
|
|
|
+ if (ObjectUtil.isEmpty(workOrderProductionProcesses)) {
|
|
|
+ throw new ServiceException("定制工单 工序列表为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ //赋值下一工序id
|
|
|
+ for (int i = 0; i < workOrderProductionProcesses.size(); i++) {
|
|
|
+ WorkOrderProductionProcesses wopp = workOrderProductionProcesses.get(i);
|
|
|
+ if (wopp.getId().equals(productionTaskDetailDto.getProductionProcessesId())) {
|
|
|
+ //默认赋值空 如果有下一节点赋值下一节点id
|
|
|
+ productionTaskDetailDto.setNextProductionProcessesId(null);
|
|
|
+ if ((i + 1) < workOrderProductionProcesses.size()) {
|
|
|
+ WorkOrderProductionProcesses nextProductionProcesses = workOrderProductionProcesses.get(i + 1);
|
|
|
+ productionTaskDetailDto.setNextProductionProcessesId(nextProductionProcesses.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(",");
|
|
|
+ //赋值下一工序id
|
|
|
+ for (int i = 0; i < split.length; i++) {
|
|
|
+ if (split[i].equals(productionTaskDetailDto.getProductionProcessesId())) {
|
|
|
+ //默认赋值空 如果有下一节点赋值下一节点id
|
|
|
+ productionTaskDetailDto.setNextProductionProcessesId(null);
|
|
|
+ if ((i + 1) < split.length) {
|
|
|
+ productionTaskDetailDto.setNextProductionProcessesId(Long.parseLong(split[i + 1]));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
this.updateById(productionTaskDetailDto);
|
|
|
|
|
@@ -141,7 +210,6 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
|
|
|
productionTaskDetailRecord.setProductionProcessesId(productionTaskDetailDto.getProductionProcessesId());
|
|
|
productionTaskDetailRecord.setPersonLiableId(SecurityUtils.getUserId());
|
|
|
productionTaskDetailRecordService.save(productionTaskDetailRecord);
|
|
|
-
|
|
|
}
|
|
|
|
|
|
}
|