浏览代码

生产任务流转

yzc 2 年之前
父节点
当前提交
8d0f949833

+ 20 - 4
hx-mes/src/main/java/com/fjhx/mes/controller/production/ProductionTaskDetailController.java

@@ -33,11 +33,27 @@ public class ProductionTaskDetailController {
     }
 
     /**
-     * 生产任务明细编辑
+     * 生产任务流转
      */
-    @PostMapping("/edit")
-    public void edit(@RequestBody ProductionTaskDetailDto productionTaskDetailDto) {
-        productionTaskDetailService.edit(productionTaskDetailDto);
+    @PostMapping("/circulation")
+    public void circulation(@RequestBody ProductionTaskDetailDto productionTaskDetailDto) {
+        productionTaskDetailService.circulation(productionTaskDetailDto);
+    }
+
+    /**
+     * 生产任务完工入库
+     */
+    @PostMapping("/productStorage")
+    public void productStorage(@RequestBody ProductionTaskDetailDto productionTaskDetailDto) {
+        productionTaskDetailService.productStorage(productionTaskDetailDto.getId());
+    }
+
+    /**
+     * 生产任务接收
+     */
+    @PostMapping("/receive")
+    public void receive(@RequestBody ProductionTaskDetailDto productionTaskDetailDto) {
+        productionTaskDetailService.receive(productionTaskDetailDto);
     }
 
 }

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

@@ -15,6 +15,11 @@ import lombok.Setter;
 public class ProductionTaskDetailVo extends ProductionTaskDetail {
 
     /**
+     * 产品名
+     */
+    private String productName;
+
+    /**
      * 工序名称
      */
     private String productionProcessesName;

+ 4 - 4
hx-mes/src/main/java/com/fjhx/mes/service/production/ProductionTaskDetailService.java

@@ -23,9 +23,9 @@ public interface ProductionTaskDetailService extends BaseService<ProductionTaskD
      */
     Page<ProductionTaskDetailVo> getPage(ProductionTaskDetailSelectDto dto);
 
-    /**
-     * 生产任务明细编辑
-     */
-    void edit(ProductionTaskDetailDto productionTaskDetailDto);
+    void circulation(ProductionTaskDetailDto productionTaskDetailDto);
+
+    void productStorage(Long id);
 
+    void receive(ProductionTaskDetailDto productionTaskDetailDto);
 }

+ 117 - 49
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionTaskDetailServiceImpl.java

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

+ 4 - 1
hx-mes/src/main/resources/mapper/production/ProductionTaskDetailMapper.xml

@@ -14,7 +14,10 @@
             ptd.create_user,
             ptd.create_time,
             ptd.update_user,
-            ptd.update_time
+            ptd.update_time,
+            ptd.next_production_processes_id,
+            ptd.circulation_user_id,
+            ptd.circulation_status
         from production_task_detail ptd
             ${ew.customSqlSegment}
     </select>