From 5981f3413b9db0dea9ef7b5e33fd39d214ebb636 Mon Sep 17 00:00:00 2001
From: kaiyu <404897439@qq.com>
Date: Wed, 23 Jun 2021 14:19:47 +0800
Subject: [PATCH] screen-manage               增加功能: 修改型号的因子,组织型号关系表也进行维护

---
 screen-manage/src/main/java/com/moral/api/service/impl/DeviceServiceImpl.java |  192 ++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 168 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 b34ad91..9365ad2 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,34 +1,27 @@
 package com.moral.api.service.impl;
 
+import com.alibaba.fastjson.JSON;
 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.moral.api.entity.Device;
-import com.moral.api.entity.ManageAccount;
-import com.moral.api.entity.MonitorPoint;
-import com.moral.api.entity.Organization;
-import com.moral.api.entity.SysDictData;
-import com.moral.api.entity.SysDictType;
-import com.moral.api.entity.Version;
-import com.moral.api.mapper.DeviceMapper;
-import com.moral.api.mapper.ManageAccountMapper;
-import com.moral.api.mapper.MonitorPointMapper;
-import com.moral.api.mapper.OrganizationMapper;
-import com.moral.api.mapper.SysDictDataMapper;
-import com.moral.api.mapper.SysDictTypeMapper;
+import com.moral.api.entity.*;
+import com.moral.api.mapper.*;
 import com.moral.api.pojo.vo.device.DeviceVO;
 import com.moral.api.service.DeviceService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
+import com.moral.api.util.CacheUtils;
 import com.moral.api.util.LogUtils;
 import com.moral.constant.Constants;
-import com.moral.redis.RedisUtil;
+import com.moral.constant.RedisConstants;
 import com.moral.util.ConvertUtils;
 import com.moral.util.DateUtils;
 
 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.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
@@ -75,6 +68,56 @@
     @Autowired
     private LogUtils logUtils;
 
+    @Autowired
+    private RedisTemplate redisTemplate;
+
+    @Autowired
+    private OrganizationUnitAlarmMapper organizationUnitAlarmMapper;
+
+    @Autowired
+    private VersionSensorUnitMapper versionSensorUnitMapper;
+
+
+
+    /*
+     * ���redis������������������
+     * */
+    private Map<String, Object> getDeviceInfoFromRedis(String mac) {
+        Map<String, Object> deviceInfo = (Map<String, Object>) redisTemplate.opsForValue().get(RedisConstants.DEVICE + mac);
+        return deviceInfo;
+    }
+
+    /*
+     * ������������������redis
+     */
+    private void setDeviceInfoToRedis(String mac, Map<String, Object> deviceInfo) {
+        redisTemplate.opsForValue().set(getDeviceKey(mac), deviceInfo);
+    }
+
+    /*
+     * ���redis������������������
+     */
+    private void delDeviceInfoFromRedis(String mac) {
+        redisTemplate.delete(getDeviceKey(mac));
+    }
+
+    /*
+     * ���������������������redis������key
+     */
+    private String getDeviceKey(String mac) {
+        return keysConnect(RedisConstants.DEVICE, mac);
+    }
+
+    //redis key������
+    private String keysConnect(String... keys) {
+        StringBuilder key = new StringBuilder(keys[0]);
+        for (int i = 1; i < keys.length; i++) {
+            key.append("_");
+            key.append(keys[i]);
+        }
+        return key.toString().toLowerCase();
+    }
+
     @Override
     @Transactional
     public void insert(Device device) {
@@ -82,12 +125,20 @@
         device.setOrganizationId(orgId);
         deviceMapper.insert(device);
         Map<String, Object> deviceInfo = selectDeviceInfoById(device.getId());
+        //���������������������������
+        insertOrganizationUnitAlarm(orgId,device.getDeviceVersionId());
         //������������������������redis
-        RedisUtil.set("device_" + device.getMac(), deviceInfo);
+        String mac = device.getMac();
+        //���redis���������������������
+        delDeviceInfoFromRedis(mac);
+        //������������������redis
+        setDeviceInfoToRedis(mac, deviceInfo);
+        //������deviceInfo������
+        CacheUtils.flushDeviceAlarmInfo();
         //������������������
         HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
         StringBuilder content = new StringBuilder();
-        content.append("������������������").append(device.getName()).append("���").append("mac���").append(device.getMac());
+        content.append("������������������").append(device.getName()).append("���").append("mac���").append(mac);
         logUtils.saveOperationForManage(request, content.toString(), Constants.INSERT_OPERATE_TYPE);
     }
 
