Commit 7b042a0153f7ca5c5d64f0b400eaa7b7c17e939e

Authored by 王通
1 parent 09374973

1.

src/main/java/com/bsth/controller/realcontrol/ServiceDataInterface.java
1 -package com.bsth.controller.realcontrol;  
2 -  
3 -import com.alibaba.fastjson.JSON;  
4 -import com.alibaba.fastjson.JSONArray;  
5 -import com.alibaba.fastjson.JSONObject;  
6 -import com.bsth.controller.realcontrol.dto.ChangePersonCar;  
7 -import com.bsth.controller.realcontrol.dto.DftzAndDestroy;  
8 -import com.bsth.data.BasicData;  
9 -import com.bsth.data.directive.DayOfDirectives;  
10 -import com.bsth.data.directive.DirectiveCreator;  
11 -import com.bsth.data.directive.GatewayHttpUtils;  
12 -import com.bsth.data.gpsdata_v2.GpsRealData;  
13 -import com.bsth.data.gpsdata_v2.entity.GpsEntity;  
14 -import com.bsth.data.schedule.DayOfSchedule;  
15 -import com.bsth.data.schedule.external.TccExternalService;  
16 -import com.bsth.entity.Line;  
17 -import com.bsth.entity.directive.D60;  
18 -import com.bsth.entity.realcontrol.ScheduleRealInfo;  
19 -import com.bsth.repository.LineRepository;  
20 -import com.bsth.repository.directive.D60Repository;  
21 -import com.bsth.service.LineService;  
22 -import com.bsth.websocket.handler.SendUtils;  
23 -import com.fasterxml.jackson.databind.ObjectMapper;  
24 -import com.google.common.base.Splitter;  
25 -import org.apache.commons.lang3.StringEscapeUtils;  
26 -import org.apache.commons.lang3.StringUtils;  
27 -import org.slf4j.Logger;  
28 -import org.slf4j.LoggerFactory;  
29 -import org.springframework.beans.factory.annotation.Autowired;  
30 -import org.springframework.web.bind.annotation.*;  
31 -  
32 -import java.io.IOException;  
33 -import java.util.*;  
34 -  
35 -/**  
36 - * 对外的营运数据接口  
37 - * Created by panzhao on 2017/3/15.  
38 - */  
39 -@RestController  
40 -@RequestMapping("/companyService")  
41 -public class ServiceDataInterface {  
42 -  
43 - private final static String SECRE_KEY = "dVPHJkWUt5FhMT7jrM2dLV7QvlHAmZFd42rs1P0usBx8A7HZki";  
44 -  
45 - Logger logger = LoggerFactory.getLogger(this.getClass());  
46 -  
47 - @Autowired  
48 - DayOfSchedule dayOfSchedule;  
49 -  
50 - @Autowired  
51 - DayOfDirectives dayOfDirectives;  
52 -  
53 - @Autowired  
54 - D60Repository d60Repository;  
55 -  
56 - @Autowired  
57 - GpsRealData gpsRealData;  
58 -  
59 - @Autowired  
60 - TccExternalService tccExternalService;  
61 -  
62 - @Autowired  
63 - private SendUtils sendUtils;  
64 -  
65 -  
66 - @Autowired  
67 - LineRepository lineRepository;  
68 -  
69 - @Autowired  
70 - private LineService service;  
71 -  
72 - /**  
73 - * 获取车辆 和 当前执行班次对照信息  
74 - *  
75 - * @return  
76 - */  
77 - @RequestMapping("/execSchList")  
78 - public List<Map<String, Object>> execSchList(@RequestParam String secretKey) {  
79 - if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))  
80 - return null;  
81 -  
82 - List<Map<String, Object>> rs = new ArrayList<>();  
83 - Collection<ScheduleRealInfo> list = dayOfSchedule.execPlanMap().values();  
84 -  
85 - Map<String, Object> map;  
86 - for (ScheduleRealInfo sch : list) {  
87 - if (null == sch)  
88 - continue;  
89 - map = new HashMap<>();  
90 - map.put("clZbh", sch.getClZbh());  
91 - map.put("jGh", sch.getjGh());  
92 - map.put("jName", sch.getjName());  
93 - map.put("sGh", sch.getsGh());  
94 - map.put("sName", sch.getsName());  
95 - map.put("lpName", sch.getLpName());  
96 - map.put("xlBm", sch.getXlBm());  
97 - map.put("xlName", sch.getXlName());  
98 - map.put("xlDir", sch.getXlDir());  
99 - map.put("qdzName", sch.getQdzName());  
100 - map.put("zdzName", sch.getZdzName());  
101 - map.put("fcsj", sch.getFcsj());  
102 - map.put("dfsj", sch.getDfsj());  
103 - map.put("zdsj", sch.getZdsj());  
104 - map.put("bcType", sch.getBcType());  
105 - map.put("remarks", sch.getRemark());  
106 - map.put("status", sch.getStatus());  
107 -  
108 - //放站班次,放到的站点  
109 - map.put("majorStationName", sch.getMajorStationName());  
110 - rs.add(map);  
111 - }  
112 - return rs;  
113 - }  
114 -  
115 - @RequestMapping("/getCurrentDayPlan")  
116 - public List<ScheduleRealInfo> getCurrentDayPlan(  
117 - @RequestParam String companyId,  
118 - @RequestParam String workId,  
119 - @RequestParam String secretKey) {  
120 -  
121 - if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))  
122 - return null;  
123 -  
124 - List<ScheduleRealInfo> all = new ArrayList<>(dayOfSchedule.findByGsbm(companyId)), rs = new ArrayList<>();  
125 - for (ScheduleRealInfo sch : all) {  
126 - if (sch.getGsBm() != null  
127 - && sch.getGsBm().equals(companyId)  
128 - && sch.getjGh().equals(workId)) {  
129 - rs.add(sch);  
130 - }  
131 - }  
132 - return rs;  
133 - }  
134 -  
135 - @RequestMapping("/returnCCInfo")  
136 - public List<ScheduleRealInfo> returnCCInfo(@RequestParam String companyId, @RequestParam String secretKey) {  
137 - if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))  
138 - return null;  
139 -  
140 -  
141 - List<ScheduleRealInfo> all = new ArrayList<>(dayOfSchedule.findAll()), rs = new ArrayList<>();  
142 - for (ScheduleRealInfo sch : all) {  
143 -  
144 - if (sch.getBcType().equals("out")  
145 - && sch.getGsBm() != null  
146 - && sch.getGsBm().equals(companyId)) {  
147 - rs.add(sch);  
148 - }  
149 - }  
150 - return rs;  
151 - }  
152 -  
153 - @RequestMapping("/returnJCInfo")  
154 - public List<ScheduleRealInfo> returnJCInfo(@RequestParam String companyId, @RequestParam String secretKey) {  
155 - if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))  
156 - return null;  
157 -  
158 -  
159 - List<ScheduleRealInfo> all = new ArrayList<>(dayOfSchedule.findAll()), rs = new ArrayList<>();  
160 - for (ScheduleRealInfo sch : all) {  
161 - if (sch.getBcType().equals("in")  
162 - && sch.getGsBm() != null  
163 - && sch.getGsBm().equals(companyId)) {  
164 - rs.add(sch);  
165 - }  
166 - }  
167 - return rs;  
168 - }  
169 -  
170 - /**  
171 - * 获取全量的进出场数据, 仅供接口项目调用。 由接口项目负责对外所有场站输出  
172 - *  
173 - * @return  
174 - */  
175 - @RequestMapping("/findCurrInAndOut")  
176 - public List<ScheduleRealInfo> findCurrInAndOut(@RequestParam String secretKey) {  
177 - if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))  
178 - return null;  
179 -  
180 -  
181 - List<ScheduleRealInfo> all = new ArrayList<>(dayOfSchedule.findAll()), rs = new ArrayList<>();  
182 - for (ScheduleRealInfo sch : all) {  
183 - if (sch.getBcType().equals("in")  
184 - || sch.getBcType().equals("out")) {  
185 - rs.add(sch);  
186 - }  
187 - }  
188 - return rs;  
189 - }  
190 -  
191 - /**  
192 - * 向指定的车辆下发消息短语  
193 - *  
194 - * @return  
195 - */  
196 - @RequestMapping(value = "/send60Phrase", method = RequestMethod.POST)  
197 - public int send60Phrase(@RequestBody Map<String, String> map, @RequestParam String secretKey) {  
198 - try {  
199 - String nbbm = map.get("nbbm");  
200 - String txt = map.get("txt");  
201 - String sender = map.get("sender");  
202 - if (txt.length() > 50)  
203 - txt = txt.substring(0, 50);  
204 - if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))  
205 - return -500;  
206 -  
207 - //车辆和设备号对照  
208 - String deviceId = BasicData.deviceId2NbbmMap.inverse().get(nbbm);  
209 - if (StringUtils.isEmpty(deviceId))  
210 - return -404;  
211 -  
212 - //检查设备是否在线  
213 - long t = System.currentTimeMillis();  
214 - GpsEntity gps = gpsRealData.get(deviceId);  
215 - if (null == gps || (t - gps.getServerTimestamp()) > 1000 * 60 * 5)  
216 - return -405;  
217 -  
218 - Short dispatchInstruct = 0;//消息短语  
219 - D60 d60 = new DirectiveCreator().createD60(nbbm, txt, dispatchInstruct, gps.getUpDown(), gps.getState(), gps.getLineId());  
220 - d60.setSender(sender);  
221 - // 发送指令  
222 - int code = GatewayHttpUtils.postJson(JSON.toJSONString(d60));  
223 - d60.setHttpCode(code);  
224 -  
225 - if (code != 0)  
226 - d60.setErrorText("网关通讯失败, code: " + code);  
227 -  
228 - dayOfDirectives.put60(d60);  
229 - return d60.getMsgId();  
230 - } catch (Exception e) {  
231 - logger.error("", e);  
232 - return -500;  
233 - }  
234 - }  
235 -  
236 - /**  
237 - * 根据msg id 查询指令响应情况  
238 - *  
239 - * @param msgIds  
240 - * @return  
241 - */  
242 - @RequestMapping("/findD60Reply")  
243 - public List<Map<String, Object>> findD60Reply(@RequestParam String msgIds) {  
244 - List<Map<String, Object>> rs = new ArrayList<>();  
245 - try {  
246 - Map<String, Object> map = new HashMap();  
247 -  
248 - List<String> ids = Splitter.on(",").splitToList(msgIds);  
249 - D60 d60;  
250 - for (String id : ids) {  
251 - if (StringUtils.isEmpty(id))  
252 - continue;  
253 -  
254 - d60 = dayOfDirectives.get(Integer.parseInt(id));  
255 - if (null == d60)  
256 - continue;  
257 -  
258 - map.put("msgId", d60.getMsgId());  
259 - map.put("deviceReplyTime", d60.getReply46Time());  
260 - map.put("jsyReplyTime", d60.getReply47Time());  
261 - rs.add(map);  
262 - }  
263 - } catch (Exception e) {  
264 - logger.error("", e);  
265 - }  
266 - return rs;  
267 - }  
268 -  
269 - /**  
270 - * 获取路牌下所有班次  
271 - *  
272 - * @param lineCode  
273 - * @param lpName  
274 - * @return  
275 - */  
276 - @RequestMapping("/findByLpName")  
277 - public List<ScheduleRealInfo> findByLpName(@RequestParam String lineCode, @RequestParam String lpName, @RequestParam String secretKey) {  
278 - try {  
279 - if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))  
280 - return null;  
281 -  
282 - List<ScheduleRealInfo> list = dayOfSchedule.getLpScheduleMap().get(lineCode + "_" + lpName);  
283 - return list;  
284 - } catch (Exception e) {  
285 - logger.error("", e);  
286 - }  
287 - return null;  
288 - }  
289 -  
290 - /**  
291 - * 调整出场班次待发,并烂掉后续班次(调派用)  
292 - *  
293 - * @param dad  
294 - * @return  
295 - */  
296 - @RequestMapping(value = "/dftzAndDestroy", method = RequestMethod.POST)  
297 - public Map<String, Object> dftzAndDestroy(@RequestBody DftzAndDestroy dad, @RequestParam String secretKey) {  
298 - if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))  
299 - return null;  
300 - return tccExternalService.dftz(dad);  
301 - }  
302 -  
303 - /**  
304 - * 换人换车,(调派用)  
305 - * @return  
306 - */  
307 - @RequestMapping(value = "/tccHrhc", method = RequestMethod.POST)  
308 - public Map<String, Object> hrhc(@RequestBody String jsonStr, @RequestParam String secretKey){  
309 -  
310 - if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))  
311 - return null;  
312 -  
313 - jsonStr = StringEscapeUtils.unescapeHtml4(jsonStr);  
314 - JSONObject rootObj = JSON.parseObject(jsonStr);  
315 -  
316 - List<ChangePersonCar> cpcs = JSONArray.parseArray(rootObj.getString("cpcs"), ChangePersonCar.class);  
317 - return tccExternalService.hrhc(cpcs, rootObj.getString("tccCode"), rootObj.getString("userId"));  
318 - }  
319 -  
320 - /**  
321 - * 接收应急预案信息  
322 - * @return  
323 - */  
324 - @RequestMapping(value = "/contingencyPlan", method = RequestMethod.POST)  
325 - public Map<String, Object> contingencyPlan(@RequestBody String jsonStr, @RequestParam String secretKey){  
326 - Map<String, Object> result = new HashMap<>();  
327 - result.put("errCode", 0);  
328 - if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY)) {  
329 - result.put("errCode", 501);  
330 - result.put("msg", "无效的key");  
331 -  
332 - return result;  
333 - }  
334 -  
335 - ObjectMapper mapper = new ObjectMapper();  
336 - try {  
337 - List<Map<String,String>> emergencyList = new ArrayList();  
338 - List<Map<String,String>> emergencyListAll = new ArrayList();  
339 - List<Map> maps = mapper.readValue(jsonStr,mapper.getTypeFactory().constructParametricType(List.class, Map.class));  
340 - for (Map map : maps) {  
341 - sendUtils.sendContingencyPlan(map);  
342 - emergencyList.add((Map<String, String>) map.get("emergencyLine"));  
343 - }  
344 -  
345 - for (Map.Entry<String, String> m : BasicData.lineCode2NameMap.entrySet()){  
346 - for (Map<String,String> emer : emergencyList){  
347 - for (Map.Entry<String,String> t : emer.entrySet()){  
348 - if (m.getKey().equals(t.getKey())) {  
349 - emergencyListAll.add(emer);  
350 - Line line = lineRepository.findById(Integer.parseInt(t.getKey())).get();  
351 - line.setName(t.getValue());  
352 - Map<String, Object> status = service.update(line);  
353 - logger.info("应急接口修改线路名称-----------------------"+status.get("status"));  
354 - }  
355 - }  
356 - }  
357 - }  
358 - } catch (IOException e) {  
359 - result.put("errCode", 502);  
360 - result.put("msg", "json数据格式异常");  
361 - logger.info("", e);  
362 - }  
363 -  
364 - return result;  
365 - }  
366 -} 1 +package com.bsth.controller.realcontrol;
  2 +
  3 +import com.alibaba.fastjson.JSON;
  4 +import com.alibaba.fastjson.JSONArray;
  5 +import com.alibaba.fastjson.JSONObject;
  6 +import com.bsth.controller.realcontrol.dto.ChangePersonCar;
  7 +import com.bsth.controller.realcontrol.dto.DftzAndDestroy;
  8 +import com.bsth.data.BasicData;
  9 +import com.bsth.data.directive.DayOfDirectives;
  10 +import com.bsth.data.directive.DirectiveCreator;
  11 +import com.bsth.data.directive.GatewayHttpUtils;
  12 +import com.bsth.data.gpsdata_v2.GpsRealData;
  13 +import com.bsth.data.gpsdata_v2.entity.GpsEntity;
  14 +import com.bsth.data.schedule.DayOfSchedule;
  15 +import com.bsth.data.schedule.external.TccExternalService;
  16 +import com.bsth.entity.Line;
  17 +import com.bsth.entity.directive.D60;
  18 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  19 +import com.bsth.repository.LineRepository;
  20 +import com.bsth.repository.directive.D60Repository;
  21 +import com.bsth.service.LineService;
  22 +import com.bsth.websocket.handler.SendUtils;
  23 +import com.fasterxml.jackson.databind.ObjectMapper;
  24 +import com.google.common.base.Splitter;
  25 +import org.apache.commons.lang3.StringEscapeUtils;
  26 +import org.apache.commons.lang3.StringUtils;
  27 +import org.slf4j.Logger;
  28 +import org.slf4j.LoggerFactory;
  29 +import org.springframework.beans.factory.annotation.Autowired;
  30 +import org.springframework.web.bind.annotation.*;
  31 +
  32 +import java.io.IOException;
  33 +import java.util.*;
  34 +
  35 +/**
  36 + * 对外的营运数据接口
  37 + * Created by panzhao on 2017/3/15.
  38 + */
  39 +@RestController
  40 +@RequestMapping("/companyService")
  41 +public class ServiceDataInterface {
  42 +
  43 + private final static String SECRE_KEY = "dVPHJkWUt5FhMT7jrM2dLV7QvlHAmZFd42rs1P0usBx8A7HZki";
  44 +
  45 + Logger logger = LoggerFactory.getLogger(this.getClass());
  46 +
  47 + @Autowired
  48 + DayOfSchedule dayOfSchedule;
  49 +
  50 + @Autowired
  51 + DayOfDirectives dayOfDirectives;
  52 +
  53 + @Autowired
  54 + D60Repository d60Repository;
  55 +
  56 + @Autowired
  57 + GpsRealData gpsRealData;
  58 +
  59 + @Autowired
  60 + TccExternalService tccExternalService;
  61 +
  62 + @Autowired
  63 + private SendUtils sendUtils;
  64 +
  65 +
  66 + @Autowired
  67 + LineRepository lineRepository;
  68 +
  69 + @Autowired
  70 + private LineService service;
  71 +
  72 + /**
  73 + * 获取车辆 和 当前执行班次对照信息
  74 + *
  75 + * @return
  76 + */
  77 + @RequestMapping("/execSchList")
  78 + public List<Map<String, Object>> execSchList(@RequestParam String secretKey) {
  79 + if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))
  80 + return null;
  81 +
  82 + List<Map<String, Object>> rs = new ArrayList<>();
  83 + Collection<ScheduleRealInfo> list = dayOfSchedule.execPlanMap().values();
  84 +
  85 + Map<String, Object> map;
  86 + for (ScheduleRealInfo sch : list) {
  87 + if (null == sch)
  88 + continue;
  89 + map = new HashMap<>();
  90 + map.put("id", sch.getId());
  91 + map.put("clZbh", sch.getClZbh());
  92 + map.put("jGh", sch.getjGh());
  93 + map.put("jName", sch.getjName());
  94 + map.put("sGh", sch.getsGh());
  95 + map.put("sName", sch.getsName());
  96 + map.put("lpName", sch.getLpName());
  97 + map.put("xlBm", sch.getXlBm());
  98 + map.put("xlName", sch.getXlName());
  99 + map.put("xlDir", sch.getXlDir());
  100 + map.put("qdzName", sch.getQdzName());
  101 + map.put("zdzName", sch.getZdzName());
  102 + map.put("fcsj", sch.getFcsj());
  103 + map.put("fcsjActualTime", sch.getFcsjActualTime());
  104 + map.put("dfsj", sch.getDfsj());
  105 + map.put("zdsj", sch.getZdsj());
  106 + map.put("zdsjActualTime", sch.getZdsjActualTime());
  107 + map.put("bcType", sch.getBcType());
  108 + map.put("remarks", sch.getRemark());
  109 + map.put("status", sch.getStatus());
  110 + map.put("realExecDate", sch.getRealExecDate());
  111 +
  112 + //放站班次,放到的站点
  113 + map.put("majorStationName", sch.getMajorStationName());
  114 + rs.add(map);
  115 + }
  116 + return rs;
  117 + }
  118 +
  119 + @RequestMapping("/getCurrentDayPlan")
  120 + public List<ScheduleRealInfo> getCurrentDayPlan(
  121 + @RequestParam String companyId,
  122 + @RequestParam String workId,
  123 + @RequestParam String secretKey) {
  124 +
  125 + if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))
  126 + return null;
  127 +
  128 + List<ScheduleRealInfo> all = new ArrayList<>(dayOfSchedule.findByGsbm(companyId)), rs = new ArrayList<>();
  129 + for (ScheduleRealInfo sch : all) {
  130 + if (sch.getGsBm() != null
  131 + && sch.getGsBm().equals(companyId)
  132 + && sch.getjGh().equals(workId)) {
  133 + rs.add(sch);
  134 + }
  135 + }
  136 + return rs;
  137 + }
  138 +
  139 + @RequestMapping("/returnCCInfo")
  140 + public List<ScheduleRealInfo> returnCCInfo(@RequestParam String companyId, @RequestParam String secretKey) {
  141 + if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))
  142 + return null;
  143 +
  144 +
  145 + List<ScheduleRealInfo> all = new ArrayList<>(dayOfSchedule.findAll()), rs = new ArrayList<>();
  146 + for (ScheduleRealInfo sch : all) {
  147 +
  148 + if (sch.getBcType().equals("out")
  149 + && sch.getGsBm() != null
  150 + && sch.getGsBm().equals(companyId)) {
  151 + rs.add(sch);
  152 + }
  153 + }
  154 + return rs;
  155 + }
  156 +
  157 + @RequestMapping("/returnJCInfo")
  158 + public List<ScheduleRealInfo> returnJCInfo(@RequestParam String companyId, @RequestParam String secretKey) {
  159 + if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))
  160 + return null;
  161 +
  162 +
  163 + List<ScheduleRealInfo> all = new ArrayList<>(dayOfSchedule.findAll()), rs = new ArrayList<>();
  164 + for (ScheduleRealInfo sch : all) {
  165 + if (sch.getBcType().equals("in")
  166 + && sch.getGsBm() != null
  167 + && sch.getGsBm().equals(companyId)) {
  168 + rs.add(sch);
  169 + }
  170 + }
  171 + return rs;
  172 + }
  173 +
  174 + /**
  175 + * 获取全量的进出场数据, 仅供接口项目调用。 由接口项目负责对外所有场站输出
  176 + *
  177 + * @return
  178 + */
  179 + @RequestMapping("/findCurrInAndOut")
  180 + public List<ScheduleRealInfo> findCurrInAndOut(@RequestParam String secretKey) {
  181 + if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))
  182 + return null;
  183 +
  184 +
  185 + List<ScheduleRealInfo> all = new ArrayList<>(dayOfSchedule.findAll()), rs = new ArrayList<>();
  186 + for (ScheduleRealInfo sch : all) {
  187 + if (sch.getBcType().equals("in")
  188 + || sch.getBcType().equals("out")) {
  189 + rs.add(sch);
  190 + }
  191 + }
  192 + return rs;
  193 + }
  194 +
  195 + /**
  196 + * 向指定的车辆下发消息短语
  197 + *
  198 + * @return
  199 + */
  200 + @RequestMapping(value = "/send60Phrase", method = RequestMethod.POST)
  201 + public int send60Phrase(@RequestBody Map<String, String> map, @RequestParam String secretKey) {
  202 + try {
  203 + String nbbm = map.get("nbbm");
  204 + String txt = map.get("txt");
  205 + String sender = map.get("sender");
  206 + if (txt.length() > 50)
  207 + txt = txt.substring(0, 50);
  208 + if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))
  209 + return -500;
  210 +
  211 + //车辆和设备号对照
  212 + String deviceId = BasicData.deviceId2NbbmMap.inverse().get(nbbm);
  213 + if (StringUtils.isEmpty(deviceId))
  214 + return -404;
  215 +
  216 + //检查设备是否在线
  217 + long t = System.currentTimeMillis();
  218 + GpsEntity gps = gpsRealData.get(deviceId);
  219 + if (null == gps || (t - gps.getServerTimestamp()) > 1000 * 60 * 5)
  220 + return -405;
  221 +
  222 + Short dispatchInstruct = 0;//消息短语
  223 + D60 d60 = new DirectiveCreator().createD60(nbbm, txt, dispatchInstruct, gps.getUpDown(), gps.getState(), gps.getLineId());
  224 + d60.setSender(sender);
  225 + // 发送指令
  226 + int code = GatewayHttpUtils.postJson(JSON.toJSONString(d60));
  227 + d60.setHttpCode(code);
  228 +
  229 + if (code != 0)
  230 + d60.setErrorText("网关通讯失败, code: " + code);
  231 +
  232 + dayOfDirectives.put60(d60);
  233 + return d60.getMsgId();
  234 + } catch (Exception e) {
  235 + logger.error("", e);
  236 + return -500;
  237 + }
  238 + }
  239 +
  240 + /**
  241 + * 根据msg id 查询指令响应情况
  242 + *
  243 + * @param msgIds
  244 + * @return
  245 + */
  246 + @RequestMapping("/findD60Reply")
  247 + public List<Map<String, Object>> findD60Reply(@RequestParam String msgIds) {
  248 + List<Map<String, Object>> rs = new ArrayList<>();
  249 + try {
  250 + Map<String, Object> map = new HashMap();
  251 +
  252 + List<String> ids = Splitter.on(",").splitToList(msgIds);
  253 + D60 d60;
  254 + for (String id : ids) {
  255 + if (StringUtils.isEmpty(id))
  256 + continue;
  257 +
  258 + d60 = dayOfDirectives.get(Integer.parseInt(id));
  259 + if (null == d60)
  260 + continue;
  261 +
  262 + map.put("msgId", d60.getMsgId());
  263 + map.put("deviceReplyTime", d60.getReply46Time());
  264 + map.put("jsyReplyTime", d60.getReply47Time());
  265 + rs.add(map);
  266 + }
  267 + } catch (Exception e) {
  268 + logger.error("", e);
  269 + }
  270 + return rs;
  271 + }
  272 +
  273 + /**
  274 + * 获取路牌下所有班次
  275 + *
  276 + * @param lineCode
  277 + * @param lpName
  278 + * @return
  279 + */
  280 + @RequestMapping("/findByLpName")
  281 + public List<ScheduleRealInfo> findByLpName(@RequestParam String lineCode, @RequestParam String lpName, @RequestParam String secretKey) {
  282 + try {
  283 + if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))
  284 + return null;
  285 +
  286 + List<ScheduleRealInfo> list = dayOfSchedule.getLpScheduleMap().get(lineCode + "_" + lpName);
  287 + return list;
  288 + } catch (Exception e) {
  289 + logger.error("", e);
  290 + }
  291 + return null;
  292 + }
  293 +
  294 + /**
  295 + * 调整出场班次待发,并烂掉后续班次(调派用)
  296 + *
  297 + * @param dad
  298 + * @return
  299 + */
  300 + @RequestMapping(value = "/dftzAndDestroy", method = RequestMethod.POST)
  301 + public Map<String, Object> dftzAndDestroy(@RequestBody DftzAndDestroy dad, @RequestParam String secretKey) {
  302 + if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))
  303 + return null;
  304 + return tccExternalService.dftz(dad);
  305 + }
  306 +
  307 + /**
  308 + * 换人换车,(调派用)
  309 + * @return
  310 + */
  311 + @RequestMapping(value = "/tccHrhc", method = RequestMethod.POST)
  312 + public Map<String, Object> hrhc(@RequestBody String jsonStr, @RequestParam String secretKey){
  313 +
  314 + if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))
  315 + return null;
  316 +
  317 + jsonStr = StringEscapeUtils.unescapeHtml4(jsonStr);
  318 + JSONObject rootObj = JSON.parseObject(jsonStr);
  319 +
  320 + List<ChangePersonCar> cpcs = JSONArray.parseArray(rootObj.getString("cpcs"), ChangePersonCar.class);
  321 + return tccExternalService.hrhc(cpcs, rootObj.getString("tccCode"), rootObj.getString("userId"));
  322 + }
  323 +
  324 + /**
  325 + * 接收应急预案信息
  326 + * @return
  327 + */
  328 + @RequestMapping(value = "/contingencyPlan", method = RequestMethod.POST)
  329 + public Map<String, Object> contingencyPlan(@RequestBody String jsonStr, @RequestParam String secretKey){
  330 + Map<String, Object> result = new HashMap<>();
  331 + result.put("errCode", 0);
  332 + if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY)) {
  333 + result.put("errCode", 501);
  334 + result.put("msg", "无效的key");
  335 +
  336 + return result;
  337 + }
  338 +
  339 + ObjectMapper mapper = new ObjectMapper();
  340 + try {
  341 + List<Map<String,String>> emergencyList = new ArrayList();
  342 + List<Map<String,String>> emergencyListAll = new ArrayList();
  343 + List<Map> maps = mapper.readValue(jsonStr,mapper.getTypeFactory().constructParametricType(List.class, Map.class));
  344 + for (Map map : maps) {
  345 + sendUtils.sendContingencyPlan(map);
  346 + emergencyList.add((Map<String, String>) map.get("emergencyLine"));
  347 + }
  348 +
  349 + for (Map.Entry<String, String> m : BasicData.lineCode2NameMap.entrySet()){
  350 + for (Map<String,String> emer : emergencyList){
  351 + for (Map.Entry<String,String> t : emer.entrySet()){
  352 + if (m.getKey().equals(t.getKey())) {
  353 + emergencyListAll.add(emer);
  354 + Line line = lineRepository.findById(Integer.parseInt(t.getKey())).get();
  355 + line.setName(t.getValue());
  356 + Map<String, Object> status = service.update(line);
  357 + logger.info("应急接口修改线路名称-----------------------"+status.get("status"));
  358 + }
  359 + }
  360 + }
  361 + }
  362 + } catch (IOException e) {
  363 + result.put("errCode", 502);
  364 + result.put("msg", "json数据格式异常");
  365 + logger.info("", e);
  366 + }
  367 +
  368 + return result;
  369 + }
  370 +}