|
@@ -179,152 +179,157 @@ public class ApsServiceImpl implements ApsService {
|
|
|
List<ProductionProcesses> mergeprocesses = new ArrayList<>();
|
|
|
// 所有作业集合
|
|
|
Map<String,ProductionProcesses> allProMap = new HashMap<>();
|
|
|
- // 退火作业集合
|
|
|
- Map<String,List<ProductionProcesses>> thproMap = new HashMap<>();
|
|
|
+
|
|
|
// 其它作业集合
|
|
|
Map<String,List<ProductionProcesses>> notthproMap = new HashMap<>();
|
|
|
- for (ProductionProcesses process : processes) {
|
|
|
- if("成退".equals(process.getProcessType()) || "中退".equals(process.getProcessType()) || "小卷成退".equals(process.getProcessType())){
|
|
|
- String bsproid = process.getBsProcessesId().get(0);
|
|
|
- List<ProductionProcesses> bsprocess = thproMap.get(bsproid);
|
|
|
- if(bsprocess == null){
|
|
|
- bsprocess = new ArrayList<>();
|
|
|
- }
|
|
|
- bsprocess.add(process);
|
|
|
- thproMap.put(bsproid,bsprocess);
|
|
|
- }else{
|
|
|
- mergeprocesses.add(process);
|
|
|
+ // 按订单分组
|
|
|
+ Map<String, List<ProductionProcesses>> orderProcess = processes.stream().collect(Collectors.groupingBy(ProductionProcesses::getOrderId));
|
|
|
+ orderProcess.forEach((orderId,orderpss)->{
|
|
|
+ // 退火作业集合
|
|
|
+ Map<String,List<ProductionProcesses>> thproMap = new HashMap<>();
|
|
|
+ for (ProductionProcesses process : orderpss) {
|
|
|
+ if("成退".equals(process.getProcessType()) || "中退".equals(process.getProcessType()) || "小卷成退".equals(process.getProcessType())){
|
|
|
+ String bsproid = process.getBsProcessesId().get(0);
|
|
|
+ List<ProductionProcesses> bsprocess = thproMap.get(bsproid);
|
|
|
+ if(bsprocess == null){
|
|
|
+ bsprocess = new ArrayList<>();
|
|
|
+ }
|
|
|
+ bsprocess.add(process);
|
|
|
+ thproMap.put(bsproid,bsprocess);
|
|
|
+ }else{
|
|
|
+ mergeprocesses.add(process);
|
|
|
|
|
|
- String bsproid = process.getBsProcessesId().get(0);
|
|
|
- List<ProductionProcesses> bsprocess = thproMap.get(bsproid);
|
|
|
- if(bsprocess == null){
|
|
|
- bsprocess = new ArrayList<>();
|
|
|
+ String bsproid = process.getBsProcessesId().get(0);
|
|
|
+ List<ProductionProcesses> bsprocess = thproMap.get(bsproid);
|
|
|
+ if(bsprocess == null){
|
|
|
+ bsprocess = new ArrayList<>();
|
|
|
+ }
|
|
|
+ bsprocess.add(process);
|
|
|
+ notthproMap.put(bsproid,bsprocess);
|
|
|
}
|
|
|
- bsprocess.add(process);
|
|
|
- notthproMap.put(bsproid,bsprocess);
|
|
|
+ allProMap.put(process.getId(),process);
|
|
|
}
|
|
|
- allProMap.put(process.getId(),process);
|
|
|
- }
|
|
|
- // 退火合并
|
|
|
- if(thproMap != null && thproMap.size()>0){
|
|
|
- thproMap.forEach((k,v)->{
|
|
|
- if(v.size()>1){
|
|
|
- // 作业卷数大于1,合并退火
|
|
|
- List<Equipment> equipments = equipmentList.stream().filter(eq -> eq.getId().equals(v.get(0).getOptionalEquipments().get(0))).collect(Collectors.toList());
|
|
|
- if(equipments != null && equipments.size()>0){
|
|
|
- Equipment equipment = equipments.get(0);
|
|
|
- // 根据承重计算最大几卷
|
|
|
- int a = equipment.getEquipmentParameter().getEquipmentBearing().divide(v.get(0).getSinglerollweight(), 2, RoundingMode.HALF_UP).intValue();
|
|
|
- // 根据宽度计算最大几卷
|
|
|
- if("成退".equals(v.get(0).getProcessType()) || "中退".equals(v.get(0).getProcessType())){
|
|
|
- int b = equipment.getEquipmentParameter().getEquipmentWidth().divide(v.get(0).getVolumeWidth().add(equipment.getEquipmentParameter().getFurnace()), 2, RoundingMode.HALF_UP).intValue();
|
|
|
- if(b<a){
|
|
|
- a = b;
|
|
|
+ // 退火合并
|
|
|
+ if(thproMap != null && thproMap.size()>0){
|
|
|
+ thproMap.forEach((k,v)->{
|
|
|
+ if(v.size()>1){
|
|
|
+ // 作业卷数大于1,合并退火
|
|
|
+ List<Equipment> equipments = equipmentList.stream().filter(eq -> eq.getId().equals(v.get(0).getOptionalEquipments().get(0))).collect(Collectors.toList());
|
|
|
+ if(equipments != null && equipments.size()>0){
|
|
|
+ Equipment equipment = equipments.get(0);
|
|
|
+ // 根据承重计算最大几卷
|
|
|
+ int a = equipment.getEquipmentParameter().getEquipmentBearing().divide(v.get(0).getSinglerollweight(), 2, RoundingMode.HALF_UP).intValue();
|
|
|
+ // 根据宽度计算最大几卷
|
|
|
+ if("成退".equals(v.get(0).getProcessType()) || "中退".equals(v.get(0).getProcessType())){
|
|
|
+ int b = equipment.getEquipmentParameter().getEquipmentWidth().divide(v.get(0).getVolumeWidth().add(equipment.getEquipmentParameter().getFurnace()), 2, RoundingMode.HALF_UP).intValue();
|
|
|
+ if(b<a){
|
|
|
+ a = b;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 最大装炉卷数
|
|
|
+ Integer maxheatroll = v.get(0).getProduceOrder().get(0).getMaxheatroll();
|
|
|
+ if(maxheatroll != null && maxheatroll < a){
|
|
|
+ a = maxheatroll;
|
|
|
}
|
|
|
- }
|
|
|
- // 最大装炉卷数
|
|
|
- Integer maxheatroll = v.get(0).getProduceOrder().get(0).getMaxheatroll();
|
|
|
- if(maxheatroll != null && maxheatroll < a){
|
|
|
- a = maxheatroll;
|
|
|
- }
|
|
|
|
|
|
- // 作业计划加工卷数是否大于一炉最大卷数
|
|
|
- if(v.get(0).getRooprocess() != null && v.get(0).getRooprocess().getStartTime() != null){
|
|
|
- Collections.sort(v,(p1,p2)->{
|
|
|
- return p1.getRooprocess().getStartTime().compareTo(p2.getRooprocess().getStartTime());
|
|
|
- });
|
|
|
- }
|
|
|
+ // 作业计划加工卷数是否大于一炉最大卷数
|
|
|
+ if(v.get(0).getRooprocess() != null && v.get(0).getRooprocess().getStartTime() != null){
|
|
|
+ Collections.sort(v,(p1,p2)->{
|
|
|
+ return p1.getRooprocess().getStartTime().compareTo(p2.getRooprocess().getStartTime());
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
- List<List<ProductionProcesses>> chunks = new ArrayList<>();
|
|
|
- int listSize = v.size();
|
|
|
- for (int i = 0; i < listSize; i += a) {
|
|
|
- chunks.add(v.subList(i, Math.min(i + a, listSize)));
|
|
|
- }
|
|
|
- // 合并退火作业
|
|
|
- for (List<ProductionProcesses> thps : chunks) {
|
|
|
- for (int i = 0; i < thps.size(); i++) {
|
|
|
- if(i>0){
|
|
|
- // 设置待合并退火的主ID
|
|
|
- thps.get(i).setMergeThMainId(thps.get(0).getId());
|
|
|
- otherThproces.add(thps.get(i));
|
|
|
- // 退火前一道作业设置下一作业ID
|
|
|
- ProductionProcesses prepro = allProMap.get(thps.get(i).getPreviousProcessesIds().get(0));
|
|
|
- // 历史关联关系备份
|
|
|
- List<String> oldNextProcessesIds = new ArrayList<>();
|
|
|
- oldNextProcessesIds.addAll(prepro.getNextProcessesIds());
|
|
|
- prepro.setOldNextProcessesIds(oldNextProcessesIds);
|
|
|
- // 合并后关联关系重置
|
|
|
- if(!prepro.getNextProcessesIds().contains(thps.get(0).getId())){
|
|
|
- int i1 = prepro.getNextProcessesIds().indexOf(thps.get(i).getId());
|
|
|
- prepro.getNextProcessesIds().set(i1,thps.get(0).getId());
|
|
|
- }
|
|
|
- List<String> list = new ArrayList<>();
|
|
|
- Set<String> set = new LinkedHashSet<>();
|
|
|
- for (String nextProcessesId : prepro.getNextProcessesIds()) {
|
|
|
- set.add(nextProcessesId);
|
|
|
- }
|
|
|
- list.addAll(set);
|
|
|
- prepro.setNextProcessesIds(list);
|
|
|
- List<ProductionProcesses> nextpros = new ArrayList<>();
|
|
|
- for (String nextProcessesId : prepro.getNextProcessesIds()) {
|
|
|
- nextpros.add(allProMap.get(nextProcessesId));
|
|
|
- }
|
|
|
- prepro.setNextProcesses(nextpros);
|
|
|
- // 当前合并退火作业设置前一道作业
|
|
|
- if(!thps.get(0).getPreviousProcessesIds().contains(prepro.getId())){
|
|
|
- thps.get(0).getPreviousProcessesIds().add(prepro.getId());
|
|
|
- }
|
|
|
- List<ProductionProcesses> previousProces = new ArrayList<>();
|
|
|
- for (String pid : thps.get(0).getPreviousProcessesIds()) {
|
|
|
- previousProces.add(allProMap.get(pid));
|
|
|
- }
|
|
|
- thps.get(0).setPreviousProcesses(previousProces);
|
|
|
- // 退火后一道作业设置上一道作业ID
|
|
|
- if(thps.get(i).getNextProcessesIds() != null && thps.get(i).getNextProcessesIds().size()>0){
|
|
|
- for (String nextProcessesId : thps.get(i).getNextProcessesIds()) {
|
|
|
- ProductionProcesses nextpro = allProMap.get(nextProcessesId);
|
|
|
- // 历史关联关系备份
|
|
|
- List<String> oldpreids = new ArrayList<>();
|
|
|
- oldpreids.addAll(nextpro.getPreviousProcessesIds());
|
|
|
- nextpro.setOldPreviousProcessesIds(oldpreids);
|
|
|
- // 合并后关联关系重置
|
|
|
- List<String> preids = new ArrayList<>();
|
|
|
- preids.add(thps.get(0).getId());
|
|
|
- nextpro.setPreviousProcessesIds(preids);
|
|
|
+ List<List<ProductionProcesses>> chunks = new ArrayList<>();
|
|
|
+ int listSize = v.size();
|
|
|
+ for (int i = 0; i < listSize; i += a) {
|
|
|
+ chunks.add(v.subList(i, Math.min(i + a, listSize)));
|
|
|
+ }
|
|
|
+ // 合并退火作业
|
|
|
+ for (List<ProductionProcesses> thps : chunks) {
|
|
|
+ for (int i = 0; i < thps.size(); i++) {
|
|
|
+ if(i>0){
|
|
|
+ // 设置待合并退火的主ID
|
|
|
+ thps.get(i).setMergeThMainId(thps.get(0).getId());
|
|
|
+ otherThproces.add(thps.get(i));
|
|
|
+ // 退火前一道作业设置下一作业ID
|
|
|
+ ProductionProcesses prepro = allProMap.get(thps.get(i).getPreviousProcessesIds().get(0));
|
|
|
+ // 历史关联关系备份
|
|
|
+ List<String> oldNextProcessesIds = new ArrayList<>();
|
|
|
+ oldNextProcessesIds.addAll(prepro.getNextProcessesIds());
|
|
|
+ prepro.setOldNextProcessesIds(oldNextProcessesIds);
|
|
|
+ // 合并后关联关系重置
|
|
|
+ if(!prepro.getNextProcessesIds().contains(thps.get(0).getId())){
|
|
|
+ int i1 = prepro.getNextProcessesIds().indexOf(thps.get(i).getId());
|
|
|
+ prepro.getNextProcessesIds().set(i1,thps.get(0).getId());
|
|
|
+ }
|
|
|
+ List<String> list = new ArrayList<>();
|
|
|
+ Set<String> set = new LinkedHashSet<>();
|
|
|
+ for (String nextProcessesId : prepro.getNextProcessesIds()) {
|
|
|
+ set.add(nextProcessesId);
|
|
|
+ }
|
|
|
+ list.addAll(set);
|
|
|
+ prepro.setNextProcessesIds(list);
|
|
|
+ List<ProductionProcesses> nextpros = new ArrayList<>();
|
|
|
+ for (String nextProcessesId : prepro.getNextProcessesIds()) {
|
|
|
+ nextpros.add(allProMap.get(nextProcessesId));
|
|
|
+ }
|
|
|
+ prepro.setNextProcesses(nextpros);
|
|
|
+ // 当前合并退火作业设置前一道作业
|
|
|
+ if(!thps.get(0).getPreviousProcessesIds().contains(prepro.getId())){
|
|
|
+ thps.get(0).getPreviousProcessesIds().add(prepro.getId());
|
|
|
+ }
|
|
|
+ List<ProductionProcesses> previousProces = new ArrayList<>();
|
|
|
+ for (String pid : thps.get(0).getPreviousProcessesIds()) {
|
|
|
+ previousProces.add(allProMap.get(pid));
|
|
|
+ }
|
|
|
+ thps.get(0).setPreviousProcesses(previousProces);
|
|
|
+ // 退火后一道作业设置上一道作业ID
|
|
|
+ if(thps.get(i).getNextProcessesIds() != null && thps.get(i).getNextProcessesIds().size()>0){
|
|
|
+ for (String nextProcessesId : thps.get(i).getNextProcessesIds()) {
|
|
|
+ ProductionProcesses nextpro = allProMap.get(nextProcessesId);
|
|
|
+ // 历史关联关系备份
|
|
|
+ List<String> oldpreids = new ArrayList<>();
|
|
|
+ oldpreids.addAll(nextpro.getPreviousProcessesIds());
|
|
|
+ nextpro.setOldPreviousProcessesIds(oldpreids);
|
|
|
+ // 合并后关联关系重置
|
|
|
+ List<String> preids = new ArrayList<>();
|
|
|
+ preids.add(thps.get(0).getId());
|
|
|
+ nextpro.setPreviousProcessesIds(preids);
|
|
|
|
|
|
- List<ProductionProcesses> nextprepros = new ArrayList<>();
|
|
|
- for (String pid : nextpro.getPreviousProcessesIds()) {
|
|
|
- nextprepros.add(allProMap.get(pid));
|
|
|
+ List<ProductionProcesses> nextprepros = new ArrayList<>();
|
|
|
+ for (String pid : nextpro.getPreviousProcessesIds()) {
|
|
|
+ nextprepros.add(allProMap.get(pid));
|
|
|
+ }
|
|
|
+ nextpro.setPreviousProcesses(nextprepros);
|
|
|
}
|
|
|
- nextpro.setPreviousProcesses(nextprepros);
|
|
|
+ // 设置合并退火作业下一道工序
|
|
|
+ thps.get(0).getNextProcessesIds().addAll(thps.get(i).getNextProcessesIds());
|
|
|
+ List<ProductionProcesses> thnexts = new ArrayList<>();
|
|
|
+ for (String pid : thps.get(0).getNextProcessesIds()) {
|
|
|
+ thnexts.add(allProMap.get(pid));
|
|
|
+ }
|
|
|
+ thps.get(0).setNextProcesses(thnexts);
|
|
|
}
|
|
|
- // 设置合并退火作业下一道工序
|
|
|
- thps.get(0).getNextProcessesIds().addAll(thps.get(i).getNextProcessesIds());
|
|
|
- List<ProductionProcesses> thnexts = new ArrayList<>();
|
|
|
- for (String pid : thps.get(0).getNextProcessesIds()) {
|
|
|
- thnexts.add(allProMap.get(pid));
|
|
|
+ // 小卷退火卷数合并
|
|
|
+ if(thps.get(i).getProcessType().equals("小卷退火")){
|
|
|
+ thps.get(0).setMinThPcNum(thps.get(0).getMinThPcNum()+thps.get(i).getMinThPcNum());
|
|
|
}
|
|
|
- thps.get(0).setNextProcesses(thnexts);
|
|
|
- }
|
|
|
- // 小卷退火卷数合并
|
|
|
- if(thps.get(i).getProcessType().equals("小卷退火")){
|
|
|
- thps.get(0).setMinThPcNum(thps.get(0).getMinThPcNum()+thps.get(i).getMinThPcNum());
|
|
|
}
|
|
|
}
|
|
|
+ // 取第一个作业作为合并作业
|
|
|
+ ProductionProcesses mergePro = thps.get(0);
|
|
|
+ mergePro.setVolumeWidth(mergePro.getVolumeWidth().multiply(new BigDecimal(thps.size())));
|
|
|
+ mergePro.setSinglerollweight(mergePro.getSinglerollweight().multiply(new BigDecimal(thps.size())));
|
|
|
+ mergePro.setOpeProducePcNum(thps.size());
|
|
|
+ mergeprocesses.add(mergePro);
|
|
|
}
|
|
|
- // 取第一个作业作为合并作业
|
|
|
- ProductionProcesses mergePro = thps.get(0);
|
|
|
- mergePro.setVolumeWidth(mergePro.getVolumeWidth().multiply(new BigDecimal(thps.size())));
|
|
|
- mergePro.setSinglerollweight(mergePro.getSinglerollweight().multiply(new BigDecimal(thps.size())));
|
|
|
- mergePro.setOpeProducePcNum(thps.size());
|
|
|
- mergeprocesses.add(mergePro);
|
|
|
}
|
|
|
+ }else{
|
|
|
+ mergeprocesses.addAll(v);
|
|
|
}
|
|
|
- }else{
|
|
|
- mergeprocesses.addAll(v);
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
return mergeprocesses;
|
|
|
}
|
|
|
|