From ff3ee157b0d2cce72e3419c65b6eb1a5d53d32e2 Mon Sep 17 00:00:00 2001
From: zhanzhiqin <895896009@qq.com>
Date: 星期四, 04 八月 2022 17:16:26 +0800
Subject: [PATCH] 大气设备

---
 ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereModifiedDataReqInnerFrame.java |  258 ++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 253 insertions(+), 5 deletions(-)

diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereModifiedDataReqInnerFrame.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereModifiedDataReqInnerFrame.java
index 004522b..c37c8a4 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereModifiedDataReqInnerFrame.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/manager/iot/frame/inner/request/AtmosphereModifiedDataReqInnerFrame.java
@@ -5,6 +5,8 @@
 import com.sandu.ximon.admin.manager.iot.rrpc.enums.MQTTConnectTypeEnum;
 import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
 
+import java.math.BigDecimal;
+
 /**
  * 澶ф皵璁惧淇鏁版嵁
  *
@@ -12,81 +14,327 @@
  * @date 2022/7/29 10:32
  */
 public class AtmosphereModifiedDataReqInnerFrame implements IRequestInnerFrame {
-    //TODO
     private String functionCode;
+    private String value;
 
-    public AtmosphereModifiedDataReqInnerFrame(String functionType, Double valueOfReal, Double valueOfStandard) {
+    public AtmosphereModifiedDataReqInnerFrame(String functionType, String valueOfReal, String valueOfStandard) {
+        //浼犳劅鍣ㄦ暟鍊�
+        BigDecimal value1;
+        //鏍囧噯鍊�
+        BigDecimal value2;
+        //淇鍊�
+        Double subtract;
+        //鏁存暟
+        int i;
+        //灏忔暟
+        int y;
+
+        int z;
+
         switch (functionType) {
             //璁剧疆鏁版嵁淇鍊�-娓╁害
             case "娓╁害":
                 functionCode = AtmoFunctionCode.Setting_Data_Correction_temperature.getCode();
+                value1 = new BigDecimal(valueOfReal);
+                value2 = new BigDecimal(valueOfStandard);
+                subtract = value1.subtract(value2).doubleValue();
+
+                i = Integer.valueOf((int) (subtract * 100)) / 100;
+                y = Integer.valueOf((int) (subtract * 100)) % 100;
+
+                if (subtract > 0) {
+                    value = hex10To16(i) + hex10To16(y);
+                } else {
+                    value = hex10To16(-i + 128) + hex10To16(-y);
+                }
                 break;
             //璁剧疆鏁版嵁淇鍊�-婀垮害
             case "婀垮害":
                 functionCode = AtmoFunctionCode.Setting_Data_Correction_humidity.getCode();
+                value1 = new BigDecimal(valueOfReal);
+                value2 = new BigDecimal(valueOfStandard);
+                subtract = value1.subtract(value2).doubleValue();
+
+                i = Integer.valueOf((int) (subtract * 100)) / 100;
+                y = Integer.valueOf((int) (subtract * 100)) % 100;
+
+                if (subtract > 0) {
+                    value = hex10To16(i) + hex10To16(y);
+                } else {
+                    value = hex10To16(-i + 128) + hex10To16(-y);
+                }
                 break;
             //璁剧疆鏁版嵁淇鍊�-椋庨��
             case "椋庨��":
                 functionCode = AtmoFunctionCode.Setting_Data_Correction_windSpeed.getCode();
+                value1 = new BigDecimal(valueOfReal);
+                value2 = new BigDecimal(valueOfStandard);
+                subtract = value1.subtract(value2).doubleValue();
+
+                z = Integer.valueOf((int) (subtract * 10));
+
+                if (subtract > 0) {
+                    value = hex10To16(z);
+                } else {
+                    value = hex10To16(-z + 32768);
+                }
                 break;
             //璁剧疆鏁版嵁淇鍊�-椋庡悜
             case "椋庡悜":
                 functionCode = AtmoFunctionCode.Setting_Data_Correction_windDirection.getCode();
+                //TODO
+                break;
+            //璁剧疆鏁版嵁淇鍊�-椋庡姏
+            case "椋庡姏":
+                functionCode = AtmoFunctionCode.Setting_Data_Correction_windPower.getCode();
+                //TODO
                 break;
             //璁剧疆鏁版嵁淇鍊�-姘斿帇
             case "姘斿帇":
                 functionCode = AtmoFunctionCode.Setting_Data_Correction_airPressure.getCode();
+                value1 = new BigDecimal(valueOfReal);
+                value2 = new BigDecimal(valueOfStandard);
+                subtract = value1.subtract(value2).doubleValue();
+
+                z = Integer.valueOf((int) (subtract * 100));
+
+                if (subtract > 0) {
+                    value = hex10To16(z);
+                } else {
+                    value = hex10To16(-z + 32768);
+                }
                 break;
             //璁剧疆鏁版嵁淇鍊�-鍏夊己
             case "鍏夊己":
                 functionCode = AtmoFunctionCode.Setting_Data_Correction_lightIntensity.getCode();
+                value1 = new BigDecimal(valueOfReal);
+                value2 = new BigDecimal(valueOfStandard);
+                subtract = value1.subtract(value2).doubleValue();
+
+                z = Integer.valueOf((int) (subtract * 100) / 100);
+
+                if (subtract > 0) {
+                    value = hex10To16(z);
+                } else {
+                    value = hex10To16(-z + 32768);
+                }
                 break;
             //璁剧疆鏁版嵁淇鍊�-鍣煶
             case "鍣煶":
                 functionCode = AtmoFunctionCode.Setting_Data_Correction_noise.getCode();
+                value1 = new BigDecimal(valueOfReal);
+                value2 = new BigDecimal(valueOfStandard);
+                subtract = value1.subtract(value2).doubleValue();
+
+                z = Integer.valueOf((int) (subtract * 10));
+
+                if (subtract > 0) {
+                    value = hex10To16(z);
+                } else {
+                    value = hex10To16(-z + 32768);
+                }
                 break;
             //璁剧疆鏁版嵁淇鍊�-PM2.5
             case "PM2.5":
                 functionCode = AtmoFunctionCode.Setting_Data_Correction_PM2_5.getCode();
+                value1 = new BigDecimal(valueOfReal);
+                value2 = new BigDecimal(valueOfStandard);
+                subtract = value1.subtract(value2).doubleValue();
+
+                z = Integer.valueOf((int) (subtract * 100) / 100);
+
+                if (subtract > 0) {
+                    value = hex10To16(z);
+                } else {
+                    value = hex10To16(-z + 32768);
+                }
                 break;
             //璁剧疆鏁版嵁淇鍊�-PM10
             case "PM10":
                 functionCode = AtmoFunctionCode.Setting_Data_Correction_PM10.getCode();
+                value1 = new BigDecimal(valueOfReal);
+                value2 = new BigDecimal(valueOfStandard);
+                subtract = value1.subtract(value2).doubleValue();
+
+                z = Integer.valueOf((int) (subtract * 100) / 100);
+
+                if (subtract > 0) {
+                    value = hex10To16(z);
+                } else {
+                    value = hex10To16(-z + 32768);
+                }
+                break;
+            //璁剧疆鏁版嵁淇鍊�-TSP
+            case "TSP":
+                functionCode = AtmoFunctionCode.Setting_Data_Correction_tsp.getCode();
+                value1 = new BigDecimal(valueOfReal);
+                value2 = new BigDecimal(valueOfStandard);
+                subtract = value1.subtract(value2).doubleValue();
+
+                z = Integer.valueOf((int) (subtract * 100) / 100);
+
+                if (subtract > 0) {
+                    value = hex10To16(z);
+                } else {
+                    value = hex10To16(-z + 32768);
+                }
                 break;
             //璁剧疆鏁版嵁淇鍊�-闆ㄩ噺
             case "闆ㄩ噺":
-                functionCode = AtmoFunctionCode.Setting_Data_Correction_rainfall.getCode();
+                functionCode = AtmoFunctionCode.Setting_Data_Correction_rain.getCode();
+                value1 = new BigDecimal(valueOfReal);
+                value2 = new BigDecimal(valueOfStandard);
+                subtract = value1.subtract(value2).doubleValue();
+
+                z = Integer.valueOf((int) (subtract * 10));
+
+                if (subtract > 0) {
+                    value = hex10To16(z);
+                } else {
+                    value = hex10To16(-z + 32768);
+                }
+                break;
+            //璁剧疆鏁版嵁淇鍊�-闆ㄩ噺
+            case "鐢查啗":
+                functionCode = AtmoFunctionCode.Setting_Data_Correction_ech2o.getCode();
+                value1 = new BigDecimal(valueOfReal);
+                value2 = new BigDecimal(valueOfStandard);
+                subtract = value1.subtract(value2).doubleValue();
+
+                z = Integer.valueOf((int) (subtract * 100) / 100);
+
+                if (subtract > 0) {
+                    value = hex10To16(z);
+                } else {
+                    value = hex10To16(-z + 32768);
+                }
+                break;
+            //璁剧疆鏁版嵁淇鍊�-TVOC
+            case "TVOC":
+                functionCode = AtmoFunctionCode.Setting_Data_Correction_tvoc.getCode();
+                value1 = new BigDecimal(valueOfReal);
+                value2 = new BigDecimal(valueOfStandard);
+                subtract = value1.subtract(value2).doubleValue();
+
+                z = Integer.valueOf((int) (subtract * 100) / 100);
+
+                if (subtract > 0) {
+                    value = hex10To16(z);
+                } else {
+                    value = hex10To16(-z + 32768);
+                }
+                break;
+            //璁剧疆鏁版嵁淇鍊�-eCO2
+            case "浜屾哀鍖栫⒊":
+                functionCode = AtmoFunctionCode.Setting_Data_Correction_eCO2.getCode();
+                value1 = new BigDecimal(valueOfReal);
+                value2 = new BigDecimal(valueOfStandard);
+                subtract = value1.subtract(value2).doubleValue();
+
+                z = Integer.valueOf((int) (subtract * 100) / 100);
+
+                if (subtract > 0) {
+                    value = hex10To16(z);
+                } else {
+                    value = hex10To16(-z + 32768);
+                }
                 break;
             //璁剧疆鏁版嵁淇鍊�-SO2浜屾哀鍖栫~
             case "浜屾哀鍖栫~":
                 functionCode = AtmoFunctionCode.Setting_Data_Correction_SO2.getCode();
+                value1 = new BigDecimal(valueOfReal);
+                value2 = new BigDecimal(valueOfStandard);
+                subtract = value1.subtract(value2).doubleValue();
+
+                z = Integer.valueOf((int) (subtract * 100) / 100);
+
+                if (subtract > 0) {
+                    value = hex10To16(z);
+                } else {
+                    value = hex10To16(-z + 32768);
+                }
                 break;
             //璁剧疆鏁版嵁淇鍊�-NO2浜屾哀鍖栨爱
             case "浜屾哀鍖栨爱":
                 functionCode = AtmoFunctionCode.Setting_Data_Correction_NO2.getCode();
+                value1 = new BigDecimal(valueOfReal);
+                value2 = new BigDecimal(valueOfStandard);
+                subtract = value1.subtract(value2).doubleValue();
+
+                z = Integer.valueOf((int) (subtract * 100) / 100);
+
+                if (subtract > 0) {
+                    value = hex10To16(z);
+                } else {
+                    value = hex10To16(-z + 32768);
+                }
                 break;
             //璁剧疆鏁版嵁淇鍊�-CO涓�姘у寲纰�
             case "涓�姘у寲纰�":
                 functionCode = AtmoFunctionCode.Setting_Data_Correction_CO.getCode();
+                value1 = new BigDecimal(valueOfReal);
+                value2 = new BigDecimal(valueOfStandard);
+                subtract = value1.subtract(value2).doubleValue();
+
+                z = Integer.valueOf((int) (subtract * 100) / 100);
+
+                if (subtract > 0) {
+                    value = hex10To16(z);
+                } else {
+                    value = hex10To16(-z + 32768);
+                }
                 break;
             //璁剧疆鏁版嵁淇鍊�-O3鑷哀
             case "鑷哀":
                 functionCode = AtmoFunctionCode.Setting_Data_Correction_O3.getCode();
+                value1 = new BigDecimal(valueOfReal);
+                value2 = new BigDecimal(valueOfStandard);
+                subtract = value1.subtract(value2).doubleValue();
+
+                z = Integer.valueOf((int) (subtract * 100) / 100);
+
+                if (subtract > 0) {
+                    value = hex10To16(z);
+                } else {
+                    value = hex10To16(-z + 32768);
+                }
                 break;
             //璁剧疆鏁版嵁淇鍊�-F姘熷寲鐗�
             case "姘熷寲鐗�":
                 functionCode = AtmoFunctionCode.Setting_Data_Correction_F.getCode();
+                value1 = new BigDecimal(valueOfReal);
+                value2 = new BigDecimal(valueOfStandard);
+                subtract = value1.subtract(value2).doubleValue();
+
+                z = Integer.valueOf((int) (subtract * 100) / 100);
+
+                if (subtract > 0) {
+                    value = hex10To16(z);
+                } else {
+                    value = hex10To16(-z + 32768);
+                }
                 break;
             default:
-
         }
+
+        System.out.println(value);
     }
 
     @Override
     public String getEncodeFrame() {
         String payloadLength = "0004";
-        String payload = "FFFF";
+        String payload = "FFFF" + value;
         String frame = functionCode + payloadLength + payload;
         return MQTTConnectTypeEnum.SYNCHRONIZATION.getCode() + frame.toUpperCase() + CRC32Utils.getCRC32(frame.toUpperCase());
     }
+
+    /**
+     * 鍗佽繘鍒惰浆鍗佸叚杩涘埗
+     *
+     * @param value
+     * @return
+     */
+    private static String hex10To16(int value) {
+        return String.format("%02X", value);
+    }
 }

--
Gitblit v1.9.3