Răsfoiți Sursa

生产流程适配图形式的工艺线路

yzc 1 an în urmă
părinte
comite
579f388c22

+ 19 - 0
hx-mes/src/main/java/com/fjhx/mes/controller/task/TaskProgressController.java

@@ -0,0 +1,19 @@
+package com.fjhx.mes.controller.task;
+
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * <p>
+ * 任务明细工序过程 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-12
+ */
+@RestController
+@RequestMapping("/taskProgress")
+public class TaskProgressController {
+
+
+}

+ 10 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/production/dto/ProductionTaskDetailDto.java

@@ -20,4 +20,14 @@ public class ProductionTaskDetailDto extends ProductionTaskDetail {
     /**文件列表*/
     List<ObsFile> fileList;
 
+    /**
+     * 生产过程id
+     */
+    private Long taskProgressId;
+
+    /**
+     * 当前工序id
+     */
+    private Long productionProcessesId;
+
 }

+ 37 - 37
hx-mes/src/main/java/com/fjhx/mes/entity/production/po/ProductionTaskDetail.java

@@ -35,10 +35,10 @@ public class ProductionTaskDetail extends BasePo {
      */
     private String productSn;
 
-    /**
-     * 当前工序id
-     */
-    private Long productionProcessesId;
+//    /**
+//     * 当前工序id
+//     */
+//    private Long productionProcessesId;
 
     /**
      * 完成时间
@@ -50,43 +50,43 @@ public class ProductionTaskDetail extends BasePo {
      */
     private Integer finishStatus;
 
-    /**
-     * 负责人id
-     */
-    private Long personLiableId;
-
-    /**
-     * 下一工序id
-     */
-    private Long nextProductionProcessesId;
-    /**
-     * 流转人id
-     */
-    private Long circulationUserId;
-    /**
-     * 流转状态
-     */
-    private Integer circulationStatus;
-
-    /**
-     * 接收人id 作废
-     */
+//    /**
+//     * 负责人id
+//     */
+//    private Long personLiableId;
+
+//    /**
+//     * 下一工序id
+//     */
+//    private Long nextProductionProcessesId;
+//    /**
+//     * 流转人id
+//     */
+//    private Long circulationUserId;
+//    /**
+//     * 流转状态
+//     */
+//    private Integer circulationStatus;
+
+//    /**
+//     * 接收人id 作废
+//     */
 //    private Long receivedUserId;
 
-    /**
-     * 接收时间
-     */
-    private Date receivedTime;
+//    /**
+//     * 接收时间
+//     */
+//    private Date receivedTime;
 
-    /**
-     * 前一道工序id
-     */
-    private Long previousProcessesId;
+//    /**
+//     * 前一道工序id
+//     */
+//    private Long previousProcessesId;
 
-    /**
-     * 工序状态 0未开始 1进行中 2驳回 3完成
-     */
-    private Integer processesStatus;
+//    /**
+//     * 工序状态 0未开始 1进行中 2驳回 3完成
+//     */
+//    private Integer processesStatus;
 
     /**
      * 工单Id

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

@@ -148,4 +148,14 @@ public class ProductionTaskDetailVo extends ProductionTaskDetail {
      * 前一道工序记录id
      */
     private Long previousProcessesRecordId;
+
+    /**
+     * 任务进程id
+     */
+    private Long taskProgressId;
+
+    /**
+     * 当前工序id
+     */
+    private Long productionProcessesId;
 }

+ 17 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/task/dto/TaskProgressDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.mes.entity.task.dto;
+
+import com.fjhx.mes.entity.task.po.TaskProgress;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 任务明细工序过程新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-12-12
+ */
+@Getter
+@Setter
+public class TaskProgressDto extends TaskProgress {
+
+}

+ 17 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/task/dto/TaskProgressSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.mes.entity.task.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 任务明细工序过程列表查询入参实体
+ *
+ * @author 
+ * @since 2023-12-12
+ */
+@Getter
+@Setter
+public class TaskProgressSelectDto extends BaseSelectDto {
+
+}

+ 47 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/task/po/TaskProgress.java

@@ -0,0 +1,47 @@
+package com.fjhx.mes.entity.task.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 任务明细工序过程
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-12
+ */
+@Getter
+@Setter
+@TableName("task_progress")
+public class TaskProgress extends BasePo {
+
+    /**
+     * 生产任务明细id
+     */
+    private Long productionTaskDetailId;
+
+    /**
+     * 工序id
+     */
+    private Long processesId;
+
+    /**
+     * 完成状态 0未开始 1进行中 2已完成
+     */
+    private Integer status;
+
+    /**
+     * 负责人id
+     */
+    private Long personLiableId;
+
+    /**
+     * 接收时间
+     */
+    private Date receivedTime;
+
+}

+ 17 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/task/vo/TaskProgressVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.mes.entity.task.vo;
+
+import com.fjhx.mes.entity.task.po.TaskProgress;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 任务明细工序过程列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-12-12
+ */
+@Getter
+@Setter
+public class TaskProgressVo extends TaskProgress {
+
+}

+ 17 - 0
hx-mes/src/main/java/com/fjhx/mes/mapper/task/TaskProgressMapper.java

@@ -0,0 +1,17 @@
+package com.fjhx.mes.mapper.task;
+
+import com.fjhx.mes.entity.task.po.TaskProgress;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+
+/**
+ * <p>
+ * 任务明细工序过程 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-12
+ */
+public interface TaskProgressMapper extends BaseMapper<TaskProgress> {
+
+}

+ 283 - 137
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionTaskDetailServiceImpl.java

@@ -26,16 +26,22 @@ import com.fjhx.mes.entity.production.dto.ProductionTaskDetailSelectDto;
 import com.fjhx.mes.entity.production.po.*;
 import com.fjhx.mes.entity.production.vo.ProductionTaskDetailRecordVo;
 import com.fjhx.mes.entity.production.vo.ProductionTaskDetailVo;
+import com.fjhx.mes.entity.task.po.TaskProgress;
 import com.fjhx.mes.entity.technology.po.Technology;
+import com.fjhx.mes.entity.technology.po.TechnologyProcessLine;
 import com.fjhx.mes.entity.work.po.WorkOrder;
 import com.fjhx.mes.entity.work.po.WorkOrderBom;
+import com.fjhx.mes.entity.work.po.WorkOrderProcessLine;
 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.task.TaskProgressService;
+import com.fjhx.mes.service.technology.TechnologyProcessLineService;
 import com.fjhx.mes.service.technology.TechnologyService;
 import com.fjhx.mes.service.work.WorkOrderBomService;
+import com.fjhx.mes.service.work.WorkOrderProcessLineService;
 import com.fjhx.mes.service.work.WorkOrderProductionProcessesService;
 import com.fjhx.mes.service.work.WorkOrderService;
 import com.fjhx.socket.core.PushTypeEnum;
