fangpy před 11 měsíci
rodič
revize
6bc9732178

+ 0 - 40
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/score/ApsConstraintProvider.java

@@ -1824,25 +1824,6 @@ public class ApsConstraintProvider implements ConstraintProvider {
                             return false;
                         }
                     }else{
-                        /*ProductionProcesses preProcess = process.getPreviousProcesses().get(0);
-                        // 流转时间
-                        Integer lzTimes = 0;
-                        if(preProcess != null && preProcess.getEquipment() != null){
-                            if(preProcess.getEquipment().getWorkshopid() != null && preProcess.getEquipment().getWorkshopid().equals(process.getEquipment().getWorkshopid())){
-                                lzTimes = process.getApsOverallConfig().getRoamTime().get("WORKSHOP_IN");
-                            }else{
-                                lzTimes = process.getApsOverallConfig().getRoamTime().get("WORKSHOP_CROSS");
-                            }
-                            // 最小等待时间对比流转时间
-                            if(preProcess.getMinWaitTime() != null && lzTimes<preProcess.getMinWaitTime()){
-                                lzTimes = preProcess.getMinWaitTime();
-                            }
-                            LocalDateTime minStartTime = preProcess.getEndTime().plusMinutes(lzTimes);
-                            if(process.getStartTime().compareTo(minStartTime)>0){
-                                return true;
-                            }
-                        }
-                        return false;*/
                         if(process.getStartTime() != null){
                             return true;
                         }else{
@@ -1853,27 +1834,6 @@ public class ApsConstraintProvider implements ConstraintProvider {
                 .penalize(HardMediumSoftScore.ONE_SOFT,(process) -> {
                     int processNearNum = 0;
                     processNearNum = (int)ChronoUnit.MINUTES.between(process.getApsOverallConfig().getStartTime(), process.getStartTime());
-
-                    /*if(process.getPreviousProcesses() == null || process.getPreviousProcesses().size() == 0){
-                        processNearNum = (int)ChronoUnit.MINUTES.between(process.getApsOverallConfig().getStartTime(), process.getStartTime());
-                    }else{
-                        ProductionProcesses preProcess = process.getPreviousProcesses().get(0);
-                        // 流转时间
-                        Integer lzTimes = 0;
-                        if(preProcess != null){
-                            if(preProcess.getEquipment().getWorkshopid() != null && preProcess.getEquipment().getWorkshopid().equals(process.getEquipment().getWorkshopid())){
-                                lzTimes = process.getApsOverallConfig().getRoamTime().get("WORKSHOP_IN");
-                            }else{
-                                lzTimes = process.getApsOverallConfig().getRoamTime().get("WORKSHOP_CROSS");
-                            }
-                            // 最小等待时间对比流转时间
-                            if(preProcess.getMinWaitTime() != null && lzTimes<preProcess.getMinWaitTime()){
-                                lzTimes = preProcess.getMinWaitTime();
-                            }
-                        }
-                        LocalDateTime minStartTime = preProcess.getEndTime().plusMinutes(lzTimes);
-                        processNearNum = (int)ChronoUnit.MINUTES.between(minStartTime, process.getStartTime());
-                    }*/
                     return processNearNum;
                 })
                 .asConstraint("processNear");

+ 134 - 129
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/service/impl/ApsServiceImpl.java

@@ -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;
     }