From c3afba5959d8c94b6af76e6d578b1c6a1bf79b84 Mon Sep 17 00:00:00 2001
From: kaiyu <404897439@qq.com>
Date: Fri, 03 Sep 2021 09:39:34 +0800
Subject: [PATCH] screen-manage           修复报警更新代码BUG

---
 screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java |   72 ++++++++++++++++++++++++------------
 1 files changed, 48 insertions(+), 24 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 fcf29d3..60db004 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
@@ -84,27 +84,30 @@
     private VersionSensorUnitMapper versionSensorUnitMapper;
 
     @Autowired
+    private SpecialDeviceMapper specialDeviceMapper;
+
+    @Autowired
     private AdjustDataUtils adjustDataUtils;
 
     /*
      * ���redis������������������
      * */
     private Map<String, Object> getDeviceInfoFromRedis(String mac) {
-        return (Map<String, Object>) redisTemplate.opsForValue().get(RedisConstants.DEVICE + mac);
+        return (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstants.DEVICE, mac);
     }
 
     /*
      * ������������������redis
      */
     private void setDeviceInfoToRedis(String mac, Map<String, Object> deviceInfo) {
-        redisTemplate.opsForValue().set(RedisConstants.DEVICE + mac, deviceInfo);
+        redisTemplate.opsForHash().put(RedisConstants.DEVICE, mac, deviceInfo);
     }
 
     /*
      * ���redis������������������
      */
     private void delDeviceInfoFromRedis(String mac) {
-        redisTemplate.delete(RedisConstants.DEVICE + mac);
+        redisTemplate.opsForHash().delete(RedisConstants.DEVICE, mac);
     }
 
     @Override
@@ -123,11 +126,11 @@
         //������������������redis
         setDeviceInfoToRedis(mac, deviceInfo);
         //������deviceInfo������
-        CacheUtils.flushDeviceAlarmInfo();
+        CacheUtils.refreshDeviceAlarmInfo();
         //������������������
         HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
         StringBuilder content = new StringBuilder();
-        content.append("������������������").append(device.getName()).append("���").append("mac���").append(mac);
+        content.append("������������������").append(device.getName()).append(":").append("mac���").append(mac);
         logUtils.saveOperationForManage(request, content.toString(), Constants.INSERT_OPERATE_TYPE);
     }
 
@@ -146,7 +149,7 @@
         Integer orgId = device.getOrganizationId();
         deleteOrganizationUnitAlarm(orgId, versionId);
         //������deviceInfo������
-        CacheUtils.flushDeviceAlarmInfo();
+        CacheUtils.refreshDeviceAlarmInfo();
         //������������������
         HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
         StringBuilder content = new StringBuilder();
@@ -177,16 +180,16 @@
             insertOrganizationUnitAlarm(newOrgId, newVersionId);
         }
         //���redis���������������������
-        delDeviceInfoFromRedis(mac);
+        delDeviceInfoFromRedis(oldDevice.getMac());
         Map<String, Object> deviceInfo = selectDeviceInfoById(deviceId);
         //������������������redis
         setDeviceInfoToRedis(mac, deviceInfo);
         //������deviceInfo������
-        CacheUtils.flushDeviceAlarmInfo();
+        CacheUtils.refreshDeviceAlarmInfo();
         //������������������
         HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
         StringBuilder content = new StringBuilder();
