Commit cc9a5fd5c68d83e145f74489be2021a6be626ee6

Authored by 潘钊
1 parent 3b0f5480

update...

src/main/java/com/bsth/Test.java deleted 100644 → 0
1 -//package com.bsth;  
2 -//  
3 -//import java.io.ByteArrayOutputStream;  
4 -//import java.io.IOException;  
5 -//import java.io.InputStream;  
6 -//import java.io.OutputStream;  
7 -//import java.net.HttpURLConnection;  
8 -//import java.net.URL;  
9 -//import java.util.HashMap;  
10 -//import java.util.Map;  
11 -//  
12 -//import org.apache.commons.io.IOUtils;  
13 -//  
14 -//import com.fasterxml.jackson.databind.ObjectMapper;  
15 -//  
16 -//public class Test {  
17 -//  
18 -// public static void main(String[] args) {  
19 -// Map<String, Object> map = new HashMap<>();  
20 -// map.put("timestamp", 1469764939000L);  
21 -// map.put("operCode", 128);  
22 -// map.put("deviceId", "66ML0007");  
23 -//  
24 -// Map<String , Object> dataMap = new HashMap<>();  
25 -// dataMap.put("requestCode", 161);  
26 -// dataMap.put("lineId", 1025);  
27 -// dataMap.put("operCode2", 38);  
28 -//  
29 -// map.put("data", dataMap);  
30 -// request(map, "http://192.168.168.171:9088/control/upstream");  
31 -//  
32 -// }  
33 -//  
34 -// private static Map<String, Object> request(Map<String, Object> map, String url) {  
35 -// InputStream in = null;  
36 -// OutputStream out = null;  
37 -// HttpURLConnection con = null;  
38 -// try {  
39 -// con = (HttpURLConnection)new URL(url).openConnection();  
40 -// con.setRequestMethod("POST");  
41 -// con.setRequestProperty("keep-alive", "true");  
42 -// con.setRequestProperty("accept", "*/*");  
43 -// con.setDoInput(true);  
44 -// con.setDoOutput(true);  
45 -// con.setReadTimeout(2500);  
46 -// con.setConnectTimeout(2500);  
47 -// out = con.getOutputStream();  
48 -// out.write("json=".getBytes());  
49 -// out.write(new ObjectMapper().writeValueAsBytes(map));  
50 -// out.flush();  
51 -// System.out.println("con.getResponseCode(): " + con.getResponseCode());  
52 -// if (con.getResponseCode() == 200) {  
53 -// in = con.getInputStream();  
54 -// ByteArrayOutputStream bout = new ByteArrayOutputStream();  
55 -// IOUtils.copy(in, bout); bout.close();  
56 -// System.out.println("Message:" + new String(bout.toByteArray()));  
57 -// return new ObjectMapper().readValue(bout.toByteArray(), Map.class);  
58 -// }  
59 -// } catch (IOException e) {  
60 -// e.printStackTrace();  
61 -// } finally {  
62 -// con.disconnect();  
63 -// try {  
64 -// if (in != null) in.close();  
65 -// if (out != null) out.close();  
66 -// } catch (IOException e) {  
67 -// e.printStackTrace();  
68 -// }  
69 -// }  
70 -// return null;  
71 -// }  
72 -//}  
src/main/java/com/bsth/Test2.java deleted 100644 → 0
1 -package com.bsth;  
2 -  
3 -public class Test2 {  
4 -  
5 - public static void main(String[] args) {  
6 -  
7 - for(int i = 0; i < 20; i ++){  
8 - new MyThread(i + "").start();  
9 - }  
10 - }  
11 -  
12 - public static class MyThread extends Thread {  
13 -  
14 - private String name ;  
15 -  
16 - public MyThread(String name) {  
17 - this.name = name;  
18 - }  
19 -  
20 - @Override  
21 - public void run() {  
22 - method(name);  
23 - }  
24 - }  
25 -  
26 - public static void method(String name){  
27 - System.out.println("线程" + name + "开始...");  
28 - int a = 0;  
29 - for(int i = 0; i < 1000; i ++){  
30 - a ++;  
31 - }  
32 - a--;  
33 - System.out.println("线程" + name + "结束... a = " + a);  
34 - }  
35 -}  
src/main/java/com/bsth/controller/StationRouteController.java
@@ -120,6 +120,15 @@ public class StationRouteController extends BaseController&lt;StationRoute, Integer @@ -120,6 +120,15 @@ public class StationRouteController extends BaseController&lt;StationRoute, Integer
120 return stationRouteRepository.findStations(xlid, xldir); 120 return stationRouteRepository.findStations(xlid, xldir);
121 } 121 }
122 122
123 - 123 + /**
  124 + *
  125 + * @Title: findByMultiLine
  126 + * @Description: TODO(多线路路由查询)
  127 + */
  128 + @RequestMapping(value = "/multiLine", method = RequestMethod.GET)
  129 + public Map<String, Object> findByMultiLine(@RequestParam String lineIds){
  130 +
  131 + return service.findByMultiLine(lineIds);
  132 + }
