2021与蓝度共同重构项目,服务端
zhanzhiqin
2021-12-21 5c5aad749303149022a1957e2be04e9116b97397
萤石云摄像头
已修改6个文件
已添加2个文件
600 ■■■■■ 文件已修改
dao/src/main/java/com/sandu/ximon/dao/domain/Monitor.java 92 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/domain/YSY_AccessTokenDto.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/domain/YSY_MonitorDto.java 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/mapper/MonitorMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/resources/mapper/MonitorMapper.xml 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/MonitorController.java 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/param/MonitorParam.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/MonitorService.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/domain/Monitor.java
@@ -1,36 +1,86 @@
package com.sandu.ximon.dao.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Data;
/**
 * æ‘„像头
 * @TableName monitor
 */
@TableName(value ="monitor")
@Data
public class Monitor implements Serializable {
    /**
     *
     */
    @TableId(type = IdType.AUTO)
    private Long id;
    //所属人
    private Long userId;
    //监控序列号
    private String serialNumber;
    //所属灯杆
    private String belongTo;
    //地址
    private String address;
    //设备状态:在线:1/离线:0
    private int equipmentState;
    //工作状态:正常使用:1/禁止使用:0
    private int workState;
    //绑定状态:已绑定:1/未绑定:0
    private int bindingState;
    //备注
    /**
     * è®¾å¤‡åºåˆ—号
     */
    private String deviceSerial;
    /**
     * è®¾å¤‡éªŒè¯ç 
     */
    private String devicesCode;
    /**
     * è®¾å¤‡åç§°
     */
    private String deviceName;
    /**
     * è®¾å¤‡ç±»åž‹
     */
    private String deviceType;
    /**
     * åœ¨çº¿çŠ¶æ€ï¼š0-不在线,1-在线
     */
    private Integer equipmentStatus;
    /**
     * æ˜¯å¦åŠ å¯†ï¼š0-不加密,1-加密
     */
    private Integer isEncrypt;
    /**
     * å·¥ä½œçŠ¶æ€
     */
    private Integer workState;
    /**
     * ç»‘定状态
     */
    private Integer bindingState;
    /**
     * å¤‡æ³¨
     */
    private String note;
    //接入时间
    private LocalDateTime createTime;
}
    /**
     *
     */
    private LocalDateTime addTime;
    /**
     *
     */
    private LocalDateTime updateTime;
    /**
     * MAC地址
     */
    private String netAddress;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
dao/src/main/java/com/sandu/ximon/dao/domain/YSY_AccessTokenDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.sandu.ximon.dao.domain;
import lombok.Data;
/**
 * @author ZZQ
 * @date 2021/12/17 14:32
 */
@Data
public class YSY_AccessTokenDto {
    //"{\"msg\":\"操作成功!\",\"code\":\"200\",
    // \"data\":{\"accessToken\":\"at.4gl2j50x0x1qv6n60mwhc5kaa6csfend-1hr2lrhf51-1u5h20l-cxqlntrqs\",\"expireTime\":1640327042533}}"
    private String msg;
    private String code;
    private data data;
    public class data {
        private String accessToken;
        public String getAccessToken() {
            return accessToken;
        }
        public void setAccessToken(String accessToken) {
            this.accessToken = accessToken;
        }
    }
}
dao/src/main/java/com/sandu/ximon/dao/domain/YSY_MonitorDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,169 @@
package com.sandu.ximon.dao.domain;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
/**
 * @author ZZQ
 * @date 2021/12/17 15:46
 */
