|
@@ -658,79 +658,118 @@ public class DdApsServiceImpl implements DdApsService {
|
|
|
@Override
|
|
|
public List<ProductionProcesses> seriesLzBzMerge(List<ProductionProcesses> mergeprocesses,List<ProductionProcesses> otherSerProces){
|
|
|
List<ProductionProcesses> retPros = new ArrayList<>();
|
|
|
- if(mergeprocesses != null && mergeprocesses.size()>0){
|
|
|
- // 获取所有根节点
|
|
|
- List<ProductionProcesses> rootPros = new ArrayList<>();
|
|
|
- for (ProductionProcesses mergeprocess : mergeprocesses) {
|
|
|
- if(mergeprocess.getPreviousProcesses() == null || mergeprocess.getPreviousProcesses().size() == 0){
|
|
|
- rootPros.add(mergeprocess);
|
|
|
- }
|
|
|
- }
|
|
|
- // 被合并的作业
|
|
|
- List<ProductionProcesses> lzbzMergeOthers = new ArrayList<>();
|
|
|
- // 根据根节点逐级查询是否可合并的作业
|
|
|
- if(rootPros != null && rootPros.size()>0){
|
|
|
- Map<String,List<ProductionProcesses>> lzbzMerges = new HashMap<>();
|
|
|
- // 已合并处理过作业ID
|
|
|
- List<String> hasMid = new ArrayList<>();
|
|
|
- for (ProductionProcesses rootPro : rootPros) {
|
|
|
- getNotLockLzBzSeries(rootPro,lzbzMerges,hasMid);
|
|
|
- }
|
|
|
- if(lzbzMerges != null && lzbzMerges.size()>0){
|
|
|
- for (String k:lzbzMerges.keySet()){
|
|
|
- List<ProductionProcesses> serPros = lzbzMerges.get(k);
|
|
|
- // 连续冷轧或箔轧超过1个,则合并
|
|
|
- if(serPros != null && serPros.size()>1){
|
|
|
- ProductionProcesses fMergePro = serPros.get(0);
|
|
|
- if(fMergePro.getMergeProOrders() == null){
|
|
|
- fMergePro.setMergeProOrders(new ArrayList<>());
|
|
|
- fMergePro.getMergeProOrders().add(fMergePro.getId());
|
|
|
- }
|
|
|
- // 按顺序依次合并
|
|
|
- for (int i = 0; i < serPros.size(); i++) {
|
|
|
- if(i>0){
|
|
|
- serPros.get(i).setMergeThMainId(fMergePro.getId());
|
|
|
- if(serPros.get(i).getMergeProOrders() == null){
|
|
|
- fMergePro.getMergeProOrders().add(serPros.get(i).getId());
|
|
|
- }else{
|
|
|
- fMergePro.getMergeProOrders().addAll(serPros.get(i).getMergeProOrders());
|
|
|
+ // 根据订单分组
|
|
|
+ Map<String, List<ProductionProcesses>> orderProcess = mergeprocesses.stream().collect(Collectors.groupingBy(ProductionProcesses::getOrderId));
|
|
|
+ orderProcess.forEach((pk,processes)->{
|
|
|
+ try{
|
|
|
+ if(processes != null && processes.size()>0){
|
|
|
+ // 获取所有根节点
|
|
|
+ List<ProductionProcesses> rootPros = new ArrayList<>();
|
|
|
+ for (ProductionProcesses mergeprocess : processes) {
|
|
|
+ if(mergeprocess.getPreviousProcesses() == null || mergeprocess.getPreviousProcesses().size() == 0){
|
|
|
+ rootPros.add(mergeprocess);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 获取第一道未锁定工序数据
|
|
|
+ List<ProductionProcesses> firstNotLockPros = new ArrayList<>();
|
|
|
+ getFirstNotLockPros(rootPros,firstNotLockPros);
|
|
|
+ // 被合并的作业
|
|
|
+ List<ProductionProcesses> lzbzMergeOthers = new ArrayList<>();
|
|
|
+ // 根据根节点逐级查询是否可合并的作业
|
|
|
+ if(firstNotLockPros != null && firstNotLockPros.size()>0){
|
|
|
+ Map<String,List<ProductionProcesses>> lzbzMerges = new HashMap<>();
|
|
|
+ // 已合并处理过作业ID
|
|
|
+ List<String> hasMid = new ArrayList<>();
|
|
|
+ for (ProductionProcesses rootPro : firstNotLockPros) {
|
|
|
+ getNotLockLzBzSeries(rootPro,lzbzMerges,hasMid);
|
|
|
+ }
|
|
|
+ if(lzbzMerges != null && lzbzMerges.size()>0){
|
|
|
+ for (String k:lzbzMerges.keySet()){
|
|
|
+ List<ProductionProcesses> serPros = lzbzMerges.get(k);
|
|
|
+ // 连续冷轧或箔轧超过1个,则合并
|
|
|
+ if(serPros != null && serPros.size()>1){
|
|
|
+ ProductionProcesses fMergePro = serPros.get(0);
|
|
|
+ if(fMergePro.getMergeProOrders() == null){
|
|
|
+ fMergePro.setMergeProOrders(new ArrayList<>());
|
|
|
+ fMergePro.getMergeProOrders().add(fMergePro.getId());
|
|
|
}
|
|
|
- fMergePro.setProduceTime(fMergePro.getProduceTime()+serPros.get(i).getProduceTime());
|
|
|
- // 连续生产合并作业设置下道工序,以及合并后下道作业的上道工序
|
|
|
- if(i == serPros.size()-1){
|
|
|
- fMergePro.setNextProcesses(serPros.get(i).getNextProcesses());
|
|
|
- fMergePro.setNextProcessesIds(serPros.get(i).getNextProcessesIds());
|
|
|
- if(fMergePro.getNextProcesses() != null && fMergePro.getNextProcesses().size()>0){
|
|
|
- for (ProductionProcesses nextProcess : fMergePro.getNextProcesses()) {
|
|
|
- List<ProductionProcesses> pres = new ArrayList<>();
|
|
|
- List<String> preids = new ArrayList<>();
|
|
|
- pres.add(fMergePro);
|
|
|
- preids.add(fMergePro.getId());
|
|
|
- nextProcess.setPreviousProcesses(pres);
|
|
|
- nextProcess.setPreviousProcessesIds(preids);
|
|
|
+ // 按顺序依次合并
|
|
|
+ for (int i = 0; i < serPros.size(); i++) {
|
|
|
+ if(i>0){
|
|
|
+ serPros.get(i).setMergeThMainId(fMergePro.getId());
|
|
|
+ if(serPros.get(i).getMergeProOrders() == null){
|
|
|
+ fMergePro.getMergeProOrders().add(serPros.get(i).getId());
|
|
|
+ }else{
|
|
|
+ fMergePro.getMergeProOrders().addAll(serPros.get(i).getMergeProOrders());
|
|
|
}
|
|
|
+ fMergePro.setProduceTime(fMergePro.getProduceTime()+serPros.get(i).getProduceTime());
|
|
|
+ // 连续生产合并作业设置下道工序,以及合并后下道作业的上道工序
|
|
|
+ if(i == serPros.size()-1){
|
|
|
+ fMergePro.setNextProcesses(serPros.get(i).getNextProcesses());
|
|
|
+ fMergePro.setNextProcessesIds(serPros.get(i).getNextProcessesIds());
|
|
|
+ if(fMergePro.getNextProcesses() != null && fMergePro.getNextProcesses().size()>0){
|
|
|
+ for (ProductionProcesses nextProcess : fMergePro.getNextProcesses()) {
|
|
|
+ List<ProductionProcesses> pres = new ArrayList<>();
|
|
|
+ List<String> preids = new ArrayList<>();
|
|
|
+ pres.add(fMergePro);
|
|
|
+ preids.add(fMergePro.getId());
|
|
|
+ nextProcess.setPreviousProcesses(pres);
|
|
|
+ nextProcess.setPreviousProcessesIds(preids);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ lzbzMergeOthers.add(serPros.get(i));
|
|
|
}
|
|
|
}
|
|
|
- lzbzMergeOthers.add(serPros.get(i));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ // 除去被合并的作业
|
|
|
+ if(lzbzMergeOthers != null && lzbzMergeOthers.size()>0){
|
|
|
+ List<String> lzbzMergeOtherIds = lzbzMergeOthers.stream().map(ProductionProcesses::getId).collect(Collectors.toList());
|
|
|
+ for (ProductionProcesses mergeprocess : mergeprocesses) {
|
|
|
+ if(!lzbzMergeOtherIds.contains(mergeprocess.getId())){
|
|
|
+ retPros.add(mergeprocess);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ retPros.addAll(mergeprocesses);
|
|
|
+ }
|
|
|
}
|
|
|
+ }catch (Exception e){
|
|
|
+ log.error("连续冷轧箔轧作业合并",e);
|
|
|
}
|
|
|
- // 除去被合并的作业
|
|
|
- if(lzbzMergeOthers != null && lzbzMergeOthers.size()>0){
|
|
|
- List<String> lzbzMergeOtherIds = lzbzMergeOthers.stream().map(ProductionProcesses::getId).collect(Collectors.toList());
|
|
|
- for (ProductionProcesses mergeprocess : mergeprocesses) {
|
|
|
- if(!lzbzMergeOtherIds.contains(mergeprocess.getId())){
|
|
|
- retPros.add(mergeprocess);
|
|
|
+ });
|
|
|
+ return retPros;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取第一道未锁定工序作业
|
|
|
+ * @param rootPros
|
|
|
+ */
|
|
|
+ private void getFirstNotLockPros(List<ProductionProcesses> rootPros,List<ProductionProcesses> firstNotLockPros){
|
|
|
+ if(rootPros != null && rootPros.size()>0){
|
|
|
+ List<ProductionProcesses> notlocks = rootPros.stream().filter(v -> !v.getIfLock()).collect(Collectors.toList());
|
|
|
+ if(notlocks != null && notlocks.size()>0){
|
|
|
+ firstNotLockPros.addAll(notlocks);
|
|
|
+ }else{
|
|
|
+ List<ProductionProcesses> nextRootPros = new ArrayList<>();
|
|
|
+ for (ProductionProcesses rootPro : rootPros) {
|
|
|
+ if(rootPro.getNextProcesses() != null && rootPro.getNextProcesses().size()>0){
|
|
|
+ for (ProductionProcesses nextProcess : rootPro.getNextProcesses()) {
|
|
|
+ List<ProductionProcesses> haspros = nextRootPros.stream().filter(v -> v.getId().equals(nextProcess.getId())).collect(Collectors.toList());
|
|
|
+ if(haspros == null || haspros.size() == 0){
|
|
|
+ nextRootPros.add(nextProcess);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- }else{
|
|
|
- retPros.addAll(mergeprocesses);
|
|
|
+ if(nextRootPros != null &&nextRootPros.size()>0){
|
|
|
+ getFirstNotLockPros(nextRootPros,firstNotLockPros);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- return retPros;
|
|
|
}
|
|
|
|
|
|
private void getNotLockLzBzSeries(ProductionProcesses rootPro,Map<String,List<ProductionProcesses>> lzbzMerges,List<String> hasMid){
|