package com.hzs.common.domain.system.sys;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.hzs.common.core.annotation.Transaction;
import com.hzs.common.core.constant.EnumsPrefixConstants;
import com.hzs.common.core.constant.MagicNumberConstants;
import lombok.Data;
import com.hzs.common.core.annotation.Excel;

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

/**
 * 角色表 sys_role
 *
 * @author hzs
 */
@Data
@KeySequence("SYS_ROLE_ROLE_ID_SEQ")
@TableName("SYS_ROLE")
public class SysRole implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 角色ID
     */
    @TableId("ROLE_ID")
    private Long roleId;

    /**
     * 角色名称
     */
    @Excel(name = "角色姓名")
    private String roleName;

    /**
     * 角色权限
     */
    @Excel(name = "权限字符")
    private String roleKey;

    /**
     * 角色排序
     */
    @Excel(name = "显示排序")
    private Integer roleSort;

    /**
     * 数据范围（0=全部，1=按地区）
     */
    @Excel(name = "数据范围", readConverterExp = "0=全部,1=按地区")
    private Integer dataScope;

    /**
     * 状态（0正常 1停用）
     */
    @Transaction(transactionKey = EnumsPrefixConstants.NORMAL_DISABLE)
    @Excel(name = "状态", readConverterExp = "0=正常,1=停用")
    private Integer status;
    /**
     * 角色状态显示
     */
    private String statusVal;

    /**
     * 创建人
     */
    @TableField("PK_CREATOR")
    private Long pkCreator;

    /**
     * 创建时间
     */
    @Excel(name = "创建时间", dateFormat = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField("CREATION_TIME")
    private Date creationTime;

    /**
     * 修改人
     */
    @TableField("PK_MODIFIED")
    private Long pkModified;

    /**
     * 修改时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField("MODIFIED_TIME")
    private Date modifiedTime;

    /**
     * 逻辑删除 (0=未删除，1已删除)
     */
    @JsonIgnore
    @TableLogic
    @TableField("DEL_FLAG")
    private Integer delFlag;

    /**
     * 范围ID列表
     */
    private List<Long> scopeIdList;

    private List<SysUser> sysUserList;

    public SysRole() {

    }

    public SysRole(Long roleId) {
        this.roleId = roleId;
    }

    public static boolean isAdmin(Long roleId) {
        return MagicNumberConstants.PK_ADMIN.equals(roleId);
    }

}
