package thyyxxk.webserver.entity.zhuyuanyisheng.shoushu;

import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import thyyxxk.webserver.utils.StringUtil;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

@Data
@TableName("op_record")
public class OpRecord implements Serializable {

    private static final long serialVersionUID = 8139361380874362171L;

    /**
     * 手术序列号，在打印中叫做申请单号
     */
    private Integer recordId;

    /**
     * zySerialNo
     */
    private String zySerialNo;

    /**
     * 手术次数
     */
    private Integer opTimes;

    /**
     * 患者姓名
     */
    private String patientName;

    /**
     * 科室
     */
    private String deptCode;
    private String deptName;
    private String deptCodeName;

    /**
     * 病房
     */
    private String wardCode;
    private String wardName;

    /**
     * 申请日期
     */
    private Date applyDate;

    /**
     * 申请人
     */
    private String applyUser;

    /**
     * 申请医生
     */
    private String applyDoc;
    private String applyDocName;

    /**
     * 安排手术日期
     */
    private Date scheduleDate;

    /**
     * 安排人
     */
    private String scheduleUser;

    /**
     * 状态：1-申请、2-安排、3-确认、d-删除
     */
    private String status;
    private String statusName;
    /**
     * 手术类别：1-门诊手术、2-住院手术
     */
    private String patientType;
    private String patientTypeName;
    /**
     * 医嘱号：0-手术室录入、1-医生工作站录入、
     * 大于1医嘱传入
     */
    private BigDecimal actOrderNo;
    /**
     * 手术代码
     */
    private String opCode;
    /**
     * 手术名称
     */
    private String opName;
    /**
     * 手术时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date opDatetime;
    /**
     * 手术房间
     */
    private String roomCode;
    private String roomName;
    /**
     * 手术组
     */
    private String opGroupCode;
    /**
     * 麻醉方式
     */
    private String hocusCode;
    private String hocusName;
    /**
     * 术后诊断
     */
    private String diagAfterOp;
    /**
     * 感染标志：1-是 0-否
     */
    private String infectionFlag;
    /**
     * 急诊标志：1-是、0-否
     */
    private String urgentClinicFlag;
    private String urgentClinicName;
    /**
     * avocationFlag
     */
    private String avocationFlag;
    /**
     * 输血量
     */
    private Integer bloodAmount;
    /**
     * 血型
     */
    private String bloodType;
    /**
     * opStasticsId
     */
    private String opStasticsId;
    /**
     * 隔离标志：1-是 0-否
     */
    private String isolationIndicator;
    /**
     * 手术等级：字典对应
     */
    private String opScale;

    /**
     * 术前诊断代码
     */
    private String diagBeforeCode;
    /**
     * 术前诊断
     */
    private String diagBeforeOp;
    /**
     * 术后诊断代码
     */
    private String diagAfterCode;
    /**
     * 奥抗标识
     */
    private String hbsag;
    /**
     * 手术体位
     */
    private String bodyCode;
    /**
     * 手术部位
     */
    private String partCode;
    private String partCodeName;
    /**
     * 手术用物
     */
    private String specialreqCode;
    /**
     * 手术仪器：字典对应
     */
    private String instrumentCode;
    /**
     * 无菌程度：字典对应
     */
    private String aspesisScale;

    /**
     * 术前访视
     */
    private String preoperativeVisit;

    /**
     * 术前准备完善情况
     */
    private String preoperativePreparation;

    /**
     * 附注说明，备注
     */
    private String remark;
    /**
     * 手术科室
     */
    private String opDept;
    /**
     * 录入人
     */
    private String inputId;
    /**
     * 录入日期
     */
    private Date inputDate;
    /**
     * 申请人
     */
    private String reqId;
    /**
     * 申请日期
     */
    private Date reqDate;
    /**
     * 最后编辑者
     */
    private String lastModifyId;
    /**
     * 安排人
     */
    private String arrangeId;
    /**
     * 安排日期
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date arrangeDate;
    /**
     * 住院号
     */
    private String inpatientNo;
    /**
     * 住院次数
     */
    private Integer admissTimes;
    /**
     * 取消手术 id
     */
    private String cancelId;
    /**
     * 取消时间
     */
    private Date cancelTime;
    /**
     * 手术台次，第几台手术
     */
    private Integer sstc;
    /**
     * 床位
     */
    private String bedNo;
    /**
     * 体外循环标志:1循环
     */
    private String twFlag;
    /**
     * 手术班次 1-正常 2-加班
     */
    private String ssbc;
    /**
     * ssyzFlag
     */
    private String ssyzFlag;
    /**
     * statusFlag
     */
    private String statusFlag;
    /**
     * wardDept
     */
    private String wardDept;
    /**
     * 主刀医生
     */
    private String doctorZd;
    private String doctorZdName;
    /**
     * 第一助手
     */
    private String doctor1;
    private String doctor2;
    private String doctor3;
    private String doctor1Name;
    private String doctor2Name;
    private String doctor3Name;
    /**
     * 麻醉医生
     */
    private String doctorMz;
    private String doctorMzName;


    /**
     * 器械护士
     */
    private String nurseQx;
    private String nurseQxName;
    /**
     * 巡回护士
     */
    private String nurseXh;
    private String nurseXhName;
    /**
     * 管床医生
     */
    private String referPhysicianName;
    /**
     * 科主任
     */
    private String deptDirectorName;
    /**
     * 性别
     */
    private String sex;
    /**
     * 医保自费
     */
    private Integer ybSelfFlag;
    /**
     * 出生日期
     */
    private String birthDate;
    private String age;

    /////  下面都是 op_record_join 表里面的数据
    /**
     * 麻醉医生
     */
    private String doctorMzYs;
    private String doctorMzYsName;

    /**
     * 麻醉护士
     */
    private String doctorMzHsName;
    private String doctorMzHs;

    //////////////////////下面都是新增字段
    /**
     * 手术开始时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date opStartDate;

    /**
     * 手术结束时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date opEndDate;

    /**
     * 麻醉开始时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date anstStartDate;

    /**
     * 麻醉结束时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date anstEndDate;

    /**
     * 是否有收费，chargeSum>0：有， 其他无
     */
    private Double chargeSum;

    /**
     * 0-未接，1-已接
     */
    private Integer arrangementExecuted;

    /**
     * 生成医嘱的医嘱名
     */
    private String orderName;

    public String getPatientTypeName() {
        if (StringUtil.isBlank(this.patientType)) {
            return null;
        }
        switch (this.patientType) {
            case "1":
                return "门诊手术";
            case "2":
                return "住院手术";
            default:
                return null;
        }
    }

    public String getStatusName() {
        if (this.status == null) {
            return "";
        }
        switch (this.status) {
            case "1":
                return "申请";
            case "2":
                return "安排";
            case "3":
                return "确认";
            case "d":
                return "删除";
            default:
                return "";
        }
    }

    public String getSsbcName() {
        if (ssbc == null) {
            return "";
        }
        if ("1".equals(ssbc)) {
            return "正常";
        } else {
            return "加班";
        }
    }

    public String getOpScaleName() {
        if (opScale == null) {
            return "";
        }
        switch (opScale) {
            case "4":
                return "四级";
            case "3":
                return "三级";
            case "2":
                return "二级";
            case "1":
                return "一级";
            default:
                return "";
        }
    }

    public String getUrgentClinicName() {
        if (urgentClinicFlag == null) {
            return "";
        }

        switch (urgentClinicFlag) {
            case "0":
                return "择期";
            case "1":
                return "急诊";
            case "2":
                return "非计划";
            default:
                return "";
        }

    }

}
