From 6f12948893fcc846dfb32aa861c473a842edcd56 Mon Sep 17 00:00:00 2001
From: jinpengyong <jpy123456>
Date: Wed, 23 Jun 2021 14:46:15 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev_

---
 screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java |   81 +++++++++++++++++++++++++++++++++++-----
 1 files changed, 70 insertions(+), 11 deletions(-)

diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java
index 9365ad2..4af7aef 100644
--- a/screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java
+++ b/screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java
@@ -1,9 +1,11 @@
 package com.moral.api.service.impl;
 
-import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.googlecode.aviator.AviatorEvaluator;
+import com.googlecode.aviator.Expression;
 import com.moral.api.entity.*;
 import com.moral.api.mapper.*;
 import com.moral.api.pojo.vo.device.DeviceVO;
@@ -11,17 +13,20 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
 import com.moral.api.util.CacheUtils;
+import com.moral.api.util.AdjustDataUtils;
 import com.moral.api.util.LogUtils;
 import com.moral.constant.Constants;
 import com.moral.constant.RedisConstants;
 import com.moral.util.ConvertUtils;
 import com.moral.util.DateUtils;
 
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ObjectUtils;
+import org.springframework.util.StringUtils;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
@@ -29,10 +34,12 @@
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 import javax.servlet.http.HttpServletRequest;
 
@@ -45,6 +52,7 @@
  * @since 2021-05-11
  */
 @Service
+@Slf4j
 public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> implements DeviceService {
 
     @Autowired
@@ -77,14 +85,14 @@
     @Autowired
     private VersionSensorUnitMapper versionSensorUnitMapper;
 
-
+    @Autowired
+    private AdjustDataUtils adjustDataUtils;
 
     /*
      * ���redis������������������
      * */
     private Map<String, Object> getDeviceInfoFromRedis(String mac) {
-        Map<String, Object> deviceInfo = (Map<String, Object>) redisTemplate.opsForValue().get(RedisConstants.DEVICE + mac);
-        return deviceInfo;
+        return (Map<String, Object>) redisTemplate.opsForValue().get(getDeviceKey(mac));
     }
 
     /*
@@ -145,10 +153,10 @@
     @Override
     @Transactional
     public void delete(Integer deviceId) {
+        Device device = deviceMapper.selectById(deviceId);
         UpdateWrapper<Device> updateWrapper = new UpdateWrapper<>();
         updateWrapper.eq("id", deviceId).set("is_delete", Constants.DELETE);
         deviceMapper.update(null, updateWrapper);
-        Device device = deviceMapper.selectById(deviceId);
         String mac = device.getMac();
         //���redis���������������������
         delDeviceInfoFromRedis(mac);
@@ -283,13 +291,15 @@
             queryWrapper.eq("monitor_point_id", mpId);
         }
 
+        //���������������������
         if (name != null) {
             queryWrapper.like("name", name);
         }
+
+        //mac������������
         if (mac != null) {
             queryWrapper.like("mac", mac);
         }
-
 
         //������������,������create_time������
         if (order != null && orderType != null) {
@@ -318,7 +328,6 @@
         result.put("item", items);
         return result;
     }
-
 
     @Override
     public Map<String, Object> selectDeviceInfoById(Integer deviceId) {
@@ -389,6 +398,9 @@
         MonitorPoint monitorPoint = device.getMonitorPoint();
         mpInfo.put("id", monitorPoint.getId());
         mpInfo.put("name", monitorPoint.getName());
+        mpInfo.put("areaCode", monitorPoint.getAreaCode());
+        mpInfo.put("cityCode", monitorPoint.getCityCode());
+        mpInfo.put("provinceCode", monitorPoint.getProvinceCode());
         deviceInfo.put("monitorPoint", mpInfo);
 
         setDeviceInfoToRedis(mac, deviceInfo);
@@ -425,13 +437,60 @@
     }
 
     @Override
-    public Map<String, Object> adjustDeviceData(Map<String, Object> deviceData, Map<String, Object> deviceInfo) {
-        return null;
+    public Map<String, Object> adjustDeviceData(Map<String, Object> deviceData) {
+        return adjustDataUtils.adjust(deviceData);
     }
 
     @Override
-    public Map<String, Object> judgeDeviceState(Map<String, Object> deviceData, Map<String, Object> deviceInfo) {
-        return null;
+    public void judgeDeviceState(Map<String, Object> deviceData) {
+        String mac = deviceData.remove("mac").toString();
+        Device device = (Device) redisTemplate.opsForHash().get(RedisConstants.DEVICE_INFO, mac);
+        Version version = device.getVersion();
+        List<Sensor> sensors = version.getSensors();
+        Expression expression;
+        int state = 1;
+        for (Sensor sensor : sensors) {
+            //������������������
+            String alarmLevel = sensor.getAlarmLevel();
+            if (StringUtils.isEmpty(alarmLevel)) {
+                continue;
+            }
+            List<Double> list = JSONObject.parseObject(alarmLevel, List.class);
+            String sensorCode = sensor.getCode();
+            //������������
+            String formula = sensor.getFormula();
+            //������������������������
+            String sensorValue = (String) deviceData.get(sensorCode);
+            double value = Double.parseDouble(String.format("%.3f", sensorValue));
+            //������������
+            if (formula != null) {
+                //������������������
+                sensorValue = formula.replace("{0}", sensorValue);
+                expression = AviatorEvaluator.compile(sensorValue);
+                value = Double.parseDouble(String.format("%.3f", expression.execute()));
+            }
+            int sensorState = judgeState(list, value);
+            if (sensorState > state) {
+                state = sensorState;
+            }
+        }
+        //������������������
+        UpdateWrapper<Device> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.eq("id", device.getId()).set("state", state);
+        deviceMapper.update(null, updateWrapper);
+    }
+
+    //���������������������������
+    private int judgeState(List<Double> levels, Double data) {
+        int state = 1;
+        for (int i = levels.size() - 1; i >= 0; i--) {
+            Double level = levels.get(i);
+            if (data >= level) {
+                state = i + 2;
+                break;
+            }
+        }
+        return state;
     }
 
     private void insertOrganizationUnitAlarm(Integer orgId,Integer versionId){

--
Gitblit v1.8.0