124 133
125 } 134 }
src/main/java/com/bsth/controller/gps/GpsController.java
@@ -24,6 +24,17 @@ public class GpsController { @@ -24,6 +24,17 @@ public class GpsController {
24 24
25 @Autowired 25 @Autowired
26 GpsService gpsService; 26 GpsService gpsService;
  27 +
  28 + @RequestMapping(value = "/real/all")
  29 + public Map<String, Object> search(@RequestParam Map<String, Object> map,
  30 + @RequestParam(defaultValue = "0") int page,
  31 + @RequestParam(defaultValue = "15") int size,
  32 + @RequestParam(defaultValue = "timestamp") String order,
  33 + @RequestParam(defaultValue = "DESC") String direction){
  34 +
  35 +
  36 + return gpsService.search(map, page, size, order, direction);
  37 + }
27 38
28 @RequestMapping(value = "/real/line/{lineCode}") 39 @RequestMapping(value = "/real/line/{lineCode}")
29 public List<GpsEntity> findByLineCode(@PathVariable("lineCode") String lineCode) { 40 public List<GpsEntity> findByLineCode(@PathVariable("lineCode") String lineCode) {
src/main/java/com/bsth/controller/realcontrol/BasicDataController.java 0 → 100644
  1 +package com.bsth.controller.realcontrol;
  2 +
  3 +import java.util.Map;
  4 +
  5 +import org.springframework.web.bind.annotation.RequestMapping;
  6 +import org.springframework.web.bind.annotation.RestController;
  7 +
  8 +import com.bsth.data.BasicData;
  9 +
  10 +@RestController
  11 +@RequestMapping("/basic")
  12 +public class BasicDataController {
  13 +
  14 +
  15 + @RequestMapping("/cars")
  16 + public Iterable<String> findAllNbbm(Map<String, Object> map){
  17 + return BasicData.deviceId2NbbmMap.values();
  18 + }
  19 +
  20 + @RequestMapping("/lineCode2Name")
  21 + public Map<String, String> findLineCodeMap(){
  22 + return BasicData.lineCode2NameMap;
  23 + }
  24 +}
src/main/java/com/bsth/data/directive/DayOfDirectives.java
@@ -38,6 +38,9 @@ public class DayOfDirectives { @@ -38,6 +38,9 @@ public class DayOfDirectives {
38 38
39 // 线路切换指令 64 39 // 线路切换指令 64
40 public static Map<String, D64> d64Map; 40 public static Map<String, D64> d64Map;
  41 +
  42 + //等待C0_A4回复的用户
  43 + //public static Map<K, V>
41 44
42 @Autowired 45 @Autowired
43 DirectiveService directiveService; 46 DirectiveService directiveService;
src/main/java/com/bsth/data/gpsdata/GpsEntity.java
@@ -63,6 +63,9 @@ public class GpsEntity { @@ -63,6 +63,9 @@ public class GpsEntity {
63 63
64 /** 当前执行班次ID */ 64 /** 当前执行班次ID */
65 private Long schId; 65 private Long schId;
  66 +
  67 + /** 是否异常数据 */
  68 + private boolean abnormal;
66 69
67 public Integer getCompanyCode() { 70 public Integer getCompanyCode() {
68 return companyCode; 71 return companyCode;
@@ -207,4 +210,12 @@ public class GpsEntity { @@ -207,4 +210,12 @@ public class GpsEntity {
207 public void setSchId(Long schId) { 210 public void setSchId(Long schId) {
208 this.schId = schId; 211 this.schId = schId;
209 } 212 }
  213 +
  214 + public boolean isAbnormal() {
  215 + return abnormal;
  216 + }
  217 +
  218 + public void setAbnormal(boolean abnormal) {
  219 + this.abnormal = abnormal;
  220 + }
210 } 221 }
src/main/java/com/bsth/data/gpsdata/GpsRealData.java
@@ -3,6 +3,7 @@ package com.bsth.data.gpsdata; @@ -3,6 +3,7 @@ package com.bsth.data.gpsdata;
3 import java.io.BufferedReader; 3 import java.io.BufferedReader;
4 import java.io.InputStreamReader; 4 import java.io.InputStreamReader;
5 import java.util.ArrayList; 5 import java.util.ArrayList;
  6 +import java.util.Collection;
6 import java.util.HashMap; 7 import java.util.HashMap;
7 import java.util.List; 8 import java.util.List;
8 import java.util.Map; 9 import java.util.Map;
@@ -115,6 +116,10 @@ public class GpsRealData implements CommandLineRunner{ @@ -115,6 +116,10 @@ public class GpsRealData implements CommandLineRunner{
115 ScheduleRealInfo sch; 116 ScheduleRealInfo sch;
116 for(String device : set){ 117 for(String device : set){
117 gps = gpsMap.get(device); 118 gps = gpsMap.get(device);
  119 + //过滤异常GPS数据
  120 + if(gps.isAbnormal())
  121 + continue;
  122 +
118 sch = dayOfSchedule.execPlamMap().get(gps.getNbbm()); 123 sch = dayOfSchedule.execPlamMap().get(gps.getNbbm());
119 if(null != sch) 124 if(null != sch)
120 gps.setSchId(sch.getId()); 125 gps.setSchId(sch.getId());
@@ -136,6 +141,10 @@ public class GpsRealData implements CommandLineRunner{ @@ -136,6 +141,10 @@ public class GpsRealData implements CommandLineRunner{
136 return gpsMap.get(deviceId); 141 return gpsMap.get(deviceId);
137 } 142 }
138 143
  144 + public Collection<GpsEntity> all(){
  145 + return gpsMap.values();
  146 + }
  147 +
139 @Component 148 @Component
140 public static class GpsDataLoader extends Thread{ 149 public static class GpsDataLoader extends Thread{
141 150
@@ -182,9 +191,10 @@ public class GpsRealData implements CommandLineRunner{ @@ -182,9 +191,10 @@ public class GpsRealData implements CommandLineRunner{
182 for(GpsEntity gps : list){ 191 for(GpsEntity gps : list){
183 nbbm = BasicData.deviceId2NbbmMap.get(gps.getDeviceId()); 192 nbbm = BasicData.deviceId2NbbmMap.get(gps.getDeviceId());
184 if(StringUtils.isBlank(nbbm)) 193 if(StringUtils.isBlank(nbbm))
185 - continue; 194 + gps.setAbnormal(true);//标记为异常数据
  195 + else
  196 + gps.setNbbm(nbbm);
186 197
187 - gps.setNbbm(nbbm);  
188 gps.setStationName(BasicData.stationCode2NameMap.get(gps.getStopNo())); 198 gps.setStationName(BasicData.stationCode2NameMap.get(gps.getStopNo()));
189 gpsRealData.add(gps); 199 gpsRealData.add(gps);
190 } 200 }
src/main/java/com/bsth/data/schedule/thread/ScheduleLateThread.java
@@ -47,7 +47,9 @@ public class ScheduleLateThread extends Thread{ @@ -47,7 +47,9 @@ public class ScheduleLateThread extends Thread{
47 if(sch.getDfsjT() > t) 47 if(sch.getDfsjT() > t)
48 break; 48 break;
49 49
50 - if(sch.getStatus() == 0 && sch.getFcsjActual() == null){ 50 + if(sch.isLate() == false
  51 + && sch.getStatus() == 0
  52 + && sch.getFcsjActual() == null){
51 //应发未发 53 //应发未发
52 sch.setLate(true); 54 sch.setLate(true);
53 //通知客户端 55 //通知客户端
src/main/java/com/bsth/entity/directive/D64.java
@@ -40,6 +40,8 @@ public class D64 extends Directive{ @@ -40,6 +40,8 @@ public class D64 extends Directive{
40 private String deviceId; 40 private String deviceId;
41 41
42 private String lineId; 42 private String lineId;
  43 +
  44 + private String txtContent;
43 45
44 public Short getCityCode() { 46 public Short getCityCode() {
45 return cityCode; 47 return cityCode;
@@ -64,6 +66,14 @@ public class D64 extends Directive{ @@ -64,6 +66,14 @@ public class D64 extends Directive{
64 public void setLineId(String lineId) { 66 public void setLineId(String lineId) {
65 this.lineId = lineId; 67 this.lineId = lineId;
66 } 68 }
  69 +
  70 + public String getTxtContent() {
  71 + return txtContent;
  72 + }
  73 +
  74 + public void setTxtContent(String txtContent) {
  75 + this.txtContent = txtContent;
  76 + }
67 } 77 }
68 78
69 public Integer getId() { 79 public Integer getId() {
src/main/java/com/bsth/entity/directive/DC0_A4.java 0 → 100644
  1 +package com.bsth.entity.directive;
  2 +
  3 +import javax.persistence.Embeddable;
  4 +import javax.persistence.GeneratedValue;
  5 +import javax.persistence.Id;
  6 +
  7 +/**
  8 + *
  9 + * @ClassName: DC0_A4
  10 + * @Description: TODO(参数查询)
  11 + * @author PanZhao
  12 + * @date 2016年10月18日 下午5:22:36
  13 + *
  14 + */
  15 +public class DC0_A4 extends Directive{
  16 +
  17 + @Id
  18 + @GeneratedValue
  19 + private Integer id;
  20 +
  21 +
  22 + @Embeddable
  23 + public static class DC0A4Data {
  24 + /**
  25 + * 二级协议
  26 + */
  27 + private Short operCode2;
  28 + /** 设备编号 */
  29 + private String deviceId;
  30 + /** 网关IP地址 */
  31 + private String ipAddress;
  32 + /** 网关端口 */
  33 + private int port;
  34 + /** 定时定距上报模式 */
  35 + private short reportMode;
  36 + /** 定时上报时间间隔 */
  37 + private int interval;
  38 + /** 定距上报距离间隔 */
  39 + private String distance;
  40 + /** 非线路状态超速阀门 */
  41 + private short speedingThreshold;
  42 + /** 预警阀门 */
  43 + private short alarmThreshold;
  44 + /** pos机IP地址 */
  45 + private String posIpAddress;
  46 + }
  47 +}
src/main/java/com/bsth/repository/StationRouteRepository.java
@@ -250,4 +250,8 @@ public interface StationRouteRepository extends BaseRepository&lt;StationRoute, Int @@ -250,4 +250,8 @@ public interface StationRouteRepository extends BaseRepository&lt;StationRoute, Int
250 250
251 @Query("select r from StationRoute r where r.lineCode=?1 and r.directions=?2 and r.destroy=0 order by r.stationRouteCode") 251 @Query("select r from StationRoute r where r.lineCode=?1 and r.directions=?2 and r.destroy=0 order by r.stationRouteCode")
252 List<StationRoute> findByLine(String lineCode, int updown); 252 List<StationRoute> findByLine(String lineCode, int updown);
  253 +
  254 + @EntityGraph(value = "stationRoute_station", type = EntityGraph.EntityGraphType.FETCH)
  255 + @Query("select s from StationRoute s where s.destroy=0 and s.lineCode=?1")
  256 + List<StationRoute> findByLineCode(String lineCode);
253 } 257 }
src/main/java/com/bsth/service/StationRouteService.java
@@ -78,4 +78,6 @@ public interface StationRouteService extends BaseService&lt;StationRoute, Integer&gt; @@ -78,4 +78,6 @@ public interface StationRouteService extends BaseService&lt;StationRoute, Integer&gt;
78 * @return List<Map<String, Object>> 78 * @return List<Map<String, Object>>
79 */ 79 */
80 List<Map<String, Object>> findStationRouteInfo(Map<String, Object> map); 80 List<Map<String, Object>> findStationRouteInfo(Map<String, Object> map);
  81 +
  82 + Map<String, Object> findByMultiLine(String lineIds);
81 } 83 }
src/main/java/com/bsth/service/directive/DirectiveServiceImpl.java
@@ -235,13 +235,14 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen @@ -235,13 +235,14 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen
235 int code = GatewayHttpUtils.postJson(JSON.toJSONString(d64)); 235 int code = GatewayHttpUtils.postJson(JSON.toJSONString(d64));
236 // 入库 236 // 入库
237 d64.setHttpCode(code); 237 d64.setHttpCode(code);
  238 + d64.getData().setTxtContent("切换线路[" + lineCode + "]");
238 dayOfDirectives.put64(d64); 239 dayOfDirectives.put64(d64);
239 240
240 // 通知设备刷新线路文件,忽略结果 241 // 通知设备刷新线路文件,忽略结果
241 if (code == 0) 242 if (code == 0)
242 GatewayHttpUtils.postJson(crt.createDeviceRefreshData(deviceId, lineCode)); 243 GatewayHttpUtils.postJson(crt.createDeviceRefreshData(deviceId, lineCode));
243 else 244 else
244 - d64.setErrorText("[刷新线路文件] 网关通讯失败, code: " + code); 245 + d64.setErrorText(" 网关通讯失败, code: " + code);
245 246
246 d64Repository.save(d64); 247 d64Repository.save(d64);
247 return code; 248 return code;
@@ -408,7 +409,7 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen @@ -408,7 +409,7 @@ public class DirectiveServiceImpl extends BaseServiceImpl&lt;D60, Integer&gt; implemen
408 } 409 }
409 410
410 rsMap.put("list", rs); 411 rsMap.put("list", rs);
411 - rsMap.put("totalPages", count % size == 0 ? count / size : count / size + 1); 412 + rsMap.put("totalPages", count % size == 0 ? (count / size - 1) : count / size);
412 rsMap.put("page", page); 413 rsMap.put("page", page);
413 return rsMap; 414 return rsMap;
414 } 415 }
src/main/java/com/bsth/service/forecast/util/CreateByArrivalData.java
@@ -244,6 +244,9 @@ public class CreateByArrivalData { @@ -244,6 +244,9 @@ public class CreateByArrivalData {
244 244
245 @Override 245 @Override
246 public int compare(Sample arg0, Sample arg1) { 246 public int compare(Sample arg0, Sample arg1) {
  247 + if(arg0.geteTime() == arg1.geteTime())
  248 + return 0;
  249 +
247 return (int)(arg0.geteTime() - arg1.geteTime()); 250 return (int)(arg0.geteTime() - arg1.geteTime());
248 } 251 }
249 } 252 }
src/main/java/com/bsth/service/gps/GpsService.java
@@ -10,4 +10,6 @@ public interface GpsService { @@ -10,4 +10,6 @@ public interface GpsService {
10 List<Map<String, Object>> history(String[] nbbmArray, Long st, Long et); 10 List<Map<String, Object>> history(String[] nbbmArray, Long st, Long et);
11 11
12 Map<String, Object> findBuffAeraByCode(String code, String type); 12 Map<String, Object> findBuffAeraByCode(String code, String type);
  13 +
  14 + Map<String, Object> search(Map<String, Object> map, int page, int size, String order, String direction);
13 } 15 }
src/main/java/com/bsth/service/gps/GpsServiceImpl.java
1 package com.bsth.service.gps; 1 package com.bsth.service.gps;
2 2
  3 +import java.lang.reflect.Field;
3 import java.sql.Connection; 4 import java.sql.Connection;
4 import java.sql.PreparedStatement; 5 import java.sql.PreparedStatement;
5 import java.sql.ResultSet; 6 import java.sql.ResultSet;
6 import java.util.ArrayList; 7 import java.util.ArrayList;
7 import java.util.Calendar; 8 import java.util.Calendar;
  9 +import java.util.Collection;
8 import java.util.Collections; 10 import java.util.Collections;
9 import java.util.Comparator; 11 import java.util.Comparator;
10 import java.util.Date; 12 import java.util.Date;
@@ -17,8 +19,11 @@ import org.slf4j.LoggerFactory; @@ -17,8 +19,11 @@ import org.slf4j.LoggerFactory;
17 import org.springframework.beans.factory.annotation.Autowired; 19 import org.springframework.beans.factory.annotation.Autowired;
18 import org.springframework.stereotype.Service; 20 import org.springframework.stereotype.Service;
19 21
  22 +import com.bsth.common.ResponseCode;
20 import com.bsth.data.BasicData; 23 import com.bsth.data.BasicData;
21 import com.bsth.data.arrival.ArrivalEntity; 24 import com.bsth.data.arrival.ArrivalEntity;
  25 +import com.bsth.data.gpsdata.GpsEntity;
  26 +import com.bsth.data.gpsdata.GpsRealData;
22 import com.bsth.repository.CarParkRepository; 27 import com.bsth.repository.CarParkRepository;
23 import com.bsth.repository.StationRepository; 28 import com.bsth.repository.StationRepository;
24 import com.bsth.util.DateUtils; 29 import com.bsth.util.DateUtils;
@@ -37,6 +42,9 @@ public class GpsServiceImpl implements GpsService{ @@ -37,6 +42,9 @@ public class GpsServiceImpl implements GpsService{
37 ResultSet rs = null; 42 ResultSet rs = null;
38 43
39 Logger logger = LoggerFactory.getLogger(this.getClass()); 44 Logger logger = LoggerFactory.getLogger(this.getClass());
  45 +
  46 + @Autowired
  47 + GpsRealData gpsRealData;
40 48
41 // 历史gps查询 49 // 历史gps查询
42 @Override 50 @Override
@@ -307,4 +315,89 @@ public class GpsServiceImpl implements GpsService{ @@ -307,4 +315,89 @@ public class GpsServiceImpl implements GpsService{
307 315
308 return rs; 316 return rs;
309 } 317 }
  318 +
  319 + @Override
  320 + public Map<String, Object> search(Map<String, Object> map, int page, int size, String order, String direction) {
  321 + Map<String, Object> rsMap = new HashMap<>();
  322 + try{
  323 + //全量
  324 + Collection<GpsEntity> list = gpsRealData.all();
  325 + //过滤后的
  326 + List<GpsEntity> rs = new ArrayList<>();
  327 + Field[] fields = GpsEntity.class.getDeclaredFields();
  328 + //排序字段
  329 + Field orderField = null;
  330 + //参与过滤的字段
  331 + List<Field> fs = new ArrayList<>();
  332 + for(Field f : fields){
  333 + f.setAccessible(true);
  334 + if(map.containsKey(f.getName()))
  335 + fs.add(f);
  336 +
  337 + if(f.getName().equals(order))
  338 + orderField = f;
  339 + }
  340 + //过滤数据
  341 + for(GpsEntity gps : list){
  342 + if(fieldEquals(fs, gps, map))
  343 + rs.add(gps);
  344 + }
  345 +
  346 + //排序
  347 + if(null != orderField)
  348 + sortGpsList(orderField, rs);
  349 +
  350 + //分页
  351 + int count = rs.size()
  352 + ,s = page * size, e = s + size;
  353 + if (e > count)
  354 + e = count;
  355 +
  356 + rsMap.put("list", rs.subList(s, e));
  357 + rsMap.put("totalPages", count % size == 0 ? count / size : count / size + 1);
  358 + rsMap.put("page", page);
  359 + rsMap.put("status", ResponseCode.SUCCESS);
  360 + }catch(Exception e){
  361 + logger.error("", e);
  362 + rsMap.put("status", ResponseCode.ERROR);
  363 + }
  364 + return rsMap;
  365 + }
  366 +
  367 + private void sortGpsList(final Field f, List<GpsEntity> rs) {
  368 + Collections.sort(rs, new Comparator<GpsEntity>() {
  369 +
  370 + @Override
  371 + public int compare(GpsEntity o1, GpsEntity o2) {
  372 + try {
  373 + if(f.get(o1) == f.get(o2))
  374 + return 0;
  375 +
  376 + if(null == f.get(o1))
  377 + return 1;
  378 +
  379 + if(null == f.get(o2))
  380 + return -1;
  381 +
  382 + return f.get(o1).toString().compareTo(f.get(o2).toString());
  383 + } catch (Exception e) {
  384 + logger.error("", e);
  385 + return -1;
  386 + }
  387 + }
  388 + });
  389 + }
  390 +
  391 + public boolean fieldEquals(List<Field> fs, Object obj, Map<String, Object> map){
  392 + try{
  393 + for(Field f : fs){
  394 + if(f.get(obj).toString().indexOf(map.get(f.getName()).toString()) == -1)
  395 + return false;
  396 + }
  397 + }catch(Exception e){
  398 + logger.error("", e);
  399 + return false;
  400 + }
  401 + return true;
  402 + }
310 } 403 }
src/main/java/com/bsth/service/impl/StationRouteServiceImpl.java
@@ -11,8 +11,12 @@ import java.util.Map; @@ -11,8 +11,12 @@ import java.util.Map;
11 import java.util.Properties; 11 import java.util.Properties;
12 12
13 import org.springframework.beans.factory.annotation.Autowired; 13 import org.springframework.beans.factory.annotation.Autowired;
  14 +import org.springframework.data.jpa.repository.EntityGraph;
14 import org.springframework.stereotype.Service; 15 import org.springframework.stereotype.Service;
15 16
  17 +import com.alibaba.fastjson.JSON;
  18 +import com.alibaba.fastjson.JSONArray;
  19 +import com.alibaba.fastjson.serializer.PropertyFilter;
16 import com.bsth.common.ResponseCode; 20 import com.bsth.common.ResponseCode;
17 import com.bsth.entity.Line; 21 import com.bsth.entity.Line;
18 import com.bsth.entity.Station; 22 import com.bsth.entity.Station;
@@ -25,6 +29,8 @@ import com.bsth.service.StationRouteService; @@ -25,6 +29,8 @@ import com.bsth.service.StationRouteService;
25 import com.bsth.util.FTPClientUtils; 29 import com.bsth.util.FTPClientUtils;
26 import com.bsth.util.PackTarGZUtils; 30 import com.bsth.util.PackTarGZUtils;
27 import com.bsth.util.db.DBUtils_MS; 31 import com.bsth.util.db.DBUtils_MS;
  32 +import com.google.common.base.Splitter;
  33 +import com.google.common.collect.Lists;
28 34
29 /** 35 /**
30 * 36 *
@@ -971,4 +977,41 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -971,4 +977,41 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
971 977
972 return resultList; 978 return resultList;
973 } 979 }
  980 +
  981 + @Override
  982 + public Map<String, Object> findByMultiLine(String lineIds) {
  983 + Map<String, Object> rs = new HashMap<>();
  984 + try{
  985 + List<String> idx = Splitter.on(',').splitToList(lineIds);
  986 + //路由
  987 + List<StationRoute> list = new ArrayList<>();
  988 + /**
  989 + * in 查询符 无法和 @EntityGraph 同时配合使用,这可能是一个bug
  990 + * 暂时只能循环单线路查询
  991 + */
  992 + //repository.multiLine(idx)
  993 + for(String id : idx){
  994 + list.addAll(repository.findByLineCode(id));
  995 + }
  996 +
  997 + //过滤部分字段
  998 + String jsonStr = JSON.toJSONString(list, new PropertyFilter() {
  999 +
  1000 + @Override
  1001 + public boolean apply(Object object, String name, Object value) {
  1002 + if(name.equals("line"))
  1003 + return false;
  1004 + return true;
  1005 + }
  1006 + });
  1007 +
  1008 + rs.put("status", ResponseCode.SUCCESS);
  1009 + rs.put("list", jsonStr);
  1010 + }catch(Exception e){
  1011 + logger.error("", e);
  1012 + rs.put("status", ResponseCode.ERROR);
  1013 + }
  1014 +
  1015 + return rs;
  1016 + }
974 } 1017 }
src/main/resources/static/assets/js/common.js
@@ -11,27 +11,27 @@ function removeConfirm(text, url, success) { @@ -11,27 +11,27 @@ function removeConfirm(text, url, success) {
11 skin : 'layui-layer-cfm-delete' 11 skin : 'layui-layer-cfm-delete'
12 }, function(){ 12 }, function(){
13 layer.msg('正在删除...', {icon: 16}); 13 layer.msg('正在删除...', {icon: 16});
14 - 14 +
15 $post(url, {'_method': 'delete'},function(rs){ 15 $post(url, {'_method': 'delete'},function(rs){
16 - layer.msg('删除成功!'); 16 + layer.msg('删除成功!');
17 success && success(rs); 17 success && success(rs);
18 }); 18 });
19 }); 19 });
20 } 20 }
21 21
22 -function html_encode(str) {  
23 - var s = "";  
24 - if (str.length == 0) return "";  
25 -  
26 - s = str.replace(/&/g, "&gt;");  
27 - s = s.replace(/</g, "&lt;");  
28 - s = s.replace(/>/g, "&gt;");  
29 - s = s.replace(/ /g, "&nbsp;");  
30 - s = s.replace(/\'/g, "&#39;");  
31 - s = s.replace(/\"/g, "&quot;");  
32 - return s;  
33 -}  
34 - 22 +function html_encode(str) {
  23 + var s = "";
  24 + if (str.length == 0) return "";
  25 +
  26 + s = str.replace(/&/g, "&gt;");
  27 + s = s.replace(/</g, "&lt;");
  28 + s = s.replace(/>/g, "&gt;");
  29 + s = s.replace(/ /g, "&nbsp;");
  30 + s = s.replace(/\'/g, "&#39;");
  31 + s = s.replace(/\"/g, "&quot;");
  32 + return s;
  33 +}
  34 +
35 35
36 function successHandle(json, handle){ 36 function successHandle(json, handle){
37 var status = json.status; 37 var status = json.status;
@@ -40,14 +40,14 @@ function successHandle(json, handle){ @@ -40,14 +40,14 @@ function successHandle(json, handle){
40 location.reload(true); 40 location.reload(true);
41 return; 41 return;
42 } 42 }
43 - 43 +
44 if(!status){ 44 if(!status){
45 handle && handle(json); 45 handle && handle(json);
46 return ; 46 return ;
47 } 47 }
48 - 48 +
49 if(status == 'ERROR') 49 if(status == 'ERROR')
50 - layer.alert(json.msg?json.msg:'未知异常', {icon: 2, title: '操作失败'}); 50 + layer.alert(json.msg?json.msg:'未知异常', {icon: 2, title: '操作失败'});
51 else 51 else
52 handle && handle(json); 52 handle && handle(json);
53 } 53 }
@@ -109,12 +109,12 @@ function putFormData(json, fId){ @@ -109,12 +109,12 @@ function putFormData(json, fId){
109 * @param data 109 * @param data
110 */ 110 */
111 function initPinYinSelect2(selector, data, cb){ 111 function initPinYinSelect2(selector, data, cb){
112 - 112 +
113 $.each(data, function(){ 113 $.each(data, function(){
114 this.fullChars = pinyin.getFullChars(this.text).toUpperCase(); 114 this.fullChars = pinyin.getFullChars(this.text).toUpperCase();
115 this.camelChars = pinyin.getCamelChars(this.text); 115 this.camelChars = pinyin.getCamelChars(this.text);
116 }); 116 });
117 - 117 +
118 $.fn.select2.amd.require(['select2/compat/matcher'], function (oldMatcher) { 118 $.fn.select2.amd.require(['select2/compat/matcher'], function (oldMatcher) {
119 $(selector).select2({ 119 $(selector).select2({
120 data: data, 120 data: data,
@@ -123,14 +123,14 @@ function initPinYinSelect2(selector, data, cb){ @@ -123,14 +123,14 @@ function initPinYinSelect2(selector, data, cb){
123 if(item.fullChars.indexOf(upTerm) != -1 123 if(item.fullChars.indexOf(upTerm) != -1
124 || item.camelChars.indexOf(upTerm) != -1) 124 || item.camelChars.indexOf(upTerm) != -1)
125 return true; 125 return true;
126 - 126 +
127 return text.indexOf(term) != -1; 127 return text.indexOf(term) != -1;
128 }) 128 })
129 }); 129 });
130 - 130 +
131 cb && cb($(selector)); 131 cb && cb($(selector));
132 }); 132 });
133 - 133 +
134 return $(selector); 134 return $(selector);
135 } 135 }
136 136
@@ -148,7 +148,7 @@ function createTreeData(arr){ @@ -148,7 +148,7 @@ function createTreeData(arr){
148 if(!pId){ 148 if(!pId){
149 treeData.push(arr[i]); 149 treeData.push(arr[i]);
150 } 150 }
151 - 151 +
152 for(var j = 0; j < len; j ++){ 152 for(var j = 0; j < len; j ++){
153 if(pId == arr[j].id){ 153 if(pId == arr[j].id){
154 if(!arr[j].children) 154 if(!arr[j].children)
@@ -204,4 +204,4 @@ function createVehSearch($e){ @@ -204,4 +204,4 @@ function createVehSearch($e){
204 } 204 }
205 }) 205 })
206 return $e; 206 return $e;
207 -}  
208 \ No newline at end of file 207 \ No newline at end of file
  208 +}
src/main/resources/static/pages/control/line/child_pages/historyDirective.html
@@ -54,7 +54,7 @@ @@ -54,7 +54,7 @@
54 <span class="label label-sm label-danger">{{item.errorText}}</span> 54 <span class="label label-sm label-danger">{{item.errorText}}</span>
55 {{else}} 55 {{else}}
56 {{if item.reply46 != 0}} 56 {{if item.reply46 != 0}}
57 - <span class="label label-sm label-danger">设备响应</span> 57 + <span class="label label-sm label-danger">设备响应</span>
58 {{else if item.reply47 != 0}} 58 {{else if item.reply47 != 0}}
59 <span class="label label-sm label-warning">驾驶员未确认</span> 59 <span class="label label-sm label-warning">驾驶员未确认</span>
60 {{/if}} 60 {{/if}}
src/main/resources/static/pages/control/line/css/lineControl.css
@@ -2663,4 +2663,17 @@ tr._home_tr_active abbr.abnormal{ @@ -2663,4 +2663,17 @@ tr._home_tr_active abbr.abnormal{
2663 bottom: 20px; 2663 bottom: 20px;
2664 right: 20px; 2664 right: 20px;
2665 color: #d0d0d0; 2665 color: #d0d0d0;
  2666 +}
  2667 +
  2668 +.banner .dropdown-menu {
  2669 + background-color: #ffffff;
  2670 + font-size: 13px;
  2671 +}
  2672 +.banner .dropdown-menu {
  2673 + box-shadow: 0 2px 5px 0 rgba(48, 164, 244, 0.24),0 2px 10px 0 rgba(48, 164, 244, 0.24);
  2674 +}
  2675 +
  2676 +.banner .dropdown-menu > li:hover > a{
  2677 + background-color: #679bbe;
  2678 + color: white !important;
2666 } 2679 }
2667 \ No newline at end of file 2680 \ No newline at end of file
src/main/resources/static/pages/control/line/js/data.js
@@ -323,14 +323,18 @@ var _data = (function(){ @@ -323,14 +323,18 @@ var _data = (function(){
323 } 323 }
324 324
325 function abnormalCheck(gps){ 325 function abnormalCheck(gps){
  326 + if(!stationRoute[gps.lineId])
  327 + return;
326 var routes = stationRoute[gps.lineId][gps.upDown] 328 var routes = stationRoute[gps.lineId][gps.upDown]
327 ,rs; 329 ,rs;
328 - $.each(routes , function(){  
329 - if(this.stationCode == gps.stopNo){  
330 - rs = 1;  
331 - return false;  
332 - }  
333 - }); 330 + if(routes){
  331 + $.each(routes , function(){
  332 + if(this.stationCode == gps.stopNo){
  333 + rs = 1;
  334 + return false;
  335 + }
  336 + });
  337 + }
334 338
335 if(!rs){ 339 if(!rs){
336 gps.abnormal = true; 340 gps.abnormal = true;
src/main/resources/static/pages/control/line/js/toolbarEvent.js
@@ -22,7 +22,7 @@ var _toolbarEvent = (function(){ @@ -22,7 +22,7 @@ var _toolbarEvent = (function(){
22 type: 1, 22 type: 1,
23 area: '980px', 23 area: '980px',
24 content: content, 24 content: content,
25 - title : false, 25 + title : '指令下发记录',
26 shift: 5, 26 shift: 5,
27 success: function(){ 27 success: function(){
28 } 28 }
@@ -37,7 +37,7 @@ var _toolbarEvent = (function(){ @@ -37,7 +37,7 @@ var _toolbarEvent = (function(){
37 type: 1, 37 type: 1,
38 area: '930px', 38 area: '930px',
39 content: content, 39 content: content,
40 - title : false, 40 + title : '设备上报',
41 shift: 5, 41 shift: 5,
42 success: function(){ 42 success: function(){
43 43
@@ -53,7 +53,7 @@ var _toolbarEvent = (function(){ @@ -53,7 +53,7 @@ var _toolbarEvent = (function(){
53 type: 1, 53 type: 1,
54 area: '530px', 54 area: '530px',
55 content: content, 55 content: content,
56 - title : false, 56 + title : 'TTS',
57 shift: 5, 57 shift: 5,
58 success: function(){ 58 success: function(){
59 } 59 }
@@ -61,6 +61,22 @@ var _toolbarEvent = (function(){ @@ -61,6 +61,22 @@ var _toolbarEvent = (function(){
61 }); 61 });
62 }); 62 });
63 63
  64 + //设备管理
  65 + $('#deviceConfig').on('click', function(){
  66 + $.get('/pages/control/line/child_pages/deviceConfig.html', function(content){
  67 + layer.open({
  68 + type: 1,
  69 + area: '530px',
  70 + content: content,
  71 + title : '设备管理',
  72 + shift: 5,
  73 + success: function(){
  74 + }
  75 + });
  76 + });
  77 + });
  78 +
  79 + //更新日志
64 $('#updateLogLink').on('click', function(){ 80 $('#updateLogLink').on('click', function(){
65 layer.alert(updateLog.text, { 81 layer.alert(updateLog.text, {
66 title: updateLog.title, 82 title: updateLog.title,