package com.java2nb.system.domain;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.java2nb.common.jsonserializer.LongToStringSerializer;
import org.springframework.format.annotation.DateTimeFormat;

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


/**
 * 数据权限管理
 *
 * @author xiongxy
 * @email 1179705413@qq.com
 * @date 2019-11-25 11:40:03
 */
public class DataPermDO implements Serializable {

    private static final long serialVersionUID = 1L;


    //
    //java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值)
    //所以通过序列化成字符串来解决
    @JsonSerialize(using = LongToStringSerializer.class)
    private Long id;
    //权限名称
    private String name;
    //数据表名称
    private String tableName;
    //所属模块
    private String moduleName;
    //用户权限控制属性名
    private String crlAttrName;
    //数据表权限控制列名
    private String crlColumnName;
    //权限code，all_开头表示查看所有数据的权限，sup_开头表示查看下级数据的权限，own_开头表示查看本级数据的权限
    private String permCode;
    //排序
    private Integer orderNum;
    //创建时间
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date gmtCreate;
    //修改时间
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date gmtModified;

    /**
     * 设置：
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * 获取：
     */
    public Long getId() {
        return id;
    }

    /**
     * 设置：权限名称
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取：权限名称
     */
    public String getName() {
        return name;
    }

    /**
     * 设置：数据表名称
     */
    public void setTableName(String tableName) {
        this.tableName = tableName;
    }

    /**
     * 获取：数据表名称
     */
    public String getTableName() {
        return tableName;
    }

    /**
     * 设置：所属模块
     */
    public void setModuleName(String moduleName) {
        this.moduleName = moduleName;
    }

    /**
     * 获取：所属模块
     */
    public String getModuleName() {
        return moduleName;
    }

    /**
     * 设置：用户权限控制属性名
     */
    public void setCrlAttrName(String crlAttrName) {
        this.crlAttrName = crlAttrName;
    }

    /**
     * 获取：用户权限控制属性名
     */
    public String getCrlAttrName() {
        return crlAttrName;
    }

    /**
     * 设置：数据表权限控制列名
     */
    public void setCrlColumnName(String crlColumnName) {
        this.crlColumnName = crlColumnName;
    }

    /**
     * 获取：数据表权限控制列名
     */
    public String getCrlColumnName() {
        return crlColumnName;
    }

    /**
     * 设置：权限code，all_开头表示查看所有数据的权限，sup_开头表示查看下级数据的权限，own_开头表示查看本级数据的权限
     */
    public void setPermCode(String permCode) {
        this.permCode = permCode;
    }

    /**
     * 获取：权限code，all_开头表示查看所有数据的权限，sup_开头表示查看下级数据的权限，own_开头表示查看本级数据的权限
     */
    public String getPermCode() {
        return permCode;
    }

    /**
     * 设置：排序
     */
    public void setOrderNum(Integer orderNum) {
        this.orderNum = orderNum;
    }

    /**
     * 获取：排序
     */
    public Integer getOrderNum() {
        return orderNum;
    }

    /**
     * 设置：创建时间
     */
    public void setGmtCreate(Date gmtCreate) {
        this.gmtCreate = gmtCreate;
    }

    /**
     * 获取：创建时间
     */
    public Date getGmtCreate() {
        return gmtCreate;
    }

    /**
     * 设置：修改时间
     */
    public void setGmtModified(Date gmtModified) {
        this.gmtModified = gmtModified;
    }

    /**
     * 获取：修改时间
     */
    public Date getGmtModified() {
        return gmtModified;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        DataPermDO that = (DataPermDO) o;
        return Objects.equals(id, that.id) && Objects.equals(name, that.name)
            && Objects.equals(tableName, that.tableName) && Objects.equals(moduleName, that.moduleName)
            && Objects.equals(crlAttrName, that.crlAttrName) && Objects.equals(crlColumnName,
            that.crlColumnName) && Objects.equals(permCode, that.permCode) && Objects.equals(orderNum,
            that.orderNum) && Objects.equals(gmtCreate, that.gmtCreate) && Objects.equals(gmtModified,
            that.gmtModified);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name, tableName, moduleName, crlAttrName, crlColumnName, permCode, orderNum, gmtCreate,
            gmtModified);
    }
}
