package cn.com.ty.lift.ud.userInfo.mapper.entity;

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

import cn.com.ty.lift.ud.tableDict.mapper.entity.TableDictVo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;

import cn.com.ty.lift.ud.common.LocalDateTimeConverter;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 用户表
 *
 * @author Xson
 * @date 2020-05-13
 */
@Data
@ApiModel(description = "用户表 ")
@TableName(value = "user_info")
@NoArgsConstructor
public class UserInfoEntity implements Serializable {

    /**
     * 用户id
     */
//    @TableId(type = IdType.AUTO)
//    @ApiModelProperty("用户id")
//    private Long id;

    /**
     * 用户id
     */
    @TableId(value = "user_id", type = IdType.AUTO)
    @JsonSerialize(using=ToStringSerializer.class)
    private Long userId;
    
    /**
     * 账号
     */
    @ApiModelProperty("账号")
    private String acount;

    /**
     * 密码
     */
    @ApiModelProperty("密码")
    private String password;

    /**
     * 用户昵称
     */
    @ApiModelProperty("用户昵称")
    private String name;

	/**
	 * 真实姓名
	 */
	@ApiModelProperty("真实姓名")
	private String realName;
	
	/**
	 * 服务费
	 */
	@ApiModelProperty("服务费")
	private BigDecimal serviceFee;

    /**
     * 专家总积分
     */
    @ApiModelProperty("专家总积分")
    private Integer levelTotalScore ;

    /**
     * 专家等级
     */
    @ApiModelProperty("专家等级")
    private Integer expertLevel;

    /**
     * 会员标志 1非会员  2 会员 3 超级会员
     */
    @ApiModelProperty("会员标志 1非会员  2 会员 3 超级会员")
    private Integer vipFlag;

    /**
     * 用户等级
     */
    @ApiModelProperty("用户等级")
    private Long userLevel;

    /**
     * 用户等级名称
     */
    @ApiModelProperty("用户等级名称")
    private String userLevelName;

    /**
     * 平台认证专家 0特邀专家1普通专家
     */
    @ApiModelProperty("平台认证专家 0特邀专家1普通专家")
    private Integer platformInvitedFlag;

    /**
     * 擅长品牌
     */
    @ApiModelProperty("擅长品牌")
    private String proficiencyBrand;

    /**
     * 擅长
     */
    @ApiModelProperty("擅长")
    private String proficiency;

    /**
     * 附近的人是否显示 0展示1不展示
     */
    @ApiModelProperty("附近的人是否显示 0展示1不展示")
    private Integer nearbyFlag;

    /**
     * 用户手机号
     */
    @ApiModelProperty("用户手机号")
    private String mobile;

    /**
     * 性别
     */
    @ApiModelProperty("性别")
    private Integer gender;

    /**
     * 年龄
     */
    @ApiModelProperty("年龄")
    private Integer age;


    /**
     * 显示昵称/姓名 1：显示昵称   2：显示真实姓名
     */
    @ApiModelProperty("显示昵称/姓名 1：显示昵称   2：显示真实姓名")
    private Integer showWhichName;


    /**
     * 头像地址
     */
    @ApiModelProperty("头像地址")
    private String avatarUrl;

    /**
     * 备注
     */
    @ApiModelProperty("备注")
    private String remarks;

    /**
     * 个性签名
     */
    @ApiModelProperty("个性签名")
    private String signature;

    private Integer serviceTotal;

    private Integer satisfactionTotal;

    private Integer level;

    private Integer maintenanceTotal;

    private Integer emergencyTotal;

    private Integer liftTotal;

    /**
     * 用户余额
     */
    @ApiModelProperty("用户余额")
    private BigDecimal balance;

    /**
     * 用户类型：0：超级管理员，1：平台管理员，2：企业管理员，3：普通用户
     */
    @ApiModelProperty("用户类型：0：超级管理员，1：平台管理员，2：企业管理员，3：普通用户")
    private String type;


