|
@@ -12,6 +12,7 @@ import org.optaplanner.core.api.score.stream.*;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.ZoneId;
|
|
|
import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
import static org.optaplanner.core.api.score.stream.ConstraintCollectors.count;
|
|
|
|
|
@@ -606,7 +607,7 @@ public class ApsConstraintProvider implements ConstraintProvider {
|
|
|
return constraintFactory.forEach(ProductionProcesses.class)
|
|
|
.groupBy(ProductionProcesses::getEquipmentId, ConstraintCollectors.toList())
|
|
|
.filter((equipmentId,processes) -> {
|
|
|
- if(processes != null && processes.size()>0){
|
|
|
+ /*if(processes != null && processes.size()>0){
|
|
|
Equipment equipment = processes.get(0).getEquipment();
|
|
|
List<ProductionProcesses> plist = new ArrayList<>();
|
|
|
for (ProductionProcesses process : processes) {
|
|
@@ -619,28 +620,25 @@ public class ApsConstraintProvider implements ConstraintProvider {
|
|
|
plist.add(pro);
|
|
|
}
|
|
|
equipment.setProcessesList(plist);
|
|
|
- }
|
|
|
+ }*/
|
|
|
|
|
|
- for (ProductionProcesses process : processes) {
|
|
|
- if(process.getStartTime() == null){
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
- if(processes != null && processes.size()>1){
|
|
|
+ List<ProductionProcesses> hasStartTimeProcess = processes.stream().filter(v -> v.getStartTime() != null).collect(Collectors.toList());
|
|
|
+
|
|
|
+ if(hasStartTimeProcess != null && hasStartTimeProcess.size()>1){
|
|
|
// 安装开始时间排序
|
|
|
- Collections.sort(processes, Comparator.comparing(ProductionProcesses::getStartTime));
|
|
|
+ Collections.sort(hasStartTimeProcess, Comparator.comparing(ProductionProcesses::getStartTime));
|
|
|
// 临时标记
|
|
|
Boolean a = false;
|
|
|
- for(int i=0;i<processes.size()-1;i++){
|
|
|
- if(processes.get(i).getSeriesProduceMark() != null && processes.get(i+1).getSeriesProduceMark() != null){
|
|
|
- if("铸轧".equals(processes.get(i).getProcessType())){
|
|
|
- if(!processes.get(i).getSeriesProduceMark().equals(processes.get(i+1).getSeriesProduceMark())){
|
|
|
+ for(int i=0;i<hasStartTimeProcess.size()-1;i++){
|
|
|
+ if(hasStartTimeProcess.get(i).getSeriesProduceMark() != null && hasStartTimeProcess.get(i+1).getSeriesProduceMark() != null){
|
|
|
+ if("铸轧".equals(hasStartTimeProcess.get(i).getProcessType()) && "铸轧".equals(hasStartTimeProcess.get(i+1).getProcessType())){
|
|
|
+ if(!hasStartTimeProcess.get(i).getSeriesProduceMark().equals(hasStartTimeProcess.get(i+1).getSeriesProduceMark())){
|
|
|
a = true;
|
|
|
break;
|
|
|
}
|
|
|
- } else if ("冷轧".equals(processes.get(i).getProcessType())) {
|
|
|
- String[] serspre = processes.get(i).getSeriesProduceMark().split("^_^");
|
|
|
- String[] sersafter = processes.get(i+1).getSeriesProduceMark().split("^_^");
|
|
|
+ } else if ("冷轧".equals(hasStartTimeProcess.get(i).getProcessType()) && "冷轧".equals(hasStartTimeProcess.get(i+1).getProcessType())) {
|
|
|
+ String[] serspre = hasStartTimeProcess.get(i).getSeriesProduceMark().split("^_^");
|
|
|
+ String[] sersafter = hasStartTimeProcess.get(i+1).getSeriesProduceMark().split("^_^");
|
|
|
if(serspre.length == 3 && sersafter.length == 3){
|
|
|
if(!serspre[0].equals(sersafter[0]) || !serspre[1].equals(sersafter[1])){
|
|
|
a = true;
|
|
@@ -670,7 +668,7 @@ public class ApsConstraintProvider implements ConstraintProvider {
|
|
|
})
|
|
|
.penalize(HardSoftScore.ONE_SOFT,(equipmentId,processes)->{
|
|
|
int b = 0;
|
|
|
- for(int i=0;i<processes.size()-1;i++){
|
|
|
+ /*for(int i=0;i<processes.size()-1;i++){
|
|
|
if(processes.get(i).getSeriesProduceMark() != null && processes.get(i+1).getSeriesProduceMark() != null){
|
|
|
if("铸轧".equals(processes.get(i).getProcessType())){
|
|
|
if(!processes.get(i).getSeriesProduceMark().equals(processes.get(i+1).getSeriesProduceMark())){
|
|
@@ -700,9 +698,8 @@ public class ApsConstraintProvider implements ConstraintProvider {
|
|
|
}
|
|
|
}
|
|
|
if(b>0){
|
|
|
-// System.out.println("扣分:"+b);
|
|
|
return b;
|
|
|
- }
|
|
|
+ }*/
|
|
|
return 1;
|
|
|
})
|
|
|
.asConstraint("seriesProduce");
|