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 106 @RequestParam(defaultValue = "DESC") String direction){
107 107  
108 108 Direction d;
109   - try {
  109 +// try {
110 110 String rq=map.get("rq").toString();
111 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 127 if(null != direction && direction.equals("ASC"))
128 128 d = Direction.ASC;
129 129 else
... ...
src/main/java/com/bsth/controller/realcontrol/ScheduleRealInfoController.java
... ... @@ -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 39 * @Title: outgoAdjust @Description: TODO(待发调整) @param @param id
62 40 * 主键 @param @param remarks 备注 @param @param dfsj 待发时间(HH:mm) @throws
63 41 */
64 42 @RequestMapping(value = "/outgoAdjust", method = RequestMethod.POST)
65 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 103 public List<Map<String, String>> sreachVehic(@RequestParam String nbbm) {
126 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 108 * @Title: realOutAdjust
... ... @@ -427,4 +392,14 @@ public class ScheduleRealInfoController extends BaseController&lt;ScheduleRealInfo,
427 392 }
428 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 261 /**
262 262 * 加载运管处的站点及序号
263 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 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 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 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 110 @Query(value="select s from ScheduleRealInfo s where s.xlBm like %?1% and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2")
111 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 114 List<Map<String,Object>> yesterdayDataList(String line,String date);
115 115  
116 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 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 3 import com.bsth.common.ResponseCode;
21 4 import com.bsth.entity.Line;
22 5 import com.bsth.entity.Station;
... ... @@ -30,7 +13,14 @@ import com.bsth.util.FTPClientUtils;
30 13 import com.bsth.util.PackTarGZUtils;
31 14 import com.bsth.util.db.DBUtils_MS;
32 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 975 List<String> idx = Splitter.on(',').splitToList(lineIds);
986 976 //路由
987 977 List<StationRoute> list = new ArrayList<>();
  978 +
  979 +
988 980 /**
989 981 * in 查询符 无法和 @EntityGraph 同时配合使用,这可能是一个bug
990 982 * 暂时只能循环单线路查询
... ... @@ -993,9 +985,12 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
993 985 for(String id : idx){
994 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 995 @Override
1001 996 public boolean apply(Object object, String name, Object value) {
... ... @@ -1003,10 +998,10 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
1003 998 return false;
1004 999 return true;
1005 1000 }
1006   - });
  1001 + });*/
1007 1002  
1008 1003 rs.put("status", ResponseCode.SUCCESS);
1009   - rs.put("list", jsonStr);
  1004 + rs.put("list", list);
1010 1005 }catch(Exception e){
1011 1006 logger.error("", e);
1012 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 390 Map<String,Object> map = new HashMap<String,Object>();
391 391 for(Map<String,Object> schRealInfo:listGroup){
392 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 403 double totalKilometers = 0,emptyKilometers =0;
395 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 405 sf.append("<RQ>"+date+"</RQ>");
400 406 sf.append("<XLBM>"+BasicData.lineCode2ShangHaiCodeMap.get(schRealInfo.get("xlBm"))+"</XLBM>");
401 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 612 schedulePlanInfo.getXlBm(), schedulePlanInfo.getXlDir(), schedulePlanInfo.getQdzName())).append("</ZDXH>");
605 613 sBuffer.append("<JHFCSJ>").append(schedulePlanInfo.getFcsj()).append("</JHFCSJ>");
606 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 617 sBuffer.append("<JHDDSJ>").append(calcDdsj(schedulePlanInfo.getFcsj(),schedulePlanInfo.getBcsj()))
610 618 .append("</JHDDSJ>");
611 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 132 t.setJcsx(Integer.parseInt(map.get("seqNumber").toString()));
133 133 t.setSsgsdm(map.get("company")==null?"":map.get("company").toString());
134 134 t.setFgsdm(map.get("bCompany")==null?"":map.get("bCompany").toString());
135   - t.setRq(dBefore);
  135 + t.setRq(sdf.parse(rq));
136 136 repository.save(t);
137 137 result = "success";
138 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 15  
16 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 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 128 Map<String,Object> changeBcType(Long id, String bcType, String remarks);
129 129  
130 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 }
... ...