Commit 3ebf183b21ad35889af9825c2abf059a153e7ab2

Authored by 潘钊
1 parent aecfc182

update...

src/main/java/com/bsth/controller/realcontrol/anomalyCheckController.java
... ... @@ -51,10 +51,17 @@ public class anomalyCheckController {
51 51 }
52 52 }
53 53  
54   - @RequestMapping(value = "/gpsClientReconn", method = RequestMethod.POST)
  54 + @Autowired
  55 + ClientApp clientApp;
  56 +
  57 + @RequestMapping(value = "/gpsClientDestroy", method = RequestMethod.POST)
55 58 public void gpsClientReconn(){
56   - ClientApp.pdreconn();
57   - ClientApp.pfreconn();
  59 + clientApp.destroy();
  60 + }
  61 +
  62 + @RequestMapping(value = "/gpsClientInit", method = RequestMethod.POST)
  63 + public void gpsClientInit(){
  64 + clientApp.init();
58 65 }
59 66  
60 67 @RequestMapping(value = "/pdClose", method = RequestMethod.POST)
... ...
src/main/java/com/bsth/data/gpsdata/GpsRealData.java
... ... @@ -4,6 +4,7 @@ import com.bsth.Application;
4 4 import com.bsth.data.BasicData;
5 5 import com.bsth.data.forecast.ForecastRealServer;
6 6 import com.bsth.data.gpsdata.client.ClientApp;
  7 +import com.bsth.data.gpsdata.client.GpsBeforeBuffer;
