From 2aebbc9601ab439707f69b08e467808df9f7549c Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期五, 07 十一月 2025 11:50:26 +0800
Subject: [PATCH] feat: weixin
---
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