wlzboy
2025-09-27 c1147646b9ef1d713a202d7ab8cf3ea8d677f142
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 {
            
@@ -513,39 +544,58 @@
    @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 {
            // 获取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);
            // 解析响应
@@ -555,6 +605,7 @@
            response.setDeviceid(jsonResult.getString("deviceid"));
            if (response.getStatus() == 0) {
                // 解析轨迹记录列表
                JSONArray recordsArray = jsonResult.getJSONArray("records");
                List<GpsTrackPoint> records = new ArrayList<>();
@@ -592,9 +643,11 @@
            return response;
        } catch (Exception e) {
            System.err.println("查询历史轨迹异常: " + e.getMessage());
            e.printStackTrace();
            GpsTrackQueryResponse response = new GpsTrackQueryResponse();
            response.setStatus(-1);
            response.setCause("查询历史轨迹失败:" + e.getMessage());
            response.setCause("查询历史轨迹失败:" + (e.getMessage() != null ? e.getMessage() : e.getClass().getSimpleName()));
            return response;
        }
    }