wzp
2025-09-03 73d7f7aed91cdaaaf61e6177dc02c71ef5ca51e8
fix: 修复轨迹查询,界面报401的问题
3个文件已修改
83 ■■■■■ 已修改文件
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleGpsController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/GpsCollectServiceImpl.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysClientAppServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleGpsController.java
@@ -139,6 +139,8 @@
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String beginTime= sdf.format(dispatchOrd.getDispatchOrdStartDate());
            String endTime=  sdf.format(new Date());
            logger.info("查询车辆轨迹:车辆号:{}, 开始时间:{}, 结束时间:{}", vehicleNo, beginTime, endTime);
            return this.getAnonymousTracks(vehicleNo,beginTime,endTime);
//
//        vehicleGps.setVehicleNo(tbVehicleOrder.getVehicle());
@@ -312,10 +314,12 @@
                request.setEndtime(endTime);
                request.setTimezone(8); // 中国时区
                logger.info("查询车辆轨迹:车辆号:{}, 设备ID:{}, 开始时间:{}, 结束时间:{}", vehicleNo, vehicleInfo.getDeviceId(), beginTime, endTime);
                // 查询轨迹
                GpsTrackQueryResponse response = gpsCollectService.queryTracks(request);
                if (response.getStatus() != 0) {
                    throw new Error("查询轨迹失败:" + response.getCause());
                    logger.error("查询轨迹失败,状态码:{}, 错误信息:{}", response.getStatus(), response.getCause());
                    throw new Error("查询轨迹失败:" + (response.getCause() != null ? response.getCause() : "未知错误"));
                }
                // 转换GPS51轨迹点为统一格式
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/GpsCollectServiceImpl.java
@@ -131,17 +131,27 @@
     * 获取有效的token,如果token无效则自动登录
     */
    private String getValidTokenWithAutoLogin() {
        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");
@@ -149,6 +159,8 @@
            loginRequest.setUsername(username);
            loginRequest.setPassword(password);
            loginRequest.setDomain(domain);
                System.out.println("开始登录GPS系统,用户名: " + username + ", 域名: " + domain);
            GpsLoginResponse loginResponse = login(loginRequest);
            
            if (loginResponse.isSuccess()) {
@@ -157,10 +169,21 @@
                //getTokenExpireTime 这个是没有的 需要自己计算,当前时间+23小时
                Date expireTime = DateUtils.addHours(new Date(), 23);
                gpsConfigService.updateToken("gps51", token, expireTime);
                    System.out.println("GPS系统登录成功,token已更新");
                return token;
                } else {
                    System.err.println("GPS系统登录失败: " + loginResponse.getMessage());
                    return null;
            }
            } else {
                System.out.println("使用现有有效token");
        }
        return token;
        } catch (Exception e) {
            System.err.println("获取token时发生异常: " + e.getMessage());
            e.printStackTrace();
            return null;
        }
    }
    /**
@@ -344,6 +367,7 @@
            response.setCause("未找到GPS配置信息");
            return response;
        }
        System.out.println("GPS配置信息获取成功!");
        // 获取有效的token,如果无效则自动登录
        String token = getValidTokenWithAutoLogin();
@@ -354,8 +378,11 @@
            return response;
        }
        System.out.println("token获取成功!"+token);
        // 构建请求URL
        String url = config.getDomain() + "/webapi?action=lastposition&token="+token;
        System.out.println("请求URL:"+url);
        
        // 构建请求参数
        Map<String, String> params = new HashMap<>();
@@ -372,6 +399,8 @@
        if (request.getDeviceids() != null && !request.getDeviceids().isEmpty()) {
            params.put("deviceids", JSON.toJSONString(request.getDeviceids()));
        }
        System.out.println("请求参数:"+params);
        try {
            
@@ -513,26 +542,34 @@
    @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;
            System.out.println("请求URL: " + url);
        
        // 构建请求参数
        Map<String, String> params = new HashMap<>();
@@ -543,9 +580,20 @@
            params.put("timezone", String.valueOf(request.getTimezone()));
        }
        try {
            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 +603,16 @@
            response.setDeviceid(jsonResult.getString("deviceid"));
            if (response.getStatus() == 0) {
                if(jsonResult.getJSONObject("result")==null)
                {
                    System.err.println("查询轨迹失败,轨迹记录为空");
                    GpsTrackQueryResponse responseErr = new GpsTrackQueryResponse();
                    responseErr.setStatus(-1);
                    responseErr.setCause("轨迹记录为空");
                    return responseErr;
                }
                // 解析轨迹记录列表
                JSONArray recordsArray = jsonResult.getJSONArray("records");
                List<GpsTrackPoint> records = new ArrayList<>();
@@ -592,9 +650,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;
        }
    }
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysClientAppServiceImpl.java
@@ -138,11 +138,15 @@
        // 根据appId获取应用信息
        SysClientApp clientApp = sysClientAppMapper.selectSysClientAppByAppKey(appId);
        if (clientApp == null) {
            System.out.println("未找到appId为 " + appId + " 的应用配置");
            return false;
        }
        System.out.println("找到应用配置: " + clientApp);
        // 验证应用是否有效
        if (!"0".equals(clientApp.getStatus())) {
            System.out.println("应用状态无效: " + clientApp.getStatus());
            return false;
        }
@@ -151,12 +155,16 @@
            long currentTime = System.currentTimeMillis();
            if (currentTime < clientApp.getValidStartTime().getTime() 
                || currentTime > clientApp.getValidEndTime().getTime()) {
                System.out.println("应用已过期");
                return false;
            }
        }
        // 生成签名
        String serverSign = generateSign(appId, clientApp.getSecurityKey(), timestamp);
        System.out.println("服务器生成的签名: " + serverSign);
        System.out.println("客户端提供的签名: " + sign);
        System.out.println("签名是否匹配: " + sign.equals(serverSign));
        
        // 比较签名
        return sign.equals(serverSign);
@@ -168,6 +176,9 @@
     */
    private String generateSign(String appId, String securityKey, String timestamp) {
        String signStr = appId + timestamp + securityKey;
        return md5(signStr);
        System.out.println("签名原始字符串: " + signStr);
        String result = md5(signStr);
        System.out.println("MD5结果: " + result);
        return result;
    }