Browse Source

排产组装排产数据性能优化

yejian016332 3 years ago
parent
commit
abc244c93f

+ 1 - 1
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/operationManagementCenter/service/impl/OrderServiceImpl.java

@@ -559,7 +559,7 @@ public class OrderServiceImpl extends SuperServiceImpl<OrderMapper, Order> imple
 
 
         isFalse(StringUtils.isEmpty(planIds),"请选择计划");
         isFalse(StringUtils.isEmpty(planIds),"请选择计划");
 
 
-       // TOTO add by yejian by read code 判断是否已经点击过一键生产逻辑修改
+        // TOTO add by yejian by read code 判断是否已经点击过一键生产逻辑修改
         Object obj = redisTemplate.opsForValue().get(RepeatCacheKey.CONFIRMSCHEDULE_UNION_KEY+"_"+planIds);
         Object obj = redisTemplate.opsForValue().get(RepeatCacheKey.CONFIRMSCHEDULE_UNION_KEY+"_"+planIds);
         if(obj==null){
         if(obj==null){
             redisTemplate.opsForValue().set(RepeatCacheKey.CONFIRMSCHEDULE_UNION_KEY+"_"+planIds,"1",60,TimeUnit.SECONDS);
             redisTemplate.opsForValue().set(RepeatCacheKey.CONFIRMSCHEDULE_UNION_KEY+"_"+planIds,"1",60,TimeUnit.SECONDS);

+ 28 - 17
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/operationManagementCenter/service/impl/TaskServiceImpl.java

@@ -224,6 +224,8 @@ public class TaskServiceImpl extends SuperServiceImpl<TTaskMapper, TTask> implem
 
 
         List<TTask> taskList = new ArrayList<TTask>();
         List<TTask> taskList = new ArrayList<TTask>();
 
 
+        // 排产需要的数组组装进行优化,提高组装数据的时效
+        //
         double totalOpNum = 0.0;
         double totalOpNum = 0.0;
         for(int partIndex = 1;partIndex <= planProductList.size(); partIndex++){
         for(int partIndex = 1;partIndex <= planProductList.size(); partIndex++){
             PlanProduct planProduct = planProductList.get(partIndex - 1);
             PlanProduct planProduct = planProductList.get(partIndex - 1);
@@ -258,6 +260,8 @@ public class TaskServiceImpl extends SuperServiceImpl<TTaskMapper, TTask> implem
             LbqWrapper<TWorkpiece> workpieceWrapper = new LbqWrapper<TWorkpiece>().in(TWorkpiece::getPlanId, planProduct.getPlanId());
             LbqWrapper<TWorkpiece> workpieceWrapper = new LbqWrapper<TWorkpiece>().in(TWorkpiece::getPlanId, planProduct.getPlanId());
             List<TWorkpiece> planWorkpieces = workpieceMapper.selectList(workpieceWrapper);
             List<TWorkpiece> planWorkpieces = workpieceMapper.selectList(workpieceWrapper);
 
 
+            Map<String,List<CandidateProcess>> operationCandidateProcesses = new HashMap<>();
+
             for(int partNum = 0; partNum < planWorkpieces.size(); partNum++){
             for(int partNum = 0; partNum < planWorkpieces.size(); partNum++){
                 TWorkpiece workpiece = planWorkpieces.get(partNum);
                 TWorkpiece workpiece = planWorkpieces.get(partNum);
                 Part part = new Part();
                 Part part = new Part();
@@ -288,26 +292,33 @@ public class TaskServiceImpl extends SuperServiceImpl<TTaskMapper, TTask> implem
                     List<CandidateProcess> candidateProcesses = new ArrayList<CandidateProcess>();
                     List<CandidateProcess> candidateProcesses = new ArrayList<CandidateProcess>();
                     BomProcedure bomProcedure = bomProcedureList.get(tTask.getProcedureSort());
                     BomProcedure bomProcedure = bomProcedureList.get(tTask.getProcedureSort());
 
 
-                    if (bomProcedure.getProductionresourceList().size() > 0){
-                        for(BomProcedureProductionresource bomProcedureProductionresource : bomProcedure.getProductionresourceList()){
-                            Machine machine = new Machine();
-                            CandidateProcess candidateProcess = new CandidateProcess();
-                            // TODO 工艺模板还是需要工序类型,先用名称判断
-                            if(bomProcedure.getType().contains("上料") || bomProcedure.getType().contains("下料") || bomProcedure.getType().contains("翻面")){
-                                if("0".equals(stationGaSwitchFlag)){
-                                    assemblingCandidate(candidateProMap, machineMap, workpiece, candidateProcesses, bomProcedure, machine, candidateProcess, bomProcedureProductionresource);
-                                }else if("1".equals(stationGaSwitchFlag)){
-                                    if(stationResourcesIds.contains(bomProcedureProductionresource.getResourceId())){
+                    // 同一计划订单中的工件工序对应设备信息只要找一次后用工序匹配
+                    if(operationCandidateProcesses.containsKey(tTask.getProcedureNo())){
+                        candidateProMap.put(workpiece.getCompleteBatchNo() + "_" + bomProcedure.getNo(), operationCandidateProcesses.get(tTask.getProcedureNo()));
+                    }else{
+                        if (bomProcedure.getProductionresourceList().size() > 0){
+                            for(BomProcedureProductionresource bomProcedureProductionresource : bomProcedure.getProductionresourceList()){
+                                Machine machine = new Machine();
+                                CandidateProcess candidateProcess = new CandidateProcess();
+                                // TODO 工艺模板还是需要工序类型,先用名称判断
+                                if(bomProcedure.getType().contains("上料") || bomProcedure.getType().contains("下料") || bomProcedure.getType().contains("翻面")){
+                                    if("0".equals(stationGaSwitchFlag)){
+                                        assemblingCandidate(candidateProMap, machineMap, workpiece, candidateProcesses, bomProcedure, machine, candidateProcess, bomProcedureProductionresource);
+                                    }else if("1".equals(stationGaSwitchFlag)){
+                                        if(stationResourcesIds.contains(bomProcedureProductionresource.getResourceId())){
+                                            assemblingCandidate(candidateProMap, machineMap, workpiece, candidateProcesses, bomProcedure, machine, candidateProcess, bomProcedureProductionresource);
+                                        }
+                                    }
+                                }else{
+                                    // 查询设备状态
+                                    Productionresource productionresource = productionresourceBizMapper.selectOne(Wraps.<Productionresource>lbQ().eq(Productionresource::getId, bomProcedureProductionresource.getResourceId()));
+                                    if("1".equals(productionresource.getStatus()) || "1".equals(productionresource.getOnlineStatus())){
                                         assemblingCandidate(candidateProMap, machineMap, workpiece, candidateProcesses, bomProcedure, machine, candidateProcess, bomProcedureProductionresource);
                                         assemblingCandidate(candidateProMap, machineMap, workpiece, candidateProcesses, bomProcedure, machine, candidateProcess, bomProcedureProductionresource);
                                     }
                                     }
-                                }
-                            }else{
-                                // 查询设备状态
-                                Productionresource productionresource = productionresourceBizMapper.selectOne(Wraps.<Productionresource>lbQ().eq(Productionresource::getId, bomProcedureProductionresource.getResourceId()));
-                                if("1".equals(productionresource.getStatus()) || "1".equals(productionresource.getOnlineStatus())){
-                                    assemblingCandidate(candidateProMap, machineMap, workpiece, candidateProcesses, bomProcedure, machine, candidateProcess, bomProcedureProductionresource);
                                 }
                                 }
                             }
                             }
+                            candidateProMap.put(workpiece.getCompleteBatchNo() + "_" + bomProcedure.getNo(), candidateProcesses.stream().sorted(Comparator.comparing(CandidateProcess::getPrority,Comparator.reverseOrder())).collect(Collectors.toList()));
+                            operationCandidateProcesses.put(bomProcedure.getNo(), candidateProcesses.stream().sorted(Comparator.comparing(CandidateProcess::getPrority,Comparator.reverseOrder())).collect(Collectors.toList()));
                         }
                         }
                     }
                     }
                 }
                 }
@@ -410,7 +421,7 @@ public class TaskServiceImpl extends SuperServiceImpl<TTaskMapper, TTask> implem
             if (!candidateProcesses.contains(candidateProcess)) {
             if (!candidateProcesses.contains(candidateProcess)) {
                 candidateProcesses.add(candidateProcess);
                 candidateProcesses.add(candidateProcess);
             }
             }
-            candidateProMap.put(workpiece.getCompleteBatchNo() + "_" + bomProcedure.getNo(), candidateProcesses.stream().sorted(Comparator.comparing(CandidateProcess::getPrority,Comparator.reverseOrder())).collect(Collectors.toList()));
+
 //        }
 //        }
     }
     }