2021与蓝度共同重构项目,服务端
liuhaonan
2022-10-25 dda268997ca8f8a364f7c19b45d7a43a50a98efe
ximon-admin/src/main/java/com/sandu/ximon/admin/service/MonitorService.java
@@ -12,16 +12,21 @@
import com.sandu.ximon.admin.dto.YSY_AccessTokenDto;
import com.sandu.ximon.admin.dto.YSY_MonitorDto;
import com.sandu.ximon.admin.param.MonitorParam;
import com.sandu.ximon.admin.redis.DeviceRedisKey;
import com.sandu.ximon.admin.security.SecurityUtils;
import com.sandu.ximon.admin.utils.ListPagingUtils;
import com.sandu.ximon.admin.utils.RedisUtils;
import com.sandu.ximon.admin.utils.StoreOperationRecordsUtils;
import com.sandu.ximon.admin.vo.EquipmentInfomation;
import com.sandu.ximon.admin.vo.RedisDeviceStatus;
import com.sandu.ximon.dao.bo.MonitorBo;
import com.sandu.ximon.dao.domain.Monitor;
import com.sandu.ximon.dao.domain.PoleBinding;
import com.sandu.ximon.dao.enums.OrderByEnums;
import com.sandu.ximon.dao.enums.PoleBindingEnums;
import com.sandu.ximon.dao.mapper.MonitorMapper;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
@@ -32,6 +37,7 @@
@Service
@AllArgsConstructor
@Slf4j
public class MonitorService extends BaseServiceImpl<MonitorMapper, Monitor> {
    private final MonitorMapper monitorMapper;
    //萤石云AppKey
@@ -55,20 +61,52 @@
    private final PoleBindingService poleBindingService;
    private final RedisUtils redisUtils;
    /**
     * 模糊查询
     * 摄像头列表模糊查询
     */
    public CommonPage listMonitorByKeyword(BaseConditionVO baseConditionVO, MonitorParam monitorParam) {
    public CommonPage listMonitorByKeyword(BaseConditionVO baseConditionVO, Integer order, Integer seq, MonitorParam monitorParam) {
        //绑定状态:已绑定/未绑定/全部
        if (monitorParam.getBindingState() == null) {
            //全部
            monitorParam.setBindingState(2);
        }
        //排序字段
        String orderByResult = "id";
        //正序、倒叙
        String orderBySeq = OrderByEnums.ASC.getCode();
        if (order != null) {
            switch (order) {
                case 1:
                    orderByResult = OrderByEnums.MONITOR_POLE_NAME.getCode();
                    break;
                case 2:
                    orderByResult = OrderByEnums.MONITOR_CREATE_TIME.getCode();
                    break;
                default:
            }
        }
        if (seq != null) {
            switch (seq) {
                case 1:
                    orderBySeq = " ASC";
                    break;
                case 2:
                    orderBySeq = " DESC";
                    break;
                default:
                    break;
            }
        }
        //排序方式
        String orderBy = orderByResult + " " + orderBySeq;
        List<MonitorBo> list;
        if (SecurityUtils.getClientId() == null) {
            list = monitorMapper.listMonitorDeviceSerial1(null, monitorParam.getKeyword(), monitorParam.getBindingState());
            list = monitorMapper.listMonitorDeviceSerial1(null, monitorParam.getKeyword(), monitorParam.getBindingState(), orderBy);
        } else {
            list = monitorMapper.listMonitorDeviceSerial1(SecurityUtils.getUserId(), monitorParam.getKeyword(), monitorParam.getBindingState());
            list = monitorMapper.listMonitorDeviceSerial1(SecurityUtils.getUserId(), monitorParam.getKeyword(), monitorParam.getBindingState(), orderBy);
        }
        //没有数据时候直接返回空数组
@@ -112,39 +150,26 @@
        return commonPage;
    }
    public Monitor getYSYMonitorInfoAndaddMonitorToTable(String deviceSerial) {
        YSY_MonitorDto getMonitorDto = getYSYMonitorInfo(getAccessToken(), deviceSerial);
    /**
     * 摄像头列表地(用于首页数据统计)
     *
     * @return
     */
    public List<MonitorBo> listMonitorOnHome() {
        if ("200".equals(getMonitorDto.getCode())) {
            Monitor monitor = getOne(Wrappers.lambdaQuery(Monitor.class).eq(Monitor::getDeviceSerial, deviceSerial));
            if (monitor != null) {
                monitor.setDeviceSerial(getMonitorDto.getData().getDeviceSerial());
                monitor.setDeviceName(getMonitorDto.getData().getDeviceName());
                monitor.setDeviceType(getMonitorDto.getData().getModel());
                monitor.setEquipmentState(getMonitorDto.getData().getStatus());
                monitor.setIsEncrypt(getMonitorDto.getData().getIsEncrypt());
                monitor.setAddTime(getMonitorDto.getData().getUpdateTime());
                monitor.setNetAddress(getMonitorDto.getData().getNetAddress());
                //更新摄像头状态
                updateById(monitor);
            } else {
                monitor = new Monitor();
                monitor.setDeviceSerial(getMonitorDto.getData().getDeviceSerial());
                monitor.setDeviceName(getMonitorDto.getData().getDeviceName());
                monitor.setDeviceType(getMonitorDto.getData().getModel());
                monitor.setEquipmentState(getMonitorDto.getData().getStatus());
                monitor.setIsEncrypt(getMonitorDto.getData().getIsEncrypt());
                monitor.setAddTime(getMonitorDto.getData().getUpdateTime());
                monitor.setNetAddress(getMonitorDto.getData().getNetAddress());
                //更新摄像头状态
                save(monitor);
            }
            return monitor;
        List<MonitorBo> list;
        if (SecurityUtils.getClientId() == null) {
            list = monitorMapper.listMonitorDeviceSerial1(null, null, 2, null);
        } else {
            return null;
            list = monitorMapper.listMonitorDeviceSerial1(SecurityUtils.getUserId(), null, 2, null);
        }
        //没有数据时候直接返回空数组
        if (list == null) {
            return new ArrayList<>();
        }
        return list;
    }
    /**
@@ -185,7 +210,17 @@
        paramMap.put("appKey", AppKey);
        paramMap.put("appSecret", Secret);
        String s = HttpUtil.post(YSY_URL + ACCESSTOKEN_URL, paramMap);
        if (!s.startsWith("{") || !s.endsWith("}")) {
            log.error("获取摄像头token失败,格式有误!");
        }
        YSY_AccessTokenDto accessTokenDto = JSON.parseObject(s, YSY_AccessTokenDto.class);
        //二次获取
        if(accessTokenDto == null){
            log.error("获取摄像头token失败,格式有误!");
            s = HttpUtil.post(YSY_URL + ACCESSTOKEN_URL, paramMap);
            accessTokenDto = JSON.parseObject(s, YSY_AccessTokenDto.class);
        }
        return accessTokenDto.getData().getAccessToken();
    }
@@ -268,6 +303,11 @@
     *                     //     * @param validateCode 设备验证码,设备机身上的六位大写字母
     */
    public boolean addYSYMonitor(String deviceSerial, String validateCode) {
        List<Monitor> list = list(Wrappers.lambdaQuery(Monitor.class).eq(Monitor::getDeviceSerial, deviceSerial));
        if (list.size() != 0) {
            throw new BusinessException("该摄像头已存在,无法重复添加!");
        }
        Map<String, Object> paramMap = new HashMap<>();
        paramMap.put("accessToken", getAccessToken());
        paramMap.put("deviceSerial", deviceSerial);
@@ -275,34 +315,45 @@
            paramMap.put("validateCode", validateCode);
        }
        String s = HttpUtil.post(YSY_URL + ADD_DEVICE_URL, paramMap);
        if (!s.startsWith("{") && !s.endsWith("}")) {
            throw new BusinessException("萤石云数据异常");
        }
        YSY_MonitorDto monitorDto = JSON.parseObject(s, YSY_MonitorDto.class);
        boolean result;
        if ("200".equals(monitorDto.getCode()) || "20017".equals(monitorDto.getCode())) {
            Monitor monitor = new Monitor();
            monitor.setDeviceSerial(monitorDto.getData().getDeviceSerial());
            monitor.setDevicesCode(validateCode);
            monitor.setDeviceName(monitorDto.getData().getDeviceName());
            monitor.setEquipmentState(monitorDto.getData().getStatus());
            monitor.setIsEncrypt(monitorDto.getData().getIsEncrypt());
            monitor.setDeviceType(monitorDto.getData().getModel());
            monitor.setNetAddress(monitorDto.getData().getNetAddress());
            result = addMonitorInfoToTable(monitor);
        if ("20017".equals(monitorDto.getCode())) {
            //当前摄像头已经被萤石云官网添加过,Code:20017
            monitorDto = getYSYMonitorInfo(getAccessToken(), deviceSerial);
            /**
             * 新增摄像头开始
             */
            String content = "{摄像头Code:" + monitor.getDeviceSerial() + ", 摄像头名称:" + monitor.getDeviceName() + " }";
            List<String> listCode = new ArrayList<>();
            listCode.add(monitor.getDeviceSerial());
            StoreOperationRecordsUtils.storeOperationData(listCode, null, "新增摄像头", content);
            /**
             * 新增摄像头结束
             */
        } else {
            result = false;
        } else if (!"200".equals(monitorDto.getCode())) {
            //当前摄像头成功被萤石云官网添加,Code:200
            throw new BusinessException(monitorDto.getMsg());
        }
        if (monitorDto.getData() == null) {
            throw new BusinessException("萤石云数据异常!");
        }
        Monitor monitor = new Monitor();
        monitor.setDeviceSerial(monitorDto.getData().getDeviceSerial());
        monitor.setDevicesCode(validateCode);
        monitor.setDeviceName(monitorDto.getData().getDeviceName());
        monitor.setEquipmentState(monitorDto.getData().getStatus());
        monitor.setIsEncrypt(monitorDto.getData().getIsEncrypt());
        monitor.setDeviceType(monitorDto.getData().getModel());
        monitor.setNetAddress(monitorDto.getData().getNetAddress());
        result = addMonitorInfoToTable(monitor);
        /**
         * 新增摄像头开始
         */
        String content = "{摄像头Code:" + monitor.getDeviceSerial() + ", 摄像头名称:" + monitor.getDeviceName() + " }";
        List<String> listCode = new ArrayList<>();
        listCode.add(monitor.getDeviceSerial());
        StoreOperationRecordsUtils.storeOperationData(listCode, null, "新增摄像头", content);
        /**
         * 新增摄像头结束
         */
        return result;
    }
@@ -337,29 +388,6 @@
            monitor.setId(one.getId());
            return updateById(monitor);
        }
    }
    /**
     * 将摄像头设备相关信息更新到数据库
     *
     * @param monitor 摄像头对象
     * @return
     */
    public boolean upDateMonitorInfo(Monitor monitor) {
        if (monitor.getId() == null) {
            throw new BusinessException("缺少摄像头相关ID参数");
        }
        Monitor info = getById(monitor.getId());
        if (info == null) {
            throw new BusinessException("找不到相关摄像头");
        }
        if (!monitor.getDevicesCode().equals(info.getDevicesCode()) || !monitor.getDeviceSerial().equals(info.getDeviceSerial())) {
            throw new BusinessException("监控序列号或监控验证码不正确");
        }
        return updateById(monitor);
    }
    /**
@@ -435,8 +463,8 @@
            /**
             * 添加摄像头备注日志记录开始
             */
            String content = "编辑摄像头:" +deviceSerial+"编辑内容:"+notes;
            List<String> list  = new ArrayList<>();
            String content = "编辑摄像头:" + deviceSerial + "编辑内容:" + notes;
            List<String> list = new ArrayList<>();
            list.add(deviceSerial);
            StoreOperationRecordsUtils.storeOperationData(list, null, "编辑摄像头", content);
            /**
@@ -449,4 +477,33 @@
    }
    /**
     * 向Redis中存入设备状态
     */
    public void setCacheData() {
        list().forEach(
                device -> {
                    RedisDeviceStatus deviceStatus = new RedisDeviceStatus();
                    deviceStatus.setDeviceId(device.getDeviceSerial());
                    if (device != null) {
                        EquipmentInfomation monitorInfo = getMonitorInfo(device.getDeviceSerial());
                        if (monitorInfo != null) {
                            if ("在线".equals(monitorInfo.getEquipmentState())) {
                                deviceStatus.setStatus(0);
                            } else {
                                deviceStatus.setStatus(1);
                            }
                        } else {
                            deviceStatus.setStatus(1);
                        }
                    }
                    redisUtils.set(DeviceRedisKey.MONITOR + device.getDeviceSerial(), JSON.toJSONString(deviceStatus));
//                    redisUtils.delete(DeviceRedisKey.MONITOR + device.getDeviceSerial());
                }
        );
    }
}