package com.lantone.entity.cdss;

import cn.afterturn.easypoi.excel.annotation.Excel;
import com.diagbot.util.StringUtil;
import lombok.Getter;
import lombok.Setter;

import javax.validation.constraints.NotBlank;
import java.util.Date;
import java.util.Objects;

/**
 * <p>
 * 诊断映射表
 * </p>
 *
 * @author zhaops
 * @since 2020-07-28
 */
@Getter
@Setter
public class DiseaseConfig {
    /**
     * 主键
     */
    private Long id;

    /**
     * 是否删除,N:未删除，Y:删除
     */
    private String isDeleted;

    /**
     * 记录创建时间
     */
    private Date gmtCreate;

    /**
     * 记录修改时间,如果时间是1970年则表示纪录未修改
     */
    private Date gmtModified;

    /**
     * 创建人，0表示无创建人值
     */
    private String creator;

    /**
     * 修改人,如果为0则表示纪录未修改
     */
    private String modifier;

    /**
     * 医院id
     */
    private Long hospitalId;

    /**
     * 医院诊断名称
     */
    @Excel(name = "医院诊断名称", width = 40, orderNum = "1", isImportField = "true")
    @NotBlank(message = "请输入医院诊断名称")
    private String hisName;

    /**
     * 标准诊断名称
     */
    @Excel(name = "标准诊断名称", width = 40, orderNum = "3", isImportField = "true")
    @NotBlank(message = "请输入标准诊断名称")
    private String uniqueName;

    /**
     * ICD-10编码
     */
    @Excel(name = "ICD-10编码", width = 40, orderNum = "2", isImportField = "true")
    private String code;

    /**
     * 是否匹配（0-未匹配、1-已匹配）
     */
    @Excel(name = "是否匹配【未匹配、已匹配】", width = 20, orderNum = "4", replace = { "未匹配_0", "已匹配_1", "_null"}, isImportField = "true")
    private Integer isMatch;

    /**
     * 数据来源（1-标准词、2-同义词、3-编码、4-历史数据、5-相似词、99-数据迁移）
     */
    @Excel(name = "数据来源【不填、标准词、同义词、编码、历史数据、相似词】", width = 20, orderNum = "5", replace = { "标准词_1", "同义词_2", "编码_3", "历史数据_4", "相似词_5", "数据迁移_99", "_null" }, isImportField = "true")
    private Integer source;

    @Override
    public String toString() {
        return "DiseaseConfig{" +
                "id=" + id +
                ", isDeleted=" + isDeleted +
                ", gmtCreate=" + gmtCreate +
                ", gmtModified=" + gmtModified +
                ", creator=" + creator +
                ", modifier=" + modifier +
                ", hospitalId=" + hospitalId +
                ", hisName=" + hisName +
                ", uniqueName=" + uniqueName +
                ", code=" + code +
                ", isMatch=" + isMatch +
                ", source=" + source +
                "}";
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        DiseaseConfig diseaseConfig = (DiseaseConfig) o;
        return Objects.equals(id, diseaseConfig.id)
                && Objects.equals(isDeleted, diseaseConfig.isDeleted)
                && Objects.equals(hospitalId, diseaseConfig.hospitalId)
                && Objects.equals(hisName, diseaseConfig.hisName)
                && Objects.equals(uniqueName, diseaseConfig.uniqueName)
                && Objects.equals(code, diseaseConfig.code);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, isDeleted, hospitalId, hisName, uniqueName, code);
    }

    public static boolean nonNull(DiseaseConfig o) {
        return !(o == null
                || (o.hospitalId == null
                && StringUtil.isBlank(o.hisName)
                && StringUtil.isBlank(o.uniqueName)
                && StringUtil.isBlank(o.code)));
    }
}