    /**
     * 1：已删除，0：未删除
     */
    @ApiModelProperty("1：已删除，0：未删除")
    private Integer deleteFlag;

    /**
     * 支付宝账号
     */
    @ApiModelProperty("支付宝账号")
    private String alipayAccount;

    /**
     * 支付宝账号
     *
     */
    @ApiModelProperty("支付宝真实姓名")
    private String alipayRealName;

    /**
     * 支付宝id
     */
    @ApiModelProperty("支付宝id")
    private String alipayId;

    /**
     * 冻结的余额
     */
    @ApiModelProperty("冻结的余额")
    private BigDecimal freezeBalance;

	/**
	 * 专家审核 1通过 0驳回
	 */
	@ApiModelProperty("专家审核 1通过 0驳回")
	private Integer applyFlag;
	
	/**
	 * 评分
	 */
	@ApiModelProperty("评分")
	private Double score;

    @ApiModelProperty("1 可以接任务   0  不接任务")
    private Integer statuz;

    /**
     * 经度
     */
    @ApiModelProperty("经度")
    private Double lon;

    /**
     * 纬度
     */
    @ApiModelProperty("纬度")
    private Double lat;

    /**
     * 邀请码图片路径
     */
    @ApiModelProperty("邀请码图片路径")
    private String qrCodeUrl;
    
    /**
     * 姓氏
     */
    @ApiModelProperty("姓氏")
    private String surname;

    /**
     * 维保公司id
     */
    @ApiModelProperty("维保公司id")
    private Long maintenanceCompanyId;


    /**
     * 创建时间 默认为系统当前时间
     */
    @ApiModelProperty(value = "创建时间")
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    @JsonSerialize(using = LocalDateTimeConverter.class)
    private LocalDateTime createTime;

    /**
     * 创建者
     */
    @ApiModelProperty(value = "创建人")
    @TableField(value = "create_by", fill = FieldFill.INSERT)
    private String createBy;

    /**
     * 修改时间 默认为系统当前时间
     */
    @ApiModelProperty(value = "修改时间")
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    @JsonSerialize(using = LocalDateTimeConverter.class)
    private LocalDateTime updateTime;

