From 6450fec60b8dc7e6d31779bcfe3b23b3f665ebaf Mon Sep 17 00:00:00 2001
From: kaiyu <404897439@qq.com>
Date: Tue, 28 Dec 2021 15:08:45 +0800
Subject: [PATCH] screen-api 更新单位转换代码
---
/dev/null | 48 ---------
screen-api/src/main/java/com/moral/api/pojo/vo/cityAQI/BarChartTableOfPollutionLevelVO.java | 2
screen-api/src/main/java/com/moral/api/controller/AqiController.java | 14 ++
screen-api/src/main/java/com/moral/api/utils/UnitConvertUtils.java | 180 ++++++++++++++++++++++++++++++++++++
screen-api/src/main/java/com/moral/api/kafka/consumer/CruiserDataConsumer.java | 2
screen-api/src/main/java/com/moral/api/service/impl/CityAqiServiceImpl.java | 19 +++
screen-api/src/main/java/com/moral/api/kafka/consumer/SecondDataConsumer.java | 5
7 files changed, 214 insertions(+), 56 deletions(-)
diff --git a/screen-api/src/main/java/com/moral/api/controller/AqiController.java b/screen-api/src/main/java/com/moral/api/controller/AqiController.java
index c248635..e6302ef 100644
--- a/screen-api/src/main/java/com/moral/api/controller/AqiController.java
+++ b/screen-api/src/main/java/com/moral/api/controller/AqiController.java
@@ -109,6 +109,13 @@
return ResultMessage.ok(VO);
}
+ /**
+ * @Description: ������������������������������������������������
+ * @Param: [form]
+ * @return: com.moral.constant.ResultMessage
+ * @Author: ���������
+ * @Date: 2021/11/22
+ */
@GetMapping("queryBarChartOfPollutionLevel")
public ResultMessage queryBarChartOfPollutionLevel(QueryChartOfPollutionLevelForm form){
//������������������������
@@ -123,6 +130,13 @@
}
+ /**
+ * @Description: ������������������������������������������������������������
+ * @Param: [form]
+ * @return: com.moral.constant.ResultMessage
+ * @Author: ���������
+ * @Date: 2021/11/22
+ */
@GetMapping("queryBarChatTableOfPollutionLevel")
public ResultMessage queryBarChatTableOfPollutionLevel(QueryChartOfPollutionLevelForm form){
//������������������������
diff --git a/screen-api/src/main/java/com/moral/api/kafka/consumer/CruiserDataConsumer.java b/screen-api/src/main/java/com/moral/api/kafka/consumer/CruiserDataConsumer.java
index 609d2fb..c463e19 100644
--- a/screen-api/src/main/java/com/moral/api/kafka/consumer/CruiserDataConsumer.java
+++ b/screen-api/src/main/java/com/moral/api/kafka/consumer/CruiserDataConsumer.java
@@ -1,5 +1,6 @@
package com.moral.api.kafka.consumer;
+import com.moral.api.utils.UnitConvertUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.common.TopicPartition;
@@ -22,7 +23,6 @@
import com.moral.api.entity.UnitConversion;
import com.moral.api.websocket.CruiserWebSocketServer;
import com.moral.constant.KafkaConstants;
-import com.moral.util.UnitConvertUtils;
/*
* ������������������������
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 68fcd33..729dcbf 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
@@ -4,15 +4,12 @@
import com.moral.api.entity.Device;
import com.moral.api.entity.Sensor;
import com.moral.api.entity.UnitConversion;
+import com.moral.api.utils.UnitConvertUtils;
import com.moral.api.websocket.SingleDeviceServer;
-import com.moral.util.UnitConvertUtils;
-import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.kafka.clients.consumer.Consumer;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.common.TopicPartition;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.listener.ConsumerSeekAware;
import org.springframework.stereotype.Component;
diff --git a/screen-api/src/main/java/com/moral/api/pojo/vo/cityAQI/BarChartTableOfPollutionLevelVO.java b/screen-api/src/main/java/com/moral/api/pojo/vo/cityAQI/BarChartTableOfPollutionLevelVO.java
index 0c9a4b5..a6b404a 100644
--- a/screen-api/src/main/java/com/moral/api/pojo/vo/cityAQI/BarChartTableOfPollutionLevelVO.java
+++ b/screen-api/src/main/java/com/moral/api/pojo/vo/cityAQI/BarChartTableOfPollutionLevelVO.java
@@ -89,7 +89,7 @@
vo.setSerious(serious);
vo.setServer(server);
-
return vo;
}
}
+
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/CityAqiServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/CityAqiServiceImpl.java
index 9ab60a0..8bfb783 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/CityAqiServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/CityAqiServiceImpl.java
@@ -135,6 +135,21 @@
Map<String, Object> value = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstants.CITY_AQI, String.valueOf(regionCode));
if (value == null)
value = queryCityAqiByRegionCodeFromDB(regionCode);
+ //������������������������������������������������������������
+ if (value == null) {
+ String regionCodeStr = String.valueOf(regionCode);
+ String end = regionCodeStr.substring(regionCodeStr.length() - 2, regionCodeStr.length());
+ if (!end.equals(00)) {
+ regionCodeStr = regionCodeStr.substring(0, regionCodeStr.length() - 2);
+ regionCodeStr += "00";
+ regionCode = Integer.parseInt(regionCodeStr);
+ value = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstants.CITY_AQI, String.valueOf(regionCode));
+ if (value == null)
+ value = queryCityAqiByRegionCodeFromDB(regionCode);
+ }else{
+ return null;
+ }
+ }
//������AQI������������������
if (value == null || value.get("AQI") == null)
return null;
@@ -754,7 +769,7 @@
/**
* @Description: ������6������������
* @Param: [cityAqiList]
- * @return: java.util.Map<java.lang.String, java.lang.Double>
+ * @return: java.util.Map<java.lang.String , java.lang.Double>
* ���������key���sensorCode,value������
* @Author: ���������
* @Date: 2021/11/2
@@ -808,7 +823,7 @@
/**
* @Description: ������������������������
* @Param: [regionCode]
- * @return: java.util.Map<java.lang.String, java.lang.Object>
+ * @return: java.util.Map<java.lang.String , java.lang.Object>
* @Author: ���������
* @Date: 2021/10/28
*/
diff --git a/screen-api/src/main/java/com/moral/api/utils/UnitConvertUtils.java b/screen-api/src/main/java/com/moral/api/utils/UnitConvertUtils.java
new file mode 100644
index 0000000..5355a24
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/utils/UnitConvertUtils.java
@@ -0,0 +1,180 @@
+package com.moral.api.utils;
+
+import com.moral.api.entity.Device;
+import com.moral.api.entity.Sensor;
+import com.moral.api.entity.UnitConversion;
+import com.moral.api.entity.Version;
+import com.moral.constant.RedisConstants;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+import javax.annotation.PostConstruct;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName UnitConvertUtils
+ * @Description TODO
+ * @Author ���������
+ * @Date 2021/12/27 16:17
+ * @Version TODO
+ **/
+@Component
+public class UnitConvertUtils {
+
+ /*
+ * ������������������������
+ * */
+ public static Integer num = 3;
+
+ private static RedisTemplate redisTemplate;
+
+ private static List<UnitConversion> unitConversions;
+
+ private static Map<String,Device> devices;
+
+ @PostConstruct
+ public void init() {
+ UnitConvertUtils.unitConversions = redisTemplate.opsForList().range(RedisConstants.UNIT_CONVERSION, 0, -1);
+ devices = redisTemplate.opsForHash().entries(RedisConstants.DEVICE_INFO);
+ }
+
+ @Autowired
+ public void setRedisTemplate(RedisTemplate redisTemplate) {
+ this.redisTemplate = redisTemplate;
+ }
+
+ /**
+ * @Description: ������������������������������������������
+ * @Param: [mac, data]
+ * @return: java.util.Map<java.lang.String , java.lang.Object>
+ * @Author: ���������
+ * @Date: 2021/12/27
+ */
+ public static Map<String, Object> convertUnitToShowUnit(String mac, Map<String, Object> data) {
+ if (mac == null || data == null)
+ return null;
+ Device device = devices.get(mac);
+ //������������������������������������������
+ if(device==null){
+ devices = redisTemplate.opsForHash().entries(RedisConstants.DEVICE_INFO);
+ device = devices.get(mac);
+ if(device==null)
+ return null;
+ }
+ Version version = device.getVersion();
+ //������������������������
+ List<Sensor> sensors = version.getSensors();
+ //���������������������������������������������������������
+ for (Sensor sensor : sensors) {
+ String unitKey = sensor.getUnitKey();//������������
+ String showUnitKey = sensor.getShowUnitKey();//������������
+ //���������������������������������������������������������������
+ if (!unitKey.equals(showUnitKey)) {
+ Object valueObject = data.get(sensor.getCode());
+ //������������������������������������������������������������������������
+ if (valueObject == null)
+ continue;
+ //������������������
+ String formula = getFormula(sensor);
+ if (formula == null)
+ continue;
+ //������������������������
+ Double value = Double.valueOf(String.valueOf(valueObject));
+ //���������������������
+ String valueStr = new BigDecimal(value).toString();
+ //������������������������������������
+ String calculateValue = calculate(valueStr, formula);
+ if(calculateValue==null)
+ continue;
+ value = Double.parseDouble(calculateValue);
+ data.put(sensor.getCode(),value);
+ } else
+ continue;
+ }
+ return data;
+ }
+
+ /**
+ * @Description: ���������������������������
+ * @Param: [sensor]
+ * @return: java.lang.String
+ * @Author: ���������
+ * @Date: 2021/12/28
+ */
+ private static String getFormula(Sensor sensor) {
+ String formula = sensor.getFormula();
+ if (!ObjectUtils.isEmpty(formula))
+ return formula;
+
+ List<UnitConversion> tmpUnitConversions = new ArrayList<>();
+ for (UnitConversion unitConversion : unitConversions) {
+ if (unitConversion.getOriginalUnitKey().equals(sensor.getUnitKey()) && unitConversion.getTargetUnitKey().equals(sensor.getShowUnitKey()))
+ tmpUnitConversions.add(unitConversion);
+ }
+ //���������������������������������������������
+ if (tmpUnitConversions.size() == 0) {
+ refreshUnitConversionCache();
+ }
+ //������������������
+ for (UnitConversion unitConversion : unitConversions) {
+ if (unitConversion.getOriginalUnitKey().equals(sensor.getUnitKey()) && unitConversion.getTargetUnitKey().equals(sensor.getShowUnitKey()))
+ tmpUnitConversions.add(unitConversion);
+ }
+ //���������������������������null
+ if (tmpUnitConversions.size() == 0)
+ return null;
+ //������������������������������������������
+ if (unitConversions.size() == 1)
+ return unitConversions.get(0).getFormula();
+ //������������������������
+ for (UnitConversion unitConversion : unitConversions) {
+ if (unitConversion.getSensorCode().equals(sensor.getCode()))
+ return unitConversion.getFormula();
+ }
+ return null;
+ }
+
+ /**
+ * @Description: ������������������������
+ * @Param: []
+ * @return: void
+ * @Author: ���������
+ * @Date: 2021/12/28
+ */
+ private static void refreshUnitConversionCache() {
+ UnitConvertUtils.unitConversions = redisTemplate.opsForList().range(RedisConstants.UNIT_CONVERSION, 0, -1);
+ }
+
+ /**
+ * @Description: value���������������������format���������
+ * @Param: [value, format]
+ * @return: java.lang.Double
+ * @Author: ���������
+ * @Date: 2021/7/5
+ */
+ public static String calculate(String value, String formula) {
+ if (ObjectUtils.isEmpty(formula))
+ return null;
+ 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();
+ }
+
+
+}
diff --git a/screen-common/src/main/java/com/moral/util/UnitConvertUtils.java b/screen-common/src/main/java/com/moral/util/UnitConvertUtils.java
deleted file mode 100644
index 7d918da..0000000
--- a/screen-common/src/main/java/com/moral/util/UnitConvertUtils.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.moral.util;
-
-import org.springframework.util.ObjectUtils;
-
-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) {
- if(ObjectUtils.isEmpty(formula))
- return null;
- 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