Commit 35a6161f3cf955fb04535b9c2867c3ee9aea961f
1 parent
c13b906b
Update
Showing
7 changed files
with
155 additions
and
17 deletions
src/main/java/com/bsth/entity/schedule/temp/SchedulePlanRuleResult.java
| @@ -44,6 +44,11 @@ public class SchedulePlanRuleResult { | @@ -44,6 +44,11 @@ public class SchedulePlanRuleResult { | ||
| 44 | /** 翻到哪个人员配置索引 */ | 44 | /** 翻到哪个人员配置索引 */ |
| 45 | private String ecindex; | 45 | private String ecindex; |
| 46 | 46 | ||
| 47 | + /** 时刻表id */ | ||
| 48 | + private String ttinfoId; | ||
| 49 | + /** 时刻表名字 */ | ||
| 50 | + private String ttinfoName; | ||
| 51 | + | ||
| 47 | /** 排班日期 */ | 52 | /** 排班日期 */ |
| 48 | private Date scheduleDate; | 53 | private Date scheduleDate; |
| 49 | 54 | ||
| @@ -191,4 +196,20 @@ public class SchedulePlanRuleResult { | @@ -191,4 +196,20 @@ public class SchedulePlanRuleResult { | ||
| 191 | public void setXlName(String xlName) { | 196 | public void setXlName(String xlName) { |
| 192 | this.xlName = xlName; | 197 | this.xlName = xlName; |
| 193 | } | 198 | } |
| 199 | + | ||
| 200 | + public String getTtinfoId() { | ||
| 201 | + return ttinfoId; | ||
| 202 | + } | ||
| 203 | + | ||
| 204 | + public void setTtinfoId(String ttinfoId) { | ||
| 205 | + this.ttinfoId = ttinfoId; | ||
| 206 | + } | ||
| 207 | + | ||
| 208 | + public String getTtinfoName() { | ||
| 209 | + return ttinfoName; | ||
| 210 | + } | ||
| 211 | + | ||
| 212 | + public void setTtinfoName(String ttinfoName) { | ||
| 213 | + this.ttinfoName = ttinfoName; | ||
| 214 | + } | ||
| 194 | } | 215 | } |
src/main/java/com/bsth/repository/schedule/SchedulePlanRuleResultRepository.java
| @@ -2,11 +2,27 @@ package com.bsth.repository.schedule; | @@ -2,11 +2,27 @@ package com.bsth.repository.schedule; | ||
| 2 | 2 | ||
| 3 | import com.bsth.entity.schedule.temp.SchedulePlanRuleResult; | 3 | import com.bsth.entity.schedule.temp.SchedulePlanRuleResult; |
| 4 | import com.bsth.repository.BaseRepository; | 4 | import com.bsth.repository.BaseRepository; |
| 5 | +import org.springframework.data.jpa.repository.Modifying; | ||
| 6 | +import org.springframework.data.jpa.repository.Query; | ||
| 5 | import org.springframework.stereotype.Repository; | 7 | import org.springframework.stereotype.Repository; |
| 6 | 8 | ||
| 9 | +import java.util.Date; | ||
| 10 | +import java.util.List; | ||
| 11 | + | ||
| 7 | /** | 12 | /** |
| 8 | * Created by xu on 17/3/29. | 13 | * Created by xu on 17/3/29. |
| 9 | */ | 14 | */ |
| 10 | @Repository | 15 | @Repository |
| 11 | public interface SchedulePlanRuleResultRepository extends BaseRepository<SchedulePlanRuleResult, Long> { | 16 | public interface SchedulePlanRuleResultRepository extends BaseRepository<SchedulePlanRuleResult, Long> { |
| 17 | + | ||
| 18 | + @Query("select t from SchedulePlanRuleResult t " + | ||
| 19 | + "where not exists (select 1 from SchedulePlanRuleResult " + | ||
| 20 | + "where createDate > t.createDate and scheduleDate < ?2 ) " + | ||
| 21 | + "and t.xlId = ?1 and t.scheduleDate < ?2") | ||
| 22 | + List<SchedulePlanRuleResult> findLastByXl(String xlid, Date from); | ||
| 23 | + | ||
| 24 | +// @Modifying | ||
| 25 | +// @Query("delete from SchedulePlanRuleResult t " + | ||
| 26 | +// "where t.xlId = ?1 and t.scheduleDate >= ?2 and t.scheduleDate <= ?3") | ||
| 27 | +// void deleteByXlAndDate(String xlid, Date from, Date to); | ||
| 12 | } | 28 | } |
src/main/java/com/bsth/service/schedule/impl/SchedulePlanServiceImpl.java
| @@ -54,6 +54,8 @@ public class SchedulePlanServiceImpl extends BServiceImpl<SchedulePlan, Long> im | @@ -54,6 +54,8 @@ public class SchedulePlanServiceImpl extends BServiceImpl<SchedulePlan, Long> im | ||
| 54 | private BusinessRepository businessRepository; | 54 | private BusinessRepository businessRepository; |
| 55 | @Autowired | 55 | @Autowired |
| 56 | private SchedulePlanRuleResultService schedulePlanRuleResultService; | 56 | private SchedulePlanRuleResultService schedulePlanRuleResultService; |
| 57 | + @Autowired | ||
| 58 | + private SchedulePlanRuleResultRepository schedulePlanRuleResultRepository; | ||
| 57 | 59 | ||
| 58 | /** 日志记录器 */ | 60 | /** 日志记录器 */ |
| 59 | private Logger logger = LoggerFactory.getLogger(SchedulePlanServiceImpl.class); | 61 | private Logger logger = LoggerFactory.getLogger(SchedulePlanServiceImpl.class); |
| @@ -87,6 +89,7 @@ public class SchedulePlanServiceImpl extends BServiceImpl<SchedulePlan, Long> im | @@ -87,6 +89,7 @@ public class SchedulePlanServiceImpl extends BServiceImpl<SchedulePlan, Long> im | ||
| 87 | // 设置gloable对象,在drl中通过别名使用 | 89 | // 设置gloable对象,在drl中通过别名使用 |
| 88 | session.setGlobal("scheduleResult", scheduleResults_output); | 90 | session.setGlobal("scheduleResult", scheduleResults_output); |
| 89 | session.setGlobal("log", logger); // 设置日志 | 91 | session.setGlobal("log", logger); // 设置日志 |
| 92 | + session.setGlobal("schedulePlanRuleResultRepository", schedulePlanRuleResultRepository); | ||
| 90 | 93 | ||
| 91 | // 载入数据 | 94 | // 载入数据 |
| 92 | session.insert(scheduleCalcuParam_input); | 95 | session.insert(scheduleCalcuParam_input); |
src/main/java/com/bsth/service/schedule/rules/shiftloop/ScheduleCalcuParam_input.java
| @@ -12,6 +12,9 @@ public class ScheduleCalcuParam_input { | @@ -12,6 +12,9 @@ public class ScheduleCalcuParam_input { | ||
| 12 | /** 结束计算日期 */ | 12 | /** 结束计算日期 */ |
| 13 | private DateTime toDate; | 13 | private DateTime toDate; |
| 14 | 14 | ||
| 15 | + /** 线路Id */ | ||
| 16 | + private String xlId; | ||
| 17 | + | ||
| 15 | /** 排班计划实体 */ | 18 | /** 排班计划实体 */ |
| 16 | private SchedulePlan schedulePlan; | 19 | private SchedulePlan schedulePlan; |
| 17 | 20 | ||
| @@ -22,6 +25,7 @@ public class ScheduleCalcuParam_input { | @@ -22,6 +25,7 @@ public class ScheduleCalcuParam_input { | ||
| 22 | this.toDate = new DateTime((schedulePlan.getScheduleToTime())); | 25 | this.toDate = new DateTime((schedulePlan.getScheduleToTime())); |
| 23 | 26 | ||
| 24 | this.schedulePlan = schedulePlan; | 27 | this.schedulePlan = schedulePlan; |
| 28 | + this.xlId = String.valueOf(schedulePlan.getXl().getId()); | ||
| 25 | } | 29 | } |
| 26 | 30 | ||
| 27 | public DateTime getFromDate() { | 31 | public DateTime getFromDate() { |
| @@ -47,4 +51,12 @@ public class ScheduleCalcuParam_input { | @@ -47,4 +51,12 @@ public class ScheduleCalcuParam_input { | ||
| 47 | public void setSchedulePlan(SchedulePlan schedulePlan) { | 51 | public void setSchedulePlan(SchedulePlan schedulePlan) { |
| 48 | this.schedulePlan = schedulePlan; | 52 | this.schedulePlan = schedulePlan; |
| 49 | } | 53 | } |
| 54 | + | ||
| 55 | + public String getXlId() { | ||
| 56 | + return xlId; | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | + public void setXlId(String xlId) { | ||
| 60 | + this.xlId = xlId; | ||
| 61 | + } | ||
| 50 | } | 62 | } |
src/main/java/com/bsth/service/schedule/rules/ttinfo/LpInfoResult_output.java
| @@ -14,6 +14,8 @@ public class LpInfoResult_output { | @@ -14,6 +14,8 @@ public class LpInfoResult_output { | ||
| 14 | private String xlId; | 14 | private String xlId; |
| 15 | /** 时刻表Id */ | 15 | /** 时刻表Id */ |
| 16 | private String ttInfoId; | 16 | private String ttInfoId; |
| 17 | + /** 时刻表名字 */ | ||
| 18 | + private String ttInfoName; | ||
| 17 | 19 | ||
| 18 | public DateTime getDateTime() { | 20 | public DateTime getDateTime() { |
| 19 | return dateTime; | 21 | return dateTime; |
| @@ -46,4 +48,12 @@ public class LpInfoResult_output { | @@ -46,4 +48,12 @@ public class LpInfoResult_output { | ||
| 46 | public void setTtInfoId(String ttInfoId) { | 48 | public void setTtInfoId(String ttInfoId) { |
| 47 | this.ttInfoId = ttInfoId; | 49 | this.ttInfoId = ttInfoId; |
| 48 | } | 50 | } |
| 51 | + | ||
| 52 | + public String getTtInfoName() { | ||
| 53 | + return ttInfoName; | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + public void setTtInfoName(String ttInfoName) { | ||
| 57 | + this.ttInfoName = ttInfoName; | ||
| 58 | + } | ||
| 49 | } | 59 | } |
src/main/java/com/bsth/service/schedule/rules/ttinfo/LpInfoResultsFunction.java
| @@ -66,6 +66,7 @@ public class LpInfoResultsFunction implements AccumulateFunction { | @@ -66,6 +66,7 @@ public class LpInfoResultsFunction implements AccumulateFunction { | ||
| 66 | lpInfoResult_output.setLpId(String.valueOf(ttInfoDetail.getLp().getId())); | 66 | lpInfoResult_output.setLpId(String.valueOf(ttInfoDetail.getLp().getId())); |
| 67 | lpInfoResult_output.setXlId(String.valueOf(ttInfoDetail.getXl().getId())); | 67 | lpInfoResult_output.setXlId(String.valueOf(ttInfoDetail.getXl().getId())); |
| 68 | lpInfoResult_output.setTtInfoId(String.valueOf(ttInfoDetail.getTtinfo().getId())); | 68 | lpInfoResult_output.setTtInfoId(String.valueOf(ttInfoDetail.getTtinfo().getId())); |
| 69 | + lpInfoResult_output.setTtInfoName(ttInfoDetail.getTtinfo().getName()); | ||
| 69 | 70 | ||
| 70 | lpInfoResultsData.lpInfoResult_outputMap.put( | 71 | lpInfoResultsData.lpInfoResult_outputMap.put( |
| 71 | ttInfoDetail.getLp().getId(), | 72 | ttInfoDetail.getLp().getId(), |
src/main/resources/rules/shiftloop_fb_2.drl
| @@ -10,12 +10,14 @@ import com.bsth.service.schedule.rules.shiftloop.ScheduleRule_input; | @@ -10,12 +10,14 @@ import com.bsth.service.schedule.rules.shiftloop.ScheduleRule_input; | ||
| 10 | import com.bsth.service.schedule.rules.shiftloop.ScheduleResult_output; | 10 | import com.bsth.service.schedule.rules.shiftloop.ScheduleResult_output; |
| 11 | import com.bsth.service.schedule.rules.shiftloop.ScheduleResults_output; | 11 | import com.bsth.service.schedule.rules.shiftloop.ScheduleResults_output; |
| 12 | 12 | ||
| 13 | +import com.bsth.repository.schedule.SchedulePlanRuleResultRepository; | ||
| 13 | import com.bsth.entity.schedule.temp.SchedulePlanRuleResult; | 14 | import com.bsth.entity.schedule.temp.SchedulePlanRuleResult; |
| 14 | 15 | ||
| 15 | import org.slf4j.Logger; | 16 | import org.slf4j.Logger; |
| 16 | 17 | ||
| 17 | global Logger log; | 18 | global Logger log; |
| 18 | global ScheduleResults_output scheduleResult; | 19 | global ScheduleResults_output scheduleResult; |
| 20 | +global SchedulePlanRuleResultRepository schedulePlanRuleResultRepository; | ||
| 19 | 21 | ||
| 20 | /* | 22 | /* |
| 21 | 存在(翻班格式) | 23 | 存在(翻班格式) |
| @@ -109,6 +111,75 @@ rule "calcu_days_2_" | @@ -109,6 +111,75 @@ rule "calcu_days_2_" | ||
| 109 | 111 | ||
| 110 | end | 112 | end |
| 111 | 113 | ||
| 114 | +// 使用已经排过班的数据修正Calcu_days_result_pre | ||
| 115 | +// 1、避免每次从规则的启用日期开始算 | ||
| 116 | +// 2、时刻表会不停的修正,如果每次都从规则启用日期开始算,会出错 | ||
| 117 | + | ||
| 118 | +declare SchedulePlanRuleResult_wrap | ||
| 119 | + ruleId: String // 规则Id | ||
| 120 | + scheduleDate: DateTime // 排班日期 | ||
| 121 | + | ||
| 122 | + isUsed: Boolean = false // 是否被使用过 | ||
| 123 | + | ||
| 124 | + self: SchedulePlanRuleResult; // 原始对象数据 | ||
| 125 | +end | ||
| 126 | + | ||
| 127 | +rule "Calcu_SchedulePlanRuleResult_wrap" | ||
| 128 | + salience 950 | ||
| 129 | + when | ||
| 130 | + ScheduleCalcuParam_input( | ||
| 131 | + fromDate.isBefore(toDate) || fromDate.isEqual(toDate), | ||
| 132 | + $fromDate : fromDate, | ||
| 133 | + $toDate : toDate, | ||
| 134 | + $xlId: xlId | ||
| 135 | + ) | ||
| 136 | + $sprr: SchedulePlanRuleResult() from schedulePlanRuleResultRepository.findLastByXl($xlId, $fromDate.toDate()) | ||
| 137 | + | ||
| 138 | + then | ||
| 139 | + // 创建班序历史结果数据 | ||
| 140 | + SchedulePlanRuleResult_wrap schedulePlanRuleResult_wrap = new SchedulePlanRuleResult_wrap(); | ||
| 141 | + schedulePlanRuleResult_wrap.setRuleId($sprr.getRuleId()); | ||
| 142 | + schedulePlanRuleResult_wrap.setScheduleDate(new DateTime($sprr.getScheduleDate())); | ||
| 143 | + schedulePlanRuleResult_wrap.setSelf($sprr); | ||
| 144 | + | ||
| 145 | + insert(schedulePlanRuleResult_wrap); | ||
| 146 | +end | ||
| 147 | + | ||
| 148 | + | ||
| 149 | +// 1、启用日期 < 开始日期 | ||
| 150 | +// 2、如果最近的排班规则历史时间在 (启用日期,开始日期) 之间,需要重新修正预处理数据 | ||
| 151 | +rule "calcu_days_1_with_result" | ||
| 152 | + no-loop | ||
| 153 | + salience 960 | ||
| 154 | + when | ||
| 155 | + $cdrp: Calcu_days_result_pre( | ||
| 156 | + calcu_start_date_1.isBefore(calcu_start_date_2), | ||
| 157 | + $ruleId: ruleId | ||
| 158 | + ) | ||
| 159 | + $srrr_wrap: SchedulePlanRuleResult_wrap( | ||
| 160 | + ruleId == $ruleId, | ||
| 161 | + scheduleDate.isAfter($cdrp.calcu_start_date_1), | ||
| 162 | + scheduleDate.isBefore($cdrp.calcu_start_date_2), | ||
| 163 | + isUsed == false, | ||
| 164 | + $scheduleDate: scheduleDate, | ||
| 165 | + $self: self | ||
| 166 | + ) | ||
| 167 | + then | ||
| 168 | + // 修正排班数据 | ||
| 169 | + log.info("准备修正 ruleId={} historyDate={}", $ruleId, $scheduleDate); | ||
| 170 | + | ||
| 171 | + $cdrp.setCalcu_index_lp(Integer.valueOf($self.getGidindex())); | ||
| 172 | + $cdrp.setCalcu_index_ry(Integer.valueOf($self.getEcindex())); | ||
| 173 | + $cdrp.setCalcu_start_date_1($scheduleDate); | ||
| 174 | + update($cdrp); | ||
| 175 | + | ||
| 176 | + $srrr_wrap.setIsUsed(true); | ||
| 177 | + update($srrr_wrap); | ||
| 178 | + | ||
| 179 | +end | ||
| 180 | + | ||
| 181 | + | ||
| 182 | + | ||
| 112 | //------------------------- 第二阶段、计算规则准备数据2(第一组循环) ----------------------------// | 183 | //------------------------- 第二阶段、计算规则准备数据2(第一组循环) ----------------------------// |
| 113 | rule "Calcu_loop1_1_" // 路牌在时刻表中存在,就翻 | 184 | rule "Calcu_loop1_1_" // 路牌在时刻表中存在,就翻 |
| 114 | salience 900 | 185 | salience 900 |
| @@ -191,7 +262,9 @@ rule "Calcu_loop2_1_" // 路牌在时刻表中存在,就翻 | @@ -191,7 +262,9 @@ rule "Calcu_loop2_1_" // 路牌在时刻表中存在,就翻 | ||
| 191 | $liro: LpInfoResult_output( | 262 | $liro: LpInfoResult_output( |
| 192 | dateTime.isEqual($csd2), | 263 | dateTime.isEqual($csd2), |
| 193 | $gids.get($lpindex) == lpId, | 264 | $gids.get($lpindex) == lpId, |
| 194 | - $lpId: lpId | 265 | + $lpId: lpId, |
| 266 | + $ttinfoId: ttInfoId, | ||
| 267 | + $ttinfoName: ttInfoName | ||
| 195 | ) | 268 | ) |
| 196 | then | 269 | then |
| 197 | ScheduleResult_output ro = new ScheduleResult_output(); | 270 | ScheduleResult_output ro = new ScheduleResult_output(); |
| @@ -221,6 +294,8 @@ rule "Calcu_loop2_1_" // 路牌在时刻表中存在,就翻 | @@ -221,6 +294,8 @@ rule "Calcu_loop2_1_" // 路牌在时刻表中存在,就翻 | ||
| 221 | schedulePlanRuleResult.setEcdbbms($srf.getRyDbbms()); | 294 | schedulePlanRuleResult.setEcdbbms($srf.getRyDbbms()); |
| 222 | schedulePlanRuleResult.setEcindex(String.valueOf($ryindex)); | 295 | schedulePlanRuleResult.setEcindex(String.valueOf($ryindex)); |
| 223 | schedulePlanRuleResult.setScheduleDate($csd2.toDate()); | 296 | schedulePlanRuleResult.setScheduleDate($csd2.toDate()); |
| 297 | + schedulePlanRuleResult.setTtinfoId($ttinfoId); | ||
| 298 | + schedulePlanRuleResult.setTtinfoName($ttinfoName); | ||
| 224 | 299 | ||
| 225 | scheduleResult.getSchedulePlanRuleResults().add(schedulePlanRuleResult); | 300 | scheduleResult.getSchedulePlanRuleResults().add(schedulePlanRuleResult); |
| 226 | 301 | ||
| @@ -263,22 +338,22 @@ rule "Calcu_loop2_2_" // 路牌在时刻表中不存在,就不翻 | @@ -263,22 +338,22 @@ rule "Calcu_loop2_2_" // 路牌在时刻表中不存在,就不翻 | ||
| 263 | 338 | ||
| 264 | $cdrp.setCalcu_start_date_2($csd2.plusDays(1)); | 339 | $cdrp.setCalcu_start_date_2($csd2.plusDays(1)); |
| 265 | 340 | ||
| 266 | - // 保存排班规则循环结果 --> SchedulePlanRuleResult | ||
| 267 | - SchedulePlanRuleResult schedulePlanRuleResult = new SchedulePlanRuleResult($sp); | ||
| 268 | - schedulePlanRuleResult.setXlId(String.valueOf($srf.getXl().getId())); | ||
| 269 | - schedulePlanRuleResult.setXlName($srf.getXl().getName()); | ||
| 270 | - schedulePlanRuleResult.setRuleId($ruleId); | ||
| 271 | - schedulePlanRuleResult.setCcId($cid); | ||
| 272 | - schedulePlanRuleResult.setCcZbh($srf.getCarConfigInfo().getCl().getInsideCode()); | ||
| 273 | - schedulePlanRuleResult.setGids($srf.getLpIds()); | ||
| 274 | - schedulePlanRuleResult.setGnames($srf.getLpNames()); | ||
| 275 | - schedulePlanRuleResult.setGidindex(String.valueOf($lpindex)); | ||
| 276 | - schedulePlanRuleResult.setEcids($srf.getRyConfigIds()); | ||
| 277 | - schedulePlanRuleResult.setEcdbbms($srf.getRyDbbms()); | ||
| 278 | - schedulePlanRuleResult.setEcindex(String.valueOf($ryindex)); | ||
| 279 | - schedulePlanRuleResult.setScheduleDate($csd2.toDate()); | ||
| 280 | - | ||
| 281 | - scheduleResult.getSchedulePlanRuleResults().add(schedulePlanRuleResult); | 341 | +// // 保存排班规则循环结果 --> SchedulePlanRuleResult |
| 342 | +// SchedulePlanRuleResult schedulePlanRuleResult = new SchedulePlanRuleResult($sp); | ||
| 343 | +// schedulePlanRuleResult.setXlId(String.valueOf($srf.getXl().getId())); | ||
| 344 | +// schedulePlanRuleResult.setXlName($srf.getXl().getName()); | ||
| 345 | +// schedulePlanRuleResult.setRuleId($ruleId); | ||
| 346 | +// schedulePlanRuleResult.setCcId($cid); | ||
| 347 | +// schedulePlanRuleResult.setCcZbh($srf.getCarConfigInfo().getCl().getInsideCode()); | ||
| 348 | +// schedulePlanRuleResult.setGids($srf.getLpIds()); | ||
| 349 | +// schedulePlanRuleResult.setGnames($srf.getLpNames()); | ||
| 350 | +// schedulePlanRuleResult.setGidindex(String.valueOf($lpindex)); | ||
| 351 | +// schedulePlanRuleResult.setEcids($srf.getRyConfigIds()); | ||
| 352 | +// schedulePlanRuleResult.setEcdbbms($srf.getRyDbbms()); | ||
| 353 | +// schedulePlanRuleResult.setEcindex(String.valueOf($ryindex)); | ||
| 354 | +// schedulePlanRuleResult.setScheduleDate($csd2.toDate()); | ||
| 355 | +// | ||
| 356 | +// scheduleResult.getSchedulePlanRuleResults().add(schedulePlanRuleResult); | ||
| 282 | 357 | ||
| 283 | log.info("Calcu_loop2_2_ ruleId={}, calcu_index_lp/ry={}/{}, from={}, to={}", | 358 | log.info("Calcu_loop2_2_ ruleId={}, calcu_index_lp/ry={}/{}, from={}, to={}", |
| 284 | $ruleId, $cdrp.getCalcu_index_lp(), $cdrp.getCalcu_index_ry(), $csd2, $ced2); | 359 | $ruleId, $cdrp.getCalcu_index_lp(), $cdrp.getCalcu_index_ry(), $csd2, $ced2); |