Ver Fonte

排程数据组装优化

fangpy há 1 ano atrás
pai
commit
8e159e87bb

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

@@ -595,7 +595,11 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                     apsProcessOperationProcessEqu.setTenantid(process.getEquipment().getFactoryid());
                     apsProcessOperationProcessEqu.setPlanstartdate(Date.from(process.getStartTime().atZone(ZoneId.systemDefault()).toInstant()));
                     apsProcessOperationProcessEqu.setPlanenddate(Date.from(process.getEndTime().atZone(ZoneId.systemDefault()).toInstant()));
-                    apsProcessOperationProcessEqu.setPlanprocessrall(1);
+                    if("小卷成退".equals(process.getProcessType()) || "小卷包装".equals(process.getProcessType())){
+                        apsProcessOperationProcessEqu.setPlanprocessrall(process.getMinThPcNum());
+                    }else{
+                        apsProcessOperationProcessEqu.setPlanprocessrall(1);
+                    }
                     apsProcessOperationProcessEqu.setHasconflict(process.getHasConflict());
                     apsProcessOperationProcessEqu.setConflictdes(process.getConflictDes());
                     apsProcessOperationProcessEqu.setSoftconflictdes(process.getSoftconflictdes());

+ 48 - 2
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsServiceImpl.java

@@ -497,6 +497,10 @@ public class ApsServiceImpl implements ApsService {
             }
             productionScheduleVo.setWashingtime(apsScheduleConfig.getWashingtime());
             productionScheduleVo.setStandingtime(apsScheduleConfig.getStandingtime());
+            productionScheduleVo.setStandingyield(apsScheduleConfig.getStandingyield());
+            if(productionScheduleVo.getStandingyield() == null){
+                productionScheduleVo.setStandingyield(60);
+            }
         } else {
             throw new CustomException("排程参数缺失");
         }
@@ -637,7 +641,7 @@ public class ApsServiceImpl implements ApsService {
                                     .eq(ApsProcessOperationProcessEquDo::getLockmark, "y")
 //                                    .notIn(ApsProcessOperationProcessEquDo::getBlankid, blankids)
                                     .lt(ApsProcessOperationProcessEquDo::getPlanstartdate, productionScheduleVo.getApsPlanStartDate())
-                                    .orderByDesc(ApsProcessOperationProcessEquDo::getPlanstartdate)
+                                    .orderByDesc(ApsProcessOperationProcessEquDo::getPlanstartdate).last(" limit 100")
                             );
                         }else if(opId != null && opId.size()>0){
                             lastpros = processOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
@@ -645,10 +649,11 @@ public class ApsServiceImpl implements ApsService {
                                     .eq(ApsProcessOperationProcessEquDo::getLockmark, "y")
 //                                    .notIn(ApsProcessOperationProcessEquDo::getProcessid, opId)
                                     .lt(ApsProcessOperationProcessEquDo::getPlanstartdate, productionScheduleVo.getApsPlanStartDate())
-                                    .orderByDesc(ApsProcessOperationProcessEquDo::getPlanstartdate)
+                                    .orderByDesc(ApsProcessOperationProcessEquDo::getPlanstartdate).last(" limit 100")
                             );
                         }
 
+                        BigDecimal hasLbs = null;
                         if (lastpros != null && lastpros.size() > 0) {
                             boolean hasLast = true;
                             ApsProcessOperationProcessEquDo lastpro = lastpros.get(0);
@@ -658,6 +663,35 @@ public class ApsServiceImpl implements ApsService {
                                     hasLast = false;
                                 }
                             }
