|
@@ -56,111 +56,119 @@ public class DdApsServiceImpl implements DdApsService {
|
|
|
return lzmergeprocesses;
|
|
|
}
|
|
|
|
|
|
- private void thOtherAllMergeDg(List<ProductionProcesses> rootProces,List<ProductionProcesses> lzmergeprocesses,List<ProductionProcesses> otherThproces,Map<String,ProductionProcesses> allProMap){
|
|
|
- if(rootProces != null && rootProces.size()>0){
|
|
|
- if(rootProces.get(0).getUniqueBsProcessesId().equals("e802cc0ae1154bd0b977b74a07c97b3e")){
|
|
|
+ private void thOtherAllMergeDg(List<ProductionProcesses> rootPreProces,List<ProductionProcesses> lzmergeprocesses,List<ProductionProcesses> otherThproces,Map<String,ProductionProcesses> allProMap){
|
|
|
+ if(rootPreProces != null && rootPreProces.size()>0){
|
|
|
+ if(rootPreProces.get(0).getUniqueBsProcessesId().equals("e802cc0ae1154bd0b977b74a07c97b3e")){
|
|
|
int m = 1;
|
|
|
}
|
|
|
-
|
|
|
- if((rootProces.get(0).getMaxWaitTime() != null && rootProces.get(0).getMaxWaitTime()>0)
|
|
|
- || "成退,中退,小卷成退".contains(rootProces.get(0).getProcessType())){
|
|
|
- lzmergeprocesses.addAll(rootProces);
|
|
|
- }else{
|
|
|
- // 未锁定的作业
|
|
|
- List<ProductionProcesses> notLocks = rootProces.stream().filter(v -> !v.getIfLock()).collect(Collectors.toList());
|
|
|
- // 锁定的作业
|
|
|
- List<ProductionProcesses> locks = rootProces.stream().filter(v -> v.getIfLock()).collect(Collectors.toList());
|
|
|
- // 锁定的不做任何处理
|
|
|
- if(locks != null && locks.size()>0){
|
|
|
- lzmergeprocesses.addAll(locks);
|
|
|
- }
|
|
|
- // 没锁定的合并一个作业
|
|
|
- if(notLocks != null && notLocks.size()>0){
|
|
|
- if(notLocks.size()>1){
|
|
|
- boolean ifnull = false;
|
|
|
- for (ProductionProcesses notLock : notLocks) {
|
|
|
- if(notLock.getRooprocess() == null || notLock.getRooprocess().getStartTime() == null){
|
|
|
- ifnull = true;
|
|
|
- }
|
|
|
- }
|
|
|
- // 根据根节点开始时间排序
|
|
|
- if(!ifnull){
|
|
|
- Collections.sort(notLocks,Comparator.comparing(pro -> pro.getRooprocess().getStartTime()));
|
|
|
+ Map<String, List<ProductionProcesses>> orderProcess = rootPreProces.stream().collect(Collectors.groupingBy(ProductionProcesses::getUniqueBsProcessesId));
|
|
|
+ for (String bsid:orderProcess.keySet()){
|
|
|
+ List<ProductionProcesses> rootProces = orderProcess.get(bsid);
|
|
|
+ if(rootProces != null && rootProces.size()>0){
|
|
|
+ if((rootProces.get(0).getMaxWaitTime() != null && rootProces.get(0).getMaxWaitTime()>0)
|
|
|
+ || "成退,中退,小卷成退".contains(rootProces.get(0).getProcessType())){
|
|
|
+ lzmergeprocesses.addAll(rootProces);
|
|
|
+ }else{
|
|
|
+ // 未锁定的作业
|
|
|
+ List<ProductionProcesses> notLocks = rootProces.stream().filter(v -> !v.getIfLock()).collect(Collectors.toList());
|
|
|
+ // 锁定的作业
|
|
|
+ List<ProductionProcesses> locks = rootProces.stream().filter(v -> v.getIfLock()).collect(Collectors.toList());
|
|
|
+ // 锁定的不做任何处理
|
|
|
+ if(locks != null && locks.size()>0){
|
|
|
+ lzmergeprocesses.addAll(locks);
|
|
|
}
|
|
|
- if(notLocks.size()>0){
|
|
|
- // 合并作业
|
|
|
- List<ProductionProcesses> mergePres = new ArrayList<>();
|
|
|
- mergePres.addAll(notLocks);
|
|
|
- Map<String,ProductionProcesses> mergeProNexts = new HashMap<>();
|
|
|
- ProductionProcesses mergePro = mergePres.get(0);
|
|
|
- List<String> mergeProOrders = new ArrayList<>();
|
|
|
- mergeProOrders.add(mergePro.getId());
|
|
|
- mergePro.setMergeProOrders(mergeProOrders);
|
|
|
- for (int i = 0; i < mergePres.size(); i++) {
|
|
|
- if(i>0){
|
|
|
- // 设置待合并退火的主ID
|
|
|
- mergePres.get(i).setMergeThMainId(mergePres.get(0).getId());
|
|
|
- mergePro.getMergeProOrders().add(mergePres.get(i).getId());
|
|
|
- otherThproces.add(mergePres.get(i));
|
|
|
- if(mergePres.get(i).getNextProcesses() != null && mergePres.get(i).getNextProcesses().size()>0){
|
|
|
- for (ProductionProcesses nextProcess : mergePres.get(i).getNextProcesses()) {
|
|
|
- mergeProNexts.put(nextProcess.getId(),nextProcess);
|
|
|
- }
|
|
|
+ // 没锁定的合并一个作业
|
|
|
+ if(notLocks != null && notLocks.size()>0){
|
|
|
+ if(notLocks.size()>1){
|
|
|
+ boolean ifnull = false;
|
|
|
+ for (ProductionProcesses notLock : notLocks) {
|
|
|
+ if(notLock.getRooprocess() == null || notLock.getRooprocess().getStartTime() == null){
|
|
|
+ ifnull = true;
|
|
|
}
|
|
|
- if(mergePro.getPreviousProcesses() != null && mergePro.getPreviousProcesses().size()>0){
|
|
|
- // 合并作业的上一道工序
|
|
|
- mergePro.getPreviousProcesses().addAll(mergePres.get(i).getPreviousProcesses());
|
|
|
- mergePro.getPreviousProcessesIds().addAll(mergePres.get(i).getPreviousProcessesIds());
|
|
|
- // 合并作业上一道工序的下一道工序设置为当前合并作业
|
|
|
- for (ProductionProcesses previousProcess : mergePres.get(i).getPreviousProcesses()) {
|
|
|
- previousProcess.getNextProcesses().clear();
|
|
|
- previousProcess.getNextProcesses().add(mergePro);
|
|
|
- previousProcess.getNextProcessesIds().clear();
|
|
|
- previousProcess.getNextProcessesIds().add(mergePro.getId());
|
|
|
+ }
|
|
|
+ // 根据根节点开始时间排序
|
|
|
+ if(!ifnull){
|
|
|
+ Collections.sort(notLocks,Comparator.comparing(pro -> pro.getRooprocess().getStartTime()));
|
|
|
+ }
|
|
|
+ if(notLocks.size()>0){
|
|
|
+ // 合并作业
|
|
|
+ List<ProductionProcesses> mergePres = new ArrayList<>();
|
|
|
+ mergePres.addAll(notLocks);
|
|
|
+ Map<String,ProductionProcesses> mergeProNexts = new HashMap<>();
|
|
|
+ ProductionProcesses mergePro = mergePres.get(0);
|
|
|
+ List<String> mergeProOrders = new ArrayList<>();
|
|
|
+ mergeProOrders.add(mergePro.getId());
|
|
|
+ mergePro.setMergeProOrders(mergeProOrders);
|
|
|
+ for (int i = 0; i < mergePres.size(); i++) {
|
|
|
+ if(i>0){
|
|
|
+ // 设置待合并退火的主ID
|
|
|
+ mergePres.get(i).setMergeThMainId(mergePres.get(0).getId());
|
|
|
+ mergePro.getMergeProOrders().add(mergePres.get(i).getId());
|
|
|
+ otherThproces.add(mergePres.get(i));
|
|
|
+ if(mergePres.get(i).getNextProcesses() != null && mergePres.get(i).getNextProcesses().size()>0){
|
|
|
+ for (ProductionProcesses nextProcess : mergePres.get(i).getNextProcesses()) {
|
|
|
+ mergeProNexts.put(nextProcess.getId(),nextProcess);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(mergePro.getPreviousProcesses() != null && mergePro.getPreviousProcesses().size()>0){
|
|
|
+ // 合并作业的上一道工序
|
|
|
+ mergePro.getPreviousProcesses().addAll(mergePres.get(i).getPreviousProcesses());
|
|
|
+ mergePro.getPreviousProcessesIds().addAll(mergePres.get(i).getPreviousProcessesIds());
|
|
|
+ // 合并作业上一道工序的下一道工序设置为当前合并作业
|
|
|
+ for (ProductionProcesses previousProcess : mergePres.get(i).getPreviousProcesses()) {
|
|
|
+ previousProcess.getNextProcesses().clear();
|
|
|
+ previousProcess.getNextProcesses().add(mergePro);
|
|
|
+ previousProcess.getNextProcessesIds().clear();
|
|
|
+ previousProcess.getNextProcessesIds().add(mergePro.getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- }
|
|
|
- // 取第一个作业作为合并作业
|
|
|
- mergePro.setProduceTime(mergePro.getProduceTime()*mergePres.size());
|
|
|
- mergePro.setOpeProducePcNum(mergePres.size());
|
|
|
- // 合并作业的下一道工序
|
|
|
- if(mergeProNexts.size()>0){
|
|
|
- for (String proid:mergeProNexts.keySet()){
|
|
|
- if(!mergePro.getNextProcessesIds().contains(proid)){
|
|
|
- ProductionProcesses propro = mergeProNexts.get(proid);
|
|
|
- mergePro.getNextProcessesIds().add(proid);
|
|
|
- mergePro.getNextProcesses().add(propro);
|
|
|
- // 合并作业下道工序的上道作业设置
|
|
|
- List<ProductionProcesses> nextPrePros = new ArrayList<>();
|
|
|
- nextPrePros.add(mergePro);
|
|
|
- List<String> nextPreProIds = new ArrayList<>();
|
|
|
- nextPreProIds.add(mergePro.getId());
|
|
|
- propro.setPreviousProcessesIds(nextPreProIds);
|
|
|
- propro.setPreviousProcesses(nextPrePros);
|
|
|
+ // 取第一个作业作为合并作业
|
|
|
+ mergePro.setProduceTime(mergePro.getProduceTime()*mergePres.size());
|
|
|
+ mergePro.setOpeProducePcNum(mergePres.size());
|
|
|
+ // 合并作业的下一道工序
|
|
|
+ if(mergeProNexts.size()>0){
|
|
|
+ for (String proid:mergeProNexts.keySet()){
|
|
|
+ if(mergePro.getNextProcessesIds() == null){
|
|
|
+ int a = 1;
|
|
|
+ }
|
|
|
+ if(!mergePro.getNextProcessesIds().contains(proid)){
|
|
|
+ ProductionProcesses propro = mergeProNexts.get(proid);
|
|
|
+ mergePro.getNextProcessesIds().add(proid);
|
|
|
+ mergePro.getNextProcesses().add(propro);
|
|
|
+ // 合并作业下道工序的上道作业设置
|
|
|
+ List<ProductionProcesses> nextPrePros = new ArrayList<>();
|
|
|
+ nextPrePros.add(mergePro);
|
|
|
+ List<String> nextPreProIds = new ArrayList<>();
|
|
|
+ nextPreProIds.add(mergePro.getId());
|
|
|
+ propro.setPreviousProcessesIds(nextPreProIds);
|
|
|
+ propro.setPreviousProcesses(nextPrePros);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+ lzmergeprocesses.add(mergePro);
|
|
|
}
|
|
|
+ }else{
|
|
|
+ lzmergeprocesses.addAll(notLocks);
|
|
|
}
|
|
|
- lzmergeprocesses.add(mergePro);
|
|
|
}
|
|
|
- }else{
|
|
|
- lzmergeprocesses.addAll(notLocks);
|
|
|
}
|
|
|
- }
|
|
|
- }
|
|
|
- // 递归合并
|
|
|
- List<ProductionProcesses> nextrootProces = new ArrayList<>();
|
|
|
- for (ProductionProcesses rootProce : rootProces) {
|
|
|
- if(rootProce.getNextProcesses() != null && rootProce.getNextProcesses().size()>0){
|
|
|
- for (ProductionProcesses nextProcess : rootProce.getNextProcesses()) {
|
|
|
- List<ProductionProcesses> hasPro = nextrootProces.stream().filter(v -> v.getId().equals(nextProcess.getId())).collect(Collectors.toList());
|
|
|
- if(hasPro == null || hasPro.size() == 0){
|
|
|
- nextrootProces.addAll(rootProce.getNextProcesses());
|
|
|
+ // 递归合并
|
|
|
+ List<ProductionProcesses> nextrootProces = new ArrayList<>();
|
|
|
+ for (ProductionProcesses rootProce : rootProces) {
|
|
|
+ if(rootProce.getNextProcesses() != null && rootProce.getNextProcesses().size()>0){
|
|
|
+ for (ProductionProcesses nextProcess : rootProce.getNextProcesses()) {
|
|
|
+ List<ProductionProcesses> hasPro = nextrootProces.stream().filter(v -> v.getId().equals(nextProcess.getId())).collect(Collectors.toList());
|
|
|
+ if(hasPro == null || hasPro.size() == 0){
|
|
|
+ nextrootProces.addAll(rootProce.getNextProcesses());
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+ thOtherAllMergeDg(nextrootProces,lzmergeprocesses,otherThproces,allProMap);
|
|
|
}
|
|
|
}
|
|
|
- thOtherAllMergeDg(nextrootProces,lzmergeprocesses,otherThproces,allProMap);
|
|
|
}
|
|
|
}
|
|
|
|