package com.cf.imes.module.system.dal.dataobject.organ;

import com.cf.imes.framework.common.enums.CommonStatusEnum;
import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
import com.cf.imes.module.system.dal.dataobject.user.AdminUserDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;

import java.time.LocalDateTime;

/**
 * 组织 DO
 *
 * @author 晨丰科技
 */
@TableName(value = "system_organization", autoResultMap = true)
@KeySequence("system_tenant_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class OrganizationDO extends BaseDO {

    /**
     * 套餐编号 - 系统
     */
    public static final Long PACKAGE_ID_SYSTEM = 0L;

    /**
     * 组织编号，自增
     */
    private Long id;
    /**
     * 组织名，唯一
     */
    private String name;
    /**
     * 组织代码
     */
    private String code;
    /**
     * 拼音首字母
     */
    private String pinyinInitial;
    /**
     * 全拼
     */
    private String pinyinFull;
    /**
     * 地址
     */
    private String address;
    /**
     * 联系人的用户编号
     *
     * 关联 {@link AdminUserDO#getId()}
     */
    private Long contactUserId;
    /**
     * 联系人
     */
    private String contactName;
    /**
     * 联系手机
     */
    private String contactMobile;
    /**
     * 组织状态
     *
     * 枚举 {@link CommonStatusEnum}
     */
    private Integer status;
    /**
     * 绑定域名
     */
    private String website;
    /**
     * 组织套餐编号
     *
     * 关联 {@link TenantPackageDO#getId()}
     * 特殊逻辑：系统内置组织，不使用套餐，暂时使用 {@link #PACKAGE_ID_SYSTEM} 标识
     */
    private Long packageId;
    /**
     * 过期时间
     */
    private LocalDateTime expireTime;
    /**
     * 账号数量
     */
    private Integer accountCount;
    /**
     * 是否大型数据库
     */
    private Boolean large;
    /**
     * 数据库编号
     */
    private Integer dbNo;
    /**
     * 数据表编号
     */
    private Integer tableNo;
    /**
     * 数据源编码
     */
    private String dataSourceCode;
    /**
     * 备注
     */
    private String remark;
}
