From 9cb298004c7ca4c75ad5faf0234531aa21c99c5c Mon Sep 17 00:00:00 2001
From: kaiyu <404897439@qq.com>
Date: Mon, 05 Jul 2021 14:23:41 +0800
Subject: [PATCH] screen-manage                     实时数据界面单位转换以及code转换

---
 screen-api/src/main/java/com/moral/api/config/websocket/WebSocketConfig.java  |    9 ++++
 screen-api/src/main/java/com/moral/api/websocket/SingleDeviceServer.java      |   11 +++++
 screen-common/src/main/java/com/moral/util/UnitConvertUtils.java              |   44 ++++++++++++++++++++++
 screen-api/src/main/java/com/moral/api/kafka/consumer/SecondDataConsumer.java |   25 +++++++++++-
 4 files changed, 87 insertions(+), 2 deletions(-)

diff --git a/screen-api/src/main/java/com/moral/api/config/websocket/WebSocketConfig.java b/screen-api/src/main/java/com/moral/api/config/websocket/WebSocketConfig.java
index c4f6e0a..8e6393b 100644
--- a/screen-api/src/main/java/com/moral/api/config/websocket/WebSocketConfig.java
+++ b/screen-api/src/main/java/com/moral/api/config/websocket/WebSocketConfig.java
@@ -1,7 +1,11 @@
 package com.moral.api.config.websocket;
 
+import com.moral.api.websocket.SingleDeviceServer;
+import com.moral.constant.RedisConstants;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.web.socket.server.standard.ServerEndpointExporter;
 
 /**
@@ -18,4 +22,9 @@
     public ServerEndpointExporter serverEndpointExporter(){
         return new ServerEndpointExporter();
     }
+
+    @Autowired
+    public void setMessageService(RedisTemplate redisTemplate){
+        SingleDeviceServer.redisTemplate = redisTemplate;
+    }
 }
diff --git a/screen-api/src/main/java/com/moral/api/kafka/consumer/SecondDataConsumer.java b/screen-api/src/main/java/com/moral/api/kafka/consumer/SecondDataConsumer.java
index b6d2030..f804783 100644
--- a/screen-api/src/main/java/com/moral/api/kafka/consumer/SecondDataConsumer.java
+++ b/screen-api/src/main/java/com/moral/api/kafka/consumer/SecondDataConsumer.java
@@ -1,6 +1,8 @@
 package com.moral.api.kafka.consumer;
 
 import com.alibaba.fastjson.JSON;
+import com.moral.api.entity.Device;
+import com.moral.api.entity.Sensor;
 import com.moral.api.websocket.SingleDeviceServer;
 import org.apache.kafka.clients.consumer.Consumer;
 import org.apache.kafka.clients.consumer.ConsumerRecord;
@@ -9,6 +11,8 @@
 import org.springframework.kafka.listener.ConsumerSeekAware;
 import org.springframework.stereotype.Component;
 
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.CopyOnWriteArraySet;
 
@@ -30,9 +34,26 @@
         CopyOnWriteArraySet<SingleDeviceServer> sockets = SingleDeviceServer.sockets;
         for (SingleDeviceServer socket : sockets) {
             //���������������������������socket
-            socket.sendMessage(message.toString());
+            //������������������
+            String mac = socket.getMac();
+            Map<String, Device> devicesInfo = socket.getDevicesInfo();
+            Device device = devicesInfo.get(mac);
+            //������������������������
+            Map<String,String> resultMessgae = new HashMap<>();
+            //������������
+            List<Sensor> sensors = device.getVersion().getSensors();//������������������������������
+            for (Sensor sensor : sensors) {
+                String code = sensor.getCode();
+                String showUnit = sensor.getShowUnit();
+                //������������
+                //������������
+                String value = message.get(code);
+                value+=showUnit;
+                resultMessgae.put(sensor.getName(),value);
+            }
+            resultMessgae.put("DataTime",message.get("DataTime"));
+            socket.sendMessage(JSON.toJSONString(resultMessgae));
         }
-       // System.out.println(message);
     }
 
     @Override
diff --git a/screen-api/src/main/java/com/moral/api/websocket/SingleDeviceServer.java b/screen-api/src/main/java/com/moral/api/websocket/SingleDeviceServer.java
index 107357d..7419fbf 100644
--- a/screen-api/src/main/java/com/moral/api/websocket/SingleDeviceServer.java
+++ b/screen-api/src/main/java/com/moral/api/websocket/SingleDeviceServer.java
@@ -1,11 +1,18 @@
 package com.moral.api.websocket;
 
+import com.moral.api.entity.Device;
+import com.moral.api.entity.Sensor;
+import com.moral.constant.RedisConstants;
+import lombok.Data;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 import org.springframework.web.bind.annotation.PathVariable;
 
 import javax.websocket.*;
 import javax.websocket.server.PathParam;
 import javax.websocket.server.ServerEndpoint;
+import java.util.List;
+import java.util.Map;
 import java.util.concurrent.CopyOnWriteArraySet;
 
 /**
@@ -17,6 +24,7 @@
  **/
 @ServerEndpoint("/singleDevice/{mac}")
 @Component
+@Data
 public class SingleDeviceServer {
 
     //���������������������������������server������
@@ -26,12 +34,15 @@
 
     private String mac;
 
+    public static RedisTemplate redisTemplate;
 
+    private  Map<String,Device> devicesInfo;
 
     @OnOpen
     public void onOpen(Session session, @PathParam("mac") String mac) throws Exception {
         this.session = session;
         this.mac = mac;
+        this.devicesInfo = redisTemplate.opsForHash().entries(RedisConstants.DEVICE_INFO);
         sockets.add(this);
         System.out.println(mac);
     }
diff --git a/screen-common/src/main/java/com/moral/util/UnitConvertUtils.java b/screen-common/src/main/java/com/moral/util/UnitConvertUtils.java
new file mode 100644
index 0000000..e86291d
--- /dev/null
+++ b/screen-common/src/main/java/com/moral/util/UnitConvertUtils.java
@@ -0,0 +1,44 @@
+package com.moral.util;
+
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
+import java.math.BigDecimal;
+
+/**
+ * @ClassName UnitConvertUtils
+ * @Description TODO
+ * @Author ���������
+ * @Date 2021/7/5 9:00
+ * @Version TODO
+ **/
+public class UnitConvertUtils {
+
+    /*
+    * ������������������������
+    * */
+    public  static Integer num = 3;
+
+
+    /**
+    * @Description: value���������������������format���������
+            * @Param: [value, format]
+            * @return: java.lang.Double
+            * @Author: ���������
+            * @Date: 2021/7/5
+            */
+    public static String calculate(String value, String formula) {
+        ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript");
+        formula = formula.replaceAll("\\{0\\}", value);
+        Double result = null;
+        try {
+            result = (Double) jse.eval(formula);
+        } catch (ScriptException e) {
+            e.printStackTrace();
+        }
+        //������������������������
+        BigDecimal bg = new BigDecimal(result);
+        result = bg.setScale(num, BigDecimal.ROUND_HALF_UP).doubleValue();
+        return result.toString();
+    }
+}

--
Gitblit v1.8.0