|
@@ -346,14 +346,14 @@ public class ApsServiceImpl implements ApsService {
|
|
|
// 宽度
|
|
|
BigDecimal prowidth1 = v1.getVolumeWidth();
|
|
|
BigDecimal prowidth2 = v2.getVolumeWidth();
|
|
|
- /*if(prowidth1.compareTo(prowidth2) == 0){*/
|
|
|
+ if(prowidth1.compareTo(prowidth2) == 0){
|
|
|
// 合金
|
|
|
if(alloy1.compareTo(alloy2) == 0){
|
|
|
// 合金状态
|
|
|
if(alloystatus1 == null || alloystatus2 == null || alloystatus1.compareTo(alloystatus2) == 0){
|
|
|
if(v1.getApsOverallConfig().getStartTime().compareTo(v2.getApsOverallConfig().getStartTime()) == 0){
|
|
|
- a = v2.getVolumeWidth().compareTo(v1.getVolumeWidth());
|
|
|
-// a = 0;
|
|
|
+// a = v2.getVolumeWidth().compareTo(v1.getVolumeWidth());
|
|
|
+ a = 0;
|
|
|
}else{
|
|
|
a = v2.getApsOverallConfig().getStartTime().compareTo(v1.getApsOverallConfig().getStartTime());
|
|
|
}
|
|
@@ -363,9 +363,9 @@ public class ApsServiceImpl implements ApsService {
|
|
|
}else{
|
|
|
a = alloy1.compareTo(alloy2);
|
|
|
}
|
|
|
- /*}else{
|
|
|
+ }else{
|
|
|
a = prowidth2.compareTo(prowidth1);
|
|
|
- }*/
|
|
|
+ }
|
|
|
return a;
|
|
|
});
|
|
|
ApsSolution solvedBalance1 = solver1.solve(apsSolutionTh);
|
|
@@ -501,97 +501,131 @@ public class ApsServiceImpl implements ApsService {
|
|
|
ProductionProcesses mainTh = thOrdersMerge(hbThPros, otherThproces, allProMap,apsSolution);
|
|
|
apsSolution.getProcessesList().sort(Comparator.comparing(ProductionProcesses::getOrderMark));
|
|
|
// 退火后一道工序如果是精整类别的则合并
|
|
|
- List<ProductionProcesses> lastProMerge = new ArrayList<>();
|
|
|
- if(mainTh.getNextProcesses() != null && mainTh.getNextProcesses().size()>0){
|
|
|
- for (ProductionProcesses productionProcesses : mainTh.getNextProcesses()) {
|
|
|
- if(productionProcesses.getProcessCategory() != null && "40".equals(productionProcesses.getProcessCategory())
|
|
|
- && (productionProcesses.getNextProcesses() == null || productionProcesses.getNextProcesses().size() == 0)
|
|
|
- && !productionProcesses.getIfLock()
|
|
|
- ){
|
|
|
- lastProMerge.add(productionProcesses);
|
|
|
- }
|
|
|
- }
|
|
|
+ jzMerge(mainTh,apsSolution);
|
|
|
+ // 退火前一道工序合并
|
|
|
+
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 退火后一道工序如果是精整类别的则合并
|
|
|
+ * @param mainTh
|
|
|
+ * @param apsSolution
|
|
|
+ */
|
|
|
+ private void jzMerge(ProductionProcesses mainTh,ApsSolution apsSolution){
|
|
|
+ List<ProductionProcesses> lastProMerge = new ArrayList<>();
|
|
|
+ if(mainTh.getNextProcesses() != null && mainTh.getNextProcesses().size()>0){
|
|
|
+ for (ProductionProcesses productionProcesses : mainTh.getNextProcesses()) {
|
|
|
+ if(productionProcesses.getProcessCategory() != null && "40".equals(productionProcesses.getProcessCategory())
|
|
|
+ && (productionProcesses.getNextProcesses() == null || productionProcesses.getNextProcesses().size() == 0)
|
|
|
+ && !productionProcesses.getIfLock()
|
|
|
+ ){
|
|
|
+ lastProMerge.add(productionProcesses);
|
|
|
}
|
|
|
- if(lastProMerge.size()>0){
|
|
|
- Map<String, List<ProductionProcesses>> orderProcess = lastProMerge.stream().collect(Collectors.groupingBy(ProductionProcesses::getProcessType));
|
|
|
- orderProcess.forEach((k1,v1)->{
|
|
|
- if(v1.size()>1){
|
|
|
- List<String> sameEqs = new ArrayList<>();
|
|
|
- boolean issameeq = true;
|
|
|
- for (ProductionProcesses productionProcesses : v1) {
|
|
|
- if(sameEqs.size() == 0){
|
|
|
- sameEqs.addAll(productionProcesses.getOptionalEquipments());
|
|
|
- }else{
|
|
|
- List<String> a = new ArrayList<>();
|
|
|
- for (String sameEq : sameEqs) {
|
|
|
- for (String optionalEquipment : productionProcesses.getOptionalEquipments()) {
|
|
|
- if(sameEq.equals(optionalEquipment)){
|
|
|
- a.add(sameEq);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if(a.size()>0){
|
|
|
- sameEqs = a;
|
|
|
- }else{
|
|
|
- issameeq = false;
|
|
|
- break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(lastProMerge.size()>0){
|
|
|
+ Map<String, List<ProductionProcesses>> orderProcess = lastProMerge.stream().collect(Collectors.groupingBy(ProductionProcesses::getProcessType));
|
|
|
+ orderProcess.forEach((k1,v1)->{
|
|
|
+ if(v1.size()>1){
|
|
|
+ List<String> sameEqs = new ArrayList<>();
|
|
|
+ boolean issameeq = true;
|
|
|
+ for (ProductionProcesses productionProcesses : v1) {
|
|
|
+ if(sameEqs.size() == 0){
|
|
|
+ sameEqs.addAll(productionProcesses.getOptionalEquipments());
|
|
|
+ }else{
|
|
|
+ List<String> a = new ArrayList<>();
|
|
|
+ for (String sameEq : sameEqs) {
|
|
|
+ for (String optionalEquipment : productionProcesses.getOptionalEquipments()) {
|
|
|
+ if(sameEq.equals(optionalEquipment)){
|
|
|
+ a.add(sameEq);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- if(issameeq && sameEqs.size()>0){
|
|
|
- ProductionProcesses mergePro = v1.get(0);
|
|
|
- List<String> mergeProOrders = new ArrayList<>();
|
|
|
- if(mergePro.getMergeProOrders() != null && mergePro.getMergeProOrders().size()>0){
|
|
|
- mergeProOrders.addAll(mergePro.getMergeProOrders());
|
|
|
+ if(a.size()>0){
|
|
|
+ sameEqs = a;
|
|
|
+ }else{
|
|
|
+ issameeq = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(issameeq && sameEqs.size()>0){
|
|
|
+ ProductionProcesses mergePro = v1.get(0);
|
|
|
+ List<String> mergeProOrders = new ArrayList<>();
|
|
|
+ if(mergePro.getMergeProOrders() != null && mergePro.getMergeProOrders().size()>0){
|
|
|
+ mergeProOrders.addAll(mergePro.getMergeProOrders());
|
|
|
+ }else{
|
|
|
+ mergeProOrders.add(mergePro.getId());
|
|
|
+ }
|
|
|
+ mergePro.setMergeProOrders(mergeProOrders);
|
|
|
+ mergePro.setOptionalEquipments(sameEqs);
|
|
|
+ for (int i = 0; i < v1.size(); i++) {
|
|
|
+ if(i>0){
|
|
|
+ if(v1.get(i).getMergeProOrders() != null && v1.get(i).getMergeProOrders().size()>0){
|
|
|
+ mergePro.getMergeProOrders().addAll(v1.get(i).getMergeProOrders());
|
|
|
}else{
|
|
|
- mergeProOrders.add(mergePro.getId());
|
|
|
+ mergePro.getMergeProOrders().add(v1.get(i).getId());
|
|
|
}
|
|
|
- mergePro.setMergeProOrders(mergeProOrders);
|
|
|
- mergePro.setOptionalEquipments(sameEqs);
|
|
|
- for (int i = 0; i < v1.size(); i++) {
|
|
|
- if(i>0){
|
|
|
- if(v1.get(i).getMergeProOrders() != null && v1.get(i).getMergeProOrders().size()>0){
|
|
|
- mergePro.getMergeProOrders().addAll(v1.get(i).getMergeProOrders());
|
|
|
- }else{
|
|
|
- mergePro.getMergeProOrders().add(v1.get(i).getId());
|
|
|
- }
|
|
|
- // 设置待合并退火的主ID
|
|
|
- v1.get(i).setMergeThMainId(v1.get(0).getId());
|
|
|
- mergePro.setOpeProducePcNum(mergePro.getOpeProducePcNum()+v1.get(i).getOpeProducePcNum());
|
|
|
- mergePro.setProduceTime(mergePro.getProduceTime()+v1.get(i).getProduceTime());
|
|
|
- if(mergePro.getOrderMark()<v1.get(i).getOrderMark()){
|
|
|
- mergePro.setOrderMark(v1.get(i).getOrderMark());
|
|
|
- }
|
|
|
- // 前后道工序关联关系设置
|
|
|
- List<String> preids = new ArrayList<>();
|
|
|
- preids.add(mainTh.getId());
|
|
|
- List<ProductionProcesses> prepros = new ArrayList<>();
|
|
|
- prepros.add(mainTh);
|
|
|
- mergePro.setPreviousProcessesIds(preids);
|
|
|
- mergePro.setPreviousProcesses(prepros);
|
|
|
- String vid1 = v1.get(i).getId();
|
|
|
- if(mainTh.getNextProcessesIds().contains(v1.get(i).getId())){
|
|
|
- mainTh.getNextProcessesIds().remove(v1.get(i).getId());
|
|
|
- List<ProductionProcesses> vidpros1 = mainTh.getNextProcesses().stream().filter(v2 -> !v2.getId().equals(vid1)).collect(Collectors.toList());
|
|
|
- mainTh.setNextProcesses(vidpros1);
|
|
|
- }
|
|
|
- // 小卷退火卷数合并
|
|
|
- if(v1.get(i).getProcessType().equals("小卷成退")){
|
|
|
- v1.get(0).setMinThPcNum(v1.get(0).getMinThPcNum()+v1.get(i).getMinThPcNum());
|
|
|
- }
|
|
|
-
|
|
|
- List<ProductionProcesses> collect = apsSolution.getProcessesList().stream().filter(va -> !va.getId().equals(vid1)).collect(Collectors.toList());
|
|
|
- apsSolution.setProcessesList(collect);
|
|
|
- }
|
|
|
+ // 设置待合并退火的主ID
|
|
|
+ v1.get(i).setMergeThMainId(v1.get(0).getId());
|
|
|
+ mergePro.setOpeProducePcNum(mergePro.getOpeProducePcNum()+v1.get(i).getOpeProducePcNum());
|
|
|
+ mergePro.setProduceTime(mergePro.getProduceTime()+v1.get(i).getProduceTime());
|
|
|
+ if(mergePro.getOrderMark()<v1.get(i).getOrderMark()){
|
|
|
+ mergePro.setOrderMark(v1.get(i).getOrderMark());
|
|
|
}
|
|
|
+ // 前后道工序关联关系设置
|
|
|
+ List<String> preids = new ArrayList<>();
|
|
|
+ preids.add(mainTh.getId());
|
|
|
+ List<ProductionProcesses> prepros = new ArrayList<>();
|
|
|
+ prepros.add(mainTh);
|
|
|
+ mergePro.setPreviousProcessesIds(preids);
|
|
|
+ mergePro.setPreviousProcesses(prepros);
|
|
|
+ String vid1 = v1.get(i).getId();
|
|
|
+ if(mainTh.getNextProcessesIds().contains(v1.get(i).getId())){
|
|
|
+ mainTh.getNextProcessesIds().remove(v1.get(i).getId());
|
|
|
+ List<ProductionProcesses> vidpros1 = mainTh.getNextProcesses().stream().filter(v2 -> !v2.getId().equals(vid1)).collect(Collectors.toList());
|
|
|
+ mainTh.setNextProcesses(vidpros1);
|
|
|
+ }
|
|
|
+ // 小卷退火卷数合并
|
|
|
+ if(v1.get(i).getProcessType().equals("小卷成退")){
|
|
|
+ v1.get(0).setMinThPcNum(v1.get(0).getMinThPcNum()+v1.get(i).getMinThPcNum());
|
|
|
+ }
|
|
|
+
|
|
|
+ List<ProductionProcesses> collect = apsSolution.getProcessesList().stream().filter(va -> !va.getId().equals(vid1)).collect(Collectors.toList());
|
|
|
+ apsSolution.setProcessesList(collect);
|
|
|
}
|
|
|
}
|
|
|
- });
|
|
|
+ }
|
|
|
}
|
|
|
- // 退火前一道工序合并
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 小卷成退分组按宽度从大到小手动合并
|
|
|
+ * @param otherThproces
|
|
|
+ * @param allProMap
|
|
|
+ * @param apsSolution
|
|
|
+ */
|
|
|
+ private void xjctOrdersMerge(List<ProductionProcesses> otherThproces,Map<String,ProductionProcesses> allProMap,ApsSolution apsSolution){
|
|
|
+ // 小卷成退作业集合
|
|
|
+ List<ProductionProcesses> processesList = apsSolution.getProcessesList().stream().filter(v->"小卷成退".equals(v.getProcessType())).collect(Collectors.toList());
|
|
|
+ if(processesList != null && processesList.size()>0){
|
|
|
+ // 小卷成退分组
|
|
|
+ Map<String, List<ProductionProcesses>> ppss = processesList.stream().filter(v->StrUtil.isNotBlank(v.getGroupname()))
|
|
|
+ .collect(Collectors.groupingBy(ProductionProcesses::getGroupname));
|
|
|
+ if(ppss != null && ppss.size()>0){
|
|
|
+ // 每一组待合并的工序
|
|
|
+ for(Map.Entry<String, List<ProductionProcesses>> entry : ppss.entrySet()){
|
|
|
+ List<ProductionProcesses> processess = entry.getValue();
|
|
|
+ // 每一组按照宽度从大到小合并
|
|
|
+ Collections.sort(processess, (pro1, pro2) -> {return pro2.getVolumeWidth().compareTo(pro1.getVolumeWidth());});
|
|
|
|
|
|
+ }
|
|
|
}
|
|
|
- });
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private ProductionProcesses thOrdersMerge(List<ProductionProcesses> thps,List<ProductionProcesses> otherThproces
|