Commit a042614b7f55ad5f487d78104e80d3fb7ae8e5bd

Authored by 廖磊
2 parents 32fd47d4 0ad6ab86

Merge branch 'minhang' of

http://222.66.0.204:8090/panzhaov5/bsth_control into minhang
src/main/java/com/bsth/controller/directive/DirectiveController.java
1 package com.bsth.controller.directive; 1 package com.bsth.controller.directive;
2 2
3 -import java.util.List;  
4 -import java.util.Map;  
5 -  
6 -import org.apache.commons.lang3.StringEscapeUtils;  
7 -import org.springframework.beans.factory.annotation.Autowired;  
8 -import org.springframework.web.bind.annotation.RequestMapping;  
9 -import org.springframework.web.bind.annotation.RequestMethod;  
10 -import org.springframework.web.bind.annotation.RequestParam;  
11 -import org.springframework.web.bind.annotation.RestController;  
12 -  
13 import com.alibaba.fastjson.JSON; 3 import com.alibaba.fastjson.JSON;
14 import com.alibaba.fastjson.JSONObject; 4 import com.alibaba.fastjson.JSONObject;
15 import com.bsth.entity.directive.D80; 5 import com.bsth.entity.directive.D80;
@@ -17,6 +7,15 @@ import com.bsth.entity.directive.DC0_A3; @@ -17,6 +7,15 @@ import com.bsth.entity.directive.DC0_A3;
17 import com.bsth.entity.sys.SysUser; 7 import com.bsth.entity.sys.SysUser;
18 import com.bsth.security.util.SecurityUtils; 8 import com.bsth.security.util.SecurityUtils;
19 import com.bsth.service.directive.DirectiveService; 9 import com.bsth.service.directive.DirectiveService;
  10 +import org.apache.commons.lang3.StringEscapeUtils;
  11 +import org.springframework.beans.factory.annotation.Autowired;
  12 +import org.springframework.web.bind.annotation.RequestMapping;
  13 +import org.springframework.web.bind.annotation.RequestMethod;
  14 +import org.springframework.web.bind.annotation.RequestParam;
  15 +import org.springframework.web.bind.annotation.RestController;
  16 +
  17 +import java.util.List;
  18 +import java.util.Map;
20 19
21 /** 20 /**
22 * 21 *
@@ -109,6 +108,20 @@ public class DirectiveController { @@ -109,6 +108,20 @@ public class DirectiveController {
109 SysUser user = SecurityUtils.getCurrentUser(); 108 SysUser user = SecurityUtils.getCurrentUser();
110 return directiveService.upDownChange(nbbm, upDown, user.getUserName()); 109 return directiveService.upDownChange(nbbm, upDown, user.getUserName());
111 } 110 }
  111 +
  112 + /**
  113 + *
  114 + * @Title: upDownChange
  115 + * @Description: TODO(状态切换,营运状态 和 上下行)
  116 + * @param @param nbbm 车辆内部编码
  117 + * @param @param upDon
  118 + * @throws
  119 + */
  120 + @RequestMapping(value = "/stateChange", method = RequestMethod.POST)
  121 + public int stateChange(@RequestParam String nbbm, @RequestParam Integer upDown, @RequestParam Integer state){
  122 + SysUser user = SecurityUtils.getCurrentUser();
  123 + return directiveService.stateChange(nbbm, upDown, state, user.getUserName());
  124 + }
112 125
113 /** 126 /**
114 * 127 *
src/main/java/com/bsth/data/gpsdata/arrival/SignalHandle.java
@@ -5,6 +5,10 @@ import com.bsth.data.gpsdata.arrival.entity.StationRoute; @@ -5,6 +5,10 @@ import com.bsth.data.gpsdata.arrival.entity.StationRoute;
5 import com.bsth.data.gpsdata.arrival.utils.CircleQueue; 5 import com.bsth.data.gpsdata.arrival.utils.CircleQueue;
6 import com.bsth.data.gpsdata.arrival.utils.GeoUtils; 6 import com.bsth.data.gpsdata.arrival.utils.GeoUtils;
7 import com.bsth.entity.realcontrol.ScheduleRealInfo; 7 import com.bsth.entity.realcontrol.ScheduleRealInfo;
  8 +import org.joda.time.format.DateTimeFormat;
  9 +import org.joda.time.format.DateTimeFormatter;
  10 +import org.slf4j.Logger;
  11 +import org.slf4j.LoggerFactory;
8 12
9 import java.util.List; 13 import java.util.List;
10 14
@@ -68,6 +72,8 @@ public abstract class SignalHandle { @@ -68,6 +72,8 @@ public abstract class SignalHandle {
68 * } 72 * }
69 */ 73 */
70 74
  75 + Logger logger = LoggerFactory.getLogger(this.getClass());
  76 + private static DateTimeFormatter fmtHHmm = DateTimeFormat.forPattern("HH:mm");
