From d92f097bf2ad1cbab44f620831e10b2dbe8324b3 Mon Sep 17 00:00:00 2001
From: lizijie <lzjiiie@163.com>
Date: Tue, 17 Aug 2021 08:50:27 +0800
Subject: [PATCH] 特殊设备更新接口

---
 screen-manage/src/main/java/com/moral/api/service/SpecialDeviceService.java          |    3 
 screen-manage/src/main/resources/mapper/SpecialDeviceMapper.xml                      |   47 +++++++++
 screen-manage/src/main/java/com/moral/api/mapper/SpecialDeviceMapper.java            |    5 +
 screen-manage/src/main/java/com/moral/api/entity/SpecialDevice.java                  |    7 +
 screen-manage/src/main/java/com/moral/api/service/impl/SpecialDeviceServiceImpl.java |  128 ++++++++++++++++++++++++-
 screen-manage/src/main/java/com/moral/api/util/CacheUtils.java                       |   57 +++++++++++
 screen-manage/src/main/java/com/moral/api/controller/SpecialDeviceController.java    |    9 +
 7 files changed, 249 insertions(+), 7 deletions(-)

diff --git a/screen-manage/src/main/java/com/moral/api/controller/SpecialDeviceController.java b/screen-manage/src/main/java/com/moral/api/controller/SpecialDeviceController.java
index c1e2361..b796646 100644
--- a/screen-manage/src/main/java/com/moral/api/controller/SpecialDeviceController.java
+++ b/screen-manage/src/main/java/com/moral/api/controller/SpecialDeviceController.java
@@ -36,7 +36,12 @@
     @ResponseBody
     public ResultMessage insert(@RequestBody SpecialDevice specialDevice){
         System.out.println(specialDevice);
-        specialDeviceService.insert(specialDevice);
-        return null;
+        Map<String,Object> resultMap = specialDeviceService.insert(specialDevice);
+        String msg = resultMap.get("msg").toString();
+        int code = Integer.parseInt(resultMap.get("code").toString());
+        if (code == 0){
+            return ResultMessage.ok(msg);
+        }
+        return ResultMessage.fail(Integer.parseInt(resultMap.get("code").toString()),resultMap.get("msg").toString());
     }
 }
diff --git a/screen-manage/src/main/java/com/moral/api/entity/SpecialDevice.java b/screen-manage/src/main/java/com/moral/api/entity/SpecialDevice.java
index ef614d2..b5a7266 100644
--- a/screen-manage/src/main/java/com/moral/api/entity/SpecialDevice.java
+++ b/screen-manage/src/main/java/com/moral/api/entity/SpecialDevice.java
@@ -1,6 +1,7 @@
 package com.moral.api.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.baomidou.mybatisplus.annotation.TableId;
 import java.time.LocalDateTime;
@@ -75,6 +76,12 @@
      */
     private String isDelete;
 
+    /*
+     * ������������
+     * */
+    @TableField(exist = false)
+    private Version version;
+
 
     @Override
     protected Serializable pkVal() {
diff --git a/screen-manage/src/main/java/com/moral/api/mapper/SpecialDeviceMapper.java b/screen-manage/src/main/java/com/moral/api/mapper/SpecialDeviceMapper.java
index c5c44bb..82bc9e6 100644
--- a/screen-manage/src/main/java/com/moral/api/mapper/SpecialDeviceMapper.java
+++ b/screen-manage/src/main/java/com/moral/api/mapper/SpecialDeviceMapper.java
@@ -3,6 +3,9 @@
 import com.moral.api.entity.SpecialDevice;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * <p>
  *  Mapper ������
@@ -13,4 +16,6 @@
  */
 public interface SpecialDeviceMapper extends BaseMapper<SpecialDevice> {
 
+    List<SpecialDevice> querySpecialDeviceUnitAlarmInfo();
+
 }
diff --git a/screen-manage/src/main/java/com/moral/api/service/SpecialDeviceService.java b/screen-manage/src/main/java/com/moral/api/service/SpecialDeviceService.java
index 43a6968..688478c 100644
--- a/screen-manage/src/main/java/com/moral/api/service/SpecialDeviceService.java
+++ b/screen-manage/src/main/java/com/moral/api/service/SpecialDeviceService.java
@@ -21,4 +21,7 @@
 
     @Transactional
     Map<String,Object> insert(SpecialDevice specialDevice);
+
+    //������������id���������������������������������������
+    Map<String, Object> selectDeviceInfoById(Integer deviceId);
 }
diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/SpecialDeviceServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/SpecialDeviceServiceImpl.java
index d08d880..2a00d2a 100644
--- a/screen-manage/src/main/java/com/moral/api/service/impl/SpecialDeviceServiceImpl.java
+++ b/screen-manage/src/main/java/com/moral/api/service/impl/SpecialDeviceServiceImpl.java
@@ -6,22 +6,26 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.moral.api.entity.*;
 import com.moral.api.mapper.*;
+import com.moral.api.pojo.vo.device.DeviceVO;
 import com.moral.api.service.SpecialDeviceService;
 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.constant.RedisConstants;
 import com.moral.constant.ResponseCodeEnum;
+import com.moral.util.DateUtils;
 import org.springframework.beans.BeanUtils;
 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.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
 
+import javax.servlet.http.HttpServletRequest;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * <p>
@@ -54,6 +58,15 @@
 
     @Autowired(required = false)
     private RedisTemplate redisTemplate;
+
+    @Autowired(required = false)
+    private OrganizationUnitAlarmMapper organizationUnitAlarmMapper;
+
+    @Autowired(required = false)
+    private VersionSensorUnitMapper versionSensorUnitMapper;
+
+    @Autowired
+    private LogUtils logUtils;
 
     /*
      * ���redis������������������
@@ -252,6 +265,111 @@
             wrapper_specialDeviceHistory.eq("organization_id",organizationId);*/
             specialDeviceHistoryMapper.update(insertSpecialDeviceHistory,wrapper_specialDeviceHistory);
         }
-        return null;
+        Map<String, Object> deviceInfo = selectDeviceInfoById(specialDevice.getId());
+        //���������������������������
+        insertOrganizationUnitAlarm(specialDevice.getOrganizationId(), specialDevice.getDeviceVersionId());
+        //������������������������redis
+        String mac1 = specialDevice.getMac();
+        //���redis���������������������
+        delDeviceInfoFromRedis(mac1);
+        //������������������redis
+        setDeviceInfoToRedis(mac1, deviceInfo);
+        //������deviceInfo������
+        CacheUtils.refreshSpecialDeviceAlarmInfo();
+        //������������������
+        HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
+        StringBuilder content = new StringBuilder();
+        content.append("������������������������").append(specialDevice.getName()).append(":").append("mac���").append(mac);
+        logUtils.saveOperationForManage(request, content.toString(), Constants.INSERT_OPERATE_TYPE);
+        resultMap.put("code", ResponseCodeEnum.SUCCESS.getCode());
+        resultMap.put("msg", ResponseCodeEnum.SUCCESS.getMsg());
+        return resultMap;
+    }
+
+    @Override
+    public Map<String, Object> selectDeviceInfoById(Integer deviceId) {
+        String mac = specialDeviceMapper.selectById(deviceId).getMac();
+        Map<String, Object> specialDeviceInfo = getDeviceInfoFromRedis(mac);
+        //������redis������
+        if (specialDeviceInfo != null) {
+            return specialDeviceInfo;
+        }
+        specialDeviceInfo = new LinkedHashMap<>();
+        //DeviceVO device = deviceMapper.selectDeviceInfoById(deviceId);
+        SpecialDevice specialDevice = specialDeviceMapper.selectById(deviceId);
+        //������
+        specialDeviceInfo.put("id", specialDevice.getId());
+        specialDeviceInfo.put("name", specialDevice.getName());
+        specialDeviceInfo.put("mac", specialDevice.getMac());
+        specialDeviceInfo.put("createTime", DateUtils.dateToDateString(specialDevice.getCreateTime()));
+
+        //������������
+        //specialDeviceInfo.put("extend", device.getExtend());
+
+        //������
+        Map<String, Object> versionInfo = new LinkedHashMap<>();
+        Version version = versionMapper.selectById(specialDevice.getDeviceVersionId());
+        versionInfo.put("id", version.getId());
+        versionInfo.put("name", version.getName());
+        specialDeviceInfo.put("version", versionInfo);
+
+        //���������
+        List<Map<String, Object>> operatorsInfo = new ArrayList<>();
+        String operateIds = specialDevice.getOperateIds();
+        if (!ObjectUtils.isEmpty(operateIds)){
+            String[] operateIdArr = operateIds.split(",");
+            if (operateIdArr.length>0){
+                List<Integer> operateIdList = new ArrayList<>();
+                for (int i = 0; i < operateIdArr.length; i++){
+                    operateIdList.add(Integer.parseInt(operateIdArr[i]));
+                }
+                QueryWrapper<ManageAccount> wapper_manageAccount = new QueryWrapper<>();
+                wapper_manageAccount.eq("is_delete",Constants.NOT_DELETE);
+                wapper_manageAccount.in("id",operateIdList);
+                List<ManageAccount> manageAccounts = manageAccountMapper.selectList(wapper_manageAccount);
+                for (ManageAccount manageAccount:manageAccounts) {
+                    Map<String,Object> operateMap = new HashMap<>();
+                    operateMap.put("id",manageAccount.getId());
+                    operateMap.put("name",manageAccount.getUserName());
+                    operatorsInfo.add(operateMap);
+                }
+            }
+        }
+        specialDeviceInfo.put("operators", operatorsInfo);
+
+        //������
+        Map<String, Object> orgInfo = new LinkedHashMap<>();
+        Organization organization = organizationMapper.selectById(specialDevice.getOrganizationId());
+        orgInfo.put("id", organization.getId());
+        orgInfo.put("name", organization.getName());
+        specialDeviceInfo.put("organization", orgInfo);
+
+        setDeviceInfoToRedis(mac, specialDeviceInfo);
+        return specialDeviceInfo;
+    }
+
+    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 (org.springframework.util.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 (!org.springframework.util.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);
+                }
+            }
+        }
     }
 }
