From 73d7f7aed91cdaaaf61e6177dc02c71ef5ca51e8 Mon Sep 17 00:00:00 2001
From: wzp <2040239371@qq.com>
Date: 星期三, 03 九月 2025 16:42:14 +0800
Subject: [PATCH] fix: 修复轨迹查询,界面报401的问题

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/GpsCollectServiceImpl.java |  635 ++++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 576 insertions(+), 59 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/GpsCollectServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/GpsCollectServiceImpl.java
index 9cc92ea..6385cea 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/GpsCollectServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/GpsCollectServiceImpl.java
@@ -1,8 +1,7 @@
 package com.ruoyi.system.service.impl;
 
 import com.ruoyi.common.utils.http.HttpUtils;
-import com.ruoyi.system.domain.GpsLoginRequest;
-import com.ruoyi.system.domain.GpsLoginResponse;
+import com.ruoyi.system.domain.*;
 import com.ruoyi.system.service.IGpsCollectService;
 import com.ruoyi.system.config.GpsServiceConfig;
 import com.ruoyi.common.utils.MD5Util;
@@ -14,10 +13,19 @@
 import org.springframework.http.ResponseEntity;
 import java.util.HashMap;
 import java.util.Map;
-import org.springframework.util.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import com.ruoyi.common.utils.HttpUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.ruoyi.common.exception.ServiceException;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.ruoyi.system.service.IGpsConfigService;
+import java.util.ArrayList;
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import com.ruoyi.common.utils.DateUtils;
+import java.util.Date;
+import com.ruoyi.system.service.IVehicleInfoService;
 
 /**
  * GPS閲囬泦鏈嶅姟瀹炵幇
@@ -27,98 +35,155 @@
 
     private final RestTemplate restTemplate;
     private final GpsServiceConfig gpsServiceConfig;
+    @Autowired
+    private IGpsConfigService gpsConfigService;
+
+    @Autowired
+    private IVehicleInfoService vehicleInfoService;
 
     public GpsCollectServiceImpl(GpsServiceConfig gpsServiceConfig) {
         this.restTemplate = new RestTemplate();
         this.gpsServiceConfig = gpsServiceConfig;
     }
 
+
+
     @Override
     public GpsLoginResponse login(GpsLoginRequest request) {
-        // 鍙傛暟鏍¢獙
-        if (StringUtils.isEmpty(request.getType()) || StringUtils.isEmpty(request.getFrom())) {
-            throw new ServiceException("鍙傛暟涓嶈兘涓虹┖");
-        }
-
         // 鏋勫缓璇锋眰URL
-        String url = gpsServiceConfig.getDomain() + "/webapi?action=login";
-        
-        // 璁剧疆璇锋眰鍙傛暟
-        Map<String, String> params = new HashMap<>();
-        params.put("username", gpsServiceConfig.getUsername());
-        params.put("password", MD5Util.md5(gpsServiceConfig.getPassword()));
-        params.put("type", request.getType());
-        params.put("from", request.getFrom());
-        params.put("browser", request.getBrowser());
+        String url = request.getDomain() + "/webapi?action=login";
 
-        StringBuilder paramStr = new StringBuilder();
-        for (Map.Entry<String, String> entry : params.entrySet()) {
-            if (paramStr.length() > 0) {
-                paramStr.append("&");
-            }
-            paramStr.append(entry.getKey()).append("=").append(entry.getValue());
-        }
-
-        // 鍙戦�佽姹�
-        String response = HttpUtil.post(url,params);
-        
-        // 瑙f瀽鍝嶅簲
-        GpsLoginResponse loginResponse = new GpsLoginResponse();
         try {
-            JSONObject jsonResponse = JSONObject.parseObject(response);
-            int status = jsonResponse.getIntValue("status");
-            String username = jsonResponse.getString("username");
+            // 璁剧疆璇锋眰鍙傛暟
+            Map<String, String> params = new HashMap<>();
+            params.put("username", request.getUsername());
+            params.put("password", MD5Util.md5(request.getPassword()));
+            params.put("type", request.getType());
+            params.put("from", request.getFrom());
+            params.put("browser", request.getBrowser());
+
+          
+            // 鍙戦�佽姹�
+            String result = HttpUtil.post(url, params);
+            JSONObject jsonResult = JSON.parseObject(result);
+
+            // 瑙f瀽鍝嶅簲
+            GpsLoginResponse response = new GpsLoginResponse();
+            int status = jsonResult.getInteger("status");
+            response.setStatus(status);
             
-            // 鏍规嵁杩斿洖鐮佽缃搷搴斾俊鎭�
+            // 鏍规嵁鐘舵�佺爜璁剧疆鍝嶅簲淇℃伅
             switch (status) {
                 case 0:
-                    loginResponse.setSuccess(true);
-                    loginResponse.setMessage("鐧诲綍鎴愬姛");
-                    loginResponse.setToken(jsonResponse.getString("token"));
+                    response.setSuccess(true);
+                    response.setMessage("鐧诲綍鎴愬姛");
+                    response.setToken(jsonResult.getString("token"));
                     break;
                 case -1:
-                    loginResponse.setSuccess(false);
-                    loginResponse.setMessage("鐧诲綍澶辫触");
+                    response.setSuccess(false);
+                    response.setMessage("鐧诲綍澶辫触");
                     break;
                 case 1:
-                    loginResponse.setSuccess(false);
-                    loginResponse.setMessage("瀵嗙爜閿欒");
+                    response.setSuccess(false);
+                    response.setMessage("瀵嗙爜閿欒");
                     break;
                 case 2:
-                    loginResponse.setSuccess(false);
-                    loginResponse.setMessage("绂佹鐧诲綍");
+                    response.setSuccess(false);
+                    response.setMessage("绂佹鐧诲綍");
                     break;
                 case 3:
-                    loginResponse.setSuccess(false);
-                    loginResponse.setMessage("璐﹀彿宸茬鐢�");
+                    response.setSuccess(false);
+                    response.setMessage("璐﹀彿宸茬鐢�");
                     break;
                 case 4:
-                    loginResponse.setSuccess(false);
-                    loginResponse.setMessage("璁惧鍒版湡");
+                    response.setSuccess(false);
+                    response.setMessage("璁惧鍒版湡");
                     break;
                 case 5:
-                    loginResponse.setSuccess(false);
-                    loginResponse.setMessage("璁惧杩囨湡");
+                    response.setSuccess(false);
+                    response.setMessage("璁惧杩囨湡");
                     break;
                 case 9903:
-                    loginResponse.setSuccess(false);
-                    loginResponse.setMessage("Token杩囨湡");
+                    response.setSuccess(false);
+                    response.setMessage("Token杩囨湡");
                     break;
                 case 9906:
-                    loginResponse.setSuccess(false);
-                    loginResponse.setMessage("璐﹀彿鍦ㄥ叾浠栧湴鏂圭櫥褰�");
+                    response.setSuccess(false);
+                    response.setMessage("璐﹀彿鍦ㄥ叾浠栧湴鏂圭櫥褰�");
                     break;
                 default:
-                    loginResponse.setSuccess(false);
-                    loginResponse.setMessage("鏈煡閿欒");
+                    response.setSuccess(false);
+                    response.setMessage("鏈煡閿欒");
                     break;
             }
+
+            return response;
         } catch (Exception e) {
-            loginResponse.setSuccess(false);
-            loginResponse.setMessage("瑙f瀽鍝嶅簲澶辫触锛�" + e.getMessage());
+            GpsLoginResponse response = new GpsLoginResponse();
+            response.setSuccess(false);
+            response.setStatus(-1);
+            response.setMessage("鐧诲綍澶辫触锛�" + e.getMessage());
+            return response;
         }
-        
-        return loginResponse;
+    }
+
+    /**
+     * 鑾峰彇鏈夋晥鐨則oken锛屽鏋渢oken鏃犳晥鍒欒嚜鍔ㄧ櫥褰�
+     */
+    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");
+                loginRequest.setFrom("WEB");
+                loginRequest.setUsername(username);
+                loginRequest.setPassword(password);
+                loginRequest.setDomain(domain);
+                
+                System.out.println("寮�濮嬬櫥褰旼PS绯荤粺锛岀敤鎴峰悕: " + username + ", 鍩熷悕: " + domain);
+                GpsLoginResponse loginResponse = login(loginRequest);
+                
+                if (loginResponse.isSuccess()) {
+                    //灏唗oken鍐欏叆gspconfig
+                    token = loginResponse.getToken();
+                    //getTokenExpireTime 杩欎釜鏄病鏈夌殑 闇�瑕佽嚜宸辫绠楋紝褰撳墠鏃堕棿+23灏忔椂
+                    Date expireTime = DateUtils.addHours(new Date(), 23);
+                    gpsConfigService.updateToken("gps51", token, expireTime);
+                    System.out.println("GPS绯荤粺鐧诲綍鎴愬姛锛宼oken宸叉洿鏂�");
+                    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;
+        }
     }
 
     /**
@@ -141,4 +206,456 @@
         }
         return "USER".equals(type) || "DEVICE".equals(type);
     }
+
+    /**
+     * 鏇存柊杞﹁締璁惧ID
+     * 鏍规嵁璁惧鍒楄〃涓殑杞︾墝鍙锋洿鏂版垨鏂板杞﹁締淇℃伅
+     */
+    private void updateVehicleDeviceIds(GpsDeviceListResponse response) {
+        if (response.getStatus() != 0 || response.getGroups() == null) {
+            return;
+        }
+
+        // 閬嶅巻鎵�鏈夊垎缁勫拰璁惧
+        for (GpsGroup group : response.getGroups()) {
+            for (GpsDevice device : group.getDevices()) {
+                // 妫�鏌ヨ澶囧悕绉板拰澶囨敞涓槸鍚﹀寘鍚溅鐗屽彿
+                String deviceName = device.getDevicename();
+                String remark = device.getRemark();
+                String deviceId = device.getDeviceid();
+
+                if (StringUtils.isNotEmpty(deviceName) || StringUtils.isNotEmpty(remark)) {
+                    // 灏濊瘯浠庤澶囧悕绉板拰澶囨敞涓彁鍙栬溅鐗屽彿
+                    String plateNumber = extractPlateNumber(deviceName, remark);
+                    if (StringUtils.isNotEmpty(plateNumber)) {
+                        // 鏌ヨ杞﹁締淇℃伅
+                        VehicleInfo vehicleInfo = vehicleInfoService.selectVehicleInfoByPlateNumber(plateNumber);
+                        if (vehicleInfo != null) {
+                            // 鏇存柊鐜版湁杞﹁締鐨勮澶嘔D
+                            vehicleInfo.setDeviceId(deviceId);
+                            vehicleInfoService.updateVehicleInfo(vehicleInfo);
+                        } else {
+                            // 鍒涘缓鏂扮殑杞﹁締淇℃伅
+                            VehicleInfo newVehicle = new VehicleInfo();
+                            newVehicle.setVehicleNo(plateNumber);
+                            newVehicle.setDeviceId(deviceId);
+                            newVehicle.setStatus("0"); // 姝e父鐘舵��
+                            vehicleInfoService.insertVehicleInfo(newVehicle);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * 浠庤澶囧悕绉板拰澶囨敞涓彁鍙栬溅鐗屽彿
+     */
+    private String extractPlateNumber(String deviceName, String remark) {
+        // 杩欓噷鍙互鏍规嵁瀹為檯鎯呭喌瀹炵幇杞︾墝鍙锋彁鍙栭�昏緫
+        // 渚嬪锛氫粠瀛楃涓蹭腑鍖归厤杞︾墝鍙锋牸寮�
+        if (StringUtils.isNotEmpty(deviceName)) {
+            return deviceName;
+        }
+        if (StringUtils.isNotEmpty(remark)) {
+            return remark;
+        }
+        return null;
+    }
+
+    @Override
+    public GpsDeviceListResponse getDeviceList() {
+        // 鑾峰彇GPS閰嶇疆淇℃伅
+        SysGpsConfig config = gpsConfigService.selectGpsConfigByKey("gps51");
+        if (config == null) {
+            GpsDeviceListResponse response = new GpsDeviceListResponse();
+            response.setStatus(-1);
+            response.setCause("鏈壘鍒癎PS閰嶇疆淇℃伅");
+            return response;
+        }
+
+        // 鑾峰彇鏈夋晥鐨則oken锛屽鏋滄棤鏁堝垯鑷姩鐧诲綍
+        String token = getValidTokenWithAutoLogin();
+        if (token == null) {
+            GpsDeviceListResponse response = new GpsDeviceListResponse();
+            response.setStatus(-1);
+            response.setCause("鑾峰彇token澶辫触");
+            return response;
+        }
+        
+        String username = config.getUsername();
+        // 鏋勫缓璇锋眰URL
+        String url = config.getDomain() + "/webapi?action=querymonitorlist&token=" + token;
+        Map<String, String> params = new HashMap<>();
+        params.put("username", username);
+        
+
+        try {
+
+            // 鍙戦�丠TTP璇锋眰
+            String result = HttpUtil.post(url, params);
+            JSONObject jsonResult = JSON.parseObject(result);
+
+            // 瑙f瀽鍝嶅簲
+            GpsDeviceListResponse response = new GpsDeviceListResponse();
+            response.setStatus(jsonResult.getInteger("status"));
+            response.setCause(jsonResult.getString("cause"));
+
+            if (response.getStatus() == 0) {
+                // 瑙f瀽鍒嗙粍鍒楄〃
+                JSONArray groupsArray = jsonResult.getJSONArray("groups");
+                List<GpsGroup> groups = new ArrayList<>();
+                
+                for (int i = 0; i < groupsArray.size(); i++) {
+                    JSONObject groupJson = groupsArray.getJSONObject(i);
+                    GpsGroup group = new GpsGroup();
+                    group.setGroupid(groupJson.getInteger("groupid"));
+                    group.setGroupname(groupJson.getString("groupname"));
+                    group.setRemark(groupJson.getString("remark"));
+
+                    // 瑙f瀽璁惧鍒楄〃
+                    JSONArray devicesArray = groupJson.getJSONArray("devices");
+                    List<GpsDevice> devices = new ArrayList<>();
+                    
+                    for (int j = 0; j < devicesArray.size(); j++) {
+                        JSONObject deviceJson = devicesArray.getJSONObject(j);
+                        GpsDevice device = new GpsDevice();
+                        device.setDeviceid(deviceJson.getString("deviceid"));
+                        device.setDevicename(deviceJson.getString("devicename"));
+                        device.setDevicetype(deviceJson.getInteger("devicetype"));
+                        device.setSimnum(deviceJson.getString("simnum"));
+                        device.setOverduetime(deviceJson.getLong("overduetime"));
+                        device.setExpirenotifytime(deviceJson.getLong("expirenotifytime"));
+                        device.setRemark(deviceJson.getString("remark"));
+                        device.setCreater(deviceJson.getString("creater"));
+                        device.setVideochannelcount(deviceJson.getInteger("videochannelcount"));
+                        device.setLastactivetime(deviceJson.getLong("lastactivetime"));
+                        device.setIsfree(deviceJson.getInteger("isfree"));
+                        device.setAllowedit(deviceJson.getInteger("allowedit"));
+                        device.setIcon(deviceJson.getInteger("icon"));
+                        device.setStared(deviceJson.getInteger("stared"));
+                        device.setLoginname(deviceJson.getString("loginname"));
+                        
+                        devices.add(device);
+                    }
+                    
+                    group.setDevices(devices);
+                    groups.add(group);
+                }
+                
+                response.setGroups(groups);
+
+               
+            }
+
+            return response;
+        } catch (Exception e) {
+            GpsDeviceListResponse response = new GpsDeviceListResponse();
+            response.setStatus(-1);
+            response.setCause("璇锋眰璁惧鍒楄〃澶辫触锛�" + e.getMessage());
+            return response;
+        }
+    }
+
+    @Override
+    public GpsLastPositionResponse getLastPosition(GpsLastPositionRequest request) {
+        // 鑾峰彇GPS閰嶇疆淇℃伅
+        SysGpsConfig config = gpsConfigService.selectGpsConfigByKey("gps51");
+        if (config == null) {
+            GpsLastPositionResponse response = new GpsLastPositionResponse();
+            response.setStatus(-1);
+            response.setCause("鏈壘鍒癎PS閰嶇疆淇℃伅");
+            return response;
+        }
+        System.out.println("GPS閰嶇疆淇℃伅鑾峰彇鎴愬姛锛�");
+
+        // 鑾峰彇鏈夋晥鐨則oken锛屽鏋滄棤鏁堝垯鑷姩鐧诲綍
+        String token = getValidTokenWithAutoLogin();
+        if (token == null) {
+            GpsLastPositionResponse response = new GpsLastPositionResponse();
+            response.setStatus(-1);
+            response.setCause("鑾峰彇token澶辫触");
+            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<>();
+            
+        
+        // 浣跨敤閰嶇疆涓殑lastquerypositiontime浣滀负鏌ヨ鏃堕棿
+        Long lastQueryTime = config.getLastquerypositiontime();
+        if (lastQueryTime == null) {
+            lastQueryTime = 0L; // 濡傛灉浠庢湭鏌ヨ杩囷紝鍒欎粠0寮�濮�
+        }
+        params.put("lastquerypositiontime", String.valueOf(lastQueryTime));
+        
+        // 娣诲姞璁惧ID鍒楄〃
+        if (request.getDeviceids() != null && !request.getDeviceids().isEmpty()) {
+            params.put("deviceids", JSON.toJSONString(request.getDeviceids()));
+        }
+
+        System.out.println("璇锋眰鍙傛暟锛�"+params);
+
+        try {
+            
+
+            // 鍙戦�丠TTP璇锋眰
+            String result = HttpUtil.post(url, params);
+            JSONObject jsonResult = JSON.parseObject(result);
+
+            // 瑙f瀽鍝嶅簲
+            GpsLastPositionResponse response = new GpsLastPositionResponse();
+            response.setStatus(jsonResult.getInteger("status"));
+            response.setCause(jsonResult.getString("cause"));
+            
+            // 鑾峰彇鏂扮殑lastquerypositiontime
+            Long newLastQueryTime = jsonResult.getLong("lastquerypositiontime");
+            response.setLastquerypositiontime(newLastQueryTime);
+
+            // 濡傛灉璇锋眰鎴愬姛锛屾洿鏂伴厤缃腑鐨刲astquerypositiontime
+            if (response.getStatus() == 0 && newLastQueryTime != null) {
+                config.setLastquerypositiontime(newLastQueryTime);
+                gpsConfigService.updateGpsConfig(config);
+            }
+
+            if (response.getStatus() == 0) {
+                // 瑙f瀽浣嶇疆璁板綍鍒楄〃
+                JSONArray recordsArray = jsonResult.getJSONArray("records");
+                List<GpsLastPosition> records = new ArrayList<>();
+                
+                for (int i = 0; i < recordsArray.size(); i++) {
+                    JSONObject recordJson = recordsArray.getJSONObject(i);
+                    GpsLastPosition record = new GpsLastPosition();
+                    record.setDeviceid(recordJson.getString("deviceid"));
+                    record.setDevicetime(recordJson.getLong("devicetime"));
+                    record.setArrivedtime(recordJson.getLong("arrivedtime"));
+                    record.setUpdatetime(recordJson.getLong("updatetime"));
+                    record.setValidpoistiontime(recordJson.getLong("validpoistiontime"));
+                    record.setCallat(recordJson.getDouble("callat"));
+                    record.setCallon(recordJson.getDouble("callon"));
+                    record.setAltitude(recordJson.getDouble("altitude"));
+                    record.setRadius(recordJson.getInteger("radius"));
+                    record.setSpeed(recordJson.getDouble("speed"));
+                    record.setCourse(recordJson.getInteger("course"));
+                    record.setTotaldistance(recordJson.getInteger("totaldistance"));
+                    record.setTotaloil(recordJson.getInteger("totaloil"));
+                    record.setTotalnotrunningad(recordJson.getInteger("totalnotrunningad"));
+                    record.setMasteroil(recordJson.getInteger("masteroil"));
+                    record.setAuxoil(recordJson.getInteger("auxoil"));
+                    record.setThirdoil(recordJson.getInteger("thirdoil"));
+                    record.setFourthoil(recordJson.getInteger("fourthoil"));
+                    record.setSrcad0(recordJson.getInteger("srcad0"));
+                    record.setSrcad1(recordJson.getInteger("srcad1"));
+                    record.setSrcad2(recordJson.getInteger("srcad2"));
+                    record.setSrcad3(recordJson.getInteger("srcad3"));
+                    record.setStatus(recordJson.getLong("status"));
+                    record.setStrstatus(recordJson.getString("strstatus"));
+                    record.setStrstatusen(recordJson.getString("strstatusen"));
+                    record.setAlarm(recordJson.getLong("alarm"));
+                    record.setStralarm(recordJson.getString("stralarm"));
+                    record.setStralarmsen(recordJson.getString("stralarmsen"));
+                    record.setVideoalarm(recordJson.getLong("videoalarm"));
+                    record.setStrvideoalarm(recordJson.getString("strvideoalarm"));
+                    record.setStrvideoalarmen(recordJson.getString("strvideoalarmen"));
+                    record.setVideosignalloststatus(recordJson.getLong("videosignalloststatus"));
+                    record.setVideosignalcoverstatus(recordJson.getLong("videosignalcoverstatus"));
+                    record.setVideobehavior(recordJson.getLong("videobehavior"));
+                    record.setVideofatiguedegree(recordJson.getLong("videofatiguedegree"));
+                    record.setGotsrc(recordJson.getString("gotsrc"));
+                    record.setRxlevel(recordJson.getInteger("rxlevel"));
+                    record.setGpsvalidnum(recordJson.getInteger("gpsvalidnum"));
+                    record.setExvoltage(recordJson.getDouble("exvoltage"));
+                    record.setVoltagev(recordJson.getDouble("voltagev"));
+                    record.setVoltagepercent(recordJson.getDouble("voltagepercent"));
+                    record.setMoving(recordJson.getInteger("moving"));
+                    record.setParklat(recordJson.getDouble("parklat"));
+                    record.setParklon(recordJson.getDouble("parklon"));
+                    record.setParktime(recordJson.getLong("parktime"));
+                    record.setParkduration(recordJson.getLong("parkduration"));
+                    record.setTemp1(recordJson.getInteger("temp1"));
+                    record.setTemp2(recordJson.getInteger("temp2"));
+                    record.setTemp3(recordJson.getInteger("temp3"));
+                    record.setTemp4(recordJson.getInteger("temp4"));
+                    record.setHumi1(recordJson.getInteger("humi1"));
+                    record.setHumi2(recordJson.getInteger("humi2"));
+                    record.setIostatus(recordJson.getInteger("iostatus"));
+                    record.setCurrentoverspeedstate(recordJson.getInteger("currentoverspeedstate"));
+                    record.setRotatestatus(recordJson.getShort("rotatestatus"));
+                    record.setLoadstatus(recordJson.getShort("loadstatus"));
+                    record.setWeight(recordJson.getLong("weight"));
+                    record.setSrcweightad0(recordJson.getInteger("srcweightad0"));
+                    record.setReportmode(recordJson.getShort("reportmode"));
+                    
+                    records.add(record);
+                }
+                
+                response.setRecords(records);
+            }
+
+            return response;
+        } catch (Exception e) {
+            GpsLastPositionResponse response = new GpsLastPositionResponse();
+            response.setStatus(-1);
+            response.setCause("璇锋眰璁惧鏈�鍚庝綅缃け璐ワ細" + e.getMessage());
+            return response;
+        }
+    }
+
+    @Override
+    public String getDeviceIdByPlateNumber(String plateNumber) {
+        if (StringUtils.isEmpty(plateNumber)) {
+            return null;
+        }
+
+        try {
+            // 鑾峰彇璁惧鍒楄〃
+            GpsDeviceListResponse response = getDeviceList();
+            if (response.getStatus() != 0) {
+                return null;
+            }
+
+            // 閬嶅巻鎵�鏈夊垎缁勫拰璁惧
+            for (GpsGroup group : response.getGroups()) {
+                for (GpsDevice device : group.getDevices()) {
+                    // 妫�鏌ヨ澶囧娉ㄤ腑鏄惁鍖呭惈杞︾墝鍙�
+                    if (device.getDevicename() != null && device.getDevicename().contains(plateNumber)) {
+                        return device.getDeviceid();
+                    }
+                    if(device.getRemark()!=null && device.getRemark().contains(plateNumber)){
+                        return device.getDeviceid();
+                    }
+                }
+            }
+        } catch (Exception e) {
+            // 璁板綍閿欒鏃ュ織
+            System.err.println("閫氳繃杞︾墝鍙锋煡璇㈣澶囧彿澶辫触锛�" + e.getMessage());
+        }
+
+        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("鏈壘鍒癎PS閰嶇疆淇℃伅");
+                return response;
+            }
+            
+            System.out.println("GPS閰嶇疆淇℃伅鑾峰彇鎴愬姛锛屽煙鍚�: " + config.getDomain() + ", 鐢ㄦ埛鍚�: " + config.getUsername());
+
+            // 鑾峰彇鏈夋晥鐨則oken锛屽鏋滄棤鏁堝垯鑷姩鐧诲綍
+            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<>();
+            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);
+
+            // 鍙戦�丠TTP璇锋眰
+            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);
+
+            // 瑙f瀽鍝嶅簲
+            GpsTrackQueryResponse response = new GpsTrackQueryResponse();
+            response.setStatus(jsonResult.getInteger("status"));
+            response.setCause(jsonResult.getString("cause"));
+            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;
+                }
+
+                // 瑙f瀽杞ㄨ抗璁板綍鍒楄〃
+                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;
+        }
+    }
 } 
\ No newline at end of file

--
Gitblit v1.9.1