Commit 2a38042d1c77bd8a897bb2ad52799d737bd86118

Authored by 潘钊
1 parent 27a79842

超速、越界 等异常表 分区 分表...

src/main/java/com/bsth/service/gps/GpsServiceImpl.java
@@ -188,25 +188,9 @@ public class GpsServiceImpl implements GpsService { @@ -188,25 +188,9 @@ public class GpsServiceImpl implements GpsService {
188 String nbbm = nbbmArray[0]; 188 String nbbm = nbbmArray[0];
189 189
190 List<DeviceChange> dcs = findDeviceChangeLogs(nbbm, et, st); 190 List<DeviceChange> dcs = findDeviceChangeLogs(nbbm, et, st);
191 - //没有设备变更记录,则参考车辆信息上的设备号  
192 - if(null == dcs || dcs.size() == 0){  
193 - DeviceChange dc = new DeviceChange();  
194 - dc.setNbbm(nbbm);  
195 - dc.setDevice(BasicData.deviceId2NbbmMap.inverse().get(nbbm));  
196 - dc.setSt(st);  
197 - dc.setEt(et);  
198 - dc.setType(1);  
199 -  
200 - dcs.add(dc);  
201 - }  
202 -  
203 - //bsth_c_gps_info  
204 - String tableName = "bsth_c_gps_info";  
205 - String sYear = fmtyyyy.print(st),  
206 - currYear = fmtyyyy.print(System.currentTimeMillis());  
207 191
208 - if(!sYear.equals(currYear))  
209 - tableName += "_" + sYear; 192 + //按年分表
  193 + String tableName = "bsth_c_gps_info_" + fmtyyyy.print(st);
210 194
211 StringBuilder sql = new StringBuilder(""); 195 StringBuilder sql = new StringBuilder("");
212 long t1,t2; 196 long t1,t2;
@@ -365,6 +349,18 @@ public class GpsServiceImpl implements GpsService { @@ -365,6 +349,18 @@ public class GpsServiceImpl implements GpsService {
365 349
366 rs.add(dc); 350 rs.add(dc);
367 } 351 }
  352 +
  353 + //没有设备变更记录,则参考车辆信息上的设备号
  354 + if(null == rs || rs.size() == 0){
  355 + DeviceChange dc = new DeviceChange();
  356 + dc.setNbbm(nbbm);
  357 + dc.setDevice(BasicData.deviceId2NbbmMap.inverse().get(nbbm));
  358 + dc.setSt(st);
  359 + dc.setEt(et);
  360 + dc.setType(1);
  361 +
  362 + rs.add(dc);
  363 + }
368 }catch (Exception e){ 364 }catch (Exception e){
369 logger.error("", e); 365 logger.error("", e);
370 } 366 }
@@ -887,27 +883,84 @@ public class GpsServiceImpl implements GpsService { @@ -887,27 +883,84 @@ public class GpsServiceImpl implements GpsService {
887 883
888 @Override 884 @Override
889 public List<GpsSpeed_DTO> speeds(String nbbm, long st, long et) { 885 public List<GpsSpeed_DTO> speeds(String nbbm, long st, long et) {
890 - String deviceId = BasicData.deviceId2NbbmMap.inverse().get(nbbm);  
891 - String sql = "select vehicle, line, up_down, lon, lat, speed,timestamp from bsth_c_speeding where vehicle=? and timestamp>? and timestamp<?"; 886 + st = st * 1000;
  887 + et = et * 1000;
  888 + //按周分区
  889 + Calendar sCal = Calendar.getInstance();
  890 + sCal.setTime(new Date(st));
  891 + int sWeekYear = sCal.get(Calendar.WEEK_OF_YEAR);
  892 + Calendar eCal = Calendar.getInstance();
  893 + eCal.setTime(new Date(et));
  894 + int eWeekYear = eCal.get(Calendar.WEEK_OF_YEAR);
  895 +
  896 + //按年分表
  897 + String tableName = "bsth_c_speeding_" + fmtyyyy.print(st);
  898 +
  899 + List<DeviceChange> dcs = findDeviceChangeLogs(nbbm, et, st);
  900 + StringBuilder sql = new StringBuilder("");
  901 + long t1,t2;
  902 + DeviceChange dc;
  903 + for(int i = 0,len=dcs.size(); i < len; i++){
  904 + t1 = st;
  905 + t2 = et;
  906 + dc = dcs.get(i);
  907 + if(dc.getSt() > st)
  908 + t1 = dc.getSt();
  909 + if(dc.getEt() < et && dc.getEt()!=0)
  910 + t2 = dc.getEt();
  911 +
  912 + sql.append(" select vehicle, line, up_down, lon, lat, speed,timestamp from "+tableName+" where " +
  913 + " weeks_year in ("+sWeekYear+", "+eWeekYear+") and vehicle='"+dc.getDevice()+"' and timestamp>"+t1+" and timestamp< " + t2);
  914 +
  915 + if(i == len - 1)
  916 + sql.append(" ORDER BY vehicle,timestamp");
  917 + else
  918 + sql.append(" UNION ");
  919 + }
892 920
893 - return GpsSpeed_DTO.create(new JdbcTemplate(DBUtils_MS.getDataSource()).queryForList(sql, deviceId, st * 1000, et * 1000)); 921 + logger.info("speed sql : " + sql.toString());
  922 + return GpsSpeed_DTO.create(new JdbcTemplate(DBUtils_MS.getDataSource()).queryForList(sql.toString()));
894 } 923 }
895 924
896 @Override 925 @Override
897 public List<GpsOutbound_DTO> outbounds(String nbbm, long st, long et) { 926 public List<GpsOutbound_DTO> outbounds(String nbbm, long st, long et) {
898 - /**  
899 - * 如果 st 和 et 跨了周分区,也只查询st 分区的数据。  
900 - */  
901 st = st * 1000; 927 st = st * 1000;
902 et = et * 1000; 928 et = et * 1000;
903 //按周分区 929 //按周分区
904 - Calendar weekCal = Calendar.getInstance();  
905 - weekCal.setTimeInMillis(st);  
906 - int weekYear = weekCal.get(Calendar.WEEK_OF_YEAR);  
907 - //设备号  
908 - String deviceId = BasicData.deviceId2NbbmMap.inverse().get(nbbm);  
909 - String sql = "select vehicle,line,up_down,lon,lat,timestamp from bsth_c_outbound where weeks_year=" + weekYear + " and vehicle=? and timestamp>? and timestamp<?";  
910 - return GpsOutbound_DTO.create(new JdbcTemplate(DBUtils_MS.getDataSource()).queryForList(sql, deviceId, st, et)); 930 + Calendar sCal = Calendar.getInstance();
  931 + sCal.setTime(new Date(st));
  932 + int sWeekYear = sCal.get(Calendar.WEEK_OF_YEAR);
  933 + Calendar eCal = Calendar.getInstance();
  934 + eCal.setTime(new Date(et));
  935 + int eWeekYear = eCal.get(Calendar.WEEK_OF_YEAR);
  936 +
  937 + //按年分表
  938 + String tableName = "bsth_c_outbound_" + fmtyyyy.print(st);
  939 +
  940 + List<DeviceChange> dcs = findDeviceChangeLogs(nbbm, et, st);
  941 + StringBuilder sql = new StringBuilder("");
  942 + long t1,t2;
  943 + DeviceChange dc;
  944 + for(int i = 0,len=dcs.size(); i < len; i++){
  945 + t1 = st;
  946 + t2 = et;
  947 + dc = dcs.get(i);
  948 + if(dc.getSt() > st)
  949 + t1 = dc.getSt();
  950 + if(dc.getEt() < et && dc.getEt()!=0)
  951 + t2 = dc.getEt();
  952 +
  953 + sql.append("select vehicle,line,up_down,lon,lat,timestamp from "+tableName+" where " +
  954 + " weeks_year in ("+sWeekYear+", "+eWeekYear+") and vehicle='"+dc.getDevice()+"' and timestamp>"+t1+" and timestamp<" + t2);
  955 +
  956 + if(i == len - 1)
  957 + sql.append(" ORDER BY vehicle,timestamp");
  958 + else
  959 + sql.append(" UNION ");
  960 + }
  961 +
  962 + logger.info("outbounds sql : " + sql.toString());
  963 + return GpsOutbound_DTO.create(new JdbcTemplate(DBUtils_MS.getDataSource()).queryForList(sql.toString()));
911 } 964 }
912 965
913 @Override 966 @Override