diff --git a/screen-manage/src/main/java/com/moral/api/util/CacheUtils.java b/screen-manage/src/main/java/com/moral/api/util/CacheUtils.java
index f8e27ee..5f292cf 100644
--- a/screen-manage/src/main/java/com/moral/api/util/CacheUtils.java
+++ b/screen-manage/src/main/java/com/moral/api/util/CacheUtils.java
@@ -4,6 +4,7 @@
 import com.moral.api.entity.*;
 import com.moral.api.mapper.DeviceMapper;
 import com.moral.api.mapper.SensorMapper;
+import com.moral.api.mapper.SpecialDeviceMapper;
 import com.moral.api.mapper.UnitConversionMapper;
 import com.moral.api.service.SensorService;
 import com.moral.api.service.SysDictDataService;
@@ -35,6 +36,8 @@
     private static RedisTemplate redisTemplate;
 
     private static DeviceMapper deviceMapper;
+
+    private static SpecialDeviceMapper specialDeviceMapper;
 
     private static SysDictDataService sysDictDataService;
 
@@ -70,6 +73,11 @@
     @Autowired
     public void setUnitConversionMapper(UnitConversionMapper unitConversionMapper) {
         CacheUtils.unitConversionMapper = unitConversionMapper;
+    }
+
+    @Autowired
+    public void setSpecialDeviceMapper(SpecialDeviceMapper specialDeviceMapper) {
+        CacheUtils.specialDeviceMapper = specialDeviceMapper;
     }
 
 
@@ -122,6 +130,55 @@
         redisTemplate.opsForHash().putAll(RedisConstants.DEVICE_INFO,result);
     }
 
