package com.xinelu.familydoctor.applet.pojo.entity;

import java.util.Date;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.xinelu.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import com.xinelu.common.annotation.Excel;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

/**
 * @Author mengkuiliang
 * @Description 居民注册表
 * @Date 2023-09-25 025 10:02
 * @Param
 * @return
 **/
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "居民注册表", description = "patient_info")
public class PatientInfo extends BaseEntity {

    private static final long serialVersionUID = 1L;

    /**
     * 主键id
     */
    private Long id;

    /**
     * 所属区域编码
     */
    @ApiModelProperty(value = "所属区域编码")
    @Excel(name = "所属区域编码")
    private String areaCode;

    /**
     * 居住小区编码
     */
    @ApiModelProperty(value = "居住小区编码")
    @Excel(name = "居住小区编码")
    private String communityCode;

    /**
     * 用户编号
     */
    @ApiModelProperty(value = "用户编号")
    @Excel(name = "用户编号")
    private String patientCode;

    /**
     * 用户姓名
     */
    @ApiModelProperty(value = "用户姓名")
    @Excel(name = "用户姓名")
    private String patientName;

    /**
     * 身份证号
     */
    @ApiModelProperty(value = "身份证号")
    @Excel(name = "身份证号")
    private String cardNo;

    /**
     * sys_user表id
     */
    @ApiModelProperty(value = "sys_user表id")
    @Excel(name = "sys_user表id")
    private Long userId;

    /**
     * 用户微信unionid
     */
    @ApiModelProperty(value = "用户微信unionid")
    @Excel(name = "用户微信unionid")
    private String unionid;

    /**
     * 用户微信openid
     */
    @ApiModelProperty(value = "用户微信openid")
    @Excel(name = "用户微信openid")
    private String openid;

    /**
     * 同一微信绑定标识openid，用于区分同一账号绑定的居民
     */
    @ApiModelProperty(value = "同一微信绑定标识openid，用于区分同一账号绑定的居民")
    @Excel(name = "同一微信绑定标识openid，用于区分同一账号绑定的居民")
    private String bindOpenid;

    /**
     * 手机号码
     */
    @ApiModelProperty(value = "手机号码")
    @Excel(name = "手机号码")
    private String phone;

    /**
     * 居住地址
     */
    @ApiModelProperty(value = "居住地址")
    @Excel(name = "居住地址")
    private String address;

    /**
     * 紧急联系人名称
     */
    @ApiModelProperty(value = "紧急联系人名称")
    @Excel(name = "紧急联系人名称")
    private String urgentContactName;

    /**
     * 紧急联系人电话
     */
    @ApiModelProperty(value = "紧急联系人电话")
    @Excel(name = "紧急联系人电话")
    private String urgentContactPhone;

    /**
     * 小区名称
     */
    @ApiModelProperty(value = "小区名称")
    @Excel(name = "小区名称")
    private String communityAliasName;

    /**
     * 住址经度
     */
    @ApiModelProperty(value = "住址经度")
    @Excel(name = "住址经度")
    private String homeLongitude;

    /**
     * 住址纬度
     */
    @ApiModelProperty(value = "住址纬度")
    @Excel(name = "住址纬度")
    private String homeLatitude;

    /**
     * 个人头像地址
     */
    @ApiModelProperty(value = "个人头像地址")
    @Excel(name = "个人头像地址")
    private String headPictureUrl;

    /**
     * 登录密码
     */
    @ApiModelProperty(value = "登录密码")
    @Excel(name = "登录密码")
    private String password;

    /**
     * 会员账户积分
     */
    @ApiModelProperty(value = "会员账户积分")
    @Excel(name = "会员账户积分")
    private Long integral;

    /**
     * 完善标识，记录当前用户是否第一次完善信息
     */
    @ApiModelProperty(value = "完善标识，记录当前用户是否第一次完善信息")
    @Excel(name = "完善标识，记录当前用户是否第一次完善信息")
    private Long loginFlag;

    /**
     * 主账号标识，0：标识主账号，1：子账号
     */
    @ApiModelProperty(value = "主账号标识，0：标识主账号，1：子账号")
    @Excel(name = "主账号标识，0：标识主账号，1：子账号")
    private Integer primaryAccountFlag;

    /**
     * 所选服务id，多个用逗号隔开
     */
    @ApiModelProperty(value = "所选服务id，多个用逗号隔开")
    @Excel(name = "所选服务id，多个用逗号隔开")
    private String serviceIds;

    /**
     * 所在位置名称，手机App和微信小程序所在位置名称
     */
    @ApiModelProperty(value = "所在位置名称，手机App和微信小程序所在位置名称")
    @Excel(name = "所在位置名称，手机App和微信小程序所在位置名称")
    private String locationName;

    /**
     * 会员注册来源，好友邀请：FRIEND_INVITATION，自己搜索注册：REGISTER_YOURSELF
     */
    @ApiModelProperty(value = "会员注册来源，好友邀请：FRIEND_INVITATION，自己搜索注册：REGISTER_YOURSELF ")
    @Excel(name = "会员注册来源，好友邀请：FRIEND_INVITATION，自己搜索注册：REGISTER_YOURSELF ")
    private String source;

    /**
     * 邀请人id
     */
    @ApiModelProperty(value = "邀请人id")
    @Excel(name = "邀请人id")
    private Long invitationPatientId;

    /**
     * 会员累计签到天数
     */
    @ApiModelProperty(value = "会员累计签到天数")
    @Excel(name = "会员累计签到天数")
    private Integer totalSignInDays;

