package com.sptg.estate.api.entity;

import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;

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

/**
 * title: Residential
 * package: com.sptg.estate.api.entity
 * description: 小区实体类
 *
 *             
 *                
 */
@Setter
@Getter
@TableName(value = "estate_residential")
public class Residential {
    /**
     * 主键
     */
    @TableId(value = "l_id",type = IdType.AUTO)
    private Long id;

    /**
     * 发卡模式
     */
    @TableField(value = "access_control_mode")
    private Integer accessControlMode;

    /**
     * 未知属性（亲邻）
     */
    @TableField(value = "activation_process")
    private Integer activationProcess;

    /**
     * 未知属性（亲邻）
     */
    @TableField(value = "binding_virtual_card")
    private Integer bindingVirtualCard;

    /**
     * 开发者（亲邻）
     */
    @TableField(value = "community_developer")
    private String communityDeveloper;

    /**
     * 未知属性（亲邻）
     */
    @TableField(value = "community_operator")
    private String communityOperator;

    /**
     * 小区类型（亲邻）
     */
    @TableField(value = "community_type")
    private String communityType;

    /**
     * （亲邻）
     */
    @TableField(value = "is_force_subscribe_wechat")
    private Integer isForceSubscribeWechat;

    /**
     * （亲邻）
     */
    @TableField(value = "is_id_card_required")
    private Integer isIdCardRequired;

    /**
     * （亲邻）
     */
    @TableField(value = "is_immed_upload_pic")
    private Integer isImmedUploadPic;

    /**
     * （亲邻）
     */
    @TableField(value = "is_open_housing_management")
    private Integer isOpenHousingManagement;

    /**
     * （亲邻）
     */
    @TableField(value = "is_open_mobile_validate")
    private Integer isOpenMobileValidate;

    /**
     * （亲邻）
     */
    @TableField(value = "is_open_property_payment")
    private Integer isOpenPropertyPayment;

    /**
     * （亲邻）
     */
    @TableField(value = "latitude")
    private String latitude;

    /**
     * （亲邻）
     */
    @TableField(value = "longitude")
    private String longitude;

    /**
     * （亲邻）
     */
    @TableField(value = "operate_company_id")
    private Long operateCompanyId;

    /**
     * （亲邻）
     */
    @TableField(value = "operate_company_name")
    private String operateCompanyName;

    /**
     * （亲邻）
     */
    @TableField(value = "permission_expires")
    private Integer permissionExpires;
    /**
     * （亲邻）
     */
    @TableField(value = "property_company_id")
    private Integer propertyCompanyId;

    /**
     * （亲邻）
     */
    @TableField(value = "property_name")
    private String propertyName;

    /**
     * （亲邻）
     */
    @TableField(value = "property_phone")
    private String propertyPhone;


    /**
     * 小区名字
     */
    @TableField(value = "s_name")
    private String name;

    /**
     * 小区编号 (固定字母A+数字自增，物业内唯一)
     */
    @TableField(value = "s_residential_number")
    private String residentialNumber;

    /**
     * 存储位置
     */
    @TableField(value = "s_org_position")
    private String orgPosition;

    /**
     * 省（id）
     */
    @TableField(value = "s_region_province")
    private String regionProvince;

    /**
     * 市（id）
     */
    @TableField(value = "s_region_city")
    private String regionCity;

    /**
     * 区/县（id）
     */
    @TableField(value = "s_region_area")
    private String regionArea;

    /**
     * 地区（广东省广州市天河区）
     */
    @TableField(value = "s_region")
    private String region;

    /**
     * 详细地址
     */
    @TableField(value = "s_address")
    private String address;

    /**
     * （归属机构id） 当前物业下有下级则需要选择，没有则默认当前物业
     */
    @TableField(value = "l_org_pid")
    private Long orgPid;

    /**
     * 物业信息名称（归属机构名称）
     */
    @TableField(value = "s_org_pid_name")
    private String orgPidName;

    /**
     * 单元总数
     */
    @TableField(value = "i_total_unit_number")
    private Integer totalUnitNumber;

    /**
     * 房间总数
     */
    @TableField(value = "i_total_room_number")
    private Integer totalRoomNumber;

