GpsDataServiceImpl.java 2.83 KB
package com.bsth.vehicle.gpsdata.service;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Service;

import com.bsth.util.TransGPS;
import com.bsth.util.TransGPS.Location;
import com.bsth.util.db.DBUtils_MS;

@Service
public class GpsDataServiceImpl implements GpsDataService{

	//历史gps查询
	@Override
	public List<Map<String, Object>> history(String device, Long startTime, Long endTime, int directions) {
		Calendar sCal = Calendar.getInstance();
		sCal.setTime(new Date(/*startTime*/));
		
		Calendar eCal = Calendar.getInstance();
		eCal.setTime(new Date(endTime));
		
		int dayOfYear = sCal.get(Calendar.DAY_OF_YEAR);
		/*if(dayOfYear != eCal.get(Calendar.DAY_OF_YEAR)){
			System.out.println("暂时不支持跨天查询...");
			return null;
		}*/
		
		String sql = "select DEVICE_ID,LON,LAT,TS,INOUT_STOP,SERVICE_STATE from BSTH_C_GPS_INFO where days_year=? and device_id=? and ts > ? and ts < ?";
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		List<Map<String, Object>> list = new ArrayList<>();
		Map<String, Object> map = null;
		try{
			conn = DBUtils_MS.getConnection();
			ps = conn.prepareStatement(sql);
			ps.setInt(1, dayOfYear);
			ps.setString(2, device);
			ps.setLong(3, startTime);
			ps.setLong(4, endTime);
			
			rs = ps.executeQuery();
			Float lon, lat;
			Location location;
			int upDown;
			while (rs.next()) {
				upDown = getUpOrDown(rs.getLong("SERVICE_STATE"));
				if(upDown != directions)
					continue;
				
				//to 百度坐标
				lon = rs.getFloat("LON");
				lat = rs.getFloat("lat");
				location = TransGPS.LocationMake(lon, lat);
				location = TransGPS.bd_encrypt(TransGPS.transformFromWGSToGCJ(location));
				
				map = new HashMap<>();
				map.put("device", rs.getString("DEVICE_ID"));
				map.put("lon", location.getLng());
				map.put("lat", location.getLat());
				map.put("ts", rs.getLong("ts"));
				map.put("inout_stop", rs.getInt("INOUT_STOP"));
				//上下行
				map.put("upDown", upDown);
				list.add(map);
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally {
			DBUtils_MS.close(rs, ps, conn);
		}
		return list;
	}
	


	/**王通 2016/6/29 9:23:24
	 * 获取车辆线路上下行
	 * @return -1无效 0上行 1下行
	 */
	public static byte getUpOrDown(long serviceState) {
		if ((serviceState & 0x00020000) == 0x00020000 || (serviceState & 0x80000000) == 0x80000000 
				|| (serviceState & 0x01000000) == 0x01000000 
				|| (serviceState & 0x08000000) == 0x08000000) return -1;
		return (byte)(((serviceState & 0x10000000) == 0x10000000) ? 1 : 0);
	}
}