Commit 59ff0553682cbe12bcfbfcd188f3cfb6682711f8

Authored by 徐烜
2 parents a6933c8a 36a2af96

Merge branch 'minhang' into pudong

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
@@ -477,18 +485,20 @@ function void calcu_loop2_fb( @@ -477,18 +485,20 @@ function void calcu_loop2_fb(
477 485
478 486
479 487
480 - log.info("calcu_loop2_fb ruleId={}, calcu_index_lp/ry={}/{}, from={}, to={}",  
481 - $ruleId, $cdrp.getCalcu_index_lp(), $cdrp.getCalcu_index_ry(), $csd2, $ced2); 488 +// log.info("calcu_loop2_fb ruleId={}, calcu_index_lp/ry={}/{}, from={}, to={}",
  489 +// $ruleId, $cdrp.getCalcu_index_lp(), $cdrp.getCalcu_index_ry(), $csd2, $ced2);
482 490
483 } 491 }
484 492
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
src/main/resources/static/pages/scheduleApp/module/common/prj-common-globalservice.js
1 -//所有模块service配置 1 +//所有模块service配置
2 // 车辆信息service 2 // 车辆信息service
3 angular.module('ScheduleApp').factory( 3 angular.module('ScheduleApp').factory(
4 'BusInfoManageService_g', 4 'BusInfoManageService_g',
@@ -79,7 +79,7 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -79,7 +79,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(
79 79
80 } 80 }
81 ] 81 ]
82 -); 82 +);
83 // 车辆设备信息service 83 // 车辆设备信息service
84 angular.module('ScheduleApp').factory('DeviceInfoManageService_g', ['$resource', function($resource) { 84 angular.module('ScheduleApp').factory('DeviceInfoManageService_g', ['$resource', function($resource) {
85 return $resource( 85 return $resource(
@@ -119,7 +119,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;DeviceInfoManageService_g&#39;, [&#39;$resource&#39;, @@ -119,7 +119,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;DeviceInfoManageService_g&#39;, [&#39;$resource&#39;,
119 } 119 }
120 } 120 }
121 ); 121 );
122 -}]); 122 +}]);
123 // 人员信息service 123 // 人员信息service
124 angular.module('ScheduleApp').factory( 124 angular.module('ScheduleApp').factory(
125 'EmployeeInfoManageService_g', 125 'EmployeeInfoManageService_g',
@@ -183,7 +183,7 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -183,7 +183,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(
183 } 183 }
184 ] 184 ]
185 ); 185 );
186 - 186 +
187 // 车辆配置service 187 // 车辆配置service
188 angular.module('ScheduleApp').factory('BusConfigService_g', ['$resource', 'UserPrincipal', function($resource, UserPrincipal) { 188 angular.module('ScheduleApp').factory('BusConfigService_g', ['$resource', 'UserPrincipal', function($resource, UserPrincipal) {
189 return { 189 return {
@@ -238,7 +238,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;BusConfigService_g&#39;, [&#39;$resource&#39;, &#39;UserP @@ -238,7 +238,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;BusConfigService_g&#39;, [&#39;$resource&#39;, &#39;UserP
238 } 238 }
239 ) 239 )
240 }; 240 };
241 -}]); 241 +}]);
242 // 线路运营统计service 242 // 线路运营统计service
243 angular.module('ScheduleApp').factory('BusLineInfoStatService_g', ['$resource', function($resource) { 243 angular.module('ScheduleApp').factory('BusLineInfoStatService_g', ['$resource', function($resource) {
244 return $resource( 244 return $resource(
@@ -254,7 +254,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;BusLineInfoStatService_g&#39;, [&#39;$resource&#39;, @@ -254,7 +254,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;BusLineInfoStatService_g&#39;, [&#39;$resource&#39;,
254 } 254 }
255 ); 255 );
256 }]); 256 }]);
257 - 257 +
258 // 人员配置service 258 // 人员配置service
259 angular.module('ScheduleApp').factory('EmployeeConfigService_g', ['$resource', function($resource) { 259 angular.module('ScheduleApp').factory('EmployeeConfigService_g', ['$resource', function($resource) {
260 return { 260 return {
@@ -338,7 +338,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;EmployeeConfigService_g&#39;, [&#39;$resource&#39;, f @@ -338,7 +338,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;EmployeeConfigService_g&#39;, [&#39;$resource&#39;, f
338 } 338 }
339 ) 339 )
340 }; 340 };
341 -}]); 341 +}]);
342 // 路牌管理service 342 // 路牌管理service
343 angular.module('ScheduleApp').factory('GuideboardManageService_g', ['$resource', function($resource) { 343 angular.module('ScheduleApp').factory('GuideboardManageService_g', ['$resource', function($resource) {
344 return { 344 return {
@@ -411,7 +411,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;GuideboardManageService_g&#39;, [&#39;$resource&#39;, @@ -411,7 +411,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;GuideboardManageService_g&#39;, [&#39;$resource&#39;,
411 } 411 }
412 ) 412 )
413 }; 413 };
414 -}]); 414 +}]);
415 // 套跑管理service 415 // 套跑管理service
416 angular.module('ScheduleApp').factory('rerunManageService_g', ['$resource', function($resource) { 416 angular.module('ScheduleApp').factory('rerunManageService_g', ['$resource', function($resource) {
417 return { 417 return {
@@ -453,7 +453,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;rerunManageService_g&#39;, [&#39;$resource&#39;, func @@ -453,7 +453,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;rerunManageService_g&#39;, [&#39;$resource&#39;, func
453 } 453 }
454 ) 454 )
455 }; 455 };
456 -}]); 456 +}]);
457 // 排班计划管理service 457 // 排班计划管理service
458 angular.module('ScheduleApp').factory('SchedulePlanManageService_g', ['$resource', function($resource) { 458 angular.module('ScheduleApp').factory('SchedulePlanManageService_g', ['$resource', function($resource) {
459 return { 459 return {
@@ -612,13 +612,13 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;SchedulePlanInfoManageService_g&#39;, [&#39;$reso @@ -612,13 +612,13 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;SchedulePlanInfoManageService_g&#39;, [&#39;$reso
612 612
613 613
614 }; 614 };
615 -}]); 615 +}]);
616 // 排班管理service 616 // 排班管理service
617 angular.module('ScheduleApp').factory('ScheduleRuleManageService_g', ['$resource', function($resource) { 617 angular.module('ScheduleApp').factory('ScheduleRuleManageService_g', ['$resource', function($resource) {
618 return { 618 return {
619 rest: $resource( 619 rest: $resource(
620 '/sr1fc/:id', 620 '/sr1fc/:id',
621 - {order: 'xl.id,updateDate,carConfigInfo.cl.insideCode', direction: 'ASC,DESC,ASC', id: '@id'}, 621 + {order: 'xl.id,fbtype,updateDate,carConfigInfo.cl.insideCode', direction: 'ASC,DESC,DESC,ASC', id: '@id'},
622 { 622 {
623 list: { 623 list: {
624 method: 'GET', 624 method: 'GET',
@@ -671,7 +671,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;ScheduleRuleManageService_g&#39;, [&#39;$resource @@ -671,7 +671,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(&#39;ScheduleRuleManageService_g&#39;, [&#39;$resource
671 ) 671 )
672 }; 672 };
673 }]); 673 }]);
674 - 674 +
675 // 时刻表管理service 675 // 时刻表管理service
676 angular.module('ScheduleApp').factory( 676 angular.module('ScheduleApp').factory(
677 'TTInfoManageService_g', 677 'TTInfoManageService_g',
@@ -838,7 +838,7 @@ angular.module(&#39;ScheduleApp&#39;).factory( @@ -838,7 +838,7 @@ angular.module(&#39;ScheduleApp&#39;).factory(
838 } 838 }
839 839
840 ] 840 ]
841 -); 841 +);
842 // 项目通用的全局service服务,供不同的controller使用,自定义指令不使用 842 // 项目通用的全局service服务,供不同的controller使用,自定义指令不使用
843 843
844 // 文件下载服务 844 // 文件下载服务
src/main/resources/static/pages/scheduleApp/module/core/scheduleRuleManage/list.html
@@ -56,7 +56,8 @@ @@ -56,7 +56,8 @@
56 </tr> 56 </tr>
57 </thead> 57 </thead>
58 <tbody> 58 <tbody>
59 - <tr ng-repeat="info in ctrl.page()['content']" class="odd gradeX"> 59 + <tr ng-repeat="info in ctrl.page()['content']"
  60 + ng-class="{odd: true, gradeX: true, info: ctrl.isFBGSMODE(info.fbtype), 'row-active': ctrl.isFBGSMODE(info.fbtype)}">
60 <td> 61 <td>
61 <div> 62 <div>
62 <a href="#"> 63 <a href="#">
@@ -107,7 +108,7 @@ @@ -107,7 +108,7 @@
107 <td> 108 <td>
108 <a href="#" 109 <a href="#"
109 tooltip-animation="false" 110 tooltip-animation="false"
110 - tooltip-placement="top" 111 + tooltip-placement="left-top"
111 uib-tooltip="{{info.ryDbbms}}" 112 uib-tooltip="{{info.ryDbbms}}"
112 tooltip-class="headClass"> 113 tooltip-class="headClass">
113 {{info.ryDbbms}} 114 {{info.ryDbbms}}
@@ -116,7 +117,7 @@ @@ -116,7 +117,7 @@
116 <td> 117 <td>
117 <a href="#" 118 <a href="#"
118 tooltip-animation="false" 119 tooltip-animation="false"
119 - tooltip-placement="top" 120 + tooltip-placement="left-top"
120 uib-tooltip="{{info.fbgs}}" 121 uib-tooltip="{{info.fbgs}}"
121 tooltip-class="headClass"> 122 tooltip-class="headClass">
122 {{info.fbgs}} 123 {{info.fbgs}}
src/main/resources/static/pages/scheduleApp/module/core/scheduleRuleManage/module.js
@@ -245,6 +245,11 @@ angular.module(&#39;ScheduleApp&#39;).controller( @@ -245,6 +245,11 @@ angular.module(&#39;ScheduleApp&#39;).controller(
245 245
246 self.doPage(); 246 self.doPage();
247 247
  248 + // 是否是翻班格式模式
  249 + self.isFBGSMODE = function(type) {
  250 + return type == "FBGSMODE";
  251 + }
  252 +
248 } 253 }
249 ] 254 ]
250 ); 255 );