+    public static void refreshSpecialDeviceAlarmInfo() {
+        //������������
+        redisTemplate.delete(RedisConstants.SPECIAL_DEVICE_INFO);
+        //������������������
+        List<SpecialDevice> specialDevices = specialDeviceMapper.querySpecialDeviceUnitAlarmInfo();
+        Map<String, SysDictData> unitMap = sysDictDataService.getDictDatasByType("unit");
+        //���������������������������������������������
+        Map<String,SpecialDevice> result = new HashMap<>();
+        for (SpecialDevice specialDevice : specialDevices) {
+            Version version = specialDevice.getVersion();
+            List<Sensor> sensors = version.getSensors();
+            for (Sensor sensor : sensors) {
+                //������������������
+                String unitKey = sensor.getUnitKey();
+                String showUnitKey = sensor.getShowUnitKey();
+                SysDictData unitData = unitMap.get(unitKey);
+                SysDictData showUnitData = unitMap.get(showUnitKey);
+                sensor.setUnit(unitData.getDataValue());
+                sensor.setShowUnit(showUnitData.getDataValue());
+                //������������������
+                Map<String, Sensor> allSensors = sensorService.getAllSensorFromCache();
+                String sensorName = allSensors.get(sensor.getCode()).getName();
+                sensor.setName(sensorName);
+                //������������������
+                if (!unitKey.equals(showUnitKey)) {
+                    QueryWrapper<UnitConversion> queryWrapper = new QueryWrapper<>();
+                    queryWrapper.eq("is_delete", Constants.NOT_DELETE);
+                    queryWrapper.eq("original_unit_key", unitKey);
+                    queryWrapper.eq("target_unit_key", showUnitKey);
+                    List<UnitConversion> unitConversions = unitConversionMapper.selectList(queryWrapper);
+                    if (unitConversions.size() == 1) {
+                        UnitConversion unitConversion = unitConversions.get(0);
+                        if (ObjectUtils.isEmpty(unitConversion.getSensorCode()))
+                            sensor.setFormula(unitConversion.getFormula());
+
+                    } else {
+                        for (UnitConversion unitConversion : unitConversions) {
+                            if (sensor.getCode().equals(unitConversion.getSensorCode()))
+                                sensor.setFormula(unitConversion.getFormula());
+                        }
+                    }
+                }
+            }
+            result.put(specialDevice.getMac(),specialDevice);
+        }
+        //������redis
+        redisTemplate.opsForHash().putAll(RedisConstants.SPECIAL_DEVICE_INFO,result);
+    }
+
     public static void refreshSensor(){
         sensorService.refreshCache();
     }
diff --git a/screen-manage/src/main/resources/mapper/SpecialDeviceMapper.xml b/screen-manage/src/main/resources/mapper/SpecialDeviceMapper.xml
index db8b4e6..82d3e45 100644
--- a/screen-manage/src/main/resources/mapper/SpecialDeviceMapper.xml
+++ b/screen-manage/src/main/resources/mapper/SpecialDeviceMapper.xml
@@ -16,4 +16,51 @@
                     <result column="is_delete" property="isDelete" />
         </resultMap>
 
+    <resultMap id="querySpecialDeviceUnitAlarmInfoMap" type="com.moral.api.entity.SpecialDevice">
+        <id column="d.id" property="id"/>
+        <result column="d.name" property="name"/>
+        <result column="d.mac" property="mac"/>
+        <result column="d.operate_ids" property="operateIds"/>
+        <result column="d.monitor_point_id" property="monitorPointId"/>
+        <result column="d.organization_id" property="organizationId"/>
+        <result column="oua.version_id" property="deviceVersionId"/>
+        <association property="version" column="d.device_version_id" javaType="com.moral.api.entity.Version">
+            <id column="v.id" property="id"></id>
+            <result column="v.name" property="name"></result>
+            <collection column="d.device_version_id" property="sensors" ofType="com.moral.api.entity.Sensor">
+                <result column="oua.sensor_code" property="code" ></result>
+                <result column="oua.unit_key" property="unitKey"></result>
+                <result column="oua.show_unit_key" property="showUnitKey"></result>
+                <result column="oua.alarm_level" property="alarmLevel" javaType="String" ></result>
+            </collection>
+        </association>
+    </resultMap>
+
+    <select id="querySpecialDeviceUnitAlarmInfo" resultMap="querySpecialDeviceUnitAlarmInfoMap">
+        select
+            d.id as `d.id`,
+            d.mac as `d.mac`,
+            d.name as `d.name`,
+            d.operate_ids as `d.operate_ids`,
+            d.organization_id as `d.organization_id`,
+            oua.version_id as `oua.version_id`,
+            oua.sensor_code as `oua.sensor_code`,
+            oua.unit_key as `oua.unit_key`,
+            oua.show_unit_key as `oua.show_unit_key`,
+            oua.alarm_level as `oua.alarm_level`,
+            v.id as `v.id`,
+            v.name as `v.name`
+        from
+            special_device d
+        join
+            version v
+        on
+            v.`id` = d.`device_version_id` and v.`is_delete` = 0
+        join
+            organization_unit_alarm oua
+        on
+            d.`device_version_id` = oua.`version_id`   and d.`organization_id` = oua.`organization_id` and oua.`is_delete` = 0
+        where
+            d.`is_delete` = 0;
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.8.0