Commit 0c40ca836c0f09da9491f5f75dd864989dce7b14

Authored by panzh
2 parents 26abb4f9 b92edc34

Merge branch 'pudong' of http://222.66.0.204:8090/panzhaov5/bsth_control into pudong

src/main/java/com/bsth/service/schedule/plan/DroolsSchedulePlan.java
... ... @@ -475,6 +475,9 @@ public class DroolsSchedulePlan {
475 475 * @param schedulePlan
476 476 */
477 477 public void validPlanResult(PlanResult planResult) {
  478 + // 1-0、获取路牌信息
  479 + LpInfoResults_output lpInfoResults_output = (LpInfoResults_output) this.ttInfoOutput(this.mainLine)[1];
  480 +
478 481 // 1-1、构造drools规则输入数据,输出数据
479 482 ValidateParam validateParam = new ValidateParam(
480 483 new DateTime(this.from), new DateTime(this.to));
... ... @@ -494,6 +497,9 @@ public class DroolsSchedulePlan {
494 497 for (SchedulePlanInfo schedulePlanInfo: planResult.getSchedulePlanInfos()) {
495 498 session.insert(schedulePlanInfo);
496 499 }
  500 + for (LpInfoResult_output lpInfoResult_output: lpInfoResults_output.getLpInfoResult_outputs()) {
  501 + session.insert(lpInfoResult_output);
  502 + }
497 503  
498 504 // 执行rule
499 505 session.fireAllRules();
... ...
src/main/java/com/bsth/service/schedule/rules/ttinfo/LpInfoResult_output.java
... ... @@ -10,6 +10,8 @@ public class LpInfoResult_output {
10 10 private DateTime dateTime;
11 11 /** 路牌Id */
12 12 private String lpId;
  13 + /** 路牌名字 */
  14 + private String lpName;
13 15 /** 线路Id */
14 16 private String xlId;
15 17 /** 时刻表Id */
... ... @@ -56,4 +58,12 @@ public class LpInfoResult_output {
56 58 public void setTtInfoName(String ttInfoName) {
57 59 this.ttInfoName = ttInfoName;
58 60 }
  61 +
  62 + public String getLpName() {
  63 + return lpName;
  64 + }
  65 +
  66 + public void setLpName(String lpName) {
  67 + this.lpName = lpName;
  68 + }
59 69 }
... ...
src/main/java/com/bsth/service/schedule/rules/ttinfo/LpInfoResultsFunction.java
... ... @@ -64,6 +64,7 @@ public class LpInfoResultsFunction implements AccumulateFunction {
64 64 if (lpInfoResultsData.lpInfoResult_outputMap.get(ttInfoDetail.getLp().getId()) == null) {
65 65 LpInfoResult_output lpInfoResult_output = new LpInfoResult_output();
66 66 lpInfoResult_output.setLpId(String.valueOf(ttInfoDetail.getLp().getId()));
  67 + lpInfoResult_output.setLpName(ttInfoDetail.getLp().getLpName());
67 68 lpInfoResult_output.setXlId(String.valueOf(ttInfoDetail.getXl().getId()));
68 69 lpInfoResult_output.setTtInfoId(String.valueOf(ttInfoDetail.getTtinfo().getId()));
69 70 lpInfoResult_output.setTtInfoName(ttInfoDetail.getTtinfo().getName());
... ...
src/main/java/com/bsth/service/schedule/rules/validate/ValidWantLpFunction.java 0 → 100644
  1 +package com.bsth.service.schedule.rules.validate;
  2 +
  3 +import com.bsth.entity.schedule.SchedulePlanInfo;
  4 +import com.bsth.service.schedule.rules.ttinfo.LpInfoResult_output;
  5 +import org.kie.api.runtime.rule.AccumulateFunction;
  6 +
  7 +import java.io.*;
  8 +import java.text.SimpleDateFormat;
  9 +import java.util.*;
  10 +
  11 +/**
  12 + * 计算缺少路牌错误。
  13 + * 同一天,如果有时刻表路牌没有执行到,统计。
  14 + * 注意:使用这个函数时,要一天计算一次,多天计算无意义。
  15 + */
  16 +public class ValidWantLpFunction implements AccumulateFunction {
  17 + @Override
  18 + public void writeExternal(ObjectOutput out) throws IOException {
  19 + }
  20 +
  21 + @Override
  22 + public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
  23 +
  24 + }
  25 +
  26 + protected static class WantLpInfo implements Externalizable {
  27 + /** 错误描述 */
  28 + public List<ValidateResults_output.ValidInfo> validInfoList = new ArrayList<>();
  29 + /** 每天的路牌班次数量 */
  30 + public Map<String, Integer> lpBcCount = new HashMap<>();
  31 + /** 每天的路牌名字对应 */
  32 + public Map<String, String> lpNamesMap = new HashMap<>();
  33 + /** 排班日期 */
  34 + public Date scheduleDate;
  35 +
  36 + public WantLpInfo() {
  37 +
  38 + }
  39 +
  40 + @Override
  41 + public void writeExternal(ObjectOutput out) throws IOException {
  42 + out.writeObject(validInfoList);
  43 + }
  44 +
  45 + @Override
  46 + public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
  47 + validInfoList = (List<ValidateResults_output.ValidInfo>) in.readObject();
  48 + }
  49 + }
  50 +
  51 + @Override
  52 + public Serializable createContext() {
  53 + return new WantLpInfo();
  54 + }
  55 +
  56 + @Override
  57 + public void init(Serializable serializable) throws Exception {
  58 + // TODO:
  59 +// System.out.println("init");
  60 + }
  61 +
  62 + @Override
  63 + public void accumulate(Serializable context, Object o) {
  64 + WantLpInfo wantLpInfo = (WantLpInfo) context;
  65 + ValidateResource validateResource = (ValidateResource) o;
  66 +
  67 + SchedulePlanInfo spi = validateResource.getSpi();
  68 + List<LpInfoResult_output> lpiList = validateResource.getLpiList();
  69 +
  70 + // 获取当天所有路牌信息,每个验证对象都带当天所有路牌信息,只需判定一次
  71 + if (wantLpInfo.lpNamesMap.isEmpty()) {
  72 + for (LpInfoResult_output lpInfoResult_output: lpiList) {
  73 + wantLpInfo.lpNamesMap.put(lpInfoResult_output.getLpId(), lpInfoResult_output.getLpName());
  74 + wantLpInfo.lpBcCount.put(lpInfoResult_output.getLpId(), 0);
  75 + }
  76 + }
  77 + if (wantLpInfo.scheduleDate == null) {
  78 + wantLpInfo.scheduleDate = spi.getScheduleDate();
  79 + }
  80 +
  81 + // 累计记录每个排班班次出现次数
  82 + String lpId_spi = spi.getLp().toString();
  83 + wantLpInfo.lpBcCount.put(lpId_spi, wantLpInfo.lpBcCount.get(lpId_spi) + 1);
  84 +
  85 + }
  86 +
  87 + @Override
  88 + public boolean supportsReverse() {
  89 + return true;
  90 + }
  91 +
  92 + @Override
  93 + public void reverse(Serializable context, Object o) throws Exception {
  94 + WantLpInfo wantLpInfo = (WantLpInfo) context;
  95 +
  96 + // 清空数据,下一天继续迭代
  97 + wantLpInfo.lpBcCount.clear();
  98 + wantLpInfo.lpNamesMap.clear();
  99 + wantLpInfo.scheduleDate = null;
  100 + wantLpInfo.validInfoList.clear();
  101 +
  102 +// System.out.println("reverse");
  103 +
  104 + }
  105 +
  106 + @Override
  107 + public Class<?> getResultType() {
  108 + return List.class;
  109 + }
  110 +
  111 + @Override
  112 + public Object getResult(Serializable context) throws Exception {
  113 + WantLpInfo wantLpInfo = (WantLpInfo) context;
  114 +
  115 + SimpleDateFormat sf = new SimpleDateFormat("yyyy年MM月dd日");
  116 + String infoFormat = "日期(%s),路牌(%s),没有排班班次";
  117 +
  118 + for (String lpId : wantLpInfo.lpBcCount.keySet()) {
  119 + if (wantLpInfo.lpBcCount.get(lpId) == 0) {
  120 + // 排班没有班次
  121 + ValidateResults_output.ValidInfo validInfo = new ValidateResults_output.ValidInfo();
  122 + validInfo.setSd(wantLpInfo.scheduleDate);
  123 + validInfo.setDesc(String.format(
  124 + infoFormat,
  125 + sf.format(wantLpInfo.scheduleDate),
  126 + wantLpInfo.lpNamesMap.get(lpId))
  127 + );
  128 + wantLpInfo.validInfoList.add(validInfo);
  129 + }
  130 + }
  131 +
  132 + System.out.println("ValidWantLpFunction==>" + wantLpInfo.lpBcCount);
  133 +
  134 + return wantLpInfo.validInfoList;
  135 + }
  136 +
  137 +}
  138 +
  139 +
  140 +
  141 +
  142 +
  143 +
  144 +
  145 +
... ...
src/main/java/com/bsth/service/schedule/rules/validate/ValidateResource.java 0 → 100644
  1 +package com.bsth.service.schedule.rules.validate;
  2 +
  3 +import com.bsth.entity.schedule.SchedulePlanInfo;
  4 +import com.bsth.service.schedule.rules.ttinfo.LpInfoResult_output;
  5 +
  6 +import java.util.Date;
  7 +import java.util.List;
  8 +
  9 +/**
  10 + * 验证操作dsl类。
  11 + */
  12 +public class ValidateResource {
  13 + /** 具体日期 */
  14 + private Date sd;
  15 + /** 当天排班计划 */
  16 + private SchedulePlanInfo spi;
  17 + /** 当天所有路牌信息 */
  18 + private List<LpInfoResult_output> lpiList;
  19 +
  20 + public Date getSd() {
  21 + return sd;
  22 + }
  23 +
  24 + public void setSd(Date sd) {
  25 + this.sd = sd;
  26 + }
  27 +
  28 + public SchedulePlanInfo getSpi() {
  29 + return spi;
  30 + }
  31 +
  32 + public void setSpi(SchedulePlanInfo spi) {
  33 + this.spi = spi;
  34 + }
  35 +
  36 + public List<LpInfoResult_output> getLpiList() {
  37 + return lpiList;
  38 + }
  39 +
  40 + public void setLpiList(List<LpInfoResult_output> lpiList) {
  41 + this.lpiList = lpiList;
  42 + }
  43 +}
... ...
src/main/resources/rules/functions.drl
... ... @@ -8,3 +8,4 @@ import accumulate com.bsth.service.schedule.rules.ttinfo.LpInfoResultsFunction l
8 8 import accumulate com.bsth.service.schedule.rules.ttinfo.MinRuleQyrqFunction minruleqyrq;
9 9 import accumulate com.bsth.service.schedule.rules.validate.ValidRepeatBcFunction vrb;
10 10 import accumulate com.bsth.service.schedule.rules.validate.ValidWholeRerunBcFunction vwrb;
  11 +import accumulate com.bsth.service.schedule.rules.validate.ValidWantLpFunction vwlp;
... ...
src/main/resources/rules/validplan.drl
... ... @@ -2,6 +2,7 @@ package com.bsth.service.schedule.rules.validate;
2 2  
3 3 import com.bsth.entity.schedule.SchedulePlanInfo;
4 4 import com.bsth.service.schedule.rules.ttinfo.LpInfoResult_output;
  5 +import com.bsth.service.schedule.rules.validate.ValidateResource;
5 6  
6 7 import org.joda.time.*;
7 8 import java.util.*;
... ... @@ -14,7 +15,22 @@ global Logger log;
14 15 // 输出
15 16 global ValidateResults_output validResult;
16 17  
17   -//------------------------- 第一阶段、构造循环体 ----------------------------//
  18 +//------------------------- 第一阶段、构造验证源 ----------------------------//
  19 +rule "Calcu_validate_resource"
  20 + salience 2000
  21 + when
  22 + $spi: SchedulePlanInfo($sd: scheduleDate)
  23 + $lpiList: ArrayList() from collect (LpInfoResult_output(dateTime.getMillis() == $sd.getTime()))
  24 + then
  25 + ValidateResource resource = new ValidateResource();
  26 + resource.setSd($sd);
  27 + resource.setSpi($spi);
  28 + resource.setLpiList($lpiList);
  29 +
  30 + insert(resource);
  31 +end
  32 +
  33 +//------------------------- 第二阶段、构造循环体 ----------------------------//
18 34  
19 35 declare Loop_param
20 36 start_date: DateTime // 开始日期(这个要不停的更新迭代)
... ... @@ -39,23 +55,27 @@ rule &quot;Calcu_Loop_param&quot;
39 55 insert(p);
40 56 end
41 57  
42   -//------------------------- 第阶段、验证计算 ----------------------------//
  58 +//------------------------- 第阶段、验证计算 ----------------------------//
43 59  
44 60  
45   -rule "Valid_repeat_bc" // 验证是否存在重复班次
  61 +rule "Valid_repeat_bc" // 验证是否存在重复班次,未套跑班次,未执行路牌
46 62 salience 600
47 63 when
48 64 $lp: Loop_param($sd: start_date, $ed: end_date)
49 65 eval($sd.isBefore($ed) || $sd.isEqual($ed))
50   - $spiList: ArrayList() from collect (SchedulePlanInfo(scheduleDate.getTime() == $sd.getMillis()))
51   - $infos: ArrayList() from accumulate ($spi: SchedulePlanInfo() from $spiList, vrb($spi))
52   - $infos2: ArrayList() from accumulate ($spi: SchedulePlanInfo() from $spiList, vwrb($spi))
  66 + $vrList: ArrayList() from collect (ValidateResource(sd.getTime() == $sd.getMillis()))
  67 + $infos: ArrayList() from accumulate ($vr: ValidateResource() from $vrList, vrb($vr.getSpi()))
  68 + $infos2: ArrayList() from accumulate ($vr: ValidateResource() from $vrList, vwrb($vr.getSpi()))
  69 + $infos3: ArrayList() from accumulate ($vr: ValidateResource() from $vrList, vwlp($vr))
53 70 then
54 71 // TODO:
55 72 // log.info("日期={},班次重复错误数={}", $sd, $infos.size());
56 73  
  74 +// log.info("班次数={}", $vrList.size());
  75 +
57 76 validResult.getInfos().addAll($infos);
58 77 validResult.getInfos().addAll($infos2);
  78 + validResult.getInfos().addAll($infos3);
59 79  
60 80 // 迭代
61 81 $lp.setStart_date($sd.plusDays(1));
... ...
src/main/resources/static/index.html
... ... @@ -630,8 +630,7 @@
630 630 <script
631 631 src="http://webapi.amap.com/maps?v=1.3&key=16cb1c5043847e09ef9edafdd77befda"
632 632 data-exclude=1></script>
633   -<!-- echarts -->
634   -<script src="/metronic_v4.5.4/plugins/echarts4/echarts.min.js"></script>
  633 +
635 634 <script src="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.jquery.js" merge="plugins"></script>
636 635  
637 636 </body>
... ...