Commit 35a6161f3cf955fb04535b9c2867c3ee9aea961f

Authored by 徐烜
1 parent c13b906b

Update

src/main/java/com/bsth/entity/schedule/temp/SchedulePlanRuleResult.java
... ... @@ -44,6 +44,11 @@ public class SchedulePlanRuleResult {
44 44 /** 翻到哪个人员配置索引 */
45 45 private String ecindex;
46 46  
  47 + /** 时刻表id */
  48 + private String ttinfoId;
  49 + /** 时刻表名字 */
  50 + private String ttinfoName;
  51 +
47 52 /** 排班日期 */
48 53 private Date scheduleDate;
49 54  
... ... @@ -191,4 +196,20 @@ public class SchedulePlanRuleResult {
191 196 public void setXlName(String xlName) {
192 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 2  
3 3 import com.bsth.entity.schedule.temp.SchedulePlanRuleResult;
4 4 import com.bsth.repository.BaseRepository;
  5 +import org.springframework.data.jpa.repository.Modifying;
  6 +import org.springframework.data.jpa.repository.Query;
5 7 import org.springframework.stereotype.Repository;
6 8  
  9 +import java.util.Date;
  10 +import java.util.List;
  11 +
7 12 /**
8 13 * Created by xu on 17/3/29.
9 14 */
10 15 @Repository
11 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&lt;SchedulePlan, Long&gt; im
54 54 private BusinessRepository businessRepository;
55 55 @Autowired
56 56 private SchedulePlanRuleResultService schedulePlanRuleResultService;
  57 + @Autowired
  58 + private SchedulePlanRuleResultRepository schedulePlanRuleResultRepository;
57 59  
58 60 /** 日志记录器 */
59 61 private Logger logger = LoggerFactory.getLogger(SchedulePlanServiceImpl.class);
... ... @@ -87,6 +89,7 @@ public class SchedulePlanServiceImpl extends BServiceImpl&lt;SchedulePlan, Long&gt; im
87 89 // 设置gloable对象,在drl中通过别名使用
88 90 session.setGlobal("scheduleResult", scheduleResults_output);
89 91 session.setGlobal("log", logger); // 设置日志
  92 + session.setGlobal("schedulePlanRuleResultRepository", schedulePlanRuleResultRepository);
90 93  
91 94 // 载入数据
92 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 12 /** 结束计算日期 */
13 13 private DateTime toDate;
14 14  
  15 + /** 线路Id */
  16 + private String xlId;
  17 +
15 18 /** 排班计划实体 */
16 19 private SchedulePlan schedulePlan;
17 20  
... ... @@ -22,6 +25,7 @@ public class ScheduleCalcuParam_input {
22 25 this.toDate = new DateTime((schedulePlan.getScheduleToTime()));
23 26  
24 27 this.schedulePlan = schedulePlan;
  28 + this.xlId = String.valueOf(schedulePlan.getXl().getId());
25 29 }
26 30  
27 31 public DateTime getFromDate() {
... ... @@ -47,4 +51,12 @@ public class ScheduleCalcuParam_input {
47 51 public void setSchedulePlan(SchedulePlan schedulePlan) {
48 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 14 private String xlId;
15 15 /** 时刻表Id */
16 16 private String ttInfoId;
  17 + /** 时刻表名字 */
  18 + private String ttInfoName;
17 19  
18 20 public DateTime getDateTime() {
19 21 return dateTime;
... ... @@ -46,4 +48,12 @@ public class LpInfoResult_output {
46 48 public void setTtInfoId(String ttInfoId) {
47 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 66 lpInfoResult_output.setLpId(String.valueOf(ttInfoDetail.getLp().getId()));
67 67 lpInfoResult_output.setXlId(String.valueOf(ttInfoDetail.getXl().getId()));
68 68 lpInfoResult_output.setTtInfoId(String.valueOf(ttInfoDetail.getTtinfo().getId()));
  69 + lpInfoResult_output.setTtInfoName(ttInfoDetail.getTtinfo().getName());
69 70  
70 71 lpInfoResultsData.lpInfoResult_outputMap.put(
71 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 10 import com.bsth.service.schedule.rules.shiftloop.ScheduleResult_output;
11 11 import com.bsth.service.schedule.rules.shiftloop.ScheduleResults_output;
12 12  
  13 +import com.bsth.repository.schedule.SchedulePlanRuleResultRepository;
13 14 import com.bsth.entity.schedule.temp.SchedulePlanRuleResult;
14 15  
15 16 import org.slf4j.Logger;
16 17  
17 18 global Logger log;
18 19 global ScheduleResults_output scheduleResult;
  20 +global SchedulePlanRuleResultRepository schedulePlanRuleResultRepository;
19 21  
20 22 /*
21 23 存在(翻班格式)
... ... @@ -109,6 +111,75 @@ rule &quot;calcu_days_2_&quot;
109 111  
110 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 183 //------------------------- 第二阶段、计算规则准备数据2(第一组循环) ----------------------------//
113 184 rule "Calcu_loop1_1_" // 路牌在时刻表中存在,就翻
114 185 salience 900
... ... @@ -191,7 +262,9 @@ rule &quot;Calcu_loop2_1_&quot; // 路牌在时刻表中存在,就翻
191 262 $liro: LpInfoResult_output(
192 263 dateTime.isEqual($csd2),
193 264 $gids.get($lpindex) == lpId,
194   - $lpId: lpId
  265 + $lpId: lpId,
  266 + $ttinfoId: ttInfoId,
  267 + $ttinfoName: ttInfoName
195 268 )
196 269 then
197 270 ScheduleResult_output ro = new ScheduleResult_output();
... ... @@ -221,6 +294,8 @@ rule &quot;Calcu_loop2_1_&quot; // 路牌在时刻表中存在,就翻
221 294 schedulePlanRuleResult.setEcdbbms($srf.getRyDbbms());
222 295 schedulePlanRuleResult.setEcindex(String.valueOf($ryindex));
223 296 schedulePlanRuleResult.setScheduleDate($csd2.toDate());
  297 + schedulePlanRuleResult.setTtinfoId($ttinfoId);
  298 + schedulePlanRuleResult.setTtinfoName($ttinfoName);
224 299  
225 300 scheduleResult.getSchedulePlanRuleResults().add(schedulePlanRuleResult);
226 301  
... ... @@ -263,22 +338,22 @@ rule &quot;Calcu_loop2_2_&quot; // 路牌在时刻表中不存在,就不翻
263 338  
264 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 358 log.info("Calcu_loop2_2_ ruleId={}, calcu_index_lp/ry={}/{}, from={}, to={}",
284 359 $ruleId, $cdrp.getCalcu_index_lp(), $cdrp.getCalcu_index_ry(), $csd2, $ced2);
... ...