+                            // 获取加工设备当前开始时间第一道工序的立板周期
+                            Set<String> prosids = new HashSet<>();
+                            lastpros.forEach(v->{
+                                prosids.add(v.getProcessid());
+                            });
+                            // 查询所有作业详情信息
+                            List<ApsProcessOperationDo> lastops = (List<ApsProcessOperationDo>)apsProcessOperationService.listByIds(prosids);
+                            Map<String,ApsProcessOperationDo> lastopsMap = new HashMap<>();
+                            for (ApsProcessOperationDo lastop : lastops) {
+                                lastopsMap.put(lastop.getId(),lastop);
+                            }
+
+                            // 遍历找到最近一个立板周期
+                            String lbtj = null;
+                            for (int i = 0; i < lastpros.size(); i++) {
+                                ApsProcessOperationDo apo = lastopsMap.get(lastpros.get(i).getProcessid());
+                                String thislbtj = apo.getMetal() + "^_^" + apo.getProducttype() + "^_^" + apo.getProwidth();
+                                if(hasLbs == null){
+                                    hasLbs = apo.getSinglerollweight();
+                                    lbtj = thislbtj;
+                                }else{
+                                    if(lbtj.equals(thislbtj)){
+                                        hasLbs = hasLbs.add(apo.getSinglerollweight());
+                                    }else{
+                                        break;
+                                    }
+                                }
+                            }
+
                             if(hasLast){
                                 ApsProcessOperationDo lastop = apsProcessOperationService.getById(lastpro.getProcessid());
                                 // 输出物料
@@ -665,10 +699,13 @@ public class ApsServiceImpl implements ApsService {
                                         .eq(ApsProcessOperationOutMaterDo::getMainid, lastpro.getProcessid()));
                                 equipment.setLastProcessType(lastop.getProcess());
                                 equipment.setLastProcessEndTime(lastpro.getPlanenddate());
+                                equipment.setOnceprocessmin(lastop.getOnceprocessmin().intValue());
                                 equipment.setLastProcessCutfinishmin(lastop.getCutfinishmin() == null ? null : lastop.getCutfinishmin().intValue());
+                                equipment.setLastSerialLbWeight(hasLbs);
                                 // 合金+输入物料+宽度+厚度+输出物料厚度
                                 equipment.setLastSeriesProduceMark(lastop.getMetal() + "^_^" + lastop.getProducttype() + "^_^" + lastop.getProwidth() + "^_^" + lastop.getThickness() + "^_^" + outMaterDos.get(0).getThickness());
                                 equipment.setLastProcessCutfinishmin(lastop.getCutfinishmin() == null ? null : lastop.getCutfinishmin().intValue());
+
                             }
                         }
                         // 查询相关工序作业
@@ -711,6 +748,10 @@ public class ApsServiceImpl implements ApsService {
                                         er.setTotalVolumeWidth(processesDo.getProwidth());
                                         er.setTotalSinglerollweight(processesDo.getSinglerollweight());
                                         er.setTotalThickness(processesDo.getThickness());
+                                        er.setOnceprocessmin(processesDo.getOnceprocessmin().intValue());
+                                        if(lastpros != null && lastpros.size()>0 && equs.getId().equals(lastpros.get(0).getId())){
+                                            er.setLastSerialLbWeight(hasLbs);
+                                        }
                                     }
                                 }
                                 equipmentRunTimes.add(er);
@@ -879,12 +920,14 @@ public class ApsServiceImpl implements ApsService {
                             apsOverallConfig.setFurnaceInstallations(productionScheduleVo.getFurnaceInstallations());
                             apsOverallConfig.setMergeFurnaces(productionScheduleVo.getMergeFurnaces());
                             apsOverallConfig.setLooseness(productionScheduleVo.getLooseness());
+                            apsOverallConfig.setStandingyield(productionScheduleVo.getStandingyield());
                             processes.setApsOverallConfig(apsOverallConfig);
                         }
                         Integer alls = js;
                         if(i<ys){
                             alls = alls + 1;
                         }
+                        processes.setMinThPcNum(alls);
                         processes.setSinglerollweight(operationDo.getSinglerollweight().multiply(new BigDecimal(alls)));
 
                         operationProcess.add(processes);
