Commit bdacb35328f6d10109a19011b34d390221b41c00

Authored by 徐烜
1 parent 5100c821

Update

src/main/java/com/bsth/entity/schedule/rule/ScheduleRule1Flat.java
... ... @@ -73,13 +73,29 @@ public class ScheduleRule1Flat extends BEntity {
73 73 @NotNull
74 74 private Integer ryStart;
75 75  
76   - /** 翻班格式(类似格式:1110011)*/
  76 + /** 翻班格式(类似格式:1110011),其中0表示当天不做跳过,1表示跳 */
77 77 private String fbgs;
78 78  
  79 + @Enumerated(EnumType.ORDINAL)
  80 + private FbgsTypeEnum fbtype = FbgsTypeEnum.TIMETABLEMODE;
  81 +
79 82 /** 备注 */
80 83 @Column(length = 1000)
81 84 private String remark;
82 85  
  86 + /** 翻班格式类型 */
  87 + public static enum FbgsTypeEnum {
  88 + /**
  89 + * 时刻表模式,当前翻到的路牌如果在当前时刻表中不存在,则跳过
  90 + */
  91 + TIMETABLEMODE,
  92 + /**
  93 + * 翻班格式模式,使用格式决定跳不跳过翻班,
  94 + * 翻班格式(类似格式:1110011),其中0表示当天不做跳过,1表示跳
  95 + */
  96 + FBGSMODE;
  97 + }
  98 +
83 99 public Long getId() {
84 100 return id;
85 101 }
... ... @@ -175,4 +191,12 @@ public class ScheduleRule1Flat extends BEntity {
175 191 public void setRemark(String remark) {
176 192 this.remark = remark;
177 193 }
  194 +
  195 + public FbgsTypeEnum getFbtype() {
  196 + return fbtype;
  197 + }
  198 +
  199 + public void setFbtype(FbgsTypeEnum fbtype) {
  200 + this.fbtype = fbtype;
  201 + }
178 202 }
... ...
src/main/java/com/bsth/service/schedule/rules/shiftloop/ScheduleRule_input.java
... ... @@ -34,7 +34,9 @@ public class ScheduleRule_input {
34 34 /** 车辆配置id */
35 35 private String carConfigId;
36 36  
37   - /** 车辆翻版(周一到周日是否启用) */
  37 + /** 翻班模式 */
  38 + private Integer fbtype;
  39 + /** 车辆翻班(周一到周日是否启用,可能是多个星期的组合,有的翻班是做六休一加做五休二) */
38 40 private List<Boolean> weekdays = new ArrayList<>();
39 41  
40 42 /** 排班输入规则类型 */
... ... @@ -66,19 +68,30 @@ public class ScheduleRule_input {
66 68 this.carConfigId = String.valueOf(scheduleRule1Flat.getCarConfigInfo().getId());
67 69  
68 70 /** 车辆翻版(周一到周日是否启用)*/
69   - String fbgs_temp = null;
70   - if (StringUtils.isEmpty(scheduleRule1Flat.getFbgs()) || "1".equals(scheduleRule1Flat.getFbgs())) {
71   - fbgs_temp = "1,1,1,1,1,1,1";
  71 + if (scheduleRule1Flat.getFbtype() == null || scheduleRule1Flat.getFbtype() == ScheduleRule1Flat.FbgsTypeEnum.TIMETABLEMODE) {
  72 + fbtype = ScheduleRule1Flat.FbgsTypeEnum.TIMETABLEMODE.ordinal();
  73 + weekdays.add(true);
72 74 } else {
73   - fbgs_temp = "1,1,1,1,1,0,0";
74   -// fbgs_temp = scheduleRule1Flat.getFbgs();
75   - }
76   - String[] days = fbgs_temp.split(",");
77   - for (int i = 0; i < 7; i++) {
78   - if ("1".equals(days[i])) {
  75 + fbtype = ScheduleRule1Flat.FbgsTypeEnum.FBGSMODE.ordinal();
  76 + if (StringUtils.isEmpty(scheduleRule1Flat.getFbgs())) { // 全1
79 77 weekdays.add(true);
80   - } else {
81   - weekdays.add(false);
  78 + } else if (scheduleRule1Flat.getFbgs().indexOf(",") >= 0) { // 逗号分隔
  79 + for (String fb : scheduleRule1Flat.getFbgs().split(",")) {
  80 + if ("1".equals(fb)) {
  81 + weekdays.add(true);
  82 + } else {
  83 + weekdays.add(false);
  84 + }
  85 + }
  86 + } else { // 一个一个字符分隔
  87 + for (int i = 0; i < scheduleRule1Flat.getFbgs().length(); i++) {
  88 + if ("1".equals(scheduleRule1Flat.getFbgs().substring(i, i + 1))) {
  89 + weekdays.add(true);
  90 + } else {
  91 + weekdays.add(false);
  92 + }
  93 + }
  94 +
82 95 }
83 96 }
84 97  
... ... @@ -174,4 +187,12 @@ public class ScheduleRule_input {
174 187 public void setsType(ScheduleRule_Type sType) {
175 188 this.sType = sType;
176 189 }
  190 +
  191 + public Integer getFbtype() {
  192 + return fbtype;
  193 + }
  194 +
  195 + public void setFbtype(Integer fbtype) {
  196 + this.fbtype = fbtype;
  197 + }
177 198 }
... ...
src/main/resources/rules/shiftloop_fb_2.drl
... ... @@ -15,6 +15,8 @@ import com.bsth.service.schedule.rules.shiftloop.ScheduleResults_output;
15 15  
16 16 import com.bsth.entity.schedule.temp.SchedulePlanRuleResult;
17 17  
  18 +import com.bsth.entity.schedule.SchedulePlan;
  19 +
18 20 import com.bsth.service.schedule.rules.ScheduleRuleService;
19 21  
20 22 import org.slf4j.Logger;
... ... @@ -37,6 +39,10 @@ declare Calcu_days_result_pre
37 39 calcu_index_lp : Integer // 计算之后路牌的起始索引
38 40 calcu_index_ry : Integer // 计算之后人员的起始索引
39 41  
  42 + fbtype: Integer // 翻班type,0:时刻表type 1:翻班格式type
  43 + fbweeks: List // 翻班格式,如:1111001111001
  44 + fbgs_index: Integer // 翻班格式起始索引(从0开始)
  45 +
40 46 // 1、第一部分循环需要用到的数据(当开始日期大于启用日期的时候才有)
41 47 calcu_start_date_1: DateTime // 第一部分开始计算日期
42 48 calcu_end_date_1: DateTime // 第一部分结束计算日期
... ... @@ -82,6 +88,11 @@ rule &quot;calcu_days_1_&quot;
82 88 cdrp.setCalcu_start_date_2($fromDate);
83 89 cdrp.setCalcu_end_date_2($toDate);
84 90  
  91 + // 翻班相关
  92 + cdrp.setFbtype($sri.getFbtype());
  93 + cdrp.setFbgs_index(0);
  94 + cdrp.setFbweeks($sri.getWeekdays());
  95 +
85 96 /**
86 97 * 规则md5值(不使用id判定,使用md5判定)
87 98 * 使用,启用日期,路牌范围,结合生成md5编码
... ... @@ -132,6 +143,11 @@ rule &quot;calcu_days_2_&quot;
132 143 cdrp.setCalcu_start_date_2($qyrq);
133 144 cdrp.setCalcu_end_date_2($toDate);
134 145  
  146 + // 翻班相关
  147 + cdrp.setFbtype($sri.getFbtype());
  148 + cdrp.setFbgs_index(0);
  149 + cdrp.setFbweeks($sri.getWeekdays());
  150 +
135 151 /**
136 152 * 规则md5值(不使用id判定,使用md5判定)
137 153 * 使用,启用日期,路牌范围,结合生成md5编码
... ... @@ -249,63 +265,279 @@ end
249 265  
250 266  
251 267 //------------------------- 第二阶段、计算规则准备数据2(第一组循环) ----------------------------//
252   -rule "Calcu_loop1_1_" // 路牌在时刻表中存在,就翻
  268 +
  269 +function void calcu_loop1_fb(Calcu_days_result_pre $cdrp, ScheduleRule_input $sri) {
  270 + Integer $lpindex = $cdrp.getCalcu_index_lp();
  271 + Integer $lprangesize = $sri.getGuideboardIds().size();
  272 + Integer $ryindex = $cdrp.getCalcu_index_ry();
  273 + Integer $ryrangesize = $sri.getEmployeeConfigIds().size();
  274 + Integer $fbindex = $cdrp.getFbgs_index();
  275 + Integer $fbfangesize = $sri.getWeekdays().size();
  276 + DateTime $csd1 = $cdrp.getCalcu_start_date_1();
  277 + String $ruleId = $cdrp.getRuleId();
  278 +
  279 + $cdrp.setCalcu_index_lp(($lpindex + 1) % $lprangesize);
  280 + $cdrp.setCalcu_index_ry(($ryindex + 1) % $ryrangesize);
  281 +
  282 + $cdrp.setFbgs_index(($fbindex + 1) % $fbfangesize);
  283 + $cdrp.setCalcu_start_date_1($csd1.plusDays(1));
  284 +
  285 +// log.info("calcu_loop1_fb ruleId={}, calcu_index_lp/ry={}/{}",
  286 +// $ruleId, $cdrp.getCalcu_index_lp(), $cdrp.getCalcu_index_ry());
  287 +}
  288 +function void calcu_loop1_not_fb(Calcu_days_result_pre $cdrp, ScheduleRule_input $sri) {
  289 + DateTime $csd1 = $cdrp.getCalcu_start_date_1();
  290 + Integer $fbindex = $cdrp.getFbgs_index();
  291 + Integer $fbfangesize = $sri.getWeekdays().size();
  292 +
  293 + $cdrp.setFbgs_index(($fbindex + 1) % $fbfangesize);
  294 + $cdrp.setCalcu_start_date_1($csd1.plusDays(1));
  295 +
  296 +// log.info("calcu_loop1_not_fb ruleId={}, calcu_index_lp/ry={}/{}",
  297 +// $cdrp.getRuleId(), $cdrp.getCalcu_index_lp(), $cdrp.getCalcu_index_ry());
  298 +}
  299 +
  300 +
  301 +rule "Calcu_loop1_fbtype_with_0_" // 翻班模式为 type=1 使用翻班格式翻,当天翻班格式是false,就跳过
  302 + salience 900
  303 + when
  304 + $cdrp: Calcu_days_result_pre(
  305 + calcu_start_date_1.isBefore(calcu_end_date_1),
  306 + $ruleId: ruleId,
  307 + fbtype == "1",
  308 + $fbindex : fbgs_index
  309 + )
  310 + $sri: ScheduleRule_input(
  311 + ruleId == $ruleId,
  312 + weekdays[$fbindex] == false
  313 + )
  314 + then
  315 + calcu_loop1_not_fb($cdrp, $sri);
  316 + update($cdrp);
  317 +end
  318 +
  319 +rule "Calcu_loop1_fbtype_with_1_lp_" // 翻班模式为 type=1 使用翻班格式翻,当天翻班格式是true,并且当天时刻表里存在指定路牌,就翻
253 320 salience 900
254 321 when
255 322 $cdrp: Calcu_days_result_pre(
256 323 calcu_start_date_1.isBefore(calcu_end_date_1),
257 324 $csd1: calcu_start_date_1,
258   - $ced1: calcu_end_date_1,
259 325 $ruleId: ruleId,
  326 + fbtype == "1",
260 327 $lpindex: calcu_index_lp,
261   - $ryindex: calcu_index_ry
  328 + $fbindex : fbgs_index
262 329 )
263 330 $sri: ScheduleRule_input(
264 331 ruleId == $ruleId,
265 332 $gids: guideboardIds,
266   - $lprangesize : guideboardIds.size(),
267   - $ryrangesize: employeeConfigIds.size()
  333 + weekdays[$fbindex] == true
268 334 )
269 335 $liro: LpInfoResult_output(
270 336 dateTime.isEqual($csd1),
271   - $gids.get($lpindex) == lpId,
272   - $lpId: lpId
  337 + $gids[$lpindex] == lpId
273 338 )
274 339 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));
  340 + calcu_loop1_fb($cdrp, $sri);
  341 + update($cdrp);
278 342  
279   -// log.info("Calcu_loop1_1_ ruleId={}, calcu_index_lp/ry={}/{}",
280   -// $ruleId, $cdrp.getCalcu_index_lp(), $cdrp.getCalcu_index_ry());
  343 +end
281 344  
  345 +rule "Calcu_loop1_fbtype_with_1_no_lp_" // 翻班模式为 type=1 使用翻班格式翻,当天翻班格式是true,并且当天时刻表里不存在指定路牌,就跳过
  346 + salience 900
  347 + when
  348 + $cdrp: Calcu_days_result_pre(
  349 + calcu_start_date_1.isBefore(calcu_end_date_1),
  350 + $csd1: calcu_start_date_1,
  351 + $ruleId: ruleId,
  352 + fbtype == "1",
  353 + $fbindex : fbgs_index
  354 + )
  355 + $sri: ScheduleRule_input(
  356 + ruleId == $ruleId,
  357 + weekdays[$fbindex] == true
  358 + )
  359 + then
  360 + calcu_loop1_not_fb($cdrp, $sri);
282 361 update($cdrp);
283 362 end
284 363  
285   -rule "Calcu_loop1_2_" // 路牌在时刻表中不存在,就不翻
  364 +
  365 +rule "Calcu_loop1_timetabletype_with_lp_" // 翻班模式为 type=0 使用时刻表格式翻,路牌在时刻表中存在,就翻
286 366 salience 900
287 367 when
288 368 $cdrp: Calcu_days_result_pre(
289 369 calcu_start_date_1.isBefore(calcu_end_date_1),
290 370 $csd1: calcu_start_date_1,
291   - $ced1: calcu_end_date_1,
292   - $ruleId: ruleId
  371 + $ruleId: ruleId,
  372 + fbtype == "0",
  373 + $lpindex: calcu_index_lp
293 374 )
294 375 $sri: ScheduleRule_input(
295 376 ruleId == $ruleId,
296   - $rangesize : guideboardIds.size()
  377 + $gids: guideboardIds
  378 + )
  379 + $liro: LpInfoResult_output(
  380 + dateTime.isEqual($csd1),
  381 + $gids[$lpindex] == lpId
297 382 )
298 383 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());
  384 + calcu_loop1_fb($cdrp, $sri);
  385 + update($cdrp);
  386 +end
303 387  
  388 +rule "Calcu_loop1_timetabletype_with_no_lp_" // 翻班模式为 type=0 使用时刻表格式翻,路牌在时刻表中不存在,就跳过
  389 + salience 900
  390 + when
  391 + $cdrp: Calcu_days_result_pre(
  392 + calcu_start_date_1.isBefore(calcu_end_date_1),
  393 + $csd1: calcu_start_date_1,
  394 + $ruleId: ruleId,
  395 + fbtype == "0"
  396 + )
  397 + $sri: ScheduleRule_input(
  398 + ruleId == $ruleId
  399 + )
  400 + then
  401 + calcu_loop1_not_fb($cdrp, $sri);
304 402 update($cdrp);
305 403 end
306 404  
307 405 //------------------------- 第三阶段、计算规则准备数据2(第二组循环) ----------------------------//
308   -rule "Calcu_loop2_1_" // 路牌在时刻表中存在,就翻
  406 +
  407 +function void calcu_loop2_fb(
  408 + SchedulePlan $sp,
  409 + Calcu_days_result_pre $cdrp,
  410 + ScheduleRule_input $sri,
  411 + LpInfoResult_output $liro,
  412 + ScheduleResults_output rs,
  413 + Logger log) {
  414 + String $ruleId = $cdrp.getRuleId();
  415 + DateTime $csd2 = $cdrp.getCalcu_start_date_2();
  416 + DateTime $ced2 = $cdrp.getCalcu_end_date_2();
  417 + Integer $lpindex = $cdrp.getCalcu_index_lp();
  418 + List $gids = $sri.getGuideboardIds();
  419 + Integer $lprangesize = $sri.getGuideboardIds().size();
  420 + Integer $ryindex = $cdrp.getCalcu_index_ry();
  421 + List $eids = $sri.getEmployeeConfigIds();
  422 + Integer $ryrangesize = $sri.getEmployeeConfigIds().size();
  423 + Integer $fbindex = $cdrp.getFbgs_index();
  424 + Integer $fbfangesize = $sri.getWeekdays().size();
  425 + String $cid = $sri.getCarConfigId();
  426 + String $xlid = $sri.getXlId();
  427 +
  428 + com.bsth.entity.schedule.rule.ScheduleRule1Flat $srf = $sri.getSelf();
  429 +
  430 + String $ttinfoId = $liro.getTtInfoId();
  431 + String $ttinfoName = $liro.getTtInfoName();
  432 +
  433 + ScheduleResult_output ro = new ScheduleResult_output();
  434 + ro.setRuleId($ruleId);
  435 + ro.setSd($csd2);
  436 + ro.setGuideboardId(String.valueOf($gids.get($lpindex)));
  437 + ro.setEmployeeConfigId(String.valueOf($eids.get($ryindex)));
  438 + ro.setCarConfigId($cid);
  439 + ro.setXlId($xlid);
  440 +
  441 + // 类型
  442 + ro.setsType($sri.getsType());
  443 +
  444 + rs.getResults().add(ro);
  445 +
  446 +// log.info("gogoogogogogo");
  447 +
  448 + $cdrp.setCalcu_index_lp(($lpindex + 1) % $lprangesize);
  449 + $cdrp.setCalcu_index_ry(($ryindex + 1) % $ryrangesize);
  450 +
  451 + $cdrp.setFbgs_index(($fbindex + 1) % $fbfangesize);
  452 + $cdrp.setCalcu_start_date_2($csd2.plusDays(1));
  453 +
  454 + if ($sri.getsType() == ScheduleRule_Type.NORMAL) {
  455 + // 保存排班规则循环结果 --> SchedulePlanRuleResult
  456 + SchedulePlanRuleResult schedulePlanRuleResult = new SchedulePlanRuleResult($sp);
  457 +// schedulePlanRuleResult.setXlId(String.valueOf($srf.getXl().getId()));
  458 + schedulePlanRuleResult.setXlId($srf.getXl().getId());
  459 + schedulePlanRuleResult.setXlName($srf.getXl().getName());
  460 + schedulePlanRuleResult.setRuleId($ruleId);
  461 + schedulePlanRuleResult.setCcId($cid);
  462 + schedulePlanRuleResult.setCcZbh($srf.getCarConfigInfo().getCl().getInsideCode());
  463 + schedulePlanRuleResult.setGids($srf.getLpIds()); // 参与md5计算
  464 + schedulePlanRuleResult.setGnames($srf.getLpNames());
  465 + schedulePlanRuleResult.setGidindex(String.valueOf($lpindex));
  466 + schedulePlanRuleResult.setEcids($srf.getRyConfigIds());
  467 + schedulePlanRuleResult.setEcdbbms($srf.getRyDbbms());
  468 + schedulePlanRuleResult.setEcindex(String.valueOf($ryindex));
  469 + schedulePlanRuleResult.setScheduleDate($csd2.toDate());
  470 + schedulePlanRuleResult.setTtinfoId($ttinfoId);
  471 + schedulePlanRuleResult.setTtinfoName($ttinfoName);
  472 + schedulePlanRuleResult.setQyrq($sri.getQyrq().toDate()); // 参与md5计算
  473 + schedulePlanRuleResult.setOrigingidindex(String.valueOf($sri.getSelf().getLpStart())); // 参与md5计算
  474 +
  475 + rs.getSchedulePlanRuleResults().add(schedulePlanRuleResult);
  476 + }
  477 +
  478 +
  479 +
  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);
  482 +
  483 +}
  484 +
  485 +function void calcu_loop2_not_fb(
  486 + Calcu_days_result_pre $cdrp,
  487 + ScheduleRule_input $sri,
  488 + ScheduleResults_output rs) {
  489 +
  490 + String $ruleId = $cdrp.getRuleId();
  491 + DateTime $csd2 = $cdrp.getCalcu_start_date_2();
  492 + Integer $lpindex = $cdrp.getCalcu_index_lp();
  493 + List $gids = $sri.getGuideboardIds();
  494 + Integer $ryindex = $cdrp.getCalcu_index_ry();
  495 + List $eids = $sri.getEmployeeConfigIds();
  496 + Integer $fbindex = $cdrp.getFbgs_index();
  497 + Integer $fbfangesize = $sri.getWeekdays().size();
  498 + String $cid = $sri.getCarConfigId();
  499 + String $xlid = $sri.getXlId();
  500 +
  501 + ScheduleResult_output ro = new ScheduleResult_output();
  502 + ro.setRuleId($ruleId);
  503 + ro.setSd($csd2);
  504 +// ro.setGuideboardId(String.valueOf($gids.get($lpindex)));
  505 + ro.setGuideboardId("not_fb_lp"); // 不翻班,路牌id用假的,后面会过滤
  506 + ro.setEmployeeConfigId(String.valueOf($eids.get($ryindex)));
  507 + ro.setCarConfigId($cid);
  508 + ro.setXlId($xlid);
  509 +
  510 + // 类型
  511 + ro.setsType($sri.getsType());
  512 +
  513 + rs.getResults().add(ro);
  514 +
  515 + $cdrp.setFbgs_index(($fbindex + 1) % $fbfangesize);
  516 + $cdrp.setCalcu_start_date_2($csd2.plusDays(1));
  517 +}
  518 +
  519 +rule "Calcu_loop2_fbtype_with_0_" // 翻班模式为 type=1 使用翻班格式翻,当天翻班格式是false,就跳过
  520 + salience 800
  521 + when
  522 + ScheduleCalcuParam_input($sp: schedulePlan, $xlid: xlId)
  523 + $cdrp: Calcu_days_result_pre(
  524 + calcu_start_date_1.isEqual(calcu_end_date_1),
  525 + calcu_start_date_2.isBefore(calcu_end_date_2) || calcu_start_date_2.isEqual(calcu_end_date_2),
  526 + $ruleId: ruleId,
  527 + fbtype == "1",
  528 + $fbindex : fbgs_index
  529 + )
  530 + $sri: ScheduleRule_input(
  531 + ruleId == $ruleId,
  532 + weekdays[$fbindex] == false
  533 + )
  534 + then
  535 + calcu_loop2_not_fb($cdrp, $sri, scheduleResult);
  536 + update($cdrp);
  537 +
  538 +end
  539 +
  540 +rule "Calcu_loop2_fbtype_with_1_lp_" // 翻班模式为 type=1 使用翻班格式翻,当天翻班格式是true,并且当天时刻表里存在指定路牌,就翻
309 541 salience 800
310 542 when
311 543 ScheduleCalcuParam_input($sp: schedulePlan, $xlid: xlId)
... ... @@ -313,80 +545,47 @@ rule &quot;Calcu_loop2_1_&quot; // 路牌在时刻表中存在,就翻
313 545 calcu_start_date_1.isEqual(calcu_end_date_1),
314 546 calcu_start_date_2.isBefore(calcu_end_date_2) || calcu_start_date_2.isEqual(calcu_end_date_2),
315 547 $csd2: calcu_start_date_2,
316   - $ced2: calcu_end_date_2,
317 548 $ruleId: ruleId,
  549 + fbtype == "1",
318 550 $lpindex: calcu_index_lp,
319   - $ryindex: calcu_index_ry
  551 + $fbindex : fbgs_index
320 552 )
321 553 $sri: ScheduleRule_input(
322 554 ruleId == $ruleId,
323   - $cid: carConfigId,
324 555 $gids: guideboardIds,
325   - $eids: employeeConfigIds,
326   - $lprangesize : guideboardIds.size(),
327   - $ryrangesize: employeeConfigIds.size(),
328   - $srf: self
  556 + weekdays[$fbindex] == true
329 557 )
330 558 $liro: LpInfoResult_output(
331 559 dateTime.isEqual($csd2),
332   - $gids.get($lpindex) == lpId,
333   - $lpId: lpId,
334   - $ttinfoId: ttInfoId,
335   - $ttinfoName: ttInfoName
  560 + $gids[$lpindex] == lpId
336 561 )
337 562 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);
  563 + calcu_loop2_fb($sp, $cdrp, $sri, $liro, scheduleResult, log);
  564 + update($cdrp);
  565 +end
385 566  
  567 +rule "Calcu_loop2_fbtype_with_1_no_lp_" // 翻班模式为 type=1 使用翻班格式翻,当天翻班格式是true,并且当天时刻表里不存在指定路牌,就跳过
  568 + salience 800
  569 + when
  570 + ScheduleCalcuParam_input($sp: schedulePlan, $xlid: xlId)
  571 + $cdrp: Calcu_days_result_pre(
  572 + calcu_start_date_1.isEqual(calcu_end_date_1),
  573 + calcu_start_date_2.isBefore(calcu_end_date_2) || calcu_start_date_2.isEqual(calcu_end_date_2),
  574 + $ruleId: ruleId,
  575 + fbtype == "1",
  576 + $fbindex : fbgs_index
  577 + )
  578 + $sri: ScheduleRule_input(
  579 + ruleId == $ruleId,
  580 + weekdays[$fbindex] == true
  581 + )
  582 + then
  583 + calcu_loop2_not_fb($cdrp, $sri, scheduleResult);
386 584 update($cdrp);
  585 +
387 586 end
388 587  
389   -rule "Calcu_loop2_2_" // 路牌在时刻表中不存在,就不
  588 +rule "Calcu_loop2_timetabletype_with_lp_" // 翻班模式为 type=0 使用时刻表格式翻,路牌在时刻表中存在,就
390 589 salience 800
391 590 when
392 591 ScheduleCalcuParam_input($sp: schedulePlan, $xlid: xlId)
... ... @@ -394,54 +593,40 @@ rule &quot;Calcu_loop2_2_&quot; // 路牌在时刻表中不存在,就不翻
394 593 calcu_start_date_1.isEqual(calcu_end_date_1),
395 594 calcu_start_date_2.isBefore(calcu_end_date_2) || calcu_start_date_2.isEqual(calcu_end_date_2),
396 595 $csd2: calcu_start_date_2,
397   - $ced2: calcu_end_date_2,
398 596 $ruleId: ruleId,
  597 + fbtype == "0",
399 598 $lpindex: calcu_index_lp,
400   - $ryindex: calcu_index_ry
  599 + $fbindex : fbgs_index
401 600 )
402 601 $sri: ScheduleRule_input(
403 602 ruleId == $ruleId,
404   - $cid: carConfigId,
405   - $gids: guideboardIds,
406   - $eids: employeeConfigIds,
407   - $srf: self
  603 + $gids: guideboardIds
  604 + )
  605 + $liro: LpInfoResult_output(
  606 + dateTime.isEqual($csd2),
  607 + $gids[$lpindex] == lpId
408 608 )
409 609 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);
  610 + calcu_loop2_fb($sp, $cdrp, $sri, $liro, scheduleResult, log);
  611 + update($cdrp);
  612 +
  613 +end
444 614  
  615 +rule "Calcu_loop2_timetabletype_with_no_lp_" // 翻班模式为 type=0 使用时刻表格式翻,路牌在时刻表中不存在,就跳过
  616 + salience 800
  617 + when
  618 + ScheduleCalcuParam_input($sp: schedulePlan, $xlid: xlId)
  619 + $cdrp: Calcu_days_result_pre(
  620 + calcu_start_date_1.isEqual(calcu_end_date_1),
  621 + calcu_start_date_2.isBefore(calcu_end_date_2) || calcu_start_date_2.isEqual(calcu_end_date_2),
  622 + $ruleId: ruleId,
  623 + fbtype == "0"
  624 + )
  625 + $sri: ScheduleRule_input(
  626 + ruleId == $ruleId
  627 + )
  628 + then
  629 + calcu_loop2_not_fb($cdrp, $sri, scheduleResult);
445 630 update($cdrp);
446 631 end
447 632  
... ... @@ -450,3 +635,5 @@ end
450 635  
451 636  
452 637  
  638 +
  639 +
... ...
src/main/resources/static/pages/base/timesmodel/add.html
... ... @@ -134,6 +134,9 @@
134 134 <label >
135 135 <input type="radio" class="icheck" name="baseRes" value=1 checked> 班型/人次/车辆
136 136 </label>
  137 + <label>
  138 + <input type="radio" class="icheck" name="baseRes" value=2> 发车间隔分析
  139 + </label>
137 140 <label>
138 141 <input type="radio" class="icheck" name="baseRes" value=0> 客流大数据分析
139 142 </label>
... ...
src/main/resources/static/pages/base/timesmodel/js/add-form-wizard.js
... ... @@ -322,6 +322,8 @@ var SKBFormWizard = function() {
322 322 tempName = 'carnum_temp';
323 323 else if(n==1)
324 324 tempName = 'bctype_temp';
  325 + else if (n==2)
  326 + tempName = 'fcjx_temp';
325 327 // 2、获参数详情模版html内容.
326 328 $.get('/pages/base/timesmodel/tepms/'+ tempName + '.html', function(html){
327 329 $('#tab3').append(html);
... ... @@ -381,7 +383,12 @@ var SKBFormWizard = function() {
381 383 }else if(n==1) {
382 384 // 返回参数详情模版.
383 385 return cb && cb ({'forminput':template(tempName,{map:map}),'datadisplay': template(tempName +'config',{map:null})});
384   - }
  386 + }else if (n==2) {
  387 + return cb && cb({
  388 + 'forminput': template(tempName, {map: map}),
  389 + 'datadisplay': template(tempName + '_config', {map: null})
  390 + });
  391 + }
385 392 });
386 393 }
387 394  
... ... @@ -829,34 +836,105 @@ var SKBFormWizard = function() {
829 836 getHtmlTemp(baseRes,r.content[0],lineId,krl,function(htlMap) {
830 837 $('#tab3').html(htlMap.forminput);
831 838 $('#tab4').html(htlMap.datadisplay);
832   - $('#linePlayTypeSelect').val(r.content[0].line.linePlayType);
833   - if(baseRes==1)
834   - ComponentsBootstrapTagsinput.init();// 初始化班型人次Input Tag.
835   - // 日期控件
836   - $('#qdzsbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站首班时间
837   - $('#qdzmbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站末班时间
838   - $('#zdzsbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 终点站首班时间
839   - $('#zdzmbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 终点站末班时间
840   - $('#zgfkssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 早高峰开始时间
841   - $('#zgfjssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 早高峰结束时间
842   - $('#wgfkssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 晚高峰开始时间
843   - $('#wgfjssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 晚高峰结束时间
844   - // 初始化停车场下拉框.
845   - gettccInfo(function(cd) {
846   - var options = '<option value="">请选择...</option><optgroup label="停车场">';
847   - var $_len = cd.length;
848   - if($_len>0) {
849   - $.each(cd, function(i, d){
850   - options += '<option value="'+d.parkCode+'">'+d.parkName+'</option>';
851   - });
852   -
853   - }
854   - options += '</optgroup>';
855   - $('#carParkSelect').html(options).select2();
856   - $('#carParkSelect').select2("val",r.content[0].carPark);
857   - // 关闭弹出加载层
858   - layer.close(i);
859   - });
  839 +
  840 + if (baseRes == 0) { // 客流大数据分析
  841 + $('#linePlayTypeSelect').val(r.content[0].line.linePlayType);
  842 + // 日期控件
  843 + $('#qdzsbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站首班时间
  844 + $('#qdzmbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站末班时间
  845 + $('#zdzsbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 终点站首班时间
  846 + $('#zdzmbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 终点站末班时间
  847 + $('#zgfkssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 早高峰开始时间
  848 + $('#zgfjssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 早高峰结束时间
  849 + $('#wgfkssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 晚高峰开始时间
  850 + $('#wgfjssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 晚高峰结束时间
  851 + // 初始化停车场下拉框.
  852 + gettccInfo(function(cd) {
  853 + var options = '<option value="">请选择...</option><optgroup label="停车场">';
  854 + var $_len = cd.length;
  855 + if($_len>0) {
  856 + $.each(cd, function(i, d){
  857 + options += '<option value="'+d.parkCode+'">'+d.parkName+'</option>';
  858 + });
  859 +
  860 + }
  861 + options += '</optgroup>';
  862 + $('#carParkSelect').html(options).select2();
  863 + $('#carParkSelect').select2("val",r.content[0].carPark);
  864 + // 关闭弹出加载层
  865 + layer.close(i);
  866 + });
  867 +
  868 + } else if (baseRes == 1) { // 班次/人次/车辆
  869 + $('#linePlayTypeSelect').val(r.content[0].line.linePlayType);
  870 + ComponentsBootstrapTagsinput.init();// 初始化班型人次Input Tag.
  871 + // 日期控件
  872 + $('#qdzsbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站首班时间
  873 + $('#qdzmbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 起始站末班时间
  874 + $('#zdzsbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 终点站首班时间
  875 + $('#zdzmbsjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 终点站末班时间
  876 + $('#zgfkssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 早高峰开始时间
  877 + $('#zgfjssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 早高峰结束时间
  878 + $('#wgfkssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 晚高峰开始时间
  879 + $('#wgfjssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 晚高峰结束时间
  880 + // 初始化停车场下拉框.
  881 + gettccInfo(function(cd) {
  882 + var options = '<option value="">请选择...</option><optgroup label="停车场">';
  883 + var $_len = cd.length;
  884 + if($_len>0) {
  885 + $.each(cd, function(i, d){
  886 + options += '<option value="'+d.parkCode+'">'+d.parkName+'</option>';
  887 + });
  888 +
  889 + }
  890 + options += '</optgroup>';
  891 + $('#carParkSelect').html(options).select2();
  892 + $('#carParkSelect').select2("val",r.content[0].carPark);
  893 + // 关闭弹出加载层
  894 + layer.close(i);
  895 + });
  896 +
  897 + } else if (baseRes == 2) { // 发车间隔分析
  898 + // 上下行首末班日期控件
  899 + $('#startStationFirstTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  900 + $('#startStationEndTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  901 + $('#endStationFirstTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  902 + $('#endStationEndTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  903 +
  904 + // 早高峰晚高峰日期控件
  905 + $('#earlyStartTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  906 + $('#earlyEndTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  907 + $('#lateStartTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  908 + $('#lateEndTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  909 +
  910 + // 线路规划类型日期控件
  911 + $('#linePlayType_id').val(r.content[0].line.linePlayType);
  912 +
  913 + // 停车场下拉框控件
  914 + gettccInfo(function(cd) {
  915 + var options = '<option value="">请选择...</option><optgroup label="停车场">';
  916 + var $_len = cd.length;
  917 + if($_len>0) {
  918 + $.each(cd, function(i, d){
  919 + options += '<option value="'+d.parkCode+'">'+d.parkName+'</option>';
  920 + });
  921 +
  922 + }
  923 + options += '</optgroup>';
  924 + $('#carPark_id').html(options).select2();
  925 + $('#carPark_id').select2("val",r.content[0].carPark);
  926 + // 关闭弹出加载层
  927 + layer.close(i);
  928 + });
  929 +
  930 + // 发车间隙选择控件
  931 + ComponentsBootstrapTagsinput.init_fcjx();
  932 +
  933 + // TODO:发车间隔分析参数设置
  934 +
  935 + layer.close(i);
  936 + }
  937 +
860 938 });
861 939 });
862 940 }
... ...
src/main/resources/static/pages/base/timesmodel/js/base-fun.js
... ... @@ -794,44 +794,44 @@ var BaseFun = function() {
794 794  
795 795 // 第一步 根据表单中的参数得到所有路牌下的班次数[从各路牌下的第一个班次发车时间 到 营运结束时间点并且是连续的班次数].
796 796 var allLMapBc = baseF.GetByArgusInitAllLpDownedBcCollections(saa , cara , map , seMap , dataMap);
797   - //return {'json':allLMapBc,'bxrcgs':null};
  797 + return {'json':allLMapBc,'bxrcgs':null};
798 798  
799   - // 第二步 纵向调整
800   - baseF.evenStartDepartSpace(allLMapBc , dataMap);
801   - //return {'json':allLMapBc,'bxrcgs':null};
802   -
803   - // 第三步 剔除首末班车以外的班次,并确认首末班车.
804   - var markArray = baseF.markFirstAndLastBusAlsoDietNotInRangeBc(allLMapBc , dataMap);
805   - //return {'json':markArray,'bxrcgs':null};
806   - // 第四步 横向调整
807   - baseF.resizeByPitStopTime(cara , markArray , dataMap);
808   - //return {'json':markArray,'bxrcgs':null};
809   - /**
810   - * 第五步 把班型合理的分配到各个路牌上.
811   - *
812   - * 切割班型/人次/配车数 字符串 为 数组对象.
813   - *
814   - * 把班型分配到对应的具体路牌上.
815   - */
816   - // 切割班型/人次/配车数 字符串 为 数组对象.
817   - var list = baseF.getBxRcListCollection(map.bxrc);
818   - // 把班型分配到对应的具体路牌上.
819   - baseF.bxAlloTotLp(list,cara);
820   - ////return {'json':markArray,'bxrcgs':null};
  799 + //// 第二步 纵向调整
  800 + //baseF.evenStartDepartSpace(allLMapBc , dataMap);
  801 + ////return {'json':allLMapBc,'bxrcgs':null};
821 802 //
822   - //
823   - // 第六步 抽车来满足工时.
824   - var tempA = baseF.abstractCar(list , markArray , cara , saa , dataMap , map);
825   - //return {'json':tempA,'bxrcgs':null};
826   - // 第七步 确定吃饭时间.
827   - if (map.cfdd) { // NEW,没有选择吃饭地点,不设定吃饭班次
828   - baseF.markeEatTime(list , tempA , cara , saa , dataMap ,map);
829   - }
830   - baseF.resizeByPitStopTime(cara , tempA , dataMap);
831   - baseF.updfcno01(tempA,0);
832   - //return {'json':tempA,'bxrcgs':null};
833   - // 确定进出场、早晚例保时间.并返回班次数组集合
834   - return {'json':baseF.addInOutFieldBc(cara,tempA,dataMap,saa,map),'bxrcgs':null};
  803 + //// 第三步 剔除首末班车以外的班次,并确认首末班车.
  804 + //var markArray = baseF.markFirstAndLastBusAlsoDietNotInRangeBc(allLMapBc , dataMap);
  805 + ////return {'json':markArray,'bxrcgs':null};
  806 + //// 第四步 横向调整
  807 + //baseF.resizeByPitStopTime(cara , markArray , dataMap);
  808 + ////return {'json':markArray,'bxrcgs':null};
  809 + ///**
  810 + // * 第五步 把班型合理的分配到各个路牌上.
  811 + // *
  812 + // * 切割班型/人次/配车数 字符串 为 数组对象.
  813 + // *
  814 + // * 把班型分配到对应的具体路牌上.
  815 + // */
  816 + //// 切割班型/人次/配车数 字符串 为 数组对象.
  817 + //var list = baseF.getBxRcListCollection(map.bxrc);
  818 + //// 把班型分配到对应的具体路牌上.
  819 + //baseF.bxAlloTotLp(list,cara);
  820 + //////return {'json':markArray,'bxrcgs':null};
  821 + ////
  822 + ////
  823 + //// 第六步 抽车来满足工时.
  824 + //var tempA = baseF.abstractCar(list , markArray , cara , saa , dataMap , map);
  825 + ////return {'json':tempA,'bxrcgs':null};
  826 + //// 第七步 确定吃饭时间.
  827 + //if (map.cfdd) { // NEW,没有选择吃饭地点,不设定吃饭班次
  828 + // baseF.markeEatTime(list , tempA , cara , saa , dataMap ,map);
  829 + //}
  830 + //baseF.resizeByPitStopTime(cara , tempA , dataMap);
  831 + //baseF.updfcno01(tempA,0);
  832 + ////return {'json':tempA,'bxrcgs':null};
  833 + //// 确定进出场、早晚例保时间.并返回班次数组集合
  834 + //return {'json':baseF.addInOutFieldBc(cara,tempA,dataMap,saa,map),'bxrcgs':null};
835 835 },
836 836  
837 837 markeEatTime : function(list , markArray , cara , saa , dataMap ,map) {
... ...
src/main/resources/static/pages/base/timesmodel/js/gantt.js
... ... @@ -50,11 +50,16 @@
50 50 var CSMap = null,data = null;
51 51 if(map.baseRes== '0') {
52 52 CSMap = getMaxCarAndStopSpace0(map,seMap);
  53 + // 发车间隙
  54 + map.fcjx = CSMap.fcjx;
53 55 }else if(map.baseRes== '1') {
54 56 CSMap = getMaxCarAndStopSpace1(map);
55   - }
56   - // 发车间隙
57   - map.fcjx = CSMap.fcjx;
  57 + // 发车间隙
  58 + map.fcjx = CSMap.fcjx;
  59 + }else if (map.baseRes == '2') {
  60 + // TODO:之后可能有新的参数加入
  61 + }
  62 +
58 63 // 定义时间参数.
59 64 var stopAraay = getsj(map);
60 65 if(isNull(objD)) {
... ... @@ -66,7 +71,11 @@
66 71 // data = BaseFun.BXPplaceClassesTime(stopAraay,CSMap.maxCar,map,seMap,dataMap,getylp(CSMap.maxCar).lpNoA);
67 72 // data = BaseFun.BXPplaceClassesTime01(stopAraay,CSMap.maxCar,map,seMap,dataMap,getylp(CSMap.maxCar).lpNoA);
68 73 data = BaseFun.BXPplaceClassesTime02(stopAraay,CSMap.maxCar,map,seMap,dataMap);
69   - }
  74 + } else if (map.baseRes == '2') {
  75 + // TODO:绘制gantt图表
  76 + // TODO:var seDate = getksjssj(null,seMap.s); 关联参数必须设置
  77 + alert("TODO:gantt图表数据");
  78 + }
70 79  
71 80 }else {
72 81 var jsonA = JSON.parse(objD);
... ...
src/main/resources/static/pages/base/timesmodel/js/tagsinput.js
... ... @@ -78,10 +78,53 @@ var ComponentsBootstrapTagsinput = function() {
78 78 tag = false;
79 79 return tag;
80 80 }
81   - }
  81 + };
  82 +
  83 + var handelDemo3 = function() {
  84 + // 定义tags控件class
  85 + var elt = $('#fcjx_tagsinput');
  86 + elt.tagsinput({
  87 + tagClass: function(item) {
  88 + return 'label label-danger label-important';
  89 + },
  90 + itemValue: 'value',
  91 + itemText: 'text'
  92 + });
  93 +
  94 + // 初始化内部控件,时间控件
  95 + $('#fcjx_tagsinput_starttime').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  96 + $('#fcjx_tagsinput_endtime').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  97 +
  98 + $('#fcjx_tagsinput').on('beforeItemAdd', function(event) {
  99 + // TODO:这里可以做一些逻辑判定
  100 + });
  101 +
  102 + $('#fcjx_tagsinput_add').on('click', function(){
  103 + var starttime = $('#fcjx_tagsinput_starttime').val();
  104 + var endtime = $('#fcjx_tagsinput_endtime').val();
  105 + var fcjx = $('#fcjx_tagsinput_value').val();
  106 +
  107 + if (starttime && endtime && fcjx) {
  108 + // TODO:这里做一些逻辑判定
  109 +
  110 + elt.tagsinput('add', {
  111 + "value": starttime + '/' + endtime + '/' + fcjx,
  112 + "text": starttime + '/' + endtime + '/' + fcjx
  113 + });
  114 + $('#fcjx_tagsinput_starttime').val(null);
  115 + $('#fcjx_tagsinput_endtime').val(null);
  116 + $('#fcjx_tagsinput_value').val(null);
  117 + }
  118 + });
  119 +
  120 +
  121 + };
82 122 return {
83 123 init: function() {
84 124 handleDemo2();
  125 + },
  126 + init_fcjx: function() {
  127 + handelDemo3();
85 128 }
86 129 };
87 130 }();
88 131 \ No newline at end of file
... ...
src/main/resources/static/pages/base/timesmodel/tepms/fcjx_temp.html 0 → 100644
  1 +<script type="text/html" id = "fcjx_temp">
  2 +
  3 + <div class="form-group">
  4 + <div class="col-md-6">
  5 + <label class="control-label col-md-5">
  6 + <span class="required"> * </span> 上行首班时间 :
  7 + </label>
  8 + <div class="col-md-5">
  9 + <input type="text" class="form-control" name="startStationFirstTime" value="{{map.line.startStationFirstTime}}" id="startStationFirstTime_id"
  10 + placeholder="请输入起始站首班时间">
  11 + </div>
  12 + </div>
  13 + <div class="col-md-6">
  14 + <label class="control-label col-md-5">
  15 + <span class="required"> * </span> 上行末班时间 :
  16 + </label>
  17 + <div class="col-md-5">
  18 + <input type="text" class="form-control" name="startStationEndTime" value="{{map.line.startStationEndTime}}" id="startStationEndTime_id"
  19 + placeholder="请输入起始站末班时间">
  20 + </div>
  21 + </div>
  22 + </div>
  23 +
  24 + <div class="form-group">
  25 + <div class="col-md-6">
  26 + <label class="control-label col-md-5">
  27 + <span class="required"> * </span> 下行首班时间 :
  28 + </label>
  29 + <div class="col-md-5">
  30 + <input type="text" class="form-control" name="endStationFirstTime" value="{{map.line.endStationFirstTime}}" id="endStationFirstTime_id"
  31 + placeholder="请输入终点站首班时间">
  32 + </div>
  33 + </div>
  34 + <div class="col-md-6">
  35 + <label class="control-label col-md-5">
  36 + <span class="required"> * </span> 下行末班时间 :
  37 + </label>
  38 + <div class="col-md-5">
  39 + <input type="text" class="form-control" name="endStationEndTime" value="{{map.line.endStationEndTime}}" id="endStationEndTime_id"
  40 + placeholder="请输入终点站末班时间">
  41 + </div>
  42 + </div>
  43 + </div>
  44 +
  45 + <div class="form-group">
  46 + <div class="col-md-6">
  47 + <label class="control-label col-md-5">
  48 + <span class="required"> * </span> 早高峰开始时间 :
  49 + </label>
  50 + <div class="col-md-5">
  51 + <input type="text" class="form-control" name="earlyStartTime" value="{{map.earlyStartTime}}" id="earlyStartTime_id"
  52 + placeholder="请输入早高峰开始时间">
  53 + </div>
  54 + </div>
  55 + <div class="col-md-6">
  56 + <label class="control-label col-md-5">
  57 + <span class="required"> * </span> 早高峰结束时间 :
  58 + </label>
  59 + <div class="col-md-5">
  60 + <input type="text" class="form-control" name="earlyEndTime" value="{{map.earlyEndTime}}" id="earlyEndTime_id"
  61 + placeholder="请输入早高峰结束时间">
  62 + </div>
  63 + </div>
  64 + </div>
  65 +
  66 + <div class="form-group">
  67 + <div class="col-md-6">
  68 + <label class="control-label col-md-5">
  69 + <span class="required"> * </span> 晚高峰开始时间 :
  70 + </label>
  71 + <div class="col-md-5">
  72 + <input type="text" class="form-control" name="lateStartTime" value="{{map.lateStartTime}}" id="lateStartTime_id"
  73 + placeholder="请输入晚高峰开始时间">
  74 + </div>
  75 + </div>
  76 + <div class="col-md-6">
  77 + <label class="control-label col-md-5">
  78 + <span class="required"> * </span> 晚高峰结束时间 :
  79 + </label>
  80 + <div class="col-md-5">
  81 + <input type="text" class="form-control" name="lateEndTime" value="{{map.lateEndTime}}" id="lateEndTime_id"
  82 + placeholder="请输入晚高峰结束时间">
  83 + </div>
  84 + </div>
  85 + </div>
  86 +
  87 + <div class="form-group">
  88 + <div class="col-md-6">
  89 + <label class="control-label col-md-5">
  90 + <span class="required"> * </span> 线路规划类型  :
  91 + </label>
  92 + <div class="col-md-5">
  93 + <select name="linePlayType" class="form-control" id="linePlayType_id">
  94 + <option value="">-- 请选择线路类型 --</option>
  95 + <option value="0">双向</option>
  96 + <option value="1">环线</option>
  97 + </select>
  98 + </div>
  99 + </div>
  100 + <div class="col-md-6">
  101 + <label class="control-label col-md-5">吃饭地点    :</label>
  102 + <div class="col-md-5">
  103 + <select type="text" class="form-control" name="cfdd" id="cfdd_id">
  104 + <option value="">请选择...</option>
  105 + <option value="0">{{map.line.startStationName}}</option>
  106 + <option value="1">{{map.line.endStationName}}</option>
  107 + <option value="allYes">起终点站都可以</option>
  108 + </select>
  109 + </div>
  110 + </div>
  111 + </div>
  112 +
  113 + <div class="form-group">
  114 + <div class="col-md-6">
  115 + <label class="control-label col-md-5">早晚例行保养  :</label>
  116 + <div class="col-md-5">
  117 + <input type="text" class="form-control" name="lb" value="{{map.lb}}" id="lb_id"
  118 + placeholder="请输入早晚例行保养">
  119 + </div>
  120 + </div>
  121 + <div class="col-md-6">
  122 + <label class="control-label col-md-5">停车场     :</label>
  123 + <div class="col-md-5">
  124 + <select name="carPark" class="form-control" id="carPark_id" style="width:100%"></select>
  125 + </div>
  126 + </div>
  127 + </div>
  128 +
  129 + <div class="form-group">
  130 + <div class="col-md-6">
  131 + <label class="control-label col-md-5">工作餐午餐时间 :</label>
  132 + <div class="col-md-5">
  133 + <input type="text" class="form-control" name="workeLunch" value="{{map.workeLunch}}" id="workeLunch_id"
  134 + placeholder="请输入工作餐午餐时间">
  135 + </div>
  136 + </div>
  137 + <div class="col-md-6">
  138 + <label class="control-label col-md-5">工作餐晚餐时间 :</label>
  139 + <div class="col-md-5">
  140 + <input type="text" class="form-control" name="workeDinner" value="{{map.workeDinner}}" id="workeDinner_id"
  141 + placeholder="请输入工作餐晚餐时间">
  142 + </div>
  143 + </div>
  144 + </div>
  145 +
  146 + <div class="form-group">
  147 + <div class="col-md-6 ">
  148 + <label class="control-label col-md-5"><span class="required"> * </span>发车间隔时段 :</label>
  149 + <div class="col-md-5 tagsDiv">
  150 + <div class="row" style="margin-left: 15px;">
  151 + <input type="text" value="" name="fcjx" id="fcjx_tagsinput" style="display: none;">
  152 + </div>
  153 +
  154 + <div class="row" style="margin-top: 10px;">
  155 + <label class="control-label col-md-4">开始时间:</label>
  156 + <div class="col-md-8">
  157 + <input type="text" class="form-control" placeholder="时段开始时间" id="fcjx_tagsinput_starttime">
  158 + </div>
  159 + </div>
  160 +
  161 + <div class="row" style="margin-top: 10px;">
  162 + <label class="control-label col-md-4">结束时间:</label>
  163 + <div class="col-md-8">
  164 + <input type="text" class="form-control" placeholder="时段结束时间" id="fcjx_tagsinput_endtime">
  165 + </div>
  166 + </div>
  167 +
  168 + <div class="row" style="margin-top: 10px;">
  169 + <label class="control-label col-md-4">间隔值:</label>
  170 + <div class="col-md-8">
  171 + <input type="number" class="form-control" placeholder="间隔时间" id="fcjx_tagsinput_value" min="1">
  172 + </div>
  173 + </div>
  174 +
  175 + <div class="row" style="margin-top: 10px;margin-left: 116px;">
  176 + <a href="javascript:" class="btn red" id="fcjx_tagsinput_add">添加</a>
  177 + </div>
  178 + </div>
  179 + </div>
  180 + </div>
  181 +
  182 + <!-- 隐藏字段-时间 -->
  183 + <!-- 上下行行驶时间 -->
  184 + <input type="hidden" name="upTravelTime" value="{{map.upTravelTime}}" id="upTravelTime_id"/>
  185 + <input type="hidden" name="downTravelTime" value="{{map.downTravelTime}}" id="downTravelTime_id"/>
  186 + <!-- 早高峰/晚高峰上下行行驶时间 -->
  187 + <input type="hidden" name="earlyUpTime" value="{{map.earlyUpTime}}" id="earlyUpTime_id" />
  188 + <input type="hidden" name="earlyDownTime" value="{{map.earlyDownTime}}" id="earlyDownTime_id" />
  189 + <input type="hidden" name="lateUpTime" value="{{map.lateUpTime}}" id="lateUpTime_id"/>
  190 + <input type="hidden" name="lateDownTime" value="{{map.lateDownTime}}" id="lateDownTime_id"/>
  191 + <!-- 低谷上下行行驶时间 -->
  192 + <input type="hidden" name="troughUpTime" value="{{map.troughUpTime}}" id="troughUpTime_id"/>
  193 + <input type="hidden" name="troughDownTime" value="{{map.troughDownTime}}" id="troughDownTime_id"/>
  194 + <!-- 上下行进场出场时间 -->
  195 + <input type="hidden" name="upInTimer" value="{{map.upInTimer}}" id="upInTimer_id"/>
  196 + <input type="hidden" name="downInTimer" value="{{map.downInTimer}}" id="downInTimer_id"/>
  197 + <input type="hidden" name="upOutTimer" value="{{map.upOutTimer}}" id="upOutTimer_id"/>
  198 + <input type="hidden" name="downOutTimer" value="{{map.downOutTimer}}" id="downOutTimer_id"/>
  199 +
  200 + <!-- 隐藏字段-里程 -->
  201 + <!-- 上下行行驶里程 -->
  202 + <input type="hidden" name="upMileage" value="{{map.upMileage}}" id="upMileage_id"/>
  203 + <input type="hidden" name="downMileage" value="{{map.downMileage}}" id="downMileage_id"/>
  204 + <!-- 上下行进场出场里程 -->
  205 + <input type="hidden" name="upInMileage" value="{{map.upInMileage}}" id="upInMileage_id"/>
  206 + <input type="hidden" name="downInMileage" value="{{map.downInMileage}}" id="downInMileage_id"/>
  207 + <input type="hidden" name="upOutMileage" value="{{map.upOutMileage}}" id="upOutMileage_id"/>
  208 + <input type="hidden" name="downOutMileage" value="{{map.downOutMileage}}" id="downOutMileage_id"/>
  209 +
  210 +</script>
  211 +
  212 +<script type="text/html" id="fcjx_temp_config">
  213 + <h4 class="form-section"> 时刻表与线路名称 </h4>
  214 + <div class="form-group">
  215 + <div class="col-md-6">
  216 + <label class="control-label col-md-5"> 时刻表名称   : </label>
  217 + <div class="col-md-7">
  218 + <p class="form-control-static" data-display="skbName"> </p>
  219 + </div>
  220 + </div>
  221 + <div class="col-md-6">
  222 + <label class="control-label col-md-5"> 线路名称    :</label>
  223 + <div class="col-md-4">
  224 + <p class="form-control-static" data-display="lineName"> </p>
  225 + </div>
  226 + </div>
  227 + </div>
  228 + <h4 class="form-section"> 参数详情 </h4>
  229 +
  230 + <div class="form-group">
  231 + <div class="col-md-6">
  232 + <label class="control-label col-md-5">
  233 + <span class="required"> * </span> 上行首班时间 :
  234 + </label>
  235 + <div class="col-md-4">
  236 + <p class="form-control-static" data-display="startStationFirstTime"> </p>
  237 + </div>
  238 + </div>
  239 + <div class="col-md-6">
  240 + <label class="control-label col-md-5">
  241 + <span class="required"> * </span> 上行末班时间 :
  242 + </label>
  243 + <div class="col-md-4">
  244 + <p class="form-control-static" data-display="startStationEndTime"> </p>
  245 + </div>
  246 + </div>
  247 + </div>
  248 +
  249 + <div class="form-group">
  250 + <div class="col-md-6">
  251 + <label class="control-label col-md-5">
  252 + <span class="required"> * </span> 下行首班时间 :
  253 + </label>
  254 + <div class="col-md-4">
  255 + <p class="form-control-static" data-display="endStationFirstTime"> </p>
  256 + </div>
  257 + </div>
  258 + <div class="col-md-6">
  259 + <label class="control-label col-md-5">
  260 + <span class="required"> * </span> 下行末班时间 :
  261 + </label>
  262 + <div class="col-md-4">
  263 + <p class="form-control-static" data-display="endStationEndTime"> </p>
  264 + </div>
  265 + </div>
  266 + </div>
  267 +
  268 + <div class="form-group">
  269 + <div class="col-md-6">
  270 + <label class="control-label col-md-5">
  271 + <span class="required"> * </span> 早高峰开始时间 :
  272 + </label>
  273 + <div class="col-md-4">
  274 + <p class="form-control-static" data-display="earlyStartTime"> </p>
  275 + </div>
  276 + </div>
  277 + <div class="col-md-6">
  278 + <label class="control-label col-md-5">
  279 + <span class="required"> * </span> 早高峰结束时间 :
  280 + </label>
  281 + <div class="col-md-4">
  282 + <p class="form-control-static" data-display="earlyEndTime"> </p>
  283 + </div>
  284 + </div>
  285 + </div>
  286 +
  287 + <div class="form-group">
  288 + <div class="col-md-6">
  289 + <label class="control-label col-md-5">
  290 + <span class="required"> * </span> 晚高峰开始时间 :
  291 + </label>
  292 + <div class="col-md-4">
  293 + <p class="form-control-static" data-display="lateStartTime"> </p>
  294 + </div>
  295 + </div>
  296 + <div class="col-md-6">
  297 + <label class="control-label col-md-5">
  298 + <span class="required"> * </span> 晚高峰结束时间 :
  299 + </label>
  300 + <div class="col-md-4">
  301 + <p class="form-control-static" data-display="lateEndTime"> </p>
  302 + </div>
  303 + </div>
  304 + </div>
  305 +
  306 + <div class="form-group">
  307 + <div class="col-md-6">
  308 + <label class="control-label col-md-5">
  309 + <span class="required"> * </span> 线路规划类型  :
  310 + </label>
  311 + <div class="col-md-4">
  312 + <p class="form-control-static" data-display="linePlayType"> </p>
  313 + </div>
  314 + </div>
  315 + <div class="col-md-6">
  316 + <label class="control-label col-md-5">吃饭地点    :</label>
  317 + <div class="col-md-7">
  318 + <p class="form-control-static" data-display="cfdd"> </p>
  319 + </div>
  320 + </div>
  321 + </div>
  322 +
  323 + <div class="form-group">
  324 + <div class="col-md-6">
  325 + <label class="control-label col-md-5">早晚例行保养  :</label>
  326 + <div class="col-md-4">
  327 + <p class="form-control-static" data-display="lb"> </p>
  328 + </div>
  329 + </div>
  330 + <div class="col-md-6">
  331 + <label class="control-label col-md-5">停车场     :</label>
  332 + <div class="col-md-7">
  333 + <p class="form-control-static" data-display="carPark"> </p>
  334 + </div>
  335 + </div>
  336 + </div>
  337 +
  338 + <div class="form-group">
  339 + <div class="col-md-6">
  340 + <label class="control-label col-md-5"> 工作餐午餐时间 : </label>
  341 + <div class="col-md-4">
  342 + <p class="form-control-static" data-display="workeLunch"> </p>
  343 + </div>
  344 + </div>
  345 + <div class="col-md-6">
  346 + <label class="control-label col-md-5"> 工作餐晚餐时间 : </label>
  347 + <div class="col-md-4">
  348 + <p class="form-control-static" data-display="workeDinner"> </p>
  349 + </div>
  350 + </div>
  351 + </div>
  352 +
  353 +</script>
0 354 \ No newline at end of file
... ...
src/main/resources/static/pages/scheduleApp/module/core/scheduleRuleManage/module.js
... ... @@ -285,6 +285,9 @@ angular.module(&#39;ScheduleApp&#39;).controller(
285 285  
286 286 // 提交方法
287 287 self.submit = function() {
  288 + //// test
  289 + //self.scheduleRuleManageForSave.fbtype = 0;
  290 +
288 291 // 保存或更新
289 292 self.scheduleRuleManageForSave.$save(function() {
290 293 $state.go("scheduleRuleManage");
... ...