From a8553f9ef7e165b6348243af91caad1a987f8f9c Mon Sep 17 00:00:00 2001 From: wzp <2040239371@qq.com> Date: 星期三, 03 九月 2025 17:49:52 +0800 Subject: [PATCH] fix: 修复轨迹查询报错问题。 更换了接口地址和增加请求参数 --- ruoyi-system/src/main/java/com/ruoyi/system/service/impl/GpsCollectServiceImpl.java | 628 +++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 569 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..42e8390 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,157 @@ 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")); + response.setServerid(jsonResult.getInteger("serverid")); 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(); + Integer serviceid = loginResponse.getServerid(); + //getTokenExpireTime 杩欎釜鏄病鏈夌殑 闇�瑕佽嚜宸辫绠楋紝褰撳墠鏃堕棿+23灏忔椂 + Date expireTime = DateUtils.addHours(new Date(), 23); + gpsConfigService.updateToken("gps51", token,serviceid, 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 +208,447 @@ } 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+"&serverid="+config.getServerid(); + 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+"&serverid="+config.getServerid(); + 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+"&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); + + // 鍙戦�丠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) { + + // 瑙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