71 protected void transformUpdown(GpsEntity gps, ScheduleRealInfo sch) { 77 protected void transformUpdown(GpsEntity gps, ScheduleRealInfo sch) {
72 int updown = Integer.parseInt(sch.getXlDir()); 78 int updown = Integer.parseInt(sch.getXlDir());
73 //gps 切换走向 79 //gps 切换走向
@@ -78,6 +84,8 @@ public abstract class SignalHandle { @@ -78,6 +84,8 @@ public abstract class SignalHandle {
78 if (station != null) { 84 if (station != null) {
79 gps.setStopNo(station.getCode()); 85 gps.setStopNo(station.getCode());
80 } 86 }
  87 +
  88 + logger.info(fmtHHmm.print(gps.getTimestamp()) + " 车辆 :" + gps.getNbbm() + " 切换到走向 : " + updown);
81 } 89 }
82 90
83 /** 91 /**
src/main/java/com/bsth/data/gpsdata/arrival/handlers/InOutStationSignalHandle.java
@@ -7,6 +7,7 @@ import com.bsth.data.gpsdata.arrival.utils.CircleQueue; @@ -7,6 +7,7 @@ import com.bsth.data.gpsdata.arrival.utils.CircleQueue;
7 import com.bsth.data.gpsdata.arrival.utils.ScheduleSignalState; 7 import com.bsth.data.gpsdata.arrival.utils.ScheduleSignalState;
8 import com.bsth.data.gpsdata.arrival.utils.SignalSchPlanMatcher; 8 import com.bsth.data.gpsdata.arrival.utils.SignalSchPlanMatcher;
9 import com.bsth.data.schedule.DayOfSchedule; 9 import com.bsth.data.schedule.DayOfSchedule;
  10 +import com.bsth.data.schedule.ScheduleComparator;
10 import com.bsth.entity.realcontrol.LineConfig; 11 import com.bsth.entity.realcontrol.LineConfig;
11 import com.bsth.entity.realcontrol.ScheduleRealInfo; 12 import com.bsth.entity.realcontrol.ScheduleRealInfo;
12 import com.bsth.service.directive.DirectiveService; 13 import com.bsth.service.directive.DirectiveService;
@@ -17,6 +18,9 @@ import org.slf4j.LoggerFactory; @@ -17,6 +18,9 @@ import org.slf4j.LoggerFactory;
17 import org.springframework.beans.factory.annotation.Autowired; 18 import org.springframework.beans.factory.annotation.Autowired;
18 import org.springframework.stereotype.Component; 19 import org.springframework.stereotype.Component;
19 20
  21 +import java.util.Collections;
  22 +import java.util.List;
  23 +
20 /** 24 /**
21 * 进出站动作处理 25 * 进出站动作处理
22 * Created by panzhao on 2016/12/27. 26 * Created by panzhao on 2016/12/27.
@@ -138,6 +142,10 @@ public class InOutStationSignalHandle extends SignalHandle{ @@ -138,6 +142,10 @@ public class InOutStationSignalHandle extends SignalHandle{
138 //持久化 142 //持久化
139 dayOfSchedule.save(sch); 143 dayOfSchedule.save(sch);
140 144
  145 + if(sch.getBcType().equals("out")){
  146 + //出场时,切换成营运状态
  147 + directiveService.send60Operation(sch.getClZbh(), 0, Integer.parseInt(sch.getXlDir()), null, "出场@系统");
  148 + }
141 //出站既出场 149 //出站既出场
142 outStationAndOutPark(sch); 150 outStationAndOutPark(sch);
143 logger.info("班次:" + sch.getDfsj() + "发车, 时间:" + sch.getFcsjActual()); 151 logger.info("班次:" + sch.getDfsj() + "发车, 时间:" + sch.getFcsjActual());
@@ -164,6 +172,11 @@ public class InOutStationSignalHandle extends SignalHandle{ @@ -164,6 +172,11 @@ public class InOutStationSignalHandle extends SignalHandle{
164 172
165 sendUtils.refreshSch(schPrev); 173 sendUtils.refreshSch(schPrev);
166 dayOfSchedule.save(schPrev); 174 dayOfSchedule.save(schPrev);
  175 +
  176 + if(schPrev.getBcType().equals("out")){
  177 + //出场时,切换成营运状态
  178 + directiveService.send60Operation(schPrev.getClZbh(), 0, Integer.parseInt(schPrev.getXlDir()), null, "出场@系统");
  179 + }
167 } 180 }
168 } 181 }
169 } 182 }
@@ -204,8 +217,14 @@ public class InOutStationSignalHandle extends SignalHandle{ @@ -204,8 +217,14 @@ public class InOutStationSignalHandle extends SignalHandle{
204 sendUtils.sendZdsj(sch, next, doneSum); 217 sendUtils.sendZdsj(sch, next, doneSum);
205 //持久化 218 //持久化
206 dayOfSchedule.save(sch); 219 dayOfSchedule.save(sch);
207 - //下发调度指令  
208 - directiveService.send60Dispatch(next, doneSum, "到站@系统"); 220 + if(next != null){
  221 + //下发调度指令
  222 + directiveService.send60Dispatch(next, doneSum, "到站@系统");
  223 + }
  224 + else if(sch.getBcType().equals("in")){
  225 + //终班进场,切换成非营运状态
  226 + directiveService.send60Operation(sch.getClZbh(), 1, Integer.parseInt(sch.getXlDir()), null, "进场@系统");
  227 + }
209 228
210 //准备执行下一个班次 229 //准备执行下一个班次
211 if (next != null) { 230 if (next != null) {
@@ -217,10 +236,59 @@ public class InOutStationSignalHandle extends SignalHandle{ @@ -217,10 +236,59 @@ public class InOutStationSignalHandle extends SignalHandle{
217 transformUpdown(gps, next); 236 transformUpdown(gps, next);
218 } 237 }
219 } 238 }
220 - else if(sch.getFcsjActual() == null){  
221 - //有进站,但班次没有实发,向前追溯一下信号  
222 - scheduleSignalState.signalRetrospect(gps, sch); 239 + else {
  240 + if(sch.getFcsjActual() == null){
  241 + //有进站,但班次没有实发,向前追溯一下信号
  242 + scheduleSignalState.signalRetrospect(gps, sch);
  243 + }
  244 +
  245 + //如果当前班次是出场,并且进的是下一个班次的终点
  246 + if(sch.getBcType().equals("out")){
  247 + ScheduleRealInfo next = dayOfSchedule.next(sch);
  248 + if(next.getZdzCode().equals(gps.getStopNo())){
  249 + List<ScheduleRealInfo> halfList = dayOfSchedule.findByNbbm(sch.getClZbh());
  250 + //和当前进站信号最匹配的一个班次
  251 + ScheduleRealInfo nearSch = nearScheduleByGpsIn(gps, halfList);
  252 +
  253 + if(nearSch != null){
  254 + //直接跳到这个班次
  255 + dayOfSchedule.addExecPlan(nearSch);
  256 + //重新进站
  257 + inStation(gps, prev);
  258 + }
  259 + }
  260 + }
  261 + }
  262 + }
  263 +
  264 + /**
  265 + * 和当前进站信号最匹配的一个班次
  266 + * @param gps
  267 + * @param halfList
  268 + * @return
  269 + */
  270 + private ScheduleRealInfo nearScheduleByGpsIn(GpsEntity gps, List<ScheduleRealInfo> halfList){
  271 + if(halfList == null || halfList.size() == 0)
  272 + return null;
  273 +
  274 + //排序
  275 + Collections.sort(halfList, new ScheduleComparator.FCSJ());
  276 + ScheduleRealInfo near = null;// = halfList.get(0);
  277 + ScheduleRealInfo sch;
  278 +
  279 + String stopId = gps.getStopNo();
  280 + for(int i = 0; i < halfList.size(); i ++){
  281 + sch = halfList.get(i);
  282 + if(!sch.getZdzCode().equals(stopId))
  283 + continue;
  284 +
  285 + if(sch.getZdsjT() < gps.getTimestamp())
  286 + near = sch;
  287 + else
  288 + break;
  289 +
223 } 290 }
  291 + return near;
224 } 292 }
225 293
226 /** 294 /**
src/main/java/com/bsth/data/gpsdata/recovery/GpsDataRecovery.java
@@ -60,7 +60,7 @@ public class GpsDataRecovery implements ApplicationContextAware { @@ -60,7 +60,7 @@ public class GpsDataRecovery implements ApplicationContextAware {
60 for (String nbbm : keys) { 60 for (String nbbm : keys) {
61 Collections.sort(listMap.get(nbbm), comp); 61 Collections.sort(listMap.get(nbbm), comp);
62 threadPool.execute(new RecoveryThread(listMap.get(nbbm), count)); 62 threadPool.execute(new RecoveryThread(listMap.get(nbbm), count));
63 - /*if(nbbm.equals("W9H-003")) 63 + /*if(nbbm.equals("SXC-YD012"))
64 new RecoveryThread(listMap.get(nbbm), count).run();*/ 64 new RecoveryThread(listMap.get(nbbm), count).run();*/
65 } 65 }
66 66
@@ -163,9 +163,8 @@ public class GpsDataRecovery implements ApplicationContextAware { @@ -163,9 +163,8 @@ public class GpsDataRecovery implements ApplicationContextAware {
163 reverseSignalHandle.handle(gps, prevs); 163 reverseSignalHandle.handle(gps, prevs);
164 //进出站动作处理 164 //进出站动作处理
165 inOutStationSignalHandle.handle(gps, prevs); 165 inOutStationSignalHandle.handle(gps, prevs);
166 - GeoCacheData.putGps(gps);  
167 166
168 - //Thread.sleep(50); 167 + GeoCacheData.putGps(gps);
169 } 168 }
170 } catch (Exception e) { 169 } catch (Exception e) {
171 logger.error("", e); 170 logger.error("", e);
src/main/java/com/bsth/service/directive/DirectiveService.java
1 package com.bsth.service.directive; 1 package com.bsth.service.directive;
2 2
3 3
4 -import java.util.List;  
5 -import java.util.Map;  
6 -  
7 import com.bsth.entity.directive.D60; 4 import com.bsth.entity.directive.D60;
8 import com.bsth.entity.directive.D64; 5 import com.bsth.entity.directive.D64;
9 import com.bsth.entity.directive.D80; 6 import com.bsth.entity.directive.D80;
@@ -11,6 +8,9 @@ import com.bsth.entity.directive.DC0_A3; @@ -11,6 +8,9 @@ import com.bsth.entity.directive.DC0_A3;
11 import com.bsth.entity.realcontrol.ScheduleRealInfo; 8 import com.bsth.entity.realcontrol.ScheduleRealInfo;
12 import com.bsth.service.BaseService; 9 import com.bsth.service.BaseService;
13 10
  11 +import java.util.List;
  12 +import java.util.Map;
  13 +
14 public interface DirectiveService extends BaseService<D60, Integer>{ 14 public interface DirectiveService extends BaseService<D60, Integer>{
15 15
16 /** 16 /**
@@ -93,4 +93,6 @@ public interface DirectiveService extends BaseService&lt;D60, Integer&gt;{ @@ -93,4 +93,6 @@ public interface DirectiveService extends BaseService&lt;D60, Integer&gt;{
93 int sendC0A5(String json); 93 int sendC0A5(String json);
94 94
95 int refreshLineFile(String deviceId); 95 int refreshLineFile(String deviceId);
  96 +
  97 + int stateChange(String nbbm, Integer upDown, Integer state, String userName);
96 } 98 }
src/main/java/com/bsth/service/directive/DirectiveServiceImpl.java
@@ -504,4 +504,9 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen @@ -504,4 +504,9 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen
504 504
505 return GatewayHttpUtils.postJson(new DirectiveCreator().createDeviceRefreshData(deviceId, gps.getLineId())); 505 return GatewayHttpUtils.postJson(new DirectiveCreator().createDeviceRefreshData(deviceId, gps.getLineId()));
506 } 506 }
  507 +
  508 + @Override
  509 + public int stateChange(String nbbm, Integer upDown, Integer state, String userName) {
  510 + return send60Operation(nbbm, state, upDown, null, userName);
  511 + }
507 } 512 }
src/main/java/com/bsth/service/schedule/impl/SchedulePlanServiceImpl.java
@@ -177,6 +177,15 @@ public class SchedulePlanServiceImpl extends BServiceImpl&lt;SchedulePlan, Long&gt; im @@ -177,6 +177,15 @@ public class SchedulePlanServiceImpl extends BServiceImpl&lt;SchedulePlan, Long&gt; im
177 session.insert(ttInfo_input); 177 session.insert(ttInfo_input);
178 } 178 }
179 179
  180 +
  181 + // 载入数据2
  182 + Iterator<ScheduleRule1Flat> scheduleRule1FlatIterator = strategy.getScheduleRule(schedulePlan.getXl().getId()).iterator();
  183 + while (scheduleRule1FlatIterator.hasNext()) {
  184 + ScheduleRule1Flat scheduleRule1Flat_temp = scheduleRule1FlatIterator.next();
  185 + ScheduleRule_input scheduleRule_input = new ScheduleRule_input(scheduleRule1Flat_temp);
  186 + session.insert(scheduleRule_input);
  187 + }
  188 +
180 // 执行rule 189 // 执行rule
181 session.fireAllRules(); 190 session.fireAllRules();
182 191
src/main/java/com/bsth/service/schedule/rules/MyDroolsConfiguration.java
@@ -58,9 +58,9 @@ public class MyDroolsConfiguration { @@ -58,9 +58,9 @@ public class MyDroolsConfiguration {
58 kfs.write("src/main/resources/HelloWorld.drl", kieServices.getResources() 58 kfs.write("src/main/resources/HelloWorld.drl", kieServices.getResources()
59 .newInputStreamResource(this.getClass().getResourceAsStream( 59 .newInputStreamResource(this.getClass().getResourceAsStream(
60 "/rules/HelloWorld.drl"), "UTF-8")); 60 "/rules/HelloWorld.drl"), "UTF-8"));
61 - kfs.write("src/main/resources/shiftloop_fb.drl", kieServices.getResources() 61 + kfs.write("src/main/resources/shiftloop_fb_2.drl", kieServices.getResources()
62 .newInputStreamResource(this.getClass().getResourceAsStream( 62 .newInputStreamResource(this.getClass().getResourceAsStream(
63 - "/rules/shiftloop_fb.drl"), "UTF-8")); 63 + "/rules/shiftloop_fb_2.drl"), "UTF-8"));
64 kfs.write("src/main/resources/ttinfo.drl", kieServices.getResources() 64 kfs.write("src/main/resources/ttinfo.drl", kieServices.getResources()
65 .newInputStreamResource(this.getClass().getResourceAsStream( 65 .newInputStreamResource(this.getClass().getResourceAsStream(
66 "/rules/ttinfo.drl"), "UTF-8")); 66 "/rules/ttinfo.drl"), "UTF-8"));
src/main/java/com/bsth/service/schedule/rules/shiftloop/ScheduleRule_input.java
@@ -12,6 +12,9 @@ import java.util.List; @@ -12,6 +12,9 @@ import java.util.List;
12 * 排班规则_输入。 12 * 排班规则_输入。
13 */ 13 */
14 public class ScheduleRule_input { 14 public class ScheduleRule_input {
  15 + /** 线路Id */
  16 + private String xlId;
  17 +
15 /** 规则Id */ 18 /** 规则Id */
16 private String ruleId; 19 private String ruleId;
17 /** 规则启用日期 */ 20 /** 规则启用日期 */
@@ -36,6 +39,7 @@ public class ScheduleRule_input { @@ -36,6 +39,7 @@ public class ScheduleRule_input {
36 public ScheduleRule_input() {} 39 public ScheduleRule_input() {}
37 40
38 public ScheduleRule_input(ScheduleRule1Flat scheduleRule1Flat) { 41 public ScheduleRule_input(ScheduleRule1Flat scheduleRule1Flat) {
  42 + this.xlId = String.valueOf(scheduleRule1Flat.getXl().getId());
39 this.ruleId = String.valueOf(scheduleRule1Flat.getId()); 43 this.ruleId = String.valueOf(scheduleRule1Flat.getId());
40 this.qyrq = new DateTime(scheduleRule1Flat.getQyrq()); 44 this.qyrq = new DateTime(scheduleRule1Flat.getQyrq());
41 List<String> lpIds = Splitter.on(",").splitToList(scheduleRule1Flat.getLpIds()); 45 List<String> lpIds = Splitter.on(",").splitToList(scheduleRule1Flat.getLpIds());
@@ -135,4 +139,12 @@ public class ScheduleRule_input { @@ -135,4 +139,12 @@ public class ScheduleRule_input {
135 public void setWeekdays(List<Boolean> weekdays) { 139 public void setWeekdays(List<Boolean> weekdays) {
136 this.weekdays = weekdays; 140 this.weekdays = weekdays;
137 } 141 }
  142 +
  143 + public String getXlId() {
  144 + return xlId;
  145 + }
  146 +
  147 + public void setXlId(String xlId) {
  148 + this.xlId = xlId;
  149 + }
138 } 150 }
src/main/java/com/bsth/service/schedule/rules/ttinfo/LpInfoResult_output.java
1 -package com.bsth.service.schedule.rules.ttinfo;  
2 -  
3 -import org.joda.time.DateTime;  
4 -  
5 -/**  
6 - * 每日路爬信息。  
7 - */  
8 -public class LpInfoResult_output {  
9 - /** 具体日期 */  
10 - private DateTime dateTime;  
11 - /** 路牌Id */  
12 - private String lpId;  
13 - /** 线路Id */  
14 - private String xlId;  
15 - /** 时刻表Id */  
16 - private String ttInfoId;  
17 -  
18 - public DateTime getDateTime() {  
19 - return dateTime;  
20 - }  
21 -  
22 - public void setDateTime(DateTime dateTime) {  
23 - this.dateTime = dateTime;  
24 - }  
25 -  
26 - public String getLpId() {  
27 - return lpId;  
28 - }  
29 -  
30 - public void setLpId(String lpId) {  
31 - this.lpId = lpId;  
32 - }  
33 -  
34 - public String getXlId() {  
35 - return xlId;  
36 - }  
37 -  
38 - public void setXlId(String xlId) {  
39 - this.xlId = xlId;  
40 - }  
41 -  
42 - public String getTtInfoId() {  
43 - return ttInfoId;  
44 - }  
45 -  
46 - public void setTtInfoId(String ttInfoId) {  
47 - this.ttInfoId = ttInfoId;  
48 - }  
49 -} 1 +package com.bsth.service.schedule.rules.ttinfo;
  2 +
  3 +import org.joda.time.DateTime;
  4 +
  5 +/**
  6 + * 每日路爬信息。
  7 + */
  8 +public class LpInfoResult_output {
  9 + /** 具体日期 */
  10 + private DateTime dateTime;
  11 + /** 路牌Id */
  12 + private String lpId;
  13 + /** 线路Id */
  14 + private String xlId;
  15 + /** 时刻表Id */
  16 + private String ttInfoId;
  17 +
  18 + public DateTime getDateTime() {
  19 + return dateTime;
  20 + }
  21 +
  22 + public void setDateTime(DateTime dateTime) {
  23 + this.dateTime = dateTime;
  24 + }
  25 +
  26 + public String getLpId() {
  27 + return lpId;
  28 + }
  29 +
  30 + public void setLpId(String lpId) {
  31 + this.lpId = lpId;
  32 + }
  33 +
  34 + public String getXlId() {
  35 + return xlId;
  36 + }
  37 +
  38 + public void setXlId(String xlId) {
  39 + this.xlId = xlId;
  40 + }
  41 +
  42 + public String getTtInfoId() {
  43 + return ttInfoId;
  44 + }
  45 +
  46 + public void setTtInfoId(String ttInfoId) {
  47 + this.ttInfoId = ttInfoId;
  48 + }
  49 +}
src/main/java/com/bsth/service/schedule/rules/ttinfo/LpInfoResultsFunction.java
1 -package com.bsth.service.schedule.rules.ttinfo;  
2 -  
3 -import com.bsth.entity.schedule.TTInfoDetail;  
4 -import org.kie.api.runtime.rule.AccumulateFunction;  
5 -  
6 -import java.io.*;  
7 -import java.util.ArrayList;  
8 -import java.util.HashMap;  
9 -import java.util.List;  
10 -import java.util.Map;  
11 -  
12 -/**  
13 - * 路牌信息统计函数。  
14 - */  
15 -public class LpInfoResultsFunction implements AccumulateFunction {  
16 - @Override  
17 - public void writeExternal(ObjectOutput out) throws IOException {  
18 -  
19 - }  
20 -  
21 - @Override  
22 - public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {  
23 -  
24 - }  
25 -  
26 - protected static class LpInfoResultsData implements Externalizable {  
27 - public List<LpInfoResult_output> lpInfoResult_outputs = new ArrayList<>();  
28 - public Map<Long, LpInfoResult_output> lpInfoResult_outputMap = new HashMap<>();  
29 - public TTInfoDetail ttInfoDetail;  
30 -  
31 - public LpInfoResultsData() {}  
32 -  
33 - @Override  
34 - public void writeExternal(ObjectOutput out) throws IOException {  
35 - out.writeObject(lpInfoResult_outputs);  
36 - out.writeObject(ttInfoDetail);  
37 - }  
38 -  
39 - @Override  
40 - public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {  
41 - lpInfoResult_outputs = (List<LpInfoResult_output>) in.readObject();  
42 - ttInfoDetail = (TTInfoDetail) in.readObject();  
43 - }  
44 - }  
45 -  
46 - @Override  
47 - public Serializable createContext() {  
48 - return new LpInfoResultsData();  
49 - }  
50 -  
51 - @Override  
52 - public void init(Serializable context) throws Exception {  
53 - LpInfoResultsData lpInfoResultsData = (LpInfoResultsData) context;  
54 - lpInfoResultsData.lpInfoResult_outputs = new ArrayList<>();  
55 - lpInfoResultsData.lpInfoResult_outputMap = new HashMap<>();  
56 - }  
57 -  
58 - @Override  
59 - public void accumulate(Serializable context, Object value) {  
60 - LpInfoResultsData lpInfoResultsData = (LpInfoResultsData) context;  
61 - TTInfoDetail ttInfoDetail = (TTInfoDetail) value;  
62 -  
63 - if (ttInfoDetail.getLp() != null) {  
64 - if (lpInfoResultsData.lpInfoResult_outputMap.get(ttInfoDetail.getLp().getId()) == null) {  
65 - LpInfoResult_output lpInfoResult_output = new LpInfoResult_output();  
66 - lpInfoResult_output.setLpId(String.valueOf(ttInfoDetail.getLp().getId()));  
67 - lpInfoResult_output.setXlId(String.valueOf(ttInfoDetail.getXl().getId()));  
68 - lpInfoResult_output.setTtInfoId(String.valueOf(ttInfoDetail.getTtinfo().getId()));  
69 -  
70 - lpInfoResultsData.lpInfoResult_outputMap.put(  
71 - ttInfoDetail.getLp().getId(),  
72 - lpInfoResult_output);  
73 - }  
74 - }  
75 -  
76 - lpInfoResultsData.lpInfoResult_outputs.clear();  
77 - lpInfoResultsData.lpInfoResult_outputs.addAll(  
78 - lpInfoResultsData.lpInfoResult_outputMap.values());  
79 - }  
80 -  
81 - @Override  
82 - public boolean supportsReverse() {  
83 - return true;  
84 - }  
85 -  
86 - @Override  
87 - public void reverse(Serializable context, Object value) throws Exception {  
88 - LpInfoResultsData lpInfoResultsData = (LpInfoResultsData) context;  
89 - TTInfoDetail ttInfoDetail = (TTInfoDetail) value;  
90 -  
91 - lpInfoResultsData.lpInfoResult_outputMap.remove(ttInfoDetail.getLp().getId());  
92 -  
93 - lpInfoResultsData.lpInfoResult_outputs.clear();  
94 - lpInfoResultsData.lpInfoResult_outputs.addAll(  
95 - lpInfoResultsData.lpInfoResult_outputMap.values());  
96 -  
97 - }  
98 -  
99 - @Override  
100 - public Object getResult(Serializable context) throws Exception {  
101 - LpInfoResultsData lpInfoResultsData = (LpInfoResultsData) context;  
102 - return lpInfoResultsData.lpInfoResult_outputs;  
103 - }  
104 -  
105 - @Override  
106 - public Class<?> getResultType() {  
107 - return List.class;  
108 - }  
109 -} 1 +package com.bsth.service.schedule.rules.ttinfo;
  2 +
  3 +import com.bsth.entity.schedule.TTInfoDetail;
  4 +import org.kie.api.runtime.rule.AccumulateFunction;
  5 +
  6 +import java.io.*;
  7 +import java.util.ArrayList;
  8 +import java.util.HashMap;
  9 +import java.util.List;
  10 +import java.util.Map;
  11 +
  12 +/**
  13 + * 路牌信息统计函数。
  14 + */
  15 +public class LpInfoResultsFunction implements AccumulateFunction {
  16 + @Override
  17 + public void writeExternal(ObjectOutput out) throws IOException {
  18 +
  19 + }
  20 +
  21 + @Override
  22 + public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
  23 +
  24 + }
  25 +
  26 + protected static class LpInfoResultsData implements Externalizable {
  27 + public List<LpInfoResult_output> lpInfoResult_outputs = new ArrayList<>();
  28 + public Map<Long, LpInfoResult_output> lpInfoResult_outputMap = new HashMap<>();
  29 + public TTInfoDetail ttInfoDetail;
  30 +
  31 + public LpInfoResultsData() {}
  32 +
  33 + @Override
  34 + public void writeExternal(ObjectOutput out) throws IOException {
  35 + out.writeObject(lpInfoResult_outputs);
  36 + out.writeObject(ttInfoDetail);
  37 + }
  38 +
  39 + @Override
  40 + public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
  41 + lpInfoResult_outputs = (List<LpInfoResult_output>) in.readObject();
  42 + ttInfoDetail = (TTInfoDetail) in.readObject();
  43 + }
  44 + }
  45 +
  46 + @Override
  47 + public Serializable createContext() {
  48 + return new LpInfoResultsData();
  49 + }
  50 +
  51 + @Override
  52 + public void init(Serializable context) throws Exception {
  53 + LpInfoResultsData lpInfoResultsData = (LpInfoResultsData) context;
  54 + lpInfoResultsData.lpInfoResult_outputs = new ArrayList<>();
  55 + lpInfoResultsData.lpInfoResult_outputMap = new HashMap<>();
  56 + }
  57 +
  58 + @Override
  59 + public void accumulate(Serializable context, Object value) {
  60 + LpInfoResultsData lpInfoResultsData = (LpInfoResultsData) context;
  61 + TTInfoDetail ttInfoDetail = (TTInfoDetail) value;
  62 +
  63 + if (ttInfoDetail.getLp() != null) {
  64 + if (lpInfoResultsData.lpInfoResult_outputMap.get(ttInfoDetail.getLp().getId()) == null) {
  65 + LpInfoResult_output lpInfoResult_output = new LpInfoResult_output();
  66 + lpInfoResult_output.setLpId(String.valueOf(ttInfoDetail.getLp().getId()));
  67 + lpInfoResult_output.setXlId(String.valueOf(ttInfoDetail.getXl().getId()));
  68 + lpInfoResult_output.setTtInfoId(String.valueOf(ttInfoDetail.getTtinfo().getId()));
  69 +
  70 + lpInfoResultsData.lpInfoResult_outputMap.put(
  71 + ttInfoDetail.getLp().getId(),
  72 + lpInfoResult_output);
  73 + }
  74 + }
  75 +
  76 + lpInfoResultsData.lpInfoResult_outputs.clear();
  77 + lpInfoResultsData.lpInfoResult_outputs.addAll(
  78 + lpInfoResultsData.lpInfoResult_outputMap.values());
  79 + }
  80 +
  81 + @Override
  82 + public boolean supportsReverse() {
  83 + return true;
  84 + }
  85 +
  86 + @Override
  87 + public void reverse(Serializable context, Object value) throws Exception {
  88 + LpInfoResultsData lpInfoResultsData = (LpInfoResultsData) context;
  89 + TTInfoDetail ttInfoDetail = (TTInfoDetail) value;
  90 +
  91 + lpInfoResultsData.lpInfoResult_outputMap.remove(ttInfoDetail.getLp().getId());
  92 +
  93 + lpInfoResultsData.lpInfoResult_outputs.clear();
  94 + lpInfoResultsData.lpInfoResult_outputs.addAll(
  95 + lpInfoResultsData.lpInfoResult_outputMap.values());
  96 +
  97 + }
  98 +
  99 + @Override
  100 + public Object getResult(Serializable context) throws Exception {
  101 + LpInfoResultsData lpInfoResultsData = (LpInfoResultsData) context;
  102 + return lpInfoResultsData.lpInfoResult_outputs;
  103 + }
  104 +
  105 + @Override
  106 + public Class<?> getResultType() {
  107 + return List.class;
  108 + }
  109 +}
src/main/java/com/bsth/service/schedule/rules/ttinfo/LpInfoResults_output.java
1 -package com.bsth.service.schedule.rules.ttinfo;  
2 -  
3 -import java.util.ArrayList;  
4 -import java.util.List;  
5 -  
6 -/**  
7 - * Created by xu on 17/3/21.  
8 - */  
9 -public class LpInfoResults_output {  
10 -  
11 - private List<LpInfoResult_output> lpInfoResult_outputs = new ArrayList<>();  
12 -  
13 - public List<LpInfoResult_output> getLpInfoResult_outputs() {  
14 - return lpInfoResult_outputs;  
15 - }  
16 -  
17 - public void setLpInfoResult_outputs(List<LpInfoResult_output> lpInfoResult_outputs) {  
18 - this.lpInfoResult_outputs = lpInfoResult_outputs;  
19 - }  
20 -  
21 - public void add(LpInfoResult_output lpInfoResult_output) {  
22 -  
23 - }  
24 -} 1 +package com.bsth.service.schedule.rules.ttinfo;
  2 +
  3 +import java.util.ArrayList;
  4 +import java.util.List;
  5 +
  6 +/**
  7 + * Created by xu on 17/3/21.
  8 + */
  9 +public class LpInfoResults_output {
  10 +
  11 + private List<LpInfoResult_output> lpInfoResult_outputs = new ArrayList<>();
  12 +
  13 + public List<LpInfoResult_output> getLpInfoResult_outputs() {
  14 + return lpInfoResult_outputs;
  15 + }
  16 +
  17 + public void setLpInfoResult_outputs(List<LpInfoResult_output> lpInfoResult_outputs) {
  18 + this.lpInfoResult_outputs = lpInfoResult_outputs;
  19 + }
  20 +
  21 + public void add(LpInfoResult_output lpInfoResult_output) {
  22 +
  23 + }
  24 +}
src/main/java/com/bsth/service/schedule/rules/ttinfo/MinRuleQyrqFunction.java 0 → 100644
  1 +package com.bsth.service.schedule.rules.ttinfo;
  2 +
  3 +import com.bsth.service.schedule.rules.shiftloop.ScheduleRule_input;
  4 +import org.joda.time.DateTime;
  5 +import org.kie.api.runtime.rule.AccumulateFunction;
  6 +
  7 +import java.io.*;
  8 +
  9 +/**
  10 + * 最小的规则启用日期。
  11 + */
  12 +public class MinRuleQyrqFunction implements AccumulateFunction {
  13 + @Override
  14 + public void writeExternal(ObjectOutput out) throws IOException {
  15 + }
  16 +
  17 + @Override
  18 + public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
  19 +
  20 + }
  21 +
  22 + protected static class MinRuleQyrqData implements Externalizable {
  23 + public DateTime min;
  24 +
  25 + public MinRuleQyrqData() {}
  26 +
  27 + @Override
  28 + public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
  29 + min = (DateTime) in.readObject();
  30 + }
  31 +
  32 + @Override
  33 + public void writeExternal(ObjectOutput out) throws IOException {
  34 + out.writeObject(min);
  35 + }
  36 + }
  37 +
  38 + @Override
  39 + public Serializable createContext() {
  40 + return new MinRuleQyrqData();
  41 + }
  42 +
  43 + @Override
  44 + public void init(Serializable context) throws Exception {
  45 + // TODO:
  46 + }
  47 +
  48 + @Override
  49 + public void accumulate(Serializable context, Object value) {
  50 + MinRuleQyrqData minRuleQyrqData = (MinRuleQyrqData) context;
  51 + ScheduleRule_input scheduleRule_input = (ScheduleRule_input) value;
  52 +
  53 + if (minRuleQyrqData.min == null) {
  54 + minRuleQyrqData.min = scheduleRule_input.getQyrq();
  55 + } else if (scheduleRule_input.getQyrq().isBefore(minRuleQyrqData.min)) {
  56 + minRuleQyrqData.min = scheduleRule_input.getQyrq();
  57 + }
  58 + }
  59 +
  60 + @Override
  61 + public boolean supportsReverse() {
  62 + return false;
  63 + }
  64 +
  65 + @Override
  66 + public void reverse(Serializable serializable, Object o) throws Exception {
  67 +
  68 + }
  69 +
  70 + @Override
  71 + public Class<?> getResultType() {
  72 + return DateTime.class;
  73 + }
  74 +
  75 + @Override
  76 + public Object getResult(Serializable context) throws Exception {
  77 + MinRuleQyrqData minRuleQyrqData = (MinRuleQyrqData) context;
  78 + return minRuleQyrqData.min;
  79 + }
  80 +}
  81 +
  82 +
  83 +
  84 +
  85 +
  86 +
  87 +
  88 +
  89 +
  90 +
  91 +
  92 +
  93 +
  94 +
  95 +
src/main/resources/rules/functions.drl
@@ -3,4 +3,5 @@ package com.bsth.service.schedule; @@ -3,4 +3,5 @@ package com.bsth.service.schedule;
3 import accumulate com.bsth.service.schedule.rules.ttinfo2.ErrorBcCountFunction ecount; 3 import accumulate com.bsth.service.schedule.rules.ttinfo2.ErrorBcCountFunction ecount;
4 import accumulate com.bsth.service.schedule.rules.shiftloop.GidsCountFunction gidscount; 4 import accumulate com.bsth.service.schedule.rules.shiftloop.GidsCountFunction gidscount;
5 import accumulate com.bsth.service.schedule.rules.shiftloop.GidFbTimeFunction gidfbtime; 5 import accumulate com.bsth.service.schedule.rules.shiftloop.GidFbTimeFunction gidfbtime;
6 -import accumulate com.bsth.service.schedule.rules.ttinfo.LpInfoResultsFunction lpinforesult;  
7 \ No newline at end of file 6 \ No newline at end of file
  7 +import accumulate com.bsth.service.schedule.rules.ttinfo.LpInfoResultsFunction lpinforesult;
  8 +import accumulate com.bsth.service.schedule.rules.ttinfo.MinRuleQyrqFunction minruleqyrq
8 \ No newline at end of file 9 \ No newline at end of file
src/main/resources/rules/shiftloop_fb_2.drl
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.rules.shiftloop.ScheduleCalcuParam_input;  
9 -import com.bsth.service.schedule.rules.shiftloop.ScheduleRule_input;  
10 -import com.bsth.service.schedule.rules.shiftloop.ScheduleResult_output;  
11 -import com.bsth.service.schedule.rules.shiftloop.ScheduleResults_output;  
12 -  
13 -import org.slf4j.Logger;  
14 -  
15 -global Logger log;  
16 -global ScheduleResults_output scheduleResult;  
17 -  
18 -/*  
19 - 存在(翻班格式)  
20 -*/  
21 -  
22 -//------------------------- 第一阶段、计算规则准备数据(天数) ----------------------------//  
23 -  
24 -declare Calcu_days_result_pre  
25 - ruleId: String // 规则Id  
26 -  
27 - calcu_index_lp : Integer // 计算之后路牌的起始索引  
28 - calcu_index_ry : Integer // 计算之后人员的起始索引  
29 -  
30 - // 1、第一部分循环需要用到的数据(当开始日期大于启用日期的时候才有)  
31 - calcu_start_date_1: DateTime // 第一部分开始计算日期  
32 - calcu_end_date_1: DateTime // 第一部分结束计算日期  
33 -  
34 - // 2、第二部分循环需要用到的数据  
35 - sdays : Integer // 总共需要排班的天数  
36 - calcu_start_date_2 : DateTime // 开始计算日期  
37 - calcu_end_date_2 : DateTime // 结束计算日期  
38 -  
39 -end  
40 -  
41 -/*  
42 - 计算启用日期,开始计算日期,结束计算日期,相差天数  
43 - 1、规则启用日期小于开始计算日期  
44 - 2、规则启用日期大于等于开始日期,小于等于结束日期  
45 -*/  
46 -// 1、启用日期 < 开始日期  
47 -rule "calcu_days_1_"  
48 - salience 1000  
49 - when  
50 - ScheduleCalcuParam_input(  
51 - fromDate.isBefore(toDate) || fromDate.isEqual(toDate),  
52 - $fromDate : fromDate,  
53 - $toDate : toDate  
54 - )  
55 - ScheduleRule_input(  
56 - $ruleId : ruleId, $qyrq : qyrq,  
57 - $lpindex : startGbdIndex, $ryindex: startEIndex)  
58 - eval($qyrq.isBefore($fromDate))  
59 - then  
60 - // 构造Calcu_days_result_pre,用于路牌  
61 - Calcu_days_result_pre cdrp = new Calcu_days_result_pre();  
62 - cdrp.setRuleId($ruleId);  
63 - cdrp.setCalcu_index_lp($lpindex);  
64 - cdrp.setCalcu_index_ry($ryindex);  
65 - cdrp.setCalcu_start_date_1($qyrq);  
66 - cdrp.setCalcu_end_date_1($fromDate);  
67 - Period p2 = new Period($fromDate, $toDate, PeriodType.days());  
68 - cdrp.setSdays(p2.getDays() + 1);  
69 - cdrp.setCalcu_start_date_2($fromDate);  
70 - cdrp.setCalcu_end_date_2($toDate);  
71 -  
72 - insert(cdrp);  
73 -  
74 - log.info("总共需要排班的天数 sdays={} ruleId={}", (p2.getDays() + 1), $ruleId);  
75 -  
76 -end  
77 -  
78 -// 启用日期 属于 [开始日期,结束日期]  
79 -rule "calcu_days_2_"  
80 - salience 1000  
81 - when  
82 - ScheduleCalcuParam_input(  
83 - fromDate.isBefore(toDate) || fromDate.isEqual(toDate),  
84 - $fromDate : fromDate,  
85 - $toDate : toDate  
86 - )  
87 - ScheduleRule_input(  
88 - $ruleId : ruleId, $qyrq : qyrq,  
89 - $lpindex : startGbdIndex, $ryindex: startEIndex)  
90 - eval((!$qyrq.isBefore($fromDate)) && (!$qyrq.isAfter($toDate)))  
91 - then  
92 - // 构造Calcu_days_result_pre,用于路牌  
93 - Calcu_days_result_pre cdrp = new Calcu_days_result_pre();  
94 - cdrp.setRuleId($ruleId);  
95 - cdrp.setCalcu_index_lp($lpindex);  
96 - cdrp.setCalcu_index_ry($ryindex);  
97 - cdrp.setCalcu_start_date_1($qyrq);  
98 - cdrp.setCalcu_end_date_1($qyrq);  
99 - Period p2 = new Period($qyrq, $toDate, PeriodType.days());  
100 - cdrp.setSdays(p2.getDays() + 1);  
101 - cdrp.setCalcu_start_date_2($qyrq);  
102 - cdrp.setCalcu_end_date_2($toDate);  
103 -  
104 - insert(cdrp);  
105 -  
106 - log.info("总共需要排班的天数 sdays={} ruleId={}", (p2.getDays() + 1), $ruleId);  
107 -  
108 -end  
109 -  
110 -//------------------------- 第二阶段、计算规则准备数据2(第一组循环) ----------------------------//  
111 -rule "Calcu_loop1_1_" // 时刻表的关联的路牌不存在,调整翻版规则  
112 - salience 900  
113 - when  
114 - $cdrp: Calcu_days_result_pre(  
115 - calcu_start_date_1.isBefore(calcu_end_date_1),  
116 - $csd1: calcu_start_date_1,  
117 - $ced1: calcu_end_date_1,  
118 - $ruleId: ruleId,  
119 - $lpindex: calcu_index_lp,  
120 - $ryindex: calcu_index_ry  
121 - )  
122 - $sri: ScheduleRule_input(  
123 - ruleId == $ruleId,  
124 - $gids: guideboardIds,  
125 - $lprangesize : guideboardIds.size(),  
126 - $ryrangesize: employeeConfigIds.size()  
127 - )  
128 - $liro: LpInfoResult_output(  
129 - dateTime.isEqual($csd1),  
130 - $gids.get($lpindex) == lpId,  
131 - $lpId: lpId  
132 - )  
133 - then  
134 - $cdrp.setCalcu_index_lp(($lpindex + 1) % $lprangesize);  
135 - $cdrp.setCalcu_index_ry(($ryindex + 1) % $ryrangesize);  
136 - $cdrp.setCalcu_start_date_1($csd1.plusDays(1));  
137 -  
138 - log.info("Calcu_loop1_1_ ruleId={}, calcu_index_lp/ry={}/{}",  
139 - $ruleId, $cdrp.getCalcu_index_lp(), $cdrp.getCalcu_index_ry());  
140 -  
141 - update($cdrp);  
142 -end  
143 -  
144 -rule "Calcu_loop1_2_" // 时刻表的关联路牌存在,就翻  
145 - salience 800  
146 - when  
147 - $cdrp: Calcu_days_result_pre(  
148 - calcu_start_date_1.isBefore(calcu_end_date_1),  
149 - $csd1: calcu_start_date_1,  
150 - $ced1: calcu_end_date_1,  
151 - $ruleId: ruleId  
152 - )  
153 - $sri: ScheduleRule_input(  
154 - ruleId == $ruleId,  
155 - $rangesize : guideboardIds.size()  
156 - )  
157 - then  
158 - $cdrp.setCalcu_start_date_1($csd1.plusDays(1));  
159 -  
160 - log.info("Calcu_loop1_2_ ruleId={}, calcu_index_lp/ry={}/{}",  
161 - $ruleId, $cdrp.getCalcu_index_lp(), $cdrp.getCalcu_index_ry());  
162 -  
163 - update($cdrp);  
164 -end  
165 -  
166 -  
167 -//----------------------- 路牌范围循环计算 ------------------------//  
168 -  
169 -//declare Calcu_guideboard_index_result  
170 -// ruleId : String // 规则Id  
171 -// calcu_index : Integer // 计算之后的起始索引  
172 -//end  
173 -//  
174 -//// 启用日期等于开始日期  
175 -//rule "calcu_guideboard_index_qyrq_eq_startrq"  
176 -// when  
177 -// $calcu_days_result : Calcu_days_result(  
178 -// qyrq_days == 0,  
179 -// $ruleId: ruleId  
180 -// )  
181 -// $scheduleRule_input : ScheduleRule_input(  
182 -// ruleId == $ruleId,  
183 -// $oindex : startGbdIndex  
184 -// )  
185 -// then  
186 -// Calcu_guideboard_index_result cgir = new Calcu_guideboard_index_result();  
187 -// cgir.setRuleId($ruleId);  
188 -// cgir.setCalcu_index($oindex);  
189 -//  
190 -// log.info("calcu_guideboard_index_qyrq_eq_startrq ruleId={}, calcu_index={}", $ruleId, cgir.getCalcu_index());  
191 -//  
192 -// insert(cgir);  
193 -//end  
194 -//  
195 -//// 开始日期大于启用日期  
196 -//rule "calcu_guideboard_index_startrq_gt_qyrq"  
197 -// when  
198 -// $calcu_days_result : Calcu_days_result(  
199 -// qyrq_days > 0,  
200 -// $ruleId: ruleId, $qyrq_days: qyrq_days,  
201 -// $calcu_start_date: calcu_start_date  
202 -// )  
203 -// $scheduleRule_input : ScheduleRule_input(  
204 -// ruleId == $ruleId,  
205 -// $qyrq: qyrq,  
206 -// $rangesize : guideboardIds.size(),  
207 -// $oindex : startGbdIndex,  
208 -// $weekdays: weekdays  
209 -// )  
210 -// then  
211 -// // 开始时间  
212 -// DateTime initDate = $qyrq;  
213 -// int index = $oindex;  
214 -// int resultIndex = index;  
215 -//  
216 -// while (!initDate.isAfter($calcu_start_date)) {  
217 -// if (((Boolean) $weekdays.get(initDate.getDayOfWeek() - 1)).booleanValue()) {  
218 -// resultIndex = index;  
219 -// index = (index + 1) % $rangesize;  
220 -// }  
221 -// initDate = initDate.plusDays(1);  
222 -// }  
223 -//  
224 -// Calcu_guideboard_index_result cgir = new Calcu_guideboard_index_result();  
225 -// cgir.setRuleId($ruleId);  
226 -// cgir.setCalcu_index(resultIndex);  
227 -//  
228 -// log.info("calcu_guideboard_index_startrq_gt_qyrq ruleId={}, calcu_index={}", $ruleId, cgir.getCalcu_index());  
229 -//  
230 -// insert(cgir);  
231 -//end  
232 -//  
233 -////----------------------- 人员范围循环计算 ------------------------//  
234 -//  
235 -//declare Calcu_employee_index_result  
236 -// ruleId : String // 规则Id  
237 -// calcu_index : Integer // 计算之后的起始索引  
238 -//end  
239 -//  
240 -//// 启用日期等于开始日期  
241 -//rule "calcu_employee_index_qyrq_eq_startrq"  
242 -// when  
243 -// $calcu_days_result : Calcu_days_result(  
244 -// qyrq_days == 0,  
245 -// $ruleId: ruleId)  
246 -// $scheduleRule_input : ScheduleRule_input(  
247 -// ruleId == $ruleId,  
248 -// $oindex : startEIndex)  
249 -// then  
250 -// Calcu_employee_index_result cgir = new Calcu_employee_index_result();  
251 -// cgir.setRuleId($ruleId);  
252 -// cgir.setCalcu_index($oindex);  
253 -//  
254 -// log.info("calcu_employee_index_qyrq_eq_startrq ruleId={}, calcu_index={}", $ruleId, cgir.getCalcu_index());  
255 -//  
256 -// insert(cgir);  
257 -//end  
258 -//  
259 -//// 开始日期大于启用日期  
260 -//rule "calcu_employee_index_startrq_gt_qyrq"  
261 -// when  
262 -// $calcu_days_result : Calcu_days_result(  
263 -// qyrq_days > 0,  
264 -// $ruleId: ruleId, $qyrq_days: qyrq_days,  
265 -// $calcu_start_date: calcu_start_date  
266 -// )  
267 -// $scheduleRule_input : ScheduleRule_input(  
268 -// ruleId == $ruleId,  
269 -// $qyrq: qyrq,  
270 -// $rangesize : employeeConfigIds.size(),  
271 -// $oindex : startEIndex,  
272 -// $weekdays: weekdays  
273 -// )  
274 -// then  
275 -// // 开始时间  
276 -// DateTime initDate = $qyrq;  
277 -// int index = $oindex;  
278 -// int resultIndex = index;  
279 -//  
280 -// while (!initDate.isAfter($calcu_start_date)) {  
281 -// if (((Boolean) $weekdays.get(initDate.getDayOfWeek() - 1)).booleanValue()) {  
282 -// resultIndex = index;  
283 -// index = (index + 1) % $rangesize;  
284 -// }  
285 -// initDate = initDate.plusDays(1);  
286 -// }  
287 -//  
288 -// Calcu_employee_index_result cgir = new Calcu_employee_index_result();  
289 -// cgir.setRuleId($ruleId);  
290 -// cgir.setCalcu_index(resultIndex);  
291 -//  
292 -// log.info("calcu_employee_index_startrq_gt_qyrq ruleId={}, calcu_index={}", $ruleId, cgir.getCalcu_index());  
293 -//  
294 -// insert(cgir);  
295 -//  
296 -//end  
297 -//  
298 -////------------------------- 第三阶段、循环计算 ------------------------//  
299 -//  
300 -////----------------------- 路牌范围循环计算 ------------------------//  
301 -//declare loop_guideboard_result  
302 -// ruleId : String // 规则id  
303 -// go_list : List // 路牌循环的列表  
304 -//end  
305 -//  
306 -//// 循环路牌计算  
307 -//rule "Calcu_loop_guideboard_result"  
308 -// when  
309 -// Calcu_days_result(  
310 -// $ruleId: ruleId,  
311 -// $startDate : calcu_start_date,  
312 -// $calcu_end_date: calcu_end_date  
313 -// )  
314 -// $ruleData : ScheduleRule_input(  
315 -// ruleId == $ruleId,  
316 -// $rangesize : guideboardIds.size(),  
317 -// $weekdays: weekdays  
318 -// )  
319 -// $indexData : Calcu_guideboard_index_result(  
320 -// ruleId == $ruleId  
321 -// )  
322 -// then  
323 -// DateTime initDate = $startDate; // 开始时间  
324 -// DateTime endDate = $calcu_end_date; // 结束实际  
325 -// List<ScheduleResult_output> scheduleResult_outputs =  
326 -// new ArrayList<ScheduleResult_output>();  
327 -//  
328 -// int i = $indexData.getCalcu_index();  
329 -// if (((Boolean) $weekdays.get(initDate.getDayOfWeek() - 1)).booleanValue() == false) {  
330 -// i = (i + 1) % $rangesize;  
331 -// }  
332 -//  
333 -// while (!initDate.isAfter(endDate)) {  
334 -// if (((Boolean) $weekdays.get(initDate.getDayOfWeek() - 1)).booleanValue()) {  
335 -// ScheduleResult_output ro = new ScheduleResult_output();  
336 -// ro.setRuleId($ruleId);  
337 -// ro.setSd(initDate);  
338 -// ro.setGuideboardId($ruleData.getGuideboardIds().get(i));  
339 -// ro.setCarConfigId($ruleData.getCarConfigId());  
340 -// scheduleResult_outputs.add(ro);  
341 -//  
342 -// i = (i + 1) % $rangesize;  
343 -// }  
344 -//  
345 -// initDate = initDate.plusDays(1);  
346 -// }  
347 -//  
348 -// loop_guideboard_result clgr = new loop_guideboard_result();  
349 -// clgr.setRuleId($ruleId);  
350 -// clgr.setGo_list(scheduleResult_outputs);  
351 -//  
352 -// log.info(String.valueOf(scheduleResult_outputs.size()));  
353 -//  
354 -// insert(clgr);  
355 -//  
356 -//end  
357 -//  
358 -////----------------------- 人员范围循环计算 ------------------------//  
359 -//declare loop_employee_result  
360 -// ruleId : String // 规则id  
361 -// eo_list : List // 人员循环的列表  
362 -//end  
363 -//  
364 -//// 循环人员计算  
365 -//rule "Calcu_loop_employee_result"  
366 -// when  
367 -// Calcu_days_result(  
368 -// $ruleId: ruleId,  
369 -// $startDate : calcu_start_date,  
370 -// $calcu_end_date: calcu_end_date  
371 -// )  
372 -// $ruleData : ScheduleRule_input(  
373 -// ruleId == $ruleId,  
374 -// $rangesize : employeeConfigIds.size(),  
375 -// $weekdays: weekdays  
376 -// )  
377 -// $indexData : Calcu_employee_index_result(  
378 -// ruleId == $ruleId  
379 -// )  
380 -// then  
381 -// DateTime initDate = $startDate; // 开始时间  
382 -// DateTime endDate = $calcu_end_date; // 结束实际  
383 -// List<ScheduleResult_output> scheduleResult_outputs =  
384 -// new ArrayList<ScheduleResult_output>();  
385 -//  
386 -// int i = $indexData.getCalcu_index();  
387 -// if (((Boolean) $weekdays.get(initDate.getDayOfWeek() - 1)).booleanValue() == false) {  
388 -// i = (i + 1) % $rangesize;  
389 -// }  
390 -//  
391 -// while (!initDate.isAfter(endDate)) {  
392 -// if (((Boolean) $weekdays.get(initDate.getDayOfWeek() - 1)).booleanValue()) {  
393 -// ScheduleResult_output ro = new ScheduleResult_output();  
394 -// ro.setRuleId($ruleId);  
395 -// ro.setSd(initDate);  
396 -// ro.setEmployeeConfigId($ruleData.getEmployeeConfigIds().get(i));  
397 -// ro.setCarConfigId($ruleData.getCarConfigId());  
398 -// scheduleResult_outputs.add(ro);  
399 -//  
400 -// i = (i + 1) % $rangesize;  
401 -// }  
402 -//  
403 -// initDate = initDate.plusDays(1);  
404 -// }  
405 -//  
406 -// loop_employee_result clgr = new loop_employee_result();  
407 -// clgr.setRuleId($ruleId);  
408 -// clgr.setEo_list(scheduleResult_outputs);  
409 -//  
410 -// log.info(String.valueOf(scheduleResult_outputs.size()));  
411 -//  
412 -// insert(clgr);  
413 -//end  
414 -//  
415 -////------------------------- 第四阶段、范围组循环计算 ----------------------------//  
416 -//  
417 -//global ScheduleResults_output scheduleResult;  
418 -//  
419 -//rule "output"  
420 -// when  
421 -// loop_guideboard_result(  
422 -// go_list.size() > 0,  
423 -// $ruleId : ruleId, $go_list : go_list  
424 -// )  
425 -// loop_employee_result(  
426 -// ruleId == $ruleId,  
427 -// eo_list.size() == $go_list.size(),  
428 -// $eo_list : eo_list  
429 -// )  
430 -// then  
431 -// for (int i = 0; i < $go_list.size(); i++) {  
432 -// ScheduleResult_output go = (ScheduleResult_output) $go_list.get(i);  
433 -// ScheduleResult_output eo = (ScheduleResult_output) $eo_list.get(i);  
434 -// go.setEmployeeConfigId(eo.getEmployeeConfigId());  
435 -// scheduleResult.getResults().add(go);  
436 -// }  
437 -//  
438 -//end  
439 -//  
440 -//  
441 -//  
442 -//  
443 -//  
444 -//  
445 -//  
446 -//  
447 -//  
448 -//  
449 -//  
450 -//  
451 -//  
452 -//  
453 -  
454 - 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.rules.shiftloop.ScheduleCalcuParam_input;
  9 +import com.bsth.service.schedule.rules.shiftloop.ScheduleRule_input;
  10 +import com.bsth.service.schedule.rules.shiftloop.ScheduleResult_output;
  11 +import com.bsth.service.schedule.rules.shiftloop.ScheduleResults_output;
  12 +
  13 +import org.slf4j.Logger;
  14 +
  15 +global Logger log;
  16 +global ScheduleResults_output scheduleResult;
  17 +
  18 +/*
  19 + 存在(翻班格式)
  20 +*/
  21 +
  22 +//------------------------- 第一阶段、计算规则准备数据(天数) ----------------------------//
  23 +
  24 +declare Calcu_days_result_pre
  25 + ruleId: String // 规则Id
  26 +
  27 + calcu_index_lp : Integer // 计算之后路牌的起始索引
  28 + calcu_index_ry : Integer // 计算之后人员的起始索引
  29 +
  30 + // 1、第一部分循环需要用到的数据(当开始日期大于启用日期的时候才有)
  31 + calcu_start_date_1: DateTime // 第一部分开始计算日期
  32 + calcu_end_date_1: DateTime // 第一部分结束计算日期
  33 +
  34 + // 2、第二部分循环需要用到的数据
  35 + sdays : Integer // 总共需要排班的天数
  36 + calcu_start_date_2 : DateTime // 开始计算日期
  37 + calcu_end_date_2 : DateTime // 结束计算日期
  38 +
  39 +end
  40 +
  41 +/*
  42 + 计算启用日期,开始计算日期,结束计算日期,相差天数
  43 + 1、规则启用日期小于开始计算日期
  44 + 2、规则启用日期大于等于开始日期,小于等于结束日期
  45 +*/
  46 +// 1、启用日期 < 开始日期
  47 +rule "calcu_days_1_"
  48 + salience 1000
  49 + when
  50 + ScheduleCalcuParam_input(
  51 + fromDate.isBefore(toDate) || fromDate.isEqual(toDate),
  52 + $fromDate : fromDate,
  53 + $toDate : toDate
  54 + )
  55 + ScheduleRule_input(
  56 + $ruleId : ruleId, $qyrq : qyrq,
  57 + $lpindex : startGbdIndex, $ryindex: startEIndex)
  58 + eval($qyrq.isBefore($fromDate))
  59 + then
  60 + // 构造Calcu_days_result_pre,用于路牌
  61 + Calcu_days_result_pre cdrp = new Calcu_days_result_pre();
  62 + cdrp.setRuleId($ruleId);
  63 + cdrp.setCalcu_index_lp($lpindex);
  64 + cdrp.setCalcu_index_ry($ryindex);
  65 + cdrp.setCalcu_start_date_1($qyrq);
  66 + cdrp.setCalcu_end_date_1($fromDate);
  67 + Period p2 = new Period($fromDate, $toDate, PeriodType.days());
  68 + cdrp.setSdays(p2.getDays() + 1);
  69 + cdrp.setCalcu_start_date_2($fromDate);
  70 + cdrp.setCalcu_end_date_2($toDate);
  71 +
  72 + insert(cdrp);
  73 +
  74 + log.info("总共需要排班的天数 sdays={} ruleId={} from={} to={}", (p2.getDays() + 1), $ruleId, $fromDate, $toDate);
  75 +
  76 +end
  77 +
  78 +// 启用日期 属于 [开始日期,结束日期]
  79 +rule "calcu_days_2_"
  80 + salience 1000
  81 + when
  82 + ScheduleCalcuParam_input(
  83 + fromDate.isBefore(toDate) || fromDate.isEqual(toDate),
  84 + $fromDate : fromDate,
  85 + $toDate : toDate
  86 + )
  87 + ScheduleRule_input(
  88 + $ruleId : ruleId, $qyrq : qyrq,
  89 + $lpindex : startGbdIndex, $ryindex: startEIndex)
  90 + eval((!$qyrq.isBefore($fromDate)) && (!$qyrq.isAfter($toDate)))
  91 + then
  92 + // 构造Calcu_days_result_pre,用于路牌
  93 + Calcu_days_result_pre cdrp = new Calcu_days_result_pre();
  94 + cdrp.setRuleId($ruleId);
  95 + cdrp.setCalcu_index_lp($lpindex);
  96 + cdrp.setCalcu_index_ry($ryindex);
  97 + cdrp.setCalcu_start_date_1($qyrq);
  98 + cdrp.setCalcu_end_date_1($qyrq);
  99 + Period p2 = new Period($qyrq, $toDate, PeriodType.days());
  100 + cdrp.setSdays(p2.getDays() + 1);
  101 + cdrp.setCalcu_start_date_2($qyrq);
  102 + cdrp.setCalcu_end_date_2($toDate);
  103 +
  104 + insert(cdrp);
  105 +
  106 + log.info("总共需要排班的天数 sdays={} ruleId={} from={} to={}", (p2.getDays() + 1), $ruleId, $qyrq, $toDate);
  107 +
  108 +end
  109 +
  110 +//------------------------- 第二阶段、计算规则准备数据2(第一组循环) ----------------------------//
  111 +rule "Calcu_loop1_1_" // 路牌在时刻表中存在,就翻
  112 + salience 900
  113 + when
  114 + $cdrp: Calcu_days_result_pre(
  115 + calcu_start_date_1.isBefore(calcu_end_date_1),
  116 + $csd1: calcu_start_date_1,
  117 + $ced1: calcu_end_date_1,
  118 + $ruleId: ruleId,
  119 + $lpindex: calcu_index_lp,
  120 + $ryindex: calcu_index_ry
  121 + )
  122 + $sri: ScheduleRule_input(
  123 + ruleId == $ruleId,
  124 + $gids: guideboardIds,
  125 + $lprangesize : guideboardIds.size(),
  126 + $ryrangesize: employeeConfigIds.size()
  127 + )
  128 + $liro: LpInfoResult_output(
  129 + dateTime.isEqual($csd1),
  130 + $gids.get($lpindex) == lpId,
  131 + $lpId: lpId
  132 + )
  133 + then
  134 + $cdrp.setCalcu_index_lp(($lpindex + 1) % $lprangesize);
  135 + $cdrp.setCalcu_index_ry(($ryindex + 1) % $ryrangesize);
  136 + $cdrp.setCalcu_start_date_1($csd1.plusDays(1));
  137 +
  138 + log.info("Calcu_loop1_1_ ruleId={}, calcu_index_lp/ry={}/{}",
  139 + $ruleId, $cdrp.getCalcu_index_lp(), $cdrp.getCalcu_index_ry());
  140 +
  141 + update($cdrp);
  142 +end
  143 +
  144 +rule "Calcu_loop1_2_" // 路牌在时刻表中不存在,就不翻
  145 + salience 900
  146 + when
  147 + $cdrp: Calcu_days_result_pre(
  148 + calcu_start_date_1.isBefore(calcu_end_date_1),
  149 + $csd1: calcu_start_date_1,
  150 + $ced1: calcu_end_date_1,
  151 + $ruleId: ruleId
  152 + )
  153 + $sri: ScheduleRule_input(
  154 + ruleId == $ruleId,
  155 + $rangesize : guideboardIds.size()
  156 + )
  157 + then
  158 + $cdrp.setCalcu_start_date_1($csd1.plusDays(1));
  159 +
  160 + log.info("Calcu_loop1_2_ ruleId={}, calcu_index_lp/ry={}/{}",
  161 + $ruleId, $cdrp.getCalcu_index_lp(), $cdrp.getCalcu_index_ry());
  162 +
  163 + update($cdrp);
  164 +end
  165 +
  166 +//------------------------- 第三阶段、计算规则准备数据2(第二组循环) ----------------------------//
  167 +rule "Calcu_loop2_1_" // 路牌在时刻表中存在,就翻
  168 + salience 800
  169 + when
  170 + $cdrp: Calcu_days_result_pre(
  171 + calcu_start_date_1.isEqual(calcu_end_date_1),
  172 + calcu_start_date_2.isBefore(calcu_end_date_2) || calcu_start_date_2.isEqual(calcu_end_date_2),
  173 + $csd2: calcu_start_date_2,
  174 + $ced2: calcu_end_date_2,
  175 + $ruleId: ruleId,
  176 + $lpindex: calcu_index_lp,
  177 + $ryindex: calcu_index_ry
  178 + )
  179 + $sri: ScheduleRule_input(
  180 + ruleId == $ruleId,
  181 + $cid: carConfigId,
  182 + $gids: guideboardIds,
  183 + $eids: employeeConfigIds,
  184 + $lprangesize : guideboardIds.size(),
  185 + $ryrangesize: employeeConfigIds.size()
  186 + )
  187 + $liro: LpInfoResult_output(
  188 + dateTime.isEqual($csd2),
  189 + $gids.get($lpindex) == lpId,
  190 + $lpId: lpId
  191 + )
  192 + then
  193 + ScheduleResult_output ro = new ScheduleResult_output();
  194 + ro.setRuleId($ruleId);
  195 + ro.setSd($csd2);
  196 + ro.setGuideboardId(String.valueOf($gids.get($lpindex)));
  197 + ro.setEmployeeConfigId(String.valueOf($eids.get($ryindex)));
  198 + ro.setCarConfigId($cid);
  199 +
  200 + scheduleResult.getResults().add(ro);
  201 +
  202 + $cdrp.setCalcu_index_lp(($lpindex + 1) % $lprangesize);
  203 + $cdrp.setCalcu_index_ry(($ryindex + 1) % $ryrangesize);
  204 + $cdrp.setCalcu_start_date_2($csd2.plusDays(1));
  205 +
  206 + log.info("Calcu_loop2_1_ ruleId={}, calcu_index_lp/ry={}/{}, from={}, to={}",
  207 + $ruleId, $cdrp.getCalcu_index_lp(), $cdrp.getCalcu_index_ry(), $csd2, $ced2);
  208 +
  209 + update($cdrp);
  210 +end
  211 +
  212 +rule "Calcu_loop2_2_" // 路牌在时刻表中不存在,就不翻
  213 + salience 800
  214 + when
  215 + $cdrp: Calcu_days_result_pre(
  216 + calcu_start_date_1.isEqual(calcu_end_date_1),
  217 + calcu_start_date_2.isBefore(calcu_end_date_2) || calcu_start_date_2.isEqual(calcu_end_date_2),
  218 + $csd2: calcu_start_date_2,
  219 + $ced2: calcu_end_date_2,
  220 + $ruleId: ruleId,
  221 + $lpindex: calcu_index_lp,
  222 + $ryindex: calcu_index_ry
  223 + )
  224 + $sri: ScheduleRule_input(
  225 + ruleId == $ruleId,
  226 + $cid: carConfigId,
  227 + $gids: guideboardIds,
  228 + $eids: employeeConfigIds
  229 +
  230 + )
  231 + then
  232 + ScheduleResult_output ro = new ScheduleResult_output();
  233 + ro.setRuleId($ruleId);
  234 + ro.setSd($csd2);
  235 + ro.setGuideboardId(String.valueOf($gids.get($lpindex)));
  236 + ro.setEmployeeConfigId(String.valueOf($eids.get($ryindex)));
  237 + ro.setCarConfigId($cid);
  238 +
  239 + scheduleResult.getResults().add(ro);
  240 +
  241 + $cdrp.setCalcu_start_date_2($csd2.plusDays(1));
  242 +
  243 + log.info("Calcu_loop2_2_ ruleId={}, calcu_index_lp/ry={}/{}, from={}, to={}",
  244 + $ruleId, $cdrp.getCalcu_index_lp(), $cdrp.getCalcu_index_ry(), $csd2, $ced2);
  245 +
  246 + update($cdrp);
  247 +end
  248 +
  249 +
  250 +
  251 +
  252 +
  253 +
src/main/resources/rules/ttinfo.drl
@@ -10,6 +10,8 @@ import com.bsth.service.schedule.rules.ttinfo.TTInfoResults_output; @@ -10,6 +10,8 @@ import com.bsth.service.schedule.rules.ttinfo.TTInfoResults_output;
10 import com.bsth.service.schedule.rules.ttinfo.LpInfoResult_output; 10 import com.bsth.service.schedule.rules.ttinfo.LpInfoResult_output;
11 import com.bsth.service.schedule.rules.ttinfo.LpInfoResults_output; 11 import com.bsth.service.schedule.rules.ttinfo.LpInfoResults_output;
12 12
  13 +import com.bsth.service.schedule.rules.shiftloop.ScheduleRule_input;
  14 +
13 import com.bsth.service.schedule.TTInfoDetailService; 15 import com.bsth.service.schedule.TTInfoDetailService;
14 16
15 import com.bsth.entity.schedule.TTInfo; 17 import com.bsth.entity.schedule.TTInfo;
@@ -38,7 +40,18 @@ function Map ttidParams(List ttinfolist) { @@ -38,7 +40,18 @@ function Map ttidParams(List ttinfolist) {
38 TODO:规则说明,以后待说明 40 TODO:规则说明,以后待说明
39 */ 41 */
40 42
41 -// TODO: 43 +//----------------- pre 预处理 param对象 -----------------------//
  44 +
  45 +rule "pre_calcu_TTInfoCalcuParam_input"
  46 + no-loop
  47 + salience 1000
  48 + when
  49 + $ttp: TTInfoCalcuParam_input($xlId : xlId)
  50 + $minqyrq: DateTime() from accumulate ($sri: ScheduleRule_input(xlId == $xlId), minruleqyrq($sri))
  51 + then
  52 + $ttp.setFromDate($minqyrq);
  53 + update($ttp);
  54 +end
42 55
43 //----------------- 第一阶段、计算规则准备数据(天数)----------------// 56 //----------------- 第一阶段、计算规则准备数据(天数)----------------//
44 57
src/main/resources/static/real_control_v2/fragments/north/nav/directive_history.html
@@ -65,9 +65,9 @@ @@ -65,9 +65,9 @@
65 {{if obj.reply46 != 0}} 65 {{if obj.reply46 != 0}}
66 <div class="uk-badge uk-badge-danger"> 设备未响应</div> 66 <div class="uk-badge uk-badge-danger"> 设备未响应</div>
67 {{else if obj.reply47 != 0}} 67 {{else if obj.reply47 != 0}}
68 - <div class="uk-badge uk-badge-warning"> 驾驶员未确认</div> 68 + <div class="uk-badge uk-badge-warning"> 设备已响应</div>
69 {{else if obj.reply46 == 0 && obj.reply47 == 0}} 69 {{else if obj.reply46 == 0 && obj.reply47 == 0}}
70 - <div class="uk-badge"> 成功</div> 70 + <div class="uk-badge"> 驾驶员已确认</div>
71 {{/if}} 71 {{/if}}
72 {{/if}} 72 {{/if}}
73 </td> 73 </td>
src/main/resources/static/real_control_v2/js/home/context_menu.js
@@ -39,6 +39,20 @@ var gb_home_context_menu = (function() { @@ -39,6 +39,20 @@ var gb_home_context_menu = (function() {
39 }); 39 });
40 }; 40 };
41 41
  42 + //营运状态和上下行切换
  43 + var stateChange = function (nbbm, updown, state) {
  44 + $.post('/directive/stateChange', {
  45 + nbbm: nbbm,
  46 + upDown: updown,
  47 + state: state
  48 + }, function(rs) {
  49 + if (rs == 0)
  50 + notify_succ('指令已发出');
  51 + else
  52 + notify_err('发送失败,原因参考【指令下发记录】');
  53 + });
  54 + };
  55 +
42 // send phrase 56 // send phrase
43 var sendPhrase = function() { 57 var sendPhrase = function() {
44 var dom = temps['home-send-phrase-temp']({ 58 var dom = temps['home-send-phrase-temp']({
@@ -139,11 +153,19 @@ var gb_home_context_menu = (function() { @@ -139,11 +153,19 @@ var gb_home_context_menu = (function() {
139 }; 153 };
140 154
141 var state_up_0 = function() { 155 var state_up_0 = function() {
142 - changeUpDown(active_car, 0); 156 + stateChange(active_car, 0, 0);
143 }; 157 };
144 158
145 var state_down_0 = function() { 159 var state_down_0 = function() {
146 - changeUpDown(active_car, 1); 160 + stateChange(active_car, 1, 0);
  161 + };
  162 +
  163 + var state_up_1 = function () {
  164 + stateChange(active_car, 0, 1);
  165 + };
  166 +
  167 + var state_down_1 = function () {
  168 + stateChange(active_car, 1, 1);
147 }; 169 };
148 170
149 var line_change = function() { 171 var line_change = function() {
@@ -179,7 +201,6 @@ var gb_home_context_menu = (function() { @@ -179,7 +201,6 @@ var gb_home_context_menu = (function() {
179 }); 201 });
180 }; 202 };
181 203
182 -  
183 var C0_A3 = function(){ 204 var C0_A3 = function(){
184 open_modal('/real_control_v2/fragments/home/c0_a3.html', {}, {center: false, bgclose: false}); 205 open_modal('/real_control_v2/fragments/home/c0_a3.html', {}, {center: false, bgclose: false});
185 }; 206 };
@@ -190,7 +211,9 @@ var gb_home_context_menu = (function() { @@ -190,7 +211,9 @@ var gb_home_context_menu = (function() {
190 state_up_0: state_up_0, 211 state_up_0: state_up_0,
191 state_down_0: state_down_0, 212 state_down_0: state_down_0,
192 line_change: line_change, 213 line_change: line_change,
193 - C0_A3: C0_A3 214 + C0_A3: C0_A3,
  215 + state_up_1: state_up_1,
  216 + state_down_1: state_down_1
194 }; 217 };
195 218
196 $.contextMenu({ 219 $.contextMenu({
@@ -210,6 +233,13 @@ var gb_home_context_menu = (function() { @@ -210,6 +233,13 @@ var gb_home_context_menu = (function() {
210 'fold_state': { 233 'fold_state': {
211 name: '状态切换', 234 name: '状态切换',
212 items: { 235 items: {
  236 + 'state_up_1': {
  237 + 'name': '上行非营运'
  238 + },
  239 + 'state_down_1': {
  240 + 'name': '下行非营运'
  241 + },
  242 + 'sep3_2': '---------',
213 'state_up_0': { 243 'state_up_0': {
214 'name': '上行营运' 244 'name': '上行营运'
215 }, 245 },