Commit 5c4a4bc7cfeed63370a47a1a9664a7ec8ccc4d38

Authored by 潘钊
2 parents fd83b6ad be97e34e

Merge branch 'minhang' into qingpu

Too many changes to show.

To preserve performance only 16 of 64 files are displayed.

src/main/java/com/bsth/controller/oil/YlbController.java
@@ -106,24 +106,24 @@ public class YlbController extends BaseController<Ylb, Integer>{ @@ -106,24 +106,24 @@ public class YlbController extends BaseController<Ylb, Integer>{
106 @RequestParam(defaultValue = "DESC") String direction){ 106 @RequestParam(defaultValue = "DESC") String direction){
107 107
108 Direction d; 108 Direction d;
109 - try { 109 +// try {
110 String rq=map.get("rq").toString(); 110 String rq=map.get("rq").toString();
111 if(!(rq=="")){ 111 if(!(rq=="")){
112 -  
113 - SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");  
114 - Calendar calendar = new GregorianCalendar();  
115 - calendar.setTime(sdf.parse(rq));  
116 - calendar.add(calendar.DATE,1);  
117 - Date date=calendar.getTime();  
118 - map.put("rq_ge", rq);  
119 - map.put("rq_le", sdf.format(date));  
120 - System.out.println(rq);  
121 - System.out.println(sdf.format(date));  
122 - }  
123 - } catch (ParseException e) {  
124 - // TODO Auto-generated catch block  
125 - e.printStackTrace(); 112 +//
  113 +// SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
  114 +// Calendar calendar = new GregorianCalendar();
  115 +// calendar.setTime(sdf.parse(rq));
  116 +// calendar.add(calendar.DATE,1);
  117 +// Date date=calendar.getTime();
  118 + map.put("rq_eq", rq);
  119 +// map.put("rq_lt", sdf.format(date));
  120 +// System.out.println(rq);
  121 +// System.out.println(sdf.format(date));
126 } 122 }
  123 +// } catch (ParseException e) {
  124 +// // TODO Auto-generated catch block
  125 +// e.printStackTrace();
  126 +// }
127 if(null != direction && direction.equals("ASC")) 127 if(null != direction && direction.equals("ASC"))
128 d = Direction.ASC; 128 d = Direction.ASC;
129 else 129 else
src/main/java/com/bsth/controller/realcontrol/ScheduleRealInfoController.java
@@ -36,35 +36,13 @@ public class ScheduleRealInfoController extends BaseController<ScheduleRealInfo, @@ -36,35 +36,13 @@ public class ScheduleRealInfoController extends BaseController<ScheduleRealInfo,
36 36
37 /** 37 /**
38 * 38 *
39 - * 改由通过 websocket 注册监听!!!  
40 - *  
41 - * @Title: registerLine @Description: TODO(注册线路,后续才能收到数据推送) @param @param  
42 - * lineCodes @throws  
43 - * 用GET 防止监控模式下被拦截  
44 -  
45 - @RequestMapping(value = "/registerLine", method = RequestMethod.GET)  
46 - public int registerLine(@RequestParam String lineCodes) {  
47 - List<String> list = Splitter.on(",").trimResults().omitEmptyStrings().splitToList(lineCodes);  
48 - String userName = SecurityUtils.getCurrentUser().getUserName();  
49 - // 注销之前的绑定  
50 - for (String line : list)  
51 - BasicData.lineCode2SocketUserMap.get(line).remove(userName);  
52 - // 重新绑定  
53 - for (String line : list)  
54 - BasicData.lineCode2SocketUserMap.put(line, userName);  
55 -  
56 - return 0;  
57 - }*/  
58 -  
59 - /**  
60 - *  
61 * @Title: outgoAdjust @Description: TODO(待发调整) @param @param id 39 * @Title: outgoAdjust @Description: TODO(待发调整) @param @param id
62 * 主键 @param @param remarks 备注 @param @param dfsj 待发时间(HH:mm) @throws 40 * 主键 @param @param remarks 备注 @param @param dfsj 待发时间(HH:mm) @throws
63 */ 41 */
64 @RequestMapping(value = "/outgoAdjust", method = RequestMethod.POST) 42 @RequestMapping(value = "/outgoAdjust", method = RequestMethod.POST)
65 public Map<String, Object> outgoAdjust(@RequestParam Long id, @RequestParam String remarks, 43 public Map<String, Object> outgoAdjust(@RequestParam Long id, @RequestParam String remarks,
66 - @RequestParam String dfsj/*, String clZbh, String jsy, String spy*/) {  
67 - return scheduleRealInfoService.outgoAdjust(id, remarks, dfsj/*, clZbh, jsy, spy*/); 44 + @RequestParam String dfsj,@RequestParam String bcType) {
  45 + return scheduleRealInfoService.outgoAdjust(id, remarks, dfsj, bcType);
68 } 46 }
69 47
70 /** 48 /**
@@ -125,19 +103,6 @@ public class ScheduleRealInfoController extends BaseController&lt;ScheduleRealInfo, @@ -125,19 +103,6 @@ public class ScheduleRealInfoController extends BaseController&lt;ScheduleRealInfo,
125 public List<Map<String, String>> sreachVehic(@RequestParam String nbbm) { 103 public List<Map<String, String>> sreachVehic(@RequestParam String nbbm) {
126 return scheduleRealInfoService.sreachVehic(nbbm); 104 return scheduleRealInfoService.sreachVehic(nbbm);
127 } 105 }
128 -  
129 - /**  
130 - *  
131 - * @Title: adjust @Description: TODO(调整人车) @param @param id  
132 - * 班次ID @param @param nbbm 内部编码 @param @param jsy 驾驶员 @param @param spy  
133 - * 售票员 @throws  
134 -  
135 - @RequestMapping(value = "/adjust", method = RequestMethod.POST)  
136 - public Map<String, Object> adjust(@RequestParam Long id, String nbbm, String jsy,  
137 - String spy, Integer revertLine, Integer borrowLine, String borrowTimeStr, String revertTimeStr) {  
138 - return scheduleRealInfoService.adjust(id, nbbm, jsy, spy, revertLine, borrowLine, borrowTimeStr, revertTimeStr);  
139 - }  
140 - */  
141 /** 106 /**
142 * 107 *
143 * @Title: realOutAdjust 108 * @Title: realOutAdjust
@@ -427,4 +392,14 @@ public class ScheduleRealInfoController extends BaseController&lt;ScheduleRealInfo, @@ -427,4 +392,14 @@ public class ScheduleRealInfoController extends BaseController&lt;ScheduleRealInfo,
427 } 392 }
428 return rs; 393 return rs;
429 } 394 }
  395 +
  396 + @RequestMapping(value = "svgAttr", method = RequestMethod.POST)
  397 + public Map<String, Object> svgAttr(@RequestParam String jsonStr){
  398 + return scheduleRealInfoService.svgAttr(jsonStr);
  399 + }
  400 +
  401 + @RequestMapping(value = "svgAttr", method = RequestMethod.GET)
  402 + public Map<String, Object> findSvgAttr(@RequestParam String idx){
  403 + return scheduleRealInfoService.findSvgAttr(idx);
  404 + }
430 } 405 }
src/main/java/com/bsth/controller/schedule/core/TTInfoDetailController.java
1 -package com.bsth.controller.schedule.core;  
2 -  
3 -import com.bsth.common.ResponseCode;  
4 -import com.bsth.controller.schedule.BController;  
5 -import com.bsth.entity.schedule.TTInfoDetail;  
6 -import com.bsth.service.schedule.TTInfoDetailService;  
7 -import org.springframework.beans.factory.annotation.Autowired;  
8 -import org.springframework.web.bind.annotation.PathVariable;  
9 -import org.springframework.web.bind.annotation.RequestMapping;  
10 -import org.springframework.web.bind.annotation.RequestMethod;  
11 -import org.springframework.web.bind.annotation.RestController;  
12 -  
13 -import java.util.HashMap;  
14 -import java.util.List;  
15 -import java.util.Map;  
16 -  
17 -/**  
18 - * Created by xu on 17/1/4.  
19 - */  
20 -@RestController  
21 -@RequestMapping("tidc")  
22 -public class TTInfoDetailController extends BController<TTInfoDetail, Long> {  
23 - @Autowired  
24 - private TTInfoDetailService ttInfoDetailService;  
25 -  
26 - @RequestMapping(value = "/bcdetail", method = RequestMethod.GET)  
27 - public List<TTInfoDetail> findBcdetails(Integer xlId, Long ttinfoId, Long lpId) {  
28 - return ttInfoDetailService.findBcdetails(xlId, ttinfoId, lpId);  
29 - }  
30 -  
31 - /**  
32 - * 验证sheet(以后放到规则引擎里去做)。  
33 - * @param filename excel文件全路径名  
34 - * @param sheetname sheet名字  
35 - * @param lineid 线路id  
36 - * @param linename 线路名称  
37 - * @return  
38 - */  
39 - @RequestMapping(value = "/validate/sheet", method = RequestMethod.POST)  
40 - public Map<String, Object> validate_sheet(String filename, String sheetname, Integer lineid, String linename) {  
41 - Map<String, Object> rtn = new HashMap<>();  
42 - try {  
43 - ttInfoDetailService.validateExcelSheet(filename, sheetname, lineid, linename);  
44 - rtn.put("status", ResponseCode.SUCCESS);  
45 - } catch (Exception exp) {  
46 - rtn.put("status", ResponseCode.ERROR);  
47 - rtn.put("msg", exp.getMessage());  
48 - }  
49 - return rtn;  
50 - }  
51 -  
52 - /**  
53 - * 验证关联的线路标准信息(以后放到规则引擎里去做)。  
54 - * @param lineinfoid  
55 - * @return  
56 - */  
57 - @RequestMapping(value = "/validate/lineinfo", method = RequestMethod.GET)  
58 - public Map<String, Object> validate_lineInfo(Integer lineinfoid) {  
59 - Map<String, Object> rtn = new HashMap<>();  
60 - try {  
61 - ttInfoDetailService.validateAssoLineInfo(lineinfoid);  
62 - rtn.put("status", ResponseCode.SUCCESS);  
63 - } catch (Exception exp) {  
64 - rtn.put("status", ResponseCode.ERROR);  
65 - rtn.put("msg", exp.getMessage());  
66 - }  
67 - return rtn;  
68 - }  
69 -  
70 - /**  
71 - * 获取时刻表明细编辑信息。  
72 - * @param xlid 线路id  
73 - * @param ttid 时刻表id  
74 - * @return  
75 - */  
76 - @RequestMapping(value = "/edit/{xlid}/{ttid}", method = RequestMethod.GET)  
77 - public Map<String, Object> getEditInfo(@PathVariable("xlid") Integer xlid,  
78 - @PathVariable("ttid") Long ttid) {  
79 - Map<String, Object> rtn = new HashMap<>();  
80 - try {  
81 - TTInfoDetailService.EditInfo editInfo = ttInfoDetailService.getEditInfo(xlid, ttid);  
82 - rtn.put("status", ResponseCode.SUCCESS);  
83 - rtn.put("data", editInfo);  
84 - } catch (Exception exp) {  
85 - rtn.put("status", ResponseCode.ERROR);  
86 - rtn.put("msg", exp.getMessage());  
87 - }  
88 - return rtn;  
89 - }  
90 -  
91 -} 1 +package com.bsth.controller.schedule.core;
  2 +
  3 +import com.bsth.common.ResponseCode;
  4 +import com.bsth.controller.schedule.BController;
  5 +import com.bsth.entity.schedule.TTInfoDetail;
  6 +import com.bsth.service.schedule.TTInfoDetailService;
  7 +import org.springframework.beans.factory.annotation.Autowired;
  8 +import org.springframework.web.bind.annotation.PathVariable;
  9 +import org.springframework.web.bind.annotation.RequestMapping;
  10 +import org.springframework.web.bind.annotation.RequestMethod;
  11 +import org.springframework.web.bind.annotation.RestController;
  12 +
  13 +import java.util.HashMap;
  14 +import java.util.List;
  15 +import java.util.Map;
  16 +
  17 +/**
  18 + * Created by xu on 17/1/4.
  19 + */
  20 +@RestController
  21 +@RequestMapping("tidc")
  22 +public class TTInfoDetailController extends BController<TTInfoDetail, Long> {
  23 + @Autowired
  24 + private TTInfoDetailService ttInfoDetailService;
  25 +
  26 + @RequestMapping(value = "/bcdetail", method = RequestMethod.GET)
  27 + public List<TTInfoDetail> findBcdetails(Integer xlId, Long ttinfoId, Long lpId) {
  28 + return ttInfoDetailService.findBcdetails(xlId, ttinfoId, lpId);
  29 + }
  30 +
  31 + /**
  32 + * 验证sheet(以后放到规则引擎里去做)。
  33 + * @param filename excel文件全路径名
  34 + * @param sheetname sheet名字
  35 + * @param lineid 线路id
  36 + * @param linename 线路名称
  37 + * @return
  38 + */
  39 + @RequestMapping(value = "/validate/sheet", method = RequestMethod.POST)
  40 + public Map<String, Object> validate_sheet(String filename, String sheetname, Integer lineid, String linename) {
  41 + Map<String, Object> rtn = new HashMap<>();
  42 + try {
  43 + ttInfoDetailService.validateExcelSheet(filename, sheetname, lineid, linename);
  44 + rtn.put("status", ResponseCode.SUCCESS);
  45 + } catch (Exception exp) {
  46 + rtn.put("status", ResponseCode.ERROR);
  47 + rtn.put("msg", exp.getMessage());
  48 + }
  49 + return rtn;
  50 + }
  51 +
  52 + /**
  53 + * 验证关联的线路标准信息(以后放到规则引擎里去做)。
  54 + * @param lineinfoid
  55 + * @return
  56 + */
  57 + @RequestMapping(value = "/validate/lineinfo", method = RequestMethod.GET)
  58 + public Map<String, Object> validate_lineInfo(Integer lineinfoid) {
  59 + Map<String, Object> rtn = new HashMap<>();
  60 + try {
  61 + ttInfoDetailService.validateAssoLineInfo(lineinfoid);
  62 + rtn.put("status", ResponseCode.SUCCESS);
  63 + } catch (Exception exp) {
  64 + rtn.put("status", ResponseCode.ERROR);
  65 + rtn.put("msg", exp.getMessage());
  66 + }
  67 + return rtn;
  68 + }
  69 +
  70 + /**
  71 + * 获取时刻表明细编辑信息。
  72 + * @param xlid 线路id
  73 + * @param ttid 时刻表id
  74 + * @return
  75 + */
  76 + @RequestMapping(value = "/edit/{xlid}/{ttid}", method = RequestMethod.GET)
  77 + public Map<String, Object> getEditInfo(@PathVariable("xlid") Integer xlid,
  78 + @PathVariable("ttid") Long ttid) {
  79 + Map<String, Object> rtn = new HashMap<>();
  80 + try {
  81 + TTInfoDetailService.EditInfo editInfo = ttInfoDetailService.getEditInfo(xlid, ttid);
  82 + rtn.put("status", ResponseCode.SUCCESS);
  83 + rtn.put("data", editInfo);
  84 + } catch (Exception exp) {
  85 + rtn.put("status", ResponseCode.ERROR);
  86 + rtn.put("msg", exp.getMessage());
  87 + }
  88 + return rtn;
  89 + }
  90 +
  91 +}
src/main/java/com/bsth/controller/sys/DutyEmployeeController.java
1 -package com.bsth.controller.sys;  
2 -  
3 -import com.bsth.controller.BaseController;  
4 -import com.bsth.entity.sys.DutyEmployee;  
5 -import com.bsth.service.sys.DutyEmployeeService;  
6 -import org.springframework.beans.factory.annotation.Autowired;  
7 -import org.springframework.web.bind.annotation.RequestMapping;  
8 -import org.springframework.web.bind.annotation.RequestParam;  
9 -import org.springframework.web.bind.annotation.RestController;  
10 -  
11 -import java.util.List;  
12 -  
13 -/**  
14 - * Created by panzhao on 2017/1/5.  
15 - */  
16 -@RestController  
17 -@RequestMapping("dutyEmployee")  
18 -public class DutyEmployeeController extends BaseController<DutyEmployee, Long> {  
19 -  
20 - @Autowired  
21 - DutyEmployeeService dutyEmployeeService;  
22 -  
23 - @RequestMapping(value = "queryByLineAndTime")  
24 - public List<DutyEmployee> getDutyEmployee(@RequestParam String lineCode, @RequestParam String startTime, @RequestParam String endTime) {  
25 - return dutyEmployeeService.getDutyEmployee(lineCode, startTime, endTime);  
26 - }  
27 -} 1 +package com.bsth.controller.sys;
  2 +
  3 +import com.bsth.controller.BaseController;
  4 +import com.bsth.entity.sys.DutyEmployee;
  5 +import com.bsth.service.sys.DutyEmployeeService;
  6 +import org.springframework.beans.factory.annotation.Autowired;
  7 +import org.springframework.web.bind.annotation.RequestMapping;
  8 +import org.springframework.web.bind.annotation.RequestParam;
  9 +import org.springframework.web.bind.annotation.RestController;
  10 +
  11 +import java.util.List;
  12 +
  13 +/**
  14 + * Created by panzhao on 2017/1/5.
  15 + */
  16 +@RestController
  17 +@RequestMapping("dutyEmployee")
  18 +public class DutyEmployeeController extends BaseController<DutyEmployee, Long> {
  19 +
  20 + @Autowired
  21 + DutyEmployeeService dutyEmployeeService;
  22 +
  23 + @RequestMapping(value = "queryByLineAndTime")
  24 + public List<DutyEmployee> getDutyEmployee(@RequestParam String lineCode, @RequestParam String startTime, @RequestParam String endTime) {
  25 + return dutyEmployeeService.getDutyEmployee(lineCode, startTime, endTime);
  26 + }
  27 +}
src/main/java/com/bsth/data/BasicData.java
@@ -261,26 +261,26 @@ public class BasicData implements CommandLineRunner { @@ -261,26 +261,26 @@ public class BasicData implements CommandLineRunner {
261 /** 261 /**
262 * 加载运管处的站点及序号 262 * 加载运管处的站点及序号
263 * 上行从1开始,下行顺序续编 263 * 上行从1开始,下行顺序续编
264 -  
265 - List<Object[]> ygcLines = stationRouteRepository.findAllLineWithYgc();  
266 - if(ygcLines != null && ygcLines.size() > 0){  
267 - int size = ygcLines.size();  
268 - Object[] tempArray ;  
269 - int num = 1;  
270 - String key;  
271 - String lineCode = "";  
272 - for (int i = 0; i < size; i ++){  
273 - tempArray = ygcLines.get(i);  
274 - if(lineCode.equals("")){  
275 - lineCode = tempArray[0]+"";  
276 - }else if(!lineCode.equals(tempArray[0]+"")){  
277 - num = 1;  
278 - lineCode = tempArray[0]+"";  
279 - }  
280 - key = tempArray[0] + "_"+tempArray[1] + "_"+tempArray[2];  
281 - tempStationName2YgcNumber.put(key,num++);  
282 - }  
283 - }*/ 264 + */
  265 + List<Object[]> ygcLines = stationRouteRepository.findAllLineWithYgc();
  266 + if(ygcLines != null && ygcLines.size() > 0){
  267 + int size = ygcLines.size();
  268 + Object[] tempArray ;
  269 + int num = 1;
  270 + String key;
  271 + String lineCode = "";
  272 + for (int i = 0; i < size; i ++){
  273 + tempArray = ygcLines.get(i);
  274 + if(lineCode.equals("")){
  275 + lineCode = tempArray[0]+"";
  276 + }else if(!lineCode.equals(tempArray[0]+"")){
  277 + num = 1;
  278 + lineCode = tempArray[0]+"";
  279 + }
  280 + key = tempArray[0] + "_"+tempArray[1] + "_"+tempArray[2];
  281 + tempStationName2YgcNumber.put(key,num++);
  282 + }
  283 + }
284 } 284 }
285 285
286 lineId2CodeMap = biMap; 286 lineId2CodeMap = biMap;
src/main/java/com/bsth/data/gpsdata/arrival/handlers/InOutStationSignalHandle.java
1 -package com.bsth.data.gpsdata.arrival.handlers;  
2 -  
3 -import com.bsth.data.LineConfigData;  
4 -import com.bsth.data.gpsdata.GpsEntity;  
5 -import com.bsth.data.gpsdata.arrival.SignalHandle;  
6 -import com.bsth.data.gpsdata.arrival.utils.CircleQueue;  
7 -import com.bsth.data.gpsdata.arrival.utils.ScheduleSignalState;  
8 -import com.bsth.data.gpsdata.arrival.utils.SignalSchPlanMatcher;  
9 -import com.bsth.data.schedule.DayOfSchedule;  
10 -import com.bsth.entity.realcontrol.LineConfig;  
11 -import com.bsth.entity.realcontrol.ScheduleRealInfo;  
12 -import com.bsth.service.directive.DirectiveService;  
13 -import com.bsth.websocket.handler.SendUtils;  
14 -import org.apache.commons.lang3.StringUtils;  
15 -import org.slf4j.Logger;  
16 -import org.slf4j.LoggerFactory;  
17 -import org.springframework.beans.factory.annotation.Autowired;  
18 -import org.springframework.stereotype.Component;  
19 -  
20 -/**  
21 - * 进出站动作处理  
22 - * Created by panzhao on 2016/12/27.  
23 - */  
24 -@Component  
25 -public class InOutStationSignalHandle extends SignalHandle{  
26 -  
27 - Logger logger = LoggerFactory.getLogger(this.getClass());  
28 -  
29 - @Autowired  
30 - DayOfSchedule dayOfSchedule;  
31 -  
32 - @Autowired  
33 - LineConfigData lineConfigData;  
34 -  
35 - @Autowired  
36 - SendUtils sendUtils;  
37 -  
38 - @Autowired  
39 - DirectiveService directiveService;  
40 -  
41 - @Autowired  
42 - ScheduleSignalState scheduleSignalState;  
43 -  
44 - @Autowired  
45 - SignalSchPlanMatcher signalSchPlanMatcher;  
46 -  
47 - private final static int MAX_BEFORE_TIME = 1000 * 60 * 72;  
48 -  
49 - @Override  
50 - public boolean handle(GpsEntity gps, CircleQueue<GpsEntity> prevs) {  
51 - //忽略漂移信号  
52 - if(isDriftSignal(gps))  
53 - return false;  
54 -  
55 - //从异常状态恢复的第一个信号  
56 - if(abnormalRecovery(gps, prevs)){  
57 - //回溯一下之前的轨迹  
58 - scheduleSignalState.signalRetrospect(gps);  
59 - }  
60 -  
61 - if(isNotEmpty(prevs)){  
62 - GpsEntity prev = prevs.getTail();  
63 - if(isOutStation(gps, prev))  
64 - outStation(gps, prev);  
65 -  
66 -  
67 - if(isInStation(gps, prev))  
68 - inStation(gps, prev);  
69 - }  
70 -  
71 - return true;  
72 - }  
73 -  
74 - private boolean isOutStation(GpsEntity gps, GpsEntity prev){  
75 - //从站内到站外  
76 - if(prev.getInstation() > 0 && gps.getInstation() == 0)  
77 - return true;  
78 -  
79 - //从站内到另一个站内  
80 - if(prev.getInstation() > 0 && gps.getInstation() > 0  
81 - && !prev.getStopNo().equals(gps.getStopNo()))  
82 - return true;  
83 - return false;  
84 - }  
85 -  
86 - private boolean isInStation(GpsEntity gps, GpsEntity prev){  
87 - //从站外到站内  
88 - if(prev.getInstation() == 0 && gps.getInstation() > 0  
89 - /*&& !prev.getStopNo().equals(gps.getStopNo())*/){  
90 - return true;  
91 - }  
92 -  
93 - //从站内到另一个站内  
94 - if(prev.getInstation() > 0 && gps.getInstation() > 0  
95 - && !prev.getStopNo().equals(gps.getStopNo()))  
96 - return true;  
97 - return false;  
98 - }  
99 -  
100 - /**  
101 - * 出站  
102 - * @param gps 当前点  
103 - * @param prev 上一个点  
104 - */  
105 - private void outStation(GpsEntity gps, GpsEntity prev) {  
106 - ScheduleRealInfo sch = dayOfSchedule.executeCurr(gps.getNbbm());  
107 - String qdzCode = sch.getQdzCode();  
108 -  
109 - //首班出场最多提前1.2小时  
110 - if(dayOfSchedule.isFirstOut(sch) && sch.getDfsjT() - gps.getTimestamp() > MAX_BEFORE_TIME)  
111 - return;  
112 -  
113 - //起点发车  
114 - if(qdzCode != null && prev.getStopNo().equals(qdzCode)  
115 - && !willDepart(gps, prev, sch)){  
116 -  
117 - //发车班次匹配  
118 - signalSchPlanMatcher.outMatch(gps, sch);  
119 - sch = dayOfSchedule.executeCurr(gps.getNbbm());  
120 -  
121 - //实发时间不覆盖  
122 - if(StringUtils.isNotEmpty(sch.getFcsjActual()))  
123 - return;  
124 -  
125 - //实发时间  
126 - sch.setFcsjActualAll(gps.getTimestamp());  
127 - //通知客户端  
128 - sendUtils.sendFcsj(sch);  
129 - //持久化  
130 - dayOfSchedule.save(sch);  
131 -  
132 - //出站既出场  
133 - outStationAndOutPark(sch);  
134 - logger.info("班次:" + sch.getDfsj() + "发车, 时间:" + sch.getFcsjActual());  
135 - }  
136 - else if(sch.getBcType().equals("out")){  
137 - ScheduleRealInfo next = dayOfSchedule.nextSame(sch);  
138 - if(prev.getStopNo().equals(next.getQdzCode())){  
139 - //发下一个班次  
140 - dayOfSchedule.addExecPlan(next);  
141 - outStation(gps, prev);  
142 - }  
143 - }  
144 - }  
145 -  
146 -  
147 - private void outStationAndOutPark(ScheduleRealInfo sch){  
148 - LineConfig config = lineConfigData.get(sch.getXlBm());  
149 - if (config != null && config.getOutConfig() == 2) {  
150 - //出站既出场  
151 - ScheduleRealInfo schPrev = dayOfSchedule.prev(sch);  
152 - if (schPrev != null && schPrev.getBcType().equals("out")) {  
153 - schPrev.setFcsjActualAll(sch.getFcsjActualTime());  
154 - schPrev.setZdsjActualAll(sch.getFcsjActualTime());  
155 -  
156 - sendUtils.refreshSch(schPrev);  
157 - dayOfSchedule.save(schPrev);  
158 - }  
159 - }  
160 - }  
161 -  
162 - /**  
163 - * 进站  
164 - * @param gps 当前点  
165 - * @param prev 上一个点  
166 - */  
167 - private void inStation(GpsEntity gps, GpsEntity prev){  
168 - ScheduleRealInfo sch = dayOfSchedule.executeCurr(gps.getNbbm());  
169 -  
170 - if(gps.getStopNo().equals(sch.getZdzCode())){  
171 -  
172 - //实达时间不覆盖  
173 - if(StringUtils.isNotEmpty(sch.getZdsjActual()))  
174 - return;  
175 -  
176 - sch.setZdsjActualAll(gps.getTimestamp());  
177 - //已完成班次数  
178 - int doneSum = dayOfSchedule.doneSum(sch.getClZbh());  
179 - ScheduleRealInfo next = dayOfSchedule.next(sch);  
180 - //通知客户端  
181 - sendUtils.sendZdsj(sch, next, doneSum);  
182 - //持久化  
183 - dayOfSchedule.save(sch);  
184 - //下发调度指令  
185 - directiveService.send60Dispatch(next, doneSum, "到站@系统");  
186 -  
187 - //准备执行下一个班次  
188 - if (next != null) {  
189 - next.setQdzArrDatesj(sch.getZdsjActual());  
190 - dayOfSchedule.addExecPlan(next);  
191 - //进站既进场  
192 - inStationAndInPark(sch, next);  
193 - //将gps转换为下一个班次走向的站内信号  
194 - transformUpdown(gps, sch);  
195 - }  
196 - }  
197 - else if(sch.getFcsjActual() == null){  
198 - //有进站,但班次没有实发,向前追溯一下信号  
199 - scheduleSignalState.signalRetrospect(gps, sch);  
200 - }  
201 - }  
202 -  
203 - /**  
204 - * 进站既进场  
205 - * @param sch  
206 - */  
207 - private void inStationAndInPark(ScheduleRealInfo sch, ScheduleRealInfo next){  
208 - LineConfig config = lineConfigData.get(sch.getXlBm());  
209 - if (next.getBcType().equals("in") &&  
210 - config != null && config.getOutConfig() == 2) {  
211 - next.setFcsjActualAll(sch.getZdsjActualTime());  
212 - next.setZdsjActualAll(sch.getZdsjActualTime());  
213 -  
214 - sendUtils.refreshSch(next);  
215 - dayOfSchedule.save(next);  
216 - }  
217 - }  
218 -  
219 - /**  
220 - * 发车漂移判定(这里出现的误判,由车辆到达中途站的时候补偿)  
221 - * @param gps  
222 - * @param prev  
223 - * @param task  
224 - * @return  
225 - */  
226 - private boolean willDepart(GpsEntity gps, GpsEntity prev, Object task){  
227 -  
228 - /*ScheduleRealInfo sch = (ScheduleRealInfo) task;  
229 - ScheduleRealInfo prevTask = dayOfSchedule.prev(sch);  
230 - if(prevTask == null || prevTask.getBcType().equals("out"))  
231 - return false;  
232 -  
233 - //计划停站时间  
234 - int stopTimePlan = (int) (sch.getDfsjT() - prevTask.getZdsjT());  
235 -  
236 - if(stopTimePlan < 1000 * 60 * 10)  
237 - return false;  
238 -  
239 - //实际停站时间  
240 - if(prevTask.getZdsjActual() != null){  
241 - int actualTime = (int) (gps.getTimestamp() - prevTask.getZdsjActualTime());  
242 -  
243 - if(actualTime < stopTimePlan * 0.8){  
244 - logger.info("漂移判定");  
245 -  
246 - return true;  
247 - }  
248 - }*/  
249 - return false;  
250 - } 1 +package com.bsth.data.gpsdata.arrival.handlers;
  2 +
  3 +import com.bsth.data.LineConfigData;
  4 +import com.bsth.data.gpsdata.GpsEntity;
  5 +import com.bsth.data.gpsdata.arrival.SignalHandle;
  6 +import com.bsth.data.gpsdata.arrival.utils.CircleQueue;
  7 +import com.bsth.data.gpsdata.arrival.utils.ScheduleSignalState;
  8 +import com.bsth.data.gpsdata.arrival.utils.SignalSchPlanMatcher;
  9 +import com.bsth.data.schedule.DayOfSchedule;
  10 +import com.bsth.entity.realcontrol.LineConfig;
  11 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  12 +import com.bsth.service.directive.DirectiveService;
  13 +import com.bsth.websocket.handler.SendUtils;
  14 +import org.apache.commons.lang3.StringUtils;
  15 +import org.slf4j.Logger;
  16 +import org.slf4j.LoggerFactory;
  17 +import org.springframework.beans.factory.annotation.Autowired;
  18 +import org.springframework.stereotype.Component;
  19 +
  20 +/**
  21 + * 进出站动作处理
  22 + * Created by panzhao on 2016/12/27.
  23 + */
  24 +@Component
  25 +public class InOutStationSignalHandle extends SignalHandle{
  26 +
  27 + Logger logger = LoggerFactory.getLogger(this.getClass());
  28 +
  29 + @Autowired
  30 + DayOfSchedule dayOfSchedule;
  31 +
  32 + @Autowired
  33 + LineConfigData lineConfigData;
  34 +
  35 + @Autowired
  36 + SendUtils sendUtils;
  37 +
  38 + @Autowired
  39 + DirectiveService directiveService;
  40 +
  41 + @Autowired
  42 + ScheduleSignalState scheduleSignalState;
  43 +
  44 + @Autowired
  45 + SignalSchPlanMatcher signalSchPlanMatcher;
  46 +
  47 + private final static int MAX_BEFORE_TIME = 1000 * 60 * 72;
  48 +
  49 + @Override
  50 + public boolean handle(GpsEntity gps, CircleQueue<GpsEntity> prevs) {
  51 + //忽略漂移信号
  52 + if(isDriftSignal(gps))
  53 + return false;
  54 +
  55 + //从异常状态恢复的第一个信号
  56 + if(abnormalRecovery(gps, prevs)){
  57 + //回溯一下之前的轨迹
  58 + scheduleSignalState.signalRetrospect(gps);
  59 + }
  60 +
  61 + if(isNotEmpty(prevs)){
  62 + GpsEntity prev = prevs.getTail();
  63 + if(isOutStation(gps, prev))
  64 + outStation(gps, prev);
  65 +
  66 +
  67 + if(isInStation(gps, prev))
  68 + inStation(gps, prev);
  69 + }
  70 +
  71 + return true;
  72 + }
  73 +
  74 + private boolean isOutStation(GpsEntity gps, GpsEntity prev){
  75 + //从站内到站外
  76 + if(prev.getInstation() > 0 && gps.getInstation() == 0)
  77 + return true;
  78 +
  79 + //从站内到另一个站内
  80 + if(prev.getInstation() > 0 && gps.getInstation() > 0
  81 + && !prev.getStopNo().equals(gps.getStopNo()))
  82 + return true;
  83 + return false;
  84 + }
  85 +
  86 + private boolean isInStation(GpsEntity gps, GpsEntity prev){
  87 + //从站外到站内
  88 + if(prev.getInstation() == 0 && gps.getInstation() > 0
  89 + /*&& !prev.getStopNo().equals(gps.getStopNo())*/){
  90 + return true;
  91 + }
  92 +
  93 + //从站内到另一个站内
  94 + if(prev.getInstation() > 0 && gps.getInstation() > 0
  95 + && !prev.getStopNo().equals(gps.getStopNo()))
  96 + return true;
  97 + return false;
  98 + }
  99 +
  100 + /**
  101 + * 出站
  102 + * @param gps 当前点
  103 + * @param prev 上一个点
  104 + */
  105 + private void outStation(GpsEntity gps, GpsEntity prev) {
  106 + ScheduleRealInfo sch = dayOfSchedule.executeCurr(gps.getNbbm());
  107 + String qdzCode = sch.getQdzCode();
  108 +
  109 + //首班出场最多提前1.2小时
  110 + if(dayOfSchedule.isFirstOut(sch) && sch.getDfsjT() - gps.getTimestamp() > MAX_BEFORE_TIME)
  111 + return;
  112 +
  113 + //起点发车
  114 + if(qdzCode != null && prev.getStopNo().equals(qdzCode)
  115 + && !willDepart(gps, prev, sch)){
  116 +
  117 + //发车班次匹配
  118 + signalSchPlanMatcher.outMatch(gps, sch);
  119 + sch = dayOfSchedule.executeCurr(gps.getNbbm());
  120 +
  121 + //实发时间不覆盖
  122 + if(StringUtils.isNotEmpty(sch.getFcsjActual()))
  123 + return;
  124 +
  125 + //实发时间
  126 + sch.setFcsjActualAll(gps.getTimestamp());
  127 + //通知客户端
  128 + sendUtils.sendFcsj(sch);
  129 + //持久化
  130 + dayOfSchedule.save(sch);
  131 +
  132 + //出站既出场
  133 + outStationAndOutPark(sch);
  134 + logger.info("班次:" + sch.getDfsj() + "发车, 时间:" + sch.getFcsjActual());
  135 + }
  136 + else if(sch.getBcType().equals("out")){
  137 + ScheduleRealInfo next = dayOfSchedule.nextSame(sch);
  138 + if(prev.getStopNo().equals(next.getQdzCode())){
  139 + //发下一个班次
  140 + dayOfSchedule.addExecPlan(next);
  141 + outStation(gps, prev);
  142 + }
  143 + }
  144 + }
  145 +
  146 +
  147 + private void outStationAndOutPark(ScheduleRealInfo sch){
  148 + LineConfig config = lineConfigData.get(sch.getXlBm());
  149 + if (config != null && config.getOutConfig() == 2) {
  150 + //出站既出场
  151 + ScheduleRealInfo schPrev = dayOfSchedule.prev(sch);
  152 + if (schPrev != null && schPrev.getBcType().equals("out")) {
  153 + schPrev.setFcsjActualAll(sch.getFcsjActualTime());
  154 + schPrev.setZdsjActualAll(sch.getFcsjActualTime());
  155 +
  156 + sendUtils.refreshSch(schPrev);
  157 + dayOfSchedule.save(schPrev);
  158 + }
  159 + }
  160 + }
  161 +
  162 + /**
  163 + * 进站
  164 + * @param gps 当前点
  165 + * @param prev 上一个点
  166 + */
  167 + private void inStation(GpsEntity gps, GpsEntity prev){
  168 + ScheduleRealInfo sch = dayOfSchedule.executeCurr(gps.getNbbm());
  169 +
  170 + if(gps.getStopNo().equals(sch.getZdzCode())){
  171 +
  172 + //进场最多提前1.2小时
  173 + if(sch.getBcType().equals("in") && sch.getZdsjT() - gps.getTimestamp() > MAX_BEFORE_TIME)
  174 + return;
  175 +
  176 + //实达时间不覆盖
  177 + if(StringUtils.isNotEmpty(sch.getZdsjActual()))
  178 + return;
  179 +
  180 + sch.setZdsjActualAll(gps.getTimestamp());
  181 + //已完成班次数
  182 + int doneSum = dayOfSchedule.doneSum(sch.getClZbh());
  183 + ScheduleRealInfo next = dayOfSchedule.next(sch);
  184 + //通知客户端
  185 + sendUtils.sendZdsj(sch, next, doneSum);
  186 + //持久化
  187 + dayOfSchedule.save(sch);
  188 + //下发调度指令
  189 + directiveService.send60Dispatch(next, doneSum, "到站@系统");
  190 +
  191 + //准备执行下一个班次
  192 + if (next != null) {
  193 + next.setQdzArrDatesj(sch.getZdsjActual());
  194 + dayOfSchedule.addExecPlan(next);
  195 + //进站既进场
  196 + inStationAndInPark(sch, next);
  197 + //将gps转换为下一个班次走向的站内信号
  198 + transformUpdown(gps, sch);
  199 + }
  200 + }
  201 + else if(sch.getFcsjActual() == null){
  202 + //有进站,但班次没有实发,向前追溯一下信号
  203 + scheduleSignalState.signalRetrospect(gps, sch);
  204 + }
  205 + }
  206 +
  207 + /**
  208 + * 进站既进场
  209 + * @param sch
  210 + */
  211 + private void inStationAndInPark(ScheduleRealInfo sch, ScheduleRealInfo next){
  212 + LineConfig config = lineConfigData.get(sch.getXlBm());
  213 + if (next.getBcType().equals("in") &&
  214 + config != null && config.getOutConfig() == 2) {
  215 + next.setFcsjActualAll(sch.getZdsjActualTime());
  216 + next.setZdsjActualAll(sch.getZdsjActualTime());
  217 +
  218 + sendUtils.refreshSch(next);
  219 + dayOfSchedule.save(next);
  220 + }
  221 + }
  222 +
  223 + /**
  224 + * 发车漂移判定(这里出现的误判,由车辆到达中途站的时候补偿)
  225 + * @param gps
  226 + * @param prev
  227 + * @param task
  228 + * @return
  229 + */
  230 + private boolean willDepart(GpsEntity gps, GpsEntity prev, Object task){
  231 +
  232 + /*ScheduleRealInfo sch = (ScheduleRealInfo) task;
  233 + ScheduleRealInfo prevTask = dayOfSchedule.prev(sch);
  234 + if(prevTask == null || prevTask.getBcType().equals("out"))
  235 + return false;
  236 +
  237 + //计划停站时间
  238 + int stopTimePlan = (int) (sch.getDfsjT() - prevTask.getZdsjT());
  239 +
  240 + if(stopTimePlan < 1000 * 60 * 10)
  241 + return false;
  242 +
  243 + //实际停站时间
  244 + if(prevTask.getZdsjActual() != null){
  245 + int actualTime = (int) (gps.getTimestamp() - prevTask.getZdsjActualTime());
  246 +
  247 + if(actualTime < stopTimePlan * 0.8){
  248 + logger.info("漂移判定");
  249 +
  250 + return true;
  251 + }
  252 + }*/
  253 + return false;
  254 + }
251 } 255 }
252 \ No newline at end of file 256 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/arrival/utils/ScheduleSignalState.java
1 -package com.bsth.data.gpsdata.arrival.utils;  
2 -  
3 -import com.bsth.data.LineConfigData;  
4 -import com.bsth.data.gpsdata.GpsEntity;  
5 -import com.bsth.data.gpsdata.SignalStateData;  
6 -import com.bsth.data.gpsdata.arrival.GeoCacheData;  
7 -import com.bsth.data.gpsdata.arrival.entity.RouteReverse;  
8 -import com.bsth.data.gpsdata.arrival.entity.SignalAbnormal;  
9 -import com.bsth.data.gpsdata.arrival.entity.SignalState;  
10 -import com.bsth.data.schedule.DayOfSchedule;  
11 -import com.bsth.entity.realcontrol.LineConfig;  
12 -import com.bsth.entity.realcontrol.ScheduleRealInfo;  
13 -import org.slf4j.Logger;  
14 -import org.slf4j.LoggerFactory;  
15 -import org.springframework.beans.factory.annotation.Autowired;  
16 -import org.springframework.stereotype.Component;  
17 -  
18 -/**  
19 - * 班次信号状态分析  
20 - * Created by panzhao on 2016/12/29.  
21 - */  
22 -@Component  
23 -public class ScheduleSignalState {  
24 -  
25 - @Autowired  
26 - DayOfSchedule dayOfSchedule;  
27 -  
28 - Logger logger = LoggerFactory.getLogger(this.getClass());  
29 -  
30 - @Autowired  
31 - LineConfigData lineConfigData;  
32 -  
33 - @Autowired  
34 - SignalStateData signalStateData;  
35 -  
36 - /**  
37 - * 路由反向分析  
38 - */  
39 - public void reverseAnalyse(RouteReverse reverse) {  
40 - ScheduleRealInfo sch = dayOfSchedule.executeCurr(reverse.getNbbm());  
41 -  
42 - String bcType = sch.getBcType();  
43 -  
44 - switch (bcType) {  
45 - case "out":  
46 - outReverseAnalyse(sch, reverse);  
47 - break;  
48 - case "normal":  
49 - normalReverseAnalyse(sch, reverse);  
50 - break;  
51 - }  
52 - }  
53 -  
54 - /**  
55 - * 出场班次路由反向分析  
56 - *  
57 - * @param sch  
58 - */  
59 - private void outReverseAnalyse(ScheduleRealInfo sch, RouteReverse reverse) {  
60 - long t = reverse.getCt();  
61 - //出场班次终点时间前,允许反向轨迹  
62 - if (sch.getZdsjT() != null && sch.getZdsjT() > t) {  
63 - return;  
64 - }  
65 -  
66 - int rt;  
67 - //从实发 到 当前时间 < 计划运送时间 * 0.9  
68 - if (sch.getFcsjActual() != null && sch.getBcsj() != null) {  
69 - rt = (int) (t - sch.getFcsjActualTime());  
70 - if (rt < sch.getBcsj() * 0.9)  
71 - return;  
72 - }  
73 -  
74 - ScheduleRealInfo next = dayOfSchedule.next(sch);  
75 - if (next.getXlDir().equals(sch.getXlDir()))  
76 - return;  
77 -  
78 - //时间足够下一个班次待发时间运行到当前站  
79 - int runTime = reverse.getCount() * 1500 * 60;  
80 - if (next.getDfsjT() + runTime < t) {  
81 - //跳到下一个班次  
82 - dayOfSchedule.addExecPlan(next);  
83 - }  
84 - }  
85 -  
86 - /**  
87 - * 正常班次路由反向分析  
88 - *  
89 - * @param sch  
90 - * @param reverse  
91 - */  
92 - private void normalReverseAnalyse(ScheduleRealInfo sch, RouteReverse reverse) {  
93 - LineConfig conf = lineConfigData.get(sch.getXlBm());  
94 -  
95 - if (conf.isReadReverse()) {  
96 - //跳下一个班次  
97 - ScheduleRealInfo next = dayOfSchedule.next(sch);  
98 - if (next != null)  
99 - dayOfSchedule.addExecPlan(next);  
100 -  
101 - //记录信号状态  
102 - SignalState signalState = SignalState.reverseSignalSTate(sch, reverse);  
103 - if(signalState != null)  
104 - signalStateData.put(signalState);  
105 - }  
106 - }  
107 -  
108 - public void signalRetrospect(GpsEntity gps) {  
109 - signalRetrospect(gps, dayOfSchedule.executeCurr(gps.getNbbm()));  
110 - }  
111 -  
112 - /**  
113 - * 信号追溯  
114 - *  
115 - * @param gps  
116 - * @param sch  
117 - */  
118 - public void signalRetrospect(GpsEntity gps, ScheduleRealInfo sch) {  
119 - //回放数据,是否有掉线或者漂移  
120 - CircleQueue<GpsEntity> queue = GeoCacheData.getGps(gps.getNbbm());  
121 - if (queue == null || queue.size() == 0 /*|| gps.getInstation() == 0*/)  
122 - return;  
123 -  
124 - //起始时间点  
125 - long st = 0;  
126 - ScheduleRealInfo prev = dayOfSchedule.prev(sch);  
127 -  
128 - if (prev != null) {  
129 - if (prev.getZdsjActual() != null)  
130 - st = prev.getZdsjActualTime();  
131 - else  
132 - st = (GeoCacheData.midwayStation(gps.getLineId(), gps.getUpDown(), sch.getQdzCode(), gps.getStopNo()).size() + 1) * (1000 * 60 * 5);  
133 - }  
134 -  
135 - Object[] tempArray = queue.getQueue();  
136 - int len = tempArray.length;  
137 -  
138 - Object[] array = new Object[len + 1];  
139 - System.arraycopy(tempArray, 0, array, 0, len);  
140 - array[len] = gps;  
141 -  
142 - String gpsState = "";  
143 - GpsEntity tempGps, nearGps = null;  
144 - int i = len - 1;  
145 - for (; i >= 0; i--) {  
146 - tempGps = (GpsEntity) array[i];  
147 -  
148 - gpsState = tempGps.getSignalState();  
149 - if (gpsState.equals("truncation"))  
150 - break;  
151 - else if (gpsState.equals("drift")) {  
152 - nearGps = (GpsEntity) array[i + 1];  
153 - break;  
154 - } else if (gpsState.equals("reconnection")) {  
155 - nearGps = tempGps;  
156 - break;  
157 - }  
158 -  
159 - if (tempGps.getTimestamp() < st)  
160 - break;  
161 - }  
162 -  
163 - if (nearGps != null && i > 0) {  
164 - createSignalAbnormal(gpsState, nearGps, i, array, sch);  
165 - }  
166 - }  
167 -  
168 - private void createSignalAbnormal(String gpsState, GpsEntity nearGps, int i, Object[] array, ScheduleRealInfo sch) {  
169 - switch (gpsState) {  
170 - case "drift":  
171 - driftSignalAbnormal(nearGps, i, array, sch);  
172 - break;  
173 - case "reconnection":  
174 - offlineSignalAbnormal(nearGps, ((GpsEntity) array[i - 1]), sch);  
175 - break;  
176 - }  
177 - }  
178 -  
179 - /**  
180 - * 掉线异常状态记录  
181 - *  
182 - * @param e  
183 - * @param s  
184 - */  
185 - private void offlineSignalAbnormal(GpsEntity e, GpsEntity s, ScheduleRealInfo sch) {  
186 - long st = s.getTimestamp(), et = e.getTimestamp();  
187 -  
188 - //掉线超过10分钟才记录  
189 - if (et - st < (1000 * 60 * 10))  
190 - return;  
191 -  
192 - SignalAbnormal signalAbnormal = new SignalAbnormal();  
193 - signalAbnormal.setSt(st);  
194 - signalAbnormal.setEt(et);  
195 - signalAbnormal.setAbnormalType("reconnection");  
196 - signalAbnormal.setDestCode(sch.getQdzCode());  
197 - signalAbnormal.setOutOrIn(0);  
198 -  
199 - //截断GPS  
200 - e.setSignalState("truncation");  
201 -  
202 - //记录信号状态  
203 - SignalState signalState = SignalState.abnormalSignalSTate(sch, signalAbnormal);  
204 - signalStateData.put(signalState);  
205 - }  
206 -  
207 - /**  
208 - * 漂移异常状态记录  
209 - *  
210 - * @param nearGps  
211 - * @param i  
212 - * @param array  
213 - */  
214 - private void driftSignalAbnormal(GpsEntity nearGps, int i, Object[] array, ScheduleRealInfo sch) {  
215 - GpsEntity gps, s = null;  
216 - //找到漂移开始时间  
217 - for (; i >= 0; i--) {  
218 - gps = (GpsEntity) array[i];  
219 -  
220 - if (!gps.getSignalState().equals("drift") || i == 0  
221 - || gps.getSignalState().equals("truncation")) {  
222 - s = gps;  
223 - break;  
224 - }  
225 - }  
226 -  
227 - long st = s.getTimestamp(), et = nearGps.getTimestamp();  
228 - if (et - st < (1000 * 60 * 3))  
229 - return;  
230 - /*if (s != null){  
231 - st = s.getTimestamp();  
232 - //漂移小于3分钟  
233 - if(et - st < (1000 * 60 * 3))  
234 - return;  
235 - }*/  
236 -  
237 -  
238 - SignalAbnormal signalAbnormal = new SignalAbnormal();  
239 - signalAbnormal.setSt(st);  
240 - signalAbnormal.setEt(et);  
241 - signalAbnormal.setAbnormalType("drift");  
242 - signalAbnormal.setDestCode(sch.getQdzCode());  
243 - signalAbnormal.setOutOrIn(0);  
244 -  
245 - //截断GPS  
246 - nearGps.setSignalState("truncation");  
247 -  
248 - //记录信号状态  
249 - SignalState signalState = SignalState.abnormalSignalSTate(sch, signalAbnormal);  
250 - signalStateData.put(signalState);  
251 - } 1 +package com.bsth.data.gpsdata.arrival.utils;
  2 +
  3 +import com.bsth.data.LineConfigData;
  4 +import com.bsth.data.gpsdata.GpsEntity;
  5 +import com.bsth.data.gpsdata.SignalStateData;
  6 +import com.bsth.data.gpsdata.arrival.GeoCacheData;
  7 +import com.bsth.data.gpsdata.arrival.entity.RouteReverse;
  8 +import com.bsth.data.gpsdata.arrival.entity.SignalAbnormal;
  9 +import com.bsth.data.gpsdata.arrival.entity.SignalState;
  10 +import com.bsth.data.schedule.DayOfSchedule;
  11 +import com.bsth.entity.realcontrol.LineConfig;
  12 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  13 +import org.slf4j.Logger;
  14 +import org.slf4j.LoggerFactory;
  15 +import org.springframework.beans.factory.annotation.Autowired;
  16 +import org.springframework.stereotype.Component;
  17 +
  18 +/**
  19 + * 班次信号状态分析
  20 + * Created by panzhao on 2016/12/29.
  21 + */
  22 +@Component
  23 +public class ScheduleSignalState {
  24 +
  25 + @Autowired
  26 + DayOfSchedule dayOfSchedule;
  27 +
  28 + Logger logger = LoggerFactory.getLogger(this.getClass());
  29 +
  30 + @Autowired
  31 + LineConfigData lineConfigData;
  32 +
  33 + @Autowired
  34 + SignalStateData signalStateData;
  35 +
  36 + /**
  37 + * 路由反向分析
  38 + */
  39 + public void reverseAnalyse(RouteReverse reverse) {
  40 + ScheduleRealInfo sch = dayOfSchedule.executeCurr(reverse.getNbbm());
  41 +
  42 + String bcType = sch.getBcType();
  43 +
  44 + switch (bcType) {
  45 + case "out":
  46 + outReverseAnalyse(sch, reverse);
  47 + break;
  48 + case "normal":
  49 + normalReverseAnalyse(sch, reverse);
  50 + break;
  51 + }
  52 + }
  53 +
  54 + /**
  55 + * 出场班次路由反向分析
  56 + *
  57 + * @param sch
  58 + */
  59 + private void outReverseAnalyse(ScheduleRealInfo sch, RouteReverse reverse) {
  60 + long t = reverse.getCt();
  61 + //出场班次终点时间前,允许反向轨迹
  62 + if (sch.getZdsjT() != null && sch.getZdsjT() > t) {
  63 + return;
  64 + }
  65 +
  66 + int rt;
  67 + //从实发 到 当前时间 < 计划运送时间 * 0.9
  68 + if (sch.getFcsjActual() != null && sch.getBcsj() != null) {
  69 + rt = (int) (t - sch.getFcsjActualTime());
  70 + if (rt < sch.getBcsj() * 0.9)
  71 + return;
  72 + }
  73 +
  74 + ScheduleRealInfo next = dayOfSchedule.next(sch);
  75 + if (next.getXlDir().equals(sch.getXlDir()))
  76 + return;
  77 +
  78 + //时间足够下一个班次待发时间运行到当前站
  79 + int runTime = reverse.getCount() * 1500 * 60;
  80 + if (next.getDfsjT() + runTime < t) {
  81 + //跳到下一个班次
  82 + dayOfSchedule.addExecPlan(next);
  83 + }
  84 + }
  85 +
  86 + /**
  87 + * 正常班次路由反向分析
  88 + *
  89 + * @param sch
  90 + * @param reverse
  91 + */
  92 + private void normalReverseAnalyse(ScheduleRealInfo sch, RouteReverse reverse) {
  93 + LineConfig conf = lineConfigData.get(sch.getXlBm());
  94 +
  95 + if (conf.isReadReverse()) {
  96 + //跳下一个班次
  97 + ScheduleRealInfo next = dayOfSchedule.next(sch);
  98 + if (next != null)
  99 + dayOfSchedule.addExecPlan(next);
  100 +
  101 + //记录信号状态
  102 + SignalState signalState = SignalState.reverseSignalSTate(sch, reverse);
  103 + if(signalState != null)
  104 + signalStateData.put(signalState);
  105 + }
  106 + }
  107 +
  108 + public void signalRetrospect(GpsEntity gps) {
  109 + signalRetrospect(gps, dayOfSchedule.executeCurr(gps.getNbbm()));
  110 + }
  111 +
  112 + /**
  113 + * 信号追溯
  114 + *
  115 + * @param gps
  116 + * @param sch
  117 + */
  118 + public void signalRetrospect(GpsEntity gps, ScheduleRealInfo sch) {
  119 + //回放数据,是否有掉线或者漂移
  120 + CircleQueue<GpsEntity> queue = GeoCacheData.getGps(gps.getNbbm());
  121 + if (queue == null || queue.size() == 0 /*|| gps.getInstation() == 0*/)
  122 + return;
  123 +
  124 + //起始时间点
  125 + long st = 0;
  126 + ScheduleRealInfo prev = dayOfSchedule.prev(sch);
  127 +
  128 + if (prev != null) {
  129 + if (prev.getZdsjActual() != null)
  130 + st = prev.getZdsjActualTime();
  131 + else
  132 + st = (GeoCacheData.midwayStation(gps.getLineId(), gps.getUpDown(), sch.getQdzCode(), gps.getStopNo()).size() + 1) * (1000 * 60 * 5);
  133 + }
  134 +
  135 + Object[] tempArray = queue.getQueue();
  136 + int len = tempArray.length;
  137 +
  138 + Object[] array = new Object[len + 1];
  139 + System.arraycopy(tempArray, 0, array, 0, len);
  140 + array[len] = gps;
  141 +
  142 + String gpsState = "";
  143 + GpsEntity tempGps, nearGps = null;
  144 + int i = len - 1;
  145 + for (; i >= 0; i--) {
  146 + tempGps = (GpsEntity) array[i];
  147 +
  148 + gpsState = tempGps.getSignalState();
  149 + if (gpsState.equals("truncation"))
  150 + break;
  151 + else if (gpsState.equals("drift")) {
  152 + nearGps = (GpsEntity) array[i + 1];
  153 + break;
  154 + } else if (gpsState.equals("reconnection")) {
  155 + nearGps = tempGps;
  156 + break;
  157 + }
  158 +
  159 + if (tempGps.getTimestamp() < st)
  160 + break;
  161 + }
  162 +
  163 + if (nearGps != null && i > 0) {
  164 + createSignalAbnormal(gpsState, nearGps, i, array, sch);
  165 + }
  166 + }
  167 +
  168 + private void createSignalAbnormal(String gpsState, GpsEntity nearGps, int i, Object[] array, ScheduleRealInfo sch) {
  169 + switch (gpsState) {
  170 + case "drift":
  171 + driftSignalAbnormal(nearGps, i, array, sch);
  172 + break;
  173 + case "reconnection":
  174 + offlineSignalAbnormal(nearGps, ((GpsEntity) array[i - 1]), sch);
  175 + break;
  176 + }
  177 + }
  178 +
  179 + /**
  180 + * 掉线异常状态记录
  181 + *
  182 + * @param e
  183 + * @param s
  184 + */
  185 + private void offlineSignalAbnormal(GpsEntity e, GpsEntity s, ScheduleRealInfo sch) {
  186 + long st = s.getTimestamp(), et = e.getTimestamp();
  187 +
  188 + //掉线超过10分钟才记录
  189 + if (et - st < (1000 * 60 * 10))
  190 + return;
  191 +
  192 + SignalAbnormal signalAbnormal = new SignalAbnormal();
  193 + signalAbnormal.setSt(st);
  194 + signalAbnormal.setEt(et);
  195 + signalAbnormal.setAbnormalType("reconnection");
  196 + signalAbnormal.setDestCode(sch.getQdzCode());
  197 + signalAbnormal.setOutOrIn(0);
  198 +
  199 + //截断GPS
  200 + e.setSignalState("truncation");
  201 +
  202 + //记录信号状态
  203 + SignalState signalState = SignalState.abnormalSignalSTate(sch, signalAbnormal);
  204 + signalStateData.put(signalState);
  205 + }
  206 +
  207 + /**
  208 + * 漂移异常状态记录
  209 + *
  210 + * @param nearGps
  211 + * @param i
  212 + * @param array
  213 + */
  214 + private void driftSignalAbnormal(GpsEntity nearGps, int i, Object[] array, ScheduleRealInfo sch) {
  215 + GpsEntity gps, s = null;
  216 + //找到漂移开始时间
  217 + for (; i >= 0; i--) {
  218 + gps = (GpsEntity) array[i];
  219 +
  220 + if (!gps.getSignalState().equals("drift") || i == 0
  221 + || gps.getSignalState().equals("truncation")) {
  222 + s = gps;
  223 + break;
  224 + }
  225 + }
  226 +
  227 + long st = s.getTimestamp(), et = nearGps.getTimestamp();
  228 + if (et - st < (1000 * 60 * 3))
  229 + return;
  230 + /*if (s != null){
  231 + st = s.getTimestamp();
  232 + //漂移小于3分钟
  233 + if(et - st < (1000 * 60 * 3))
  234 + return;
  235 + }*/
  236 +
  237 +
  238 + SignalAbnormal signalAbnormal = new SignalAbnormal();
  239 + signalAbnormal.setSt(st);
  240 + signalAbnormal.setEt(et);
  241 + signalAbnormal.setAbnormalType("drift");
  242 + signalAbnormal.setDestCode(sch.getQdzCode());
  243 + signalAbnormal.setOutOrIn(0);
  244 +
  245 + //截断GPS
  246 + nearGps.setSignalState("truncation");
  247 +
  248 + //记录信号状态
  249 + SignalState signalState = SignalState.abnormalSignalSTate(sch, signalAbnormal);
  250 + signalStateData.put(signalState);
  251 + }
252 } 252 }
253 \ No newline at end of file 253 \ No newline at end of file
src/main/java/com/bsth/entity/realcontrol/SvgAttribute.java 0 → 100644
  1 +package com.bsth.entity.realcontrol;
  2 +
  3 +import javax.persistence.Entity;
  4 +import javax.persistence.Id;
  5 +import javax.persistence.Table;
  6 +
  7 +/**
  8 + * 主页SVG模拟图属性设置
  9 + * Created by panzhao on 2017/1/6.
  10 + */
  11 +@Entity
  12 +@Table(name = "bsth_c_svg_attr")
  13 +public class SvgAttribute {
  14 +
  15 + @Id
  16 + private String lineCode;
  17 +
  18 + /**
  19 + * 要隐藏的站点编码 , 号分割多个
  20 + */
  21 + private String hideStations;
  22 +
  23 + /**
  24 + * 站点别名 json对象字符串
  25 + */
  26 + private String nicknames;
  27 +
  28 + public String getLineCode() {
  29 + return lineCode;
  30 + }
  31 +
  32 + public void setLineCode(String lineCode) {
  33 + this.lineCode = lineCode;
  34 + }
  35 +
  36 + public String getHideStations() {
  37 + return hideStations;
  38 + }
  39 +
  40 + public void setHideStations(String hideStations) {
  41 + this.hideStations = hideStations;
  42 + }
  43 +
  44 + public String getNicknames() {
  45 + return nicknames;
  46 + }
  47 +
  48 + public void setNicknames(String nicknames) {
  49 + this.nicknames = nicknames;
  50 + }
  51 +}
src/main/java/com/bsth/entity/sys/DutyEmployee.java
1 -package com.bsth.entity.sys;  
2 -  
3 -import javax.persistence.*;  
4 -  
5 -/**  
6 - * 当班调度员  
7 - * Created by panzhao on 2017/1/5.  
8 - */  
9 -@Entity  
10 -@Table(name = "bsth_c_sys_duty_employee")  
11 -public class DutyEmployee {  
12 -  
13 - @Id  
14 - @GeneratedValue  
15 - private Long id;  
16 -  
17 - /**  
18 - * 员工ID  
19 - */  
20 - private Integer uId;  
21 -  
22 - /**  
23 - * 员工姓名  
24 - */  
25 - private String uName;  
26 -  
27 - /**  
28 - * 线路编码 ,号分割多个  
29 - */  
30 - private String codeIdx;  
31 -  
32 - /**  
33 - * 登入线调时间  
34 - */  
35 - private Long ts;  
36 -  
37 - /**  
38 - * 是否主调模式进入  
39 - */  
40 - private boolean main;  
41 -  
42 - public Integer getuId() {  
43 - return uId;  
44 - }  
45 -  
46 - public void setuId(Integer uId) {  
47 - this.uId = uId;  
48 - }  
49 -  
50 - public String getuName() {  
51 - return uName;  
52 - }  
53 -  
54 - public void setuName(String uName) {  
55 - this.uName = uName;  
56 - }  
57 -  
58 - public String getCodeIdx() {  
59 - return codeIdx;  
60 - }  
61 -  
62 - public void setCodeIdx(String codeIdx) {  
63 - this.codeIdx = codeIdx;  
64 - }  
65 -  
66 - public Long getTs() {  
67 - return ts;  
68 - }  
69 -  
70 - public void setTs(Long ts) {  
71 - this.ts = ts;  
72 - }  
73 -  
74 - public boolean isMain() {  
75 - return main;  
76 - }  
77 -  
78 - public void setMain(boolean main) {  
79 - this.main = main;  
80 - }  
81 -  
82 - public Long getId() {  
83 - return id;  
84 - }  
85 -  
86 - public void setId(Long id) {  
87 - this.id = id;  
88 - }  
89 -} 1 +package com.bsth.entity.sys;
  2 +
  3 +import javax.persistence.*;
  4 +
  5 +/**
  6 + * 当班调度员
  7 + * Created by panzhao on 2017/1/5.
  8 + */
  9 +@Entity
  10 +@Table(name = "bsth_c_sys_duty_employee")
  11 +public class DutyEmployee {
  12 +
  13 + @Id
  14 + @GeneratedValue
  15 + private Long id;
  16 +
  17 + /**
  18 + * 员工ID
  19 + */
  20 + private Integer uId;
  21 +
  22 + /**
  23 + * 员工姓名
  24 + */
  25 + private String uName;
  26 +
  27 + /**
  28 + * 线路编码 ,号分割多个
  29 + */
  30 + private String codeIdx;
  31 +
  32 + /**
  33 + * 登入线调时间
  34 + */
  35 + private Long ts;
  36 +
  37 + /**
  38 + * 是否主调模式进入
  39 + */
  40 + private boolean main;
  41 +
  42 + public Integer getuId() {
  43 + return uId;
  44 + }
  45 +
  46 + public void setuId(Integer uId) {
  47 + this.uId = uId;
  48 + }
  49 +
  50 + public String getuName() {
  51 + return uName;
  52 + }
  53 +
  54 + public void setuName(String uName) {
  55 + this.uName = uName;
  56 + }
  57 +
  58 + public String getCodeIdx() {
  59 + return codeIdx;
  60 + }
  61 +
  62 + public void setCodeIdx(String codeIdx) {
  63 + this.codeIdx = codeIdx;
  64 + }
  65 +
  66 + public Long getTs() {
  67 + return ts;
  68 + }
  69 +
  70 + public void setTs(Long ts) {
  71 + this.ts = ts;
  72 + }
  73 +
  74 + public boolean isMain() {
  75 + return main;
  76 + }
  77 +
  78 + public void setMain(boolean main) {
  79 + this.main = main;
  80 + }
  81 +
  82 + public Long getId() {
  83 + return id;
  84 + }
  85 +
  86 + public void setId(Long id) {
  87 + this.id = id;
  88 + }
  89 +}
src/main/java/com/bsth/repository/realcontrol/ScheduleRealInfoRepository.java
@@ -110,7 +110,7 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI @@ -110,7 +110,7 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI
110 @Query(value="select s from ScheduleRealInfo s where s.xlBm like %?1% and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2") 110 @Query(value="select s from ScheduleRealInfo s where s.xlBm like %?1% and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2")
111 List<ScheduleRealInfo> scheduleByDateAndLine(String line,String date); 111 List<ScheduleRealInfo> scheduleByDateAndLine(String line,String date);
112 112
113 - @Query(value="select new map(s.scheduleDate as scheduleDate,s.xlBm as xlBm,s.clZbh as clZbh,s.jGh as jGh) from ScheduleRealInfo s where s.xlBm like %?1% and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 GROUP BY xlBm,clZbh,jGh,scheduleDate,jGh ORDER BY xlBm,clZbh") 113 + @Query(value="select new map(s.scheduleDate as scheduleDate,s.xlBm as xlBm,s.clZbh as clZbh,s.jGh as jGh) from ScheduleRealInfo s where s.xlBm like %?1% and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 GROUP BY xlBm,clZbh,jGh,scheduleDate,jGh ORDER BY realExecDate,fcsj,xlBm,clZbh")
114 List<Map<String,Object>> yesterdayDataList(String line,String date); 114 List<Map<String,Object>> yesterdayDataList(String line,String date);
115 115
116 @Query(value="select s from ScheduleRealInfo s where DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?1 ORDER BY xlBm,lpName,clZbh,xlDir") 116 @Query(value="select s from ScheduleRealInfo s where DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?1 ORDER BY xlBm,lpName,clZbh,xlDir")
src/main/java/com/bsth/repository/realcontrol/SvgAttributeRepository.java 0 → 100644
  1 +package com.bsth.repository.realcontrol;
  2 +
  3 +import com.bsth.entity.realcontrol.SvgAttribute;
  4 +import com.bsth.repository.BaseRepository;
  5 +import org.springframework.data.jpa.repository.Query;
  6 +import org.springframework.stereotype.Repository;
  7 +
  8 +import java.util.List;
  9 +
  10 +/**
  11 + * Created by panzhao on 2017/1/8.
  12 + */
  13 +@Repository
  14 +public interface SvgAttributeRepository extends BaseRepository<SvgAttribute, String> {
  15 + @Query("select s from SvgAttribute s where s.lineCode in ?1")
  16 + List<SvgAttribute> findSvgAttr(List<String> lineCodes);
  17 +}
src/main/java/com/bsth/repository/sys/DutyEmployeeRepository.java
1 -package com.bsth.repository.sys;  
2 -  
3 -import com.bsth.entity.sys.DutyEmployee;  
4 -import com.bsth.repository.BaseRepository;  
5 -import org.springframework.data.jpa.repository.Query;  
6 -import org.springframework.stereotype.Repository;  
7 -  
8 -import java.util.List;  
9 -  
10 -/**  
11 - * Created by panzhao on 2017/1/5.  
12 - */  
13 -@Repository  
14 -public interface DutyEmployeeRepository extends BaseRepository<DutyEmployee, Long>{  
15 -  
16 - @Query("select t from DutyEmployee t where t.codeIdx like %?1% and t.ts > ?2 and t.ts < ?3")  
17 - List<DutyEmployee> findByLineAndTime(String lineCode, long st, long et);  
18 -} 1 +package com.bsth.repository.sys;
  2 +
  3 +import com.bsth.entity.sys.DutyEmployee;
  4 +import com.bsth.repository.BaseRepository;
  5 +import org.springframework.data.jpa.repository.Query;
  6 +import org.springframework.stereotype.Repository;
  7 +
  8 +import java.util.List;
  9 +
  10 +/**
  11 + * Created by panzhao on 2017/1/5.
  12 + */
  13 +@Repository
  14 +public interface DutyEmployeeRepository extends BaseRepository<DutyEmployee, Long>{
  15 +
  16 + @Query("select t from DutyEmployee t where t.codeIdx like %?1% and t.ts > ?2 and t.ts < ?3")
  17 + List<DutyEmployee> findByLineAndTime(String lineCode, long st, long et);
  18 +}
src/main/java/com/bsth/service/impl/StationRouteServiceImpl.java
1 package com.bsth.service.impl; 1 package com.bsth.service.impl;
2 2
3 -import java.io.ByteArrayInputStream;  
4 -import java.io.File;  
5 -import java.io.InputStream;  
6 -import java.text.DecimalFormat;  
7 -import java.util.ArrayList;  
8 -import java.util.HashMap;  
9 -import java.util.List;  
10 -import java.util.Map;  
11 -import java.util.Properties;  
12 -  
13 -import org.springframework.beans.factory.annotation.Autowired;  
14 -import org.springframework.data.jpa.repository.EntityGraph;  
15 -import org.springframework.stereotype.Service;  
16 -  
17 -import com.alibaba.fastjson.JSON;  
18 -import com.alibaba.fastjson.JSONArray;  
19 -import com.alibaba.fastjson.serializer.PropertyFilter;  
20 import com.bsth.common.ResponseCode; 3 import com.bsth.common.ResponseCode;
21 import com.bsth.entity.Line; 4 import com.bsth.entity.Line;
22 import com.bsth.entity.Station; 5 import com.bsth.entity.Station;
@@ -30,7 +13,14 @@ import com.bsth.util.FTPClientUtils; @@ -30,7 +13,14 @@ import com.bsth.util.FTPClientUtils;
30 import com.bsth.util.PackTarGZUtils; 13 import com.bsth.util.PackTarGZUtils;
31 import com.bsth.util.db.DBUtils_MS; 14 import com.bsth.util.db.DBUtils_MS;
32 import com.google.common.base.Splitter; 15 import com.google.common.base.Splitter;
33 -import com.google.common.collect.Lists; 16 +import org.springframework.beans.factory.annotation.Autowired;
  17 +import org.springframework.stereotype.Service;
  18 +
  19 +import java.io.ByteArrayInputStream;
  20 +import java.io.File;
  21 +import java.io.InputStream;
  22 +import java.text.DecimalFormat;
  23 +import java.util.*;
34 24
35 /** 25 /**
36 * 26 *
@@ -985,6 +975,8 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -985,6 +975,8 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
985 List<String> idx = Splitter.on(',').splitToList(lineIds); 975 List<String> idx = Splitter.on(',').splitToList(lineIds);
986 //路由 976 //路由
987 List<StationRoute> list = new ArrayList<>(); 977 List<StationRoute> list = new ArrayList<>();
  978 +
  979 +
988 /** 980 /**
989 * in 查询符 无法和 @EntityGraph 同时配合使用,这可能是一个bug 981 * in 查询符 无法和 @EntityGraph 同时配合使用,这可能是一个bug
990 * 暂时只能循环单线路查询 982 * 暂时只能循环单线路查询
@@ -993,9 +985,12 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -993,9 +985,12 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
993 for(String id : idx){ 985 for(String id : idx){
994 list.addAll(repository.findByLineCode(id)); 986 list.addAll(repository.findByLineCode(id));
995 } 987 }
996 - 988 +
  989 + for(StationRoute sr : list){
  990 + sr.setLine(null);
  991 + }
997 //过滤部分字段 992 //过滤部分字段
998 - String jsonStr = JSON.toJSONString(list, new PropertyFilter() { 993 + /*String jsonStr = JSON.toJSONString(list, new PropertyFilter() {
999 994
1000 @Override 995 @Override
1001 public boolean apply(Object object, String name, Object value) { 996 public boolean apply(Object object, String name, Object value) {
@@ -1003,10 +998,10 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -1003,10 +998,10 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
1003 return false; 998 return false;
1004 return true; 999 return true;
1005 } 1000 }
1006 - }); 1001 + });*/
1007 1002
1008 rs.put("status", ResponseCode.SUCCESS); 1003 rs.put("status", ResponseCode.SUCCESS);
1009 - rs.put("list", jsonStr); 1004 + rs.put("list", list);
1010 }catch(Exception e){ 1005 }catch(Exception e){
1011 logger.error("", e); 1006 logger.error("", e);
1012 rs.put("status", ResponseCode.ERROR); 1007 rs.put("status", ResponseCode.ERROR);
src/main/java/com/bsth/service/impl/TrafficManageServiceImpl.java
@@ -390,36 +390,44 @@ public class TrafficManageServiceImpl implements TrafficManageService{ @@ -390,36 +390,44 @@ public class TrafficManageServiceImpl implements TrafficManageService{
390 Map<String,Object> map = new HashMap<String,Object>(); 390 Map<String,Object> map = new HashMap<String,Object>();
391 for(Map<String,Object> schRealInfo:listGroup){ 391 for(Map<String,Object> schRealInfo:listGroup){
392 if(schRealInfo != null){ 392 if(schRealInfo != null){
  393 + map.put("insideCode_eq", schRealInfo.get("clZbh")+"");
  394 + Cars car = carsRepository.findOne(new CustomerSpecs<Cars>(map));
  395 + /**
  396 + * 如果car==null,则说明该车辆是从线调中换车功能中加进去的,
  397 + * 在cars基础信息中查不到车辆的信息,所以忽略该车辆
  398 + */
  399 + if(car == null){
  400 + continue;
  401 + }
393 //计算总公里和空驶公里,营运公里=总公里-空驶公里 402 //计算总公里和空驶公里,营运公里=总公里-空驶公里
394 double totalKilometers = 0,emptyKilometers =0; 403 double totalKilometers = 0,emptyKilometers =0;
395 sf.append("<LCYH>"); 404 sf.append("<LCYH>");
396 - map.put("insideCode_eq", schRealInfo.get("clZbh")+"");  
397 - Cars car = carsRepository.findOne(new CustomerSpecs<Cars>(map));  
398 -// Cars car = carsRepository.findCarByClzbh(schRealInfo.getClZbh());  
399 sf.append("<RQ>"+date+"</RQ>"); 405 sf.append("<RQ>"+date+"</RQ>");
400 sf.append("<XLBM>"+BasicData.lineCode2ShangHaiCodeMap.get(schRealInfo.get("xlBm"))+"</XLBM>"); 406 sf.append("<XLBM>"+BasicData.lineCode2ShangHaiCodeMap.get(schRealInfo.get("xlBm"))+"</XLBM>");
401 sf.append("<CPH>"+car.getCarPlate()+"</CPH>"); 407 sf.append("<CPH>"+car.getCarPlate()+"</CPH>");
402 - for(ScheduleRealInfo scheduleRealInfo:list){  
403 - if((schRealInfo.get("xlBm")+"").equals(scheduleRealInfo.getXlBm()) && (schRealInfo.get("clZbh")+"")  
404 - .equals(scheduleRealInfo.getClZbh())){  
405 - Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();  
406 - //如果没有子任务,里程就是已执行(Status=2);有子任务的,忽略主任务,子任务的烂班  
407 - if(childTaskPlans.isEmpty()){  
408 - if(scheduleRealInfo.getStatus() == 2){  
409 - totalKilometers += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc();  
410 - if(scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")  
411 - || scheduleRealInfo.getBcType().equals("venting")){  
412 - emptyKilometers += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc(); 408 + if(list != null && list.size() > 0){
  409 + for(ScheduleRealInfo scheduleRealInfo:list){
  410 + if((schRealInfo.get("xlBm")+"").equals(scheduleRealInfo.getXlBm()) && (schRealInfo.get("clZbh")+"")
  411 + .equals(scheduleRealInfo.getClZbh())){
  412 + Set<ChildTaskPlan> childTaskPlans = scheduleRealInfo.getcTasks();
  413 + //如果没有子任务,里程就是已执行(Status=2);有子任务的,忽略主任务,子任务的烂班
  414 + if(childTaskPlans.isEmpty()){
  415 + if(scheduleRealInfo.getStatus() == 2){
  416 + totalKilometers += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc();
  417 + if(scheduleRealInfo.getBcType().equals("in") || scheduleRealInfo.getBcType().equals("out")
  418 + || scheduleRealInfo.getBcType().equals("venting")){
  419 + emptyKilometers += scheduleRealInfo.getJhlc()==null?0.0:scheduleRealInfo.getJhlc();
  420 + }
413 } 421 }
414 - }  
415 - }else{  
416 - Iterator<ChildTaskPlan> it = childTaskPlans.iterator();  
417 - while(it.hasNext()){  
418 - ChildTaskPlan childTaskPlan = it.next();  
419 - if(!childTaskPlan.isDestroy()){  
420 - totalKilometers += childTaskPlan.getMileage()==null?0.0:childTaskPlan.getMileage();  
421 - if(childTaskPlan.getMileageType().equals("empty")){  
422 - emptyKilometers += childTaskPlan.getMileage()==null?0.0:childTaskPlan.getMileage();; 422 + }else{
  423 + Iterator<ChildTaskPlan> it = childTaskPlans.iterator();
  424 + while(it.hasNext()){
  425 + ChildTaskPlan childTaskPlan = it.next();
  426 + if(!childTaskPlan.isDestroy()){
  427 + totalKilometers += childTaskPlan.getMileage()==null?0.0:childTaskPlan.getMileage();
  428 + if(childTaskPlan.getMileageType().equals("empty")){
  429 + emptyKilometers += childTaskPlan.getMileage()==null?0.0:childTaskPlan.getMileage();;
  430 + }
423 } 431 }
424 } 432 }
425 } 433 }
@@ -604,8 +612,8 @@ public class TrafficManageServiceImpl implements TrafficManageService{ @@ -604,8 +612,8 @@ public class TrafficManageServiceImpl implements TrafficManageService{
604 schedulePlanInfo.getXlBm(), schedulePlanInfo.getXlDir(), schedulePlanInfo.getQdzName())).append("</ZDXH>"); 612 schedulePlanInfo.getXlBm(), schedulePlanInfo.getXlDir(), schedulePlanInfo.getQdzName())).append("</ZDXH>");
605 sBuffer.append("<JHFCSJ>").append(schedulePlanInfo.getFcsj()).append("</JHFCSJ>"); 613 sBuffer.append("<JHFCSJ>").append(schedulePlanInfo.getFcsj()).append("</JHFCSJ>");
606 sBuffer.append("<DDZDMC>").append(schedulePlanInfo.getZdzName()).append("</DDZDMC>"); 614 sBuffer.append("<DDZDMC>").append(schedulePlanInfo.getZdzName()).append("</DDZDMC>");
607 - sBuffer.append("<ZDXH>").append(getYgcStationNumByLineCodeAndDirectionAndStationName(  
608 - schedulePlanInfo.getXlBm(), schedulePlanInfo.getXlDir(), schedulePlanInfo.getZdzName())).append("</ZDXH>"); 615 + sBuffer.append("<DDXH>").append(getYgcStationNumByLineCodeAndDirectionAndStationName(
  616 + schedulePlanInfo.getXlBm(), schedulePlanInfo.getXlDir(), schedulePlanInfo.getZdzName())).append("</DDXH>");
609 sBuffer.append("<JHDDSJ>").append(calcDdsj(schedulePlanInfo.getFcsj(),schedulePlanInfo.getBcsj())) 617 sBuffer.append("<JHDDSJ>").append(calcDdsj(schedulePlanInfo.getFcsj(),schedulePlanInfo.getBcsj()))
610 .append("</JHDDSJ>"); 618 .append("</JHDDSJ>");
611 sBuffer.append("</BC>"); 619 sBuffer.append("</BC>");
src/main/java/com/bsth/service/oil/impl/YlbServiceImpl.java
@@ -132,7 +132,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS @@ -132,7 +132,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
132 t.setJcsx(Integer.parseInt(map.get("seqNumber").toString())); 132 t.setJcsx(Integer.parseInt(map.get("seqNumber").toString()));
133 t.setSsgsdm(map.get("company")==null?"":map.get("company").toString()); 133 t.setSsgsdm(map.get("company")==null?"":map.get("company").toString());
134 t.setFgsdm(map.get("bCompany")==null?"":map.get("bCompany").toString()); 134 t.setFgsdm(map.get("bCompany")==null?"":map.get("bCompany").toString());
135 - t.setRq(dBefore); 135 + t.setRq(sdf.parse(rq));
136 repository.save(t); 136 repository.save(t);
137 result = "success"; 137 result = "success";
138 } catch (Exception e) { 138 } catch (Exception e) {
src/main/java/com/bsth/service/realcontrol/ScheduleRealInfoService.java
@@ -15,7 +15,7 @@ public interface ScheduleRealInfoService extends BaseService&lt;ScheduleRealInfo, L @@ -15,7 +15,7 @@ public interface ScheduleRealInfoService extends BaseService&lt;ScheduleRealInfo, L
15 15
16 Map<String, Collection<ScheduleRealInfo>> findByLines(String lines); 16 Map<String, Collection<ScheduleRealInfo>> findByLines(String lines);
17 17
18 - Map<String, Object> outgoAdjust(Long id, String remarks, String dfsj/*,String nbbm,String jsy,String spy*/); 18 + Map<String, Object> outgoAdjust(Long id, String remarks, String dfsj, String bcType);
19 19
20 Map<String, Object> destroy(String idsStr/*, int spaceAdjust*/, String remarks, String reason/*, int spaceNum*/); 20 Map<String, Object> destroy(String idsStr/*, int spaceAdjust*/, String remarks, String reason/*, int spaceNum*/);
21 21
@@ -128,4 +128,8 @@ public interface ScheduleRealInfoService extends BaseService&lt;ScheduleRealInfo, L @@ -128,4 +128,8 @@ public interface ScheduleRealInfoService extends BaseService&lt;ScheduleRealInfo, L
128 Map<String,Object> changeBcType(Long id, String bcType, String remarks); 128 Map<String,Object> changeBcType(Long id, String bcType, String remarks);
129 129
130 Map<String,Object> historySave(ScheduleRealInfo sch); 130 Map<String,Object> historySave(ScheduleRealInfo sch);
  131 +
  132 + Map<String,Object> svgAttr(String jsonStr);
  133 +
  134 + Map<String,Object> findSvgAttr(String idx);
131 } 135 }