wanglizhong
2025-05-14 f1ba120c486048373505acfa74c3943c19be55ca
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/GpsCollectServiceImpl.java
@@ -510,4 +510,92 @@
        return null;
    }
    @Override
    public GpsTrackQueryResponse queryTracks(GpsTrackQueryRequest request) {
        // 获取GPS配置信息
        SysGpsConfig config = gpsConfigService.selectGpsConfigByKey("gps51");
        if (config == null) {
            GpsTrackQueryResponse response = new GpsTrackQueryResponse();
            response.setStatus(-1);
            response.setCause("未找到GPS配置信息");
            return response;
        }
        // 获取有效的token,如果无效则自动登录
        String token = getValidTokenWithAutoLogin();
        if (token == null) {
            GpsTrackQueryResponse response = new GpsTrackQueryResponse();
            response.setStatus(-1);
            response.setCause("获取token失败");
            return response;
        }
        // 构建请求URL
        String url = config.getDomain() + "/webapi?action=querytracks&token=" + token;
        // 构建请求参数
        Map<String, String> params = new HashMap<>();
        params.put("deviceid", request.getDeviceid());
        params.put("begintime", request.getBegintime());
        params.put("endtime", request.getEndtime());
        if (request.getTimezone() != null) {
            params.put("timezone", String.valueOf(request.getTimezone()));
        }
        try {
            // 发送HTTP请求
            String result = HttpUtil.post(url, params);
            JSONObject jsonResult = JSON.parseObject(result);
            // 解析响应
            GpsTrackQueryResponse response = new GpsTrackQueryResponse();
            response.setStatus(jsonResult.getInteger("status"));
            response.setCause(jsonResult.getString("cause"));
            response.setDeviceid(jsonResult.getString("deviceid"));
            if (response.getStatus() == 0) {
                // 解析轨迹记录列表
                JSONArray recordsArray = jsonResult.getJSONArray("records");
                List<GpsTrackPoint> records = new ArrayList<>();
                for (int i = 0; i < recordsArray.size(); i++) {
                    JSONObject recordJson = recordsArray.getJSONObject(i);
                    GpsTrackPoint record = new GpsTrackPoint();
                    record.setTrackCount(recordJson.getInteger("trackCount"));
                    record.setStarttime(recordJson.getLong("starttime"));
                    record.setEndtime(recordJson.getLong("endtime"));
                    record.setTrackid(recordJson.getInteger("trackid"));
                    record.setArrivedtime(recordJson.getLong("arrivedtime"));
                    record.setUpdatetime(recordJson.getLong("updatetime"));
                    record.setLatitude(recordJson.getDouble("callat"));
                    record.setLongitude(recordJson.getDouble("callon"));
                    record.setAltitude(recordJson.getDouble("altitude"));
                    record.setRadius(recordJson.getInteger("radius"));
                    record.setSpeed(recordJson.getDouble("speed"));
                    record.setRecorderspeed(recordJson.getDouble("recorderspeed"));
                    record.setTotaldistance(recordJson.getInteger("totaldistance"));
                    record.setCourse(recordJson.getInteger("course"));
                    record.setStatus(recordJson.getLong("status"));
                    record.setStrstatus(recordJson.getString("strstatus"));
                    record.setStrstatusen(recordJson.getString("strstatusen"));
                    record.setGotsrc(recordJson.getString("gotsrc"));
                    record.setRxlevel(recordJson.getInteger("rxlevel"));
                    record.setGpsvalidnum(recordJson.getInteger("gpsvalidnum"));
                    record.setReportmode(recordJson.getShort("reportmode"));
                    records.add(record);
                }
                response.setRecords(records);
            }
            return response;
        } catch (Exception e) {
            GpsTrackQueryResponse response = new GpsTrackQueryResponse();
            response.setStatus(-1);
            response.setCause("查询历史轨迹失败:" + e.getMessage());
            return response;
        }
    }