فهرست منبع

合并工序订单列表

fangpy 1 سال پیش
والد
کامیت
0772a90705
1فایلهای تغییر یافته به همراه170 افزوده شده و 154 حذف شده
  1. 170 154
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsBlankOrderServiceImpl.java

+ 170 - 154
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsBlankOrderServiceImpl.java

@@ -156,12 +156,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                 }
             }
         }
-        if(apsBlankOrders.size()>0){
-            if(apsPlanVo.getApsBlankOrderDos() != null){
-                apsPlanVo.getApsBlankOrderDos().addAll(apsBlankOrders);
-            }else{
-                apsPlanVo.setApsBlankOrderDos(apsBlankOrders);
-            }
+        if(apsPlanVo.getApsBlankOrderDos() != null && apsPlanVo.getApsBlankOrderDos().size()>0){
+            apsBlankOrders.addAll(apsPlanVo.getApsBlankOrderDos());
         }
         blankOrderAps(apsBlankOrders);
     }
@@ -188,6 +184,9 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         processOperationProcessEquService.remove(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>().in(ApsProcessOperationProcessEquDo::getBlankid,blankids));
         // 模型转换
         ProductionScheduleVo productionScheduleVo = apsPlanModelSet(apsBlankOrders);
+        /*if(1 == 1){
+            return;
+        }*/
         JSONConfig jsonConfig = JSONConfig.create();
         jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
         System.out.println("排程数据:" + JSONUtil.toJsonStr(productionScheduleVo,jsonConfig));
@@ -489,161 +488,50 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             }
             // 设备排序
             List<AspCheckItemsDo> aspCheckItemsDos = apsBlankOrderDao.eqAscs(allSelEqs);
+            // 记录当前设备已排程个数
+            Map<String,Integer> aspCheckItemUse = new HashMap<>();
             Map<String,AspCheckItemsDo> aspCheckItemMap = new HashMap<>();
             for (AspCheckItemsDo aspCheckItemsDo : aspCheckItemsDos) {
                 aspCheckItemMap.put(aspCheckItemsDo.getId(),aspCheckItemsDo);
+                aspCheckItemUse.put(aspCheckItemsDo.getId(),0);
             }