    /**
     * 性别，MALE：男，FEMALE：女
     */
    @ApiModelProperty(value = "性别，MALE：男，FEMALE：女")
    @Excel(name = "性别，MALE：男，FEMALE：女")
    private String sex;

    /**
     * 出生日期
     */
    @ApiModelProperty(value = "出生日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "出生日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date birthDate;

    /**
     * 是否删除标识，0：否，1：是
     */
    private Integer delFlag;

    /**
     * 小程序个人微信二维码图片存放地址
     */
    @ApiModelProperty(value = "小程序个人微信二维码图片存放地址")
    @Excel(name = "小程序个人微信二维码图片存放地址")
    private String personalWechatCodeUrl;

    /**
     * 失能情况，NOT_DISABLED：未失能，DISABLED：已失能
     */
    @ApiModelProperty(value = "失能情况，NOT_DISABLED：未失能，DISABLED：已失能")
    @Excel(name = "失能情况，NOT_DISABLED：未失能，DISABLED：已失能")
    private String disablingCondition;

    /**
     * 失能原因
     */
    @ApiModelProperty(value = "失能原因")
    @Excel(name = "失能原因")
    private String disablingReason;

    /**
     * 基础疾病，1：高血压，2：高血糖，3：高血脂，0：无
     */
    @ApiModelProperty(value = "基础疾病，1：高血压，2：高血糖，3：高血脂，0：无")
    @Excel(name = "基础疾病，1：高血压，2：高血糖，3：高血脂，0：无")
    private String disease;

    /**
     * 基础疾病集合
     */
    @ApiModelProperty(value = "基础疾病集合")
    @Excel(name = "基础疾病集合")
    private List<String> diseaseList;

    /**
     * 绑定城市(1：德州 2：东营)
     */
    @ApiModelProperty(value = "绑定城市(1：德州 2：东营)")
    @Excel(name = "绑定城市(1：德州 2：东营)")
    private String cityCode;

    /**
     * 小程序绑定时间
     */
    @ApiModelProperty(value = "小程序绑定时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "小程序绑定时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date bindingTime;

    /**
     * 当前是否选中(0： 否 1：是)
     */
    @ApiModelProperty(value = "当前是否选中(0： 否 1：是)")
    @Excel(name = "当前是否选中(0： 否 1：是)")
    private String isChecked;

    /**
     * 与户主关系 (1.户主本人;2.配偶;3.子女;4.(外)孙子女;5.父母;6.(外)祖父母;7.兄弟姐妹;8.儿媳;9.女婿;10.孙子女;11.侄子女;12.曾孙子女;13.祖父母;99.其他;与户主关系 1.户主本人;2.配偶;3.子女;4.(外)孙子女;5.父母;6.(外)祖父母;7.兄弟姐妹;8.儿媳;9.女婿;10.孙子女;11.侄子女;12.曾孙子女;13.祖父母;99.其他;)
     */
    @ApiModelProperty(value = "与户主关系 (1.户主本人;2.配偶;3.子女;4.(外)孙子女;5.父母;6.(外)祖父母;7.兄弟姐妹;8.儿媳;9.女婿;10.孙子女;11.侄子女;12.曾孙子女;13.祖父母;99.其他;与户主关系 1.户主本人;2.配偶;3.子女;4.(外)孙子女;5.父母;6.(外)祖父母;7.兄弟姐妹;8.儿媳;9.女婿;10.孙子女;11.侄子女;12.曾孙子女;13.祖父母;99.其他;)")
    private String householdRelationship;

    /**
     * 户主身份证号
     */
    @ApiModelProperty(value = "户主身份证号")
    private String householdCardNo;

    /**
     * 签约编号
     */
    @ApiModelProperty(value = "签约编号")
    private String signNo;

    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("id", getId())
                .append("areaCode", getAreaCode())
                .append("communityCode", getCommunityCode())
                .append("patientCode", getPatientCode())
                .append("patientName", getPatientName())
                .append("cardNo", getCardNo())
                .append("userId", getUserId())
                .append("unionid", getUnionid())
                .append("openid", getOpenid())
                .append("phone", getPhone())
                .append("address", getAddress())
                .append("urgentContactName", getUrgentContactName())
                .append("urgentContactPhone", getUrgentContactPhone())
                .append("communityAliasName", getCommunityAliasName())
                .append("homeLongitude", getHomeLongitude())
                .append("homeLatitude", getHomeLatitude())
                .append("headPictureUrl", getHeadPictureUrl())
                .append("createBy", getCreateBy())
                .append("createTime", getCreateTime())
                .append("updateBy", getUpdateBy())
                .append("updateTime", getUpdateTime())
                .append("password", getPassword())
                .append("integral", getIntegral())
                .append("loginFlag", getLoginFlag())
                .append("primaryAccountFlag", getPrimaryAccountFlag())
                .append("serviceIds", getServiceIds())
                .append("locationName", getLocationName())
                .append("source", getSource())
                .append("invitationPatientId", getInvitationPatientId())
                .append("totalSignInDays", getTotalSignInDays())
                .append("sex", getSex())
                .append("birthDate", getBirthDate())
                .append("delFlag", getDelFlag())
                .append("personalWechatCodeUrl", getPersonalWechatCodeUrl())
                .append("disablingCondition", getDisablingCondition())
                .append("disablingReason", getDisablingReason())
                .append("cityCode", getCityCode())
                .append("bindingTime", getBindingTime())
                .append("isChecked", getIsChecked())
                .append("householdRelationship", getHouseholdRelationship())
                .append("householdCardNo", getHouseholdCardNo())
                .toString();
    }
}
