Ver Fonte

问题处理

yzc há 1 ano atrás
pai
commit
cc826d5788

+ 159 - 64
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionTaskDetailServiceImpl.java

@@ -243,46 +243,94 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
         if (Objects.equals(workOrder.getIsCustomized(), "1")) {
             //定制
 
-            //获取父节点id
-            List<Long> longs = workOrderProcessLineService.listObject(WorkOrderProcessLine::getSourceProcessesId, q -> q
+            //获取当前节点的目标节点列表
+            List<Long> targetProcessesIds = workOrderProcessLineService.listObject(WorkOrderProcessLine::getTargetProcessesId, q -> q
                     .eq(WorkOrderProcessLine::getWorkOrderId, workOrderId)
-                    .eq(WorkOrderProcessLine::getTargetProcessesId, taskProgress.getProcessesId())
+                    .eq(WorkOrderProcessLine::getSourceProcessesId, taskProgress.getProcessesId())
+                    .ne(WorkOrderProcessLine::getTargetProcessesId, 99)
             );
-            //获取同级节点
-            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
+
+            //如果目标节点为空,完工入库
+            if(ObjectUtil.isEmpty(targetProcessesIds)){
+                productStorage(dto);
+            }else {
+                //获取目标节点的父节点列表
+                List<WorkOrderProcessLine> sourceProcessesList = workOrderProcessLineService.list(q -> q
                         .eq(WorkOrderProcessLine::getWorkOrderId, workOrderId)
-                        .eq(WorkOrderProcessLine::getSourceProcessesId, taskProgress.getProcessesId())
-                        .ne(WorkOrderProcessLine::getTargetProcessesId, 99)
+                        .ne(WorkOrderProcessLine::getSourceProcessesId, 1)//源节点不是开始节点
+                        .in(WorkOrderProcessLine::getTargetProcessesId, targetProcessesIds)
                 );
-                if (ObjectUtil.isEmpty(longs2)) {
-                    //完工入库
-                    productStorage(dto);
-                } else {
-                    //生成下一节点任务信息
-                    List<TaskProgress> taskProgressList = new ArrayList<>();
-                    for (Long aLong : longs2) {
+                Map<Long, List<WorkOrderProcessLine>> sourceProcessesMap = sourceProcessesList.stream()
+                        .collect(Collectors.groupingBy(WorkOrderProcessLine::getTargetProcessesId));
+
+
+                //遍历目标节点列表
+                for (Long targetProcessesId : targetProcessesIds) {
+                    //获取目标节点的父节点列表
+                    List<WorkOrderProcessLine> workOrderProcessLines = sourceProcessesMap.get(targetProcessesId);
+                    //没有父节点跳过
+                    if (ObjectUtil.isEmpty(workOrderProcessLines)) {
+                        continue;
+                    }
+                    List<Long> sourceProcessesIds = workOrderProcessLines.stream().map(WorkOrderProcessLine::getSourceProcessesId).collect(Collectors.toList());
+                    long count = taskProgressService.count(q -> q
+                            .eq(TaskProgress::getProductionTaskDetailId, dto.getId())
+                            .in(TaskProgress::getProcessesId, sourceProcessesIds)
+                            .eq(TaskProgress::getStatus, 2)
+                    );
+                    //如果目标节点的父节点全部完成,生成目标节点任务
+                    if (count == sourceProcessesIds.size()) {
+                        //生成下一节点任务信息
                         TaskProgress taskProgress1 = new TaskProgress();
                         taskProgress1.setProductionTaskDetailId(productionTaskDetail.getId());
-                        taskProgress1.setProcessesId(aLong);
+                        taskProgress1.setProcessesId(targetProcessesId);
                         taskProgress1.setStatus(0);
-                        taskProgressList.add(taskProgress1);
-                        nextProcessIdList.add(aLong);
+                        taskProgressService.save(taskProgress1);
                     }
-                    taskProgressService.saveBatch(taskProgressList);
                 }
             }
+
+
+//            //获取父节点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
@@ -290,46 +338,93 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
             );
             Long technologyId = applicableProducts.getTechnologyId();
 
-            //获取父节点id
-            List<Long> longs = technologyProcessLineService.listObject(TechnologyProcessLine::getSourceProcessesId, q -> q
+            //获取当前节点的目标节点列表
+            List<Long> targetProcessesIds = technologyProcessLineService.listObject(TechnologyProcessLine::getTargetProcessesId, q -> q
                     .eq(TechnologyProcessLine::getTechnologyId, technologyId)
-                    .eq(TechnologyProcessLine::getTargetProcessesId, taskProgress.getProcessesId())
+                    .eq(TechnologyProcessLine::getSourceProcessesId, taskProgress.getProcessesId())
+                    .ne(TechnologyProcessLine::getTargetProcessesId, 99)
             );
-            //获取同级节点
-            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
+
+            //如果目标节点为空,完工入库
+            if(ObjectUtil.isEmpty(targetProcessesIds)){
+                productStorage(dto);
+            }else {
+                //获取目标节点的父节点列表
+                List<TechnologyProcessLine> sourceProcessesList = technologyProcessLineService.list(q -> q
                         .eq(TechnologyProcessLine::getTechnologyId, technologyId)
-                        .eq(TechnologyProcessLine::getSourceProcessesId, taskProgress.getProcessesId())
-                        .ne(TechnologyProcessLine::getTargetProcessesId, 99)
+                        .ne(TechnologyProcessLine::getSourceProcessesId, 1)//源节点不是开始节点
+                        .in(TechnologyProcessLine::getTargetProcessesId, targetProcessesIds)
                 );
-                if (ObjectUtil.isEmpty(longs2)) {
-                    //完工入库
-                    productStorage(dto);
-                } else {
-                    //生成下一节点任务信息
-                    List<TaskProgress> taskProgressList = new ArrayList<>();
-                    for (Long aLong : longs2) {
+                Map<Long, List<TechnologyProcessLine>> sourceProcessesMap = sourceProcessesList.stream()
+                        .collect(Collectors.groupingBy(TechnologyProcessLine::getTargetProcessesId));
+
+
+                //遍历目标节点列表
+                for (Long targetProcessesId : targetProcessesIds) {
+                    //获取目标节点的父节点列表
+                    List<TechnologyProcessLine> workOrderProcessLines = sourceProcessesMap.get(targetProcessesId);
+                    //没有父节点跳过
+                    if (ObjectUtil.isEmpty(workOrderProcessLines)) {
+                        continue;
+                    }
+                    List<Long> sourceProcessesIds = workOrderProcessLines.stream().map(TechnologyProcessLine::getSourceProcessesId).collect(Collectors.toList());
+                    long count = taskProgressService.count(q -> q
+                            .eq(TaskProgress::getProductionTaskDetailId, dto.getId())
+                            .in(TaskProgress::getProcessesId, sourceProcessesIds)
+                            .eq(TaskProgress::getStatus, 2)
+                    );
+                    //如果目标节点的父节点全部完成,生成目标节点任务
+                    if (count == sourceProcessesIds.size()) {
+                        //生成下一节点任务信息
                         TaskProgress taskProgress1 = new TaskProgress();
                         taskProgress1.setProductionTaskDetailId(productionTaskDetail.getId());
-                        taskProgress1.setProcessesId(aLong);
+                        taskProgress1.setProcessesId(targetProcessesId);
                         taskProgress1.setStatus(0);
-                        taskProgressList.add(taskProgress1);
-                        nextProcessIdList.add(aLong);
+                        taskProgressService.save(taskProgress1);
                     }
-                    taskProgressService.saveBatch(taskProgressList);
                 }
             }
+
+//            //获取父节点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);
+//                }
+//            }
         }
 
 
@@ -750,14 +845,14 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
 
         //当前工序处理
         List<Long> ptdIds = records.stream().map(ProductionTaskDetail::getId).collect(Collectors.toList());
-        List<TaskProgress> taskProgressList = taskProgressService.list( q -> q
+        List<TaskProgress> taskProgressList = taskProgressService.list(q -> q
                 .in(TaskProgress::getProductionTaskDetailId, ptdIds)
-                .ne(TaskProgress::getStatus,2)
+                .ne(TaskProgress::getStatus, 2)
         );
         List<TaskProgressVo> taskProgressVos = BeanUtil.copyToList(taskProgressList, TaskProgressVo.class);
         UserUtil.assignmentNickName(taskProgressVos, TaskProgress::getPersonLiableId, TaskProgressVo::setPersonLiableName);
         for (TaskProgressVo taskProgressVo : taskProgressVos) {
-            taskProgressVo.setProcessesName(productionProcessesMap.getOrDefault(taskProgressVo.getProcessesId(),"未知工序"));
+            taskProgressVo.setProcessesName(productionProcessesMap.getOrDefault(taskProgressVo.getProcessesId(), "未知工序"));
         }
         Map<Long, List<TaskProgressVo>> taskProgressMap = taskProgressVos.stream().collect(Collectors.groupingBy(TaskProgressVo::getProductionTaskDetailId));
         for (ProductionTaskDetailVo record : records) {
@@ -801,7 +896,7 @@ public class ProductionTaskDetailServiceImpl extends ServiceImpl<ProductionTaskD
 
         //赋值当前工序名称
         TaskProgress taskProgress = taskProgressService.getById(dto.getTaskProgressId());
-        if(ObjectUtil.isNotEmpty(taskProgress)) {
+        if (ObjectUtil.isNotEmpty(taskProgress)) {
             productionTaskDetailVo.setProductionProcessesName(productionProcessesMap.get(taskProgress.getProcessesId()));
         }
 //        productionTaskDetailVo.setNextProductionProcessesName(productionProcessesMap.get(productionTaskDetailVo.getNextProductionProcessesId()));