wzp
2025-09-03 a8553f9ef7e165b6348243af91caad1a987f8f9c
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/GpsCollectServiceImpl.java
@@ -78,6 +78,7 @@
                    response.setSuccess(true);
                    response.setMessage("登录成功");
                    response.setToken(jsonResult.getString("token"));
                    response.setServerid(jsonResult.getInteger("serverid"));
                    break;
                case -1:
                    response.setSuccess(false);
@@ -131,36 +132,60 @@
     * 获取有效的token,如果token无效则自动登录
     */
    private String getValidTokenWithAutoLogin() {
        // 获取当前token
        String token = gpsConfigService.getValidToken("gps51");
        if (token == null || token.isEmpty()) {
            //读取gspconfig中的域名,用户名,密码
            SysGpsConfig config = gpsConfigService.selectGpsConfigByKey("gps51");
            if (config == null) {
                return null;
        try {
            // 获取当前token
            String token = gpsConfigService.getValidToken("gps51");
            if (token == null || token.isEmpty()) {
                System.out.println("当前token无效,尝试重新登录");
                //读取gspconfig中的域名,用户名,密码
                SysGpsConfig config = gpsConfigService.selectGpsConfigByKey("gps51");
                if (config == null) {
                    System.err.println("GPS配置信息未找到,无法进行登录");
                    return null;
                }
                String username = config.getUsername();
                String password = config.getPassword();
                String domain = config.getDomain();
                if (username == null || password == null || domain == null) {
                    System.err.println("GPS配置信息不完整,用户名、密码或域名为空");
                    return null;
                }
                // token无效,尝试登录
                GpsLoginRequest loginRequest = new GpsLoginRequest();
                loginRequest.setType("USER");
                loginRequest.setFrom("WEB");
                loginRequest.setUsername(username);
                loginRequest.setPassword(password);
                loginRequest.setDomain(domain);
                System.out.println("开始登录GPS系统,用户名: " + username + ", 域名: " + domain);
                GpsLoginResponse loginResponse = login(loginRequest);
                if (loginResponse.isSuccess()) {
                    //将token写入gspconfig
                    token = loginResponse.getToken();
                    Integer serviceid = loginResponse.getServerid();
                    //getTokenExpireTime 这个是没有的 需要自己计算,当前时间+23小时
                    Date expireTime = DateUtils.addHours(new Date(), 23);
                    gpsConfigService.updateToken("gps51", token,serviceid, expireTime);
                    System.out.println("GPS系统登录成功,token已更新");
                    return token;
                } else {
                    System.err.println("GPS系统登录失败: " + loginResponse.getMessage());
                    return null;
                }
            } else {
                System.out.println("使用现有有效token");
            }
            String username = config.getUsername();
            String password = config.getPassword();
            String domain = config.getDomain();
            // token无效,尝试登录
            GpsLoginRequest loginRequest = new GpsLoginRequest();
            loginRequest.setType("USER");
            loginRequest.setFrom("WEB");
            loginRequest.setUsername(username);
            loginRequest.setPassword(password);
            loginRequest.setDomain(domain);
            GpsLoginResponse loginResponse = login(loginRequest);
            if (loginResponse.isSuccess()) {
                //将token写入gspconfig
                token = loginResponse.getToken();
                //getTokenExpireTime 这个是没有的 需要自己计算,当前时间+23小时
                Date expireTime = DateUtils.addHours(new Date(), 23);
                gpsConfigService.updateToken("gps51", token, expireTime);
                return token;
            }
            return token;
        } catch (Exception e) {
            System.err.println("获取token时发生异常: " + e.getMessage());
            e.printStackTrace();
            return null;
        }
        return token;
    }
    /**
@@ -262,7 +287,7 @@
        
        String username = config.getUsername();
        // 构建请求URL
        String url = config.getDomain() + "/webapi?action=querymonitorlist&token=" + token;
        String url = config.getDomain() + "/webapi?action=querymonitorlist&token=" + token+"&serverid="+config.getServerid();
        Map<String, String> params = new HashMap<>();
        params.put("username", username);
        
@@ -344,6 +369,7 @@
            response.setCause("未找到GPS配置信息");
            return response;
        }
        System.out.println("GPS配置信息获取成功!");
        // 获取有效的token,如果无效则自动登录
        String token = getValidTokenWithAutoLogin();
@@ -354,9 +380,12 @@
            return response;
        }
        System.out.println("token获取成功!"+token);
        // 构建请求URL
        String url = config.getDomain() + "/webapi?action=lastposition&token="+token;
        String url = config.getDomain() + "/webapi?action=lastposition&token="+token+"&serverid="+config.getServerid();
        System.out.println("请求URL:"+url);
        // 构建请求参数
        Map<String, String> params = new HashMap<>();
            
@@ -372,6 +401,8 @@
        if (request.getDeviceids() != null && !request.getDeviceids().isEmpty()) {
            params.put("deviceids", JSON.toJSONString(request.getDeviceids()));
        }
        System.out.println("请求参数:"+params);
        try {
            
@@ -510,4 +541,114 @@
        return null;
    }
    @Override
    public GpsTrackQueryResponse queryTracks(GpsTrackQueryRequest request) {
        try {
            // 获取GPS配置信息
            SysGpsConfig config = gpsConfigService.selectGpsConfigByKey("gps51");
            if (config == null) {
                System.err.println("GPS配置信息未找到,configKey: gps51");
                GpsTrackQueryResponse response = new GpsTrackQueryResponse();
                response.setStatus(-1);
                response.setCause("未找到GPS配置信息");
                return response;
            }
            System.out.println("GPS配置信息获取成功,域名: " + config.getDomain() + ", 用户名: " + config.getUsername());
            // 获取有效的token,如果无效则自动登录
            String token = getValidTokenWithAutoLogin();
            if (token == null) {
                System.err.println("获取token失败");
                GpsTrackQueryResponse response = new GpsTrackQueryResponse();
                response.setStatus(-1);
                response.setCause("获取token失败");
                return response;
            }
            System.out.println("Token获取成功: " + token);
            // 构建请求URL
            String url = config.getDomain() + "/webapi?action=querytracks&token=" + token+"&serverid="+config.getServerid();
            System.out.println("请求URL: " + url);
            // 构建请求参数
            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()));
            }
            System.out.println("请求参数: " + params);
            // 发送HTTP请求
            String result = HttpUtil.post(url, params);
            System.out.println("HTTP响应结果: " + result);
            if (result == null || result.trim().isEmpty()) {
                System.err.println("HTTP请求返回空结果");
                GpsTrackQueryResponse response = new GpsTrackQueryResponse();
                response.setStatus(-1);
                response.setCause("HTTP请求返回空结果");
                return response;
            }
            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) {
            System.err.println("查询历史轨迹异常: " + e.getMessage());
            e.printStackTrace();
            GpsTrackQueryResponse response = new GpsTrackQueryResponse();
            response.setStatus(-1);
            response.setCause("查询历史轨迹失败:" + (e.getMessage() != null ? e.getMessage() : e.getClass().getSimpleName()));
            return response;
        }
    }