Commit 9546557304b17c129855993cb112a99ebc39d1e0

Authored by 潘钊
2 parents 3bddd74e d343d965

update...

Too many changes to show.

To preserve performance only 11 of 16 files are displayed.

src/main/java/com/bsth/controller/oil/DlbController.java
... ... @@ -21,6 +21,7 @@ import com.bsth.controller.BaseController;
21 21 import com.bsth.entity.oil.Dlb;
22 22 import com.bsth.entity.oil.Ylb;
23 23 import com.bsth.service.oil.DlbService;
  24 +import com.bsth.util.Arith;
24 25 import com.bsth.util.ReportUtils;
25 26 import com.google.common.base.Splitter;
26 27  
... ... @@ -164,10 +165,10 @@ public class DlbController extends BaseController<Dlb, Integer>{
164 165 String shyy ="无";
165 166 if(y.getShyy()!=null){
166 167 shyy=y.getShyy();
167   - if(shyy.equals("1")){shyy="票务用油";}
168   - else if(shyy.equals("2")){shyy="保养用油";}
169   - else if(shyy.equals("3")){shyy="报废车用油";}
170   - else if(shyy.equals("4")){shyy="其它用油";}
  168 + if(shyy.equals("1")){shyy="票务用电";}
  169 + else if(shyy.equals("2")){shyy="保养用电";}
  170 + else if(shyy.equals("3")){shyy="报废车用电";}
  171 + else if(shyy.equals("4")){shyy="其它用电";}
171 172 else if(shyy.equals("5")){shyy="人保部";}
172 173 else if(shyy.equals("6")){shyy="车队";}
173 174 else if(shyy.equals("7")){shyy="车间(高保)";}
... ... @@ -180,6 +181,7 @@ public class DlbController extends BaseController<Dlb, Integer>{
180 181 m.put("zlc", y.getZlc()<=0?"0":y.getZlc());
181 182 m.put("rdlx", "");
182 183 m.put("bglyh", y.getBglyh());
  184 + m.put("zdh", Arith.add(y.getSh(), y.getHd()));
183 185 resList.add(m);
184 186 }
185 187 try {
... ...
src/main/java/com/bsth/controller/oil/YlbController.java
... ... @@ -27,6 +27,7 @@ import com.bsth.entity.oil.Ylb;
27 27 import com.bsth.entity.sys.SysUser;
28 28 import com.bsth.security.util.SecurityUtils;
29 29 import com.bsth.service.oil.YlbService;
  30 +import com.bsth.util.Arith;
30 31 import com.bsth.util.ReportUtils;
31 32 import com.google.common.base.Splitter;
32 33  
... ... @@ -273,6 +274,7 @@ public class YlbController extends BaseController&lt;Ylb, Integer&gt;{
273 274 m.put("sh", y.getSh()<=0?"0":y.getSh());
274 275 m.put("zlc", y.getZlc()<=0?"0":y.getZlc());
275 276 m.put("bglyh", y.getBglyh());
  277 + m.put("zyh", Arith.add(y.getSh(), y.getYh()));
276 278 resList.add(m);
277 279 }
278 280 try {
... ...
src/main/java/com/bsth/data/gpsdata_v2/DataHandleProcess.java
1   -package com.bsth.data.gpsdata_v2;
2   -
3   -import com.bsth.data.gpsdata_v2.cache.GpsCacheData;
4   -import com.bsth.data.gpsdata_v2.entity.GpsEntity;
5   -import com.bsth.data.gpsdata_v2.handlers.*;
6   -import com.google.common.collect.ArrayListMultimap;
7   -import org.slf4j.Logger;
8   -import org.slf4j.LoggerFactory;
9   -import org.springframework.beans.factory.annotation.Autowired;
10   -import org.springframework.stereotype.Component;
11   -
12   -import java.util.ArrayList;
13   -import java.util.List;
14   -import java.util.Set;
15   -import java.util.concurrent.CountDownLatch;
16   -import java.util.concurrent.ExecutorService;
17   -import java.util.concurrent.Executors;
18   -import java.util.concurrent.ThreadFactory;
19   -
20   -/**
21   - * 实时信号数据处理
22   - * Created by panzhao on 2017/11/15.
23   - */
24   -@Component
25   -public class DataHandleProcess {
26   -
27   - static Logger logger = LoggerFactory.getLogger(DataHandleProcess.class);
28   - final static int POOL_SIZE = 25;
29   -
30   - static ExecutorService threadPool = Executors.newFixedThreadPool(POOL_SIZE + 1, new HandlerThreadFactory());
31   - public static CountDownLatch count;
32   -
33   - @Autowired
34   - GpsStateProcess gpsStateProcess;
35   - @Autowired
36   - StationInsideProcess stationInsideProcess;
37   - @Autowired
38   - AbnormalStateProcess abnormalStateProcess;
39   - @Autowired
40   - InStationProcess inStationProcess;
41   - @Autowired
42   - OutStationProcess outStationProcess;
43   - @Autowired
44   - ReverseRouteProcess reverseRouteProcess;
45   -
46   - @Autowired
47   - GpsRealData gpsRealData;
48   -
49   - public void handle(List<GpsEntity> list) {
50   - try {
51   - //按设备号分组数据(一个设备的多条数据,必须在一个线程里跑)
52   - ArrayListMultimap multimap = ArrayListMultimap.create();
53   - for (GpsEntity gps : list) {
54   - multimap.put(gps.getDeviceId(), gps);
55   - }
56   - List<String> deviceList = new ArrayList<>(multimap.keySet());
57   -
58   - //数据均分给线程
59   - ArrayListMultimap dataListMap = ArrayListMultimap.create();
60   - int size = deviceList.size(), threadIndex = 0, threadSize = size / POOL_SIZE;
61   - for (int i = 0; i < size; i++) {
62   - if (i % threadSize == 0)
63   - threadIndex++;
64   - dataListMap.putAll(threadIndex, multimap.get(deviceList.get(i)));
65   - }
66   - Set<Integer> ks = dataListMap.keySet();
67   - logger.info("analyse gps size: " + list.size() + ", ks: " + ks.size());
68   - count = new CountDownLatch(ks.size());
69   -
70   - for (Integer index : ks) {
71   - threadPool.execute(new SignalHandleThread(dataListMap.get(index), count));
72   - }
73   -
74   - //等待子线程结束
75   - count.await();
76   -
77   - //加入实时gps对照
78   - for (GpsEntity gps : list)
79   - gpsRealData.put(gps);
80   - } catch (Exception e) {
81   - logger.error("", e);
82   - }
83   - }
84   -
85   - public class SignalHandleThread implements Runnable {
86   -
87   - List<GpsEntity> list;
88   - CountDownLatch count;
89   -
90   - SignalHandleThread(List<GpsEntity> gpsList, CountDownLatch count) {
91   - this.list = gpsList;
92   - this.count = count;
93   - }
94   -
95   - @Override
96   - public void run() {
97   - try {
98   - for (GpsEntity gps : list) {
99   - try{
100   - if(Math.abs(gps.getTimestamp() - gps.getServerTimestamp()) > 1000 * 60 * 20)
101   - continue;
102   -
103   - gpsStateProcess.process(gps);//状态处理
104   - stationInsideProcess.process(gps);//场站内外判定
105   - reverseRouteProcess.process(gps);//反向路由处理
106   - abnormalStateProcess.process(gps);//超速越界
107   -
108   - inStationProcess.process(gps);//进站
109   - outStationProcess.process(gps);//出站
110   -
111   - GpsCacheData.putGps(gps);//历史gps缓存
112   - }catch (Exception e){
113   - logger.error("", e);
114   - }
115   - }
116   - } finally {
117   - if (count != null)
118   - count.countDown();
119   - }
120   - }
121   - }
122   -
123   - static class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {
124   - @Override
125   - public void uncaughtException(Thread t, Throwable e) {
126   - logger.error("caught " , e);
127   - }
128   - }
129   -
130   - static class HandlerThreadFactory implements ThreadFactory {
131   - @Override
132   - public Thread newThread(Runnable r) {
133   - Thread t = new Thread(r);
134   - t.setUncaughtExceptionHandler(new MyUncaughtExceptionHandler());
135   - return t;
136   - }
137   - }
  1 +package com.bsth.data.gpsdata_v2;
  2 +
  3 +import com.bsth.data.gpsdata_v2.cache.GpsCacheData;
  4 +import com.bsth.data.gpsdata_v2.entity.GpsEntity;
  5 +import com.bsth.data.gpsdata_v2.handlers.*;
  6 +import com.google.common.collect.ArrayListMultimap;
  7 +import org.slf4j.Logger;
  8 +import org.slf4j.LoggerFactory;
  9 +import org.springframework.beans.factory.annotation.Autowired;
  10 +import org.springframework.stereotype.Component;
  11 +
  12 +import java.util.ArrayList;
  13 +import java.util.List;
  14 +import java.util.Set;
  15 +import java.util.concurrent.CountDownLatch;
  16 +import java.util.concurrent.ExecutorService;
  17 +import java.util.concurrent.Executors;
  18 +import java.util.concurrent.ThreadFactory;
  19 +
  20 +/**
  21 + * 实时信号数据处理
  22 + * Created by panzhao on 2017/11/15.
  23 + */
  24 +@Component
  25 +public class DataHandleProcess {
  26 +
  27 + static Logger logger = LoggerFactory.getLogger(DataHandleProcess.class);
  28 + final static int POOL_SIZE = 25;
  29 +
  30 + static ExecutorService threadPool = Executors.newFixedThreadPool(POOL_SIZE + 1, new HandlerThreadFactory());
  31 + public static CountDownLatch count;
  32 +
  33 + @Autowired
  34 + GpsStateProcess gpsStateProcess;
  35 + @Autowired
  36 + StationInsideProcess stationInsideProcess;
  37 + @Autowired
  38 + AbnormalStateProcess abnormalStateProcess;
  39 + @Autowired
  40 + InStationProcess inStationProcess;
  41 + @Autowired
  42 + OutStationProcess outStationProcess;
  43 + @Autowired
  44 + ReverseRouteProcess reverseRouteProcess;
  45 +
  46 + @Autowired
  47 + GpsRealData gpsRealData;
  48 +
  49 + public void handle(List<GpsEntity> list) {
  50 + try {
  51 + //按设备号分组数据(一个设备的多条数据,必须在一个线程里跑)
  52 + ArrayListMultimap multimap = ArrayListMultimap.create();
  53 + for (GpsEntity gps : list) {
  54 + multimap.put(gps.getDeviceId(), gps);
  55 + }
  56 + List<String> deviceList = new ArrayList<>(multimap.keySet());
  57 +
  58 + //数据均分给线程
  59 + ArrayListMultimap dataListMap = ArrayListMultimap.create();
  60 + int size = deviceList.size(), threadIndex = 0, threadSize = size / POOL_SIZE;
  61 + for (int i = 0; i < size; i++) {
  62 + if (i % threadSize == 0)
  63 + threadIndex++;
  64 + dataListMap.putAll(threadIndex, multimap.get(deviceList.get(i)));
  65 + }
  66 + Set<Integer> ks = dataListMap.keySet();
  67 + logger.info("analyse gps size: " + list.size() + ", ks: " + ks.size());
  68 + count = new CountDownLatch(ks.size());
  69 +
  70 + for (Integer index : ks) {
  71 + threadPool.execute(new SignalHandleThread(dataListMap.get(index), count));
  72 + }
  73 +
  74 + //等待子线程结束
  75 + count.await();
  76 +
  77 + //加入实时gps对照
  78 + for (GpsEntity gps : list)
  79 + gpsRealData.put(gps);
  80 + } catch (Exception e) {
  81 + logger.error("", e);
  82 + }
  83 + }
  84 +
  85 + public class SignalHandleThread implements Runnable {
  86 +
  87 + List<GpsEntity> list;
  88 + CountDownLatch count;
  89 +
  90 + SignalHandleThread(List<GpsEntity> gpsList, CountDownLatch count) {
  91 + this.list = gpsList;
  92 + this.count = count;
  93 + }
  94 +
  95 + @Override
  96 + public void run() {
  97 + try {
  98 + for (GpsEntity gps : list) {
  99 + try{
  100 + if(Math.abs(gps.getTimestamp() - gps.getServerTimestamp()) > 1000 * 60 * 20)
  101 + continue;
  102 +
  103 + gpsStateProcess.process(gps);//状态处理
  104 + stationInsideProcess.process(gps);//场站内外判定
  105 + reverseRouteProcess.process(gps);//反向路由处理
  106 + abnormalStateProcess.process(gps);//超速越界
  107 +
  108 + inStationProcess.process(gps);//进站
  109 + outStationProcess.process(gps);//出站
  110 +
  111 + GpsCacheData.putGps(gps);//历史gps缓存
  112 + }catch (Exception e){
  113 + logger.error("", e);
  114 + }
  115 + }
  116 + } finally {
  117 + if (count != null)
  118 + count.countDown();
  119 + }
  120 + }
  121 + }
  122 +
  123 + static class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {
  124 + @Override
  125 + public void uncaughtException(Thread t, Throwable e) {
  126 + logger.error("caught " , e);
  127 + }
  128 + }
  129 +
  130 + static class HandlerThreadFactory implements ThreadFactory {
  131 + @Override
  132 + public Thread newThread(Runnable r) {
  133 + Thread t = new Thread(r);
  134 + t.setUncaughtExceptionHandler(new MyUncaughtExceptionHandler());
  135 + return t;
  136 + }
  137 + }
138 138 }
139 139 \ No newline at end of file
... ...
src/main/java/com/bsth/data/gpsdata_v2/cache/GeoCacheData.java
1   -package com.bsth.data.gpsdata_v2.cache;
2   -
3   -import com.bsth.data.gpsdata_v2.entity.CtLineString;
4   -import com.bsth.data.gpsdata_v2.entity.GpsEntity;
5   -import com.bsth.data.gpsdata_v2.entity.PreconditionGeo;
6   -import com.bsth.data.gpsdata_v2.entity.StationRoute;
7   -import com.bsth.data.gpsdata_v2.utils.StationRouteComp;
8   -import com.bsth.util.Geo.Point;
9   -import com.bsth.util.Geo.Polygon;
10   -import com.google.common.base.Splitter;
11   -import com.google.common.collect.ArrayListMultimap;
12   -import org.apache.commons.lang3.StringUtils;
13   -import org.slf4j.Logger;
14   -import org.slf4j.LoggerFactory;
15   -import org.springframework.beans.factory.annotation.Autowired;
16   -import org.springframework.jdbc.core.BeanPropertyRowMapper;
17   -import org.springframework.jdbc.core.JdbcTemplate;
18   -import org.springframework.jdbc.core.RowMapper;
19   -import org.springframework.stereotype.Component;
20   -
21   -import java.sql.ResultSet;
22   -import java.sql.SQLException;
23   -import java.util.*;
24   -
25   -/**
26   - * 空间数据缓存
27   - * Created by panzhao on 2017/11/15.
28   - */
29   -@Component
30   -public class GeoCacheData {
31   -
32   - static Logger logger = LoggerFactory.getLogger(GeoCacheData.class);
33   -
34   - /**
35   - * 线路路段走向
36   - */
37   - private static ArrayListMultimap<String, CtLineString> sectionCacheMap;
38   - /**
39   - * 路段编码和名称对照
40   - */
41   - private static Map<String, String> sectionCode2Name;
42   - /**
43   - * 线路站点路由
44   - */
45   - private static ArrayListMultimap<String, StationRoute> stationCacheMap;
46   - /**
47   - * 线路前置进站围栏
48   - */
49   - public static ArrayListMultimap<String, PreconditionGeo> premiseGeoMap;
50   - /**
51   - * 线路_上下行_站点编码 ——> 站点
52   - */
53   - private static Map<String, StationRoute> routeCodeMap;
54   - /**
55   - * 停车场
56   - */
57   - public static Map<String, Polygon> tccMap;
58   - /**
59   - * 线路限速信息
60   - */
61   - private static Map<String, Double> speedLimitMap;
62   -
63   - @Autowired
64   - JdbcTemplate jdbcTemplate;
65   -
66   - public void loadData() {
67   - loadStationRoutesData();
68   - loadTccMapData();
69   - loadSpeedLimit();
70   -
71   - //加载路段信息
72   - loadRoadsData();
73   -
74   - //加载前置进站围栏
75   - loadPremiseGeoData();
76   - }
77   -
78   - public static List<StationRoute> getStationRoute(String lineCode, int directions) {
79   - return stationCacheMap.get(lineCode + "_" + directions);
80   - }
81   -
82   - public static StationRoute getRouteCode(GpsEntity gps) {
83   - return routeCodeMap.get(gps.getLineId() + "_" + gps.getUpDown() + "_" + gps.getStopNo());
84   - }
85   -
86   - public static Double speedLimit(String lineCode){
87   - return speedLimitMap.get(lineCode);
88   - }
89   -
90   - public static List<CtLineString> getLineStringList(GpsEntity gps){
91   - return sectionCacheMap.get(gps.getLineId() + "_" + gps.getUpDown());
92   - }
93   -
94   - private void loadStationRoutesData(){
95   - String sql = "select r.LINE_CODE,r.DIRECTIONS,r.STATION_CODE,r.STATION_MARK,s.SHAPES_TYPE,s.G_LONX,s.G_LATY,ST_AsText(s.G_POLYGON_GRID) as G_POLYGON_GRID,s.RADIUS, r.STATION_ROUTE_CODE,s.STATION_NAME from bsth_c_stationroute r left join bsth_c_station s on r.station=s.id where r.destroy=0 order by r.station_route_code";
96   - List<StationRoute> routeList = jdbcTemplate.query(sql, new RowMapper<StationRoute>() {
97   -
98   - @Override
99   - public StationRoute mapRow(ResultSet rs, int rowNum) throws SQLException {
100   - StationRoute sRoute = new StationRoute();
101   - sRoute.setCode(rs.getString("STATION_CODE"));
102   - sRoute.setLineCode(rs.getString("LINE_CODE"));
103   - sRoute.setDirections(rs.getInt("DIRECTIONS"));
104   - sRoute.setPoint(new Point(rs.getFloat("G_LONX"), rs.getFloat("G_LATY")));
105   - sRoute.setRadius(rs.getFloat("RADIUS"));
106   - sRoute.setRouteSort(rs.getInt("STATION_ROUTE_CODE"));
107   - sRoute.setMark(rs.getString("STATION_MARK"));
108   - sRoute.setName(rs.getString("STATION_NAME"));
109   -
110   - String shapesType = rs.getString("SHAPES_TYPE");
111   - //多边形电子围栏
112   - if (StringUtils.isNotEmpty(shapesType) && shapesType.equals("d"))
113   - sRoute.setPolygon(parsePolygon(rs.getString("G_POLYGON_GRID")));
114   - return sRoute;
115   - }
116   - });
117   -
118   - //按线路和走向分组
119   - if (routeList.size() > 0) {
120   - ArrayListMultimap<String, StationRoute> tempMap = ArrayListMultimap.create();
121   - Map<String, StationRoute> codeMap = new HashMap<>(routeList.size());
122   - for (StationRoute sr : routeList) {
123   - tempMap.put(sr.getLineCode() + "_" + sr.getDirections(), sr);
124   - //站点编码 ——> 和路由顺序对照
125   - codeMap.put(sr.getLineCode() + "_" + sr.getDirections() + "_" + sr.getCode(), sr);
126   - }
127   -
128   - StationRouteComp srCom = new StationRouteComp();
129   - //连接路由
130   - Set<String> set = tempMap.keySet();
131   - for (String key : set) {
132   - Collections.sort(tempMap.get(key), srCom);
133   - connectStationRoute(tempMap.get(key));
134   - }
135   - stationCacheMap = tempMap;
136   - routeCodeMap = codeMap;
137   - }
138   - }
139   -
140   - private void loadTccMapData(){
141   - //加载停车场数据
142   - String sql = "select PARK_CODE, ST_AsText(G_PARK_POINT) as G_PARK_POINT from bsth_c_car_park where park_code is not null and b_park_point is not null";
143   - List<Map<String, Object>> tccList = jdbcTemplate.queryForList(sql);
144   - Map<String, Polygon> tccTempMap = new HashMap<>();
145   -
146   - Polygon polygon;
147   - for (Map<String, Object> tMap : tccList) {
148   -
149   - try {
150   - polygon = parsePolygon(tMap.get("G_PARK_POINT").toString());
151   - tccTempMap.put(tMap.get("PARK_CODE").toString()
152   - , polygon);
153   - } catch (Exception e) {
154   - logger.error("停车场:" + tMap.get("PARK_CODE"), e);
155   - }
156   - }
157   - if (tccTempMap.size() > 0){
158   - tccMap = tccTempMap;
159   - }
160   - }
161   -
162   - private void loadSpeedLimit(){
163   - //加载线路限速信息
164   - String sql = "select l.LINE_CODE,i.SPEEDING from bsth_c_line_information i left join bsth_c_line l on i.line=l.id where i.speed_limit is not null";
165   - List<Map<String, Object>> speedMap = jdbcTemplate.queryForList(sql);
166   - Map<String, Double> speedTempMap = new HashMap<>();
167   - for (Map<String, Object> tMap : speedMap) {
168   - try {
169   - speedTempMap.put(tMap.get("LINE_CODE").toString(), Double.parseDouble(tMap.get("SPEEDING").toString()));
170   - } catch (NumberFormatException e) {
171   - logger.error("speeding is null...");
172   - }
173   - }
174   - speedLimitMap = speedTempMap;
175   - }
176   -
177   - private void loadRoadsData() {
178   - //加载线路下路段空间数据
179   - String sql = "select r.LINE_CODE,r.SECTION_CODE,r.SECTIONROUTE_CODE,s.SECTION_NAME,ST_AsText(s.GSECTION_VECTOR) as GSECTION_VECTOR, r.DIRECTIONS, s.CROSES_ROAD from bsth_c_sectionroute r INNER JOIN bsth_c_section s on r.section=s.id where r.destroy=0 and GSECTION_VECTOR is not null order by line_code,directions,sectionroute_code";
180   - List<Map<String, Object>> secList = jdbcTemplate.queryForList(sql);
181   -
182   - String polygonStr, key;
183   - String[] coords;
184   - int i, len;
185   - ArrayListMultimap<String, CtLineString> sectionCacheTempMap = ArrayListMultimap.create();
186   - String[] temps1, temps2;
187   - CtLineString lineString;
188   - for (Map<String, Object> tMap : secList) {
189   - //空间数据映射
190   - polygonStr = tMap.get("GSECTION_VECTOR").toString();
191   - key = tMap.get("LINE_CODE") + "_" + tMap.get("DIRECTIONS");
192   -
193   - coords = polygonStr.substring(11, polygonStr.length() - 1).split(",");
194   - len = coords.length - 1;
195   - //每2个点连一条线
196   - for(i = 0; i < len; i ++){
197   - temps1 = coords[i].split(" ");
198   - temps2 = coords[i + 1].split(" ");
199   -
200   - lineString = new CtLineString();
201   - lineString.setS(new Point(Float.parseFloat(temps1[0]), Float.parseFloat(temps1[1])));
202   - lineString.setE(new Point(Float.parseFloat(temps2[0]), Float.parseFloat(temps2[1])));
203   -
204   - sectionCacheTempMap.put(key, lineString);
205   - }
206   - }
207   -
208   - if(sectionCacheTempMap.size() > 0)
209   - sectionCacheMap = sectionCacheTempMap;
210   -
211   - Map<String, String> sectionCode2NameTemp = new HashMap<>();
212   -
213   - //加载全量路段编码和名称对照
214   - sql = "select SECTION_CODE,SECTION_NAME,CROSES_ROAD from bsth_c_section";
215   - secList = jdbcTemplate.queryForList(sql);
216   - String name = null, code;
217   - for (Map<String, Object> tMap : secList) {
218   - if(tMap.get("CROSES_ROAD") != null && StringUtils.isNotEmpty(tMap.get("CROSES_ROAD").toString()))
219   - name = tMap.get("CROSES_ROAD").toString();
220   - else if(tMap.get("SECTION_NAME") != null && StringUtils.isNotEmpty(tMap.get("SECTION_NAME").toString()))
221   - name = tMap.get("SECTION_NAME").toString();
222   -
223   - code = tMap.get("SECTION_CODE").toString();
224   - sectionCode2NameTemp.put(code, name);
225   - }
226   - if(sectionCode2NameTemp.size() > 0)
227   - sectionCode2Name = sectionCode2NameTemp;
228   - }
229   -
230   - private void loadPremiseGeoData() {
231   - ArrayListMultimap<String, PreconditionGeo> premiseGeoMapCopy = ArrayListMultimap.create();
232   -
233   - String sql = "select * from bsth_f_geo_premise";
234   - List<PreconditionGeo> list = jdbcTemplate.query(sql, BeanPropertyRowMapper.newInstance(PreconditionGeo.class));
235   -
236   - List<String> coordList;
237   - String[] cs;
238   - Point point;
239   - List<Point> ps;
240   - StationRoute sr;
241   - for(PreconditionGeo p : list){
242   - try{
243   - sr = routeCodeMap.get(p.getLineCode()+"_"+p.getUpDown()+"_"+p.getStationCode());
244   - p.setOrder(sr.getRouteSort());
245   - //polygon
246   - ps = new ArrayList<>();
247   - coordList = Splitter.on(",").trimResults().splitToList(p.getCoords());
248   - for(String c : coordList){
249   - cs = c.split(" ");
250   - point = new Point(Double.parseDouble(cs[0]), Double.parseDouble(cs[1]));
251   - ps.add(point);
252   - }
253   -
254   - p.setPolygon(new Polygon(ps));
255   -
256   - sr.setPremise(true);
257   - //按线路,走向分组
258   - premiseGeoMapCopy.put(p.getLineCode()+"_"+p.getUpDown(), p);
259   - }catch (Exception e){
260   - logger.error("", e);
261   - }
262   - }
263   -
264   - //排序
265   - Set<String> ks = premiseGeoMapCopy.keySet();
266   - PreconditionGeoComp comp = new PreconditionGeoComp();
267   - for(String k : ks){
268   - Collections.sort(premiseGeoMapCopy.get(k), comp);
269   - }
270   -
271   - premiseGeoMap = premiseGeoMapCopy;
272   - }
273   -
274   - public Polygon parsePolygon(String polygonStr) {
275   - String[] coords = polygonStr.substring(9, polygonStr.length() - 2).split(","), temps;
276   -
277   - List<Point> cds = new ArrayList<>(coords.length);
278   - int len = coords.length;
279   - for (int i = 0; i < len; i++) {
280   - temps = coords[i].split(" ");
281   - cds.add(new Point(Float.parseFloat(temps[0]), Float.parseFloat(temps[1])));
282   - }
283   - return new Polygon(cds);
284   - }
285   -
286   - private void connectStationRoute(List<StationRoute> list) {
287   - int size = list.size();
288   - StationRoute sr = null;
289   - for (int i = 0; i < size; i++) {
290   - sr = list.get(i);
291   - //上一个
292   - if (i > 0)
293   - sr.setPrve(list.get(i - 1));
294   - //下一个
295   - if (i < size - 1)
296   - sr.setNext(list.get(i + 1));
297   - }
298   - }
299   -
300   - /**
301   - * 是否是环线
302   - * @param lineId
303   - * @return
304   - */
305   - public static boolean isLoopLine(String lineId) {
306   - List<StationRoute> srs = getStationRoute(lineId , 0);
307   - if(srs.get(0).getName().equals(srs.get(srs.size()- 1).getName())
308   - && getStationRoute(lineId , 1).size()==2)
309   - return true;
310   - return false;
311   - }
312   -
313   - private static class PreconditionGeoComp implements Comparator<PreconditionGeo>{
314   -
315   - @Override
316   - public int compare(PreconditionGeo p1, PreconditionGeo p2) {
317   - return p1.getOrder() - p2.getOrder();
318   - }
319   - }
320   -
321   - public static Map<String, String> sectionCode2NameMap(){
322   - return sectionCode2Name;
323   - }
  1 +package com.bsth.data.gpsdata_v2.cache;
  2 +
  3 +import com.bsth.data.gpsdata_v2.entity.CtLineString;
  4 +import com.bsth.data.gpsdata_v2.entity.GpsEntity;
  5 +import com.bsth.data.gpsdata_v2.entity.PreconditionGeo;
  6 +import com.bsth.data.gpsdata_v2.entity.StationRoute;
  7 +import com.bsth.data.gpsdata_v2.utils.StationRouteComp;
  8 +import com.bsth.util.Geo.Point;
  9 +import com.bsth.util.Geo.Polygon;
  10 +import com.google.common.base.Splitter;
  11 +import com.google.common.collect.ArrayListMultimap;
  12 +import org.apache.commons.lang3.StringUtils;
  13 +import org.slf4j.Logger;
  14 +import org.slf4j.LoggerFactory;
  15 +import org.springframework.beans.factory.annotation.Autowired;
  16 +import org.springframework.jdbc.core.BeanPropertyRowMapper;
  17 +import org.springframework.jdbc.core.JdbcTemplate;
  18 +import org.springframework.jdbc.core.RowMapper;
  19 +import org.springframework.stereotype.Component;
  20 +
  21 +import java.sql.ResultSet;
  22 +import java.sql.SQLException;
  23 +import java.util.*;
  24 +
  25 +/**
  26 + * 空间数据缓存
  27 + * Created by panzhao on 2017/11/15.
  28 + */
  29 +@Component
  30 +public class GeoCacheData {
  31 +
  32 + static Logger logger = LoggerFactory.getLogger(GeoCacheData.class);
  33 +
  34 + /**
  35 + * 线路路段走向
  36 + */
  37 + private static ArrayListMultimap<String, CtLineString> sectionCacheMap;
  38 + /**
  39 + * 路段编码和名称对照
  40 + */
  41 + private static Map<String, String> sectionCode2Name;
  42 + /**
  43 + * 线路站点路由
  44 + */
  45 + private static ArrayListMultimap<String, StationRoute> stationCacheMap;
  46 + /**
  47 + * 线路前置进站围栏
  48 + */
  49 + public static ArrayListMultimap<String, PreconditionGeo> premiseGeoMap;
  50 + /**
  51 + * 线路_上下行_站点编码 ——> 站点
  52 + */
  53 + private static Map<String, StationRoute> routeCodeMap;
  54 + /**
  55 + * 停车场
  56 + */
  57 + public static Map<String, Polygon> tccMap;
  58 + /**
  59 + * 线路限速信息
  60 + */
  61 + private static Map<String, Double> speedLimitMap;
  62 +
  63 + @Autowired
  64 + JdbcTemplate jdbcTemplate;
  65 +
  66 + public void loadData() {
  67 + loadStationRoutesData();
  68 + loadTccMapData();
  69 + loadSpeedLimit();
  70 +
  71 + //加载路段信息
  72 + loadRoadsData();
  73 +
  74 + //加载前置进站围栏
  75 + loadPremiseGeoData();
  76 + }
  77 +
  78 + public static List<StationRoute> getStationRoute(String lineCode, int directions) {
  79 + return stationCacheMap.get(lineCode + "_" + directions);
  80 + }
  81 +
  82 + public static StationRoute getRouteCode(GpsEntity gps) {
  83 + return routeCodeMap.get(gps.getLineId() + "_" + gps.getUpDown() + "_" + gps.getStopNo());
  84 + }
  85 +
  86 + public static Double speedLimit(String lineCode){
  87 + return speedLimitMap.get(lineCode);
  88 + }
  89 +
  90 + public static List<CtLineString> getLineStringList(GpsEntity gps){
  91 + return sectionCacheMap.get(gps.getLineId() + "_" + gps.getUpDown());
  92 + }
  93 +
  94 + private void loadStationRoutesData(){
  95 + String sql = "select r.LINE_CODE,r.DIRECTIONS,r.STATION_CODE,r.STATION_MARK,s.SHAPES_TYPE,s.G_LONX,s.G_LATY,ST_AsText(s.G_POLYGON_GRID) as G_POLYGON_GRID,s.RADIUS, r.STATION_ROUTE_CODE,s.STATION_NAME from bsth_c_stationroute r left join bsth_c_station s on r.station=s.id where r.destroy=0 order by r.station_route_code";
  96 + List<StationRoute> routeList = jdbcTemplate.query(sql, new RowMapper<StationRoute>() {
  97 +
  98 + @Override
  99 + public StationRoute mapRow(ResultSet rs, int rowNum) throws SQLException {
  100 + StationRoute sRoute = new StationRoute();
  101 + sRoute.setCode(rs.getString("STATION_CODE"));
  102 + sRoute.setLineCode(rs.getString("LINE_CODE"));
  103 + sRoute.setDirections(rs.getInt("DIRECTIONS"));
  104 + sRoute.setPoint(new Point(rs.getFloat("G_LONX"), rs.getFloat("G_LATY")));
  105 + sRoute.setRadius(rs.getFloat("RADIUS"));
  106 + sRoute.setRouteSort(rs.getInt("STATION_ROUTE_CODE"));
  107 + sRoute.setMark(rs.getString("STATION_MARK"));
  108 + sRoute.setName(rs.getString("STATION_NAME"));
  109 +
  110 + String shapesType = rs.getString("SHAPES_TYPE");
  111 + //多边形电子围栏
  112 + if (StringUtils.isNotEmpty(shapesType) && shapesType.equals("d"))
  113 + sRoute.setPolygon(parsePolygon(rs.getString("G_POLYGON_GRID")));
  114 + return sRoute;
  115 + }
  116 + });
  117 +
  118 + //按线路和走向分组
  119 + if (routeList.size() > 0) {
  120 + ArrayListMultimap<String, StationRoute> tempMap = ArrayListMultimap.create();
  121 + Map<String, StationRoute> codeMap = new HashMap<>(routeList.size());
  122 + for (StationRoute sr : routeList) {
  123 + tempMap.put(sr.getLineCode() + "_" + sr.getDirections(), sr);
  124 + //站点编码 ——> 和路由顺序对照
  125 + codeMap.put(sr.getLineCode() + "_" + sr.getDirections() + "_" + sr.getCode(), sr);
  126 + }
  127 +
  128 + StationRouteComp srCom = new StationRouteComp();
  129 + //连接路由
  130 + Set<String> set = tempMap.keySet();
  131 + for (String key : set) {
  132 + Collections.sort(tempMap.get(key), srCom);
  133 + connectStationRoute(tempMap.get(key));
  134 + }
  135 + stationCacheMap = tempMap;
  136 + routeCodeMap = codeMap;
  137 + }
  138 + }
  139 +
  140 + private void loadTccMapData(){
  141 + //加载停车场数据
  142 + String sql = "select PARK_CODE, ST_AsText(G_PARK_POINT) as G_PARK_POINT from bsth_c_car_park where park_code is not null and b_park_point is not null";
  143 + List<Map<String, Object>> tccList = jdbcTemplate.queryForList(sql);
  144 + Map<String, Polygon> tccTempMap = new HashMap<>();
  145 +
  146 + Polygon polygon;
  147 + for (Map<String, Object> tMap : tccList) {
  148 +
  149 + try {
  150 + polygon = parsePolygon(tMap.get("G_PARK_POINT").toString());
  151 + tccTempMap.put(tMap.get("PARK_CODE").toString()
  152 + , polygon);
  153 + } catch (Exception e) {
  154 + logger.error("停车场:" + tMap.get("PARK_CODE"), e);
  155 + }
  156 + }
  157 + if (tccTempMap.size() > 0){
  158 + tccMap = tccTempMap;
  159 + }
  160 + }
  161 +
  162 + private void loadSpeedLimit(){
  163 + //加载线路限速信息
  164 + String sql = "select l.LINE_CODE,i.SPEEDING from bsth_c_line_information i left join bsth_c_line l on i.line=l.id where i.speed_limit is not null";
  165 + List<Map<String, Object>> speedMap = jdbcTemplate.queryForList(sql);
  166 + Map<String, Double> speedTempMap = new HashMap<>();
  167 + for (Map<String, Object> tMap : speedMap) {
  168 + try {
  169 + speedTempMap.put(tMap.get("LINE_CODE").toString(), Double.parseDouble(tMap.get("SPEEDING").toString()));
  170 + } catch (NumberFormatException e) {
  171 + logger.error("speeding is null...");
  172 + }
  173 + }
  174 + speedLimitMap = speedTempMap;
  175 + }
  176 +
  177 + private void loadRoadsData() {
  178 + //加载线路下路段空间数据
  179 + String sql = "select r.LINE_CODE,r.SECTION_CODE,r.SECTIONROUTE_CODE,s.SECTION_NAME,ST_AsText(s.GSECTION_VECTOR) as GSECTION_VECTOR, r.DIRECTIONS, s.CROSES_ROAD from bsth_c_sectionroute r INNER JOIN bsth_c_section s on r.section=s.id where r.destroy=0 and GSECTION_VECTOR is not null order by line_code,directions,sectionroute_code";
  180 + List<Map<String, Object>> secList = jdbcTemplate.queryForList(sql);
  181 +
  182 + String polygonStr, key;
  183 + String[] coords;
  184 + int i, len;
  185 + ArrayListMultimap<String, CtLineString> sectionCacheTempMap = ArrayListMultimap.create();
  186 + String[] temps1, temps2;
  187 + CtLineString lineString;
  188 + for (Map<String, Object> tMap : secList) {
  189 + //空间数据映射
  190 + polygonStr = tMap.get("GSECTION_VECTOR").toString();
  191 + key = tMap.get("LINE_CODE") + "_" + tMap.get("DIRECTIONS");
  192 +
  193 + coords = polygonStr.substring(11, polygonStr.length() - 1).split(",");
  194 + len = coords.length - 1;
  195 + //每2个点连一条线
  196 + for(i = 0; i < len; i ++){
  197 + temps1 = coords[i].split(" ");
  198 + temps2 = coords[i + 1].split(" ");
  199 +
  200 + lineString = new CtLineString();
  201 + lineString.setS(new Point(Float.parseFloat(temps1[0]), Float.parseFloat(temps1[1])));
  202 + lineString.setE(new Point(Float.parseFloat(temps2[0]), Float.parseFloat(temps2[1])));
  203 +
  204 + sectionCacheTempMap.put(key, lineString);
  205 + }
  206 + }
  207 +
  208 + if(sectionCacheTempMap.size() > 0)
  209 + sectionCacheMap = sectionCacheTempMap;
  210 +
  211 + Map<String, String> sectionCode2NameTemp = new HashMap<>();
  212 +
  213 + //加载全量路段编码和名称对照
  214 + sql = "select SECTION_CODE,SECTION_NAME,CROSES_ROAD from bsth_c_section";
  215 + secList = jdbcTemplate.queryForList(sql);
  216 + String name = null, code;
  217 + for (Map<String, Object> tMap : secList) {
  218 + if(tMap.get("CROSES_ROAD") != null && StringUtils.isNotEmpty(tMap.get("CROSES_ROAD").toString()))
  219 + name = tMap.get("CROSES_ROAD").toString();
  220 + else if(tMap.get("SECTION_NAME") != null && StringUtils.isNotEmpty(tMap.get("SECTION_NAME").toString()))
  221 + name = tMap.get("SECTION_NAME").toString();
  222 +
  223 + code = tMap.get("SECTION_CODE").toString();
  224 + sectionCode2NameTemp.put(code, name);
  225 + }
  226 + if(sectionCode2NameTemp.size() > 0)
  227 + sectionCode2Name = sectionCode2NameTemp;
  228 + }
  229 +
  230 + private void loadPremiseGeoData() {
  231 + ArrayListMultimap<String, PreconditionGeo> premiseGeoMapCopy = ArrayListMultimap.create();
  232 +
  233 + String sql = "select * from bsth_f_geo_premise";
  234 + List<PreconditionGeo> list = jdbcTemplate.query(sql, BeanPropertyRowMapper.newInstance(PreconditionGeo.class));
  235 +
  236 + List<String> coordList;
  237 + String[] cs;
  238 + Point point;
  239 + List<Point> ps;
  240 + StationRoute sr;
  241 + for(PreconditionGeo p : list){
  242 + try{
  243 + sr = routeCodeMap.get(p.getLineCode()+"_"+p.getUpDown()+"_"+p.getStationCode());
  244 + p.setOrder(sr.getRouteSort());
  245 + //polygon
  246 + ps = new ArrayList<>();
  247 + coordList = Splitter.on(",").trimResults().splitToList(p.getCoords());
  248 + for(String c : coordList){
  249 + cs = c.split(" ");
  250 + point = new Point(Double.parseDouble(cs[0]), Double.parseDouble(cs[1]));
  251 + ps.add(point);
  252 + }
  253 +
  254 + p.setPolygon(new Polygon(ps));
  255 +
  256 + sr.setPremise(true);
  257 + //按线路,走向分组
  258 + premiseGeoMapCopy.put(p.getLineCode()+"_"+p.getUpDown(), p);
  259 + }catch (Exception e){
  260 + logger.error("", e);
  261 + }
  262 + }
  263 +
  264 + //排序
  265 + Set<String> ks = premiseGeoMapCopy.keySet();
  266 + PreconditionGeoComp comp = new PreconditionGeoComp();
  267 + for(String k : ks){
  268 + Collections.sort(premiseGeoMapCopy.get(k), comp);
  269 + }
  270 +
  271 + premiseGeoMap = premiseGeoMapCopy;
  272 + }
  273 +
  274 + public Polygon parsePolygon(String polygonStr) {
  275 + String[] coords = polygonStr.substring(9, polygonStr.length() - 2).split(","), temps;
  276 +
  277 + List<Point> cds = new ArrayList<>(coords.length);
  278 + int len = coords.length;
  279 + for (int i = 0; i < len; i++) {
  280 + temps = coords[i].split(" ");
  281 + cds.add(new Point(Float.parseFloat(temps[0]), Float.parseFloat(temps[1])));
  282 + }
  283 + return new Polygon(cds);
  284 + }
  285 +
  286 + private void connectStationRoute(List<StationRoute> list) {
  287 + int size = list.size();
  288 + StationRoute sr = null;
  289 + for (int i = 0; i < size; i++) {
  290 + sr = list.get(i);
  291 + //上一个
  292 + if (i > 0)
  293 + sr.setPrve(list.get(i - 1));
  294 + //下一个
  295 + if (i < size - 1)
  296 + sr.setNext(list.get(i + 1));
  297 + }
  298 + }
  299 +
  300 + /**
  301 + * 是否是环线
  302 + * @param lineId
  303 + * @return
  304 + */
  305 + public static boolean isLoopLine(String lineId) {
  306 + List<StationRoute> srs = getStationRoute(lineId , 0);
  307 + if(srs.get(0).getName().equals(srs.get(srs.size()- 1).getName())
  308 + && getStationRoute(lineId , 1).size()==2)
  309 + return true;
  310 + return false;
  311 + }
  312 +
  313 + private static class PreconditionGeoComp implements Comparator<PreconditionGeo>{
  314 +
  315 + @Override
  316 + public int compare(PreconditionGeo p1, PreconditionGeo p2) {
  317 + return p1.getOrder() - p2.getOrder();
  318 + }
  319 + }
  320 +
  321 + public static Map<String, String> sectionCode2NameMap(){
  322 + return sectionCode2Name;
  323 + }
324 324 }
325 325 \ No newline at end of file
... ...
src/main/java/com/bsth/data/gpsdata_v2/handlers/OutStationProcess.java
... ... @@ -41,33 +41,34 @@ public class OutStationProcess {
41 41 GpsStatusManager gpsStatusManager;
42 42 private final static int MAX_BEFORE_TIME = 1000 * 60 * 120;
43 43  
44   - public void process(GpsEntity gps){
  44 + public void process(GpsEntity gps) {
45 45 //自动执行的班次信号,滚蛋
46 46 LineConfig config = lineConfigData.get(gps.getLineId());
47   - if(null != config && config.isAutoExec())
  47 + if (null != config && config.isAutoExec())
48 48 return;
49 49  
50 50 GpsEntity prev = GpsCacheData.getPrev(gps);
51 51  
52   - if(null == prev)
  52 + if (null == prev)
53 53 return;
54 54  
55 55 //从站内到站外
56   - if(prev.getInstation() > 0 && gps.getInstation() == 0)
  56 + if (prev.getInstation() > 0 && gps.getInstation() == 0)
57 57 outStation(gps, prev);
58 58  
59 59 //从站内到另一个站内
60   - if(prev.getInstation() > 0 && gps.getInstation() > 0
  60 + if (prev.getInstation() > 0 && gps.getInstation() > 0
61 61 && !prev.getStopNo().equals(gps.getStopNo()))
62 62 outStation(gps, prev);
63 63  
64 64 //在被起点站覆盖的情况下出场
65   - if(isOutPark(gps, prev))
  65 + if (isOutPark(gps, prev))
66 66 outStation(gps, prev);
67 67 }
68 68  
69 69 /**
70 70 * 出站
  71 + *
71 72 * @param gps
72 73 */
73 74 private void outStation(GpsEntity gps, GpsEntity prev) {
... ... @@ -76,23 +77,23 @@ public class OutStationProcess {
76 77 //起点发车
77 78 if (null != sch &&
78 79 ((sch.getQdzCode().equals(prev.getStopNo())
79   - && (gps.getInstation()==0 || !gps.getStopNo().equals(prev.getStopNo())))
80   - || sch.getQdzCode().equals(prev.getCarparkNo()))){
  80 + && (gps.getInstation() == 0 || !gps.getStopNo().equals(prev.getStopNo())))
  81 + || sch.getQdzCode().equals(prev.getCarparkNo()))) {
81 82 //发车班次匹配
82   - if(!signalSchPlanMatcher.outMatch(gps, sch)){
  83 + if (!signalSchPlanMatcher.outMatch(gps, sch)) {
83 84 outStation(gps, prev);
84 85 return;
85 86 }
86 87  
87 88 int diff = (int) (sch.getDfsjT() - gps.getTimestamp());
88 89 //首班出场最多提前2小时
89   - if((dayOfSchedule.isFirstOut(sch) && diff > MAX_BEFORE_TIME) || diff > MAX_BEFORE_TIME / 2)
  90 + if ((dayOfSchedule.isFirstOut(sch) && diff > MAX_BEFORE_TIME) || diff > MAX_BEFORE_TIME / 2)
90 91 return;
91 92  
92 93 gps.setPremiseCode(null);//清除前置围栏标记
93 94  
94   - if(StringUtils.isNotEmpty(sch.getFcsjActual())
95   - && !outManyFit(gps, sch)){
  95 + if (StringUtils.isNotEmpty(sch.getFcsjActual())
  96 + && !outManyFit(gps, sch)) {
96 97 return;//班次已经实发
97 98 }
98 99  
... ... @@ -115,7 +116,7 @@ public class OutStationProcess {
115 116 LateAdjustHandle.remove(sch.getClZbh());
116 117  
117 118 //发车的时候,同步一下状态
118   - if(!gps.isService() && !dayOfSchedule.emptyService(sch))
  119 + if (!gps.isService() && !dayOfSchedule.emptyService(sch))
119 120 gpsStatusManager.changeServiceState(sch.getClZbh(), sch.getXlDir(), 0, "发车@系统");
120 121  
121 122 logger.info("车辆:" + sch.getClZbh() + " 班次:" + sch.getDfsj() + "发车, 时间:" + sch.getFcsjActual());
... ... @@ -126,16 +127,17 @@ public class OutStationProcess {
126 127  
127 128 /**
128 129 * 是否是一个更合适的发车信号
  130 + *
129 131 * @param gps
130 132 * @param sch
131 133 * @return
132 134 */
133 135 private boolean outManyFit(GpsEntity gps, ScheduleRealInfo sch) {
134 136 LineConfig conf = lineConfigData.get(sch.getXlBm());
135   - if(null != conf && conf.isLockFirstOutTime())
  137 + if (null != conf && conf.isLockFirstOutTime())
136 138 return false;
137 139  
138   - if(StringUtils.isNotEmpty(sch.getZdsjActual()))
  140 + if (StringUtils.isNotEmpty(sch.getZdsjActual()))
139 141 return false;
140 142  
141 143 long t1 = sch.getFcsjActualTime();
... ... @@ -143,18 +145,18 @@ public class OutStationProcess {
143 145 long c = sch.getDfsjT();
144 146  
145 147 int threshold = 1000 * 60 * 5;
146   - if(Math.abs(t2 - c) < threshold && c - t1 > threshold){
  148 + if (Math.abs(t2 - c) < threshold && c - t1 > threshold) {
147 149 return true;
148 150 }
149 151  
150   - if(c - t1 > 1000 * 60 * 60 * 2 && Math.abs(t2 - c) < c - t1){
  152 + if (c - t1 > 1000 * 60 * 60 * 2 && Math.abs(t2 - c) < c - t1) {
151 153 return true;
152 154 }
153 155 return false;
154 156 }
155 157  
156   - private void outStationAndOutPark(ScheduleRealInfo sch){
157   - try{
  158 + private void outStationAndOutPark(ScheduleRealInfo sch) {
  159 + try {
158 160 LineConfig config = lineConfigData.get(sch.getXlBm());
159 161 //限定出站既出场的停车场
160 162 String park = config.getTwinsPark();
... ... @@ -175,26 +177,26 @@ public class OutStationProcess {
175 177 dayOfSchedule.save(schPrev);
176 178 }
177 179 }
178   - }catch (Exception e){
  180 + } catch (Exception e) {
179 181 logger.error("", e);
180 182 }
181 183 }
182 184  
183   - private boolean isEmptyMileage(ScheduleRealInfo sch){
184   - return sch.getBcsj()==0 || sch.getJhlcOrig().intValue()==0;
  185 + private boolean isEmptyMileage(ScheduleRealInfo sch) {
  186 + return sch.getBcsj() == 0 || sch.getJhlcOrig().intValue() == 0;
185 187 }
186 188  
187   - private boolean isOut(ScheduleRealInfo sch){
  189 + private boolean isOut(ScheduleRealInfo sch) {
188 190 return sch != null && sch.getBcType().equals("out");
189 191 }
190 192  
191   - private void endSch(ScheduleRealInfo sch, Long t){
  193 + private void endSch(ScheduleRealInfo sch, Long t) {
192 194 sch.setFcsjActualAll(t);
193 195 sch.setZdsjActualAll(t);
194 196 }
195 197  
196   - private boolean isOutPark(GpsEntity gps, GpsEntity prve){
197   - if(StringUtils.isNotEmpty(prve.getCarparkNo()) && StringUtils.isEmpty(gps.getCarparkNo()))
  198 + private boolean isOutPark(GpsEntity gps, GpsEntity prve) {
  199 + if (StringUtils.isNotEmpty(prve.getCarparkNo()) && StringUtils.isEmpty(gps.getCarparkNo()))
198 200 return true;
199 201 return false;
200 202 }
... ...
src/main/java/com/bsth/data/gpsdata_v2/rfid/UploadRfidDataService.java
1   -package com.bsth.data.gpsdata_v2.rfid;
2   -
3   -import com.alibaba.fastjson.JSON;
4   -import com.bsth.data.gpsdata_v2.rfid.entity.RfidInoutStation;
5   -import com.bsth.data.gpsdata_v2.rfid.handle.RfidSignalHandle;
6   -import org.slf4j.Logger;
7   -import org.slf4j.LoggerFactory;
8   -import org.springframework.beans.factory.annotation.Autowired;
9   -import org.springframework.web.bind.annotation.RequestBody;
10   -import org.springframework.web.bind.annotation.RequestMapping;
11   -import org.springframework.web.bind.annotation.RequestMethod;
12   -import org.springframework.web.bind.annotation.RestController;
13   -
14   -import java.util.List;
15   -
16   -/**
17   - * RFID 数据上传入口
18   - * Created by panzhao on 2017/11/22.
19   - */
20   -@RestController
21   -@RequestMapping("/rfid")
22   -public class UploadRfidDataService {
23   -
24   - @Autowired
25   - RfidSignalHandle rfidSignalHandle;
26   -
27   - Logger logger = LoggerFactory.getLogger(this.getClass());
28   -
29   - @RequestMapping(value = "inside", method = RequestMethod.POST)
30   - public void inside(@RequestBody List<RfidInoutStation> list) {
31   - logger.info("up rfid: " + JSON.toJSONString(list));
32   - rfidSignalHandle.handle(list);
33   - }
34   -
35   - @RequestMapping(value = "test")
36   - public int test() {
37   - return 1;
38   - }
  1 +package com.bsth.data.gpsdata_v2.rfid;
  2 +
  3 +import com.alibaba.fastjson.JSON;
  4 +import com.bsth.data.gpsdata_v2.rfid.entity.RfidInoutStation;
  5 +import com.bsth.data.gpsdata_v2.rfid.handle.RfidSignalHandle;
  6 +import org.slf4j.Logger;
  7 +import org.slf4j.LoggerFactory;
  8 +import org.springframework.beans.factory.annotation.Autowired;
  9 +import org.springframework.web.bind.annotation.RequestBody;
  10 +import org.springframework.web.bind.annotation.RequestMapping;
  11 +import org.springframework.web.bind.annotation.RequestMethod;
  12 +import org.springframework.web.bind.annotation.RestController;
  13 +
  14 +import java.util.List;
  15 +
  16 +/**
  17 + * RFID 数据上传入口
  18 + * Created by panzhao on 2017/11/22.
  19 + */
  20 +@RestController
  21 +@RequestMapping("/rfid")
  22 +public class UploadRfidDataService {
  23 +
  24 + @Autowired
  25 + RfidSignalHandle rfidSignalHandle;
  26 +
  27 + Logger logger = LoggerFactory.getLogger(this.getClass());
  28 +
  29 + @RequestMapping(value = "inside", method = RequestMethod.POST)
  30 + public void inside(@RequestBody List<RfidInoutStation> list) {
  31 + logger.info("up rfid: " + JSON.toJSONString(list));
  32 + rfidSignalHandle.handle(list);
  33 + }
  34 +
  35 + @RequestMapping(value = "test")
  36 + public int test() {
  37 + return 1;
  38 + }
39 39 }
40 40 \ No newline at end of file
... ...
src/main/java/com/bsth/data/gpsdata_v2/rfid/handle/RfidSignalHandle.java
1   -package com.bsth.data.gpsdata_v2.rfid.handle;
2   -
3   -import com.bsth.data.gpsdata_v2.rfid.entity.RfidInoutStation;
4   -import com.bsth.data.gpsdata_v2.status_manager.GpsStatusManager;
5   -import com.bsth.data.msg_queue.DirectivePushQueue;
6   -import com.bsth.data.schedule.DayOfSchedule;
7   -import com.bsth.entity.realcontrol.ScheduleRealInfo;
8   -import com.bsth.websocket.handler.SendUtils;
9   -import org.apache.commons.lang3.StringUtils;
10   -import org.slf4j.Logger;
11   -import org.slf4j.LoggerFactory;
12   -import org.springframework.beans.factory.annotation.Autowired;
13   -import org.springframework.stereotype.Component;
14   -
15   -import java.util.List;
16   -
17   -/**
18   - * RFID信号处理
19   - * Created by panzhao on 2017/11/22.
20   - */
21   -@Component
22   -public class RfidSignalHandle {
23   -
24   - @Autowired
25   - DayOfSchedule dayOfSchedule;
26   -
27   - @Autowired
28   - SendUtils sendUtils;
29   -
30   - @Autowired
31   - GpsStatusManager gpsStatusManager;
32   -
33   - private final static int MAX_TIME_DIFF = 1000 * 60 * 60 * 2;
34   -
35   - Logger logger = LoggerFactory.getLogger(this.getClass());
36   -
37   - public void handle(List<RfidInoutStation> list){
38   - for(RfidInoutStation signal : list){
39   - if(signal.getType()==2)
40   - in(signal);
41   - else if(signal.getType()==4)
42   - out(signal);
43   - }
44   - }
45   -
46   - /**
47   - * 出
48   - * @param signal
49   - */
50   - private void out(RfidInoutStation signal) {
51   - try{
52   - String nbbm = signal.getNbbm();
53   - ScheduleRealInfo sch = dayOfSchedule.executeCurr(nbbm);
54   -
55   - if(null == sch)
56   - return;
57   -
58   - //最大时间差
59   - if(Math.abs(sch.getDfsjT() - signal.getT()) > MAX_TIME_DIFF)
60   - return;
61   -
62   - if(sch.getQdzCode().equals(signal.getStation())
63   - && StringUtils.isEmpty(sch.getFcsjActual())){
64   -
65   - //班次发车
66   - sch.setFcsjActualAll(signal.getT());
67   -
68   - //webSocket
69   - sendUtils.sendFcsj(sch);
70   -
71   - //持久化
72   - dayOfSchedule.save(sch);
73   -
74   - logger.info("RFID; 车辆:" + sch.getClZbh() + " 班次:" + sch.getDfsj() + "发车, 时间:" + sch.getFcsjActual());
75   - }
76   - }catch (Exception e){
77   - logger.error("", e);
78   - }
79   - }
80   -
81   - /**
82   - * 进
83   - * @param signal
84   - */
85   - private void in(RfidInoutStation signal) {
86   - try{
87   - String nbbm = signal.getNbbm();
88   - ScheduleRealInfo sch = dayOfSchedule.executeCurr(nbbm);
89   -
90   - if(null == sch)
91   - return;
92   -
93   - //最大时间差
94   - if(Math.abs(sch.getDfsjT() - signal.getT()) > MAX_TIME_DIFF)
95   - return;
96   -
97   - if(sch.getZdzCode().equals(signal.getStation())
98   - && StringUtils.isEmpty(sch.getZdsjActual())){
99   -
100   - sch.setZdsjActualAll(signal.getT());
101   -
102   - //持久化
103   - dayOfSchedule.save(sch);
104   -
105   - //车辆的下一个班次
106   - ScheduleRealInfo next = dayOfSchedule.next(sch);
107   - if(next != null){
108   - dayOfSchedule.addExecPlan(next);
109   - }
110   -
111   - //路牌的下一个班次,页面显示起点实际到达时间
112   - ScheduleRealInfo lpNext = dayOfSchedule.nextByLp(sch);
113   - if(lpNext != null){
114   - lpNext.setQdzArrDatesj(sch.getZdsjActual());
115   - }
116   -
117   - //已完成班次数
118   - int doneSum = dayOfSchedule.doneSum(nbbm);
119   -
120   - //webSocket
121   - sendUtils.sendZdsj(sch, lpNext, doneSum);
122   -
123   - logger.info("RFID; 车辆:" + nbbm + " 班次:" + sch.getDfsj() + "到终点, 时间:" + sch.getZdsjActual());
124   -
125   - //下发调度指令
126   - DirectivePushQueue.put6002(next, doneSum, "rfid@系统");
127   -
128   - //套跑 -下发线路切换指令
129   - if(null != next && !next.getXlBm().equals(sch.getXlBm())){
130   - gpsStatusManager.changeLine(next.getClZbh(), next.getXlBm(), "rfid@系统");
131   - }
132   -
133   - if(null == next)
134   - nonService(sch, "rfid1@系统");//班次结束
135   - else if(null != next && dayOfSchedule.emptyService(next))
136   - nonService(sch, "rfid2@系统");//下一班非营运
137   - }
138   - }catch (Exception e){
139   - logger.error("", e);
140   - }
141   - }
142   -
143   - /**
144   - * 将车载设备切换为非营运状态
145   - * @param sch
146   - * @param sender
147   - */
148   - private void nonService(ScheduleRealInfo sch, String sender){
149   - gpsStatusManager.changeServiceState(sch.getClZbh(), sch.getXlDir(), 1, sender);
150   - }
  1 +package com.bsth.data.gpsdata_v2.rfid.handle;
  2 +
  3 +import com.bsth.data.gpsdata_v2.rfid.entity.RfidInoutStation;
  4 +import com.bsth.data.gpsdata_v2.status_manager.GpsStatusManager;
  5 +import com.bsth.data.msg_queue.DirectivePushQueue;
  6 +import com.bsth.data.schedule.DayOfSchedule;
  7 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  8 +import com.bsth.websocket.handler.SendUtils;
  9 +import org.apache.commons.lang3.StringUtils;
  10 +import org.slf4j.Logger;
  11 +import org.slf4j.LoggerFactory;
  12 +import org.springframework.beans.factory.annotation.Autowired;
  13 +import org.springframework.stereotype.Component;
  14 +
  15 +import java.util.List;
  16 +
  17 +/**
  18 + * RFID信号处理
  19 + * Created by panzhao on 2017/11/22.
  20 + */
  21 +@Component
  22 +public class RfidSignalHandle {
  23 +
  24 + @Autowired
  25 + DayOfSchedule dayOfSchedule;
  26 +
  27 + @Autowired
  28 + SendUtils sendUtils;
  29 +
  30 + @Autowired
  31 + GpsStatusManager gpsStatusManager;
  32 +
  33 + private final static int MAX_TIME_DIFF = 1000 * 60 * 60 * 2;
  34 +
  35 + Logger logger = LoggerFactory.getLogger(this.getClass());
  36 +
  37 + public void handle(List<RfidInoutStation> list){
  38 + for(RfidInoutStation signal : list){
  39 + if(signal.getType()==2)
  40 + in(signal);
  41 + else if(signal.getType()==4)
  42 + out(signal);
  43 + }
  44 + }
  45 +
  46 + /**
  47 + * 出
  48 + * @param signal
  49 + */
  50 + private void out(RfidInoutStation signal) {
  51 + try{
  52 + String nbbm = signal.getNbbm();
  53 + ScheduleRealInfo sch = dayOfSchedule.executeCurr(nbbm);
  54 +
  55 + if(null == sch)
  56 + return;
  57 +
  58 + //最大时间差
  59 + if(Math.abs(sch.getDfsjT() - signal.getT()) > MAX_TIME_DIFF)
  60 + return;
  61 +
  62 + if(sch.getQdzCode().equals(signal.getStation())
  63 + && StringUtils.isEmpty(sch.getFcsjActual())){
  64 +
  65 + //班次发车
  66 + sch.setFcsjActualAll(signal.getT());
  67 +
  68 + //webSocket
  69 + sendUtils.sendFcsj(sch);
  70 +
  71 + //持久化
  72 + dayOfSchedule.save(sch);
  73 +
  74 + logger.info("RFID; 车辆:" + sch.getClZbh() + " 班次:" + sch.getDfsj() + "发车, 时间:" + sch.getFcsjActual());
  75 + }
  76 + }catch (Exception e){
  77 + logger.error("", e);
  78 + }
  79 + }
  80 +
  81 + /**
  82 + * 进
  83 + * @param signal
  84 + */
  85 + private void in(RfidInoutStation signal) {
  86 + try{
  87 + String nbbm = signal.getNbbm();
  88 + ScheduleRealInfo sch = dayOfSchedule.executeCurr(nbbm);
  89 +
  90 + if(null == sch)
  91 + return;
  92 +
  93 + //最大时间差
  94 + if(Math.abs(sch.getDfsjT() - signal.getT()) > MAX_TIME_DIFF)
  95 + return;
  96 +
  97 + if(sch.getZdzCode().equals(signal.getStation())
  98 + && StringUtils.isEmpty(sch.getZdsjActual())){
  99 +
  100 + sch.setZdsjActualAll(signal.getT());
  101 +
  102 + //持久化
  103 + dayOfSchedule.save(sch);
  104 +
  105 + //车辆的下一个班次
  106 + ScheduleRealInfo next = dayOfSchedule.next(sch);
  107 + if(next != null){
  108 + dayOfSchedule.addExecPlan(next);
  109 + }
  110 +
  111 + //路牌的下一个班次,页面显示起点实际到达时间
  112 + ScheduleRealInfo lpNext = dayOfSchedule.nextByLp(sch);
  113 + if(lpNext != null){
  114 + lpNext.setQdzArrDatesj(sch.getZdsjActual());
  115 + }
  116 +
  117 + //已完成班次数
  118 + int doneSum = dayOfSchedule.doneSum(nbbm);
  119 +
  120 + //webSocket
  121 + sendUtils.sendZdsj(sch, lpNext, doneSum);
  122 +
  123 + logger.info("RFID; 车辆:" + nbbm + " 班次:" + sch.getDfsj() + "到终点, 时间:" + sch.getZdsjActual());
  124 +
  125 + //下发调度指令
  126 + DirectivePushQueue.put6002(next, doneSum, "rfid@系统");
  127 +
  128 + //套跑 -下发线路切换指令
  129 + if(null != next && !next.getXlBm().equals(sch.getXlBm())){
  130 + gpsStatusManager.changeLine(next.getClZbh(), next.getXlBm(), "rfid@系统");
  131 + }
  132 +
  133 + if(null == next)
  134 + nonService(sch, "rfid1@系统");//班次结束
  135 + else if(null != next && dayOfSchedule.emptyService(next))
  136 + nonService(sch, "rfid2@系统");//下一班非营运
  137 + }
  138 + }catch (Exception e){
  139 + logger.error("", e);
  140 + }
  141 + }
  142 +
  143 + /**
  144 + * 将车载设备切换为非营运状态
  145 + * @param sch
  146 + * @param sender
  147 + */
  148 + private void nonService(ScheduleRealInfo sch, String sender){
  149 + gpsStatusManager.changeServiceState(sch.getClZbh(), sch.getXlDir(), 1, sender);
  150 + }
151 151 }
152 152 \ No newline at end of file
... ...
src/main/java/com/bsth/data/gpsdata_v2/thread/OfflineMonitorThread.java
1   -package com.bsth.data.gpsdata_v2.thread;
2   -
3   -import com.bsth.data.gpsdata_v2.GpsRealData;
4   -import com.bsth.data.gpsdata_v2.entity.GpsEntity;
5   -import com.bsth.websocket.handler.SendUtils;
6   -import org.slf4j.Logger;
7   -import org.slf4j.LoggerFactory;
8   -import org.springframework.beans.factory.annotation.Autowired;
9   -import org.springframework.stereotype.Component;
10   -
11   -import java.util.Collection;
12   -
13   -/**
14   - * GPS掉离线监控
15   - * Created by panzhao on 2017/1/11.
16   - */
17   -@Component
18   -public class OfflineMonitorThread extends Thread{
19   -
20   - @Autowired
21   - GpsRealData gpsRealData;
22   -
23   - //掉线阈值
24   - private final static int LOSE_TIME = 1000 * 60 * 10;
25   -
26   - Logger logger = LoggerFactory.getLogger(this.getClass());
27   -
28   - @Autowired
29   - SendUtils sendUtils;
30   -
31   - //无任务时 离线阈值
32   - //private final static int OFFLINE_TIME = 1000 * 60 * 10;
33   -
34   - @Override
35   - public void run() {
36   - try{
37   - long t = System.currentTimeMillis();
38   - Collection<GpsEntity> list = gpsRealData.all();
39   -
40   - String state;
41   - for(GpsEntity gps : list){
42   - state = gps.getAbnormalStatus();
43   -
44   - if(state != null && state.equals("offline"))
45   - continue;
46   -
47   - if (t - gps.getTimestamp() > LOSE_TIME){
48   - gps.offline();
49   -
50   - //通知页面有设备掉线
51   - sendUtils.deviceOffline(gps);
52   - }
53   - }
54   - }catch (Exception e){
55   - logger.error("", e);
56   - }
57   - }
58   -}
  1 +package com.bsth.data.gpsdata_v2.thread;
  2 +
  3 +import com.bsth.data.gpsdata_v2.GpsRealData;
  4 +import com.bsth.data.gpsdata_v2.entity.GpsEntity;
  5 +import com.bsth.websocket.handler.SendUtils;
  6 +import org.slf4j.Logger;
  7 +import org.slf4j.LoggerFactory;
  8 +import org.springframework.beans.factory.annotation.Autowired;
  9 +import org.springframework.stereotype.Component;
  10 +
  11 +import java.util.Collection;
  12 +
  13 +/**
  14 + * GPS掉离线监控
  15 + * Created by panzhao on 2017/1/11.
  16 + */
  17 +@Component
  18 +public class OfflineMonitorThread extends Thread{
  19 +
  20 + @Autowired
  21 + GpsRealData gpsRealData;
  22 +
  23 + //掉线阈值
  24 + private final static int LOSE_TIME = 1000 * 60 * 10;
  25 +
  26 + Logger logger = LoggerFactory.getLogger(this.getClass());
  27 +
  28 + @Autowired
  29 + SendUtils sendUtils;
  30 +
  31 + //无任务时 离线阈值
  32 + //private final static int OFFLINE_TIME = 1000 * 60 * 10;
  33 +
  34 + @Override
  35 + public void run() {
  36 + try{
  37 + long t = System.currentTimeMillis();
  38 + Collection<GpsEntity> list = gpsRealData.all();
  39 +
  40 + String state;
  41 + for(GpsEntity gps : list){
  42 + state = gps.getAbnormalStatus();
  43 +
  44 + if(state != null && state.equals("offline"))
  45 + continue;
  46 +
  47 + if (t - gps.getTimestamp() > LOSE_TIME){
  48 + gps.offline();
  49 +
  50 + //通知页面有设备掉线
  51 + sendUtils.deviceOffline(gps);
  52 + }
  53 + }
  54 + }catch (Exception e){
  55 + logger.error("", e);
  56 + }
  57 + }
  58 +}
... ...
src/main/java/com/bsth/service/oil/impl/DlbServiceImpl.java
... ... @@ -273,18 +273,18 @@ public class DlbServiceImpl extends BaseServiceImpl&lt;Dlb,Integer&gt; implements DlbS
273 273 }
274 274 }
275 275  
276   - Map<String, Double> shMap=new HashMap<String,Double>();
277   - for (int i = 0; i < dlList.size(); i++) {
278   - Dlb dlb=dlList.get(i);
279   - String cl=dlb.getNbbm();
280   - if(shMap.get(cl)==null){
281   - shMap.put(cl, dlb.getSh());
282   - }else{
283   - double sh=shMap.get(cl);
284   - shMap.remove(cl);
285   - shMap.put(cl, Arith.add(sh, dlb.getSh()));
286   - }
287   - }
  276 +// Map<String, Double> shMap=new HashMap<String,Double>();
  277 +// for (int i = 0; i < dlList.size(); i++) {
  278 +// Dlb dlb=dlList.get(i);
  279 +// String cl=dlb.getNbbm();
  280 +// if(shMap.get(cl)==null){
  281 +// shMap.put(cl, dlb.getSh());
  282 +// }else{
  283 +// double sh=shMap.get(cl);
  284 +// shMap.remove(cl);
  285 +// shMap.put(cl, Arith.add(sh, dlb.getSh()));
  286 +// }
  287 +// }
288 288 List<Jdl> jdlList=jdlRepository.JdlList(rq);
289 289 String sxtj=map2.get("sxtj").toString();
290 290 if(sxtj.equals("0")){
... ... @@ -357,13 +357,13 @@ public class DlbServiceImpl extends BaseServiceImpl&lt;Dlb,Integer&gt; implements DlbS
357 357 zjzl = Arith.add(zjzl,jdl.getJdl());
358 358 }
359 359 }
360   - double clsh=0.0;
361   - if(shMap.get(map_.get("clZbh").toString())==null){
362   - clsh=0.0;
363   - }else{
364   - clsh=shMap.get(map_.get("clZbh").toString());
365   - }
366   - zjzl =Arith.sub(zjzl, clsh);
  360 +// double clsh=0.0;
  361 +// if(shMap.get(map_.get("clZbh").toString())==null){
  362 +// clsh=0.0;
  363 +// }else{
  364 +// clsh=shMap.get(map_.get("clZbh").toString());
  365 +// }
  366 +// zjzl =Arith.sub(zjzl, clsh);
367 367 Double nextJzyl = 0.0;
368 368 for (int i = 0; i < listpb.size(); i++) {
369 369 Map<String, Object> map = listpb.get(i);
... ... @@ -465,7 +465,6 @@ public class DlbServiceImpl extends BaseServiceImpl&lt;Dlb,Integer&gt; implements DlbS
465 465 t.setJhsj(map.get("fcsj")==null?"":map.get("fcsj").toString());
466 466 t.setRq(sdf.parse(rq));
467 467 t.setLp(map.get("lpName").toString());
468   - t.setCdl(Arith.add(t.getCdl(), t.getSh()));
469 468 if(!(t.getSsgsdm().equals("") || t.getFgsdm().equals(""))){
470 469 if(type.equals("add")){
471 470 t.setCreatetime(date);
... ...
src/main/java/com/bsth/service/oil/impl/YlbServiceImpl.java
... ... @@ -404,7 +404,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
404 404 Ylxxb ylxxb = ylxxList.get(i);
405 405 if (map.get("clZbh").toString().equals(ylxxb.getNbbm())
406 406 && map.get("jGh").toString().equals(ylxxb.getJsy())
407   - && ylxxb.getJylx()>0) {
  407 + && ylxxb.getJylx()==1) {
408 408 if(ylxxb.getJzl()>0){
409 409 fage2=true;
410 410 }
... ... @@ -418,7 +418,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
418 418 Ylxxb ylxxb = ylxxList.get(j);
419 419 if (map.get("clZbh").toString().equals(ylxxb.getNbbm())
420 420 && map.get("jGh").toString().equals(ylxxb.getJsy())
421   - && ylxxb.getJylx()>0) {
  421 + && ylxxb.getJylx()==1) {
422 422 jzl =Arith.add(jzl, ylxxb.getJzl());
423 423 }
424 424 }
... ... @@ -528,16 +528,8 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
528 528 List<Ylb> ylbList =new ArrayList<Ylb>();
529 529 List<Ylb> ylbLists =new ArrayList<Ylb>();
530 530 List<Ylb> iterator2=new ArrayList<Ylb>();
531   -// if(xlbm.equals("")){
532   - ylbLists=this.listOrderBy(rq,gsbm,fgsbm,xlbm,nbbm,"jcsx");
533   -// repository.obtainYl(rq,gsbm,fgsbm,xlbm,nbbm,"jcsx");
534   - iterator2=this.listOrderBy(rq,gsbm,fgsbm,xlbm,nbbm,"nbbm,jcsx");
535   -// repository.obtainYl(rq,gsbm,fgsbm,xlbm,nbbm,"nbbm,jcsx");
536   -// }else{
537   -// ylbLists=repository.obtainYl_eq(rq,gsbm,fgsbm,xlbm,nbbm,"jcsx");
538   -// iterator2=repository.obtainYl_eq(rq,gsbm,fgsbm,xlbm,nbbm,"nbbm,jcsx");
539   -// }
540   -
  531 + ylbLists=this.listOrderBy(rq,gsbm,fgsbm,xlbm,nbbm,"jcsx");
  532 + iterator2=this.listOrderBy(rq,gsbm,fgsbm,xlbm,nbbm,"nbbm,jcsx");
541 533 // 从排班表中计算出行驶的总里程
542 534  
543 535 String sxtj=map.get("sxtj").toString();
... ... @@ -594,7 +586,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
594 586 zlc = Arith.add(zlc, Double.valueOf(sumList.get(j)[1].toString()));
595 587 zsh = Arith.add(zsh, Double.valueOf(sumList.get(j)[2].toString()));
596 588 }
597   - jzl = Arith.sub(jzl, zsh);
  589 +// jzl = Arith.sub(jzl, zsh);
598 590 // 保留两位小数
599 591 DecimalFormat df = new DecimalFormat("#.00");
600 592 Double zyl = 0.0;
... ... @@ -622,7 +614,8 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
622 614 if(zlc>0 ){
623 615 yh = Double.parseDouble(df.format(zyl * (t.getZlc() / zlc)));
624 616 }
625   - nextJzyl =Arith.sub( Arith.add(Arith.sub(t.getJzl(),t.getSh()), t.getCzyl()),yh);
  617 + nextJzyl =Arith.sub( Arith.add(t.getJzl(), t.getCzyl()),yh);
  618 +// nextJzyl =Arith.sub( Arith.add(Arith.sub(t.getJzl(),t.getSh()), t.getCzyl()),yh);
626 619 //把进场油量的小数和整数分别取出
627 620 // int ylxs=(int) nextJzyl; 10.6--11 10.3--10
628 621 if(zlc>0 && t.getZlc()>0){
... ... @@ -643,7 +636,8 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
643 636 if(zlc>0){
644 637 yh= Double.parseDouble(df.format(zyl * (t.getZlc() / zlc)));
645 638 }
646   - nextJzyl =Arith.sub( Arith.add(Arith.sub(t.getJzl(),t.getSh()),nextJzyl),yh);
  639 + nextJzyl =Arith.sub( Arith.add(t.getJzl(),nextJzyl),yh);
  640 +// nextJzyl =Arith.sub( Arith.add(Arith.sub(t.getJzl(),t.getSh()),nextJzyl),yh);
647 641 if(zlc>0 && t.getZlc()>0){
648 642 long l=0l;
649 643 double ylxs=0.0;
... ... @@ -765,7 +759,7 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
765 759 for (int i = 0; i < ylxxbList.size(); i++) {
766 760 Boolean fage=false;
767 761 Ylxxb y1=ylxxbList.get(i);
768   - if(m.get(y1.getNbbm())!=null){
  762 + if(m.get(y1.getNbbm())==null){
769 763 Line line=BasicData.nbbm2LineMap.get(y1.getNbbm());
770 764 if(null !=line){
771 765 if(!xlbm.equals("")){
... ... @@ -808,7 +802,6 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
808 802 if(status){
809 803 t.setCzyl(0.0);
810 804 }
811   -// double jzyl=Arith.add(t.getJzl(), t.getCzyl());
812 805 t.setJzyl(Arith.add(t.getJzl(), t.getCzyl()));
813 806 t.setYh(0.0);
814 807 if(!(t.getSsgsdm().equals("") || t.getFgsdm().equals(""))){
... ... @@ -1160,26 +1153,11 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
1160 1153 Integer id =jsonObject.getInteger("id");
1161 1154 String nbbm =jsonObject.getString("nbbm");
1162 1155 String rq=jsonObject.getString("rq");
1163   - double yh = Arith.sub(Arith.add(czyl, jzl), Arith.add(jzyl, sh));
  1156 + double yh = Arith.sub(Arith.add(czyl, jzl),sh);
1164 1157 if(yh<0){
1165 1158 yh=0.0;
1166 1159 }
1167   - /*t.setJzyl(jzyl);
1168   - t.setSh(sh);
1169   - t.setShyy(shyy);
1170   - t.setNs(ns);
1171   - t.setRylx(rylx);
1172   - t.setId(jsonObject.getInteger("id"));*/
1173 1160 repository.ylbUpdate(id, czyl, jzyl, yh, sh, shyy, ns, rylx,yhlx);
1174   - /*for (int z = 0; z < cylList.size(); z++) {
1175   - Cyl cyl = cylList.get(z);
1176   - if (nbbm.equals(cyl.getNbbm())) {
1177   - cyl.setCyl(jzyl);
1178   - cyl.setUpdatetime(sdf.parse(rq));
1179   - break;
1180   - }
1181   - cylRepository.save(cyl);
1182   - }*/
1183 1161 }
1184 1162 // List<Map<String, Object>> list=(List<Map<String, Object>>) map.get("ylbList");
1185 1163  
... ... @@ -1233,12 +1211,12 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
1233 1211 }
1234 1212 // jzl = Arith.sub(jzl, zsh);
1235 1213 //新的 损耗不等于 旧的损耗 总损耗从新算
1236   - if(Arith.sub(ylb.getSh(),sh )!=0){
  1214 + /*if(Arith.sub(ylb.getSh(),sh )!=0){
1237 1215 zsh =Arith.add(Arith.sub(zsh, ylb.getSh()), sh);
1238 1216 jzl =Arith.sub(jzl, zsh);
1239 1217 }else{
1240 1218 jzl =Arith.sub(jzl, zsh);
1241   - }
  1219 + }*/
1242 1220 map.put("nbbm_eq", nbbm_eq);
1243 1221 map.put("rq_eq", rq_eq);
1244 1222  
... ... @@ -1265,7 +1243,8 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
1265 1243 if (zlc > 0 && t.getZlc() > 0) {
1266 1244 yh = Double.parseDouble(df.format(zyl * (t.getZlc() / zlc)));
1267 1245 }
1268   - nextJzyl =Arith.sub(Arith.add(t.getJzl(), t.getCzyl()), Arith.add(yh, t.getSh()));
  1246 + nextJzyl =Arith.sub(Arith.add(t.getJzl(), t.getCzyl()), yh);
  1247 +// nextJzyl =Arith.sub(Arith.add(t.getJzl(), t.getCzyl()), Arith.add(yh, t.getSh()));
1269 1248 if(zlc>0 && t.getZlc() > 0){
1270 1249 long l=Math.round(nextJzyl);
1271 1250 double ylxs=l*100/100;
... ... @@ -1288,7 +1267,8 @@ public class YlbServiceImpl extends BaseServiceImpl&lt;Ylb,Integer&gt; implements YlbS
1288 1267 if (t.getZlc() >= 0) {
1289 1268 yh= Double.parseDouble(df.format(zyl * (t.getZlc() / zlc)));
1290 1269 }
1291   - nextJzyl = Arith.sub(Arith.add(t.getJzl(), nextJzyl), Arith.add(yh, t.getSh()));
  1270 +// nextJzyl = Arith.sub(Arith.add(t.getJzl(), nextJzyl), Arith.add(yh, t.getSh()));
  1271 + nextJzyl = Arith.sub(Arith.add(t.getJzl(), nextJzyl), yh);
1292 1272 if(zlc>0 && t.getZlc() >0){
1293 1273 long l=0l;
1294 1274 double ylxs=0.0;
... ...
src/main/java/com/bsth/service/schedule/datatools/TTInfoDetailDataToolsImpl.java
... ... @@ -164,7 +164,7 @@ public class TTInfoDetailDataToolsImpl implements DataToolsService, TTInfoDetail
164 164 ktrParms.put("erroroutputdir", dataToolsProperties.getTransErrordir());
165 165  
166 166 // 附加参数
167   - ktrParms.put("injectktrfile", zdlyversion == null ?
  167 + ktrParms.put("injectktrfile", zdlyversion == null || zdlyversion == -1 ?
168 168 ktrFile2.getAbsolutePath() : ktrFile2_ls.getAbsolutePath()); // 注入元数据的ktr文件
169 169 ktrParms.put("sheetname", sheetname); // sheet工作区的名字
170 170 ktrParms.put("lineinfoid", lineid); // 线路标准id
... ...