3.26查询车辆轨迹接口getVehicleTrajectory
**请求地址:** - `/ivci/api/vehicle/getVehicleTrajectory` **请求方式:** - POST,GET **实施方案:** 1.实时从hbase中获取。 2.采用倒序查询,即最新的轨迹在前面。 3.时间最大跨度为30天,跨度开始时间必须小于跨度结束时间。 4.默认分页20条记录。 5.如果有多页数据,则hbase的startRow保存在redis缓存中,有效时间为24小时,key的规则为"trace_"+vehicleId+"_"+pageNum+"_"+queryStartTime+"_"+queryEndTime 6.考虑缓存不存在的情况,如果前端继续增页请求,但是redis中找不到上页的endRow,则按pageNum=1做处理,但pageSize不是默认的20了,要按照新的pageSize=pageNum*20,然后再根据返回结果截取对应页的数据,例子:如果redis缓存中是第二页的endRow(即第三页的startRow),但是前端传了一个pageNum=4过来,redis中没有pageNum=3的endRow,那么此时只能从pageNum=1开始查(//TODO 可以优化),然后从返回的结果中取第4页的数据。 **参数说明** |参数名称|类型|说明|备注| |:---- |:---|:----- |----- | |content |String |请求的加密数据 |必填 | |merchantId |String |请求用户所属商户 | 必填 | **备注** content经过RSA解密后的json格式 ``` { "userName":"testuser", "antiFake":"4bbab6ff0d8042548cc6f2df9f3655fa", "timestamp":"20160518165030", "serverIP":"127.0.0.1", "queryVehicle":{ "vehicleId":123 ..... } } ``` **content参数说明** |名称|类型|说明|备注| |:---- |:---|:----- |----- | |userName | String |用户名 |必须| |antiFake | String |防伪随机串 |必须| |timestamp | String |请求时间戳,精确到秒 |必须| |serverIP |String |服务器IP |必须| |data |json |查询车辆信息 |必须| |data.vehicleId | Int |查询车辆Id |必须| |data.startTime |Date |查询轨迹开始时间,精确到秒,如:2016-12-20 00:00:00,默认是当前0点 |非必须| |data.endTime | Date |查询轨迹结束时间,精确到秒,如:2016-12-20 00:00:00,默认是当前时间 |非必须| |data.pageNum | Int |查询轨迹页数,默认1,第一页 |非必须| **使用示例:** 1. 后台 ```java //读取privateKeyStr String privateKey=........... //获取数据签名 SimpleDateFormat formatter = new SimpleDateFormat ("yyyyMMddHHmmss"); String timestamp=formatter.format(new Date()); String signStr=RSAUtils.sign(timestamp.getBytes(), privateKey); String ip=request.getRemoteAddr(); //用私钥加密 String ext=",\"queryVehicle\":{.............}";//组装车辆信息 String dataStr="{\"userName\":\"testuser\",\"antiFake\":\""+signStr+"\",\"timestamp\":\""+timestamp+"\",\"serverIP\":\""+ip+"\" "+ext+" }"; String content=RSAUtils.encryptByPrivateKey(dataStr, privateKey); ``` 2. 前端 后台返回给前端加密后的content,然后发送请求调用 http://xxxxx/ivci/api/vehicle/getVehicleTrajectory?merchantId=100000&content=content **返回数据** 返回数据统一都是json格式 ```json {"code":0,"msg":"操作失败","data":{}} ``` **返回参数** |名称|类型|说明|备注| |:---- |:---|:----- |----- | |code | String | 操作结果码(成功=0,失败=1),见附录1 | 返回| |msg |String | 操作返回信息(一般操作成功,返回null,失败的操作,才返回提示信息) | | |data | json | 轨迹信息,如果查询不到轨迹,则为null | 返回| Data数据格式,如下: ```javascript "data":{ hasMore:false, list:[{ drtime:"2016-12-20 00:00:00", type:1, lon:"", lat:"", bdLon:"", bdLat:"", gdLon:"", gdLat:"", speed:"", direction:"", position:"", accState:"", state:"", weather:"", mileages:"", oils:"", spaceMileage:"", spaceFuel:"", vehicleId:"", drid:"", insspeed:"" }] } ``` 返回的轨迹字段描述: |名称|类型|说明|备注| |:---- |:---|:----- |----- | |hasMore| Boolean |是否还有| | |list.drtime |Date | 定位时间 UTC时间 | | |list.type | Int |类型,0未知数据,1定时数据,2转弯数据,3超速报警,4启动报警,5震动报警,6疲劳报警,7急加速报警,8急减速报警,9急转弯报警,10碰撞报警,11侧翻报警,12高转速报警,13转速不匹配,14怠速报警,15装入报警,16拔出报警,17断点数据 | | |list.lon | Double | 经度 | | |list.lat | Double | 纬度 | | |list.bdLon |Double | 百度经度 | | |list.bdLat |Double | 百度纬度 | | |list.gdLon |Double | 高德经度 | | |list.gdLat |Double | 高德纬度 | | |list.speed | Float | 速度 km/h | | |list.direction | Int |方向,0-360 | | |list.position | String | 位置 | | |list.accState | Int |熄火状态 0熄火, 1点火 | | |list.weather | Stirng | 天气 | | |list.mileages | Long | 总里程 单位米 | | |list.oils | Float | 总耗油量(升) | | |list.spaceMileage | Int |综合间隔里程 单位米 | | |list.spaceFuel |Float | 综合间隔耗油量,单位升,精确到小数后4位 | | |list.vehicleId |Int |车辆Id | | |list.drid | String | 轨迹Id | | |list.Insspeed | Float | 仪表时速(公里) km/h | |