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