@Data
public class YSY_MonitorDto {
    private String code;
    private String msg;
    private data data;
    public class data {
//        {
//            "deviceSerial": "F34465099",
//                "deviceName": "DS-2DE4223IW-DE(F34465099)",
//                "localName": "DS-2DE4223IW-DE(F34465099)",
//                "model": "DS-2DE4223IW-DE",
//                "status": 1,
//                "defence": 0,
//                "isEncrypt": 1,
//                "alarmSoundMode": 0,
//                "offlineNotify": 0,
//                "category": "UNKNOWN",
//                "parentCategory": "COMMON",
//                "updateTime": 1612337396000,
//                "netType": null,
//                "signal": null,
//                "riskLevel": 0,
//                "netAddress": "119.132.57.169"
//        }
        private String deviceSerial;
        private String deviceName;
        private String localName;
        private String model;
        private Integer status;
        private Integer defence;
        private Integer isEncrypt;
        private Integer alarmSoundMode;
        private Integer offlineNotify;
        private String category;
        private String parentCategory;
        private LocalDateTime updateTime;
//        private Object netType;
//        private Object signal;
        private Integer riskLevel;
        private String netAddress;
        public String getDeviceSerial() {
            return deviceSerial;
        }
        public void setDeviceSerial(String deviceSerial) {
            this.deviceSerial = deviceSerial;
        }
        public String getDeviceName() {
            return deviceName;
        }
        public void setDeviceName(String deviceName) {
            this.deviceName = deviceName;
        }
        public String getLocalName() {
            return localName;
        }
        public void setLocalName(String localName) {
            this.localName = localName;
        }
        public String getModel() {
            return model;
        }
        public void setModel(String model) {
            this.model = model;
        }
        public Integer getStatus() {
            return status;
        }
        public void setStatus(Integer status) {
            this.status = status;
        }
        public Integer getDefence() {
            return defence;
        }
        public void setDefence(Integer defence) {
            this.defence = defence;
        }
        public Integer getIsEncrypt() {
            return isEncrypt;
        }
        public void setIsEncrypt(Integer isEncrypt) {
            this.isEncrypt = isEncrypt;
        }
        public Integer getAlarmSoundMode() {
            return alarmSoundMode;
        }
        public void setAlarmSoundMode(Integer alarmSoundMode) {
            this.alarmSoundMode = alarmSoundMode;
        }
        public Integer getOfflineNotify() {
            return offlineNotify;
        }
        public void setOfflineNotify(Integer offlineNotify) {
            this.offlineNotify = offlineNotify;
        }
        public String getCategory() {
            return category;
        }
        public void setCategory(String category) {
            this.category = category;
        }
        public String getParentCategory() {
            return parentCategory;
        }
        public void setParentCategory(String parentCategory) {
            this.parentCategory = parentCategory;
        }
        public LocalDateTime getUpdateTime() {
            return updateTime;
        }
        public void setUpdateTime(LocalDateTime updateTime) {
            this.updateTime = updateTime;
        }
        public Integer getRiskLevel() {
            return riskLevel;
        }
        public void setRiskLevel(Integer riskLevel) {
            this.riskLevel = riskLevel;
        }
        public String getNetAddress() {
            return netAddress;
        }
        public void setNetAddress(String netAddress) {
            this.netAddress = netAddress;
        }
    }
}
dao/src/main/java/com/sandu/ximon/dao/mapper/MonitorMapper.java
@@ -11,3 +11,7 @@
    List<Monitor> listMonitorByKeyword(String keyword, int equipmentState1, int equipmentState2,
                                       int bindingState1, int bindingState2);
}
dao/src/main/resources/mapper/MonitorMapper.xml
@@ -5,16 +5,19 @@
<mapper namespace="com.sandu.ximon.dao.mapper.MonitorMapper">
    <resultMap id="BaseResultMap" type="com.sandu.ximon.dao.domain.Monitor">
        <id property="id" column="id" jdbcType="BIGINT"/>
        <result property="userId" column="user_id" jdbcType="VARCHAR"/>
        <result property="serialNumber" column="serial_number" jdbcType="VARCHAR"/>
        <result property="belongTo" column="belong_to" jdbcType="VARCHAR"/>
        <result property="address" column="address" jdbcType="VARCHAR"/>
        <result property="equipmentState" column="equipment_state" jdbcType="INTEGER"/>
        <result property="workState" column="work_state" jdbcType="INTEGER"/>
        <result property="bindingState" column="binding_state" jdbcType="INTEGER"/>
        <result property="note" column="note" jdbcType="VARCHAR"/>
        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
            <id property="id" column="id" jdbcType="BIGINT"/>
            <result property="deviceSerial" column="device_serial" jdbcType="VARCHAR"/>
            <result property="devicesCode" column="devices_code" jdbcType="VARCHAR"/>
            <result property="deviceName" column="device_name" jdbcType="VARCHAR"/>
            <result property="deviceType" column="device_type" jdbcType="VARCHAR"/>
            <result property="equipmentStatus" column="equipment_status" jdbcType="INTEGER"/>
            <result property="isEncrypt" column="is_encrypt" jdbcType="INTEGER"/>
            <result property="workState" column="work_state" jdbcType="INTEGER"/>
            <result property="bindingState" column="binding_state" jdbcType="INTEGER"/>
            <result property="note" column="note" jdbcType="VARCHAR"/>
            <result property="addTime" column="add_time" jdbcType="TIMESTAMP"/>
            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
            <result property="netAddress" column="net_address" jdbcType="VARCHAR"/>
    </resultMap>
    <select id="listMonitorByKeyword" resultType="com.sandu.ximon.dao.domain.Monitor">
        SELECT    * FROM   (SELECT    * FROM    (SELECT    * FROM    monitor AS table1
@@ -25,5 +28,4 @@
        WHERE binding_state = #{bindingState1} OR binding_state = #{bindingState2};
    </select>
</mapper>
</mapper>
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/MonitorController.java
@@ -5,6 +5,7 @@
import com.sandu.ximon.admin.param.MonitorParam;
import com.sandu.ximon.admin.service.MonitorService;
import com.sandu.ximon.dao.domain.Monitor;
import com.sandu.ximon.dao.domain.YSY_MonitorDto;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
@@ -36,6 +37,13 @@
        return ResponseUtil.successPage(list);
    }
    /**
     * åˆ é™¤æ•°æ®åº“中萤石云摄像头
     *
     * @param id
     * @return
     */
    @PostMapping("/delete/{id}")
    public ResponseVO<Object> deleteMonitor(@PathVariable Long id) {
        boolean result = monitorService.deleteMonitor(id);
@@ -45,4 +53,127 @@
            return ResponseUtil.fail("操作失败");
        }
    }
    /**
     * èŽ·å–è¤çŸ³äº‘AccessToken
     *
     * @return AccessToken
     */
    @GetMapping("/getAccessToken")
    public ResponseVO<Object> getAccessToken() {
        return ResponseUtil.success(monitorService.getAccessToken());
    }
    /**
     * æ·»åŠ è¤çŸ³äº‘æ‘„åƒå¤´
     *
     * @param monitorParam æ·»åŠ æ‘„åƒå¤´ç»“æžœ
     * @return
     */
    @GetMapping("/addYSYMonitor")
    public ResponseVO<Object> addYSYMonitor(@RequestBody MonitorParam monitorParam) {
        YSY_MonitorDto addMonitorDto = monitorService.addYSYMonitor(monitorParam.getAccessToken(), monitorParam.getDeviceSerial(), monitorParam.getValidateCode());
        if ("200".equals(addMonitorDto.getCode())) {
            return ResponseUtil.success(addMonitorDto);
        } else if ("20017".equals(addMonitorDto.getCode())) {
            //已经被自己添加的摄像头需要添加到数据库
            getYSYMonitorInfoAndaddMonitorToTable(monitorParam);
            return ResponseUtil.error(20017, addMonitorDto.getMsg());
        } else {
            return ResponseUtil.fail(addMonitorDto.getMsg());
        }
    }
    /**
     * åˆ é™¤è¤çŸ³äº‘摄像头
     *
     * @param monitorParam æ·»åŠ æ‘„åƒå¤´ç»“æžœ
     * @return
     */
    @GetMapping("/deleteYSYMonitor")
    public ResponseVO<Object> deleteYSYMonitor(@RequestBody MonitorParam monitorParam) {
        YSY_MonitorDto addMonitorDto = monitorService.deleteYSYMonitor(monitorParam.getAccessToken(), monitorParam.getDeviceSerial());
        if ("200".equals(addMonitorDto.getCode())) {
            return ResponseUtil.success(addMonitorDto);
        } else {
            return ResponseUtil.fail(addMonitorDto.getMsg());
        }
    }
    /**
     * èŽ·å–å•ä¸ªè®¾å¤‡ä¿¡æ¯   getYSYMonitorInfo
     */
    @GetMapping("/getYSYMonitorInfo")
    public ResponseVO<Object> getYSYMonitorInfo(@RequestBody MonitorParam monitorParam) {
        YSY_MonitorDto getMonitorDto = monitorService.getYSYMonitorInfo(monitorParam.getAccessToken(), monitorParam.getDeviceSerial());
        if ("200".equals(getMonitorDto.getCode())) {
            return ResponseUtil.success(getMonitorDto.getData());
        } else {
            return ResponseUtil.fail(getMonitorDto.getMsg());
        }
    }
    /**
     * èŽ·å–å•ä¸ªè®¾å¤‡ä¿¡æ¯å¹¶ä¸”å­˜å‚¨åˆ°æ•°æ®åº“
     *
     * @param monitorParam
     * @return
     */
    @GetMapping("/getYSYMonitorInfoAndaddMonitorToTable")
    public ResponseVO<Object> getYSYMonitorInfoAndaddMonitorToTable(@RequestBody MonitorParam monitorParam) {
        YSY_MonitorDto getMonitorDto = monitorService.getYSYMonitorInfo(monitorParam.getAccessToken(), monitorParam.getDeviceSerial());
        if ("200".equals(getMonitorDto.getCode())) {
            Monitor monitor = new Monitor();
            monitor.setDeviceSerial(getMonitorDto.getData().getDeviceSerial());
            monitor.setDevicesCode(monitorParam.getValidateCode());
            monitor.setDeviceName(getMonitorDto.getData().getDeviceName());
            monitor.setDeviceType(getMonitorDto.getData().getModel());
            monitor.setEquipmentStatus(getMonitorDto.getData().getStatus());
            monitor.setIsEncrypt(getMonitorDto.getData().getIsEncrypt());
            monitor.setAddTime(getMonitorDto.getData().getUpdateTime());
            monitor.setNetAddress(getMonitorDto.getData().getNetAddress());
            boolean flag = monitorService.addMonitorInfoToTable(monitor);
            if (flag) {
                return ResponseUtil.success("储存摄像头设备信息成功!");
            } else {
                return ResponseUtil.fail("储存摄像头设备信息失败!");
            }
        } else {
            return ResponseUtil.fail(getMonitorDto.getMsg());
        }
    }
    /**
     *     ç¼–辑摄像头设备信息
     */
    /**
     * èŽ·å–å•ä¸ªè®¾å¤‡ä¿¡æ¯   getYSYMonitorInfo
     */
    @PostMapping("/UpDateMonitorInfo")
    public ResponseVO<Object> UpDateMonitorInfo(@RequestBody MonitorParam monitorParam) {
        Monitor monitor = new Monitor();
        monitor.setId(monitorParam.getId());
        monitor.setDeviceSerial(monitorParam.getDeviceSerial());
        monitor.setDevicesCode(monitorParam.getDevicesCode());
        monitor.setWorkState(monitorParam.getWorkState());
        monitor.setNote(monitorParam.getNote());
        boolean falg = monitorService.upDateMonitorInfo(monitorParam);
        if (falg) {
            return ResponseUtil.success("更新数据成功");
        } else {
            return ResponseUtil.fail("更新数据失败");
        }
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/param/MonitorParam.java
@@ -1,15 +1,31 @@
package com.sandu.ximon.admin.param;
import com.sandu.ximon.dao.domain.Monitor;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import java.io.Serializable;
@Data
public class MonitorParam {
public class MonitorParam extends Monitor implements Serializable {
    private String keyword;
    @NotEmpty
    private int equipmentState;
    private Integer equipmentState;
    @NotEmpty
    private int bindingState;
    private Integer bindingState;
    /**
     * +
     * å¼€å§‹è¤çŸ³äº‘摄像头相关参数
     */
    //授权过程获取的access_token
    private String accessToken;
    //设备序列号,存在英文字母的设备序列号,字母需为大写
    private String deviceSerial;
    //设备验证码,设备机身上的六位大写字母
    private String validateCode;
    /**
     * ç»“束萤石云摄像头相关参数
     */
}
ximon-admin/src/main/java/com/sandu/ximon/admin/service/MonitorService.java
@@ -1,24 +1,43 @@
package com.sandu.ximon.admin.service;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.sandu.common.execption.BusinessException;
import com.sandu.common.service.impl.BaseServiceImpl;
import com.sandu.ximon.admin.param.BannerParam;
import com.sandu.ximon.admin.param.MonitorParam;
import com.sandu.ximon.dao.domain.Banner;
import com.sandu.ximon.dao.domain.Monitor;
import com.sandu.ximon.dao.domain.YSY_AccessTokenDto;
import com.sandu.ximon.dao.domain.YSY_MonitorDto;
import com.sandu.ximon.dao.mapper.MonitorMapper;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
@AllArgsConstructor
public class MonitorService extends BaseServiceImpl<MonitorMapper, Monitor> {
    private final MonitorMapper monitorMapper;
    //萤石云AppKey
    private static final String AppKey = "51a534ebadf54c31a0848dc575dfa206";
    //萤石云 AppKey Secret
    private static final String Secret = "8c32c67a73c87b9e461b2e3bdf58967a";
    //萤石云地址
    private static final String YSY_URL = "https://open.ys7.com/api/lapp";
    //获取萤石云accessToken地址
    private static final String ACCESSTOKEN_URL = "/token/get";
    //添加萤石云摄像头
    private static final String ADD_DEVICE_URL = "/device/add";
    //删除萤石云摄像头
    private static final String DELETE_DEVICE_URL = "/device/delete";
    //获取萤石云单个设备信息
    private static final String GET_DEVICE_URL = "/device/info";
    /**
     * æŸ¥è¯¢å…¨éƒ¨æ‘„像头
@@ -76,5 +95,110 @@
        return removeById(Id);
    }
    /**
     * èŽ·å–è¤çŸ³äº‘accessToken
     */
    public String getAccessToken() {
        Map<String, Object> paramMap = new HashMap<>();
        paramMap.put("appKey", AppKey);
        paramMap.put("appSecret", Secret);
        String s = HttpUtil.post(YSY_URL + ACCESSTOKEN_URL, paramMap);
        YSY_AccessTokenDto accessTokenDto = JSON.parseObject(s, YSY_AccessTokenDto.class);
        return accessTokenDto.getData().getAccessToken();
    }
    /**
     * æ·»åŠ è¤çŸ³äº‘æ‘„åƒå¤´
     *
     * @param accessToken  æŽˆæƒè¿‡ç¨‹èŽ·å–çš„access_token
     * @param deviceSerial è®¾å¤‡åºåˆ—号,存在英文字母的设备序列号,字母需为大写
     * @param validateCode è®¾å¤‡éªŒè¯ç ï¼Œè®¾å¤‡æœºèº«ä¸Šçš„六位大写字母
     */
    public YSY_MonitorDto addYSYMonitor(String accessToken, String deviceSerial, String validateCode) {
        Map<String, Object> paramMap = new HashMap<>();
        paramMap.put("accessToken", accessToken);
        paramMap.put("deviceSerial", deviceSerial);
        paramMap.put("validateCode", validateCode);
        String s = HttpUtil.post(YSY_URL + ADD_DEVICE_URL, paramMap);
        System.out.println(s);
        YSY_MonitorDto monitorDto = JSON.parseObject(s, YSY_MonitorDto.class);
        return monitorDto;
    }
    /**
     * åˆ é™¤è¤çŸ³äº‘摄像头
     *
     * @param accessToken  æŽˆæƒè¿‡ç¨‹èŽ·å–çš„access_token
     * @param deviceSerial è®¾å¤‡åºåˆ—号,存在英文字母的设备序列号,字母需为大写
     */
    public YSY_MonitorDto deleteYSYMonitor(String accessToken, String deviceSerial) {
        Map<String, Object> paramMap = new HashMap<>();
        paramMap.put("accessToken", accessToken);
        paramMap.put("deviceSerial", deviceSerial);
        String s = HttpUtil.post(YSY_URL + DELETE_DEVICE_URL, paramMap);
        System.out.println(s);
        YSY_MonitorDto monitorDto = JSON.parseObject(s, YSY_MonitorDto.class);
        return monitorDto;
    }
    /**
     * èŽ·å–è¤çŸ³äº‘æ‘„åƒå¤´å•ä¸ªè®¾å¤‡ä¿¡æ¯
     *
     * @param accessToken  æŽˆæƒè¿‡ç¨‹èŽ·å–çš„access_token
     * @param deviceSerial è®¾å¤‡åºåˆ—号,存在英文字母的设备序列号,字母需为大写
     */
    public YSY_MonitorDto getYSYMonitorInfo(String accessToken, String deviceSerial) {
        Map<String, Object> paramMap = new HashMap<>();
        paramMap.put("accessToken", accessToken);
        paramMap.put("deviceSerial", deviceSerial);
        String s = HttpUtil.post(YSY_URL + GET_DEVICE_URL, paramMap);
        System.out.println(s);
        YSY_MonitorDto monitor = JSON.parseObject(s, YSY_MonitorDto.class);
        return monitor;
    }
    /**
     * å°†æ‘„像头设备相关信息存储到数据库
     *
     * @param monitor æ‘„像头对象
     * @return
     */
    public boolean addMonitorInfoToTable(Monitor monitor) {
        Monitor one = getOne(Wrappers.lambdaQuery(Monitor.class).eq(Monitor::getDeviceSerial, monitor.getDeviceSerial()));
        if (one == null) {
            return save(monitor);
        } else {
            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);
    }
}