From 4e76b9737e036c18e8a9e840dc443615ffcec348 Mon Sep 17 00:00:00 2001
From: zhanzhiqin <895896009@qq.com>
Date: 星期四, 20 十月 2022 12:20:18 +0800
Subject: [PATCH] 大气农耕

---
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/A1OrderEnum.java                                    |    4 +
 ximon-admin/src/main/resources/application-local.yml                                                                       |    2 
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/MainBoardDataTransparentReqInnerFrame.java |   49 ++++++++++++++++
 ximon-admin/src/main/java/com/sandu/ximon/admin/controller/MQTTTestController.java                                         |   59 ++++++++++++++++++-
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/BaseInvokeSyncService.java                                |    4 +
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/dto/CommonRequest.java                                    |   20 ++++++
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/util/SupplementUtils.java                                 |   16 +++++
 7 files changed, 149 insertions(+), 5 deletions(-)

diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/MQTTTestController.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/MQTTTestController.java
index dd2929e..f4a8413 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/MQTTTestController.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/MQTTTestController.java
@@ -1,13 +1,22 @@
 package com.sandu.ximon.admin.controller;
 
+import cn.hutool.core.util.HexUtil;
 import com.github.pagehelper.util.StringUtil;
 import com.sandu.common.domain.ResponseVO;
 import com.sandu.common.execption.BusinessException;
 import com.sandu.common.security.annotation.AnonymousAccess;
 import com.sandu.common.util.ResponseUtil;
 import com.sandu.common.util.SpringContextHolder;
+import com.sandu.ximon.admin.manager.iot.frame.A1Frame;
+import com.sandu.ximon.admin.manager.iot.frame.A5Frame;
+import com.sandu.ximon.admin.manager.iot.frame.FrameBuilder;
+import com.sandu.ximon.admin.manager.iot.frame.IRequestFrame;
+import com.sandu.ximon.admin.manager.iot.frame.inner.request.A1TernaryCodeReqInnerFrame;
+import com.sandu.ximon.admin.manager.iot.frame.inner.request.MainBoardDataTransparentReqInnerFrame;
 import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame;
+import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonRequest;
 import com.sandu.ximon.admin.manager.iot.rrpc.dto.InvokeParam;
+import com.sandu.ximon.admin.manager.iot.rrpc.enums.A1OrderEnum;
 import com.sandu.ximon.admin.manager.iot.rrpc.mainboard.MainBoardInvokeSyncService;
 import com.sandu.ximon.admin.param.MQTTTestPrarm;
 import com.sandu.ximon.admin.security.PermissionConfig;
@@ -16,6 +25,11 @@
 import com.sandu.ximon.dao.enums.MenuEnum;
 import lombok.AllArgsConstructor;
 import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -38,7 +52,6 @@
      *
      * @return
      */
