From 69b4d77c0402b73f5fd1ee6102b8143a232980da Mon Sep 17 00:00:00 2001
From: wanglizhong <wlz>
Date: 星期六, 03 五月 2025 01:38:45 +0800
Subject: [PATCH] feat:请求gps接口正常
---
ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java | 13
ruoyi-system/src/main/java/com/ruoyi/system/config/GpsServiceConfig.java | 39 ++++
ruoyi-system/pom.xml | 6
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/GpsCollectServiceImpl.java | 144 ++++++++++++++++
ruoyi-common/src/main/java/com/ruoyi/common/utils/MD5Util.java | 37 ++++
ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsLoginRequest.java | 63 +++++++
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/GpsCollectController.java | 36 ++++
ruoyi-admin/src/main/resources/application.yml | 12
ruoyi-common/src/main/java/com/ruoyi/common/utils/HttpUtil.java | 119 +++++++++++++
ruoyi-common/pom.xml | 6
ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsLoginResponse.java | 24 ++
ruoyi-system/src/main/java/com/ruoyi/system/service/IGpsCollectService.java | 16 +
12 files changed, 504 insertions(+), 11 deletions(-)
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/GpsCollectController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/GpsCollectController.java
new file mode 100644
index 0000000..ec7d4d0
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/GpsCollectController.java
@@ -0,0 +1,36 @@
+package com.ruoyi.web.controller.system;
+
+import com.ruoyi.common.annotation.Anonymous;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.system.domain.GpsLoginRequest;
+import com.ruoyi.system.domain.GpsLoginResponse;
+import com.ruoyi.system.service.IGpsCollectService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * GPS閲囬泦鎺ュ彛
+ */
+@RestController
+@RequestMapping("/system/gpscollect")
+public class GpsCollectController extends BaseController {
+
+ @Autowired
+ private IGpsCollectService gpsCollectService;
+
+ /**
+ * 娴嬭瘯鐧诲綍鎺ュ彛
+ */
+ @Anonymous()
+ @GetMapping("/testLogin")
+ public AjaxResult testLogin() {
+ GpsLoginRequest request = new GpsLoginRequest();
+ request.setType("USER");
+ request.setFrom("WEB");
+ request.setBrowser("Chrome/104.0.0.0");
+
+ GpsLoginResponse response = gpsCollectService.login(request);
+ return success(response);
+ }
+}
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index db0b9f1..7d421e6 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -12,10 +12,7 @@
addressEnabled: false
# 楠岃瘉鐮佺被鍨� math 鏁板瓧璁$畻 char 瀛楃楠岃瘉
captchaType: math
- # 鍖垮悕璁块棶閰嶇疆
- anonymous:
- appId: appId1
- securityKey: your_security_key
+
# 寮�鍙戠幆澧冮厤缃�
server:
@@ -131,3 +128,10 @@
excludes: /system/notice
# 鍖归厤閾炬帴
urlPatterns: /system/*,/monitor/*,/tool/*
+
+# GPS鏈嶅姟閰嶇疆
+gps:
+ service:
+ domain: https://gps51.com
+ username: 鐜嬫煇浜�
+ password: Aa1357
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index fc5574e..5266477 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -46,7 +46,11 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
-
+ <dependency>
+ <groupId>com.alibaba</groupId>
+ <artifactId>fastjson</artifactId>
+ <version>1.2.83</version>
+ </dependency>
<!--甯哥敤宸ュ叿绫� -->
<dependency>
<groupId>org.apache.commons</groupId>
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/HttpUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/HttpUtil.java
new file mode 100644
index 0000000..9afdb90
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/HttpUtil.java
@@ -0,0 +1,119 @@
+package com.ruoyi.common.utils;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import java.util.Map;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import java.security.cert.X509Certificate;
+import com.alibaba.fastjson.JSON;
+
+/**
+ * HTTP宸ュ叿绫�
+ */
+public class HttpUtil {
+
+ private static final int CONNECT_TIMEOUT = 5000;
+ private static final int READ_TIMEOUT = 5000;
+
+ static {
+ try {
+ // 鍒涘缓淇′换鎵�鏈夎瘉涔︾殑TrustManager
+ TrustManager[] trustAllCerts = new TrustManager[] {
+ new X509TrustManager() {
+ public X509Certificate[] getAcceptedIssuers() {
+ return null;
+ }
+ public void checkClientTrusted(X509Certificate[] certs, String authType) {
+ }
+ public void checkServerTrusted(X509Certificate[] certs, String authType) {
+ }
+ }
+ };
+
+ // 鍒濆鍖朣SLContext
+ SSLContext sc = SSLContext.getInstance("SSL");
+ sc.init(null, trustAllCerts, new java.security.SecureRandom());
+ HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
+
+ // 璁剧疆涓绘満鍚嶉獙璇佸櫒
+ HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true);
+ } catch (Exception e) {
+ throw new RuntimeException("鍒濆鍖朣SL涓婁笅鏂囧け璐�", e);
+ }
+ }
+
+ /**
+ * 鍙戦�丳OST璇锋眰
+ * @param url 璇锋眰URL
+ * @param params 璇锋眰鍙傛暟
+ * @return 鍝嶅簲鍐呭
+ */
+ public static String post(String url, Map<String, String> params) {
+ StringBuilder response = new StringBuilder();
+ HttpURLConnection conn = null;
+ try {
+ // 鍒涘缓杩炴帴
+ URL requestUrl = new URL(url);
+ boolean isHttps = url.toLowerCase().startsWith("https");
+
+ // 鏍规嵁鍗忚绫诲瀷鍒涘缓杩炴帴
+ if (isHttps) {
+ conn = (HttpsURLConnection) requestUrl.openConnection();
+ } else {
+ conn = (HttpURLConnection) requestUrl.openConnection();
+ }
+
+ // 璁剧疆璇锋眰灞炴��
+ conn.setRequestMethod("POST");
+ conn.setDoOutput(true);
+ conn.setDoInput(true);
+ conn.setUseCaches(false);
+ conn.setRequestProperty("Content-Type", "application/json");
+ conn.setRequestProperty("Accept", "application/json");
+
+ // 璁剧疆瓒呮椂鏃堕棿
+ conn.setConnectTimeout(CONNECT_TIMEOUT);
+ conn.setReadTimeout(READ_TIMEOUT);
+
+ // 鏋勫缓JSON鍙傛暟瀛楃涓�
+ String jsonParams = JSON.toJSONString(params);
+
+ // 鍙戦�佽姹傚弬鏁�
+ try (OutputStream os = conn.getOutputStream()) {
+ os.write(jsonParams.getBytes(StandardCharsets.UTF_8));
+ os.flush();
+ }
+
+ // 鑾峰彇鍝嶅簲鐮�
+ int responseCode = conn.getResponseCode();
+ if (responseCode != HttpURLConnection.HTTP_OK) {
+ throw new RuntimeException("HTTP璇锋眰澶辫触锛屽搷搴旂爜: " + responseCode);
+ }
+
+ // 璇诲彇鍝嶅簲
+ try (BufferedReader reader = new BufferedReader(
+ new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) {
+ String line;
+ while ((line = reader.readLine()) != null) {
+ response.append(line);
+ }
+ }
+
+ } catch (Exception e) {
+ throw new RuntimeException("HTTP璇锋眰澶辫触: " + e.getMessage(), e);
+ } finally {
+ if (conn != null) {
+ conn.disconnect();
+ }
+ }
+
+ return response.toString();
+ }
+}
\ No newline at end of file
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/MD5Util.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/MD5Util.java
new file mode 100644
index 0000000..a945d79
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/MD5Util.java
@@ -0,0 +1,37 @@
+package com.ruoyi.common.utils;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * MD5鍔犲瘑宸ュ叿绫�
+ */
+public class MD5Util {
+ /**
+ * MD5鍔犲瘑锛�32浣嶅皬鍐欙級
+ * @param plainText 鏄庢枃
+ * @return 32浣嶅皬鍐橫D5
+ */
+ public static String md5(String plainText) {
+ try {
+ MessageDigest md = MessageDigest.getInstance("MD5");
+ md.update(plainText.getBytes());
+ byte[] b = md.digest();
+ StringBuilder buf = new StringBuilder("");
+ for (int offset = 0; offset < b.length; offset++) {
+ int i = b[offset];
+ if (i < 0) {
+ i += 256;
+ }
+ if (i < 16) {
+ buf.append("0");
+ }
+ buf.append(Integer.toHexString(i));
+ }
+ return buf.toString();
+ } catch (NoSuchAlgorithmException e) {
+ e.printStackTrace();
+ return "";
+ }
+ }
+}
\ No newline at end of file
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
index 534d21c..edbf719 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
@@ -214,7 +214,7 @@
String urlNameString = url + "?" + param;
try
{
- log.info("sendSSLPost - {}", urlNameString);
+// log.info("sendSSLPost - {}", urlNameString);
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());
URL console = new URL(urlNameString);
@@ -240,25 +240,26 @@
result.append(new String(ret.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8));
}
}
- log.info("recv - {}", result);
+// log.info("recv - {}", result);
conn.disconnect();
br.close();
}
catch (ConnectException e)
{
- log.error("璋冪敤HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e);
+// log.error("璋冪敤HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e);
}
catch (SocketTimeoutException e)
{
- log.error("璋冪敤HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e);
+// log.error("璋冪敤HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e);
}
catch (IOException e)
{
- log.error("璋冪敤HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e);
+// log.error("璋冪敤HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e);
}
catch (Exception e)
{
- log.error("璋冪敤HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e);
+
+// log.error("璋冪敤HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e);
}
return result.toString();
}
diff --git a/ruoyi-system/pom.xml b/ruoyi-system/pom.xml
index 44b16f5..f38f016 100644
--- a/ruoyi-system/pom.xml
+++ b/ruoyi-system/pom.xml
@@ -32,6 +32,12 @@
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
+ <!-- FastJSON -->
+ <dependency>
+ <groupId>com.alibaba</groupId>
+ <artifactId>fastjson</artifactId>
+ <version>1.2.83</version>
+ </dependency>
</dependencies>
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/config/GpsServiceConfig.java b/ruoyi-system/src/main/java/com/ruoyi/system/config/GpsServiceConfig.java
new file mode 100644
index 0000000..9b708f9
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/config/GpsServiceConfig.java
@@ -0,0 +1,39 @@
+package com.ruoyi.system.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * GPS鏈嶅姟閰嶇疆
+ */
+@Component
+@ConfigurationProperties(prefix = "gps.service")
+public class GpsServiceConfig {
+ private String domain;
+ private String username;
+ private String password;
+
+ public String getDomain() {
+ return domain;
+ }
+
+ public void setDomain(String domain) {
+ this.domain = domain;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsLoginRequest.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsLoginRequest.java
new file mode 100644
index 0000000..55097cb
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsLoginRequest.java
@@ -0,0 +1,63 @@
+package com.ruoyi.system.domain;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * GPS鐧诲綍璇锋眰瀹炰綋
+ */
+public class GpsLoginRequest {
+ @JsonProperty("username")
+ private String username;
+
+ @JsonProperty("password")
+ private String password;
+
+ @JsonProperty("from")
+ private String from;
+
+ @JsonProperty("type")
+ private String type;
+
+ @JsonProperty("browser")
+ private String browser;
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public String getFrom() {
+ return from;
+ }
+
+ public void setFrom(String from) {
+ this.from = from;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getBrowser() {
+ return browser;
+ }
+
+ public void setBrowser(String browser) {
+ this.browser = browser;
+ }
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsLoginResponse.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsLoginResponse.java
new file mode 100644
index 0000000..14c66b3
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/GpsLoginResponse.java
@@ -0,0 +1,24 @@
+package com.ruoyi.system.domain;
+
+import lombok.Data;
+
+/**
+ * GPS鐧诲綍鍝嶅簲
+ */
+@Data
+public class GpsLoginResponse {
+ /**
+ * 鏄惁鎴愬姛
+ */
+ private boolean success;
+
+ /**
+ * 娑堟伅
+ */
+ private String message;
+
+ /**
+ * Token
+ */
+ private String token;
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IGpsCollectService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IGpsCollectService.java
new file mode 100644
index 0000000..33359e8
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IGpsCollectService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.system.service;
+
+import com.ruoyi.system.domain.GpsLoginRequest;
+import com.ruoyi.system.domain.GpsLoginResponse;
+
+/**
+ * GPS閲囬泦鏈嶅姟鎺ュ彛
+ */
+public interface IGpsCollectService {
+ /**
+ * GPS鐧诲綍
+ * @param request 鐧诲綍璇锋眰
+ * @return 鐧诲綍鍝嶅簲
+ */
+ GpsLoginResponse login(GpsLoginRequest request);
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..9cc92ea
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/GpsCollectServiceImpl.java
@@ -0,0 +1,144 @@
+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.service.IGpsCollectService;
+import com.ruoyi.system.config.GpsServiceConfig;
+import com.ruoyi.common.utils.MD5Util;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import java.util.HashMap;
+import java.util.Map;
+import org.springframework.util.StringUtils;
+import com.ruoyi.common.utils.HttpUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.common.exception.ServiceException;
+
+/**
+ * GPS閲囬泦鏈嶅姟瀹炵幇
+ */
+@Service
+public class GpsCollectServiceImpl implements IGpsCollectService {
+
+ private final RestTemplate restTemplate;
+ private final GpsServiceConfig gpsServiceConfig;
+
+ 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());
+
+ 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");
+
+ // 鏍规嵁杩斿洖鐮佽缃搷搴斾俊鎭�
+ switch (status) {
+ case 0:
+ loginResponse.setSuccess(true);
+ loginResponse.setMessage("鐧诲綍鎴愬姛");
+ loginResponse.setToken(jsonResponse.getString("token"));
+ break;
+ case -1:
+ loginResponse.setSuccess(false);
+ loginResponse.setMessage("鐧诲綍澶辫触");
+ break;
+ case 1:
+ loginResponse.setSuccess(false);
+ loginResponse.setMessage("瀵嗙爜閿欒");
+ break;
+ case 2:
+ loginResponse.setSuccess(false);
+ loginResponse.setMessage("绂佹鐧诲綍");
+ break;
+ case 3:
+ loginResponse.setSuccess(false);
+ loginResponse.setMessage("璐﹀彿宸茬鐢�");
+ break;
+ case 4:
+ loginResponse.setSuccess(false);
+ loginResponse.setMessage("璁惧鍒版湡");
+ break;
+ case 5:
+ loginResponse.setSuccess(false);
+ loginResponse.setMessage("璁惧杩囨湡");
+ break;
+ case 9903:
+ loginResponse.setSuccess(false);
+ loginResponse.setMessage("Token杩囨湡");
+ break;
+ case 9906:
+ loginResponse.setSuccess(false);
+ loginResponse.setMessage("璐﹀彿鍦ㄥ叾浠栧湴鏂圭櫥褰�");
+ break;
+ default:
+ loginResponse.setSuccess(false);
+ loginResponse.setMessage("鏈煡閿欒");
+ break;
+ }
+ } catch (Exception e) {
+ loginResponse.setSuccess(false);
+ loginResponse.setMessage("瑙f瀽鍝嶅簲澶辫触锛�" + e.getMessage());
+ }
+
+ return loginResponse;
+ }
+
+ /**
+ * 鏍¢獙鐧诲綍鏉ユ簮
+ */
+ private boolean isValidFrom(String from) {
+ if (from == null) {
+ return false;
+ }
+ return "ANDROID".equals(from) || "IPHONE".equals(from) ||
+ "WEB".equals(from) || "WEIXIN".equals(from);
+ }
+
+ /**
+ * 鏍¢獙鐧诲綍绫诲瀷
+ */
+ private boolean isValidType(String type) {
+ if (type == null) {
+ return false;
+ }
+ return "USER".equals(type) || "DEVICE".equals(type);
+ }
+}
\ No newline at end of file
--
Gitblit v1.9.1