-        content.append("������������������").append(mac).append("���");
+        content.append("������������������" + oldDevice.getMac()).append("==>").append(mac).append("���");
         Field[] fields = Device.class.getDeclaredFields();
         for (Field field : fields) {
             if (field.getName().equals("id")) {
@@ -203,7 +206,7 @@
                 Object o1 = method.invoke(oldDevice);
                 Object o2 = method.invoke(device);
                 if (o2 != null) {
-                    content.append(fieldName).append("���").append(o1).append("-->").append(o2).append("���");
+                    content.append(fieldName).append("���").append(o1).append("-->").append(o2).append(":");
                 }
 
             } catch (Exception e) {
@@ -405,7 +408,7 @@
     @Override
     public Map<String, Object> getDeviceByMac(String mac) {
         Map<String, Object> deviceInfo = getDeviceInfoFromRedis(mac);
-        if (deviceInfo == null) {
+        if (ObjectUtils.isEmpty(deviceInfo)) {
             QueryWrapper<Device> queryWrapper = new QueryWrapper<>();
             queryWrapper.eq("mac", mac).eq("is_delete", Constants.NOT_DELETE);
             Device device = deviceMapper.selectOne(queryWrapper);
@@ -419,25 +422,46 @@
 
     @Override
     public Map<String, Object> adjustDeviceData(Map<String, Object> deviceData) {
-        String mac = deviceData.get("mac").toString();
+        String mac = deviceData.remove("mac").toString();
         //���redis������������������
-        Map<String, Object> adjustFormula = redisTemplate.opsForHash().entries(RedisConstants.ADJUST + mac);
+        Map<String, Object> adjustFormula = redisTemplate.opsForHash().entries(RedisConstants.ADJUST + "_" + mac);
         if (!ObjectUtils.isEmpty(adjustFormula)) {
             Map<String, Object> deviceInfo = getDeviceByMac(mac);
             Map<String, Object> monitorPoint = (Map<String, Object>) deviceInfo.get("monitorPoint");
-            Object areaCode = monitorPoint.get("areaCode");
-            Object cityCode = monitorPoint.get("cityCode");
+            String areaCode = monitorPoint.get("areaCode").toString();
+            String cityCode = monitorPoint.get("cityCode").toString();
 
-            Map<String, Object> aqiMap = redisTemplate.opsForHash().entries(RedisConstants.AQI_DATA + areaCode);
+            Map<String, Object> aqiMap = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstants.AQI_DATA, areaCode);
             if (ObjectUtils.isEmpty(aqiMap)) {
-                aqiMap = redisTemplate.opsForHash().entries(RedisConstants.AQI_DATA + cityCode);
+                aqiMap = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstants.AQI_DATA, cityCode);
             }
             return adjustDataUtils.adjust(deviceData, adjustFormula, ObjectUtils.isEmpty(aqiMap) ? null : aqiMap);
         }
+        deviceData.remove("DataTime");
         return deviceData;
     }
 
     @Override
+    public Map<String, Object> adjustSpecialDeviceData(Map<String, Object> deviceData) {
+        String mac = deviceData.remove("mac").toString();
+        //���redis������������������
+        Map<String, Object> adjustFormula = redisTemplate.opsForHash().entries(RedisConstants.ADJUST + "_" + mac);
+        if (!ObjectUtils.isEmpty(adjustFormula)) {
+            Organization organization = specialDeviceMapper.selectOrgByMac(mac);
+            String areaCode = organization.getAreaCode().toString();
+            String cityCode = organization.getCityCode().toString();
+            Map<String, Object> aqiMap = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstants.AQI_DATA, areaCode);
+            if (ObjectUtils.isEmpty(aqiMap)) {
+                aqiMap = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstants.AQI_DATA, cityCode);
+            }
+            return adjustDataUtils.adjust(deviceData, adjustFormula, ObjectUtils.isEmpty(aqiMap) ? null : aqiMap);
+        }
+        deviceData.remove("DataTime");
+        return deviceData;
+    }
+
+    @Override
+    @Transactional
     public void judgeDeviceState(Map<String, Object> deviceData) {
         String mac = deviceData.remove("mac").toString();
         Device device = (Device) redisTemplate.opsForHash().get(RedisConstants.DEVICE_INFO, mac);
@@ -451,19 +475,19 @@
             if (StringUtils.isEmpty(alarmLevel)) {
                 continue;
             }
-            List<Double> list = JSONObject.parseObject(alarmLevel, List.class);
+            List<Object> 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));
+            double value = Double.parseDouble(sensorValue);
             //������������
             if (formula != null) {
                 //������������������
                 sensorValue = formula.replace("{0}", sensorValue);
                 expression = AviatorEvaluator.compile(sensorValue);
-                value = Double.parseDouble(String.format("%.3f", expression.execute()));
+                value = Double.parseDouble(expression.execute().toString());
             }
             int sensorState = judgeState(list, value);
             if (sensorState > state) {
@@ -472,17 +496,17 @@
         }
         //������������������
         UpdateWrapper<Device> updateWrapper = new UpdateWrapper<>();
-        updateWrapper.eq("id", device.getId()).set("state", state);
+        updateWrapper.eq("id", device.getId()).set("state", String.valueOf(state));
         deviceMapper.update(null, updateWrapper);
     }
 
     //���������������������������
-    private int judgeState(List<Double> levels, Double data) {
+    private int judgeState(List<Object> levels, Double data) {
         int state = 1;
         for (int i = levels.size() - 1; i >= 0; i--) {
-            Double level = levels.get(i);
+            Double level = Double.parseDouble(levels.get(i).toString());
             if (data >= level) {
-                state = i + 2;
+                state = i + 1;
                 break;
             }
         }

--
Gitblit v1.8.0