package thyyxxk.webserver.entity.zhuyuanyisheng.yizhuluru;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * <p>
 * 描述： 医嘱信息
 * </p>
 *
 * @author xc
 * @date 2022-01-12 17:38
 */
@Data
public class XinZhenYzActOrder {


    /**
     * 可以用来做父子医嘱
     * 以及 actOrderNo 的id
     */
    private String id;


    private String inpatientNo;
    private Integer admissTimes;

    /**
     * 医嘱号
     */
    private BigDecimal actOrderNo;

    public String getActOrderNoStr() {
        if (actOrderNo == null) {
            return null;
        }
        return actOrderNo.stripTrailingZeros().toPlainString();
    }

    /**
     * 费用的编码 药品或项目
     */
    private String orderCode;
    /**
     * 费用名称
     */
    private String orderName;

    /**
     * 医保编码
     */
    private String nationalCode;

    /**
     * 药品的包装单价
     */
    private BigDecimal packRetprice;

    /**
     * 频次
     */
    private String frequCode;
    private String frequCodeName;
    /**
     * 医生嘱托
     */
    private String instruction;
    /**
     * 描述
     */
    private String discription;
    /**
     * 婴儿标志
     */
    private String infantFlag;
    /**
     * 医嘱时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss", shape = JsonFormat.Shape.STRING)
    private Date orderTime;
    /**
     * 医嘱开始时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss", shape = JsonFormat.Shape.STRING)
    private Date startTime;

    /**
     * 停止时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss", shape = JsonFormat.Shape.STRING)
    private Date endTime;
    /**
     * 停止医嘱的时候用的
     */
    private String endTimeTemp;
    /**
     * 停止人 修改人
     */
    private String modifier;
    private String modifierName;
    /**
     * 医生 这个也是开医嘱的医生
     */
    private String physician;
    private String physicianName;

    /**
     * 药品规格
     */
    private String drugSpecification;

    /**
     * 领量
     */
    private BigDecimal drugQuan;
    private String drugQuanName;

    /**
     * 给药方式
     */
    private String supplyCode;
    private String supplyCodeName;


    /**
     * 药品类型
     */
    private String drugFlag;

    /**
     * 录入人
     */
    private String enterOper;
    private String enterOperName;

    /**
     * 结束时间
     */
    private Date enterTime;

    /**
     * 确认人
     */
    private String signer;
    private String signerName;
    /**
     * 确认时间
     */
    private Date confirmTime;

    /**
     * 最小单位
     */
    private String miniUnit;
    private String miniUnitName;

    /**
     * 药品重量
     */
    private BigDecimal drugWeight;
    /**
     * 药品重量单位
     */
    private String drugWeightUnit;
    private String drugWeightUnitName;
    /**
     * 录入状态 1-录入 2-确定 3-执行 4-执行 5-停止
     */
    private String statusFlag;
    private Date statusTime;
    /**
     * 费用标志
     * 1-自备 2-嘱托 3-基数药 4-出院带药
     */
    private String selfBuy;

    public String getSelfBuyName() {
        if (selfBuy == null) {
            return "";
        }
        switch (selfBuy) {
            case "1":
                return "自备";
            case "2":
                return "嘱托";
            case "3":
                return "基数药";
            case "4":
                return "出院带药";
            default:
                return "";
        }
    }

    /**
     * 一次剂量
     */
    private BigDecimal dose;
    /**
     * 一次剂量 单位
     */
    private String doseUnit;
    private String doseUnitName;

    /**
     * 执行用量 这个和 drug_quan 一样 ，这个就不是四舍五入了
     */
    private BigDecimal drugOcc;

    /**
     * 药品体积
     */
    private BigDecimal drugVolume;

    /**
     * 药品体积单位
     */
    private String drugVolUnit;
    /**
     * 父医嘱
     */
    private BigDecimal parentNo;

    private String parentNoStr;

    /**
     * 父医嘱 的名称
     */
    private String parentNoName;
    /**
     * 包装体积
     */
    private BigDecimal packSize;
    /**
     * 包装单位体积
     */
    private String packUnit;
    /**
     * 0 普通 1 需住院确认
     */
    private String paySelf;
    /**
     * 00-项目 01-小包装 99-大包装
     */
    private String serial;
    private String serialName;
    /**
     * 药房 序号
     */
    private String groupNo;
    private String groupNoName;

    /**
     * 1：医生录入
     */
    private String doctorFlag;
    /**
     * 执行科室
     */
    private String execUnit;
    private String execUnitName;
    /**
     * 申请已接收
     */
    private String regFlag;
    /**
     * 医保自费标志
     */
    private String ybSelfFlag;
    /**
     * 紧急标志
     */
    private String emergencyFlag;
    /**
     * 饭前饭后 标志
     */
    private String kfFlag;
    /**
     * 抗菌药物
     */
    private Integer kjywFlag;

    /**
     * 药房剩余库存
     */
    private BigDecimal stockAmount;

    /**
     * >0 这个患者的科室就不能这个药品
     */
    private Integer deptRestrictions;

    /**
     * 1= 禁止药房使用
     */
    private Integer visibleFlagZy;


    /**
     * exclu 返回时间  不知道是干什么的
     */
    private Date excluBackTime;
    private BigDecimal excluActOrderNo;
    private String excluType;

    /**
     * 不知道是干什么的
     */
    private String clCode;

    private String endTimeB;

    /**
     * 患者的科室
     */
    private String deptCode;
    private String deptName;
    /**
     * 患者病区
     */
    private String wardCode;
    private String wardName;

    /**
     * 表里面的新增标志
     */
    private String newFlag;

    /**
     * 管床医生
     */
    private String referPhysician;
    private String referPhysicianName;

    private String consultPhysician;
    private String consultPhysicianName;



    /*
     * 如果这个药是抗菌药物的话 就需要在 yz_act_record_kss中插入
     * */
    /**
     * 用药方式
     * 0-无
     * 1-手术预防用药 2-非手术预防用药 3-治疗用药-标本已送检 4-治疗用药-标本未已送检
     * 5-皮试用药
     */
    private Integer yyfs;
    /**
     * 手术切口
     * 0-无
     * 1-Ⅰ类切口 2-Ⅱ类切口  3-Ⅲ类切口
     * 4-微创 5-介入 6-其他
     */
    private Integer ssqk;
    /**
     * 术前用药时间
     * 0-无
     * 1-0.5至1小时
     * 2-2小时
     * 3-其他
     */
    private Integer yysj;
    /**
     * 药品的等级
     */
    private Integer ypLevel;
    /**
     * 删除标志
     */
    private Integer delFlag;
    /**
     * 转科病房
     */
    private String zkWardCode;
    /**
     * 转科科室
     */
    private String zkDeptCode;

    private List<XinZhenYzActOrder> children;

    private String orderGroup;

    private String executer1;
    private String executer2;

    private int newOrderFlag;

    /**
     * 普通医生有限制用药，上级医生可以临时给权限
     */
    private String superiorDoctor;
    private String billItemZy;

    public String getStatusFlagName() {
        if (statusFlag == null) return "";
        if (statusFlag.equals("1")) {
            return "录入";
        }
        if (statusFlag.equals("2")) {
            return "确认";
        }
        return "";
    }

    public String getYbSelfFlagName() {
        if ("1".equals(ybSelfFlag)) return "是";
        return "否";
    }
}
