package com.njcn.user.pojo.po;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.njcn.db.bo.BaseEntity;

import java.time.LocalDateTime;

import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.web.multipart.MultipartFile;

/**
 * @author hongawen
 * @since 2021-12-13
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_user")
public class User extends BaseEntity {

    private static final long serialVersionUID = 1L;

    /**
     * 用户ID
     */
    private String id;

    /**
     * 用户名
     */
    private String name;

    /**
     * 登录名
     */
    private String loginName;

    /**
     * 密码
     */
    private String password;

    /**
     * 部门Id
     */
    private String deptId;

    /**
     * 电话号码
     */
    private String phone;

    /**
     * 邮箱
     */
    private String email;

    /**
     * 用户状态0-删除；1-正常；2-锁定；3-待审核；4-休眠；5-密码过期
     */
    private Integer state;

    /**
     * 用户类型 0:超级管理员；1:管理员；2:普通用户
     */
    private Integer type;

    /**
     * 数据来源：0-外部推送；1-正常新增；默认正常新增
     */
    private Integer origin;

    /**
     * 用户类型：0-临时用户 1-正式用户
     */
    private Integer casualUser;

    /**
     * 密码状态：0-不需要修改 1-需要修改
     */
    private Integer pwdState;

    /**
     * 短信通知（0-不通知；1-通知）默认不通知
     */
    private Integer smsNotice;

    /**
     * 邮件通知（0-不通知；1-通知）默认不通知
     */
    private Integer emailNotice;

    /**
     * 推荐码
     */
    private String referralCode;

    /**
     * 注册时间
     */
    private LocalDateTime registerTime;

    /**
     * 密码有效期字段（初始化的时候跟注册时间一样）
     */
    private LocalDateTime pwdValidity;

    /**
     * 最后一次登录时间
     */
    private LocalDateTime loginTime;

    /**
     * 限制登录起始IP
     */
    private String limitIpStart;

    /**
     * 限制登录结束IP
     */
    private String limitIpEnd;

    /**
     * 限制登录时间段（用'-'分割）
     */
    private String limitTime;

    /**
     * 密码错误次数
     */
    private Integer loginErrorTimes;

    /**
     * 首次密码错误时间（半个小时错误次数超过N次数则锁定，解锁后密码错误次数、首次密码错误时间重置）
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime firstErrorTime;

    /**
     * 用户密码错误锁定时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime lockTime;

    private String devCode;

    private String headSculpture;
}
