From 77f31f98b476273ffd6ca03e5d42b18cb6b3c480 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期三, 13 八月 2025 16:54:13 +0800
Subject: [PATCH] Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV
---
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/config/RemoteServiceConfig.java | 33 ++++
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/README_REMOTE_INTEGRATION.md | 199 ++++++++++++++++++++++++++++
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/resources/application-self.yml | 5
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/remote/RemoteService.java | 99 ++++++++++++++
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/remote/RemoteCtrl.java | 61 ++++++++
5 files changed, 397 insertions(+), 0 deletions(-)
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/README_REMOTE_INTEGRATION.md b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/README_REMOTE_INTEGRATION.md
new file mode 100644
index 0000000..b4c8c7c
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/README_REMOTE_INTEGRATION.md
@@ -0,0 +1,199 @@
+# 寰俊妯″潡璋冪敤杩滅▼瑙嗛妯″潡闆嗘垚璇存槑
+
+## 姒傝堪
+
+鏈枃妗h鏄庡浣曞湪 `pipIrr-web-wechat` 妯″潡涓皟鐢� `pipIrr-web-remote` 妯″潡鐨� `video/some` 鎺ュ彛锛屽疄鐜板井淇$瑙嗛鐩戞帶鍔熻兘銆�
+
+## 鏋舵瀯璇存槑
+
+- **pipIrr-web-wechat**: 寰俊灏忕▼搴忔湇鍔★紙绔彛锛�/wx锛�
+- **pipIrr-web-remote**: 杩滅▼鎺у埗鏈嶅姟锛堢鍙o細/remote锛�
+
+涓や釜鏈嶅姟閫氳繃HTTP鎺ュ彛杩涜閫氫俊锛屽井淇℃ā鍧椾綔涓哄鎴风璋冪敤杩滅▼鎺у埗妯″潡鐨勮棰戠洃鎺EST API銆�
+
+## 閰嶇疆璇存槑
+
+### 1. 閰嶇疆鏂囦欢
+
+鍦� `application-self.yml` 涓坊鍔犺繙绋嬫湇鍔¢厤缃細
+
+```yaml
+remote:
+ service:
+ base-url: ${pipIrr.remote.baseUrl:http://localhost:8081/remote}
+```
+
+### 2. 鐜鍙橀噺閰嶇疆
+
+鏍规嵁閮ㄧ讲鐜璁剧疆鐩稿簲鐨勭幆澧冨彉閲忥細
+
+```properties
+# 寮�鍙戠幆澧�
+pipIrr.remote.baseUrl=http://localhost:8081/remote
+
+# 鐢熶骇鐜
+pipIrr.remote.baseUrl=http://remote-service-host:8081/remote
+```
+
+## 鎺ュ彛璇存槑
+
+### 鑾峰彇瑙嗛鐩戞帶鏁版嵁
+
+**鎺ュ彛鍦板潃**: `GET /wx/remote/video/some`
+
+**璇锋眰鍙傛暟**:
+- pageCurr: 褰撳墠椤电爜锛堥粯璁�1锛�
+- pageSize: 姣忛〉澶у皬锛堝彲閫夛級
+
+**鍝嶅簲绀轰緥**:
+```json
+{
+ "success": true,
+ "msg": "鏌ヨ鎴愬姛",
+ "content": {
+ "obj": [
+ {
+ "id": 123456,
+ "name": "鎽勫儚鏈�1",
+ "videoUrl4Simple": "rtmp://...",
+ "videoUrl4Standard": "rtmp://...",
+ "videoUrl4Security": "rtmp://...",
+ "videoUrl4PcLive": "http://..."
+ }
+ ],
+ "pageCurr": 1,
+ "pageSize": 4,
+ "itemTotal": 10
+ }
+}
+```
+
+## 浣跨敤绀轰緥
+
+### Java浠g爜绀轰緥
+
+```java
+@RestController
+@RequestMapping("wechat/video")
+public class WechatVideoController {
+
+ @Autowired
+ private RemoteService remoteService;
+
+ @GetMapping("cameras")
+ public BaseResponse<Object> getCameras(
+ @RequestParam(defaultValue = "1") Integer pageCurr,
+ @RequestParam(required = false) Integer pageSize) {
+
+ // 鏋勫缓鏌ヨ鍙傛暟
+ StringBuilder queryParams = new StringBuilder();
+ queryParams.append("pageCurr=").append(pageCurr);
+ if (pageSize != null) {
+ queryParams.append("&pageSize=").append(pageSize);
+ }
+
+ // 璋冪敤杩滅▼瑙嗛鎺ュ彛
+ return remoteService.getVideoSome(queryParams.toString());
+ }
+}
+```
+
+### 鍓嶇璋冪敤绀轰緥
+
+```javascript
+// 寰俊灏忕▼搴忚皟鐢ㄧず渚�
+wx.request({
+ url: 'https://your-domain.com/wx/remote/video/some?pageCurr=1&pageSize=10',
+ method: 'GET',
+ success: function(res) {
+ if (res.data.success) {
+ const cameras = res.data.content.obj;
+ // 澶勭悊鎽勫儚鏈烘暟鎹�
+ cameras.forEach(camera => {
+ console.log('鎽勫儚鏈�:', camera.name);
+ console.log('鐩存挱鍦板潃:', camera.videoUrl4PcLive);
+ });
+ } else {
+ wx.showToast({
+ title: res.data.msg,
+ icon: 'error'
+ });
+ }
+ }
+});
+```
+
+## 閿欒澶勭悊
+
+### 甯歌閿欒鐮�
+
+- `HTTP 404`: 杩滅▼鏈嶅姟鎺ュ彛涓嶅瓨鍦�
+- `HTTP 500`: 杩滅▼鏈嶅姟鍐呴儴閿欒
+- `HTTP 503`: 杩滅▼鏈嶅姟涓嶅彲鐢�
+- `Connection Timeout`: 杩炴帴瓒呮椂
+- `Read Timeout`: 璇诲彇瓒呮椂
+
+### 閿欒澶勭悊绛栫暐
+
+1. **杩炴帴澶辫触閲嶈瘯**: OkHttpClient閰嶇疆浜嗚繛鎺ュけ璐ヨ嚜鍔ㄩ噸璇�
+2. **瓒呮椂澶勭悊**: 閰嶇疆鍚堢悊鐨勮繛鎺ャ�佽鍙栥�佸啓鍏ヨ秴鏃舵椂闂�
+3. **寮傚父鏃ュ織**: 璇︾粏璁板綍璋冪敤寮傚父淇℃伅锛屼究浜庨棶棰樻帓鏌�
+4. **闄嶇骇澶勭悊**: 鍦ㄨ繙绋嬫湇鍔′笉鍙敤鏃讹紝鍙互鑰冭檻鏈湴缂撳瓨鎴栭檷绾ф柟妗�
+
+## 鐩戞帶鍜屾棩蹇�
+
+### 鏃ュ織閰嶇疆
+
+```yaml
+logging:
+ level:
+ com.dy.pipIrrWechat.remote: DEBUG
+```
+
+### 鍏抽敭鏃ュ織
+
+- 杩滅▼鎺ュ彛璋冪敤璁板綍
+- 璇锋眰鍜屽搷搴斿唴瀹癸紙璋冭瘯妯″紡锛�
+- 寮傚父璇︾粏淇℃伅
+- 鎬ц兘鐩戞帶锛堝搷搴旀椂闂达級
+
+## 閮ㄧ讲娉ㄦ剰浜嬮」
+
+1. **缃戠粶杩為�氭��**: 纭繚寰俊鏈嶅姟鑳藉璁块棶杩滅▼鎺у埗鏈嶅姟
+2. **绔彛閰嶇疆**: 妫�鏌ラ槻鐏鍜屽畨鍏ㄧ粍璁剧疆
+3. **璐熻浇鍧囪 **: 濡傛灉杩滅▼鏈嶅姟鏈夊涓疄渚嬶紝閰嶇疆璐熻浇鍧囪
+4. **鍋ュ悍妫�鏌�**: 瀹氭湡妫�鏌ヨ繙绋嬫湇鍔″彲鐢ㄦ��
+
+## 鎵╁睍鍔熻兘
+
+### 1. 娣诲姞鏂扮殑杩滅▼鎺ュ彛
+
+1. 鍦� `RemoteService` 涓坊鍔犳柊鐨勬柟娉�
+2. 鍦� `RemoteCtrl` 涓坊鍔犲搴旂殑鎺у埗鍣ㄦ柟娉�
+3. 鏇存柊鏂囨。鍜屾祴璇曠敤渚�
+
+### 2. 澧炲姞缂撳瓨鏈哄埗
+
+鍙互鑰冭檻瀵规煡璇㈢被鎺ュ彛娣诲姞缂撳瓨锛屾彁楂樺搷搴旈�熷害锛�
+
+```java
+@Cacheable(value = "controllerAlarmState", key = "#queryParams")
+public BaseResponse<Object> getControllerAlarmState(String queryParams) {
+ // 瀹炵幇浠g爜
+}
+```
+
+### 3. 寮傛璋冪敤
+
+瀵逛簬涓嶉渶瑕佺珛鍗宠繑鍥炵粨鏋滅殑鎿嶄綔锛屽彲浠ヨ�冭檻寮傛璋冪敤锛�
+
+```java
+@Async
+public CompletableFuture<BaseResponse<Object>> openValveAsync(String requestBody) {
+ return CompletableFuture.completedFuture(callRemoteApi("/valve/open", requestBody, "POST"));
+}
+```
+
+## 鎬荤粨
+
+閫氳繃浠ヤ笂閰嶇疆鍜屼唬鐮侊紝寰俊妯″潡鍙互鎴愬姛璋冪敤杩滅▼鎺у埗妯″潡鐨� `video/some` 鎺ュ彛锛屽疄鐜拌棰戠洃鎺ф暟鎹殑鑾峰彇鍔熻兘銆傝繖绉嶆灦鏋勮璁′繚鎸佷簡妯″潡闂寸殑瑙h�︼紝鍚屾椂鎻愪緵浜嗙畝娲侀珮鏁堢殑瑙嗛鏁版嵁璁块棶鑳藉姏銆�
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/config/RemoteServiceConfig.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/config/RemoteServiceConfig.java
new file mode 100644
index 0000000..05b9018
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/config/RemoteServiceConfig.java
@@ -0,0 +1,33 @@
+package com.dy.pipIrrWechat.config;
+
+import okhttp3.OkHttpClient;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 杩滅▼瑙嗛鏈嶅姟閰嶇疆绫�
+ *
+ * @author zuoxiao
+ * @date 2025-01-21
+ * @description 杩滅▼瑙嗛鏈嶅姟鐩稿叧閰嶇疆
+ */
+@Configuration
+public class RemoteServiceConfig {
+
+ /**
+ * 閰嶇疆OkHttpClient Bean
+ *
+ * @return OkHttpClient瀹炰緥
+ */
+ @Bean
+ public OkHttpClient okHttpClient() {
+ return new OkHttpClient.Builder()
+ .connectTimeout(30, TimeUnit.SECONDS)
+ .readTimeout(60, TimeUnit.SECONDS)
+ .writeTimeout(60, TimeUnit.SECONDS)
+ .retryOnConnectionFailure(true) // 杩炴帴澶辫触鏃堕噸璇�
+ .build();
+ }
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/remote/RemoteCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/remote/RemoteCtrl.java
new file mode 100644
index 0000000..5a017ed
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/remote/RemoteCtrl.java
@@ -0,0 +1,61 @@
+package com.dy.pipIrrWechat.remote;
+
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 寰俊绔繙绋嬭棰戞帴鍙�
+ * 鎻愪緵寰俊灏忕▼搴忚皟鐢ㄨ繙绋嬫帶鍒舵ā鍧梫ideo鎺ュ彛
+ *
+ * @author zuoxiao
+ * @date 2025-01-21
+ * @description 寰俊绔繙绋嬭棰戝姛鑳芥帶鍒跺櫒
+ */
+@Slf4j
+@Tag(name = "寰俊杩滅▼瑙嗛", description = "寰俊绔皟鐢ㄨ繙绋嬫帶鍒舵ā鍧楃殑video鎺ュ彛")
+@RestController
+@RequestMapping(path = "remote")
+@RequiredArgsConstructor
+public class RemoteCtrl {
+
+ private final RemoteService remoteService;
+
+ /**
+ * 鑾峰彇瑙嗛鐩戞帶鏁版嵁
+ *
+ * @param pageCurr 褰撳墠椤电爜
+ * @param pageSize 姣忛〉澶у皬
+ * @return 瑙嗛鐩戞帶鏁版嵁
+ */
+ @Operation(summary = "鑾峰彇瑙嗛鐩戞帶鏁版嵁", description = "寰俊绔皟鐢ㄨ繙绋嬫帶鍒舵ā鍧楄幏鍙栨憚鍍忔満鏁版嵁")
+ @GetMapping(path = "video/some")
+ public BaseResponse<Object> getVideoSome(
+ @RequestParam(defaultValue = "1") Integer pageCurr,
+ @RequestParam(required = false) Integer pageSize) {
+ try {
+ log.info("寰俊绔姹傝棰戠洃鎺ф暟鎹�: pageCurr={}, pageSize={}", pageCurr, pageSize);
+
+ // 鏋勫缓鏌ヨ鍙傛暟
+ StringBuilder queryParams = new StringBuilder();
+ queryParams.append("pageCurr=").append(pageCurr);
+ if (pageSize != null) {
+ queryParams.append("&pageSize=").append(pageSize);
+ }
+
+ // 璋冪敤杩滅▼鏈嶅姟
+ BaseResponse<Object> result = remoteService.getVideoSome(queryParams.toString());
+
+ log.info("瑙嗛鐩戞帶鏁版嵁鏌ヨ缁撴灉: {}", result);
+ return result;
+
+ } catch (Exception e) {
+ log.error("寰俊绔棰戠洃鎺ф暟鎹煡璇㈠紓甯�", e);
+ return BaseResponseUtils.buildException("瑙嗛鐩戞帶鏁版嵁鏌ヨ澶辫触: " + e.getMessage());
+ }
+ }
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/remote/RemoteService.java b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/remote/RemoteService.java
new file mode 100644
index 0000000..1ecdca4
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/remote/RemoteService.java
@@ -0,0 +1,99 @@
+package com.dy.pipIrrWechat.remote;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.dy.common.webUtil.BaseResponse;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import okhttp3.*;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+
+/**
+ * 杩滅▼瑙嗛鏈嶅姟璋冪敤绫�
+ * 鐢ㄤ簬璋冪敤pipIrr-web-remote妯″潡鐨剉ideo鎺ュ彛
+ *
+ * @author zuoxiao
+ * @date 2025-01-21
+ * @description 寰俊妯″潡璋冪敤杩滅▼鎺у埗妯″潡鐨勮棰戞湇鍔$被
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class RemoteService {
+
+ @Value("${remote.service.base-url:http://localhost:8081/remote}")
+ private String remoteServiceBaseUrl;
+
+ private final OkHttpClient httpClient;
+
+ /**
+ * 璋冪敤杩滅▼瑙嗛鐩戞帶鎺ュ彛 - 鑾峰彇鎽勫儚鏈烘暟鎹�
+ *
+ * @param queryParams 鏌ヨ鍙傛暟瀛楃涓�
+ * @return 杩滅▼璋冪敤缁撴灉
+ */
+ public BaseResponse<Object> getVideoSome(String queryParams) {
+ return callRemoteApi("/video/some?" + (queryParams != null ? queryParams : ""), null, "GET");
+ }
+
+ /**
+ * 閫氱敤杩滅▼API璋冪敤鏂规硶
+ *
+ * @param endpoint 鎺ュ彛绔偣
+ * @param requestBody 璇锋眰浣擄紙GET璇锋眰鏃朵负null锛�
+ * @param method HTTP鏂规硶
+ * @return 璋冪敤缁撴灉
+ */
+ private BaseResponse<Object> callRemoteApi(String endpoint, String requestBody, String method) {
+ String url = remoteServiceBaseUrl + endpoint;
+ Request request;
+
+ try {
+ Request.Builder requestBuilder = new Request.Builder()
+ .url(url)
+ .addHeader("Content-Type", "application/json")
+ .addHeader("Accept", "application/json");
+
+ if ("POST".equalsIgnoreCase(method) && requestBody != null) {
+ RequestBody body = RequestBody.create(requestBody, MediaType.get("application/json; charset=utf-8"));
+ request = requestBuilder.post(body).build();
+ } else {
+ request = requestBuilder.get().build();
+ }
+
+ log.info("璋冪敤杩滅▼鎺ュ彛: {} {}", method, url);
+ log.debug("璇锋眰浣�: {}", requestBody);
+
+ try (Response response = httpClient.newCall(request).execute()) {
+ if (!response.isSuccessful()) {
+ log.error("杩滅▼璋冪敤澶辫触: HTTP {}", response.code());
+ return BaseResponse.<Object>builder()
+ .success(false)
+ .msg("杩滅▼鏈嶅姟璋冪敤澶辫触: HTTP " + response.code())
+ .build();
+ }
+
+ String responseBody = response.body() != null ? response.body().string() : "";
+ log.debug("杩滅▼鎺ュ彛鍝嶅簲: {}", responseBody);
+
+ // 瑙f瀽杩滅▼鏈嶅姟杩斿洖鐨凚aseResponse
+ JSONObject jsonResponse = JSON.parseObject(responseBody);
+ return BaseResponse.<Object>builder()
+ .success(jsonResponse.getBooleanValue("success"))
+ .msg(jsonResponse.getString("msg"))
+ .content(jsonResponse.get("content"))
+ .build();
+
+ }
+ } catch (IOException e) {
+ log.error("璋冪敤杩滅▼鎺ュ彛寮傚父: {}", e.getMessage(), e);
+ return BaseResponse.<Object>builder()
+ .success(false)
+ .msg("杩滅▼鏈嶅姟璋冪敤寮傚父: " + e.getMessage())
+ .build();
+ }
+ }
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/resources/application-self.yml b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/resources/application-self.yml
index 458e4c0..4e95449 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/resources/application-self.yml
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/resources/application-self.yml
@@ -21,6 +21,11 @@
delay: 5 #杞亴涓鍒掑紑闃�鐨勫欢杩熸椂闀�(鍒嗛挓)
preOpeningTime: 10 #鎻愬墠鏃堕棿(鍒嗛挓)
planTerminateLimitMinutes: 5 #璁″垝缁堟鍚庨檺鍒跺彂甯冩柊璁″垝鐨勬椂闂撮棿闅�(鍒嗛挓)
+
+#杩滅▼瑙嗛鏈嶅姟閰嶇疆
+remote:
+ service:
+ base-url: ${pipIrr.remote.baseUrl:http://localhost:8081/remote} #杩滅▼鎺у埗鏈嶅姟鍩虹URL
#闃块噷鐭俊鏈嶅姟
aliyun:
sms:
--
Gitblit v1.8.0