From 06a17c236d4cb9b8da75fce43af938cb7ea510bf Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期一, 15 十二月 2025 09:50:12 +0800
Subject: [PATCH] feat: 优化企业微信判断,优化gps分断处理
---
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/GpsCollectServiceImpl.java | 219 ++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 187 insertions(+), 32 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 f456c36..541ea56 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,10 +1,12 @@
package com.ruoyi.system.service.impl;
+import com.ruoyi.common.utils.PlateNumberExtractor;
import com.ruoyi.common.utils.http.HttpUtils;
import com.ruoyi.system.domain.*;
import com.ruoyi.system.service.IGpsCollectService;
import com.ruoyi.system.config.GpsServiceConfig;
import com.ruoyi.common.utils.MD5Util;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import org.springframework.http.HttpEntity;
@@ -30,6 +32,7 @@
/**
* GPS閲囬泦鏈嶅姟瀹炵幇
*/
+@Slf4j
@Service
public class GpsCollectServiceImpl implements IGpsCollectService {
@@ -78,6 +81,7 @@
response.setSuccess(true);
response.setMessage("鐧诲綍鎴愬姛");
response.setToken(jsonResult.getString("token"));
+ response.setServerid(jsonResult.getInteger("serverid"));
break;
case -1:
response.setSuccess(false);
@@ -131,36 +135,60 @@
* 鑾峰彇鏈夋晥鐨則oken锛屽鏋渢oken鏃犳晥鍒欒嚜鍔ㄧ櫥褰�
*/
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("寮�濮嬬櫥褰旼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");
}
- 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()) {
- //灏唗oken鍐欏叆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;
}
/**
@@ -231,10 +259,21 @@
private String extractPlateNumber(String deviceName, String remark) {
// 杩欓噷鍙互鏍规嵁瀹為檯鎯呭喌瀹炵幇杞︾墝鍙锋彁鍙栭�昏緫
// 渚嬪锛氫粠瀛楃涓蹭腑鍖归厤杞︾墝鍙锋牸寮�
+ //aaxx绮SX120
+ //鍦ㄨ繖閲屾彁鍙� 绮SX120
+
if (StringUtils.isNotEmpty(deviceName)) {
+ String plateNo =PlateNumberExtractor.extractPlateNumber(deviceName);
+ if (plateNo != null) {
+ return plateNo;
+ }
return deviceName;
}
if (StringUtils.isNotEmpty(remark)) {
+ String plateNo =PlateNumberExtractor.extractPlateNumber(remark);
+ if (plateNo != null) {
+ return plateNo;
+ }
return remark;
}
return null;
@@ -262,7 +301,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 +383,7 @@
response.setCause("鏈壘鍒癎PS閰嶇疆淇℃伅");
return response;
}
+ System.out.println("GPS閰嶇疆淇℃伅鑾峰彇鎴愬姛锛�");
// 鑾峰彇鏈夋晥鐨則oken锛屽鏋滄棤鏁堝垯鑷姩鐧诲綍
String token = getValidTokenWithAutoLogin();
@@ -354,9 +394,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 +415,8 @@
if (request.getDeviceids() != null && !request.getDeviceids().isEmpty()) {
params.put("deviceids", JSON.toJSONString(request.getDeviceids()));
}
+
+ System.out.println("璇锋眰鍙傛暟锛�"+params);
try {
@@ -399,7 +444,7 @@
// 瑙f瀽浣嶇疆璁板綍鍒楄〃
JSONArray recordsArray = jsonResult.getJSONArray("records");
List<GpsLastPosition> records = new ArrayList<>();
-
+ log.info("recordsArray length:{}",recordsArray.size());
for (int i = 0; i < recordsArray.size(); i++) {
JSONObject recordJson = recordsArray.getJSONObject(i);
GpsLastPosition record = new GpsLastPosition();
@@ -510,4 +555,114 @@
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