    /**
     * 住户总数
     */
    @TableField(value = "i_total_user_number")
    private Integer totalUserNumber;

    /**
     * 楼层数
     */
    @TableField(value = "i_floor_number")
    private Integer floorNumber;
    /**
     * 楼层数
     */
    @TableField(value = "i_building_number")
    private Integer buildingNumber;


    /**
     * 已录单元数量
     */
    @TableField(value = "i_unit_number")
    private Integer unitNumber;

    /**
     * 已录房间数量
     */
    @TableField(value = "i_room_number")
    private Integer roomNumber;

    /**
     * 已录住户数量
     */
    @TableField(value = "i_user_number")
    private Integer userNumber;

    /**
     * 已录入人脸住户数
     */
    @TableField(value = "i_user_face_number")
    private Integer userFaceNumber;

    /**
     * 负责人姓名
     */
    @TableField(value = "s_person_name")
    private String personName;

    /**
     * 负责人电话
     */
    @TableField(value = "s_person_tel")
    private String personTel;

    /**
     * 备注
     */
    @TableField(value = "s_remark")
    private String remark;

    /**
     * 删除标记：{ -1：已删除，0：正常 }
     */
    @TableField(value = "i_status")
    private Integer status;

    /**
     * 开启紧急疏散的时间(毫秒值)
     */
    @TableField(value = "l_open_evacuate_time")
    private Long openEvacuateTime;

    /**
     * 根机构id
     */
    @TableField(value = "l_root_org_id")
    private Long rootOrgId;

    /**
     * 创建人Id
     */
    @TableField(value = "l_create_account_id")
    private Long createAccountId;

    /**
     * 创建时间
     */
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    @TableField(value = "t_create_date")
    private Date createDate;


    /**
     * 创建者类型：{1：机构，3：物业}（和机构类型对应）
     */
    @TableField(value = "i_creator_type")
    private Integer creatorType;

    /**
     * 分配标记：{0：未分配，1：已分配}
     */
    @TableField(value = "i_is_assign")
    private Integer isAssign;

    /**
     * 物业存储位置
     */
    @TableField(value = "s_estate_position")
    private String estatePosition;

    /**
     * 物业信息id（归属机构id） 当前物业下有下级则需要选择，没有则默认当前物业
     */
    @TableField(value = "l_estate_pid")
    private Long estatePid;

    /**
     * 物业信息名称（归属机构名称）
     */
    @TableField(value = "s_estate_pid_name")
    private String estatePidName;

    /**
     * 物业信息名称（归属机构名称）
     */
    @TableField(value = "s_estate_tel")
    private String estateTel;

    /**
     * 数据迁移时,传入的原数据Id
     */
    @TableField(value = "old_id")
    private String oldId;


    /**
     * 访客记录是否需要审核才能同行（0不需要，1-需要）
     */
    @TableField(value = "i_door_need_audit")
    private Integer doorNeedAudit;

    @TableField(value = "l_agency_id")
    private Long agencyId;

    @TableField(value = "s_agency_name")
    private String agencyName;

    @TableField(value = "s_region_street")
    private String regionStreet;

    @TableField(value = "l_qinlin_residential_id")
    private Long qinLinResidentialId;

    /* -------------------------------------------------------------------------------------------------------------- */
    //  以下为字段非表字段
    /* -------------------------------------------------------------------------------------------------------------- */

    /**
     * 总住户
     */
    @TableField(exist = false)
    private Integer userCount;

    /**
     * 男性住户
     */
    @TableField(exist = false)
    private Integer unknownSexUserCount;
    /**
     * 女性住户
     */
    @TableField(exist = false)
    private Integer manSexUserCount;
    /**
     * 未知性别
     */
    @TableField(exist = false)
    private Integer womanSexUserCount;
    /**
     * 租客
     */
    @TableField(exist = false)
    private Integer tenantUserCount;
    /**
     *
     * 上月新增住户
     */
    @TableField(exist = false)
    private Integer lastMonthAddUserCount;

    /**
     * 已有住户房间数量
     */
    @TableField(exist = false)
    private Integer existRoomCount;

    /**
     * 小区下的单元
     */
    @TableField(exist = false)
    private List<Unit> subList;

}
