lizijie
2021-08-17 d92f097bf2ad1cbab44f620831e10b2dbe8324b3
特殊设备更新接口
7 files modified
256 ■■■■■ changed files
screen-manage/src/main/java/com/moral/api/controller/SpecialDeviceController.java 9 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/entity/SpecialDevice.java 7 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/mapper/SpecialDeviceMapper.java 5 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/SpecialDeviceService.java 3 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/impl/SpecialDeviceServiceImpl.java 128 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/util/CacheUtils.java 57 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/resources/mapper/SpecialDeviceMapper.xml 47 ●●●●● patch | view | raw | blame | history
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());
    }
}
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() {
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();
}
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);
}
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);
                }
            }
        }
    }
}
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();
    }
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>