package com.mortals.xhx.module.device.model;
import java.util.List;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
import com.mortals.framework.annotation.Excel;
import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.module.device.model.vo.DeviceVo;
import com.mortals.xhx.module.device.model.DeviceTopicEntity;
/**
* 设备实体对象
*
* @author zxfei
* @date 2021-11-19
*/

public class DeviceEntity extends DeviceVo {
    private static final long serialVersionUID = 1L;

    /**
    * 用户ID
    */
    private Long customerId;
    /**
    * 产品
    */
    private Long productId;
    /**
    * 设备名称，设置设备名称。 设备名称在产品内具有唯一性。支持英文字母、数字、短划线（-）、下划线（_）、at（@）、英文句号（.）和英文冒号（:），长度限制为4~32个字符。
    */
    private String deviceName;
    /**
    * 设备备注，设置备注名称。支持中文、英文字母、日文、数字和下划线（_），长度限制为4~64个字符，
    */
    private String deviceRemark;
    /**
    * 平台为设备颁发的设备密钥，用于认证加密。需与DeviceName成对使用。
    */
    private String deviceSecret;
    /**
    * 平台为产品颁发的全局唯一标识符
    */
    private String productKey;
    /**
    * 连接状态，(0.离线，1.在线，2.未激活)
    */
    private Integer connectStatus;
    /**
    * 启用状态 (0.停用，1.启用，2.测试)
    */
    private Integer useStatus;
    /**
    * 最近上线时间
    */
    private Date onlineTime;
    /**
    * 最近离线时间
    */
    private Date offlineTime;

    /**
    * 设备topic信息
    */
    private List<DeviceTopicEntity> deviceTopicList=new ArrayList<>();


    public DeviceEntity(){}
    /**
    * 获取 用户ID
    * @return Long
    */
    public Long getCustomerId(){
        return customerId;
    }
    /**
    * 设置 用户ID
    * @param customerId
    */
    public void setCustomerId(Long customerId){
        this.customerId = customerId;
    }
    /**
    * 获取 产品
    * @return Long
    */
    public Long getProductId(){
        return productId;
    }
    /**
    * 设置 产品
    * @param productId
    */
    public void setProductId(Long productId){
        this.productId = productId;
    }
    /**
    * 获取 设备名称，设置设备名称。 设备名称在产品内具有唯一性。支持英文字母、数字、短划线（-）、下划线（_）、at（@）、英文句号（.）和英文冒号（:），长度限制为4~32个字符。
    * @return String
    */
    public String getDeviceName(){
        return deviceName;
    }
    /**
    * 设置 设备名称，设置设备名称。 设备名称在产品内具有唯一性。支持英文字母、数字、短划线（-）、下划线（_）、at（@）、英文句号（.）和英文冒号（:），长度限制为4~32个字符。
    * @param deviceName
    */
    public void setDeviceName(String deviceName){
        this.deviceName = deviceName;
    }
    /**
    * 获取 设备备注，设置备注名称。支持中文、英文字母、日文、数字和下划线（_），长度限制为4~64个字符，
    * @return String
    */
    public String getDeviceRemark(){
        return deviceRemark;
    }
    /**
    * 设置 设备备注，设置备注名称。支持中文、英文字母、日文、数字和下划线（_），长度限制为4~64个字符，
    * @param deviceRemark
    */
    public void setDeviceRemark(String deviceRemark){
        this.deviceRemark = deviceRemark;
    }
    /**
    * 获取 平台为设备颁发的设备密钥，用于认证加密。需与DeviceName成对使用。
    * @return String
    */
    public String getDeviceSecret(){
        return deviceSecret;
    }
    /**
    * 设置 平台为设备颁发的设备密钥，用于认证加密。需与DeviceName成对使用。
    * @param deviceSecret
    */
    public void setDeviceSecret(String deviceSecret){
        this.deviceSecret = deviceSecret;
    }
    /**
    * 获取 平台为产品颁发的全局唯一标识符
    * @return String
    */
    public String getProductKey(){
        return productKey;
    }
    /**
    * 设置 平台为产品颁发的全局唯一标识符
    * @param productKey
    */
    public void setProductKey(String productKey){
        this.productKey = productKey;
    }
    /**
    * 获取 连接状态，(0.离线，1.在线，2.未激活)
    * @return Integer
    */
    public Integer getConnectStatus(){
        return connectStatus;
    }
    /**
    * 设置 连接状态，(0.离线，1.在线，2.未激活)
    * @param connectStatus
    */
    public void setConnectStatus(Integer connectStatus){
        this.connectStatus = connectStatus;
    }
    /**
    * 获取 启用状态 (0.停用，1.启用，2.测试)
    * @return Integer
    */
    public Integer getUseStatus(){
        return useStatus;
    }
    /**
    * 设置 启用状态 (0.停用，1.启用，2.测试)
    * @param useStatus
    */
    public void setUseStatus(Integer useStatus){
        this.useStatus = useStatus;
    }
    /**
    * 获取 最近上线时间
    * @return Date
    */
    public Date getOnlineTime(){
        return onlineTime;
    }
    /**
    * 设置 最近上线时间
    * @param onlineTime
    */
    public void setOnlineTime(Date onlineTime){
        this.onlineTime = onlineTime;
    }
    /**
    * 获取 最近离线时间
    * @return Date
    */
    public Date getOfflineTime(){
        return offlineTime;
    }
    /**
    * 设置 最近离线时间
    * @param offlineTime
    */
    public void setOfflineTime(Date offlineTime){
        this.offlineTime = offlineTime;
    }


    public List<DeviceTopicEntity> getDeviceTopicList(){
      return deviceTopicList;
    }

    public void setDeviceTopicList(List<DeviceTopicEntity> deviceTopicList){
        this.deviceTopicList = deviceTopicList;
    }


    @Override
    public int hashCode() {
         return this.getId().hashCode();
    }
    @Override
    public boolean equals(Object obj) {
        if (obj == null) return false;
        if (obj instanceof DeviceEntity) {
            DeviceEntity tmp = (DeviceEntity) obj;
            if (this.getId() == tmp.getId()) {
                 return true;
            }
        }
        return false;
    }

    public String toString(){
        StringBuilder sb = new StringBuilder("");
        sb.append(",customerId:").append(getCustomerId());
        sb.append(",productId:").append(getProductId());
        sb.append(",deviceName:").append(getDeviceName());
        sb.append(",deviceRemark:").append(getDeviceRemark());
        sb.append(",deviceSecret:").append(getDeviceSecret());
        sb.append(",productKey:").append(getProductKey());
        sb.append(",connectStatus:").append(getConnectStatus());
        sb.append(",useStatus:").append(getUseStatus());
        sb.append(",onlineTime:").append(getOnlineTime());
        sb.append(",offlineTime:").append(getOfflineTime());
        return sb.toString();
    }

    public void initAttrValue(){
            this.customerId = null;
            this.productId = null;
            this.deviceName = null;
            this.deviceRemark = null;
            this.deviceSecret = null;
            this.productKey = null;
            this.connectStatus = 2;
            this.useStatus = 1;
            this.onlineTime = new Date();
            this.offlineTime = new Date();
    }
}