package com.sptg.iot.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.IdType;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;

/**
 * @author zwx
 * @create 2020/10/22 10:22
 */
@Setter
@Getter
@TableName(value = "iot_device")
public class IotDevice {

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

    /**
     * 设备sn号
     */
    @TableField(value = "s_device_id")
    private String device_id;

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

    /**
     * 操作人
     */
    @TableField(value = "s_operator")
    private String operator;

    /**
     * 操作人
     */
    @TableField(value = "s_auto_observer")
    private String auto_observer;

    /**
     * 设备厂商编号,从厂商列表接口获取对应信息
     */
    @TableField(value = "s_manufacturers_no")
    private String manufacturers_no;

    /**
     * 厂商名
     */
    @TableField(value = "s_manufacturer")
    private String manufacturer;

    /**
     * 上线状态 1 已上线 2 未上线
     */
    @TableField(value = "s_defense_status")
    private Integer defense_status;

    /**
     * 设备类型,从设备类型接口获取相关信息
     */
    @TableField(value = "s_device_type")
    private String device_type;

    /**
     * 设备状态 1 正常 2 告警 3 失联 4 停用(弃用) 5 初始化
     */
    @TableField(value = "s_status")
    private String status;

    /**
     * 设备类型名称
     */
    @TableField(value = "s_type_name")
    private String type_name;

    /**
     * 经纬度(若为空返回 null)
     */
    @TableField(value = "s_latitude_longitude")
    private String latitude_longitude;

    /**
     * 安装位置(若为空返回 null)
     */
    @TableField(value = "s_device_install_address")
    private String device_install_address;

    /**
     * 区域位置(若为空返回 null)
     */
    @TableField(value = "s_dist_locate")
    private String dist_locate;

    /**
     *
     */
    @TableField(value = "s_is_aep ")
    private String is_aep;

    /**
     * 设备分组
     */
    @TableField(value = "s_tag")
    private String tag;

    /**
     * 设备型号,从设备型号列表接口获取对应信息
     */
    @TableField(value = "s_device_specld")
    private String device_specld;

    /**
     * 设备型号名称
     */
    @TableField(value = "s_device_specname")
    private String device_specname;

    /**
     * 设备通信协议 1NB,\r\n2：LWM2M，3：HTTP，4：TCP，5：MQTT，6 厂商协议。如果协议 与真实设备不匹配可能导致无法接收数据
     */
    @TableField(value = "s_protocol_type")
    private String protocol_type;

    /**
     * 产品,对应 aep 产品的 apikey (若为空返回 null)
     */
    @TableField(value = "s_master_key")
    private String master_key;

    /**
     * 产品 ID(若为空返回 null)
     */
    @TableField(value = "s_product_id")
    private String product_id;

    /**
     * 资产编号(若为空返回 null)
     */
    @TableField(value = "s_device_server_id")
    private String device_server_id;

    /**
     * 区域 id(若为空返回 null)
     */
    @TableField(value = "s_area")
    private String area;

    /**
     * 人员 id(若为空返回 null)
     */
    @TableField(value = "s_person_id")
    private String person_id;

    /**
     * 组织 id(若为空返回 null)
     */
    @TableField(value = "s_organization")
    private String organization;

    /**
     * 图片 id(若为空返回 null)
     */
    @TableField(value = "s_device_image")
    private String device_image;

    /**
     * uuid
     */
    @TableField(value = "s_uuid")
    private String uuid;

    /**
     *
     */
    @TableField(value = "s_did")
    private String did;

    /**
     * 数据字段，见附录
     */
    @TableField(value = "s_metric")
    private String metric;

    /**
     * 数值
     */
    @TableField(value = "s_device_data")
    private String device_data;

    /**
     * 所属应用ID
     */
    @TableField(value = "s_app_id")
    private String appId;

    /**
     * 地址前缀
     */
    @TableField(value = "s_prefix")
    private String prefix;

    /**
     * 最新同步更新时间
     */
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    @TableField(value = "t_last_sync_date")
    private Date lastSyncDate;

    /**
     * 最新同步更新时间
     */
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    @TableField(value = "t_last_heartbeat_date")
    private Date lastHeartbeatDate;

    /**
     * 最新同步更新时间
     */
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    @TableField(value = "t_last_status_change_date")
    private Date lastStatusChangeDate;

    /**
     * 电量（%）
     */
    @TableField(value = "s_electric_quantity")
    private String electric_quantity;
    /**
     *  信号强度
     */
    @TableField(value = "s_signal_intensity")
    private String signal_intensity;
    /**
     *  信号强度
     */
    @TableField(value = "s_signalPower")
    private String signalPower;
    /**
     * 温度
     */
    @TableField(value = "s_temperature")
    private String temperature;

    /**
     * 小区位置信息
     */
    @TableField(value = "s_cell_id")
    private String cell_id;
    /**
     * 电池电量 百分比/%
     */
    @TableField(value = "s_battery_value")
    private String battery_value;
    /**
     * 电池电压 伏特/V
     */
    @TableField(value = "s_battery_voltage")
    private String battery_voltage;
    /**
     * 心跳周期 小时/h
     */
    @TableField(value = "s_heartbeat_time")
    private String heartbeat_time;

    @TableField(value = "s_IMEI")
    private String IMEI;
    @TableField(value = "s_IMSI")
    private String IMSI;
    @TableField(value = "s_ICCID")
    private String ICCID;
    /**
     * 物理小区标识
     */
    @TableField(value = "s_pci")
    private String pci;

    /**
     *
     */
    @TableField(value = "s_psk_value")
    private String psk_value;

    /**
     * 设备个性化数据
     * 比如烟感、气感、井盖，都有自己特定的数据字段
     * 统一用该字段保存，前端去解析
     */
    @TableField(value = "s_special_data")
    private String specialData;

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

    @TableField(value = "s_monitor_value")
    private String monitorValue;

    @TableField(value = "s_tenant_id")
    private String tenantId;
}