@@ -55,6 +61,7 @@ import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.ruoyi.common.utils.wrapper.SqlField;
 import com.ruoyi.system.utils.UserUtil;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.context.event.EventListener;
 import org.springframework.stereotype.Service;
 
@@ -103,6 +110,12 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
     private CustomerService customerService;
     @Autowired
     private WorkOrderBomService workOrderBomService;
+    @Autowired
+    private TaskProgressService taskProgressService;
+    @Autowired
+    private WorkOrderProcessLineService workOrderProcessLineService;
+    @Autowired
+    private TechnologyProcessLineService technologyProcessLineService;
 
     @Override
     public Page<ProductionTaskDetailVo> getPage(ProductionTaskDetailSelectDto dto) {
@@ -114,9 +127,11 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
     public Page<ProductionTaskDetailVo> circulationPage(ProductionTaskDetailSelectDto dto) {
         IWrapper<ProductionTaskDetail> wrapper = getWrapper();
         //过滤负责人为自己的任务
-        wrapper.eq("ptd", ProductionTaskDetail::getPersonLiableId, SecurityUtils.getUserId());
-        //过滤未在流转的记录
-        wrapper.eq("ptd", ProductionTaskDetail::getCirculationStatus, 0);
+        wrapper.eq("tp.person_liable_id", SecurityUtils.getUserId());
+        //过滤进行中的数据
+        wrapper.eq("tp.status",1);
+//        //过滤未在流转的记录
+//        wrapper.eq("ptd", ProductionTaskDetail::getCirculationStatus, 0);
         //过滤未完成的记录
         wrapper.eq("ptd", ProductionTaskDetail::getFinishStatus, 0);
         return pageCom(wrapper, dto);
@@ -133,14 +148,14 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
         }
 
         wrapper.orderByDesc("ptd", ProductionTaskDetail::getId);
-        wrapper.groupBy("ptd.id");
+//        wrapper.groupBy("ptd.id");
         Page<ProductionTaskDetailVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         List<ProductionTaskDetailVo> records = page.getRecords();
         if (ObjectUtil.isEmpty(records)) {
             return new Page<>();
         }
         //赋值流转人名称
-        UserUtil.assignmentNickName(records, ProductionTaskDetailVo::getCirculationUserId, ProductionTaskDetailVo::setCirculationUserName);
+//        UserUtil.assignmentNickName(records, ProductionTaskDetailVo::getCirculationUserId, ProductionTaskDetailVo::setCirculationUserName);
 
         //赋值产品名
         productInfoService.attributeAssign(records, ProductionTaskDetailVo::getProductId, (item, productInfo) -> {
@@ -157,10 +172,10 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
         List<Long> workIds = workOrderByProductionTask.stream().map(WorkOrderVo::getId).collect(Collectors.toList());
 
         //获取工序id列表
-        List<Long> productionProcessesIds = records.stream().map(ProductionTaskDetail::getProductionProcessesId).collect(Collectors.toList());
-        productionProcessesIds.addAll(records.stream().map(ProductionTaskDetail::getNextProductionProcessesId).collect(Collectors.toList()));
-        productionProcessesIds.addAll(records.stream().map(ProductionTaskDetail::getPreviousProcessesId).collect(Collectors.toList()));
-        //获取基本工序map
+        List<Long> productionProcessesIds = records.stream().map(ProductionTaskDetailVo::getProductionProcessesId).collect(Collectors.toList());
+//        productionProcessesIds.addAll(records.stream().map(ProductionTaskDetail::getNextProductionProcessesId).collect(Collectors.toList()));
+//        productionProcessesIds.addAll(records.stream().map(ProductionTaskDetail::getPreviousProcessesId).collect(Collectors.toList()));
+//        //获取基本工序map
         Map<Long, String> stringMap = productionProcessesService.mapKV(ProductionProcesses::getId, ProductionProcesses::getName,
                 q -> q.in(ProductionProcesses::getId, productionProcessesIds));
         //获取定制工序map
@@ -172,19 +187,19 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
             if ("1".equals(workOrderVo.getIsCustomized())) {
                 //如果是定制
                 String name = workOrderProductionPMap.get(record.getProductionProcessesId());
-                String nextName = workOrderProductionPMap.get(record.getNextProductionProcessesId());
-                String previousName = workOrderProductionPMap.get(record.getPreviousProcessesId());
+//                String nextName = workOrderProductionPMap.get(record.getNextProductionProcessesId());
+//                String previousName = workOrderProductionPMap.get(record.getPreviousProcessesId());
                 record.setProductionProcessesName(name);
-                record.setNextProductionProcessesName(nextName);
-                record.setPreviousProcessesName(previousName);
+//                record.setNextProductionProcessesName(nextName);
+//                record.setPreviousProcessesName(previousName);
             } else {
                 //不是定制
                 String name = stringMap.get(record.getProductionProcessesId());
-                String nextName = stringMap.get(record.getNextProductionProcessesId());
-                String previousName = stringMap.get(record.getPreviousProcessesId());
+//                String nextName = stringMap.get(record.getNextProductionProcessesId());
+//                String previousName = stringMap.get(record.getPreviousProcessesId());
                 record.setProductionProcessesName(name);
-                record.setNextProductionProcessesName(nextName);
-                record.setPreviousProcessesName(previousName);
+//                record.setNextProductionProcessesName(nextName);
+//                record.setPreviousProcessesName(previousName);
             }
         }
 
@@ -203,52 +218,156 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
     public synchronized void circulation(ProductionTaskDetailDto dto) {
         ProductionTaskDetail productionTaskDetail = this.getById(dto.getId());
 
-        if (Objects.equals(productionTaskDetail.getCirculationStatus(), 1)) {
+        Long taskProgressId = dto.getTaskProgressId();
+        TaskProgress taskProgress = taskProgressService.getById(taskProgressId);
+
+        if (Objects.equals(taskProgress.getStatus(), 2)) {
             throw new ServiceException("该任务已被提交,请重试或刷新!");
         }
 
+        //修改状态为已完成
+        taskProgress.setStatus(2);
+        taskProgressService.updateById(taskProgress);
+
         //创建任务明细记录
         ProductionTaskDetailRecord productionTaskDetailRecord = new ProductionTaskDetailRecord();
         productionTaskDetailRecord.setProductionTaskDetailId(productionTaskDetail.getId());
-        productionTaskDetailRecord.setProductionProcessesId(productionTaskDetail.getProductionProcessesId());
+        productionTaskDetailRecord.setProductionProcessesId(taskProgress.getProcessesId());
         productionTaskDetailRecord.setPersonLiableId(SecurityUtils.getUserId());
-        productionTaskDetailRecord.setReceivedTime(productionTaskDetail.getReceivedTime());
+        productionTaskDetailRecord.setReceivedTime(taskProgress.getReceivedTime());
         productionTaskDetailRecordService.save(productionTaskDetailRecord);
 
-        //修改流转状态
-        productionTaskDetail.setCirculationStatus(1);
-        //赋值流转人id
-        productionTaskDetail.setCirculationUserId(SecurityUtils.getUserId());
-
-        //赋值上一道工序 为当前工序
-        productionTaskDetail.setPreviousProcessesId(productionTaskDetail.getProductionProcessesId());
-
-        //将下一工序赋值到当前工序
-        productionTaskDetail.setProductionProcessesId(productionTaskDetail.getNextProductionProcessesId());
-        //清空下一工序
-        productionTaskDetail.setNextProductionProcessesId(-1l);
-        //查找下一工序相关信息 如果有则赋值
-        ProductionTask productionTask = productionTaskService.getById(productionTaskDetail.getProductionTaskId());
-        ProductionPlan productionPlan = productionPlanService.getById(productionTask.getProductionPlanId());
-        WorkOrder workOrder = workOrderService.getById(productionPlan.getWorkOrderId());
-        List<WorkOrderProductionProcesses> productionProcessesList = workOrderService.getProductionProcessesList(workOrder);
-        //赋值下一工序id
-        for (int i = 0; i < productionProcessesList.size(); i++) {
-            WorkOrderProductionProcesses wopp = productionProcessesList.get(i);
-            if (wopp.getId().equals(productionTaskDetail.getProductionProcessesId())) {
-                //默认赋值空 如果有下一节点赋值下一节点id
-                if ((i + 1) < productionProcessesList.size()) {
-                    WorkOrderProductionProcesses nextProductionProcesses = productionProcessesList.get(i + 1);
-                    productionTaskDetail.setNextProductionProcessesId(nextProductionProcesses.getId());
-                    break;
+        //检查下一工序信息
+        List<Long> nextProcessIdList = new ArrayList<>();
+        Long workOrderId = productionTaskDetail.getWorkOrderId();
+        WorkOrder workOrder = workOrderService.getById(workOrderId);
+        if(Objects.equals(workOrder.getIsCustomized(),"1")){
+            //定制
+
+            //获取父节点id
+            List<Long> longs = workOrderProcessLineService.listObject(WorkOrderProcessLine::getSourceProcessesId, q -> q
+                    .eq(WorkOrderProcessLine::getWorkOrderId, workOrderId)
+                    .eq(WorkOrderProcessLine::getTargetProcessesId, taskProgress.getProcessesId())
+            );
+            //获取同级节点
+            List<Long> longs1 = workOrderProcessLineService.listObject(WorkOrderProcessLine::getTargetProcessesId, q -> q
+                    .eq(WorkOrderProcessLine::getWorkOrderId, workOrderId)
+                    .in(WorkOrderProcessLine::getSourceProcessesId, longs)
+            );
+            //检查同级节点是否完成
+            long count = taskProgressService.count(q -> q
+                    .eq(TaskProgress::getProductionTaskDetailId, dto.getId())
+                    .in(TaskProgress::getProcessesId, longs1)
+                    .ne(TaskProgress::getStatus, 2)
+            );
+            if(count==0){
+                //统计节点已经完成,生成下级节点的任务
+                List<Long> longs2 = workOrderProcessLineService.listObject(WorkOrderProcessLine::getTargetProcessesId, q -> q
+                        .eq(WorkOrderProcessLine::getWorkOrderId, workOrderId)
+                        .eq(WorkOrderProcessLine::getSourceProcessesId, taskProgress.getProcessesId())
+                        .ne(WorkOrderProcessLine::getTargetProcessesId, 99)
+                );
+                if(ObjectUtil.isEmpty(longs2)){
+                    //完工入库
+                    productStorage(dto);
+                }else{
+                    //生成下一节点任务信息
+                    List<TaskProgress> taskProgressList = new ArrayList<>();
+                    for (Long aLong : longs2) {
+                        TaskProgress taskProgress1 = new TaskProgress();
+                        taskProgress1.setProductionTaskDetailId(productionTaskDetail.getId());
+                        taskProgress1.setProcessesId(aLong);
+                        taskProgress1.setStatus(0);
+                        taskProgressList.add(taskProgress1);
+                        nextProcessIdList.add(aLong);
+                    }
+                    taskProgressService.saveBatch(taskProgressList);
+                }
+            }
+        }else{
+            //非定制
+            ApplicableProducts applicableProducts = applicableProductsService.getOne(q -> q
+                    .eq(ApplicableProducts::getProductId, productionTaskDetail.getProductId())
+            );
+            Long technologyId = applicableProducts.getTechnologyId();
+
+            //获取父节点id
+            List<Long> longs = technologyProcessLineService.listObject(TechnologyProcessLine::getSourceProcessesId, q -> q
+                    .eq(TechnologyProcessLine::getTechnologyId, technologyId)
+                    .eq(TechnologyProcessLine::getTargetProcessesId, taskProgress.getProcessesId())
+            );
+            //获取同级节点
+            List<Long> longs1 = technologyProcessLineService.listObject(TechnologyProcessLine::getTargetProcessesId, q -> q
+                    .eq(TechnologyProcessLine::getTechnologyId, technologyId)
+                    .in(TechnologyProcessLine::getSourceProcessesId, longs)
+            );
+            //检查同级节点是否完成
+            long count = taskProgressService.count(q -> q
+                    .eq(TaskProgress::getProductionTaskDetailId, dto.getId())
+                    .in(TaskProgress::getProcessesId, longs1)
+                    .ne(TaskProgress::getStatus, 2)
+            );
+            if(count==0){
+                //统计节点已经完成,生成下级节点的任务
+                List<Long> longs2 = technologyProcessLineService.listObject(TechnologyProcessLine::getTargetProcessesId, q -> q
+                        .eq(TechnologyProcessLine::getTechnologyId, technologyId)
+                        .eq(TechnologyProcessLine::getSourceProcessesId, taskProgress.getProcessesId())
+                        .ne(TechnologyProcessLine::getTargetProcessesId, 99)
+                );
+                if(ObjectUtil.isEmpty(longs2)){
+                    //完工入库
+                    productStorage(dto);
+                }else{
+                    //生成下一节点任务信息
+                    List<TaskProgress> taskProgressList = new ArrayList<>();
+                    for (Long aLong : longs2) {
+                        TaskProgress taskProgress1 = new TaskProgress();
+                        taskProgress1.setProductionTaskDetailId(productionTaskDetail.getId());
+                        taskProgress1.setProcessesId(aLong);
+                        taskProgress1.setStatus(0);
+                        taskProgressList.add(taskProgress1);
+                        nextProcessIdList.add(aLong);
+                    }
+                    taskProgressService.saveBatch(taskProgressList);
                 }
             }
         }
 
-        //设置当前工序状态未开始
-        productionTaskDetail.setProcessesStatus(0);
-        //清空负责人
-        productionTaskDetail.setPersonLiableId(-1L);
+
+//        //修改流转状态
+//        productionTaskDetail.setCirculationStatus(1);
+//        //赋值流转人id
+//        productionTaskDetail.setCirculationUserId(SecurityUtils.getUserId());
+//
+//        //赋值上一道工序 为当前工序
+//        productionTaskDetail.setPreviousProcessesId(productionTaskDetail.getProductionProcessesId());
+//
+//        //将下一工序赋值到当前工序
+//        productionTaskDetail.setProductionProcessesId(productionTaskDetail.getNextProductionProcessesId());
+//        //清空下一工序
+//        productionTaskDetail.setNextProductionProcessesId(-1l);
+//        //查找下一工序相关信息 如果有则赋值
+//        ProductionTask productionTask = productionTaskService.getById(productionTaskDetail.getProductionTaskId());
+//        ProductionPlan productionPlan = productionPlanService.getById(productionTask.getProductionPlanId());
+//        WorkOrder workOrder = workOrderService.getById(productionPlan.getWorkOrderId());
+//        List<WorkOrderProductionProcesses> productionProcessesList = workOrderService.getProductionProcessesList(workOrder);
+//        //赋值下一工序id
+//        for (int i = 0; i < productionProcessesList.size(); i++) {
+//            WorkOrderProductionProcesses wopp = productionProcessesList.get(i);
+//            if (wopp.getId().equals(productionTaskDetail.getProductionProcessesId())) {
+//                //默认赋值空 如果有下一节点赋值下一节点id
+//                if ((i + 1) < productionProcessesList.size()) {
+//                    WorkOrderProductionProcesses nextProductionProcesses = productionProcessesList.get(i + 1);
+//                    productionTaskDetail.setNextProductionProcessesId(nextProductionProcesses.getId());
+//                    break;
+//                }
+//            }
+//        }
+//
+//        //设置当前工序状态未开始
+//        productionTaskDetail.setProcessesStatus(0);
+//        //清空负责人
+//        productionTaskDetail.setPersonLiableId(-1L);
 
         this.updateById(productionTaskDetail);
 
@@ -256,12 +375,14 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
         ObsFileUtil.saveFile(dto.getFileList(), productionTaskDetailRecord.getId());
 
         //推送消息给下一工序的用户有单可以抢了
-        Long nextProductionProcessesId = productionTaskDetail.getNextProductionProcessesId();
-        List<Long> userIds = productionTaskProcessesDetailService.listObject(ProductionTaskProcessesDetail::getUserId, q -> q
-                .eq(ProductionTaskProcessesDetail::getProductionProcessesId, nextProductionProcessesId)
-                .eq(ProductionTaskProcessesDetail::getProductionTaskId, productionTaskDetail.getProductionTaskId())
-        );
-        WebSocketPush.byUsers(PushTypeEnum.MESSAGE, userIds, "您有新的任务可接收!", PushBusinessTypeEnum.NEW_TASK.getType());
+        if(ObjectUtil.isNotEmpty(nextProcessIdList)) {
+//            Long nextProductionProcessesId = productionTaskDetail.getNextProductionProcessesId();
+            List<Long> userIds = productionTaskProcessesDetailService.listObject(ProductionTaskProcessesDetail::getUserId, q -> q
+                    .in(ProductionTaskProcessesDetail::getProductionProcessesId, nextProcessIdList)
+                    .eq(ProductionTaskProcessesDetail::getProductionTaskId, productionTaskDetail.getProductionTaskId())
+            );
+            WebSocketPush.byUsers(PushTypeEnum.MESSAGE, userIds, "您有新的任务可接收!", PushBusinessTypeEnum.NEW_TASK.getType());
+        }
     }
 
     /**
@@ -269,12 +390,15 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
      */
     @Override
     @DSTransactional
-    public synchronized void productStorage(ProductionTaskDetailDto productionTaskDetailDto) {
-        ProductionTaskDetail productionTaskDetail = getById(productionTaskDetailDto.getId());
+    public synchronized void productStorage(ProductionTaskDetailDto dto) {
+        ProductionTaskDetail productionTaskDetail = getById(dto.getId());
         if (ObjectUtil.isEmpty(productionTaskDetail)) {
             throw new ServiceException("未查询到任务明细信息");
         }
 
+        Long taskProgressId = dto.getTaskProgressId();
+        TaskProgress taskProgress = taskProgressService.getById(taskProgressId);
+
         if (Objects.equals(productionTaskDetail.getFinishStatus(), 1)) {
             throw new ServiceException("该任务已完工入库,请重试或刷新!");
         }
@@ -282,16 +406,18 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
         //创建任务明细记录
         ProductionTaskDetailRecord productionTaskDetailRecord = new ProductionTaskDetailRecord();
         productionTaskDetailRecord.setProductionTaskDetailId(productionTaskDetail.getId());
-        productionTaskDetailRecord.setProductionProcessesId(productionTaskDetail.getProductionProcessesId());
+        productionTaskDetailRecord.setProductionProcessesId(taskProgress.getProcessesId());
         productionTaskDetailRecord.setPersonLiableId(SecurityUtils.getUserId());
-        productionTaskDetailRecord.setReceivedTime(productionTaskDetail.getReceivedTime());
+        productionTaskDetailRecord.setReceivedTime(taskProgress.getReceivedTime());
         productionTaskDetailRecordService.save(productionTaskDetailRecord);
 
         productionTaskDetail.setFinishStatus(1);//标记为完成
         productionTaskDetail.setFinishTime(new Date());//记录完成时间
 
         //设置当前工序状态完成
-        productionTaskDetail.setProcessesStatus(3);
+//        productionTaskDetail.setProcessesStatus(3);
+        taskProgress.setStatus(2);
+        taskProgressService.updateById(taskProgress);
 
         //修改状态未入库中
         productionTaskDetail.setStockStatus(TaskDetailsStockStatus.IN_STOCK_ING.getDetailType());
@@ -299,7 +425,7 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
         this.updateById(productionTaskDetail);
 
         //保存附件
-        ObsFileUtil.saveFile(productionTaskDetailDto.getFileList(), productionTaskDetailRecord.getId());
+        ObsFileUtil.saveFile(dto.getFileList(), productionTaskDetailRecord.getId());
 
         StockWait stockWait = new StockWait();
         stockWait.setType(1);//入库
@@ -331,8 +457,10 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
 
         //过滤工序用户列表里有自己的数据
         wrapper.eq("ptpd.user_id", SecurityUtils.getUserId());
+        //过滤未开始的数据
+        wrapper.eq("tp.status",0);
         //过滤正在流转中的数据
-        wrapper.eq("ptd", ProductionTaskDetail::getCirculationStatus, 1);
+//        wrapper.eq("ptd", ProductionTaskDetail::getCirculationStatus, 1);
         //过滤未完工的数据
         wrapper.eq("ptd", ProductionTaskDetail::getFinishStatus, 0);
 
@@ -345,23 +473,30 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
     @Override
     @DSTransactional
     public void receive(ProductionTaskDetailDto dto) {
-        ProductionTaskDetail productionTaskDetail = getById(dto.getId());
+//        ProductionTaskDetail productionTaskDetail = getById(dto.getId());
 
-        if (Objects.equals(0, productionTaskDetail.getCirculationStatus())) {
+        TaskProgress taskProgress = taskProgressService.getById(dto.getTaskProgressId());
+
+        if (!Objects.equals(0, taskProgress.getStatus())) {
             throw new ServiceException("该任务已被他人接收,接收失败");
         }
 
-        //修改流转状态
-        productionTaskDetail.setCirculationStatus(0);
-        //将负责人赋值为自己
-        productionTaskDetail.setPersonLiableId(SecurityUtils.getUserId());
-        //赋值接收时间
-        productionTaskDetail.setReceivedTime(new Date());
+        taskProgress.setStatus(1);
+        taskProgress.setReceivedTime(new Date());
+        taskProgress.setPersonLiableId(SecurityUtils.getUserId());
+        taskProgressService.updateById(taskProgress);
+//
+//        //修改流转状态
+//        productionTaskDetail.setCirculationStatus(0);
+//        //将负责人赋值为自己
+//        productionTaskDetail.setPersonLiableId(SecurityUtils.getUserId());
+//        //赋值接收时间
+//        productionTaskDetail.setReceivedTime(new Date());
 
         //设置当前工序状态进行中
-        productionTaskDetail.setProcessesStatus(1);
+//        productionTaskDetail.setProcessesStatus(1);
 
-        this.updateById(productionTaskDetail);
+//        this.updateById(productionTaskDetail);
     }
 
     /**
@@ -370,41 +505,42 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
     @Override
     @DSTransactional
     public void rejection(ProductionTaskDetailDto productionTaskDetailDto) {
-        ProductionTaskDetail productionTaskDetail = this.getById(productionTaskDetailDto.getId());
-        //取消流转状态
-        productionTaskDetail.setCirculationStatus(0);
-
-        //回滚工序信息
-        productionTaskDetail.setNextProductionProcessesId(productionTaskDetail.getProductionProcessesId());
-        productionTaskDetail.setProductionProcessesId(productionTaskDetail.getPreviousProcessesId());
-
-        //清空上一工序
-        productionTaskDetail.setPreviousProcessesId(-1l);
-        //查找下一工序相关信息 如果有则赋值
-        ProductionTask productionTask = productionTaskService.getById(productionTaskDetail.getProductionTaskId());
-        ProductionPlan productionPlan = productionPlanService.getById(productionTask.getProductionPlanId());
-        WorkOrder workOrder = workOrderService.getById(productionPlan.getWorkOrderId());
-        List<WorkOrderProductionProcesses> productionProcessesList = workOrderService.getProductionProcessesList(workOrder);
-        //赋值上一工序id
-        for (int i = 0; i < productionProcessesList.size(); i++) {
-            WorkOrderProductionProcesses wopp = productionProcessesList.get(i);
-            if (wopp.getId().equals(productionTaskDetail.getProductionProcessesId())) {
-                //默认赋值空 如果有下一节点赋值下一节点id
-                if ((i - 1) >= 0) {
-                    WorkOrderProductionProcesses nextProductionProcesses = productionProcessesList.get(i - 1);
-                    productionTaskDetail.setPreviousProcessesId(nextProductionProcesses.getId());
-                    break;
-                }
-            }
-        }
-
-        //设置当前工序状态驳回
-        productionTaskDetail.setProcessesStatus(2);
-
-        //回滚负责人信息
-        productionTaskDetail.setPersonLiableId(productionTaskDetail.getCirculationUserId());
-
-        this.updateById(productionTaskDetail);
+        throw new ServiceException("功能异常请联系管理员");
+//        ProductionTaskDetail productionTaskDetail = this.getById(productionTaskDetailDto.getId());
+//        //取消流转状态
+//        productionTaskDetail.setCirculationStatus(0);
+//
+//        //回滚工序信息
+//        productionTaskDetail.setNextProductionProcessesId(productionTaskDetail.getProductionProcessesId());
+//        productionTaskDetail.setProductionProcessesId(productionTaskDetail.getPreviousProcessesId());
+//
+//        //清空上一工序
+//        productionTaskDetail.setPreviousProcessesId(-1l);
+//        //查找下一工序相关信息 如果有则赋值
+//        ProductionTask productionTask = productionTaskService.getById(productionTaskDetail.getProductionTaskId());
+//        ProductionPlan productionPlan = productionPlanService.getById(productionTask.getProductionPlanId());
+//        WorkOrder workOrder = workOrderService.getById(productionPlan.getWorkOrderId());
+//        List<WorkOrderProductionProcesses> productionProcessesList = workOrderService.getProductionProcessesList(workOrder);
+//        //赋值上一工序id
+//        for (int i = 0; i < productionProcessesList.size(); i++) {
+//            WorkOrderProductionProcesses wopp = productionProcessesList.get(i);
+//            if (wopp.getId().equals(productionTaskDetail.getProductionProcessesId())) {
+//                //默认赋值空 如果有下一节点赋值下一节点id
+//                if ((i - 1) >= 0) {
+//                    WorkOrderProductionProcesses nextProductionProcesses = productionProcessesList.get(i - 1);
+//                    productionTaskDetail.setPreviousProcessesId(nextProductionProcesses.getId());
+//                    break;
+//                }
+//            }
+//        }
+//
+//        //设置当前工序状态驳回
+//        productionTaskDetail.setProcessesStatus(2);
+//
+//        //回滚负责人信息
+//        productionTaskDetail.setPersonLiableId(productionTaskDetail.getCirculationUserId());
+//
+//        this.updateById(productionTaskDetail);
     }
 
 
@@ -475,12 +611,17 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
     @Override
     public Long haveTaskCount(ProductionTaskDetailDto dto) {
         //获取负责人为当前用户 工序为某一工序 未在流转(进行中) 未完成 的任务计数
-        return this.count(q -> q
-                .eq(ProductionTaskDetail::getPersonLiableId, SecurityUtils.getUserId())
-                .eq(ObjectUtil.isNotEmpty(dto.getProductionProcessesId()), ProductionTaskDetail::getProductionProcessesId, dto.getProductionProcessesId())
-                .eq(ProductionTaskDetail::getCirculationStatus, 0)
-                .eq(ProductionTaskDetail::getFinishStatus, 0)
+        return taskProgressService.count(q->q
+                .eq(TaskProgress::getPersonLiableId, SecurityUtils.getUserId())
+                .eq(ObjectUtil.isNotEmpty(dto.getProductionProcessesId()), TaskProgress::getProcessesId, dto.getProductionProcessesId())
+                .eq(TaskProgress::getStatus, 1)
         );
+//        return this.count(q -> q
+//                .eq(ProductionTaskDetail::getPersonLiableId, SecurityUtils.getUserId())
+//                .eq(ObjectUtil.isNotEmpty(dto.getProductionProcessesId()), ProductionTaskDetail::getProductionProcessesId, dto.getProductionProcessesId())
+//                .eq(ProductionTaskDetail::getCirculationStatus, 0)
+//                .eq(ProductionTaskDetail::getFinishStatus, 0)
+//        );
     }
 
     /**
@@ -492,15 +633,20 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
         ProductionTaskDetail productionTaskDetail = getById(dto.getId());
         Assert.notEmpty(productionTaskDetail, "查询不到该任务信息");
 
-        //修改流转状态
-        productionTaskDetail.setCirculationStatus(1);
-        //将负责人清空
-        productionTaskDetail.setPersonLiableId(-1L);
-
-        //设置当前工序状态驳回
-        productionTaskDetail.setProcessesStatus(0);
-
-        this.updateById(productionTaskDetail);
+        TaskProgress taskProgress = taskProgressService.getById(dto.getTaskProgressId());
+        taskProgress.setStatus(0);
+        taskProgress.setPersonLiableId(-1L);
+        taskProgressService.updateById(taskProgress);
+
+//        //修改流转状态
+//        productionTaskDetail.setCirculationStatus(1);
+//        //将负责人清空
+//        productionTaskDetail.setPersonLiableId(-1L);
+//
+//        //设置当前工序状态驳回
+//        productionTaskDetail.setProcessesStatus(0);
+//
+//        this.updateById(productionTaskDetail);
     }
 
     /**
@@ -619,10 +765,10 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
         ProductionPlan productionPlan = productionPlanService.getById(productionTask.getProductionPlanId());
         WorkOrder workOrder = workOrderService.getById(productionPlan.getWorkOrderId());
 
-        List<Long> processesIds = Arrays.asList(productionTaskDetailVo.getPreviousProcessesId(),
-                productionTaskDetailVo.getProductionProcessesId(),
-                productionTaskDetailVo.getNextProductionProcessesId()
-        );
+//        List<Long> processesIds = Arrays.asList(productionTaskDetailVo.getPreviousProcessesId(),
+//                productionTaskDetailVo.getProductionProcessesId(),
+//                productionTaskDetailVo.getNextProductionProcessesId()
+//        );
 
         //获取工序列表
         List<WorkOrderProductionProcesses> productionProcessesList = workOrderService.getProductionProcessesList(workOrder);
@@ -637,8 +783,8 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
         }
 
         productionTaskDetailVo.setProductionProcessesName(productionProcessesMap.get(productionTaskDetailVo.getProductionProcessesId()));
-        productionTaskDetailVo.setNextProductionProcessesName(productionProcessesMap.get(productionTaskDetailVo.getNextProductionProcessesId()));
-        productionTaskDetailVo.setPreviousProcessesName(productionProcessesMap.get(productionTaskDetailVo.getPreviousProcessesId()));
+//        productionTaskDetailVo.setNextProductionProcessesName(productionProcessesMap.get(productionTaskDetailVo.getNextProductionProcessesId()));
+//        productionTaskDetailVo.setPreviousProcessesName(productionProcessesMap.get(productionTaskDetailVo.getPreviousProcessesId()));
 
         //赋值工序提交记录
         List<ProductionTaskDetailRecord> productionTaskDetailRecordList = productionTaskDetailRecordService.list(q -> q
@@ -658,15 +804,15 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
         productionTaskDetailVo.setProductionTaskDetailRecordList(productionTaskDetailRecordVos);
 
 
-        //赋值上一工序流转记录Id
-        List<Long> previousProcessesRecordIds = productionTaskDetailRecordService.listObject(ProductionTaskDetailRecord::getId, q -> q
-                .eq(ProductionTaskDetailRecord::getProductionTaskDetailId, id)
-                .eq(ProductionTaskDetailRecord::getProductionProcessesId, productionTaskDetailVo.getPreviousProcessesId())
-                .orderByDesc(ProductionTaskDetailRecord::getCreateTime)
-        );
-        if (ObjectUtil.isNotEmpty(previousProcessesRecordIds)) {
-            productionTaskDetailVo.setPreviousProcessesRecordId(previousProcessesRecordIds.get(0));
-        }
+//        //赋值上一工序流转记录Id
+//        List<Long> previousProcessesRecordIds = productionTaskDetailRecordService.listObject(ProductionTaskDetailRecord::getId, q -> q
+//                .eq(ProductionTaskDetailRecord::getProductionTaskDetailId, id)
+//                .eq(ProductionTaskDetailRecord::getProductionProcessesId, productionTaskDetailVo.getPreviousProcessesId())
+//                .orderByDesc(ProductionTaskDetailRecord::getCreateTime)
+//        );
+//        if (ObjectUtil.isNotEmpty(previousProcessesRecordIds)) {
+//            productionTaskDetailVo.setPreviousProcessesRecordId(previousProcessesRecordIds.get(0));
+//        }
 
 
         return productionTaskDetailVo;

+ 58 - 12
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionTaskServiceImpl.java

@@ -15,22 +15,27 @@ import com.fjhx.customer.service.customer.CustomerService;
 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.production.dto.ProductionTaskDetailDto;
 import com.fjhx.mes.entity.production.dto.ProductionTaskDto;
 import com.fjhx.mes.entity.production.dto.ProductionTaskSelectDto;
 import com.fjhx.mes.entity.production.po.*;
 import com.fjhx.mes.entity.production.vo.ProductionTaskDetailVo;
 import com.fjhx.mes.entity.production.vo.ProductionTaskVo;
+import com.fjhx.mes.entity.task.po.TaskProgress;
 import com.fjhx.mes.entity.technology.po.Technology;
+import com.fjhx.mes.entity.technology.po.TechnologyProcessLine;
 import com.fjhx.mes.entity.work.po.WorkOrder;
 import com.fjhx.mes.entity.work.po.WorkOrderBom;
+import com.fjhx.mes.entity.work.po.WorkOrderProcessLine;
 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.*;
+import com.fjhx.mes.service.task.TaskProgressService;
+import com.fjhx.mes.service.technology.TechnologyProcessLineService;
 import com.fjhx.mes.service.technology.TechnologyService;
 import com.fjhx.mes.service.work.WorkOrderBomService;
+import com.fjhx.mes.service.work.WorkOrderProcessLineService;
 import com.fjhx.mes.service.work.WorkOrderProductionProcessesService;
 import com.fjhx.mes.service.work.WorkOrderService;
 import com.fjhx.socket.core.PushTypeEnum;
@@ -74,10 +79,6 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
     @Autowired
     private WorkOrderService workOrderService;
     @Autowired
-    private BomInfoService bomInfoService;
-    @Autowired
-    private BomDetailService bomDetailService;
-    @Autowired
     private StockWaitService stockWaitService;
     @Autowired
     private StockWaitDetailsService stockWaitDetailsService;
@@ -105,6 +106,12 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
     private CodingRuleService codingRuleService;
     @Autowired
     private CustomerService customerService;
+    @Autowired
+    private TechnologyProcessLineService technologyProcessLineService;
+    @Autowired
+    private WorkOrderProcessLineService workOrderProcessLineService;
+    @Autowired
+    private TaskProgressService taskProgressServices;
 
     @Override
     public Page<ProductionTaskVo> getPage(ProductionTaskSelectDto dto) {
@@ -302,6 +309,10 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
         if (ObjectUtil.isEmpty(workOrder)) {
             throw new ServiceException("查询不到该任务的工单信息");
         }
+
+
+        //获取当前工序列表
+        List<Long> processList;
         //判断是否为定制 获取工序信息
         Long productionProcessesId;
         Long nextProductionProcessesId = null;
@@ -317,6 +328,13 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
             if (workOrderProductionProcesses.size() > 1) {
                 nextProductionProcessesId = workOrderProductionProcesses.get(1).getId();
             }
+
+            //获取开始节点下的节点为当前工序
+            processList = workOrderProcessLineService.listObject(WorkOrderProcessLine::getTargetProcessesId,q -> q
+                    .eq(WorkOrderProcessLine::getWorkOrderId, workOrder.getId())
+                    .eq(WorkOrderProcessLine::getSourceProcessesId,1)
+            );
+
         } else {
             ApplicableProducts applicableProducts = applicableProductsService.getOne(q -> q.eq(ApplicableProducts::getProductId, workOrder.getProductId()));
             if (ObjectUtil.isEmpty(applicableProducts)) {
@@ -326,6 +344,13 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
             if (ObjectUtil.isEmpty(technology)) {
                 throw new ServiceException("工艺信息不存在");
             }
+
+            //获取开始节点下的节点为当前工序
+            processList = technologyProcessLineService.listObject(TechnologyProcessLine::getTargetProcessesId,q -> q
+                    .eq(TechnologyProcessLine::getTechnologyId, technology.getId())
+                    .eq(TechnologyProcessLine::getSourceProcessesId,1)
+            );
+
             String processRoute = technology.getProcessRoute();
             if (ObjectUtil.isEmpty(processRoute)) {
                 throw new ServiceException("工艺线路为空");
@@ -347,18 +372,18 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
             productionTaskDetail.setFinishStatus(0);//默认状态未完工
             productionTaskDetail.setProductId(workOrder.getProductId());//产品id
 
-            //赋值当前工序和下一工序
-            productionTaskDetail.setProductionProcessesId(productionProcessesId);//第一个工序id
-            productionTaskDetail.setNextProductionProcessesId(nextProductionProcessesId);//第二个工序id
+//            //赋值当前工序和下一工序
+//            productionTaskDetail.setProductionProcessesId(productionProcessesId);//第一个工序id
+//            productionTaskDetail.setNextProductionProcessesId(nextProductionProcessesId);//第二个工序id
 
             //生成SN
             productionTaskDetail.setProductSn(String.format("%s-%03d", productionTaskDto.getCode(), i + 1));
 
             //任务一创建 负责人为空 并直接在流转中 用于抢单
 //            productionTaskDetail.setPersonLiableId(productionTaskDto.getPersonLiableId());//负责人ID
-            productionTaskDetail.setCirculationStatus(1);//流转中
-
-            productionTaskDetail.setProcessesStatus(0);
+//            productionTaskDetail.setCirculationStatus(1);//流转中
+//
+//            productionTaskDetail.setProcessesStatus(0);
 
             //冗余id
             productionTaskDetail.setWorkOrderId(workOrder.getId());
@@ -369,6 +394,27 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
         productionTaskDetailService.saveBatch(productionTaskDetailList);
         productionTaskDetailRecordService.saveBatch(productionTaskDetailRecordList);
 
+        //根据工艺路线生成生产信息
+        List<TaskProgress> taskProgressList = new ArrayList<>();
+        for (ProductionTaskDetail productionTaskDetail : productionTaskDetailList) {
+            //创建生产过程信息
+            if(ObjectUtil.isEmpty(processList)){
+                //完工入库
+                ProductionTaskDetailDto productionTaskDetailDto = BeanUtil.copyProperties(productionTaskDetail, ProductionTaskDetailDto.class);
+                productionTaskDetailService.productStorage(productionTaskDetailDto);
+            }
+            //创建生产信息
+            for (Long processId : processList) {
+                TaskProgress taskProgress = new TaskProgress();
+                taskProgress.setProductionTaskDetailId(productionTaskDetail.getId());
+                taskProgress.setProcessesId(processId);
+                taskProgress.setStatus(0);
+                taskProgressList.add(taskProgress);
+            }
+        }
+        taskProgressServices.saveBatch(taskProgressList);
+
+
         //添加任务对每一个工序的用户绑定
         List<ProductionTaskProcessesDetail> productionTaskProcessesDetailList = new ArrayList<>();
         JSONObject taskProcessesUserJson = JSONObject.parseObject(productionTaskDto.getTaskProcessesUser());

+ 17 - 0
hx-mes/src/main/java/com/fjhx/mes/service/task/TaskProgressService.java

@@ -0,0 +1,17 @@
+package com.fjhx.mes.service.task;
+
+import com.fjhx.mes.entity.task.po.TaskProgress;
+import com.ruoyi.common.core.service.BaseService;
+
+
+/**
+ * <p>
+ * 任务明细工序过程 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-12
+ */
+public interface TaskProgressService extends BaseService<TaskProgress> {
+
+}

+ 21 - 0
hx-mes/src/main/java/com/fjhx/mes/service/task/impl/TaskProgressServiceImpl.java

@@ -0,0 +1,21 @@
+package com.fjhx.mes.service.task.impl;
+
+import com.fjhx.mes.entity.task.po.TaskProgress;
+import com.fjhx.mes.mapper.task.TaskProgressMapper;
+import com.fjhx.mes.service.task.TaskProgressService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * <p>
+ * 任务明细工序过程 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-12-12
+ */
+@Service
+public class TaskProgressServiceImpl extends ServiceImpl<TaskProgressMapper, TaskProgress> implements TaskProgressService {
+
+}

+ 41 - 3
hx-mes/src/main/java/com/fjhx/mes/service/work/impl/WorkOrderProductionProcessesServiceImpl.java

@@ -5,11 +5,14 @@ import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.common.utils.Assert;
 import com.fjhx.file.entity.ObsFile;
 import com.fjhx.file.utils.ObsFileUtil;
+import com.fjhx.mes.entity.applicable.po.ApplicableProducts;
 import com.fjhx.mes.entity.production.po.ProductionProcesses;
+import com.fjhx.mes.entity.technology.po.Technology;
 import com.fjhx.mes.entity.work.dto.WorkOrderProductionProcessesDto;
 import com.fjhx.mes.entity.work.po.WorkOrder;
 import com.fjhx.mes.entity.work.po.WorkOrderProcessLine;
@@ -17,7 +20,9 @@ import com.fjhx.mes.entity.work.po.WorkOrderProductionProcesses;
 import com.fjhx.mes.entity.work.vo.WorkOrderProductionProcessesVo;
 import com.fjhx.mes.entity.work.vo.WorkOrderVo;
 import com.fjhx.mes.mapper.work.WorkOrderProductionProcessesMapper;
+import com.fjhx.mes.service.applicable.ApplicableProductsService;
 import com.fjhx.mes.service.production.ProductionProcessesService;
+import com.fjhx.mes.service.technology.TechnologyService;
 import com.fjhx.mes.service.work.WorkOrderProcessLineService;
 import com.fjhx.mes.service.work.WorkOrderProductionProcessesService;
 import com.fjhx.mes.service.work.WorkOrderService;
@@ -46,6 +51,10 @@ public class WorkOrderProductionProcessesServiceImpl extends ServiceImpl<WorkOrd
     private ProductionProcessesService productionProcessesService;
     @Autowired
     private WorkOrderProcessLineService workOrderProcessLineService;
+    @Autowired
+    private ApplicableProductsService applicableProductsService;
+    @Autowired
+    private TechnologyService technologyService;
 
     @Override
     public WorkOrderVo detail(WorkOrderProductionProcesses dto) {
@@ -63,13 +72,42 @@ public class WorkOrderProductionProcessesServiceImpl extends ServiceImpl<WorkOrd
             List<ProductionProcesses> productionProcesses = productionProcessesService.getBaseProductionProcessesList(workOrder);
             List<WorkOrderProductionProcessesVo> workOrderProductionProcessesList0 = BeanUtil.copyToList(productionProcesses, WorkOrderProductionProcessesVo.class);
             int i = 0;
+            Map<Long,Long> newOldIdMap = new HashMap<>();
             for (WorkOrderProductionProcessesVo workOrderProductionProcesses : workOrderProductionProcessesList0) {
-                workOrderProductionProcesses.setOldId(workOrderProductionProcesses.getId());//赋值带过来的id
-                workOrderProductionProcesses.setId(null);
+                Long oldId = workOrderProductionProcesses.getId();
+                Long newId = IdWorker.getId();
+                newOldIdMap.put(oldId,newId);
+
+                workOrderProductionProcesses.setOldId(oldId);//赋值带过来的id
+                workOrderProductionProcesses.setId(newId);
                 workOrderProductionProcesses.setSort(i);
                 i++;
             }
             workOrderVo.setWorkOrderProductionProcessesList(workOrderProductionProcessesList0);
+
+            //赋值工艺JSON
+            ApplicableProducts applicableProducts = applicableProductsService.getOne(q -> q
+                    .eq(ApplicableProducts::getProductId, workOrderVo.getProductId())
+            );
+            if(ObjectUtil.isNotEmpty(applicableProducts)){
+                Technology technology = technologyService.getById(applicableProducts.getTechnologyId());
+                String nodeObject = technology.getNodeObject();
+
+                JSONArray newArray = new JSONArray();
+
+                JSONArray jsonArray = JSONArray.parseArray(nodeObject);
+                for (int j = 0; j < jsonArray.size(); j++) {
+                    JSONObject json = jsonArray.getJSONObject(j);
+                    if(json.getString("shape").equals("handle-btn") || json.getString("shape").equals("handle-btn-one")){
+                        Long oldProductionId = json.getLong("productionId");
+                        Long newProductionId = newOldIdMap.get(oldProductionId);
+                        json.put("productionId",newProductionId.toString());
+                    }
+                    newArray.add(json);
+                }
+
+                workOrderVo.setCustomizedNodeObject(newArray.toString());
+            }
             return workOrderVo;
         }
         List<WorkOrderProductionProcessesVo> workOrderProductionProcessesVos = BeanUtil.copyToList(workOrderProductionProcessesList, WorkOrderProductionProcessesVo.class);
@@ -139,7 +177,7 @@ public class WorkOrderProductionProcessesServiceImpl extends ServiceImpl<WorkOrd
             JSONObject json = nodeObject.getJSONObject(i);
             String shape = json.getString("shape");
             //节点
-            if (shape.equals("handle-btn")) {
+            if (shape.equals("handle-btn") || shape.equals("handle-btn-one")) {
                 nodeMap.put(json.getString("id"), json);
             }
             //线

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

@@ -7,7 +7,7 @@
             ptd.product_id,
             ptd.production_task_id,
             ptd.product_sn,
-            ptd.production_processes_id,
+            tp.processes_id as productionProcessesId,
             ptd.finish_time,
             ptd.finish_status,
             ptd.person_liable_id,
@@ -21,10 +21,11 @@
             ptd.previous_processes_id,
             scd.product_remark,
             sc.customer_id,
-            pt.due_date
-        from production_task_detail ptd
+            pt.due_date,
+            tp.id taskProgressId
+        from task_progress tp left join production_task_detail ptd on tp.production_task_detail_id = ptd.id
             left JOIN production_task_processes_detail ptpd ON ptpd.production_task_id = ptd.production_task_id
-            AND ptpd.production_processes_id = ptd.production_processes_id
+            AND ptpd.production_processes_id = tp.processes_id
             LEFT JOIN production_task pt ON ptd.production_task_id = pt.id
             LEFT JOIN production_plan pp ON pt.production_plan_id = pp.id
             LEFT JOIN work_order wo ON pp.work_order_id = wo.id

+ 4 - 0
hx-mes/src/main/resources/mapper/task/TaskProgressMapper.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.mes.mapper.task.TaskProgressMapper">
+</mapper>