From 89eff0cecfd9fd0efd0999189bd039a679f750f9 Mon Sep 17 00:00:00 2001
From: zhangjian <zhangjianrock@163.com>
Date: 星期二, 11 七月 2023 11:34:27 +0800
Subject: [PATCH] 无人机转发接口反射调用

---
 ard-work/src/main/java/com/ruoyi/device/uav/service/IUavService.java         |    9 +++
 ard-work/src/main/java/com/ruoyi/utils/forest/UavClient.java                 |    3 +
 ard-work/src/main/java/com/ruoyi/device/uav/controller/ArdUavController.java |   26 +++++---
 ard-work/src/main/java/com/ruoyi/device/uav/service/UavService.java          |  115 ++++++++++++++++++++++++++++++++++++++
 4 files changed, 143 insertions(+), 10 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/device/uav/controller/ArdUavController.java b/ard-work/src/main/java/com/ruoyi/device/uav/controller/ArdUavController.java
index cf246b5..feb37e3 100644
--- a/ard-work/src/main/java/com/ruoyi/device/uav/controller/ArdUavController.java
+++ b/ard-work/src/main/java/com/ruoyi/device/uav/controller/ArdUavController.java
@@ -25,8 +25,7 @@
 
 import org.apache.commons.codec.binary.Base64;
 