-            // 记录最后选择的设备序号
-            Integer m = 0;
             for (ApsProcessOperationVo processOperationM : processOperationMs) {
-                // 作业加工卷数
+                // 首先查看是否有可以合并的已存在的工序
+                hasProcessmerge(processesList,processOperationM,aspCheckItemMap);
+                // 剩下作业加工卷数,启用新的作业
                 int planprocessrall = processOperationM.getPlanprocessrall();
                 if(planprocessrall<=0){
                     continue;
                 }
                 Boolean a = true;
-                long timestart = DateUtil.date().getTime();
-
                 while (a){
                     int lastnum = processOperationM.getPlanprocessrall();
-
-                    // 首先看已合并生产的设备是否还有余量继续排产
-                    for (ProductionProcesses processes : processesList) {
-                        // 加工设备
-                        String eq = processes.getOptionalEquipments().get(0);
-                        AspCheckItemsDo aspCheckItem = aspCheckItemMap.get(eq);
-
-                        // 工序类型一致,合金和合金状态要一致
-                        if(processes.getProcessType().equals(processOperationM.getProcess()) && processes.getAluminumCoils().get(0).getVolumeMetal().equals(processOperationM.getMetal())
-                                && processes.getAluminumCoils().get(0).getVolumeMetalstate().equals(processOperationM.getMetalstate())){
-                            // 宽度不超过50mm,厚度不超过0.05mm,重量不超过1吨
-                            boolean bol = true;
-                            BigDecimal totalWidth = null;
-                            BigDecimal totalWeight = null;
-                            // 宽度、厚度、重量绝对值差限制
-                            BigDecimal knum = null;
-                            BigDecimal hnum = null;
-                            BigDecimal znum = null;
-                            if(SaveConstans.ProcessType.PROCESS_TYPE_CHENTUI.equals(processes.getProcessType())){
-                                knum = new BigDecimal("50");
-                                hnum = new BigDecimal("0.05");
-                                znum = new BigDecimal("1");
-                            } else if (SaveConstans.ProcessType.PROCESS_TYPE_ZHONGTUI.equals(processes.getProcessType())) {
-                                knum = new BigDecimal("100");
-                                hnum = new BigDecimal("0.08");
-                                znum = new BigDecimal("1");
-                            }
-                            if(knum == null || hnum == null || znum == null){
-                                continue;
-                            }
-
-                            for (AluminumCoil aluminumCoil : processes.getAluminumCoils()) {
-                                // 宽度不超过50mm
-                                if(aluminumCoil.getVolumeWidth().subtract(processOperationM.getProwidth()).abs().compareTo(knum)>0){
-                                    bol = false;
-                                }
-                                // 厚度不超过0.05mm
-                                if(aluminumCoil.getVolumeThickness().subtract(processOperationM.getThickness()).abs().compareTo(hnum)>0){
-                                    bol = false;
-                                }
-                                // 重量不超过1吨
-                                if(aluminumCoil.getVolumeWeight().subtract(processOperationM.getSinglerollweight()).abs().compareTo(znum)>0){
-                                    bol = false;
-                                }
-                                if(totalWidth == null){
-                                    totalWidth = aluminumCoil.getVolumeWidth();
-                                }else{
-                                    totalWidth = totalWidth.add(aluminumCoil.getVolumeWidth());
-                                }
-                                if(totalWeight == null){
-                                    totalWeight = aluminumCoil.getVolumeWeight();
-                                }else{
-                                    totalWeight = totalWeight.add(aluminumCoil.getVolumeWeight());
-                                }
-                            }
-                            if(bol){
-                                Integer sy = 0;
-                                for (int j=1;j<=planprocessrall;j++){
-                                    // 宽度余量
-                                    if(aspCheckItem.getEquipmentwidth().subtract(totalWidth).compareTo(processOperationM.getProwidth().multiply(new BigDecimal(j)))<0){
-                                        break;
-                                    }
-                                    // 重量余量
-                                    if(aspCheckItem.getEquipmentbearing().subtract(totalWeight).compareTo(processOperationM.getSinglerollweight().multiply(new BigDecimal(j)))<0){
-                                        break;
-                                    }
-                                    sy = j;
-                                }
-                                if(sy>0){
-                                    lastnum = planprocessrall - sy;
-                                    for (int j=1;j<=sy;j++){
-                                        AluminumCoil aluminumCoil = new AluminumCoil();
-                                        aluminumCoil.setBsId(processOperationM.getId());
-                                        aluminumCoil.setBlankid(processOperationM.getBlankid());
-                                        aluminumCoil.setVolumeWidth(processOperationM.getProwidth());
-                                        aluminumCoil.setVolumeThickness(processOperationM.getThickness());
-                                        aluminumCoil.setVolumeWeight(processOperationM.getSinglerollweight());
-                                        aluminumCoil.setVolumeMetal(processOperationM.getMetal());
-                                        aluminumCoil.setVolumeMetalstate(processOperationM.getMetalstate());
-                                        processes.getAluminumCoils().add(aluminumCoil);
-                                    }
-
-                                    // 上道工序
-                                    if(StringUtils.isNotBlank(processOperationM.getPreviousprocessid())){
-                                        if(processes.getPreviousProcessesIds() == null){
-                                            List<String> list = new ArrayList<>();
-                                            list.addAll(Arrays.asList(processOperationM.getPreviousprocessid().split(",")));
-                                            processes.setPreviousProcessesIds(list);
-                                        }else{
-                                            processes.getPreviousProcessesIds().addAll(new ArrayList<>(Arrays.asList(processOperationM.getPreviousprocessid().split(","))));
-                                        }
-                                    }
-                                    // 下道工序
-                                    if(StringUtils.isNotBlank(processOperationM.getNextprocessid())){
-                                        if(processes.getNextProcessesIds() == null){
-                                            List<String> list = new ArrayList<>();
-                                            list.addAll(Arrays.asList(processOperationM.getNextprocessid().split(",")));
-                                            processes.setNextProcessesIds(list);
-                                        }else{
-                                            processes.getNextProcessesIds().addAll(new ArrayList<>(Arrays.asList(processOperationM.getNextprocessid().split(","))));
-                                        }
-                                    }
-                                    // 所属订单
-                                    List<ProduceOrder> produceOrders = processes.getProduceOrder().stream().filter(v ->
-                                            v.getId().equals(processOperationM.getApsBlankOrderVo().getId())).collect(Collectors.toList());
-                                    if(produceOrders == null || produceOrders.size() == 0){
-                                        ProduceOrder produceOrder = new ProduceOrder(processOperationM.getApsBlankOrderVo().getId(),processOperationM.getApsBlankOrderVo().getMaterialname(),processOperationM.getApsBlankOrderVo().getDeliverydate());
-                                        processes.getProduceOrder().add(produceOrder);
-                                    }
-                                    // 单次加工时长
-                                    if(processes.getUnitProduceTime() == null){
-                                        processes.setUnitProduceTime(processOperationM.getOnceprocessmin().intValue());
-                                        processes.setProduceTime(processOperationM.getOnceprocessmin().intValue());
-                                    }
-                                    // 加工时长取最大值
-                                    else{
-                                        if(processes.getUnitProduceTime()<processOperationM.getOnceprocessmin().intValue()){
-                                            processes.setUnitProduceTime(processOperationM.getOnceprocessmin().intValue());
-                                            processes.setProduceTime(processOperationM.getOnceprocessmin().intValue());
+                    // 剩余的料卷
+                    if(lastnum>0){
+                        Integer minUse = null;
+                        int haslast = 0;
+                        AspCheckItemsDo aspCheckItem = null;
+                        for(int i=0;i<aspCheckItemsDos.size();i++){
+                            // 选择的设备要在可选设备的范围内
+                            if(processOperationM.getCanchoosedeviceid().contains(aspCheckItemsDos.get(i).getId())){
+                                // 单卷宽度不能超过设备宽度并且单卷重不能超过设备的承重
+                                if(processOperationM.getProwidth().compareTo(aspCheckItemsDos.get(i).getEquipmentwidth())<0
+                                        && processOperationM.getSinglerollweight().compareTo(aspCheckItemsDos.get(i).getEquipmentbearing())<0){
+                                    // 获取使用次数最小的可选设备
+                                    if(aspCheckItem == null){
+                                        minUse = aspCheckItemUse.get(aspCheckItemsDos.get(i).getId());
+                                        aspCheckItem = aspCheckItemsDos.get(i);
+                                    }else{
+                                        if(minUse>aspCheckItemUse.get(aspCheckItemsDos.get(i).getId())){
+                                            minUse = aspCheckItemUse.get(aspCheckItemsDos.get(i).getId());
+                                            aspCheckItem = aspCheckItemsDos.get(i);
                                         }
                                     }
-                                    processes.getBsProcessesId().add(processOperationM.getId());
                                 }
                             }
                         }
-                    }
-
-                    // 剩余的料卷
-                    if(lastnum>0){
-                        if(m == aspCheckItemsDos.size()-1){
-                            m = -1;
-                        }
-                        int haslast = 0;
-                        for(int i=m+1;i<aspCheckItemsDos.size();i++){
-                            if(lastnum <= 0){
-                                break;
-                            }
-                            AspCheckItemsDo aspCheckItem = aspCheckItemsDos.get(i);
+                        // 新增工序作业
+                        if(aspCheckItem != null){
                             // 选择的设备要在可选设备的范围内
                             if(processOperationM.getCanchoosedeviceid().contains(aspCheckItem.getId())){
                                 // 单卷宽度不能超过设备宽度并且单卷重不能超过设备的承重
@@ -712,29 +600,157 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                                         processesList.add(processes);
 
                                         lastnum = lastnum - haslast;
+                                        // 更新设备使用次数
+                                        aspCheckItemUse.put(aspCheckItem.getId(),aspCheckItemUse.get(aspCheckItem.getId())+1);
                                     }
                                 }
                             }
-                            // 记录最后选用设备的顺序
-                            m = i;
-                            System.out.println("******m = " + m);
                         }
                     }
+                    // 重新设置计划加工卷数
                     processOperationM.setPlanprocessrall(lastnum);
                     if(lastnum <= 0){
                         a = false;
                     }
-
-                    // 循环超过2秒则强制退出防止内存溢出
-                    /*long timeend = DateUtil.date().getTime();
-                    if(timeend-timestart>3000){
-                        System.out.println("数据异常强制退出,剩余待加工数量:" + lastnum);
-                        a = false;
-                    }*/
                 }
             }
         }
         return processesList;
     }
 
+    /**
+     * 查看是否有可以合并的已存在的工序
+     * @param processesList
+     * @param processOperationM
+     * @param aspCheckItemMap
+     */
+    private void hasProcessmerge(List<ProductionProcesses> processesList,ApsProcessOperationVo processOperationM,Map<String,AspCheckItemsDo> aspCheckItemMap){
+        // 首先看已合并生产的设备是否还有余量继续排产
+        for (ProductionProcesses processes : processesList) {
+            // 加工设备
+            String eq = processes.getOptionalEquipments().get(0);
+            AspCheckItemsDo aspCheckItem = aspCheckItemMap.get(eq);
+
+            // 工序类型一致,合金和合金状态要一致
+            if(processes.getProcessType().equals(processOperationM.getProcess()) && processes.getAluminumCoils().get(0).getVolumeMetal().equals(processOperationM.getMetal())
+                    && processes.getAluminumCoils().get(0).getVolumeMetalstate().equals(processOperationM.getMetalstate())){
+                // 宽度不超过50mm,厚度不超过0.05mm,重量不超过1吨
+                boolean bol = true;
+                BigDecimal totalWidth = null;
+                BigDecimal totalWeight = null;
+                // 宽度、厚度、重量绝对值差限制
+                BigDecimal knum = null;
+                BigDecimal hnum = null;
+                BigDecimal znum = null;
+                if(SaveConstans.ProcessType.PROCESS_TYPE_CHENTUI.equals(processes.getProcessType())){
+                    knum = new BigDecimal("50");
+                    hnum = new BigDecimal("0.05");
+                    znum = new BigDecimal("1");
+                } else if (SaveConstans.ProcessType.PROCESS_TYPE_ZHONGTUI.equals(processes.getProcessType())) {
+                    knum = new BigDecimal("100");
+                    hnum = new BigDecimal("0.08");
+                    znum = new BigDecimal("1");
+                }
+                if(knum == null || hnum == null || znum == null){
+                    continue;
+                }
+
+                for (AluminumCoil aluminumCoil : processes.getAluminumCoils()) {
+                    // 宽度不超过50mm
+                    if(aluminumCoil.getVolumeWidth().subtract(processOperationM.getProwidth()).abs().compareTo(knum)>0){
+                        bol = false;
+                    }
+                    // 厚度不超过0.05mm
+                    if(aluminumCoil.getVolumeThickness().subtract(processOperationM.getThickness()).abs().compareTo(hnum)>0){
+                        bol = false;
+                    }
+                    // 重量不超过1吨
+                    if(aluminumCoil.getVolumeWeight().subtract(processOperationM.getSinglerollweight()).abs().compareTo(znum)>0){
+                        bol = false;
+                    }
+                    if(totalWidth == null){
+                        totalWidth = aluminumCoil.getVolumeWidth();
+                    }else{
+                        totalWidth = totalWidth.add(aluminumCoil.getVolumeWidth());
+                    }
+                    if(totalWeight == null){
+                        totalWeight = aluminumCoil.getVolumeWeight();
+                    }else{
+                        totalWeight = totalWeight.add(aluminumCoil.getVolumeWeight());
+                    }
+                }
+                if(bol){
+                    Integer sy = 0;
+                    for (int j=1;j<=processOperationM.getPlanprocessrall();j++){
+                        // 宽度余量
+                        if(aspCheckItem.getEquipmentwidth().subtract(totalWidth).compareTo(processOperationM.getProwidth().multiply(new BigDecimal(j)))<0){
+                            break;
+                        }
+                        // 重量余量
+                        if(aspCheckItem.getEquipmentbearing().subtract(totalWeight).compareTo(processOperationM.getSinglerollweight().multiply(new BigDecimal(j)))<0){
+                            break;
+                        }
+                        sy = j;
+                    }
+                    if(sy>0){
+                        // 更新计划加工卷数
+                        processOperationM.setPlanprocessrall(processOperationM.getPlanprocessrall() - sy);
+                        for (int j=1;j<=sy;j++){
+                            AluminumCoil aluminumCoil = new AluminumCoil();
+                            aluminumCoil.setBsId(processOperationM.getId());
+                            aluminumCoil.setBlankid(processOperationM.getBlankid());
+                            aluminumCoil.setVolumeWidth(processOperationM.getProwidth());
+                            aluminumCoil.setVolumeThickness(processOperationM.getThickness());
+                            aluminumCoil.setVolumeWeight(processOperationM.getSinglerollweight());
+                            aluminumCoil.setVolumeMetal(processOperationM.getMetal());
+                            aluminumCoil.setVolumeMetalstate(processOperationM.getMetalstate());
+                            processes.getAluminumCoils().add(aluminumCoil);
+                        }
+
+                        // 上道工序
+                        if(StringUtils.isNotBlank(processOperationM.getPreviousprocessid())){
+                            if(processes.getPreviousProcessesIds() == null){
+                                List<String> list = new ArrayList<>();
+                                list.addAll(Arrays.asList(processOperationM.getPreviousprocessid().split(",")));
+                                processes.setPreviousProcessesIds(list);
+                            }else{
+                                processes.getPreviousProcessesIds().addAll(new ArrayList<>(Arrays.asList(processOperationM.getPreviousprocessid().split(","))));
+                            }
+                        }
+                        // 下道工序
+                        if(StringUtils.isNotBlank(processOperationM.getNextprocessid())){
+                            if(processes.getNextProcessesIds() == null){
+                                List<String> list = new ArrayList<>();
+                                list.addAll(Arrays.asList(processOperationM.getNextprocessid().split(",")));
+                                processes.setNextProcessesIds(list);
+                            }else{
+                                processes.getNextProcessesIds().addAll(new ArrayList<>(Arrays.asList(processOperationM.getNextprocessid().split(","))));
+                            }
+                        }
+                        // 所属订单
+                        List<ProduceOrder> produceOrders = processes.getProduceOrder().stream().filter(v ->
+                                v.getId().equals(processOperationM.getApsBlankOrderVo().getId())).collect(Collectors.toList());
+                        if(produceOrders == null || produceOrders.size() == 0){
+                            ProduceOrder produceOrder = new ProduceOrder(processOperationM.getApsBlankOrderVo().getId(),processOperationM.getApsBlankOrderVo().getMaterialname(),processOperationM.getApsBlankOrderVo().getDeliverydate());
+                            processes.getProduceOrder().add(produceOrder);
+                        }
+                        // 单次加工时长
+                        if(processes.getUnitProduceTime() == null){
+                            processes.setUnitProduceTime(processOperationM.getOnceprocessmin().intValue());
+                            processes.setProduceTime(processOperationM.getOnceprocessmin().intValue());
+                        }
+                        // 加工时长取最大值
+                        else{
+                            if(processes.getUnitProduceTime()<processOperationM.getOnceprocessmin().intValue()){
+                                processes.setUnitProduceTime(processOperationM.getOnceprocessmin().intValue());
+                                processes.setProduceTime(processOperationM.getOnceprocessmin().intValue());
+                            }
+                        }
+                        processes.getBsProcessesId().add(processOperationM.getId());
+                    }
+                }
+            }
+        }
+    }
+
 }