@@ -919,12 +962,14 @@ public class ApsServiceImpl implements ApsService {
                             apsOverallConfig.setFurnaceInstallations(productionScheduleVo.getFurnaceInstallations());
                             apsOverallConfig.setMergeFurnaces(productionScheduleVo.getMergeFurnaces());
                             apsOverallConfig.setLooseness(productionScheduleVo.getLooseness());
+                            apsOverallConfig.setStandingyield(productionScheduleVo.getStandingyield());
                             processes.setApsOverallConfig(apsOverallConfig);
                         }
                         Integer alls = js;
                         if(i<ys){
                             alls = alls + 1;
                         }
+                        processes.setMinThPcNum(alls);
                         processes.setProduceTime(operationDo.getOnceprocessmin().intValue() * alls);
 
                         operationProcess.add(processes);
@@ -947,6 +992,7 @@ public class ApsServiceImpl implements ApsService {
                             apsOverallConfig.setFurnaceInstallations(productionScheduleVo.getFurnaceInstallations());
                             apsOverallConfig.setMergeFurnaces(productionScheduleVo.getMergeFurnaces());
                             apsOverallConfig.setLooseness(productionScheduleVo.getLooseness());
+                            apsOverallConfig.setStandingyield(productionScheduleVo.getStandingyield());
                             processes.setApsOverallConfig(apsOverallConfig);
                         }
                         operationProcess.add(processes);

+ 5 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsScheduleConfigDo.java

@@ -137,6 +137,11 @@ public class ApsScheduleConfigDo extends BaseDo {
      */
     @TableField("STANDINGTIME")
     private Integer standingtime;
+    /**
+     * 立板产量(吨)
+     */
+    @TableField("STANDINGYIELD")
+    private Integer standingyield;
     /**
      * 排程速度
      */

+ 4 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/ApsOverallConfig.java

@@ -54,6 +54,10 @@ public class ApsOverallConfig implements Serializable {
      * 立板时间(小时)
      */
     private Integer standingtime;
+    /**
+     * 周期立板产量(吨)
+     */
+    private Integer standingyield;
     /**
      * 松散度
      */

+ 10 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/Equipment.java

@@ -87,6 +87,16 @@ public class Equipment{
      */
     private Integer lastProcessCutfinishmin;
 
+    /**
+     * 当前设备最后工序的单卷加工时间
+     */
+    private Integer onceprocessmin;
+
+    /**
+     * 当前设备最后工序的已立板总重量
+     */
+    private BigDecimal lastSerialLbWeight;
+
     /**
      * 关联设备,铸轧机关联的熔炼炉
      */

+ 10 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/EquipmentRunTime.java

@@ -63,6 +63,11 @@ public class EquipmentRunTime {
      */
     private BigDecimal totalThickness;
 
+    /**
+     * 单次加工时间
+     */
+    private Integer onceprocessmin;
+
     /**
      * 是否锁定标识,排程中的是false
      */
@@ -73,4 +78,9 @@ public class EquipmentRunTime {
      */
     private String occupyType;
 
+    /**
+     * 当前设备最后工序的已立板总重量
+     */
+    private BigDecimal lastSerialLbWeight;
+
 }

+ 13 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/ProductionProcesses.java

@@ -121,6 +121,11 @@ public class ProductionProcesses{
      */
     private Integer producePcNum;
 
+    /**
+     * 小卷退火加工卷数
+     */
+    private Integer minThPcNum;
+
     /**
      * 开始时间
      */
@@ -545,4 +550,12 @@ public class ProductionProcesses{
     public void setProducttype(String producttype) {
         this.producttype = producttype;
     }
+
+    public Integer getMinThPcNum() {
+        return minThPcNum;
+    }
+
+    public void setMinThPcNum(Integer minThPcNum) {
+        this.minThPcNum = minThPcNum;
+    }
 }

+ 4 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/ProductionScheduleVo.java

@@ -75,6 +75,10 @@ public class ProductionScheduleVo {
      * 立板时间(小时)
      */
     private Integer standingtime;
+    /**
+     * 周期立板产量(吨)
+     */
+    private Integer standingyield;
     /**
      * 松散度
      */