-import static org.springframework.http.HttpMethod.GET;
-import static org.springframework.http.HttpMethod.POST;
+import static org.springframework.http.HttpMethod.*;
 
 /**
  * 鐩告満璁惧Controller
@@ -39,9 +38,9 @@
 @RequestMapping("/device/uav")
 @Api(tags = "鏃犱汉鏈哄閮ㄦ帴鍙�")
 public class ArdUavController extends BaseController {
-    public static final String USERNAME = "ardbailu";
-    public static final String PASSWORD = "ardkj12345";
-    public static final String SALT = "0123456789012345";
+    public static final String USERNAME = "ardbailu";//鐢ㄦ埛鍚�
+    public static final String PASSWORD = "ardkj12345";//瀵嗙爜
+    public static final String SALT = "0123456789012345";//鐩�
 
     //token 鐧婚檰鍚庢瘡娆¤姹�,鍦╤eader涓惡甯�
     private String token;//鐧诲綍鎴愬姛杩斿洖鐨則oken
@@ -81,6 +80,18 @@
 
     }
 
+    @PostMapping("/")
+    @ApiOperation("鏃犱汉鏈簆ost鎺ュ彛")
+    public Object post(@RequestParam String url, @RequestParam String data) {
+        return doUavRequest(POST, url, data);
+    }
+
+    @DeleteMapping("/")
+    @ApiOperation("鏃犱汉鏈篸elete鎺ュ彛")
+    public Object delete(@RequestParam String url, @RequestParam String data) {
+        return doUavRequest(DELETE, url, data);
+    }
+
     @Nullable
     private String doUavRequest(HttpMethod method, String url, String data) {
         String res = null;
@@ -113,11 +124,6 @@
         return res;
     }
 
-    @PostMapping("/")
-    @ApiOperation("鏃犱汉鏈簆ost鎺ュ彛")
-    public Object post(@RequestParam String url, @RequestParam String data) {
-        return doUavRequest(POST, url, data);
-    }
 
     public String Encrypt(String sSrc, String sKey) {
         if (sKey == null) {
diff --git a/ard-work/src/main/java/com/ruoyi/device/uav/service/IUavService.java b/ard-work/src/main/java/com/ruoyi/device/uav/service/IUavService.java
new file mode 100644
index 0000000..a9e8893
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/uav/service/IUavService.java
@@ -0,0 +1,9 @@
+package com.ruoyi.device.uav.service;
+
+import org.springframework.http.HttpMethod;
+
+public interface IUavService {
+    String doUavRequest(HttpMethod method, String url, String data);
+
+    void login();
+}
diff --git a/ard-work/src/main/java/com/ruoyi/device/uav/service/UavService.java b/ard-work/src/main/java/com/ruoyi/device/uav/service/UavService.java
new file mode 100644
index 0000000..1950bfd
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/device/uav/service/UavService.java
@@ -0,0 +1,115 @@
+package com.ruoyi.device.uav.service;
+
+import com.dtflys.forest.exceptions.ForestNetworkException;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ruoyi.utils.forest.UavClient;
+import org.apache.commons.codec.binary.Base64;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpMethod;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Map;
+
+@Service
+public class UavService implements IUavService {
+    public static final String USERNAME = "ardbailu";//鐢ㄦ埛鍚�
+    public static final String PASSWORD = "ardkj12345";//瀵嗙爜
+    public static final String SALT = "0123456789012345";//鐩�
+
+    //token 鐧婚檰鍚庢瘡娆¤姹�,鍦╤eader涓惡甯�
+    private String token;//鐧诲綍鎴愬姛杩斿洖鐨則oken
+    private ObjectMapper om = new ObjectMapper();
+    @Autowired
+    private UavClient uavClient;
+
+    @PostConstruct
+    public void created() {
+        this.login();
+    }
+
+    @Override
+    public String doUavRequest(HttpMethod method, String url, String data) {
+        String res = null;
+        Method requestMethod = null;
+        //鑾峰彇method
+        try {
+            requestMethod = UavClient.class.getMethod(method.name(), String.class, String.class, String.class);
+        } catch (NoSuchMethodException e) {
+            e.printStackTrace();
+        }
+        //鎵цmethod
+        try {
+            res = (String) requestMethod.invoke(this.uavClient, url, this.token, data);
+        } catch (InvocationTargetException e) {
+            ForestNetworkException fe = (ForestNetworkException) e.getCause();
+            if (fe.getStatusCode() == 401) {//token澶辨晥,閲嶆柊鐧诲綍
+                this.login();
+            }
+            try {//鍐嶆璋冪敤鎺ュ彛
+                res = (String) requestMethod.invoke(this.uavClient, url, this.token, data);
+            } catch (IllegalAccessException ex) {
+                throw new RuntimeException(ex);
+            } catch (InvocationTargetException ex) {
+                throw new RuntimeException(ex);
+            }
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        }
+
+        return res;
+    }
+
+    @Override
+    public void login() {
+        String codedPassword = this.Encrypt(PASSWORD, SALT);
+        String body = "{\"username\":\"" + USERNAME + "\",\"password\":\"" + codedPassword + "\"}";
+        try {
+            String res = uavClient.POST("login", null, body);
+            Map resMap = om.readValue(res, Map.class);
+            Map data = (Map) resMap.get("data");
+            if (data != null) {
+                this.token = (String) data.get("access_token");
+            }
+        } catch (ForestNetworkException e) {
+            e.printStackTrace();
+        } catch (JsonMappingException e) {
+            throw new RuntimeException(e);
+        } catch (JsonProcessingException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+
+    public String Encrypt(String sSrc, String sKey) {
+        if (sKey == null) {
+            System.out.print("Key涓虹┖null");
+            return null;
+        }
+        // 鍒ゆ柇Key鏄惁涓�16浣�
+        if (sKey.length() != 16) {
+            System.out.print("Key闀垮害涓嶆槸16浣�");
+            return null;
+        }
+        byte[] encrypted = null;
+        try {
+            byte[] raw = sKey.getBytes("utf-8");
+            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
+            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//"绠楁硶/妯″紡/琛ョ爜鏂瑰紡"
+            cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
+            encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
+        } catch (Exception e) {
+            e.printStackTrace();
+            ;
+        }
+        return new Base64().encodeToString(encrypted);//姝ゅ浣跨敤BASE64鍋氳浆鐮佸姛鑳斤紝鍚屾椂鑳借捣鍒�2娆″姞瀵嗙殑浣滅敤銆�
+    }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/utils/forest/UavClient.java b/ard-work/src/main/java/com/ruoyi/utils/forest/UavClient.java
index b7d86d4..c90ce14 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/forest/UavClient.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/forest/UavClient.java
@@ -22,6 +22,9 @@
     @UavAuth(token = "${token}")
     @Post(IP + "${url}")
     String POST(@DataVariable("url") String url, @DataVariable("token") String token, @JSONBody String body);
+    @UavAuth(token = "${token}")
+    @Post(IP + "${url}")
+    String DELETE(@DataVariable("url") String url, @DataVariable("token") String token, @JSONBody String body);
 
 
 }

--
Gitblit v1.9.3