-    @AnonymousAccess
     @PostMapping("/sendRRPC")
     public ResponseVO<Object> sendRRPC(@RequestBody @Validated MQTTTestPrarm mqttTestPrarm) {
         /**
@@ -64,9 +77,47 @@
         param.setOperate("1001");
         param.setFrame(mqttTestPrarm.getFrameStr());
         CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC(pole.getDeviceCode(), param);
-        if (commonFrame == null) {
-            throw new BusinessException("璇锋眰澶辫触锛岃閲嶆柊璇锋眰");
+        if (commonFrame == null || !commonFrame.isValidate()) {
+            throw new BusinessException("鍝嶅簲鏁版嵁鏍¢獙澶辫触锛岃閲嶆柊璇锋眰鏁版嵁锛�");
         }
-        return ResponseUtil.success(commonFrame);
+        String value = commonFrame.getConnectType() + commonFrame.getFunctionCode()
+                + commonFrame.getOrderType() + commonFrame.getPayloadLength()
+                + commonFrame.getPayload() + commonFrame.getCrc32();
+        Map map = new LinkedHashMap();
+        map.put("frame", value);
+        return ResponseUtil.success(map);
+    }
+
+    @PostMapping("/transparentFrame")
+    public ResponseVO<Object> transparentFrame(@RequestBody @Validated CommonRequest commonRequest) {
+        boolean isAscii = commonRequest.getAscii().equals(0) ? false : true;
+        Pole pole = SpringContextHolder.getBean(PoleService.class).getById(commonRequest.getPoleID());
+        if (pole == null) {
+            throw new BusinessException("鐏潌涓嶅瓨鍦紒");
+        }
+        if (StringUtil.isEmpty(pole.getDeviceCode())) {
+            throw new BusinessException("鐏潌MAC涓嶈兘涓虹┖锛�");
+        }
+
+        MainBoardDataTransparentReqInnerFrame mainBoardDataTransparentReqInnerFrame = new MainBoardDataTransparentReqInnerFrame(commonRequest.getFrame(), isAscii);
+        A1Frame a1Frame = new A1Frame(A1OrderEnum.TRANSPARENT.getCode(), mainBoardDataTransparentReqInnerFrame);
+        System.out.println("a1Frame:" + a1Frame.getEncodeFrame());
+        CommonFrame commonFrame = MainBoardInvokeSyncService.getInstance().sendRRPC(pole.getDeviceCode(), a1Frame);
+
+        if (null == commonFrame) {
+            throw new BusinessException("涓绘澘鏃犲搷搴�!");
+        }
+        if (commonFrame == null || !commonFrame.isValidate()) {
+            throw new BusinessException("鍝嶅簲鏁版嵁鏍¢獙澶辫触锛岃閲嶆柊璇锋眰鏁版嵁锛�");
+        }
+        String value = commonFrame.getConnectType() + commonFrame.getFunctionCode()
+                + commonFrame.getOrderType() + commonFrame.getPayloadLength()
+                + commonFrame.getPayload() + commonFrame.getCrc32();
+        Map map = new LinkedHashMap();
+        map.put("frame", value);
+        map.put("data", HexUtil.decodeHexStr(commonFrame.getPayload()));
+        System.out.println(HexUtil.decodeHexStr(commonFrame.getPayload()));
+
+        return ResponseUtil.success(map);
     }
 }
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/MainBoardDataTransparentReqInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/MainBoardDataTransparentReqInnerFrame.java
new file mode 100644
index 0000000..1a21be5
--- /dev/null
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/MainBoardDataTransparentReqInnerFrame.java
@@ -0,0 +1,49 @@
+package com.sandu.ximon.admin.manager.iot.frame.inner.request;
+
+import cn.hutool.core.util.HexUtil;
+import com.sandu.ximon.admin.manager.iot.frame.inner.IRequestInnerFrame;
+import com.sandu.ximon.admin.manager.iot.rrpc.enums.FunctionCodeEnum;
+import com.sandu.ximon.admin.manager.iot.rrpc.enums.MQTTConnectTypeEnum;
+import com.sandu.ximon.admin.manager.iot.rrpc.enums.RemoteUpdateEnum;
+import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
+import com.sandu.ximon.admin.manager.iot.rrpc.util.SupplementUtils;
+import com.sandu.ximon.admin.utils.HexUtils;
+
+/**
+ * 涓绘澘閫忎紶鎸囦护
+ *
+ * @author ZZQ
+ * @date 2022/10/20 10:00
+ */
+public class MainBoardDataTransparentReqInnerFrame implements IRequestInnerFrame {
+    private static final String REPLACE_CHAR = "\\r\\n";
+    private static final String REPLACE_HEX_CHAR = "0D0A";
+    private static final boolean CHECK_REPLACE = true;
+
+    private String payload;
+
+
+    public MainBoardDataTransparentReqInnerFrame(String payload, boolean isAscii) {
+        if (CHECK_REPLACE) {
+            String subStr = payload.substring(payload.length() - 4);
+            if (subStr.equals(REPLACE_CHAR)) {
+                payload = payload.substring(0, payload.length() - 4);
+            }
+        }
+        System.out.println(payload);
+        if (isAscii) {
+            this.payload = SupplementUtils.stringToHexString(payload);
+        }
+        if (CHECK_REPLACE) {
+            this.payload = this.payload + REPLACE_HEX_CHAR;
+        }
+        if (this.payload.length() % 2 != 0) {
+            this.payload = "0" + this.payload;
+        }
+    }
+
+    @Override
+    public String getEncodeFrame() {
+        return payload;
+    }
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/BaseInvokeSyncService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/BaseInvokeSyncService.java
index 227d63f..6e93fc5 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/BaseInvokeSyncService.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/BaseInvokeSyncService.java
@@ -95,6 +95,10 @@
         return FrameUtils.transformMessageToFrame(result);
     }
 
+
+
+
+
     /**
      * 鍩虹閫氫俊鍚屾璋冪敤
      *
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/dto/CommonRequest.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/dto/CommonRequest.java
new file mode 100644
index 0000000..75e6a45
--- /dev/null
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/dto/CommonRequest.java
@@ -0,0 +1,20 @@
+package com.sandu.ximon.admin.manager.iot.rrpc.dto;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+@Data
+public class CommonRequest {
+
+    @NotNull(message = "鐏潌ID涓嶈兘涓虹┖")
+    private Long poleID;
+
+    @NotEmpty(message = "frame涓嶈兘涓虹┖")
+    private String frame;
+
+    @NotNull(message = "ascii涓嶈兘涓虹┖")
+    private Integer ascii;
+
+}
\ No newline at end of file
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/A1OrderEnum.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/A1OrderEnum.java
index 5b95652..279211e 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/A1OrderEnum.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/enums/A1OrderEnum.java
@@ -54,6 +54,10 @@
      * 璁剧疆闃块噷浜戜笁鍏冪爜DeviceSecret
      */
     REQUEST_SET_DEVICE_SECRET("0C"),
+    /**
+     * 閫忎紶
+     */
+    TRANSPARENT("0D"),
 
     //-------------------------------------------- 涓绘澘涓婃姤----------------------------------------------------//
     /**
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/util/SupplementUtils.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/util/SupplementUtils.java
index ee6b30e..3bfec93 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/util/SupplementUtils.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/rrpc/util/SupplementUtils.java
@@ -69,6 +69,22 @@
     }
 
     /**
+     * 瀛楃涓茶浆鎹负16杩涘埗瀛楃涓�
+     *
+     * @param s
+     * @return
+     */
+    public static String stringToHexString(String s) {
+        String str = "";
+        for (int i = 0; i < s.length(); i++) {
+            int ch = s.charAt(i);
+            String s4 = Integer.toHexString(ch);
+            str = str + s4;
+        }
+        return str;
+    }
+
+    /**
      * char杞琤yte
      */
     private static byte charToByte(char c) {
diff --git a/ximon-admin/src/main/resources/application-local.yml b/ximon-admin/src/main/resources/application-local.yml
index 53d67a2..6c354d1 100644
--- a/ximon-admin/src/main/resources/application-local.yml
+++ b/ximon-admin/src/main/resources/application-local.yml
@@ -39,7 +39,7 @@
     enable: true
 
 listenter:
-  isOpen: true
+  isOpen: false
 
 minio:
   endpoint: 47.106.172.9

--
Gitblit v1.9.3