Commit 2a38042d1c77bd8a897bb2ad52799d737bd86118
1 parent
27a79842
超速、越界 等异常表 分区 分表...
Showing
1 changed file
with
84 additions
and
31 deletions
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 |