Commit ea927fc8c41b33b1e642eeb4ca4df8c13dde1873

Authored by 徐烜
1 parent 716dfa8b

Update

src/main/java/com/bsth/service/schedule/rules/shiftloop/ScheduleResults_output.java
@@ -48,6 +48,7 @@ public class ScheduleResults_output { @@ -48,6 +48,7 @@ public class ScheduleResults_output {
48 groupRuleIdGuideBoardMap.get(s.getRuleId()).add(s); 48 groupRuleIdGuideBoardMap.get(s.getRuleId()).add(s);
49 } 49 }
50 50
  51 + stringBuilder.append("\n");
51 for (String ruleId : groupRuleIdGuideBoardMap.keySet()) { 52 for (String ruleId : groupRuleIdGuideBoardMap.keySet()) {
52 Collections.sort(groupRuleIdGuideBoardMap.get(ruleId), new Comparator<ScheduleResult_output>() { 53 Collections.sort(groupRuleIdGuideBoardMap.get(ruleId), new Comparator<ScheduleResult_output>() {
53 @Override 54 @Override
src/main/resources/rules/legacy/shiftloop_fb_2.drl 0 → 100644
  1 +package com.bsth.service.schedule.shiftloop;
  2 +
  3 +import org.joda.time.*;
  4 +import java.util.*;
  5 +
  6 +import com.bsth.service.schedule.rules.ttinfo.LpInfoResult_output;
  7 +
  8 +import com.bsth.service.schedule.utils.Md5Util;
  9 +
  10 +import com.bsth.service.schedule.rules.shiftloop.ScheduleCalcuParam_input;
  11 +import com.bsth.service.schedule.rules.shiftloop.ScheduleRule_input;
  12 +import com.bsth.service.schedule.rules.shiftloop.ScheduleRule_Type;
  13 +import com.bsth.service.schedule.rules.shiftloop.ScheduleResult_output;
  14 +import com.bsth.service.schedule.rules.shiftloop.ScheduleResults_output;
  15 +
  16 +import com.bsth.entity.schedule.temp.SchedulePlanRuleResult;
  17 +
  18 +import com.bsth.service.schedule.rules.ScheduleRuleService;
  19 +
  20 +import org.slf4j.Logger;
  21 +
  22 +global Logger log;
  23 +global ScheduleResults_output scheduleResult;
  24 +global ScheduleRuleService scheduleRuleService;
  25 +
  26 +/*
  27 + 存在(翻班格式)
  28 +*/
  29 +
  30 +//------------------------- 第一阶段、计算规则准备数据(天数) ----------------------------//
  31 +
  32 +declare Calcu_days_result_pre
  33 + ruleId: String // 规则Id
  34 + ruleMd5: String // 规则md5
  35 + ruleEcCount: Integer // 人员范围个数
  36 +
  37 + calcu_index_lp : Integer // 计算之后路牌的起始索引
  38 + calcu_index_ry : Integer // 计算之后人员的起始索引
  39 +
  40 + // 1、第一部分循环需要用到的数据(当开始日期大于启用日期的时候才有)
  41 + calcu_start_date_1: DateTime // 第一部分开始计算日期
  42 + calcu_end_date_1: DateTime // 第一部分结束计算日期
  43 +
  44 + // 2、第二部分循环需要用到的数据
  45 + sdays : Integer // 总共需要排班的天数
  46 + calcu_start_date_2 : DateTime // 开始计算日期
  47 + calcu_end_date_2 : DateTime // 结束计算日期
  48 +
  49 +end
  50 +
  51 +/*
  52 + 计算启用日期,开始计算日期,结束计算日期,相差天数
  53 + 1、规则启用日期小于开始计算日期
  54 + 2、规则启用日期大于等于开始日期,小于等于结束日期
  55 +*/
  56 +// 1、启用日期 < 开始日期
  57 +rule "calcu_days_1_"
  58 + salience 1000
  59 + when
  60 + ScheduleCalcuParam_input(
  61 + fromDate.isBefore(toDate) || fromDate.isEqual(toDate),
  62 + $fromDate : fromDate,
  63 + $toDate : toDate,
  64 + $xlId: xlId
  65 + )
  66 + $sri: ScheduleRule_input(
  67 + $ruleId : ruleId, $qyrq : qyrq,
  68 + $lpindex : startGbdIndex, $ryindex: startEIndex)
  69 + eval($qyrq.isBefore($fromDate))
  70 + then
  71 + scheduleResult.setXlid($xlId);
  72 +
  73 + // 构造Calcu_days_result_pre,用于路牌
  74 + Calcu_days_result_pre cdrp = new Calcu_days_result_pre();
  75 + cdrp.setRuleId($ruleId);
  76 + cdrp.setCalcu_index_lp($lpindex);
  77 + cdrp.setCalcu_index_ry($ryindex);
  78 + cdrp.setCalcu_start_date_1($qyrq);
  79 + cdrp.setCalcu_end_date_1($fromDate);
  80 + Period p2 = new Period($fromDate, $toDate, PeriodType.days());
  81 + cdrp.setSdays(p2.getDays() + 1);
  82 + cdrp.setCalcu_start_date_2($fromDate);
  83 + cdrp.setCalcu_end_date_2($toDate);
  84 +
  85 + /**
  86 + * 规则md5值(不使用id判定,使用md5判定)
  87 + * 使用,启用日期,路牌范围,结合生成md5编码
  88 + */
  89 + String ruleMd5 = Md5Util.getMd5(
  90 + String.valueOf($qyrq.getMillis()) +
  91 + "_" +
  92 + $sri.getSelf().getLpIds() +
  93 + "_" +
  94 + $sri.getSelf().getLpStart().toString()
  95 + );
  96 + cdrp.setRuleMd5(ruleMd5);
  97 + // 人员范围个数
  98 + cdrp.setRuleEcCount($sri.getEmployeeConfigIds().size());
  99 +
  100 + insert(cdrp);
  101 +
  102 +// log.info("总共需要排班的天数 sdays={} ruleId={} from={} to={}", (p2.getDays() + 1), $ruleId, $fromDate, $toDate);
  103 +
  104 +end
  105 +
  106 +// 启用日期 属于 [开始日期,结束日期]
  107 +rule "calcu_days_2_"
  108 + salience 1000
  109 + when
  110 + ScheduleCalcuParam_input(
  111 + fromDate.isBefore(toDate) || fromDate.isEqual(toDate),
  112 + $fromDate : fromDate,
  113 + $toDate : toDate,
  114 + $xlId: xlId
  115 + )
  116 + $sri: ScheduleRule_input(
  117 + $ruleId : ruleId, $qyrq : qyrq,
  118 + $lpindex : startGbdIndex, $ryindex: startEIndex)
  119 + eval((!$qyrq.isBefore($fromDate)) && (!$qyrq.isAfter($toDate)))
  120 + then
  121 + scheduleResult.setXlid($xlId);
  122 +
  123 + // 构造Calcu_days_result_pre,用于路牌
  124 + Calcu_days_result_pre cdrp = new Calcu_days_result_pre();
  125 + cdrp.setRuleId($ruleId);
  126 + cdrp.setCalcu_index_lp($lpindex);
  127 + cdrp.setCalcu_index_ry($ryindex);
  128 + cdrp.setCalcu_start_date_1($qyrq);
  129 + cdrp.setCalcu_end_date_1($qyrq);
  130 + Period p2 = new Period($qyrq, $toDate, PeriodType.days());
  131 + cdrp.setSdays(p2.getDays() + 1);
  132 + cdrp.setCalcu_start_date_2($qyrq);
  133 + cdrp.setCalcu_end_date_2($toDate);
  134 +
  135 + /**
  136 + * 规则md5值(不使用id判定,使用md5判定)
  137 + * 使用,启用日期,路牌范围,结合生成md5编码
  138 + */
  139 + String ruleMd5 = Md5Util.getMd5(
  140 + String.valueOf($qyrq.getMillis()) +
  141 + "_" +
  142 + $sri.getSelf().getLpIds() +
  143 + "_" +
  144 + $sri.getSelf().getLpStart().toString()
  145 + );
  146 + cdrp.setRuleMd5(ruleMd5);
  147 + // 人员范围个数
  148 + cdrp.setRuleEcCount($sri.getEmployeeConfigIds().size());
  149 +
  150 + insert(cdrp);
  151 +
  152 +// log.info("总共需要排班的天数 sdays={} ruleId={} from={} to={}", (p2.getDays() + 1), $ruleId, $qyrq, $toDate);
  153 +
  154 +end
  155 +
  156 +// 使用已经排过班的数据修正Calcu_days_result_pre
  157 +// 1、避免每次从规则的启用日期开始算
  158 +// 2、时刻表会不停的修正,如果每次都从规则启用日期开始算,会出错
  159 +
  160 +declare SchedulePlanRuleResult_wrap
  161 + ruleId: String // 规则Id
  162 + ruleMd5: String // 规则md5编码
  163 + scheduleDate: DateTime // 排班日期
  164 +
  165 + isUsed: Boolean = false // 是否被使用过
  166 +
  167 + self: SchedulePlanRuleResult; // 原始对象数据
  168 +end
  169 +
  170 +rule "Calcu_SchedulePlanRuleResult_wrap"
  171 + salience 950
  172 + when
  173 + ScheduleCalcuParam_input(
  174 + fromDate.isBefore(toDate) || fromDate.isEqual(toDate),
  175 + $fromDate : fromDate,
  176 + $toDate : toDate,
  177 + $xlId: xlId,
  178 + $self: schedulePlan
  179 + )
  180 + eval($self.getIsHistoryPlanFirst() == true) // 是否使用历史排班标识
  181 + $sprr: SchedulePlanRuleResult() from scheduleRuleService.findLastByXl($xlId, $fromDate.toDate())
  182 + eval($sprr.getQyrq() != null)
  183 +
  184 + then
  185 + // 创建班序历史结果数据
  186 + SchedulePlanRuleResult_wrap schedulePlanRuleResult_wrap = new SchedulePlanRuleResult_wrap();
  187 + schedulePlanRuleResult_wrap.setRuleId($sprr.getRuleId());
  188 + schedulePlanRuleResult_wrap.setScheduleDate(new DateTime($sprr.getScheduleDate()));
  189 + schedulePlanRuleResult_wrap.setSelf($sprr);
  190 +
  191 + // 规则Md5编码
  192 + String md5 = Md5Util.getMd5(
  193 + String.valueOf($sprr.getQyrq().getTime()) +
  194 + "_" +
  195 + $sprr.getGids() +
  196 + "_" +
  197 + $sprr.getOrigingidindex()
  198 + );
  199 +
  200 +// System.out.println("修改后的md5:" + md5 + "车辆:" + $sprr.getCcZbh());
  201 +
  202 + schedulePlanRuleResult_wrap.setRuleMd5(md5);
  203 +
  204 + insert(schedulePlanRuleResult_wrap);
  205 +end
  206 +
  207 +
  208 +// 1、启用日期 < 开始日期
  209 +// 2、如果最近的排班规则历史时间在 (启用日期,开始日期) 之间,需要重新修正预处理数据
  210 +rule "calcu_days_1_with_result"
  211 + no-loop
  212 + salience 960
  213 + when
  214 + $cdrp: Calcu_days_result_pre(
  215 + calcu_start_date_1.isBefore(calcu_start_date_2),
  216 + $ruleId: ruleId,
  217 + $ruleMd5: ruleMd5,
  218 + $ruleEcCount: ruleEcCount
  219 + )
  220 + $srrr_wrap: SchedulePlanRuleResult_wrap(
  221 +// ruleId == $ruleId,
  222 + ruleMd5 == $ruleMd5,
  223 + scheduleDate.isAfter($cdrp.calcu_start_date_1),
  224 + scheduleDate.isBefore($cdrp.calcu_start_date_2),
  225 + isUsed == false,
  226 + $scheduleDate: scheduleDate,
  227 + $self: self
  228 + )
  229 + then
  230 + // 修正排班数据
  231 +// log.info("准备修正 ruleId={} historyDate={}", $ruleId, $scheduleDate);
  232 +
  233 + // 路牌范围起始index使用历史数据
  234 + $cdrp.setCalcu_index_lp(Integer.valueOf($self.getGidindex()));
  235 + // 人员范围起始index,需要判定,如果长度都是一样的,使用历史的,否则不更新,使用最新的
  236 + String history_ecids = $self.getEcids();
  237 + if ($ruleEcCount == history_ecids.split(",").length) {
  238 + $cdrp.setCalcu_index_ry(Integer.valueOf($self.getEcindex()));
  239 + }
  240 +
  241 + $cdrp.setCalcu_start_date_1($scheduleDate);
  242 + update($cdrp);
  243 +
  244 + $srrr_wrap.setIsUsed(true);
  245 + update($srrr_wrap);
  246 +
  247 +end
  248 +
  249 +
  250 +
  251 +//------------------------- 第二阶段、计算规则准备数据2(第一组循环) ----------------------------//
  252 +rule "Calcu_loop1_1_" // 路牌在时刻表中存在,就翻
  253 + salience 900
  254 + when
  255 + $cdrp: Calcu_days_result_pre(
  256 + calcu_start_date_1.isBefore(calcu_end_date_1),
  257 + $csd1: calcu_start_date_1,
  258 + $ced1: calcu_end_date_1,
  259 + $ruleId: ruleId,
  260 + $lpindex: calcu_index_lp,
  261 + $ryindex: calcu_index_ry
  262 + )
  263 + $sri: ScheduleRule_input(
  264 + ruleId == $ruleId,
  265 + $gids: guideboardIds,
  266 + $lprangesize : guideboardIds.size(),
  267 + $ryrangesize: employeeConfigIds.size()
  268 + )
  269 + $liro: LpInfoResult_output(
  270 + dateTime.isEqual($csd1),
  271 + $gids.get($lpindex) == lpId,
  272 + $lpId: lpId
  273 + )
  274 + then
  275 + $cdrp.setCalcu_index_lp(($lpindex + 1) % $lprangesize);
  276 + $cdrp.setCalcu_index_ry(($ryindex + 1) % $ryrangesize);
  277 + $cdrp.setCalcu_start_date_1($csd1.plusDays(1));
  278 +
  279 +// log.info("Calcu_loop1_1_ ruleId={}, calcu_index_lp/ry={}/{}",
  280 +// $ruleId, $cdrp.getCalcu_index_lp(), $cdrp.getCalcu_index_ry());
  281 +
  282 + update($cdrp);
  283 +end
  284 +
  285 +rule "Calcu_loop1_2_" // 路牌在时刻表中不存在,就不翻
  286 + salience 900
  287 + when
  288 + $cdrp: Calcu_days_result_pre(
  289 + calcu_start_date_1.isBefore(calcu_end_date_1),
  290 + $csd1: calcu_start_date_1,
  291 + $ced1: calcu_end_date_1,
  292 + $ruleId: ruleId
  293 + )
  294 + $sri: ScheduleRule_input(
  295 + ruleId == $ruleId,
  296 + $rangesize : guideboardIds.size()
  297 + )
  298 + then
  299 + $cdrp.setCalcu_start_date_1($csd1.plusDays(1));
  300 +
  301 +// log.info("Calcu_loop1_2_ ruleId={}, calcu_index_lp/ry={}/{}",
  302 +// $ruleId, $cdrp.getCalcu_index_lp(), $cdrp.getCalcu_index_ry());
  303 +
  304 + update($cdrp);
  305 +end
  306 +
  307 +//------------------------- 第三阶段、计算规则准备数据2(第二组循环) ----------------------------//
  308 +rule "Calcu_loop2_1_" // 路牌在时刻表中存在,就翻
  309 + salience 800
  310 + when
  311 + ScheduleCalcuParam_input($sp: schedulePlan, $xlid: xlId)
  312 + $cdrp: Calcu_days_result_pre(
  313 + calcu_start_date_1.isEqual(calcu_end_date_1),
  314 + calcu_start_date_2.isBefore(calcu_end_date_2) || calcu_start_date_2.isEqual(calcu_end_date_2),
  315 + $csd2: calcu_start_date_2,
  316 + $ced2: calcu_end_date_2,
  317 + $ruleId: ruleId,
  318 + $lpindex: calcu_index_lp,
  319 + $ryindex: calcu_index_ry
  320 + )
  321 + $sri: ScheduleRule_input(
  322 + ruleId == $ruleId,
  323 + $cid: carConfigId,
  324 + $gids: guideboardIds,
  325 + $eids: employeeConfigIds,
  326 + $lprangesize : guideboardIds.size(),
  327 + $ryrangesize: employeeConfigIds.size(),
  328 + $srf: self
  329 + )
  330 + $liro: LpInfoResult_output(
  331 + dateTime.isEqual($csd2),
  332 + $gids.get($lpindex) == lpId,
  333 + $lpId: lpId,
  334 + $ttinfoId: ttInfoId,
  335 + $ttinfoName: ttInfoName
  336 + )
  337 + then
  338 + ScheduleResult_output ro = new ScheduleResult_output();
  339 + ro.setRuleId($ruleId);
  340 + ro.setSd($csd2);
  341 + ro.setGuideboardId(String.valueOf($gids.get($lpindex)));
  342 + ro.setEmployeeConfigId(String.valueOf($eids.get($ryindex)));
  343 + ro.setCarConfigId($cid);
  344 + ro.setXlId($xlid);
  345 +
  346 + // 类型
  347 + ro.setsType($sri.getsType());
  348 +
  349 + scheduleResult.getResults().add(ro);
  350 +
  351 +// log.info("gogoogogogogo");
  352 +
  353 + $cdrp.setCalcu_index_lp(($lpindex + 1) % $lprangesize);
  354 + $cdrp.setCalcu_index_ry(($ryindex + 1) % $ryrangesize);
  355 + $cdrp.setCalcu_start_date_2($csd2.plusDays(1));
  356 +
  357 + if ($sri.getsType() == ScheduleRule_Type.NORMAL) {
  358 + // 保存排班规则循环结果 --> SchedulePlanRuleResult
  359 + SchedulePlanRuleResult schedulePlanRuleResult = new SchedulePlanRuleResult($sp);
  360 +// schedulePlanRuleResult.setXlId(String.valueOf($srf.getXl().getId()));
  361 + schedulePlanRuleResult.setXlId($srf.getXl().getId());
  362 + schedulePlanRuleResult.setXlName($srf.getXl().getName());
  363 + schedulePlanRuleResult.setRuleId($ruleId);
  364 + schedulePlanRuleResult.setCcId($cid);
  365 + schedulePlanRuleResult.setCcZbh($srf.getCarConfigInfo().getCl().getInsideCode());
  366 + schedulePlanRuleResult.setGids($srf.getLpIds()); // 参与md5计算
  367 + schedulePlanRuleResult.setGnames($srf.getLpNames());
  368 + schedulePlanRuleResult.setGidindex(String.valueOf($lpindex));
  369 + schedulePlanRuleResult.setEcids($srf.getRyConfigIds());
  370 + schedulePlanRuleResult.setEcdbbms($srf.getRyDbbms());
  371 + schedulePlanRuleResult.setEcindex(String.valueOf($ryindex));
  372 + schedulePlanRuleResult.setScheduleDate($csd2.toDate());
  373 + schedulePlanRuleResult.setTtinfoId($ttinfoId);
  374 + schedulePlanRuleResult.setTtinfoName($ttinfoName);
  375 + schedulePlanRuleResult.setQyrq($sri.getQyrq().toDate()); // 参与md5计算
  376 + schedulePlanRuleResult.setOrigingidindex(String.valueOf($sri.getSelf().getLpStart())); // 参与md5计算
  377 +
  378 + scheduleResult.getSchedulePlanRuleResults().add(schedulePlanRuleResult);
  379 + }
  380 +
  381 +
  382 +
  383 +// log.info("Calcu_loop2_1_ ruleId={}, calcu_index_lp/ry={}/{}, from={}, to={}",
  384 +// $ruleId, $cdrp.getCalcu_index_lp(), $cdrp.getCalcu_index_ry(), $csd2, $ced2);
  385 +
  386 + update($cdrp);
  387 +end
  388 +
  389 +rule "Calcu_loop2_2_" // 路牌在时刻表中不存在,就不翻
  390 + salience 800
  391 + when
  392 + ScheduleCalcuParam_input($sp: schedulePlan, $xlid: xlId)
  393 + $cdrp: Calcu_days_result_pre(
  394 + calcu_start_date_1.isEqual(calcu_end_date_1),
  395 + calcu_start_date_2.isBefore(calcu_end_date_2) || calcu_start_date_2.isEqual(calcu_end_date_2),
  396 + $csd2: calcu_start_date_2,
  397 + $ced2: calcu_end_date_2,
  398 + $ruleId: ruleId,
  399 + $lpindex: calcu_index_lp,
  400 + $ryindex: calcu_index_ry
  401 + )
  402 + $sri: ScheduleRule_input(
  403 + ruleId == $ruleId,
  404 + $cid: carConfigId,
  405 + $gids: guideboardIds,
  406 + $eids: employeeConfigIds,
  407 + $srf: self
  408 + )
  409 + then
  410 + ScheduleResult_output ro = new ScheduleResult_output();
  411 + ro.setRuleId($ruleId);
  412 + ro.setSd($csd2);
  413 + ro.setGuideboardId(String.valueOf($gids.get($lpindex)));
  414 + ro.setEmployeeConfigId(String.valueOf($eids.get($ryindex)));
  415 + ro.setCarConfigId($cid);
  416 + ro.setXlId($xlid);
  417 +
  418 + // 类型
  419 + ro.setsType($sri.getsType());
  420 +
  421 + scheduleResult.getResults().add(ro);
  422 +
  423 + $cdrp.setCalcu_start_date_2($csd2.plusDays(1));
  424 +
  425 +// // 保存排班规则循环结果 --> SchedulePlanRuleResult
  426 +// SchedulePlanRuleResult schedulePlanRuleResult = new SchedulePlanRuleResult($sp);
  427 +// schedulePlanRuleResult.setXlId(String.valueOf($srf.getXl().getId()));
  428 +// schedulePlanRuleResult.setXlName($srf.getXl().getName());
  429 +// schedulePlanRuleResult.setRuleId($ruleId);
  430 +// schedulePlanRuleResult.setCcId($cid);
  431 +// schedulePlanRuleResult.setCcZbh($srf.getCarConfigInfo().getCl().getInsideCode());
  432 +// schedulePlanRuleResult.setGids($srf.getLpIds());
  433 +// schedulePlanRuleResult.setGnames($srf.getLpNames());
  434 +// schedulePlanRuleResult.setGidindex(String.valueOf($lpindex));
  435 +// schedulePlanRuleResult.setEcids($srf.getRyConfigIds());
  436 +// schedulePlanRuleResult.setEcdbbms($srf.getRyDbbms());
  437 +// schedulePlanRuleResult.setEcindex(String.valueOf($ryindex));
  438 +// schedulePlanRuleResult.setScheduleDate($csd2.toDate());
  439 +//
  440 +// scheduleResult.getSchedulePlanRuleResults().add(schedulePlanRuleResult);
  441 +
  442 +// log.info("Calcu_loop2_2_ ruleId={}, calcu_index_lp/ry={}/{}, from={}, to={}",
  443 +// $ruleId, $cdrp.getCalcu_index_lp(), $cdrp.getCalcu_index_ry(), $csd2, $ced2);
  444 +
  445 + update($cdrp);
  446 +end
  447 +
  448 +
  449 +
  450 +
  451 +
  452 +
src/main/resources/rules/shiftloop_fb_2.drl
@@ -254,6 +254,10 @@ rule &quot;calcu_days_1_with_result&quot; @@ -254,6 +254,10 @@ rule &quot;calcu_days_1_with_result&quot;
254 $cdrp.setCalcu_index_ry(Integer.valueOf($self.getEcindex())); 254 $cdrp.setCalcu_index_ry(Integer.valueOf($self.getEcindex()));
255 } 255 }
256 256
  257 + // 翻班格式利用路牌的历史index更新
  258 + int fb_temp = Integer.valueOf($self.getGidindex()) % $cdrp.getFbweeks().size();
  259 + $cdrp.setFbgs_index(fb_temp);
  260 +
257 $cdrp.setCalcu_start_date_1($scheduleDate); 261 $cdrp.setCalcu_start_date_1($scheduleDate);
258 update($cdrp); 262 update($cdrp);
259 263
@@ -266,7 +270,7 @@ end @@ -266,7 +270,7 @@ end
266 270
267 //------------------------- 第二阶段、计算规则准备数据2(第一组循环) ----------------------------// 271 //------------------------- 第二阶段、计算规则准备数据2(第一组循环) ----------------------------//
268 272
269 -function void calcu_loop1_fb(Calcu_days_result_pre $cdrp, ScheduleRule_input $sri) { 273 +function void calcu_loop1_fb(Calcu_days_result_pre $cdrp, ScheduleRule_input $sri, Logger log) {
270 Integer $lpindex = $cdrp.getCalcu_index_lp(); 274 Integer $lpindex = $cdrp.getCalcu_index_lp();
271 Integer $lprangesize = $sri.getGuideboardIds().size(); 275 Integer $lprangesize = $sri.getGuideboardIds().size();
272 Integer $ryindex = $cdrp.getCalcu_index_ry(); 276 Integer $ryindex = $cdrp.getCalcu_index_ry();
@@ -274,6 +278,8 @@ function void calcu_loop1_fb(Calcu_days_result_pre $cdrp, ScheduleRule_input $sr @@ -274,6 +278,8 @@ function void calcu_loop1_fb(Calcu_days_result_pre $cdrp, ScheduleRule_input $sr
274 Integer $fbindex = $cdrp.getFbgs_index(); 278 Integer $fbindex = $cdrp.getFbgs_index();
275 Integer $fbfangesize = $sri.getWeekdays().size(); 279 Integer $fbfangesize = $sri.getWeekdays().size();
276 DateTime $csd1 = $cdrp.getCalcu_start_date_1(); 280 DateTime $csd1 = $cdrp.getCalcu_start_date_1();
  281 + DateTime $ced1 = $cdrp.getCalcu_end_date_1();
  282 +
277 String $ruleId = $cdrp.getRuleId(); 283 String $ruleId = $cdrp.getRuleId();
278 284
279 $cdrp.setCalcu_index_lp(($lpindex + 1) % $lprangesize); 285 $cdrp.setCalcu_index_lp(($lpindex + 1) % $lprangesize);
@@ -282,19 +288,21 @@ function void calcu_loop1_fb(Calcu_days_result_pre $cdrp, ScheduleRule_input $sr @@ -282,19 +288,21 @@ function void calcu_loop1_fb(Calcu_days_result_pre $cdrp, ScheduleRule_input $sr
282 $cdrp.setFbgs_index(($fbindex + 1) % $fbfangesize); 288 $cdrp.setFbgs_index(($fbindex + 1) % $fbfangesize);
283 $cdrp.setCalcu_start_date_1($csd1.plusDays(1)); 289 $cdrp.setCalcu_start_date_1($csd1.plusDays(1));
284 290
285 -// log.info("calcu_loop1_fb ruleId={}, calcu_index_lp/ry={}/{}",  
286 -// $ruleId, $cdrp.getCalcu_index_lp(), $cdrp.getCalcu_index_ry()); 291 +// log.info("calcu_loop1_fb ruleId={}, calcu_index_lp/ry={}/{}, from={}, to={}",
  292 +// $ruleId, $cdrp.getCalcu_index_lp(), $cdrp.getCalcu_index_ry(), $csd1, $ced1);
  293 +
287 } 294 }
288 -function void calcu_loop1_not_fb(Calcu_days_result_pre $cdrp, ScheduleRule_input $sri) { 295 +function void calcu_loop1_not_fb(Calcu_days_result_pre $cdrp, ScheduleRule_input $sri, Logger log) {
289 DateTime $csd1 = $cdrp.getCalcu_start_date_1(); 296 DateTime $csd1 = $cdrp.getCalcu_start_date_1();
  297 + DateTime $ced1 = $cdrp.getCalcu_end_date_1();
290 Integer $fbindex = $cdrp.getFbgs_index(); 298 Integer $fbindex = $cdrp.getFbgs_index();
291 Integer $fbfangesize = $sri.getWeekdays().size(); 299 Integer $fbfangesize = $sri.getWeekdays().size();
292 300
293 $cdrp.setFbgs_index(($fbindex + 1) % $fbfangesize); 301 $cdrp.setFbgs_index(($fbindex + 1) % $fbfangesize);
294 $cdrp.setCalcu_start_date_1($csd1.plusDays(1)); 302 $cdrp.setCalcu_start_date_1($csd1.plusDays(1));
295 303
296 -// log.info("calcu_loop1_not_fb ruleId={}, calcu_index_lp/ry={}/{}",  
297 -// $cdrp.getRuleId(), $cdrp.getCalcu_index_lp(), $cdrp.getCalcu_index_ry()); 304 +// log.info("calcu_loop1_not_fb ruleId={}, calcu_index_lp/ry={}/{}, from={}, to={}",
  305 +// $cdrp.getRuleId(), $cdrp.getCalcu_index_lp(), $cdrp.getCalcu_index_ry(), $csd1, $ced1);
298 } 306 }
299 307
300 308
@@ -312,7 +320,7 @@ rule &quot;Calcu_loop1_fbtype_with_0_&quot; // 翻班模式为 type=1 使用翻班格式 @@ -312,7 +320,7 @@ rule &quot;Calcu_loop1_fbtype_with_0_&quot; // 翻班模式为 type=1 使用翻班格式
312 weekdays[$fbindex] == false 320 weekdays[$fbindex] == false
313 ) 321 )
314 then 322 then
315 - calcu_loop1_not_fb($cdrp, $sri); 323 + calcu_loop1_not_fb($cdrp, $sri, log);
316 update($cdrp); 324 update($cdrp);
317 end 325 end
318 326
@@ -337,7 +345,7 @@ rule &quot;Calcu_loop1_fbtype_with_1_lp_&quot; // 翻班模式为 type=1 使用翻班格 @@ -337,7 +345,7 @@ rule &quot;Calcu_loop1_fbtype_with_1_lp_&quot; // 翻班模式为 type=1 使用翻班格
337 $gids[$lpindex] == lpId 345 $gids[$lpindex] == lpId
338 ) 346 )
339 then 347 then
340 - calcu_loop1_fb($cdrp, $sri); 348 + calcu_loop1_fb($cdrp, $sri, log);
341 update($cdrp); 349 update($cdrp);
342 350
343 end 351 end
@@ -357,7 +365,7 @@ rule &quot;Calcu_loop1_fbtype_with_1_no_lp_&quot; // 翻班模式为 type=1 使用翻班 @@ -357,7 +365,7 @@ rule &quot;Calcu_loop1_fbtype_with_1_no_lp_&quot; // 翻班模式为 type=1 使用翻班
357 weekdays[$fbindex] == true 365 weekdays[$fbindex] == true
358 ) 366 )
359 then 367 then
360 - calcu_loop1_not_fb($cdrp, $sri); 368 + calcu_loop1_not_fb($cdrp, $sri, log);
361 update($cdrp); 369 update($cdrp);
362 end 370 end
363 371
@@ -381,7 +389,7 @@ rule &quot;Calcu_loop1_timetabletype_with_lp_&quot; // 翻班模式为 type=0 使用时刻 @@ -381,7 +389,7 @@ rule &quot;Calcu_loop1_timetabletype_with_lp_&quot; // 翻班模式为 type=0 使用时刻
381 $gids[$lpindex] == lpId 389 $gids[$lpindex] == lpId
382 ) 390 )
383 then 391 then
384 - calcu_loop1_fb($cdrp, $sri); 392 + calcu_loop1_fb($cdrp, $sri, log);
385 update($cdrp); 393 update($cdrp);
386 end 394 end
387 395
@@ -398,7 +406,7 @@ rule &quot;Calcu_loop1_timetabletype_with_no_lp_&quot; // 翻班模式为 type=0 使用时 @@ -398,7 +406,7 @@ rule &quot;Calcu_loop1_timetabletype_with_no_lp_&quot; // 翻班模式为 type=0 使用时
398 ruleId == $ruleId 406 ruleId == $ruleId
399 ) 407 )
400 then 408 then
401 - calcu_loop1_not_fb($cdrp, $sri); 409 + calcu_loop1_not_fb($cdrp, $sri, log);
402 update($cdrp); 410 update($cdrp);
403 end 411 end
404 412
@@ -485,10 +493,12 @@ function void calcu_loop2_fb( @@ -485,10 +493,12 @@ function void calcu_loop2_fb(
485 function void calcu_loop2_not_fb( 493 function void calcu_loop2_not_fb(
486 Calcu_days_result_pre $cdrp, 494 Calcu_days_result_pre $cdrp,
487 ScheduleRule_input $sri, 495 ScheduleRule_input $sri,
488 - ScheduleResults_output rs) { 496 + ScheduleResults_output rs,
  497 + Logger log) {
489 498
490 String $ruleId = $cdrp.getRuleId(); 499 String $ruleId = $cdrp.getRuleId();
491 DateTime $csd2 = $cdrp.getCalcu_start_date_2(); 500 DateTime $csd2 = $cdrp.getCalcu_start_date_2();
  501 + DateTime $ced2 = $cdrp.getCalcu_end_date_2();
492 Integer $lpindex = $cdrp.getCalcu_index_lp(); 502 Integer $lpindex = $cdrp.getCalcu_index_lp();
493 List $gids = $sri.getGuideboardIds(); 503 List $gids = $sri.getGuideboardIds();
494 Integer $ryindex = $cdrp.getCalcu_index_ry(); 504 Integer $ryindex = $cdrp.getCalcu_index_ry();
@@ -514,6 +524,10 @@ function void calcu_loop2_not_fb( @@ -514,6 +524,10 @@ function void calcu_loop2_not_fb(
514 524
515 $cdrp.setFbgs_index(($fbindex + 1) % $fbfangesize); 525 $cdrp.setFbgs_index(($fbindex + 1) % $fbfangesize);
516 $cdrp.setCalcu_start_date_2($csd2.plusDays(1)); 526 $cdrp.setCalcu_start_date_2($csd2.plusDays(1));
  527 +
  528 +// log.info("calcu_loop2_not_fb ruleId={}, calcu_index_lp/ry={}/{}, from={}, to={}",
  529 +// $ruleId, $cdrp.getCalcu_index_lp(), $cdrp.getCalcu_index_ry(), $csd2, $ced2);
  530 +
517 } 531 }
518 532
519 rule "Calcu_loop2_fbtype_with_0_" // 翻班模式为 type=1 使用翻班格式翻,当天翻班格式是false,就跳过 533 rule "Calcu_loop2_fbtype_with_0_" // 翻班模式为 type=1 使用翻班格式翻,当天翻班格式是false,就跳过
@@ -532,7 +546,7 @@ rule &quot;Calcu_loop2_fbtype_with_0_&quot; // 翻班模式为 type=1 使用翻班格式 @@ -532,7 +546,7 @@ rule &quot;Calcu_loop2_fbtype_with_0_&quot; // 翻班模式为 type=1 使用翻班格式
532 weekdays[$fbindex] == false 546 weekdays[$fbindex] == false
533 ) 547 )
534 then 548 then
535 - calcu_loop2_not_fb($cdrp, $sri, scheduleResult); 549 + calcu_loop2_not_fb($cdrp, $sri, scheduleResult, log);
536 update($cdrp); 550 update($cdrp);
537 551
538 end 552 end
@@ -580,7 +594,7 @@ rule &quot;Calcu_loop2_fbtype_with_1_no_lp_&quot; // 翻班模式为 type=1 使用翻班 @@ -580,7 +594,7 @@ rule &quot;Calcu_loop2_fbtype_with_1_no_lp_&quot; // 翻班模式为 type=1 使用翻班
580 weekdays[$fbindex] == true 594 weekdays[$fbindex] == true
581 ) 595 )
582 then 596 then
583 - calcu_loop2_not_fb($cdrp, $sri, scheduleResult); 597 + calcu_loop2_not_fb($cdrp, $sri, scheduleResult, log);
584 update($cdrp); 598 update($cdrp);
585 599
586 end 600 end
@@ -626,7 +640,7 @@ rule &quot;Calcu_loop2_timetabletype_with_no_lp_&quot; // 翻班模式为 type=0 使用时 @@ -626,7 +640,7 @@ rule &quot;Calcu_loop2_timetabletype_with_no_lp_&quot; // 翻班模式为 type=0 使用时
626 ruleId == $ruleId 640 ruleId == $ruleId
627 ) 641 )
628 then 642 then
629 - calcu_loop2_not_fb($cdrp, $sri, scheduleResult); 643 + calcu_loop2_not_fb($cdrp, $sri, scheduleResult, log);
630 update($cdrp); 644 update($cdrp);
631 end 645 end
632 646