|
@@ -43,6 +43,7 @@ public class ApsConstraintListProvider implements ConstraintProvider {
|
|
|
deliveryDate(constraintFactory),
|
|
|
// expecteddays(constraintFactory),
|
|
|
seriesProduce(constraintFactory),
|
|
|
+ freeTimeEquipment(constraintFactory),
|
|
|
// seriesProduceWashingFurnace(constraintFactory),
|
|
|
// mergeTuihuo(constraintFactory),
|
|
|
// tuihuoSp(constraintFactory),
|
|
@@ -83,6 +84,37 @@ public class ApsConstraintListProvider implements ConstraintProvider {
|
|
|
.asConstraint("optionalEquipment");
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 设备生产的任务都在可选设备范围内
|
|
|
+ * @param constraintFactory
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private Constraint freeTimeEquipment(ConstraintFactory constraintFactory) {
|
|
|
+ return constraintFactory.forEach(Equipment.class)
|
|
|
+ .filter((equipment) -> {
|
|
|
+ return true;
|
|
|
+ })
|
|
|
+ .penalize(HardMediumSoftScore.ONE_HARD,(equipment) -> {
|
|
|
+ int b = 0;
|
|
|
+ List<ProductionProcesses> tasks = new ArrayList<>();
|
|
|
+ tasks.addAll(equipment.getTasks());
|
|
|
+
|
|
|
+ if(tasks != null && tasks.size()>1){
|
|
|
+ // 根据开始时间排序
|
|
|
+ Collections.sort(tasks, Comparator.comparing(ProductionProcesses::getStartTime));
|
|
|
+ for (int i = 0; i < tasks.size()-1; i++) {
|
|
|
+ ProductionProcesses preTask = tasks.get(i);
|
|
|
+ ProductionProcesses nextTask = tasks.get(i + 1);
|
|
|
+ if(preTask.getEndTime().plusMinutes(60).compareTo(nextTask.getStartTime())<0){
|
|
|
+ b = b + 20;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return b;
|
|
|
+ })
|
|
|
+ .asConstraint("freeTimeEquipment");
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 不能超过最大开始时间
|
|
|
* @param constraintFactory
|