|
@@ -3,14 +3,21 @@ package com.rongwei.rwapsserver.aps.util;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import com.rongwei.rwapsserver.aps.domain.ApsSolution;
|
|
|
+import com.rongwei.rwapsserver.aps.domain.Equipment;
|
|
|
import com.rongwei.rwapsserver.aps.domain.EquipmentRunTime;
|
|
|
import com.rongwei.rwapsserver.aps.domain.ProductionProcesses;
|
|
|
+import com.rongwei.rwapsserver.aps.score.ApsConstraintProvider;
|
|
|
import com.rongwei.rwapsserver.aps.taskassigning.tado.EquipmentTa;
|
|
|
import com.rongwei.rwapsserver.aps.taskassigning.tado.ProductionProcessesTa;
|
|
|
import org.optaplanner.core.api.score.ScoreExplanation;
|
|
|
import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScore;
|
|
|
import org.optaplanner.core.api.score.constraint.ConstraintMatch;
|
|
|
+import org.optaplanner.core.api.solver.SolverFactory;
|
|
|
+import org.optaplanner.core.config.solver.EnvironmentMode;
|
|
|
+import org.optaplanner.core.config.solver.SolverConfig;
|
|
|
+import org.optaplanner.core.config.solver.termination.TerminationConfig;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.*;
|
|
|
|
|
@@ -165,4 +172,367 @@ public class ApsUtils {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ public SolverFactory<ApsSolution> getSolveFactory(){
|
|
|
+ SolverFactory<ApsSolution> solverFactory = SolverFactory.create(new SolverConfig()
|
|
|
+ .withEnvironmentMode(EnvironmentMode.REPRODUCIBLE)
|
|
|
+ .withSolutionClass(ApsSolution.class)
|
|
|
+ .withEntityClasses(ProductionProcesses.class)
|
|
|
+ .withConstraintProviderClass(ApsConstraintProvider.class)
|
|
|
+ .withTerminationConfig(new TerminationConfig().withUnimprovedSecondsSpentLimit(60L))
|
|
|
+// .withTerminationSpentLimit(Duration.ofSeconds(runPlanSeconds))
|
|
|
+ .withMoveThreadCount(Runtime.getRuntime().availableProcessors() + "")
|
|
|
+ );
|
|
|
+ return solverFactory;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void maxTimeXz(ApsSolution solvedBalance){
|
|
|
+ // 最大等待时间冲突手动解决
|
|
|
+ List<ProductionProcesses> maxSetPros = new ArrayList<>();
|
|
|
+ for (ProductionProcesses productionProcesses : solvedBalance.getProcessesList()) {
|
|
|
+ if(productionProcesses.getConflictDes() != null && "开工时间超出上道工序作业最大等待时间限制".equals(productionProcesses.getConflictDes())){
|
|
|
+ ProductionProcesses newPre = maxWaitTimeCheck(productionProcesses, maxSetPros,solvedBalance.getProcessesList(),solvedBalance.getEquipmentList());
|
|
|
+ if(newPre != null){
|
|
|
+ // 冲突信息处理
|
|
|
+ productionProcesses.setConflictDes(productionProcesses.getConflictDes().replaceAll("开工时间超出上道工序作业最大等待时间限制",""));
|
|
|
+ if(StrUtil.isBlank(productionProcesses.getConflictDes()) && StrUtil.isBlank(productionProcesses.getSoftconflictdes())){
|
|
|
+ productionProcesses.setHasConflict(null);
|
|
|
+ }
|
|
|
+ if(productionProcesses.getPreviousProcesses() != null && productionProcesses.getPreviousProcesses().size()>0){
|
|
|
+ for (ProductionProcesses previousProcess : productionProcesses.getPreviousProcesses()) {
|
|
|
+ if(previousProcess.getConflictDes() != null && previousProcess.getConflictDes().contains("与下道工序开始时间不符合规则")){
|
|
|
+ previousProcess.getConflictDes().replaceAll("与下道工序开始时间不符合规则","");
|
|
|
+ if(StrUtil.isBlank(previousProcess.getConflictDes()) && StrUtil.isBlank(previousProcess.getSoftconflictdes())){
|
|
|
+ previousProcess.setHasConflict(null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ productionProcesses.getPreviousProcesses().get(0).setConflictDes(productionProcesses.getConflictDes().replaceAll("开工时间超出上道工序作业最大等待时间限制",""));
|
|
|
+ if(StrUtil.isBlank(productionProcesses.getPreviousProcesses().get(0).getConflictDes()) && StrUtil.isBlank(productionProcesses.getPreviousProcesses().get(0).getSoftconflictdes())){
|
|
|
+ productionProcesses.getPreviousProcesses().get(0).setHasConflict(null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ productionProcesses.setIfLock(true);
|
|
|
+ }
|
|
|
+ if(maxSetPros != null && maxSetPros.size()>0){
|
|
|
+ for (ProductionProcesses maxSetPro : maxSetPros) {
|
|
|
+ for (ProductionProcesses productionProcesses : solvedBalance.getProcessesList()) {
|
|
|
+ if(productionProcesses.getId().equals(maxSetPro.getId())){
|
|
|
+ productionProcesses.setStartTime(maxSetPro.getStartTime());
|
|
|
+ productionProcesses.setEquipment(maxSetPro.getEquipment());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private ProductionProcesses maxWaitTimeCheck(ProductionProcesses process,List<ProductionProcesses> maxSetPros,List<ProductionProcesses> processes,List<Equipment> equipments){
|
|
|
+ ProductionProcesses newPre = null;
|
|
|
+ List<ProductionProcesses> previousProcesses = process.getPreviousProcesses();
|
|
|
+ if(previousProcesses != null){
|
|
|
+ for (ProductionProcesses previousProcess : previousProcesses) {
|
|
|
+ /*if(previousProcess.getEndTime().plusMinutes(previousProcess.getMaxWaitTime()).compareTo(process.getStartTime())>0){
|
|
|
+ continue;
|
|
|
+ }*/
|
|
|
+ if(previousProcess.getEndTime().plusMinutes(process.getMaxWaitTime()).compareTo(process.getStartTime())>0){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ ProductionProcesses preProcess = previousProcess;
|
|
|
+ if(!preProcess.getProcessType().equals("成退") && !preProcess.getProcessType().equals("中退") && !preProcess.getProcessType().equals("小卷成退")){
|
|
|
+ Equipment equipment = preProcess.getEquipment();
|
|
|
+ newPre = maxWaitSet(equipment, process, processes, preProcess);
|
|
|
+ if(newPre == null){
|
|
|
+ for (Equipment equipment1 : equipments) {
|
|
|
+ if(preProcess.getOptionalEquipments().contains(equipment1.getId()) && !equipment1.getId().equals(equipment.getId())){
|
|
|
+ newPre = maxWaitSet(equipment1, process, processes, preProcess);
|
|
|
+ if(newPre != null){
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(newPre != null){
|
|
|
+ preProcess.setStartTime(newPre.getStartTime());
|
|
|
+ preProcess.setIfLock(false);
|
|
|
+ preProcess.setEquipment(newPre.getEquipment());
|
|
|
+ preProcess.setIfLock(true);
|
|
|
+ maxSetPros.add(newPre);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return newPre;
|
|
|
+ }
|
|
|
+
|
|
|
+ private ProductionProcesses maxWaitSet(Equipment equipment,ProductionProcesses process,List<ProductionProcesses> processes,ProductionProcesses preProcess){
|
|
|
+ ProductionProcesses newPre = null;
|
|
|
+ Boolean hasSet = false;
|
|
|
+ // 最小等待时间
|
|
|
+ Integer lzTimes = 0;
|
|
|
+ if(equipment.getWorkshopid() != null && equipment.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 proStartTime = preProcess.getStartTime();
|
|
|
+ LocalDateTime proEndTime = preProcess.getEndTime();
|
|
|
+ List<EquipmentRunTime> equipmentRunTimesSource = equipment.getEquipmentRunTimes();
|
|
|
+ // 当前工序设备已占用时间
|
|
|
+ List<EquipmentRunTime> equipmentRunTimes = new ArrayList<>();
|
|
|
+ List<EquipmentRunTime> equipmentRunTimesAll = new ArrayList<>();
|
|
|
+ if(equipmentRunTimesSource != null && equipmentRunTimesSource.size()>0){
|
|
|
+ // 过滤最大等待时间范围内的占用时间段
|
|
|
+ for (int i = 0;i<equipmentRunTimesSource.size();i++) {
|
|
|
+ EquipmentRunTime equipmentRunTime = equipmentRunTimesSource.get(i);
|
|
|
+ EquipmentRunTime copy = new EquipmentRunTime();
|
|
|
+ copy.setStartRunTime(equipmentRunTime.getStartRunTime());
|
|
|
+ copy.setEndRunTime(equipmentRunTime.getEndRunTime());
|
|
|
+ copy.setTotalVolumeWidth(equipmentRunTime.getTotalVolumeWidth());
|
|
|
+ copy.setTotalSinglerollweight(equipmentRunTime.getTotalSinglerollweight());
|
|
|
+ copy.setOccupyType("temporaryProcess");
|
|
|
+ copy.setLocked(true);
|
|
|
+ copy.setSeriesProduceMark(equipmentRunTime.getSeriesProduceMark());
|
|
|
+ copy.setCutfinishmin(equipmentRunTime.getCutfinishmin() == null ? 0 : equipmentRunTime.getCutfinishmin());
|
|
|
+ copy.setPrepressworkmin(equipmentRunTime.getPrepressworkmin() == null ? 0 : equipmentRunTime.getPrepressworkmin());
|
|
|
+ equipmentRunTimesAll.add(copy);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 过滤当前排序的作业占用时间段
|
|
|
+ if(processes != null && processes.size()>0){
|
|
|
+ for (int i = 0;i<processes.size();i++) {
|
|
|
+ ProductionProcesses productionProcesses = processes.get(i);
|
|
|
+ if(productionProcesses.getEquipmentId().equals(equipment.getId())){
|
|
|
+ EquipmentRunTime copy = new EquipmentRunTime();
|
|
|
+ copy.setStartRunTime(productionProcesses.getStartTime());
|
|
|
+ copy.setEndRunTime(productionProcesses.getEndTime());
|
|
|
+ copy.setTotalVolumeWidth(productionProcesses.getVolumeWidth());
|
|
|
+ copy.setTotalSinglerollweight(productionProcesses.getSinglerollweight());
|
|
|
+ copy.setOccupyType("temporaryProcess");
|
|
|
+ copy.setLocked(true);
|
|
|
+ copy.setSeriesProduceMark(productionProcesses.getSeriesProduceMark());
|
|
|
+ copy.setCutfinishmin(productionProcesses.getCutfinishmin() == null ? 0 : productionProcesses.getCutfinishmin());
|
|
|
+ copy.setPrepressworkmin(productionProcesses.getPrepressworkmin() == null ? 0 : productionProcesses.getPrepressworkmin());
|
|
|
+ equipmentRunTimesAll.add(copy);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 按照开始时间排序
|
|
|
+ equipmentRunTimesAll.sort(Comparator.comparing(EquipmentRunTime::getStartRunTime));
|
|
|
+ EquipmentRunTime minRunTime = null;
|
|
|
+ EquipmentRunTime maxRunTime = null;
|
|
|
+ for (EquipmentRunTime equipmentRunTime : equipmentRunTimesAll) {
|
|
|
+ if(equipmentRunTime.getEndRunTime().compareTo(process.getStartTime().plusMinutes(-lzTimes))<=0
|
|
|
+ && equipmentRunTime.getStartRunTime().compareTo(process.getStartTime().plusMinutes(-process.getMaxWaitTime()))>=0){
|
|
|
+ equipmentRunTimes.add(equipmentRunTime);
|
|
|
+ }else{
|
|
|
+ if(equipmentRunTime.getStartRunTime().compareTo(process.getStartTime().plusMinutes(-process.getMaxWaitTime()))<0){
|
|
|
+ if(minRunTime == null){
|
|
|
+ minRunTime = equipmentRunTime;
|
|
|
+ }else{
|
|
|
+ if(equipmentRunTime.getStartRunTime().compareTo(minRunTime.getStartRunTime())>0){
|
|
|
+ minRunTime = equipmentRunTime;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ if(maxRunTime == null){
|
|
|
+ maxRunTime = equipmentRunTime;
|
|
|
+ }else{
|
|
|
+ if(equipmentRunTime.getStartRunTime().compareTo(maxRunTime.getStartRunTime())<0){
|
|
|
+ maxRunTime = equipmentRunTime;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 按照开始时间排序
|
|
|
+ equipmentRunTimes.sort(Comparator.comparing(EquipmentRunTime::getStartRunTime));
|
|
|
+ equipmentRunTimes.add(0,minRunTime);
|
|
|
+
|
|
|
+ // 前一道工序尝试往后挪
|
|
|
+ for(int i = 0; i < equipmentRunTimes.size(); i++){
|
|
|
+ EquipmentRunTime equipmentRunTime = equipmentRunTimes.get(i);
|
|
|
+ if (preProcess.getProcessType().equals("冷轧")) {
|
|
|
+ // 首个占用时间
|
|
|
+ if(i == 0){
|
|
|
+ if(equipmentRunTimes.size() == 1){
|
|
|
+ proStartTime = process.getStartTime().plusMinutes(-process.getMaxWaitTime()/2);
|
|
|
+ proEndTime = proStartTime.plusMinutes(preProcess.getProduceTime());
|
|
|
+ hasSet = true;
|
|
|
+ }else{
|
|
|
+ EquipmentRunTime nextEquipmentRunTime = equipmentRunTimes.get(i+1);
|
|
|
+ boolean preseries = seriesLz(nextEquipmentRunTime, preProcess, 1);
|
|
|
+ LocalDateTime proEndTime1 = nextEquipmentRunTime.getStartRunTime().plusMinutes(-1);
|
|
|
+ // 连续
|
|
|
+ if(!preseries){
|
|
|
+ proEndTime1 = proEndTime1.plusMinutes(-preProcess.getCutfinishmin()).plusMinutes(-nextEquipmentRunTime.getPrepressworkmin());
|
|
|
+ }
|
|
|
+ LocalDateTime proStartTime1 = proEndTime1.plusMinutes(-preProcess.getProduceTime());
|
|
|
+ if(proStartTime1.compareTo(process.getStartTime().plusMinutes(-process.getMaxWaitTime()))>0){
|
|
|
+ LocalDateTime minproStartTime = proStartTime1;
|
|
|
+ boolean nextseries = seriesLz(equipmentRunTime, preProcess, -1);
|
|
|
+ if(!nextseries){
|
|
|
+ minproStartTime = minproStartTime.plusMinutes(-equipmentRunTime.getCutfinishmin()).plusMinutes(-preProcess.getPrepressworkmin());
|
|
|
+ }
|
|
|
+ if(minproStartTime.compareTo(equipmentRunTime.getEndRunTime())>0){
|
|
|
+ proStartTime = proStartTime1;
|
|
|
+ proEndTime = proEndTime1;
|
|
|
+ hasSet = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 最后一个占用时间
|
|
|
+ else if (i == equipmentRunTimes.size()-1) {
|
|
|
+ LocalDateTime a = proStartTime;
|
|
|
+ if(equipmentRunTime.getEndRunTime().compareTo(a)>0){
|
|
|
+ a = equipmentRunTime.getEndRunTime().plusMinutes(1);
|
|
|
+ }
|
|
|
+ boolean preseries = seriesLz(equipmentRunTime, preProcess, -1);
|
|
|
+ if(!preseries){
|
|
|
+ a = a.plusMinutes(equipmentRunTime.getCutfinishmin()).plusMinutes(preProcess.getPrepressworkmin());
|
|
|
+ }
|
|
|
+ LocalDateTime b = a.plusMinutes(preProcess.getProduceTime());
|
|
|
+ if(b.compareTo(process.getStartTime().plusMinutes(-lzTimes))<0){
|
|
|
+ proStartTime = a;
|
|
|
+ proEndTime = proStartTime.plusMinutes(preProcess.getProduceTime());
|
|
|
+ hasSet = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 其它情况
|
|
|
+ else{
|
|
|
+ EquipmentRunTime nextEquipmentRunTime = equipmentRunTimes.get(i+1);
|
|
|
+ if(nextEquipmentRunTime.getStartRunTime().compareTo(proEndTime)>0){
|
|
|
+ boolean preseries = seriesLz(equipmentRunTime, preProcess, -1);
|
|
|
+ boolean nextseries = seriesLz(nextEquipmentRunTime, preProcess, 1);
|
|
|
+ LocalDateTime preEndTime = equipmentRunTime.getEndRunTime().plusMinutes(1);
|
|
|
+ if(!preseries){
|
|
|
+ preEndTime = preEndTime.plusMinutes(equipmentRunTime.getCutfinishmin()).plusMinutes(preProcess.getPrepressworkmin());
|
|
|
+ }
|
|
|
+ LocalDateTime nextEndTime = preEndTime.plusMinutes(preProcess.getProduceTime());
|
|
|
+ if(!nextseries){
|
|
|
+ nextEndTime = nextEndTime.plusMinutes(preProcess.getCutfinishmin()).plusMinutes(nextEquipmentRunTime.getPrepressworkmin());
|
|
|
+ }
|
|
|
+ if(nextEndTime.compareTo(nextEquipmentRunTime.getStartRunTime())<0){
|
|
|
+ proStartTime = preEndTime;
|
|
|
+ proEndTime = proStartTime.plusMinutes(preProcess.getProduceTime());
|
|
|
+ hasSet = true;
|
|
|
+ break;
|
|
|
+ }else{
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 其它工序
|
|
|
+ else{
|
|
|
+ // 首个占用时间
|
|
|
+ if(i == 0){
|
|
|
+ if(equipmentRunTimes.size() == 1){
|
|
|
+ proStartTime = process.getStartTime().plusMinutes(-process.getMaxWaitTime()/2);
|
|
|
+ proEndTime = proStartTime.plusMinutes(preProcess.getProduceTime());
|
|
|
+ hasSet = true;
|
|
|
+ }else{
|
|
|
+ EquipmentRunTime nextEquipmentRunTime = equipmentRunTimes.get(i+1);
|
|
|
+ LocalDateTime proEndTime1 = nextEquipmentRunTime.getStartRunTime().plusMinutes(-1);
|
|
|
+ LocalDateTime proStartTime1 = proEndTime1.plusMinutes(-preProcess.getProduceTime());
|
|
|
+ if(proStartTime1.compareTo(process.getStartTime().plusMinutes(-process.getMaxWaitTime()))>0){
|
|
|
+ LocalDateTime minproStartTime = proStartTime1;
|
|
|
+ if(equipmentRunTime.getEndRunTime() != null && minproStartTime.compareTo(equipmentRunTime.getEndRunTime())>0){
|
|
|
+ proStartTime = proStartTime1;
|
|
|
+ proEndTime = proEndTime1;
|
|
|
+ hasSet = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 最后一个占用时间
|
|
|
+ else if (i == equipmentRunTimes.size()-1) {
|
|
|
+ LocalDateTime a = proStartTime;
|
|
|
+ if(equipmentRunTime.getEndRunTime().compareTo(a)>0){
|
|
|
+ a = equipmentRunTime.getEndRunTime().plusMinutes(1);
|
|
|
+ }
|
|
|
+ LocalDateTime b = a.plusMinutes(preProcess.getProduceTime());
|
|
|
+ if(b.compareTo(process.getStartTime().plusMinutes(-lzTimes))<0){
|
|
|
+ proStartTime = a;
|
|
|
+ proEndTime = proStartTime.plusMinutes(preProcess.getProduceTime());
|
|
|
+ hasSet = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 其它情况
|
|
|
+ else{
|
|
|
+ EquipmentRunTime nextEquipmentRunTime = equipmentRunTimes.get(i+1);
|
|
|
+ if(nextEquipmentRunTime.getStartRunTime().compareTo(proEndTime)>0){
|
|
|
+ LocalDateTime preEndTime = equipmentRunTime.getEndRunTime().plusMinutes(1);
|
|
|
+ LocalDateTime nextEndTime = preEndTime.plusMinutes(preProcess.getProduceTime());
|
|
|
+ if(nextEndTime.compareTo(nextEquipmentRunTime.getStartRunTime())<0){
|
|
|
+ proStartTime = preEndTime;
|
|
|
+ proEndTime = proStartTime.plusMinutes(preProcess.getProduceTime());
|
|
|
+ hasSet = true;
|
|
|
+ break;
|
|
|
+ }else{
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(hasSet){
|
|
|
+ newPre = new ProductionProcesses();
|
|
|
+ newPre.setId(preProcess.getId());
|
|
|
+ newPre.setStartTime(proStartTime);
|
|
|
+ newPre.setEndTime(proEndTime);
|
|
|
+ newPre.setEquipment(equipment);
|
|
|
+ }
|
|
|
+ return newPre;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * @param equipmentRunTime
|
|
|
+ * @param process
|
|
|
+ * @param isBefore -1:equipmentRunTime在process之前,1:equipmentRunTime在process之后
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private boolean seriesLz(EquipmentRunTime equipmentRunTime,ProductionProcesses process,Integer isBefore){
|
|
|
+ boolean isSeriesLz = true;
|
|
|
+ String[] serspre = null;String[] sersafter = null;
|
|
|
+ if(isBefore == -1){
|
|
|
+ serspre = equipmentRunTime.getSeriesProduceMark().split("\\^_\\^");
|
|
|
+ sersafter = process.getSeriesProduceMark().split("\\^_\\^");
|
|
|
+ }else {
|
|
|
+ serspre = process.getSeriesProduceMark().split("\\^_\\^");
|
|
|
+ sersafter = equipmentRunTime.getSeriesProduceMark().split("\\^_\\^");
|
|
|
+ }
|
|
|
+ if(serspre.length == 5 && sersafter.length == 5){
|
|
|
+ if(!serspre[0].equals(sersafter[0]) || !serspre[1].equals(sersafter[1])){
|
|
|
+ isSeriesLz = false;
|
|
|
+ }else{
|
|
|
+ String s1 = serspre[2];
|
|
|
+ String s2 = sersafter[2];
|
|
|
+ try{
|
|
|
+ BigDecimal i1 = new BigDecimal(s1);
|
|
|
+ BigDecimal i2 = new BigDecimal(s2);
|
|
|
+ if(i1.compareTo(i2)<0){
|
|
|
+ isSeriesLz = false;
|
|
|
+ }
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return isSeriesLz;
|
|
|
+ }
|
|
|
}
|