package com.gxwebsoft.shop.entity;

import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import java.time.LocalDate;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableLogic;
import java.io.Serializable;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import com.fasterxml.jackson.annotation.JsonFormat;

/**
 * 用户记录表
 *
 * @author 科技小王子
 * @since 2026-02-10 00:37:07
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Schema(name = "ShopUser对象", description = "用户记录表")
public class ShopUser implements Serializable {
    private static final long serialVersionUID = 1L;

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

    @Schema(description = "用户类型 0普通用户 1企业用户 2特殊用户")
    private Integer type;

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

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

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

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

    @Schema(description = "性别 1男 2女")
    private Integer sex;

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

    @Schema(description = "注册来源客户端 (APP、H5、MP-WEIXIN等)")
    private String platform;

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

    @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")
    private LocalDate birthday;

    @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 BigDecimal cashedMoney;

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

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

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

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

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

    @Schema(description = "行业分类")
    private String category;

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

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

    @Schema(description = "会员分组ID")
    private Integer groupId;

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

    @Schema(description = "背景图")
    private String bgImage;

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

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

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

    @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 = "微信openid")
    private String openid;

    @Schema(description = "微信公众号openid")
    private String officeOpenid;

    @Schema(description = "微信unionID")
    private String unionid;

    @Schema(description = "客户端ID")
    private String clientId;

    @Schema(description = "不允许办卡")
    private Boolean notAllowVip;

    @Schema(description = "是否管理员")
    private Boolean isAdmin;

    @Schema(description = "默认账号(适用于不同租户存在相同的手机号码)")
    private Boolean isDefault;

    @Schema(description = "是否企业管理员")
    private Boolean isOrganizationAdmin;

    @Schema(description = "累计登录次数")
    private Integer loginNum;

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

    @Schema(description = "可管理的场馆")
    private String merchants;

    @Schema(description = "商户ID")
    private Integer merchantId;

    @Schema(description = "商户名称")
    private String merchantName;

    @Schema(description = "商户头像")
    private String merchantAvatar;

    @Schema(description = "第三方系统的用户ID")
    private Integer uid;

    @Schema(description = "专家角色")
    private Boolean expertType;

    @Schema(description = "过期时间")
    private Integer expireTime;

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

    @Schema(description = "资质")
    private String aptitude;

    @Schema(description = "行业类型(父级)")
    private String industryParent;

    @Schema(description = "行业类型(子级)")
    private String industryChild;

    @Schema(description = "头衔")
    private String title;

    @Schema(description = "安装的产品ID")
    private Integer templateId;

    @Schema(description = "插件安装状态(仅对超超管判断) 0未安装 1已安装 ")
    private Integer installed;

    @Schema(description = "特长")
    private String speciality;

    @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 = "注册时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

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

}
