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,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&lt;SchedulePlan, Long&gt; im @@ -54,6 +54,8 @@ public class SchedulePlanServiceImpl extends BServiceImpl&lt;SchedulePlan, Long&gt; 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&lt;SchedulePlan, Long&gt; im @@ -87,6 +89,7 @@ public class SchedulePlanServiceImpl extends BServiceImpl&lt;SchedulePlan, Long&gt; 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 &quot;calcu_days_2_&quot; @@ -109,6 +111,75 @@ rule &quot;calcu_days_2_&quot;
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 &quot;Calcu_loop2_1_&quot; // 路牌在时刻表中存在,就翻 @@ -191,7 +262,9 @@ rule &quot;Calcu_loop2_1_&quot; // 路牌在时刻表中存在,就翻
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 &quot;Calcu_loop2_1_&quot; // 路牌在时刻表中存在,就翻 @@ -221,6 +294,8 @@ rule &quot;Calcu_loop2_1_&quot; // 路牌在时刻表中存在,就翻
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 &quot;Calcu_loop2_2_&quot; // 路牌在时刻表中不存在,就不翻 @@ -263,22 +338,22 @@ rule &quot;Calcu_loop2_2_&quot; // 路牌在时刻表中不存在,就不翻
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);