7 8 import com.bsth.data.gpsdata.thread.GpsDataLoaderThread;
8 9 import com.bsth.data.gpsdata.thread.OfflineMonitorThread;
9 10 import com.bsth.data.schedule.DayOfSchedule;
... ... @@ -58,6 +59,8 @@ public class GpsRealData implements CommandLineRunner {
58 59  
59 60 @Autowired
60 61 ClientApp clientApp;
  62 + @Autowired
  63 + GpsBeforeBuffer gpsBeforeBuffer;
61 64 @Override
62 65 public void run(String... arg0) throws Exception {
63 66 logger.info("gpsDataLoader,20,3");
... ... @@ -68,6 +71,7 @@ public class GpsRealData implements CommandLineRunner {
68 71  
69 72 //gps 客户端
70 73 //clientApp.init();
  74 + //gpsBeforeBuffer.init();
71 75 }
72 76  
73 77  
... ...
src/main/java/com/bsth/data/gpsdata/arrival/GpsRealAnalyse.java
... ... @@ -11,6 +11,8 @@ import org.slf4j.LoggerFactory;
11 11 import org.springframework.beans.factory.annotation.Autowired;
12 12 import org.springframework.stereotype.Component;
13 13  
  14 +import java.util.Collections;
  15 +import java.util.Comparator;
14 16 import java.util.List;
15 17 import java.util.Set;
16 18 import java.util.concurrent.CountDownLatch;
... ... @@ -51,17 +53,17 @@ public class GpsRealAnalyse {
51 53  
52 54 long t = System.currentTimeMillis();
53 55 logger.info("analyse gps size: " + list.size());
54   - //按车辆分组gps
  56 + //按线路分组gps
55 57 ArrayListMultimap multimap = ArrayListMultimap.create();
56 58 for(GpsEntity gps : list){
57   - multimap.put(gps.getNbbm(), gps);
  59 + multimap.put(gps.getLineId(), gps);
58 60 }
59 61  
60 62 Set<String> ks = multimap.keySet();
61 63 CountDownLatch count = new CountDownLatch(ks.size());
62 64  
63   - for(String nbbm : ks){
64   - threadPool.execute(new SignalHandleThread(multimap.get(nbbm), count));
  65 + for(String lineCode : ks){
  66 + threadPool.execute(new SignalHandleThread(multimap.get(lineCode), count));
65 67 }
66 68  
67 69 try {
... ... @@ -78,6 +80,8 @@ public class GpsRealAnalyse {
78 80 }
79 81 }
80 82  
  83 + static GpsComp comp = new GpsComp();
  84 +
81 85 public class SignalHandleThread implements Runnable {
82 86  
83 87 List<GpsEntity> list;
... ... @@ -92,6 +96,7 @@ public class GpsRealAnalyse {
92 96 public void run() {
93 97  
94 98 try {
  99 + Collections.sort(list, comp);
95 100 for(GpsEntity gps : list){
96 101 //是否有任务
97 102 boolean task;
... ... @@ -122,4 +127,12 @@ public class GpsRealAnalyse {
122 127 }
123 128 }
124 129 }
  130 +
  131 + public static class GpsComp implements Comparator<GpsEntity> {
  132 +
  133 + @Override
  134 + public int compare(GpsEntity g1, GpsEntity g2) {
  135 + return g1.getTimestamp().compareTo(g2.getTimestamp());
  136 + }
  137 + }
125 138 }
... ...
src/main/java/com/bsth/data/gpsdata/client/ClientApp.java
... ... @@ -42,16 +42,7 @@ public class ClientApp {
42 42 static Logger logger = LoggerFactory.getLogger(ClientApp.class);
43 43 private static ExecutorService exec;
44 44  
45   - private ScheduledExecutorService sexec = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() {
46   -
47   - @Override
48   - public Thread newThread(Runnable r) {
49   - // TODO Auto-generated method stub
50   - Thread t = new Thread(r);
51   - t.setName("SessionCheckExecutor");
52   - return t;
53   - }
54   - });
  45 + private ScheduledExecutorService sexec;
55 46  
56 47 public static boolean dconnect(String device) {
57 48 boolean flag = false;
... ... @@ -123,6 +114,20 @@ public class ClientApp {
123 114 pfconnect(ConfigUtil.get("forward.device.name"));
124 115 }
125 116  
  117 + public void destroy(){
  118 + try {
  119 + logger.warn("socket client destroy!!!");
  120 + exec.shutdownNow();
  121 + sexec.shutdownNow();
  122 +
  123 + pdDataConnector.dispose(true);
  124 + pfDataConnector.dispose(true);
  125 + } catch (Exception e) {
  126 + logger.error("", e);
  127 + }
  128 + }
  129 +
  130 +
126 131 public static void pdClose(){
127 132 pdSession.closeNow();
128 133 }
... ... @@ -149,7 +154,17 @@ public class ClientApp {
149 154 }
150 155  
151 156 public void init() {
  157 + logger.warn("socket client init...");
152 158 exec = Executors.newFixedThreadPool(50);
  159 + sexec = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() {
  160 + @Override
  161 + public Thread newThread(Runnable r) {
  162 + // TODO Auto-generated method stub
  163 + Thread t = new Thread(r);
  164 + t.setName("SessionCheckExecutor");
  165 + return t;
  166 + }
  167 + });
153 168 sexec.scheduleAtFixedRate(new SessionChecker(), 1, 1, TimeUnit.MINUTES);
154 169 /*******************************浦东********************************/
155 170 pdDataConnector = new NioSocketConnector();
... ... @@ -192,9 +207,6 @@ public class ClientApp {
192 207  
193 208 pfDataConnector.setHandler(pfClient);
194 209 pfconnect(ConfigUtil.get("forward.device.name"));
195   -
196   -
197   - gpsBeforeBuffer.init();
198 210 }
199 211  
200 212  
... ...
src/main/java/com/bsth/data/gpsdata/client/GpsBeforeBuffer.java
... ... @@ -6,6 +6,8 @@ import com.bsth.data.gpsdata.GpsEntity;
6 6 import com.bsth.data.gpsdata.arrival.GpsRealAnalyse;
7 7 import com.bsth.data.gpsdata.client.pd.protocol.BasicInfo;
8 8 import org.apache.commons.lang3.StringUtils;
  9 +import org.slf4j.Logger;
  10 +import org.slf4j.LoggerFactory;
9 11 import org.springframework.beans.factory.annotation.Autowired;
10 12 import org.springframework.stereotype.Component;
11 13  
... ... @@ -66,6 +68,7 @@ public class GpsBeforeBuffer {
66 68 Application.mainServices.scheduleWithFixedDelay(gpsHandleThread, 20 * 1000, 1200, TimeUnit.MILLISECONDS);
67 69 }
68 70  
  71 + static int idleCount = 0;
69 72 @Component
70 73 public static class GpsHandleThread extends Thread{
71 74  
... ... @@ -74,6 +77,11 @@ public class GpsBeforeBuffer {
74 77 @Autowired
75 78 GpsRealAnalyse gpsRealAnalyse;
76 79  
  80 + @Autowired
  81 + ClientApp clientApp;
  82 +
  83 + Logger log = LoggerFactory.getLogger(this.getClass());
  84 +
77 85 @Override
78 86 public void run() {
79 87 list = new ArrayList<>(200);
... ... @@ -86,6 +94,16 @@ public class GpsBeforeBuffer {
86 94 list.add(gps);
87 95 }
88 96  
  97 + if(list.size() == 0){
  98 + idleCount ++;
  99 + //连续40次没有数据,重建socket连接
  100 + if(idleCount == 40){
  101 + log.info("idleCount == 40");
  102 + idleCount = 0;
  103 + clientApp.destroy();
  104 + clientApp.init();
  105 + }
  106 + }
89 107 gpsRealAnalyse.analyse(list);
90 108 }
91 109 }
... ...
src/main/java/com/bsth/data/gpsdata/recovery/GpsDataRecovery.java
... ... @@ -45,11 +45,11 @@ public class GpsDataRecovery implements ApplicationContextAware {
45 45 public void recovery() {
46 46 List<GpsEntity> list = loadData();
47 47  
48   - //按车辆分组数据
  48 + //按线路分组数据
49 49 ArrayListMultimap<String, GpsEntity> listMap = ArrayListMultimap.create();
50 50 for (GpsEntity gps : list) {
51   - if (gps.getNbbm() != null)
52   - listMap.put(gps.getNbbm(), gps);
  51 + if (gps.getLineId() != null)
  52 + listMap.put(gps.getLineId(), gps);
53 53 }
54 54  
55 55  
... ... @@ -57,9 +57,9 @@ public class GpsDataRecovery implements ApplicationContextAware {
57 57  
58 58 CountDownLatch count = new CountDownLatch(keys.size());
59 59 GpsComp comp = new GpsComp();
60   - for (String nbbm : keys) {
61   - Collections.sort(listMap.get(nbbm), comp);
62   - threadPool.execute(new RecoveryThread(listMap.get(nbbm), count));
  60 + for (String lineId : keys) {
  61 + Collections.sort(listMap.get(lineId), comp);
  62 + threadPool.execute(new RecoveryThread(listMap.get(lineId), count));
63 63 /*if(nbbm.equals("W7C-001"))
64 64 new RecoveryThread(listMap.get(nbbm), count).run();*/
65 65 }
... ...