|
@@ -607,8 +607,9 @@ public class ApsConstraintProvider implements ConstraintProvider {
|
|
|
return constraintFactory.forEach(ProductionProcesses.class)
|
|
|
.groupBy(ProductionProcesses::getEquipmentId, ConstraintCollectors.toList())
|
|
|
.filter((equipmentId,processes) -> {
|
|
|
+ Equipment equipment = null;
|
|
|
if(processes != null && processes.size()>0){
|
|
|
- Equipment equipment = processes.get(0).getEquipment();
|
|
|
+ equipment = processes.get(0).getEquipment();
|
|
|
List<ProductionProcesses> plist = new ArrayList<>();
|
|
|
for (ProductionProcesses process : processes) {
|
|
|
ProductionProcesses pro = new ProductionProcesses();
|
|
@@ -621,12 +622,28 @@ public class ApsConstraintProvider implements ConstraintProvider {
|
|
|
}
|
|
|
equipment.setProcessesList(plist);
|
|
|
}
|
|
|
-
|
|
|
List<ProductionProcesses> hasStartTimeProcess = processes.stream().filter(v -> v.getStartTime() != null).collect(Collectors.toList());
|
|
|
+ // 设备占用时间参与连续生产排程
|
|
|
+ if(equipment != null && equipment.getEquipmentRunTimes() != null && equipment.getEquipmentRunTimes().size()>0){
|
|
|
+ for (EquipmentRunTime equipmentRunTime : equipment.getEquipmentRunTimes()) {
|
|
|
+ ProductionProcesses pp = new ProductionProcesses();
|
|
|
+ pp.setStartTime(equipmentRunTime.getStartRunTime());
|
|
|
+ pp.setSeriesProduceMark(equipmentRunTime.getSeriesProduceMark());
|
|
|
+ pp.setProcessType(equipmentRunTime.getProcessType());
|
|
|
+ hasStartTimeProcess.add(pp);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
if(hasStartTimeProcess != null && hasStartTimeProcess.size()>1){
|
|
|
// 安装开始时间排序
|
|
|
Collections.sort(hasStartTimeProcess, Comparator.comparing(ProductionProcesses::getStartTime));
|
|
|
+ // 获取设备已排程好的最后一个作业,计算连续加工
|
|
|
+ if(equipment.getLastProcessType() != null && equipment.getLastSeriesProduceMark() != null){
|
|
|
+ ProductionProcesses pp = new ProductionProcesses();
|
|
|
+ pp.setSeriesProduceMark(equipment.getLastSeriesProduceMark());
|
|
|
+ pp.setProcessType(equipment.getLastProcessType());
|
|
|
+ hasStartTimeProcess.add(0,pp);
|
|
|
+ }
|
|
|
// 临时标记
|
|
|
Boolean a = false;
|
|
|
for(int i=0;i<hasStartTimeProcess.size()-1;i++){
|
|
@@ -668,15 +685,39 @@ public class ApsConstraintProvider implements ConstraintProvider {
|
|
|
})
|
|
|
.penalize(HardSoftScore.ONE_SOFT,(equipmentId,processes)->{
|
|
|
int b = 0;
|
|
|
- /*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())){
|
|
|
+ Equipment equipment = null;
|
|
|
+ if(processes != null && processes.size()>0){
|
|
|
+ equipment = processes.get(0).getEquipment();
|
|
|
+ }
|
|
|
+ List<ProductionProcesses> hasStartTimeProcess = processes.stream().filter(v -> v.getStartTime() != null).collect(Collectors.toList());
|
|
|
+ // 设备占用时间参与连续生产排程
|
|
|
+ if(equipment != null && equipment.getEquipmentRunTimes() != null && equipment.getEquipmentRunTimes().size()>0){
|
|
|
+ for (EquipmentRunTime equipmentRunTime : equipment.getEquipmentRunTimes()) {
|
|
|
+ ProductionProcesses pp = new ProductionProcesses();
|
|
|
+ pp.setStartTime(equipmentRunTime.getStartRunTime());
|
|
|
+ pp.setSeriesProduceMark(equipmentRunTime.getSeriesProduceMark());
|
|
|
+ pp.setProcessType(equipmentRunTime.getProcessType());
|
|
|
+ hasStartTimeProcess.add(pp);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 按照开始时间排序
|
|
|
+ Collections.sort(hasStartTimeProcess, Comparator.comparing(ProductionProcesses::getStartTime));
|
|
|
+ // 获取设备已排程好的最后一个作业,计算连续加工
|
|
|
+ if(equipment.getLastProcessType() != null && equipment.getLastSeriesProduceMark() != null){
|
|
|
+ ProductionProcesses pp = new ProductionProcesses();
|
|
|
+ pp.setSeriesProduceMark(equipment.getLastSeriesProduceMark());
|
|
|
+ pp.setProcessType(equipment.getLastProcessType());
|
|
|
+ hasStartTimeProcess.add(0,pp);
|
|
|
+ }
|
|
|
+ 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())){
|
|
|
+ if(!hasStartTimeProcess.get(i).getSeriesProduceMark().equals(hasStartTimeProcess.get(i+1).getSeriesProduceMark())){
|
|
|
b++;
|
|
|
}
|
|
|
- } 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())) {
|
|
|
+ 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])){
|
|
|
b++;
|
|
@@ -698,9 +739,8 @@ public class ApsConstraintProvider implements ConstraintProvider {
|
|
|
}
|
|
|
}
|
|
|
if(b>0){
|
|
|
-// System.out.println("扣分:"+b);
|
|
|
return b;
|
|
|
- }*/
|
|
|
+ }
|
|
|
return 1;
|
|
|
})
|
|
|
.asConstraint("seriesProduce");
|