    /**
     * 修改者
     */
    @ApiModelProperty(value = "修改人")
    @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE)
    private String updateBy;

    @ApiModelProperty(value = "vip id")
    private String vipId;

    @ApiModelProperty(value = "擅长品牌")
    private transient String proficiencyBrandName;

    @ApiModelProperty(value = "公司名称")
    private transient String companyName;

    /**
     * 用户类型
     */
    @ApiModelProperty("用户类型")
    private transient List<TableDictVo> userTypeList;

    @ApiModelProperty(value = "专家标志 1：是专家  0：不是专家")
    private transient Integer expertFlag;

    @ApiModelProperty(value = "app角色名称")
    private transient String roleName;

    /**
     * 成为会员时间
     */
    @ApiModelProperty(value = "成为会员时间")
    @TableField(value = "vip_start_time")
    @JsonSerialize(using = LocalDateTimeConverter.class)
    private LocalDateTime vipStartTime;

    /**
     * 最新所在市区
     */
    @ApiModelProperty(value = "最新所在市区")
    @TableField(value = "last_city_district")
    private String lastCityDistrict;

    /**
     * 会员结束时间
     */
    @ApiModelProperty(value = "会员结束时间")
    @TableField(value = "vip_end_time")
    @JsonSerialize(using = LocalDateTimeConverter.class)
    private LocalDateTime vipEndTime;

    @ApiModelProperty(value = "vip有效期校验值，单位：月")
    private  Integer vipValidity;

    /**
     * 邀请码
     */
    @ApiModelProperty("邀请码")
    private Integer requestCode;

    @ApiModelProperty("vip级别，等于会费设置表的id")
    private Long vipLevel;

    @ApiModelProperty("服务次数")
    private Integer serviceCounts;

    @ApiModelProperty("采纳次数")
    private Integer adoptCounts;
    
    private transient Double distance;

    @ApiModelProperty("评论平均分")
    private Integer averageScore;
    
    @ApiModelProperty("地点")
    private transient String address;
    
    @ApiModelProperty("从业年数")
    private transient Integer workDate;
    
    @ApiModelProperty("自我简介")
    private transient String introduction;
    
    @ApiModelProperty("从业经历")
    private transient String experience;
    
    @ApiModelProperty("是否有评论")
    private transient Integer haveComment;
    
    public UserInfoEntity(Long id, Long userId, String acount, String password, String name, String realName,
        BigDecimal serviceFee, Integer levelTotalScore, Integer expertLevel, Integer vipFlag, Long userLevel,
        String userLevelName, Integer platformInvitedFlag, String proficiencyBrand, String proficiency,
        Integer nearbyFlag, String mobile, Integer gender, Integer age, Integer showWhichName, String avatarUrl,
        String remarks, String signature, Integer serviceTotal, Integer satisfactionTotal, Integer level,
        Integer maintenanceTotal, Integer emergencyTotal, Integer liftTotal, BigDecimal balance, String type,
        Integer deleteFlag, String alipayAccount, String alipayRealName, String alipayId, BigDecimal freezeBalance, Integer applyFlag,
        Double score, Integer statuz, Double lon, Double lat, String qrCodeUrl, Long maintenanceCompanyId,
        LocalDateTime createTime, String createBy, LocalDateTime updateTime, String updateBy,
        String proficiencyBrandName, String companyName, List<TableDictVo> userTypeList, Integer expertFlag,
        String roleName, LocalDateTime vipStartTime, LocalDateTime vipEndTime, Integer vipValidity, Integer requestCode,
        Long vipLevel, Integer serviceCounts, Integer adoptCounts) {
        super();
//        this.id = id;
        this.userId = userId;
        this.acount = acount;
        this.password = password;
        this.name = name;
        this.realName = realName;
        this.serviceFee = serviceFee;
        this.levelTotalScore = levelTotalScore;
        this.expertLevel = expertLevel;
        this.vipFlag = vipFlag;
        this.userLevel = userLevel;
        this.userLevelName = userLevelName;
        this.platformInvitedFlag = platformInvitedFlag;
        this.proficiencyBrand = proficiencyBrand;
        this.proficiency = proficiency;
        this.nearbyFlag = nearbyFlag;
        this.mobile = mobile;
        this.gender = gender;
        this.age = age;
        this.showWhichName = showWhichName;
        this.avatarUrl = avatarUrl;
        this.remarks = remarks;
        this.signature = signature;
        this.serviceTotal = serviceTotal;
        this.satisfactionTotal = satisfactionTotal;
        this.level = level;
        this.maintenanceTotal = maintenanceTotal;
        this.emergencyTotal = emergencyTotal;
        this.liftTotal = liftTotal;
        this.balance = balance;
        this.type = type;
        this.deleteFlag = deleteFlag;
        this.alipayAccount = alipayAccount;
        this.alipayRealName = alipayRealName;
        this.alipayId = alipayId;
        this.freezeBalance = freezeBalance;
        this.applyFlag = applyFlag;
        this.score = score;
        this.statuz = statuz;
        this.lon = lon;
        this.lat = lat;
        this.qrCodeUrl = qrCodeUrl;
        this.maintenanceCompanyId = maintenanceCompanyId;
        this.createTime = createTime;
        this.createBy = createBy;
        this.updateTime = updateTime;
        this.updateBy = updateBy;
        this.proficiencyBrandName = proficiencyBrandName;
        this.companyName = companyName;
        this.userTypeList = userTypeList;
        this.expertFlag = expertFlag;
        this.roleName = roleName;
        this.vipStartTime = vipStartTime;
        this.vipEndTime = vipEndTime;
        this.vipValidity = vipValidity;
        this.requestCode = requestCode;
        this.vipLevel = vipLevel;
        this.serviceCounts = serviceCounts;
        this.adoptCounts = adoptCounts;
    }
    
}