@@ -99,8 +150,14 @@
         deviceMapper.update(null, updateWrapper);
         Device device = deviceMapper.selectById(deviceId);
         String mac = device.getMac();
-        //������redis
-        RedisUtil.del("device_" + mac);
+        //���redis���������������������
+        delDeviceInfoFromRedis(mac);
+        //���������������������������
+        Integer versionId = device.getDeviceVersionId();
+        Integer orgId = device.getOrganizationId();
+        deleteOrganizationUnitAlarm(orgId,versionId);
+        //������deviceInfo������
+        CacheUtils.flushDeviceAlarmInfo();
         //������������������
         HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
         StringBuilder content = new StringBuilder();
@@ -113,12 +170,30 @@
     public void update(Device device) {
         Integer deviceId = device.getId();
         Device oldDevice = deviceMapper.selectById(deviceId);
+        //���������������������������������������������������������������������������������id������������
+        if(!ObjectUtils.isEmpty(device.getMonitorPointId())){
+            MonitorPoint monitorPoint = monitorPointMapper.selectById(device.getMonitorPointId());
+            device.setOrganizationId(monitorPoint.getOrganizationId());
+        }
         deviceMapper.updateById(device);
-        String mac = deviceMapper.selectById(deviceId).getMac();
-        //������redis
-        RedisUtil.del("device_" + mac);
+        Device updateDevice = deviceMapper.selectById(deviceId);
+        String mac = updateDevice.getMac();
+        //���������������������������
+       Integer oldOrgId = oldDevice.getOrganizationId();
+       Integer newOrgId = updateDevice.getOrganizationId();
+       Integer oldVersionId = oldDevice.getDeviceVersionId();
+       Integer newVersionId = updateDevice.getDeviceVersionId();
+       if(!oldOrgId.equals(newOrgId)||!oldVersionId.equals(newVersionId)){
+           deleteOrganizationUnitAlarm(oldOrgId,oldVersionId);
+           insertOrganizationUnitAlarm(newOrgId,newVersionId);
+       }
+        //���redis���������������������
+        delDeviceInfoFromRedis(mac);
         Map<String, Object> deviceInfo = selectDeviceInfoById(deviceId);
-        RedisUtil.set("device_" + mac, deviceInfo);
+        //������������������redis
+        setDeviceInfoToRedis(mac, deviceInfo);
+        //������deviceInfo������
+        CacheUtils.flushDeviceAlarmInfo();
         //������������������
         HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
         StringBuilder content = new StringBuilder();
@@ -248,7 +323,7 @@
     @Override
     public Map<String, Object> selectDeviceInfoById(Integer deviceId) {
         String mac = deviceMapper.selectById(deviceId).getMac();
-        Map<String, Object> deviceInfo = (Map<String, Object>) RedisUtil.get("device_" + mac);
+        Map<String, Object> deviceInfo = getDeviceInfoFromRedis(mac);
         //������redis������
         if (deviceInfo != null) {
             return deviceInfo;
@@ -264,6 +339,9 @@
         deviceInfo.put("latitude", device.getLatitude());
         deviceInfo.put("createTime", DateUtils.dateToDateString(device.getCreateTime()));
         deviceInfo.put("installTime", device.getInstallTime() == null ? null : DateUtils.dateToDateString(device.getInstallTime()));
+
+        //������������
+        deviceInfo.put("extend", device.getExtend());
 
         //������
         deviceInfo.put("profession", device.getProfession());
@@ -312,7 +390,8 @@
         mpInfo.put("id", monitorPoint.getId());
         mpInfo.put("name", monitorPoint.getName());
         deviceInfo.put("monitorPoint", mpInfo);
-        RedisUtil.set("device_" + mac, deviceInfo);
+
+        setDeviceInfoToRedis(mac, deviceInfo);
         return deviceInfo;
     }
 
@@ -330,4 +409,69 @@
         return monitorPointMapper.selectMaps(queryWrapper);
     }
 
+    @Override
+    public Map<String, Object> getDeviceByMac(String mac) {
+        Map<String, Object> deviceInfo = getDeviceInfoFromRedis(mac);
+        if (deviceInfo == null) {
+            QueryWrapper<Device> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("mac", mac).eq("is_delete", Constants.NOT_DELETE);
+            Device device = deviceMapper.selectOne(queryWrapper);
+            if (device != null) {
+                deviceInfo = selectDeviceInfoById(device.getId());
+                setDeviceInfoToRedis(mac, deviceInfo);
+            }
+        }
+        return deviceInfo;
+    }
+
+    @Override
+    public Map<String, Object> adjustDeviceData(Map<String, Object> deviceData, Map<String, Object> deviceInfo) {
+        return null;
+    }
+
+    @Override
+    public Map<String, Object> judgeDeviceState(Map<String, Object> deviceData, Map<String, Object> deviceInfo) {
+        return null;
+    }
+
+    private void insertOrganizationUnitAlarm(Integer orgId,Integer versionId){
+        QueryWrapper<OrganizationUnitAlarm> queryOrganizationVersionWrapper = new QueryWrapper<>();
+        queryOrganizationVersionWrapper.eq("organization_id",orgId);
+        queryOrganizationVersionWrapper.eq("version_id",versionId);
+        queryOrganizationVersionWrapper.eq("is_delete",Constants.NOT_DELETE);
+        List<OrganizationUnitAlarm> organizationUnitAlarms = organizationUnitAlarmMapper.selectList(queryOrganizationVersionWrapper);
+        if(ObjectUtils.isEmpty(organizationUnitAlarms)){
+            QueryWrapper<VersionSensorUnit> queryVersionSensorUnitWrapper =new QueryWrapper<>();
+            queryVersionSensorUnitWrapper.eq("version_id",versionId);
+            queryVersionSensorUnitWrapper.eq("is_delete",Constants.NOT_DELETE);
+            List<VersionSensorUnit> versionSensorUnits = versionSensorUnitMapper.selectList(queryVersionSensorUnitWrapper);
+            if(!ObjectUtils.isEmpty(versionSensorUnits)){
+                for (VersionSensorUnit versionSensorUnit : versionSensorUnits) {
+                    OrganizationUnitAlarm organizationUnitAlarm = new OrganizationUnitAlarm();
+                    organizationUnitAlarm.setOrganizationId(orgId);
+                    organizationUnitAlarm.setVersionId(versionId);
+                    organizationUnitAlarm.setSensorCode(versionSensorUnit.getSensorCode());
+                    organizationUnitAlarm.setUnitKey(versionSensorUnit.getUnitKey());
+                    organizationUnitAlarm.setShowUnitKey(versionSensorUnit.getUnitKey());
+                    organizationUnitAlarmMapper.insert(organizationUnitAlarm);
+                }
+            }
+        }
+    }
+
+    private void deleteOrganizationUnitAlarm(Integer orgId,Integer versionId){
+        QueryWrapper<Device> queryOrganizationVersionWrapper = new QueryWrapper<>();
+        queryOrganizationVersionWrapper.eq("organization_id",orgId);
+        queryOrganizationVersionWrapper.eq("device_version_id",versionId);
+        queryOrganizationVersionWrapper.eq("is_delete",Constants.NOT_DELETE);
+        List<Device> devices = deviceMapper.selectList(queryOrganizationVersionWrapper);
+        if(ObjectUtils.isEmpty(devices)){//������������������������������������������������������
+            UpdateWrapper deleteWrapper = new UpdateWrapper();
+            deleteWrapper.eq("organization_id",orgId);
+            deleteWrapper.eq("version_id",versionId);
+            deleteWrapper.eq("is_delete",Constants.NOT_DELETE);
+            deleteWrapper.set("is_delete",Constants.DELETE);
+            organizationUnitAlarmMapper.update(null,deleteWrapper);
+        }
+    }
 }

--
Gitblit v1.8.0