screen-api/src/main/java/com/moral/api/config/websocket/WebSocketConfig.java | ●●●●● patch | view | raw | blame | history | |
screen-api/src/main/java/com/moral/api/kafka/consumer/SecondDataConsumer.java | ●●●●● patch | view | raw | blame | history | |
screen-api/src/main/java/com/moral/api/websocket/SingleDeviceServer.java | ●●●●● patch | view | raw | blame | history | |
screen-common/src/main/java/com/moral/util/UnitConvertUtils.java | ●●●●● patch | view | raw | blame | history |
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; } } 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 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); } screen-common/src/main/java/com/moral/util/UnitConvertUtils.java
New file @@ -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(); } }