فهرست منبع

排程优化-铸轧优化

fangpy 9 ماه پیش
والد
کامیت
9442124922

+ 36 - 29
rw-aps-server/src/main/java/com/rongwei/rwapsserver/aps/score/ApsConstraintProvider.java

@@ -669,6 +669,9 @@ public class ApsConstraintProvider implements ConstraintProvider {
                 }
                 // 周期立板剩余时间
                 BigDecimal syLb = standingyieldbig.subtract(zqlb);
+                if(syLb.compareTo(new BigDecimal("10"))<0){
+                    syLb = new BigDecimal("10");
+                }
                 Integer syLbTime = (syLb.multiply(new BigDecimal(hasStartTimeProcess.get(i).getProduceTime()).divide(hasStartTimeProcess.get(i).getSinglerollweight(), 2, RoundingMode.HALF_UP)).intValue()+1);
                 // 铸轧立板是否连续
                 boolean lbserice = true;
@@ -2010,38 +2013,43 @@ public class ApsConstraintProvider implements ConstraintProvider {
             String afhj = sersafter[0];
             // 获取产品类型二级
             String afcplx = sersafter[1].split("-")[0];
-            // 铸轧合金兼容配置
-            if(apsNochangeRollerDos != null && apsNochangeRollerDos.size()>0){
-                for (ApsNochangeRollerDo apsNochangeRollerDo : apsNochangeRollerDos) {
-                    // 判断合金是否都包含,且相同
-                    if(bfhj.equals(afhj)){
-                        if(StrUtil.isNotBlank(apsNochangeRollerDo.getWorkingalloy())){
-                            if(apsNochangeRollerDo.getWorkingalloy().contains(bfhj) && apsNochangeRollerDo.getWorkingalloy().contains(afhj)){
-                                // 判断产品类型是包含还是不包含的关系
-                                if("包含".equals(apsNochangeRollerDo.getCompatibilityrules())){
-                                    // 产品类型不为空
-                                    if(StrUtil.isNotBlank(apsNochangeRollerDo.getJobproducttype())){
-                                        if(apsNochangeRollerDo.getJobproducttype().contains(bfcplx) && apsNochangeRollerDo.getJobproducttype().contains(afcplx)){
-                                            ifJr = true;
-                                            break;
+            // 合金和二级产品类型一样的无需换辊
+            if(bfhj.equals(afhj) && bfcplx.equals(afcplx)){
+                ifJr = true;
+            }else{
+                // 铸轧合金兼容配置
+                if(apsNochangeRollerDos != null && apsNochangeRollerDos.size()>0){
+                    for (ApsNochangeRollerDo apsNochangeRollerDo : apsNochangeRollerDos) {
+                        // 判断合金是否都包含,且相同
+                        if(bfhj.equals(afhj)){
+                            if(StrUtil.isNotBlank(apsNochangeRollerDo.getWorkingalloy())){
+                                if(apsNochangeRollerDo.getWorkingalloy().contains(bfhj) && apsNochangeRollerDo.getWorkingalloy().contains(afhj)){
+                                    // 判断产品类型是包含还是不包含的关系
+                                    if("包含".equals(apsNochangeRollerDo.getCompatibilityrules())){
+                                        // 产品类型不为空
+                                        if(StrUtil.isNotBlank(apsNochangeRollerDo.getJobproducttype())){
+                                            if(apsNochangeRollerDo.getJobproducttype().contains(bfcplx) && apsNochangeRollerDo.getJobproducttype().contains(afcplx)){
+                                                ifJr = true;
+                                                break;
+                                            }
                                         }
-                                    }
-                                    // 产品类型为空
-                                    else{
-                                        ifJr = true;
-                                        break;
-                                    }
-                                } else if ("不包含".equals(apsNochangeRollerDo.getCompatibilityrules())) {
-                                    // 产品类型不为空
-                                    if(StrUtil.isNotBlank(apsNochangeRollerDo.getJobproducttype())){
-                                        if(!apsNochangeRollerDo.getJobproducttype().contains(bfcplx) && !apsNochangeRollerDo.getJobproducttype().contains(afcplx)){
+                                        // 产品类型为空
+                                        else{
                                             ifJr = true;
                                             break;
                                         }
-                                    }
-                                    // 产品类型为空
-                                    else{
-                                        continue;
+                                    } else if ("不包含".equals(apsNochangeRollerDo.getCompatibilityrules())) {
+                                        // 产品类型不为空
+                                        if(StrUtil.isNotBlank(apsNochangeRollerDo.getJobproducttype())){
+                                            if(!apsNochangeRollerDo.getJobproducttype().contains(bfcplx) && !apsNochangeRollerDo.getJobproducttype().contains(afcplx)){
+                                                ifJr = true;
+                                                break;
+                                            }
+                                        }
+                                        // 产品类型为空
+                                        else{
+                                            continue;
+                                        }
                                     }
                                 }
                             }
@@ -2050,7 +2058,6 @@ public class ApsConstraintProvider implements ConstraintProvider {
                 }
             }
         }
-
         return ifJr;
     }
 

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

@@ -1420,6 +1420,7 @@ public class ApsServiceImpl implements ApsService {
                             if(i>0){
                                 productionProcesses.getMergeProOrders().add(v.get(i).getId());
                                 productionProcesses.setProduceTime(productionProcesses.getProduceTime()+v.get(i).getProduceTime());
+                                productionProcesses.setSinglerollweight(productionProcesses.getSinglerollweight().add(v.get(i).getSinglerollweight()));
                                 productionProcesses.setOpeProducePcNum(v.size());
                             }
                         }
@@ -1510,6 +1511,24 @@ public class ApsServiceImpl implements ApsService {
                         mergeZz.setProduceTime(mergeZz.getProduceTime()-po.getUnitProduceTime());
                         mergeZz.setEndTime(mergeZz.getEndTime().minusMinutes(po.getUnitProduceTime()));
                         mergeZz.setOpeProducePcNum(1);
+
+                        if(i == mergeProOrders.size()-1 && mergeProOrders.size() > 1){
+                            String conStr = mergeZz.getConflictRoptions().get("soft-seriesProduceZz");
+                            if(mergeZz.getConflictRoptions() != null && conStr != null && conStr.contains("和后一道工序违反换辊和立板的连续约束")){
+                                mergeZz.getConflictRoptions().put("soft-seriesProduceZz",conStr.replaceAll("和后一道工序违反换辊和立板的连续约束",""));
+                                if(po.getConflictRoptions() == null){
+                                    po.setConflictRoptions(new HashMap<>());
+                                }
+                                po.getConflictRoptions().put("soft-seriesProduceZz","和后一道工序违反换辊和立板的连续约束");
+                            }
+                            if(mergeZz.getConflictRoptions() != null && conStr != null && conStr.contains("和后一道工序违反立板的连续约束")){
+                                mergeZz.getConflictRoptions().put("soft-seriesProduceZz",conStr.replaceAll("和后一道工序违反立板的连续约束",""));
+                                if(po.getConflictRoptions() == null){
+                                    po.setConflictRoptions(new HashMap<>());
+                                }
+                                po.getConflictRoptions().put("soft-seriesProduceZz","和后一道工序违反立板的连续约束");
+                            }
+                        }
                     }
                 }
             }