From 39e8bb722006c55fb986a7394bfb4747d482b8c4 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Tue, 14 Oct 2025 14:28:48 +0800
Subject: [PATCH] 修改forest动态服务请求

---
 ard-work/src/main/java/com/ard/work/component/forest/TokenInterceptor.java                      |    4 +-
 ard-work/src/main/java/com/ard/work/component/forest/MyAddressSource.java                       |   24 ++++++++++++
 ard-work/src/main/java/com/ard/work/component/forest/TyClient.java                              |   25 ++++++------
 ard-work/src/main/java/com/ard/work/component/websocket/interceptor/TyHandshakeInterceptor.java |    6 ---
 ard-work/src/main/java/com/ard/work/component/websocket/handler/TyMessageHandler.java           |    2 
 ard-work/src/main/java/com/ard/work/service/impl/ArdServerServiceImpl.java                      |   18 --------
 ard-work/src/main/java/com/ard/work/service/impl/TyServiceImpl.java                             |   25 +++++-------
 ard-work/src/main/java/com/ard/work/service/IArdServerService.java                              |    5 --
 8 files changed, 52 insertions(+), 57 deletions(-)

diff --git a/ard-work/src/main/java/com/ard/work/component/forest/MyAddressSource.java b/ard-work/src/main/java/com/ard/work/component/forest/MyAddressSource.java
new file mode 100644
index 0000000..c707967
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/work/component/forest/MyAddressSource.java
@@ -0,0 +1,24 @@
+package com.ard.work.component.forest;
+
+import com.ard.work.domain.entity.ArdServerInfo;
+import com.ard.work.service.IArdServerService;
+import com.dtflys.forest.callback.AddressSource;
+import com.dtflys.forest.http.ForestAddress;
+import com.dtflys.forest.http.ForestRequest;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+@Component
+public class MyAddressSource implements AddressSource {
+
+    @Resource
+    private IArdServerService ardServerService;
+    @Override
+    public ForestAddress getAddress(ForestRequest request) {
+        String serverKey = (String) request.getVariableValue("serverId");
+        ArdServerInfo serverInfo = ardServerService.selectArdServerManagementById(serverKey);
+        // 返回 Forest 地址对象
+        return new ForestAddress(serverInfo.getHost(), serverInfo.getHttpPort());
+    }
+}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/work/component/forest/TokenInterceptor.java b/ard-work/src/main/java/com/ard/work/component/forest/TokenInterceptor.java
index e0d89c4..006fa86 100644
--- a/ard-work/src/main/java/com/ard/work/component/forest/TokenInterceptor.java
+++ b/ard-work/src/main/java/com/ard/work/component/forest/TokenInterceptor.java
@@ -22,8 +22,8 @@
     @Override
     public boolean beforeExecute(ForestRequest req) {
         log.debug("invoke Simple beforeExecute");
-        String baseUrl = (String) req.getVariableValue("baseUrl");
-        AccessTokenReceiver accessToken = ardServerService.getAccessTokenByBaseUrl(baseUrl);
+        String serverId = (String) req.getVariableValue("serverId");
+        AccessTokenReceiver accessToken = ardServerService.getAccessToken(serverId);
         req.addHeader("x-cid", accessToken.getCompanyId());
         req.addHeader("x-token", accessToken.getAccessToken());
         return true;  // 继续执行请求返回true
diff --git a/ard-work/src/main/java/com/ard/work/component/forest/TyClient.java b/ard-work/src/main/java/com/ard/work/component/forest/TyClient.java
index cc39ed4..a5f3c23 100644
--- a/ard-work/src/main/java/com/ard/work/component/forest/TyClient.java
+++ b/ard-work/src/main/java/com/ard/work/component/forest/TyClient.java
@@ -15,43 +15,44 @@
  * @author liusuyi
  * @date 2024年10月21日14:45
  **/
+@Address(source = MyAddressSource.class)
 public interface TyClient {
     /**
      * 获取云盒TOKEN
      */
-    @Post("{baseUrl}" + TyConst.POST_TOKEN)
-    TyHttpCommonReceiver<AccessTokenReceiver> getToken(@Var("baseUrl") String baseUrl, @JSONBody TokenDTO tokenDTO);
+    @Post(TyConst.POST_TOKEN)
+    TyHttpCommonReceiver<AccessTokenReceiver> getToken(@Var("serverId") String serverId, @JSONBody TokenDTO tokenDTO);
 
     /**
      * 获取云盒列表
      */
-    @Get(value = "{baseUrl}" + TyConst.GET_BOX_LIST, interceptor = TokenInterceptor.class)
-    TyHttpCommonReceiver<List<BoxInfoReceiver>> getBoxList(@Var("baseUrl") String baseUrl);
+    @Get(value = TyConst.GET_BOX_LIST, interceptor = TokenInterceptor.class)
+    TyHttpCommonReceiver<List<BoxInfoReceiver>> getBoxList(@Var("serverId") String serverId);
 
     /**
      * 获取直播地址
      */
-    @Get(value = "{baseUrl}" + TyConst.GET_BOX_LIVE_URL, interceptor = TokenInterceptor.class)
-    TyHttpCommonReceiver<BoxStreamUrlReceiver> getBoxLiveUrl(@Var("baseUrl") String baseUrl,
+    @Get(value = TyConst.GET_BOX_LIVE_URL, interceptor = TokenInterceptor.class)
+    TyHttpCommonReceiver<BoxStreamUrlReceiver> getBoxLiveUrl(@Var("serverId") String serverId,
                                                              @Var("boxSn") String boxSn);
 
     /**
      * 获取飞行历史
      */
-    @Post(value = "{baseUrl}" + TyConst.POST_BOX_HISTORY, interceptor = TokenInterceptor.class)
-    TyHttpCommonReceiver<List<BoxHistoryReceiver>> getBoxHistory(@Var("baseUrl") String baseUrl,
+    @Post(value = TyConst.POST_BOX_HISTORY, interceptor = TokenInterceptor.class)
+    TyHttpCommonReceiver<List<BoxHistoryReceiver>> getBoxHistory(@Var("serverId") String serverId,
                                                                  @JSONBody BoxHistoryDTO boxHistoryDTO);
 
     /**
      * 获取任务照片
      */
-    @Post(value = "{baseUrl}" + TyConst.POST_BOX_PHOTOS, interceptor = TokenInterceptor.class)
-    TyHttpCommonReceiver<List<BoxPhotosReceiver>> getBoxPhotos(@Var("baseUrl") String baseUrl,
+    @Post(value = TyConst.POST_BOX_PHOTOS, interceptor = TokenInterceptor.class)
+    TyHttpCommonReceiver<List<BoxPhotosReceiver>> getBoxPhotos(@Var("serverId") String serverId,
                                                                @JSONBody BoxPhotosDTO boxPhotosDTO);
 
     /**
      * 修改云盒设置
      */
-    @Post(value = "{baseUrl}" + TyConst.POST_BOX_UPDATE, interceptor = TokenInterceptor.class)
-    TyHttpCommonReceiver<?> updateBoxSettings(@Var("baseUrl") String baseUrl, @JSONBody BoxSettingsDTO boxSettingsDTO);
+    @Post(value = TyConst.POST_BOX_UPDATE, interceptor = TokenInterceptor.class)
+    TyHttpCommonReceiver<?> updateBoxSettings(@Var("serverId") String serverId, @JSONBody BoxSettingsDTO boxSettingsDTO);
 }
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/work/component/websocket/handler/TyMessageHandler.java b/ard-work/src/main/java/com/ard/work/component/websocket/handler/TyMessageHandler.java
index f8c2d81..6adfc48 100644
--- a/ard-work/src/main/java/com/ard/work/component/websocket/handler/TyMessageHandler.java
+++ b/ard-work/src/main/java/com/ard/work/component/websocket/handler/TyMessageHandler.java
@@ -45,7 +45,7 @@
             MessageType messageType = MessageType.fromString(baseMessage.getType());
             switch (messageType) {
                 case STREAM:
-
+                    
                     break;
                 case STATE:
                     handleStateMessage(payload, userId);
diff --git a/ard-work/src/main/java/com/ard/work/component/websocket/interceptor/TyHandshakeInterceptor.java b/ard-work/src/main/java/com/ard/work/component/websocket/interceptor/TyHandshakeInterceptor.java
index ea42faa..c857f44 100644
--- a/ard-work/src/main/java/com/ard/work/component/websocket/interceptor/TyHandshakeInterceptor.java
+++ b/ard-work/src/main/java/com/ard/work/component/websocket/interceptor/TyHandshakeInterceptor.java
@@ -19,12 +19,6 @@
             String userId = segments[segments.length - 1];
             attributes.put("userId", userId);
         }
-        //从header中获取userId
-//        String userId = request.getHeaders().getFirst("userId");
-//        if (userId != null)
-//        {
-//            attributes.put("userId", userId);
-//        }
         return true;
     }
 
diff --git a/ard-work/src/main/java/com/ard/work/service/IArdServerService.java b/ard-work/src/main/java/com/ard/work/service/IArdServerService.java
index bfd0108..b77619e 100644
--- a/ard-work/src/main/java/com/ard/work/service/IArdServerService.java
+++ b/ard-work/src/main/java/com/ard/work/service/IArdServerService.java
@@ -64,8 +64,5 @@
      * 根据 id 获取 token
      */
     public AccessTokenReceiver getAccessToken(String id);
-    /**
-     * 根据 baseUrl 获取 token(给拦截器使用)
-     */
-    public AccessTokenReceiver getAccessTokenByBaseUrl(String baseUrl);
+
 }
diff --git a/ard-work/src/main/java/com/ard/work/service/impl/ArdServerServiceImpl.java b/ard-work/src/main/java/com/ard/work/service/impl/ArdServerServiceImpl.java
index beb5cf0..a86bdeb 100644
--- a/ard-work/src/main/java/com/ard/work/service/impl/ArdServerServiceImpl.java
+++ b/ard-work/src/main/java/com/ard/work/service/impl/ArdServerServiceImpl.java
@@ -114,8 +114,7 @@
                 .timeStamp(timeStamp)
                 .build();
         try {
-            String baseUrl = "http://" + serverInfo.getHost() + ":" + serverInfo.getHttpPort();
-            TyHttpCommonReceiver<AccessTokenReceiver> getTokenRes = tyClient.getToken(baseUrl, gtd);
+            TyHttpCommonReceiver<AccessTokenReceiver> getTokenRes = tyClient.getToken(id, gtd);
             accessToken = getTokenRes.getContent();
         } catch (Exception e) {
             log.error("获取token失败:{}", e.getMessage());
@@ -133,19 +132,4 @@
         return new Date().getTime();
     }
 
-    /**
-     * 根据 baseUrl 获取 服务器http接口token(给拦截器使用)
-     */
-    @Override
-    public AccessTokenReceiver getAccessTokenByBaseUrl(String baseUrl) {
-        // 找到对应的 serverId
-        List<ArdServerInfo> servers = selectArdServerManagementList(new ArdServerInfo());
-        for (ArdServerInfo server : servers) {
-            String _baseUrl = "http://" + server.getHost() + ":" + server.getHttpPort();
-            if (_baseUrl.equals(baseUrl)) {
-                return getAccessToken(server.getId());
-            }
-        }
-        return null;
-    }
 }
diff --git a/ard-work/src/main/java/com/ard/work/service/impl/TyServiceImpl.java b/ard-work/src/main/java/com/ard/work/service/impl/TyServiceImpl.java
index e54d009..cc586d0 100644
--- a/ard-work/src/main/java/com/ard/work/service/impl/TyServiceImpl.java
+++ b/ard-work/src/main/java/com/ard/work/service/impl/TyServiceImpl.java
@@ -113,8 +113,7 @@
     @Override
     public BoxStreamUrlReceiver getBoxLiveUrl(String boxSn) {
         ArdDroneInfo ardDroneInfo = ardDroneService.selectArdDroneByboxSn(boxSn);
-        String baseUrl="http://"+ardDroneInfo.getArdServerInfo().getHost()+":"+ardDroneInfo.getArdServerInfo().getHttpPort();
-        TyHttpCommonReceiver<BoxStreamUrlReceiver> boxLiveUrl = tyClient.getBoxLiveUrl(baseUrl,boxSn);
+        TyHttpCommonReceiver<BoxStreamUrlReceiver> boxLiveUrl = tyClient.getBoxLiveUrl(ardDroneInfo.getServerInfoId(),boxSn);
         return boxLiveUrl.getContent();
     }
 
@@ -126,8 +125,8 @@
     @Override
     public List<BoxHistoryReceiver> getBoxHistory(BoxHistoryDTO boxHistoryDTO) {
         ArdDroneInfo ardDroneInfo = ardDroneService.selectArdDroneByboxSn(boxHistoryDTO.getBoxSn());
-        String baseUrl="http://"+ardDroneInfo.getArdServerInfo().getHost()+":"+ardDroneInfo.getArdServerInfo().getHttpPort();
-        TyHttpCommonReceiver<List<BoxHistoryReceiver>> boxHistory = tyClient.getBoxHistory(baseUrl,boxHistoryDTO);
+        TyHttpCommonReceiver<List<BoxHistoryReceiver>> boxHistory = tyClient.getBoxHistory(ardDroneInfo.getServerInfoId(),
+                boxHistoryDTO);
         return boxHistory.getContent();
     }
 
@@ -139,8 +138,7 @@
     @Override
     public List<BoxPhotosReceiver> getBoxPhotos(BoxPhotosDTO boxPhotosDTO) {
         ArdDroneInfo ardDroneInfo = ardDroneService.selectArdDroneByboxSn(boxPhotosDTO.getBoxSn());
-        String baseUrl="http://"+ardDroneInfo.getArdServerInfo().getHost()+":"+ardDroneInfo.getArdServerInfo().getHttpPort();
-        TyHttpCommonReceiver<List<BoxPhotosReceiver>> boxPhotos = tyClient.getBoxPhotos(baseUrl,boxPhotosDTO);
+        TyHttpCommonReceiver<List<BoxPhotosReceiver>> boxPhotos = tyClient.getBoxPhotos(ardDroneInfo.getServerInfoId(),boxPhotosDTO);
         return boxPhotos.getContent();
     }
 
@@ -150,8 +148,7 @@
     @Override
     public Boolean updateBoxSettings(BoxSettingsDTO boxSettingsDTO) {
         ArdDroneInfo ardDroneInfo = ardDroneService.selectArdDroneByboxSn(boxSettingsDTO.getBoxSn());
-        String baseUrl="http://"+ardDroneInfo.getArdServerInfo().getHost()+":"+ardDroneInfo.getArdServerInfo().getHttpPort();
-        TyHttpCommonReceiver<?> result = tyClient.updateBoxSettings(baseUrl,boxSettingsDTO);
+        TyHttpCommonReceiver<?> result = tyClient.updateBoxSettings(ardDroneInfo.getServerInfoId(),boxSettingsDTO);
         return result.getState() == 1;
     }
 
@@ -845,14 +842,12 @@
      */
     @Override
     public List<BoxInfoReceiver> getBoxSnToList(String id) {
-        ArdServerInfo ardServerInfos = ardServerService.selectArdServerManagementById(id);
-        String baseUrl = "http://" + ardServerInfos.getHost() + ":" + ardServerInfos.getHttpPort();
         List<BoxInfoReceiver> lisbox = new ArrayList<>();
         try {
-            lisbox = tyClient.getBoxList(baseUrl).getContent();
+            lisbox = tyClient.getBoxList(id).getContent();
             return lisbox;
         } catch (Exception e) {
-            log.error("获取云盒列表失败: {}", baseUrl, e);
+            log.error("获取云盒列表失败: {}", id, e);
             return lisbox;
         }
     }
@@ -860,12 +855,12 @@
     private List<BoxInfoReceiver> getBoxList(List<ArdServerInfo> ls) {
         return ls.stream()
                 .flatMap(ardServerInfo -> {
-                    String baseUrl = "http://" + ardServerInfo.getHost() + ":" + ardServerInfo.getHttpPort();
+
                     try {
-                        List<BoxInfoReceiver> boxes = tyClient.getBoxList(baseUrl).getContent();
+                        List<BoxInfoReceiver> boxes = tyClient.getBoxList(ardServerInfo.getId()).getContent();
                         return Optional.ofNullable(boxes).orElse(Collections.emptyList()).stream();
                     } catch (Exception e) {
-                        log.error("获取云盒列表失败: {}", baseUrl, e);
+                        log.error("获取云盒列表失败: {}", ardServerInfo.getId(), e);
                         return Stream.empty();
                     }
                 })

--
Gitblit v1.9.3