ApsSolution.java 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package com.rongwei.rwapsserver.aps.domain;
  2. import lombok.*;
  3. import org.optaplanner.core.api.domain.solution.PlanningEntityCollectionProperty;
  4. import org.optaplanner.core.api.domain.solution.PlanningScore;
  5. import org.optaplanner.core.api.domain.solution.PlanningSolution;
  6. import org.optaplanner.core.api.domain.solution.ProblemFactCollectionProperty;
  7. import org.optaplanner.core.api.domain.valuerange.CountableValueRange;
  8. import org.optaplanner.core.api.domain.valuerange.ValueRangeFactory;
  9. import org.optaplanner.core.api.domain.valuerange.ValueRangeProvider;
  10. import org.optaplanner.core.api.score.buildin.hardmediumsoft.HardMediumSoftScore;
  11. import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScore;
  12. import java.time.LocalDateTime;
  13. import java.time.temporal.ChronoUnit;
  14. import java.util.List;
  15. @EqualsAndHashCode(callSuper = true)
  16. @Data
  17. @NoArgsConstructor
  18. @PlanningSolution
  19. public class ApsSolution extends ApsAbstractPersistable{
  20. @Getter(value = AccessLevel.NONE)
  21. private List<ProductionProcesses> processesList;
  22. @Getter(value = AccessLevel.NONE)
  23. private List<Equipment> equipmentList;
  24. @Getter(value = AccessLevel.NONE)
  25. private HardMediumSoftScore score;
  26. private Long incrementUnitAmount;
  27. public LocalDateTime startTime;
  28. // 每一步骤最优规划实体
  29. private List<ProductionProcesses> stepBestProcessesList;
  30. // 是否初始结束
  31. private boolean constructionHeuristicEnd;
  32. public ApsSolution(String id, List<ProductionProcesses> processesList, List<Equipment> equipmentList) {
  33. super(id);
  34. this.processesList = processesList;
  35. this.equipmentList = equipmentList;
  36. }
  37. @ValueRangeProvider(id="taskRange")
  38. @PlanningEntityCollectionProperty
  39. public List<ProductionProcesses> getProcessesList() {
  40. return processesList;
  41. }
  42. @ProblemFactCollectionProperty
  43. public List<Equipment> getEquipmentList() {
  44. return equipmentList;
  45. }
  46. @ValueRangeProvider(id="timeRange")
  47. public CountableValueRange<LocalDateTime> getxRange(){
  48. Long produceTimeTotal = 0L;
  49. for (ProductionProcesses productionProcesses : processesList) {
  50. produceTimeTotal = produceTimeTotal + productionProcesses.getProduceTime();
  51. }
  52. LocalDateTime fromTime = LocalDateTime.now();
  53. if(startTime != null){
  54. fromTime = startTime;
  55. }
  56. Long incrementUnit = this.incrementUnitAmount;
  57. if(incrementUnit == null){
  58. incrementUnit = 5L;
  59. }
  60. long sy = produceTimeTotal % incrementUnit;
  61. if(sy>0){
  62. produceTimeTotal = produceTimeTotal - sy;
  63. }
  64. System.out.println("startTime:"+startTime);
  65. return ValueRangeFactory.createLocalDateTimeValueRange(fromTime,fromTime.plusMinutes(produceTimeTotal),incrementUnit, ChronoUnit.MINUTES);
  66. }
  67. @PlanningScore
  68. public HardMediumSoftScore getScore() {
  69. return score;
  70. }
  71. public Long getIncrementUnitAmount() {
  72. return incrementUnitAmount;
  73. }
  74. public void setIncrementUnitAmount(Long incrementUnitAmount) {
  75. this.incrementUnitAmount = incrementUnitAmount;
  76. }
  77. }