package com.sptg.video.cloud.api.entity;

import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.FieldStrategy;
import com.baomidou.mybatisplus.enums.IdType;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.util.Date;

/**
 * @author zwx
 * @create 2020/10/15 15:31
 * 设备信息
 */
@Setter
@Getter
@TableName(value = "vc_device")
public class VCDevice implements Serializable {

    /**
     * 主键Id
     */
    @TableId(value = "l_id",type = IdType.AUTO)
    private Long id;

    /**
     * 设备编号
     */
    @TableField(value = "l_device_id")
    private Long deviceId;

    /**
     * 设备名称
     */
    @TableField(value = "s_device_name")
    private String deviceName;

    /**
     * 设备号
     */
    @TableField(value = "s_device_num")
    private String deviceNum;

    /**
     * 设备密码
     */
    @TableField(value = "s_device_password")
    private String password;

    /**
     * 设备类型(132:IPC;111:DVR;118:NVR,114:解码器)
     */
    @TableField(value = "i_device_type")
    private Integer deviceType;

    /**
     * 型号
     */
    @TableField(value = "s_model_sequence")
    private String modelSequence;

    /**
     * 协议类型(1:GB28181，2:ONVIF)
     */
    @TableField(value = "s_protocol_type")
    private String protocolType;

    /**
     * 是否在线(0:不在线，1:在线)
     */
    @TableField(value = "i_is_online")
    private Integer isOnline;

    /**
     * 是否支持云存储(0:不支持，1:支持)
     */
    @TableField(value = "i_is_support_cloud_storage")
    private Integer isSupportCloudStorage;

    /**
     * 是否支持本地存储(0:不支持，1:支持)
     */
    @TableField(value = "i_is_support_local_storage")
    private Integer isSupportLocalStorage;

    /**
     * 是否支持云台(0:不支持，1:支持)
     */
    @TableField(value = "i_is_support_ptz")
    private Integer isSupportPtz;

    /**
     * 是否支持移动侦测(0:不支持，1:支持)
     */
    @TableField(value = "i_is_support_motion_detection")
    private Integer isSupportMotionDetection;

    /**
     * 是否支持手动报警(0:不支持，1:支持)
     */
    @TableField(value = "i_is_support_manual_alarm")
    private Integer isSupportManualAlarm;

    /**
     * 是否支持外部开关报警(0:不支持，1:支持)
     */
    @TableField(value = "i_is_support_external_alarm_switch")
    private Integer isSupportExternalAlarmSwitch;

    /**
     * 设备是否有反转倒置能力(0:否，1:是)
     */
    @TableField(value = "i_is_have_inversion")
    private Integer isHaveInversion;

    /**
     * 云存储类别(0:无云存储，1:电信分布式存储，2:21cn存储)
     */
    @TableField(value = "i_cloud_storage_type")
    private Integer cloudStorageType;

    /**
     * 云存储配置id
     */
    @TableField(value = "l_cloud_storage_conf_id")
    private Long cloudStorageConfId;

    /**
     * 视频流获取方式(0:主动推流，1:主动拉取流)
     */
    @TableField(value = "i_stream_type")
    private Integer streamType;

    /**
     * 设备地址
     */
    @TableField(value = "s_address")
    private String address;

    /**
     * 是否拥有者(0:否，1:是)
     */
    @TableField(value = "i_is_owner")
    private Integer isOwner;

    /**
     * 所属NVR的编号
     */
    @TableField(value = "s_parent_nvr_num")
    private String parentNvrNum;

    /**
     * 告警状态（0：正常；1：告警）
     */
    @TableField(value = "i_alarm_status")
    private Integer alarmStatus;

    /**
     * 经度
     */
    @TableField(value = "s_longitude")
    private String longitude;

    /**
     * 纬度
     */
    @TableField(value = "s_latitude")
    private String latitude;

    /**
     * 维护人员信息
     */
    @TableField(value = "s_maintainer")
    private String maintainer;

    /**
     * 是否封存，true封存（1：封存，0：不封存）
     */
    @TableField(value = "i_block")
    private Integer block;

    /**
     * 封存时间
     */
    @TableField(value = "s_block_time")
    private String blockTime;

    /**
     * 路由器id
     */
    @TableField(value = "l_route_id")
    private Long routeId;

    /**
     * 摄像头类型 G：枪机 D：球机
     */
    @TableField(value = "s_equip_type")
    private String equipType;

    /**
     * 设备最后状态更新时间
     */
    @TableField(value = "s_update_state_time_string")
    private String updateStateTimeString;

    /**
     * 设备监控位id
     */
    @TableField(value = "l_district_id")
    private Long districtId;

    /**
     * 机构树位置
     */
    @TableField(value = "s_org_position")
    private String orgPosition;

    /**
     * 记录创建时间
     */
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    @TableField(value = "t_create_date")
    private Date createDate;

    /**
     * 记录更新时间
     */
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    @TableField(value = "t_update_date")
    private Date updateDate;

    /**
     * rtsp视频播放地址
     */
    @TableField(value = "s_rtsp_url")
    private String rtspUrl;

    /**
     * http-flv视频播放地址
     */
    @TableField(value = "s_http_flv_url")
    private String httpFlvUrl;

    /**
     * 所属账户
     */
    @TableField(value = "s_account_name")
    private String accountName;

    /**
     * 推流状态
     * 0：running，推流进行中
     * 1：not existing，不存在该流
     * 3：waiting，等待调度推流中，该状态较少见
     */
    @TableField(value = "i_pusher_status")
    private Integer pusherStatus;

    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    @TableField(value = "t_last_push_time")
    private Date lastPushTime;

    /**
     * 推流唯一key，可用于删除该流
     */
    @TableField(value = "s_key", strategy = FieldStrategy.IGNORED)
    private String key;

    /**
     * flv播放地址
     */
    @TableField(value = "s_flv_url")
    private String flvUrl;

    /**
     * mp4播放地址
     */
    @TableField(value = "s_mp4_url")
    private String mp4Url;

    /**
     * m3u8播放地址
     */
    @TableField(value = "s_m3u8_url")
    private String m3u8Url;
}
