From eb51b2364e9a3fbe806fde61fa255660a098fc8b Mon Sep 17 00:00:00 2001
From: kaiyu <404897439@qq.com>
Date: Thu, 24 Jun 2021 14:06:41 +0800
Subject: [PATCH] Merge branch 'dev' of http://blit.7drlb.com:8888/r/moral into dev

---
 screen-manage/src/main/java/com/moral/api/util/AdjustDataUtils.java |   81 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 81 insertions(+), 0 deletions(-)

diff --git a/screen-manage/src/main/java/com/moral/api/util/AdjustDataUtils.java b/screen-manage/src/main/java/com/moral/api/util/AdjustDataUtils.java
new file mode 100644
index 0000000..1f1deba
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/util/AdjustDataUtils.java
@@ -0,0 +1,81 @@
+package com.moral.api.util;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+import org.springframework.util.StringUtils;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.alibaba.fastjson.JSON;
+import com.googlecode.aviator.AviatorEvaluator;
+import com.googlecode.aviator.Expression;
+import com.moral.api.entity.DeviceAdjustValue;
+import com.moral.util.DateUtils;
+
+@Slf4j
+@Component
+public class AdjustDataUtils {
+    //���������������
+    public Map<String, Object> adjust(Map<String, Object> deviceData, Map<String, Object> adjustFormula, Map<String, Object> aqiMap) {
+        try {
+            Object dataTime = deviceData.get("DataTime");
+            //���������������������������
+            long time = Math.round(new Double((String) dataTime) / 1000) * 1000L;
+            long finalTime = DateUtils.dataToTimeStampTime(new Date(time), DateUtils.HH_mm_ss_EN).getTime();
+            for (String key : deviceData.keySet()) {
+                if (!key.equals("mac") && !key.equals("time") && !key.equals("DataTime") && !key.equals("ver") && !key.contains("Flag")) {
+                    //���������
+                    Object measuredValue = deviceData.get(key);
+                    //������������������������
+                    List<DeviceAdjustValue> sensorFormulas = (List<DeviceAdjustValue>) adjustFormula.get(key);
+                    if (ObjectUtils.isEmpty(sensorFormulas)) {
+                        deviceData.put(key, measuredValue);
+                        continue;
+                    }
+
+                    //���������������������������������
+                    DeviceAdjustValue deviceAdjustValue = sensorFormulas.stream()
+                            .filter(o -> o.getStartTime().getTime() <= finalTime && o.getEndTime().getTime() > finalTime)
+                            .findFirst().get();
+                    String formula = deviceAdjustValue.getValue();
+                    if (StringUtils.isEmpty(formula)) {
+                        deviceData.put(key, measuredValue);
+                        continue;
+                    }
+
+                    Expression expression = AviatorEvaluator.compile(formula);
+                    Map<String, Object> env = new HashMap<>();
+                    if (formula.contains("aqi")) {
+                        Object aqiValue = null;
+                        if (aqiMap != null) {
+                            aqiValue = aqiMap.get(key);
+                        }
+                        env.put("aqi", ObjectUtils.isEmpty(aqiValue) ? 0F : Float.parseFloat((String) aqiValue));
+                    }
+                    if (formula.contains("vocs")) {
+                        Object vocsValue = ObjectUtils.isEmpty(deviceData.get("a99054")) ? 0F : deviceData.get("a99054");
+                        env.put("vocs", vocsValue);
+                    }
+                    if (formula.contains("cel")) {
+                        env.put("cel", Float.parseFloat((String) measuredValue));
+                    }
+                    //������
+                    measuredValue = expression.execute(env);
+                    //������������
+                    if (Float.parseFloat(measuredValue.toString()) < 0 && !"a01001".equals(measuredValue)) {
+                        measuredValue = 0F;
+                    }
+                    deviceData.put(key, Double.parseDouble(String.format("%.3f", measuredValue)));
+                }
+            }
+        } catch (Exception e) {
+            log.error("param[0] deviceData:" + JSON.toJSONString(deviceData));
+            log.error(e.getMessage());
+        }
+        return deviceData;
+    }
+}

--
Gitblit v1.8.0