package com.gxwebsoft.common.system.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 用户
 *
 * @author WebSoft
 * @since 2018-12-24 16:10:13
 */
@Data
@Schema(description = "用户")
@TableName("sys_user")
public class UserInfo {
    private static final long serialVersionUID = 1L;

    @Schema(description = "用户id")
    @TableId(type = IdType.AUTO)
    private Integer userId;

    @Schema(description = "用户类型, 0普通用户 6开发者 10企业用户")
    private Integer type;

    @Schema(description = "用户编码")
    private String userCode;

    @Schema(description = "账号")
    private String username;

    @Schema(description = "密码")
    private String password;

    @Schema(description = "昵称")
    private String nickname;

    @Schema(description = "头像")
    private String avatar;

    @Schema(description = "头像")
    private String bgImage;

    @Schema(description = "性别, 字典标识")
    private String sex;

    @Schema(description = "手机号")
    private String phone;

    @Schema(description = "邮箱")
    private String email;

    @Schema(description = "职务")
    private String position;

    @Schema(description = "邮箱是否验证, 0否, 1是")
    private Integer emailVerified;

    @Schema(description = "别名")
    private String alias;

    @Schema(description = "真实姓名")
    private String realName;

    @Schema(description = "身份证号")
    private String idCard;

    @Schema(description = "出生日期")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime birthday;

    @Schema(description = "年龄")
    private Integer age;

    @Schema(description = "所在国家")
    private String country;

    @Schema(description = "所在省份")
    private String province;

    @Schema(description = "所在城市")
    private String city;

    @Schema(description = "所在辖区")
    private String region;

    @Schema(description = "街道地址")
    private String address;

    @Schema(description = "经度")
    private String longitude;

    @Schema(description = "纬度")
    private String latitude;

    @Schema(description = "用户可用余额")
    private BigDecimal balance;

    @Schema(description = "用户可用积分")
    private Integer points;

    @Schema(description = "用户总支付的金额")
    private String payMoney;

    @Schema(description = "实际消费的金额(不含退款)")
    private String expendMoney;

    @Schema(description = "会员等级ID")
    private Integer gradeId;

    @Schema(description = "个人简介")
    private String introduction;

    @Schema(description = "机构ID")
    private Integer organizationId;

    @Schema(description = "客户ID")
    private Integer customerId;

    @Schema(description = "企业ID")
    private Integer companyId;

    @Schema(description = "注册来源客户端")
    private String platform;

    @Schema(description = "兴趣爱好")
    private String interest;

    @Schema(description = "身高")
    private String height;

    @Schema(description = "体重")
    private String weight;

    @Schema(description = "学历")
    private String education;

    @Schema(description = "月薪")
    private String monthlyPay;

    @Schema(description = "是否下线会员")
    private Integer offline;

    @Schema(description = "关注数")
    private Integer followers;

    @Schema(description = "粉丝数")
    private Integer fans;

    @Schema(description = "获赞数")
    private Integer likes;

    @Schema(description = "评论数")
    private Integer commentNumbers;

    @Schema(description = "是否推荐")
    private Integer recommend;

    @Schema(description = "备注")
    private String comments;

    @Schema(description = "状态, 0正常, 1冻结")
    private Integer status;

    @Schema(description = "是否删除, 0否, 1是")
    @TableLogic
    private Integer deleted;

    @Schema(description = "租户id")
    private Integer tenantId;

    @Schema(description = "租户名称")
    @TableField(exist = false)
    private String tenantName;

    @Schema(description = "最后结算时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime settlementTime;

    @Schema(description = "注册时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    @Schema(description = "修改时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;

    @Schema(description = "公司名称")
    private String companyName;

    @Schema(description = "是否已实名认证")
    private Integer certification;

    @Schema(description = "机构名称")
    @TableField(exist = false)
    private String organizationName;

    @Schema(description = "性别名称")
    @TableField(exist = false)
    private String sexName;

    @Schema(description = "会员等级")
    @TableField(exist = false)
    private String gradeName;

    @Schema(description = "默认注册的角色ID")
    @TableField(exist = false)
    private Integer roleId;

    @Schema(description = "角色列表")
    @TableField(exist = false)
    private List<Object> roles;

    @Schema(description = "权限列表")
    @TableField(exist = false)
    private List<Menu> authorities;

    @Schema(description = "微信凭证")
    @TableField(exist = false)
    private String code;

    @Schema(description = "推荐人ID")
    @TableField(exist = false)
    private Integer dealerId;

    @Schema(description = "微信openid")
    @TableField(exist = false)
    private String openid;

    @Schema(description = "微信unionid")
    @TableField(exist = false)
    private String unionid;

    @Schema(description = "所属商户名称")
    @TableField(exist = false)
    private String merchantName;

    @Schema(description = "ico文件")
    @TableField(exist = false)
    private String logo;

    @Schema(description = "创建的应用数量")
    @TableField(exist = false)
    private Double apps;

    @Schema(description = "租户设置信息")
    @TableField(exist = false)
    private String setting;

    @Schema(description = "手机号(脱敏)")
    @TableField(exist = false)
    private String mobile;

}
