package thyyxxk.webserver.dao.his.zhuyuanyisheng;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.*;
import thyyxxk.webserver.entity.datamodify.GetDropdownBox;
import thyyxxk.webserver.entity.datamodify.SelectV2;
import thyyxxk.webserver.entity.datamodify.YzActOrder;
import thyyxxk.webserver.entity.datamodify.ZyDetailCharge;
import thyyxxk.webserver.entity.exceedingDischargeDays.ExceedingDischargeDays;
import thyyxxk.webserver.entity.inpatient.patient.Overview;
import thyyxxk.webserver.entity.inpatient.patient.Patient;
import thyyxxk.webserver.entity.login.UserInfo;
import thyyxxk.webserver.entity.medicine.YpZdGroupName;
import thyyxxk.webserver.entity.yzcheck.ChargeLimitations;
import thyyxxk.webserver.entity.zhuyuanyisheng.DoctorSOrderFee;
import thyyxxk.webserver.entity.zhuyuanyisheng.OneClickOrder;
import thyyxxk.webserver.entity.zhuyuanyisheng.ZyOrderZk;
import thyyxxk.webserver.entity.zhuyuanyisheng.dto.doctorAuth.DoctorAuthParams;
import thyyxxk.webserver.entity.zhuyuanyisheng.jianyanjiancha.YshYjReq;
import thyyxxk.webserver.entity.zhuyuanyisheng.vo.doctorAuth.DoctorAuthRest;
import thyyxxk.webserver.entity.zhuyuanyisheng.yizhuluru.*;
import thyyxxk.webserver.utils.DateUtil;
import thyyxxk.webserver.utils.WrapperUtils;

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

/**
 * <p>
 * 描述： 医嘱录入dao
 * </p>
 *
 * @author xc
 * &#064;date  2022-01-04 17:00
 */
@Mapper
public interface YiZhuLuRuDao {


    @Select("SELECT " +
            "RTRIM(a.bed_no) bedNo, " +
            "RTRIM(a.inpatient_no) inpatientNo, " +
            "a.admiss_times, " +
            "RTRIM(a.name) as name, " +
            "sex=isnull(a.sex, 9), " +
            "mdtrtId=(select b.mdtrt_id from t_si_pat_info b where b.pat_no=a.inpatient_no " +
            "and b.times=a.admiss_times and b.ledger_sn=a.times_billed), " +
            "injurySerialNo=(select serial_no from t_injury_si_pat_info where pat_no=a.inpatient_no " +
            "and times=a.admiss_times and ledger_sn=a.times_billed), " +
            "medType=a.med_type, " +
            "dismissOrder=(select count(1) from yz_act_order b where b.inpatient_no=a.inpatient_no " +
            "and b.admiss_times=a.admiss_times and status_flag > '1' and isnull(group_no,'00')='00' " +
            "and order_code in (select order_code from yz_zd_order_item_confirm where item_name in (N'出院',N'死亡')))," +
            "orderNoCount = (select count(1) " +
            "                    from yz_act_order c " +
            "                    where a.inpatient_no = c.inpatient_no " +
            "                      and c.admiss_times = a.admiss_times " +
            "                      and c.status_flag = '1' " +
            "                      and c.enter_oper = #{userCode}), " +
            "                   refer_physician, " +
            "                   (select name from a_employee_mi where code = refer_physician) as refer_physician_name, " +
            "                   consult_physician, " +
            "                   (select name from a_employee_mi where code = refer_physician) as consult_physician_name, " +
            "                   dept_director, " +
            "                   (select name from a_employee_mi where code = refer_physician) as dept_director_name " +
            "FROM zy_actpatient a with (NOLOCK) " +
            "where refer_physician = #{code} " +
            "ORDER BY cast(bed_no AS int) ")
    List<Patient> getMyPatient(String code);


    @Select("select isnull(balance,0) balance, " +
            "       total_charge, " +
            "       charge1, " +
            "       charge2, " +
            "       charge3, " +
            "       charge4, " +
            "       charge5, " +
            "       charge6, " +
            "       charge7, " +
            "       charge8, " +
            "       charge9, " +
            "       charge10, " +
            "       charge11, " +
            "       charge12, " +
            "       charge13, " +
            "       charge14, " +
            "       charge15, " +
            "       charge16, " +
            "       charge17, " +
            "       charge18, " +
            "       charge19, " +
            "       charge20, " +
            "       charge21, " +
            "       charge22, " +
            "       charge23, " +
            "       charge24, " +
            "       charge25, " +
            "       charge26, " +
            "       charge27, " +
            "       charge28, " +
            "       charge29, " +
            "       charge30, " +
            "       yp   = (isnull(charge1 + charge2 + charge28, 0))," +
            "       jyjc = (isnull(charge8 + charge9 + charge11 + charge18 + charge13, 0))," +
            "       isnull(charge_yb, 0) charge_yb " +
            "from zy_ledger_file with (NOLOCK) " +
            "where inpatient_no = #{inpatientNo} " +
            "  and admiss_times = #{admissTimes} " +
            "  and ledger_sn = #{ledgerSn} ")
    HuanZheFeiYong feiYongXinXi(@Param("inpatientNo") String inpatientNo,
                                @Param("admissTimes") Integer admissTimes,
                                @Param("ledgerSn") Integer ledgerSn);

    @Select("select * from yz_act_order with (NOLOCK) ${ew.customSqlSegment}")
    List<YzActOrder> getYiZhuShuJuByOrderNo(@Param("ew") QueryWrapper<YzActOrder> actOrderNo);

    @Select("select max(ledger_sn) from zy_ledger_file a left join zy_actpatient b on a.inpatient_no = b.inpatient_no and a.admiss_times = b.admiss_times"+
            " where a.inpatient_no = #{inpatientNo} and a.admiss_times = #{admissTimes}")
    Integer getledgerSnFromYiZhu(@Param("inpatientNo") String inpatientNo,
                                 @Param("admissTimes") Integer admissTimes);

    default List<XinZhenYzActOrder> selectOrderNo(@Param(Constants.WRAPPER) QueryWrapper<?> wq) {
        String fullSql = WrapperUtils.getFullSql(wq);
        List<XinZhenYzActOrder> xinZhenYzActOrders = this.selectOrderNoByOld(fullSql);
        List<XinZhenYzActOrder> xinZhenYzActOrders1 = this.selectOrderNoByNew(fullSql);
        List<XinZhenYzActOrder> result = new ArrayList<>();
        result.addAll(xinZhenYzActOrders1);
        result.addAll(xinZhenYzActOrders);
        return result;
    }


    @Select("select                     cast(a.act_order_no as decimal) as act_order_no, " +
            "                           cast(cast(a.act_order_no as decimal) as varchar) id, " +
            "                           order_code, " +
            "                           order_name, " +
            "                           rtrim(frequ_code)                                frequ_code, " +
            "    frequ_code_name      = (select rtrim(comm) " +
            "                            from yz_order_frequency " +
            "                            where code = frequ_code), " +
            "                           instruction, " +
            "                           discription, " +
            "                           infant_flag, " +
            "                           order_time, " +
            "                           physician, " +
            "                           start_time, " +
            "                           drug_specification, " +
            "                           drug_quan, " +
            "    mini_unit_name       = (select name " +
            "                            from yp_zd_unit with (NOLOCK) " +
            "                            where code = mini_unit), " +
            "                           rtrim(supply_code)                               supply_code, " +
            "    supply_code_name     = (select rtrim(supply_name) " +
            "                            from yz_supply_type with (NOLOCK) " +
            "                            where yz_supply_type.supply_code = a.supply_code), " +
            "                           a.inpatient_no, " +
            "                           a.admiss_times, " +
            "                           drug_flag, " +
            "                           enter_oper, " +
            "    enter_oper_name      = (select top (1) rtrim(name) " +
            "                            from a_employee_mi with (NOLOCK) " +
            "                            where code = enter_oper) /* 录入人 */, " +
            "                           enter_time, " +
            "                           mini_unit, " +
            "                           drug_weight, " +
            "                           drug_weight_unit, " +
            "                           rtrim(status_flag)                               status_flag, " +
            "                           status_time, " +
            "                           cast(a.parent_no as decimal) as parent_no," +
            "                           cast(cast(a.parent_no as decimal) as varchar) as parent_no_str, " +
            "    parent_no_name       = (select kfc.order_name from yz_act_order kfc where kfc.act_order_no = a.parent_no), " +
            "                           self_buy, " +
            "                           dose, " +
            "                           dose_unit, " +
            "    dose_unit_name       = (select name " +
            "                            from yp_zd_unit with (NOLOCK) " +
            "                            where dose_unit = code), " +
            "                           drug_occ, " +
            "                           drug_volume, " +
            "                           drug_vol_unit, " +
            "                           exclu_back_time, " +
            "                           exclu_act_order_no, " +
            "                           pay_self, " +
            "                           serial, " +
            "                           group_no, " +
            "                           signer, " +
            "                           cl_code, " +
            "                           doctor_flag, " +
            "                           emergency_flag, " +
            "    exclu_type='', " +
            "    end_time_b=end_time, " +
            "    new_flag='0', " +
            "    order_no_pattern=0, " +
            "    suprice_flag='', " +
            "    self_flag            ='', " +
            "    pack_size=0.0, " +
            "    parent_no_c=           -1000, " +
            "                           reg_flag, " +
            "    parent_flag='', " +
            "                           rtrim(yb_self_flag) as yb_self_flag, " +
            "                           kf_flag, " +
            "                           refer_physician, " +
            "                           consult_physician, " +
            "    physician_name       = (select top (1) rtrim(name) " +
            "                            from a_employee_mi with (NOLOCK) " +
            "                            where code = physician) /* 开这个医嘱的医生 */,  " +
            "                           exec_unit, " +
            "    exec_unit_name       = (select top (1) rtrim(name) " +
            "                            from zd_unit_code with (NOLOCK) " +
            "                            where code = exec_unit), " +
            "                           a.dept_code, " +
            "    dept_name            = (select top (1) rtrim(name) " +
            "                            from zd_unit_code with (NOLOCK) " +
            "                            where code = dept_code), " +
            "                           a.ward_code, " +
            "    ward_name            = (select top (1) rtrim(name) " +
            "                            from zd_unit_code with (NOLOCK) " +
            "                            where code = a.ward_code), " +
            "    /*管床医生*/ " +
            "    refer_physician_name = (select rtrim(name) " +
            "                            from a_employee_mi with (NOLOCK) " +
            "                            where code = refer_physician), " +
            "    group_no_name        = (select rtrim(group_name) " +
            "                            from yp_zd_group_name with (NOLOCK) " +
            "                            where a.group_no = group_no), " +
            "    signer_name          = (select top (1) rtrim(name) " +
            "                            from a_employee_mi with (NOLOCK) " +
            "                            where code = signer) /*确认人*/, " +
            "                           confirm_time /*确认时间*/, " +
            "                           modifier, " +
            "    modifier_name        = (select top (1) rtrim(name) " +
            "                            from a_employee_mi with (NOLOCK) " +
            "                            where code = modifier) /*停止人*/, " +
            "                           end_time /*停止时间*/, " +
            "                           b.new_ward as                                    zkWardCode, " +
            "                           b.new_dept as                                    zkDeptCode, " +
            "                           kss.yyfs, " +
            "                           kss.ssqk, " +
            "                           kss.yysj, " +
            "    executer1            = (select name from a_employee_mi with (NOLOCK) where code = executer1), " +
            "    executer2=             (select name from a_employee_mi with (NOLOCK) where code = executer2)," +
            "    superiorDoctor = (select rtrim(authorized_doctor) from new_act_order_recording na where na.act_order_no = a.act_order_no) " +
            "from view_xc_all_yz a  with (NOLOCK) left join " +
            "zy_order_zk b with (NOLOCK) on (a.act_order_no = b.act_order_no) left join " +
            "yz_act_record_kss kss on (a.act_order_no = kss.act_order_no) " +
            "where status_flag = '1' and  ${sql} ")
    List<XinZhenYzActOrder> selectOrderNoByNew(String sql);


    @Select("select                     cast(a.act_order_no as decimal)               as act_order_no,\n" +
            "                           cast(cast(a.act_order_no as decimal) as varchar) id,\n" +
            "                           order_code,\n" +
            "                           order_name,\n" +
            "                           rtrim(frequ_code)                                frequ_code,\n" +
            "    frequ_code_name      = (select rtrim(comm)\n" +
            "                            from yz_order_frequency\n" +
            "                            where code = frequ_code),\n" +
            "                           instruction,\n" +
            "                           discription,\n" +
            "                           infant_flag,\n" +
            "                           order_time,\n" +
            "                           physician,\n" +
            "                           start_time,\n" +
            "                           drug_specification,\n" +
            "                           drug_quan,\n" +
            "    mini_unit_name       = (select name\n" +
            "                            from yp_zd_unit with (NOLOCK)\n" +
            "                            where code = mini_unit),\n" +
            "                           rtrim(supply_code)                               supply_code,\n" +
            "    supply_code_name     = (select rtrim(supply_name)\n" +
            "                            from yz_supply_type with (NOLOCK)\n" +
            "                            where yz_supply_type.supply_code = a.supply_code),\n" +
            "                           a.inpatient_no,\n" +
            "                           a.admiss_times,\n" +
            "                           drug_flag,\n" +
            "                           enter_oper,\n" +
            "    enter_oper_name      = (select top (1) rtrim(name)\n" +
            "                            from a_employee_mi with (NOLOCK)\n" +
            "                            where code = enter_oper) /* 录入人 */,\n" +
            "                           enter_time,\n" +
            "                           mini_unit,\n" +
            "                           drug_weight,\n" +
            "                           drug_weight_unit,\n" +
            "                           rtrim(status_flag)                               status_flag,\n" +
            "                           status_time,\n" +
            "                           cast(a.parent_no as decimal)                  as parent_no,\n" +
            "                           cast(cast(a.parent_no as decimal) as varchar) as parent_no_str,\n" +
            "    parent_no_name       = (select kfc.order_name\n" +
            "                            from yz_act_order kfc\n" +
            "                            where kfc.act_order_no = a.parent_no),\n" +
            "                           self_buy,\n" +
            "                           dose,\n" +
            "                           dose_unit,\n" +
            "    dose_unit_name       = (select name\n" +
            "                            from yp_zd_unit with (NOLOCK)\n" +
            "                            where dose_unit = code),\n" +
            "                           drug_occ,\n" +
            "                           drug_volume,\n" +
            "                           drug_vol_unit,\n" +
            "                           exclu_back_time,\n" +
            "                           exclu_act_order_no,\n" +
            "                           pay_self,\n" +
            "                           serial,\n" +
            "                           group_no,\n" +
            "                           signer,\n" +
            "                           cl_code,\n" +
            "                           doctor_flag,\n" +
            "                           emergency_flag,\n" +
            "    exclu_type='',\n" +
            "    end_time_b=end_time,\n" +
            "    new_flag='0',\n" +
            "    order_no_pattern=0,\n" +
            "    suprice_flag='',\n" +
            "    self_flag            ='',\n" +
            "    pack_size=0.0,\n" +
            "    parent_no_c=           -1000,\n" +
            "                           reg_flag,\n" +
            "    parent_flag='',\n" +
            "                           rtrim(yb_self_flag)                           as yb_self_flag,\n" +
            "                           kf_flag,\n" +
            "                           refer_physician,\n" +
            "                           consult_physician,\n" +
            "    physician_name       = (select top (1) rtrim(name)\n" +
            "                            from a_employee_mi with (NOLOCK)\n" +
            "                            where code = physician) /* 开这个医嘱的医生 */,\n" +
            "                           exec_unit,\n" +
            "    exec_unit_name       = (select top (1) rtrim(name)\n" +
            "                            from zd_unit_code with (NOLOCK)\n" +
            "                            where code = exec_unit),\n" +
            "                           a.dept_code,\n" +
            "    dept_name            = (select top (1) rtrim(name)\n" +
            "                            from zd_unit_code with (NOLOCK)\n" +
            "                            where code = dept_code),\n" +
            "                           a.ward_code,\n" +
            "    ward_name            = (select top (1) rtrim(name)\n" +
            "                            from zd_unit_code with (NOLOCK)\n" +
            "                            where code = a.ward_code),\n" +
            "    /*管床医生*/\n" +
            "    refer_physician_name = (select rtrim(name)\n" +
            "                            from a_employee_mi with (NOLOCK)\n" +
            "                            where code = refer_physician),\n" +
            "    group_no_name        = (select rtrim(group_name)\n" +
            "                            from yp_zd_group_name with (NOLOCK)\n" +
            "                            where a.group_no = group_no),\n" +
            "    signer_name          = (select top (1) rtrim(name)\n" +
            "                            from a_employee_mi with (NOLOCK)\n" +
            "                            where code = signer) /*确认人*/,\n" +
            "                           confirm_time /*确认时间*/,\n" +
            "                           modifier,\n" +
            "    modifier_name        = (select top (1) rtrim(name)\n" +
            "                            from a_employee_mi with (NOLOCK)\n" +
            "                            where code = modifier) /*停止人*/,\n" +
            "                           end_time /*停止时间*/,\n" +
            "    executer1            = (select name\n" +
            "                            from a_employee_mi with (NOLOCK) \n" +
            "                            where code = executer1),\n" +
            "    executer2=             (select name\n" +
            "                            from a_employee_mi with (NOLOCK)\n" +
            "                            where code = executer2)\n" +
            "from view_xc_all_yz a with (NOLOCK)\n" +
            "where status_flag <> '1' and ${sql} ;")
    List<XinZhenYzActOrder> selectOrderNoByOld(String sql);


    @Select("select act_order_no, " +
            "rtrim(status_flag) status_flag," +
            "frequ_code," +
            "enter_oper," +
            "inpatient_no " +
            "from yz_act_order with (NOLOCK) " +
            "${ew.customSqlSegment}")
    List<XinZhenYzActOrder> getOrdersToDelete(@Param(Constants.WRAPPER) Wrapper<?> wq);

    @Update("update yz_act_order " +
            "set " +
            "    order_time  = #{order.orderTime,jdbcType=TIMESTAMP}, " +
            "    start_time  = #{order.startTime,jdbcType=TIMESTAMP}, " +
            "    end_time    = #{order.endTime,jdbcType=TIMESTAMP}, " +
            "    supply_code = '044', " +
            "    frequ_code  = #{order.frequCode}," +
            "    group_no  = #{order.groupNo}," +
            "    exec_unit  = #{order.execUnit}, " +
            "    modifier = #{order.modifier} " +
            "where act_order_no = ${orderNo} ")
    void updateSubOrderStatus(BigDecimal orderNo, XinZhenYzActOrder order);

    @Delete("delete yz_act_order ${ew.customSqlSegment} ")
    void deleteMultipleOrders(@Param(Constants.WRAPPER) Wrapper<?> wq);

    @Update("<script>" +
            "update yz_act_order " +
            "set parent_no = null " +
            "where inpatient_no = #{patNo} " +
            "  and admiss_times = #{times} " +
            "  and parent_no in " +
            "<foreach collection='list' item='item'  open='(' close=')' separator=','>" +
            "#{item}" +
            "</foreach>" +
            "</script>")
    void deleteParentChildRelationship(String patNo,
                                       Integer times,
                                       List<BigDecimal> list);

    @Select("<script>" +
            "<foreach collection=\"list\" item=\"item\" index=\"index\" separator=\";\">" +
            "update yz_act_order " +
            "set modifier = #{userCode}, " +
            " end_time = #{item.endTime} " +
            "where inpatient_no = #{patNo} " +
            "  and admiss_times = #{times}" +
            "  and (act_order_no = #{item.actOrderNo} or parent_no = #{item.actOrderNo}) " +
            "  and end_time is null" +
            "</foreach>" +
            "</script>")
    void setStopTime(List<XinZhenYzActOrder> list,
                     String userCode,
                     String patNo,
                     Integer times);


    @Select("SELECT         rtrim(a.code) + rtrim(serial) as id, " +
            "               py_code=a.py_code, " +
            "                d_code =a.d_code, " +
            "                order_code =a.code, " +
            "                order_name =a.name, " +
            "                drug_specification=a.specification, " +
            "                    drug_flag =case a.infusion_flag " +
            "                    when '1' then 'i' " +
            "                    else (case categories_flag " +
            "                              when '0' " +
            "                                  then 'd' " +
            "                              else 'z' " +
            "                        end) " +
            "                           end, " +
            "                parent_code=null, " +
            "                exclu_group_type=null, " +
            "                discription=case a.infusion_flag " +
            "                                when '1' then '大输液' " +
            "                                else (case " +
            "                                          when a.code >= '30000' and a.code < '50000' then '中药' " +
            "                                          else '西药  ' end) end + convert(char(10), a.pack_retprice) + '元' + '(医保类别：' + " +
            "                            ltrim(rtrim(yb_flag_new)) + ';报销比例：' + ltrim(rtrim(yb_bl_new)) + ';医保说明：' + " +
            "                            ltrim(rtrim(yb_comment_new)) + ')', " +
            "                serial=a.serial, " +
            "                group_no=a.group_no, " +
            "                infusion_flag=a.infusion_flag, " +
            "                group_name =a.group_name, " +
            "                pack_size=a.pack_size," +
            "                 (select name " +
            "        from yp_zd_unit with (NOLOCK) " +
            "        where code = pack_unit)  as pack_size_name, " +
            "                order_class='Y', " +
            "                spec_pack=a.spec_pack, " +
            "                jsy_flag =a.jsy_flag, " +
            "                xnh_flag, " +
            "                yb_comment, " +
            "                dosage = a.dosage, " +
            "                yb_type, " +
            "                yb_flag_new," +
            "                father_flag, " +
            "                manu_name=(select name from yp_zd_manufactory with (NOLOCK) where code = a.manu_code), " +
            "                stock_amount=a.stock_amount, " +
            "                national_code," +
            "                national_name,mini_unit_name = (select name from yp_zd_unit where code = mini_unit)  " +
            "FROM view_yp_zd_dict_base_yf a with (NOLOCK) " +
            "WHERE isnull(a.visible_flag_zy, '') <> '1' " +
            "  and (a.py_code like #{code} or a.name like #{code} or code like #{code}) " +
            "  and group_no = '${groupNo}' ")
    List<YiZhuMingChen> yiZhuYaoPing(@Param("code") String code,
                                     @Param("groupNo") String groupNo);

    @Select("select act_order_no, " +
            "rtrim(status_flag) as status_flag," +
            "rtrim(frequ_code) as frequ_code," +
            "rtrim(supply_code) as supply_code, " +
            "inpatient_no," +
            "admiss_times," +
            "enter_oper," +
            "rtrim(serial) as serial," +
            "order_time," +
            "start_time," +
            "end_time," +
            "group_no," +
            "ward_code," +
            "parent_no " +
            "from yz_act_order with (NOLOCK) " +
            "where act_order_no = #{orderNo} ")
    XinZhenYzActOrder getActOrderNoOne(String orderNo);

    @Select("select frequ_code from yz_act_order where act_order_no = ${orderNo} ")
    String selectParentNo(String orderNo);

    /**
     * 获取，有未确认和未执行的医嘱
     *
     * @param patNo   住院号
     * @param times   住院次数
     * @param orderNo 医嘱号
     * @return 数据
     */
    @Select("select rtrim(status_flag) status_flag,order_name, act_order_no,frequ_code " +
            "from yz_act_order with (NOLOCK) " +
            "where inpatient_no = #{patNo} " +
            "  and admiss_times = #{times} " +
            "  and status_flag in ('1', '2')" +
            "  and act_order_no <> #{orderNo} " +
            "  and frequ_code = N'ONCE'" +
            " union all " +
            "select rtrim(status_flag) status_flag,order_name, act_order_no,frequ_code " +
            "from yz_act_order with (NOLOCK) " +
            "where inpatient_no = #{patNo} " +
            "  and admiss_times = #{times} " +
            "  and status_flag in ('1') " +
            "  and act_order_no <> #{orderNo} " +
            "  and frequ_code <> N'ONCE' ")
    List<XinZhenYzActOrder> thereAreUnexecutedOrders(String patNo, Integer times, BigDecimal orderNo);

    @Select("select count(1) " +
            "from yz_act_order " +
            "where inpatient_no = #{yz.inpatientNo} " +
            "  and admiss_times = #{yz.admissTimes} " +
            "  and status_flag = 1 " +
            "  and isnull(self_buy, '0') <> '4' " +
            "  and enter_oper = #{userCode} " +
            "  and order_code in (select rtrim(order_code) " +
            "                     from yz_zd_order_item_confirm " +
            "                     where item_name = N'出院')")
    int selectDischargeOrde(@Param("yz") XinZhenYiZhu yz,
                            @Param("userCode") String userCode);

    @Update("update yz_act_order set frequ_code = 'ONCE' WHERE act_order_no = #{orderNo};" +
            "update yz_act_order " +
            "set modifier           = #{userCode}, " +
            "    end_time           = #{date}, " +
            "    exclu_act_order_no = #{orderNo}, " +
            "    status_flag = '5' " +
            "where inpatient_no = #{patNo} " +
            "  and admiss_times = #{times} " +
            "  and status_flag in ('2','3','4') " +
            "  and frequ_code != 'ONCE' " +
            "  and act_order_no <> #{orderNo}" +
            "  and (end_time >  #{date} or end_time is null )")
    void stopOrder(String patNo, Integer times, Date date, String userCode, BigDecimal orderNo);

    @Update("update yz_act_order " +
            "set confirm_time = #{confirmDate}, " +
            "    signer       = #{userCode}, " +
            "    status_time  = #{confirmDate}, " +
            "    status_flag  = '2'," +
            "    supply_code  = case " +
            "                      when parent_no is not null then (select isnull(nullif(supply_child, ''), '044') " +
            "                                                       from yz_supply_type c " +
            "                                                       where c.supply_code = (select supply_code " +
            "                                                                              from yz_act_order b " +
            "                                                                              where b.act_order_no = yz_act_order.parent_no)) " +
            "                      else " +
            "                          yz_act_order.supply_code end " +
            " where act_order_no = #{decimal}")
    void confirmOrders(BigDecimal decimal, String userCode, Date confirmDate);


    @Update("update yz_act_order " +
            "set confirm_time = #{confirmDate}, " +
            "    signer       = #{userCode}, " +
            "    status_time  = #{confirmDate}, " +
            "    status_flag  = '2'," +
            "    supply_code  = case " +
            "                      when parent_no is not null then (select isnull(nullif(supply_child, ''), '044') " +
            "                                                       from yz_supply_type c " +
            "                                                       where c.supply_code = (select supply_code " +
            "                                                                              from yz_act_order b " +
            "                                                                              where b.act_order_no = yz_act_order.parent_no)) " +
            "                      else " +
            "                          yz_act_order.supply_code end," +
            " enter_oper = #{userCode},physician = #{userCode}  " +
            " where act_order_no = #{decimal}")
    void confirmOrdersSuperiorDoctor(BigDecimal decimal, String userCode, Date confirmDate);

    @Update("update yz_act_order " +
            "set confirm_time = #{confirmDate}, " +
            "    signer       = #{userCode}, " +
            "    status_time  = #{confirmDate}, " +
            "    status_flag  = '2'," +
            "    modifier     = #{userCode}," +
            "    end_time = #{confirmDate}, " +
            "    frequ_code = 'ONCE'  " +
            " where act_order_no = #{decimal} ")
    void takeMedicineAfterDischargeStopOrder(BigDecimal decimal, String userCode, Date confirmDate);


    @Update("update yz_act_order " +
            "set confirm_time = #{confirmDate}, " +
            "    signer       = #{userCode}, " +
            "    status_time  = #{confirmDate}, " +
            "    status_flag  = '2'," +
            "    modifier     = #{userCode}," +
            "    end_time = #{confirmDate}, " +
            "    frequ_code = 'ONCE',enter_oper = #{userCode},physician = #{userCode}  " +
            " where act_order_no = #{decimal} ")
    void takeMedicineAfterDischargeStopOrderAndSuperiorDoctor(BigDecimal decimal, String userCode, Date confirmDate);

    @Delete("delete yz_act_record_kss where act_order_no =#{orderNo}; " +
            "delete zy_order_zk where act_order_no =#{orderNo};" +
            "delete op_record where inpatient_no = #{patNo} and act_order_no =#{orderNo};" +
            "delete ysh_yj_req where inpatient_no =#{patNo} and act_order_no =#{orderNo};" +
            "DELETE FROM yz_act_order WHERE act_order_no = #{orderNo};   ")
    void toDeleteAnOrder(String orderNo, String patNo);


    @Update("UPDATE yz_act_order SET parent_no = NULL WHERE parent_no = #{orderNo} ")
    void deleteGroup(String orderNo);


    @Delete("delete yz_act_order where " +
            "act_order_no = #{orderNo} ")
    void deleteOrderNo(String orderNo);

    @Insert("INSERT INTO yz_act_order (order_code, order_name, frequ_code, instruction, discription, infant_flag, order_time, " +
            "    /*录入人*/physician, start_time, drug_specification, drug_quan, supply_code, act_order_no, inpatient_no, " +
            "                          admiss_times, drug_flag/*药品中找这个是 药品的类型 a i d*/, enter_oper, /*录入时间*/ " +
            "                          enter_time, " +
            "                          mini_unit /*药品中找 最小包装规格*/, " +
            "                          drug_weight/*药品的重量*/, drug_weight_unit/*药品重量单位*/, " +
            "                          status_flag/*1*/, self_buy, dose, dose_unit, drug_occ, drug_volume/*药品中的 volum 找*/, " +
            "                          drug_vol_unit/* 药品中的 vol_unit */, pay_self/*0*/, " +
            "                          serial/*前端传*/, group_no/*药房 */, doctor_flag/*写死为 1*/, exec_unit, dept_code/* 在院病人表中的 dept */, " +
            "                          ward_code /* 在院病人表中的 zk_ward*/, " +
            "                          reg_flag/* 0 */, " +
            "                          yb_self_flag/*医保自费标志*/, emergency_flag, " +
            "                          kf_flag /*饭前饭后*/, parent_no, refer_physician/*患者的管床医生*/, end_time," +
            "                          modifier) " +
            "values (#{pa.orderCode}, #{pa.orderName}, #{pa.frequCode}, #{pa.instruction}, #{pa.discription}, #{patInfo.infantFlag}, " +
            "        #{pa.orderTime}, #{userCode}, " +
            "        #{pa.startTime}, cast(#{pa.drugSpecification} as varchar(16)), #{pa.drugQuan,jdbcType=REAL}, #{pa.supplyCode}, #{pa.actOrderNo,jdbcType=REAL}, #{patInfo.inpatientNo}, " +
            "        #{patInfo.admissTimes}, #{pa.drugFlag}, #{userCode}, getdate(), " +
            "        #{pa.miniUnit}, #{pa.drugWeight,jdbcType = REAL}, #{pa.drugWeightUnit,jdbcType=REAL}, '1', #{pa.selfBuy}, " +
            "        #{pa.dose ,jdbcType = REAL}, #{pa.doseUnit}, #{pa.drugOcc ,jdbcType = REAL}, " +
            "        #{pa.drugVolume,jdbcType=REAL}, #{pa.drugVolUnit}, '0', #{pa.serial}, #{pa.groupNo}, '1', #{pa.execUnit}, " +
            "        #{patInfo.deptCode}, #{patInfo.deptCode}, '0', #{pa.ybSelfFlag}, #{pa.emergencyFlag}, " +
            "        #{pa.kfFlag}, #{pa.parentNo,jdbcType=REAL}, #{patInfo.referPhysician}, #{pa.endTime}," +
            "        #{pa.modifier})")
    void insertEntryOrder(XinZhenYiZhu patInfo, XinZhenYzActOrder pa, String userCode);

    @Update("update yz_act_order set " +
            "frequ_code = #{pa.frequCode}," +
            "supply_code = #{supplyCode}," +
            "exec_unit = #{pa.execUnit}," +
            "order_time = #{pa.orderTime}," +
            "start_time = #{pa.startTime,jdbcType=TIMESTAMP}," +
            "end_time = #{pa.endTime,jdbcType=TIMESTAMP}," +
            "group_no = #{pa.groupNo}," +
            "modifier = #{pa.modifier} " +
            "where  inpatient_no = #{pa.inpatientNo} " +
            " and admiss_times = #{pa.admissTimes}  " +
            " and parent_no = #{pa.actOrderNo,jdbcType=REAL} ")
    void howOftenTheSubPhysicianOrderIsModified(@Param("pa") XinZhenYzActOrder pa,
                                                @Param("supplyCode") String supplyCode);

    @Select("select isnull(nullif(supply_child, ''), '044') " +
            "from yz_supply_type " +
            "where supply_code = '${code}'")
    String selectSupplyCode(String code);


    @Select("SELECT rtrim(a.order_code) + '00' as id," +
            "a.py_code, " +
            "       a.d_code, " +
            "       a.order_code , " +
            "       rtrim(a.order_name) order_name, " +
            "       drug_specification='诊疗项目', " +
            "       drug_flag   = isnull(operation,'o') , " +
            "       a.parent_code , " +
            "       a.exclu_group_type, " +
            "       discription=a.discription + '  ' + a.yb_comment, " +
            "       serial       ='00', " +
            "       group_no='00', " +
            "       infusion_flag='', " +
            "       group_name   ='', " +
            "       pack_size=1, " +
            "       order_class=a.order_class, " +
            "       spec_pack='', " +
            "       jsy_flag     ='', " +
            "       xnh_flag='', " +
            "       yb_comment   =null," +
            "       exec_dept," +
            "       exec_dept_name = (select rtrim(name) from zd_unit_code where code = exec_dept), " +
            "       dosage='', " +
            "       yb_type='', " +
            "       father_flag='0', " +
            "       manu_name='', " +
            "       stock_amount=0 ," +
            "       min_age_restriction ," +
            "       max_age_restriction ," +
            "       gender_restriction " +
            "FROM yz_order_item a with (NOLOCK) " +
            "WHERE isnull(a.del_flag, '') <> '1' " +
            "  and (py_code like #{code} or order_name like #{code} or order_code like #{code}) " +
            "  and order_code not in (select zy_order_code from jc_zd_item) " +
            "  and isnull(exec_dept, '') <> '2010000' " +
            "  and order_class not in ('B','C','D') ")
    List<YiZhuMingChen> yiZhuXiangMu(String code);

    @Select("SELECT a.py_code, " +
            "       a.d_code, " +
            "       a.pattern_code as order_code, " +
            "       a.pattern_name as order_name, " +
            "       specification='                ', " +
            "       order_type ='t', " +
            "       parent_code=space(7), " +
            "       exclu_group_type=space(1), " +
            "       discription='成组医嘱', " +
            "       serial ='0000', " +
            "       group_no='0000', " +
            "       infusion_flag='', " +
            "       drug_flag ='', " +
            "       group_name ='', " +
            "       pack_size =1, " +
            "       order_class ='', " +
            "       spec_pack='', " +
            "       jsy_flag ='', " +
            "       exclu_group_type='', " +
            "       xnh_flag='', " +
            "       yb_comment =null, " +
            "       dosage = '', " +
            "       yb_type='', " +
            "       father_flag='0', " +
            "       manu_name='', " +
            "       stock_amount=0 " +
            "FROM yz_OrderPattern a with (NOLOCK) " +
            "where (py_code like #{code} or " +
            "pattern_name like #{code} or " +
            "d_code like  #{code}) and  dept_code = #{deptCode} ")
    List<YiZhuMingChen> composeOrders(String code, String deptCode);


    @Select("SELECT cast(rtrim(isnull(nullif(del_flag, " +
            "                                ''), " +
            "                         0)) as int) as del_flag, " +
            "       national_code                 as national_code, " +
            "       name                          as order_name " +
            "FROM yz_order_occurence a with (NOLOCK), " +
            "     zd_charge_item b with (NOLOCK) " +
            "where a.occ_code = b.code " +
            "  and a.order_code = #{code}")
    List<XinZhenYzActOrder> huoQuXiangMu(String code);


    @Select("select CAST(isnull(exclu_group_type, 0) AS INT)  " +
            "from yz_order_item with (NOLOCK) where order_code = #{code}")
    Integer shiFouPaiChiYiZhu(String code);


    @Select("select                 drug_flag,\n" +
            "                       categories_flag,\n" +
            "                       a.serial,\n" +
            "    /* 医保自费 */\n" +
            "                       cast(isnull(NULLIF(self_flag_yb,\n" +
            "                                          ''),\n" +
            "                                   0) as int)                      as self_flag_yb,\n" +
            "    /* 重量 */\n" +
            "                       weight,\n" +
            "    /* 重量单位 */\n" +
            "                       weigh_unit,\n" +
            "    weigh_unit_name  = (select name\n" +
            "                        from yp_zd_unit with (NOLOCK)\n" +
            "                        where code = weigh_unit),\n" +
            "    /*体积*/\n" +
            "                       volum,\n" +
            "    /*体积单位*/\n" +
            "                       vol_unit,\n" +
            "    vol_unit_name    = (select name\n" +
            "                        from yp_zd_unit with (NOLOCK)\n" +
            "                        where code = vol_unit),\n" +
            "    /*包装体积*/\n" +
            "                       pack_size,\n" +
            "    /*包装单位*/\n" +
            "                       pack_unit,\n" +
            "    pack_unit_name   = (select name\n" +
            "                        from yp_zd_unit with (NOLOCK)\n" +
            "                        where code = pack_unit),\n" +
            "    /*最小单位*/\n" +
            "                       mini_unit,\n" +
            "    mini_unit_name   = (select name\n" +
            "                        from yp_zd_unit with (NOLOCK)\n" +
            "                        where code = mini_unit),\n" +
            "    /* 需要判断医生的权限 在 select\n" +
            "        doctor_xz_yp\n" +
            "    from\n" +
            "        a_employee_mi */\n" +
            "                       cast(isnull(NULLIF(yp_level,\n" +
            "                                          ''),\n" +
            "                                   0) as int)                      as yp_level,\n" +
            "    /*需要皮试*/\n" +
            "                       cast(isnull(NULLIF(a.ps_flag,\n" +
            "                                          ''),\n" +
            "                                   0) as int)                      as ps_flag,\n" +
            "                       cast(isnull(NULLIF(kss_flag,\n" +
            "                                          ''),\n" +
            "                                   0) as int)                      as kss_flag,\n" +
            "                       cast(isnull(NULLIF(kjyw_flag,\n" +
            "                                          ''),\n" +
            "                                   0) as int)                      as kjyw_flag,\n" +
            "                       code                                        as order_code,\n" +
            "                       name                                        as order_name,\n" +
            "                       frequency                                   as frequCode,\n" +
            "                       (select isnull(rtrim(comm),\n" +
            "                                      '')\n" +
            "                        from yz_order_frequency\n" +
            "                        where yz_order_frequency.code = frequency) as frequCodeName,\n" +
            "                       supply_code                                 as supply_code,\n" +
            "    supply_code_name =supply_name,\n" +
            "                       national_code,\n" +
            "                       rtrim(jb_flag) as jb_flag,\n" +
            "                       high_warning_flag,\n" +
            "                       winning_bidder_flag,\n" +
            "                       focus_monitor_flag\n" +
            "from yp_zd_dict a with (NOLOCK)\n" +
            "         left join yz_supply_type c on (a.supply_type = c.supply_code)\n" +
            "where rtrim(code) + rtrim(a.serial) = '${code}'\n" +
            "  and cast(isnull(NULLIF(a.del_flag, ''), 0) as int) = 0;")
    YaoPinXinXi huoQuYaoPin(@Param("code") String code);


    @Select("select stock_amount, cast(isnull(nullif(visible_flag_zy, ''), 0) as int) as visible_flag_zy " +
            "from yp_base_yf " +
            "where rtrim(charge_code) + rtrim(serial) = '${code}' " +
            "  and group_no = '${groupNo}'")
    YaoPinXinXi huoQuJinYongXinXi(@Param("code") String code,
                                  @Param("groupNo") String groupNo);

    @Select("select count(1) " +
            "from yp_zd_dept " +
            "where charge_code = #{code}  " +
            "  and dept_code = #{dept} ")
    Integer restrictedUseInTheDepartment(@Param("code") String code,
                                         @Param("dept") String dept);

    @Select("select cast(isnull(NULLIF(doctor_xz_yp, ''), 0) as int) + 1  from a_employee_mi with (NOLOCK) where code = #{code}")
    Integer huoQuYiShenDengJi(String code);

    @Select("select cast(isnull(NULLIF(doctor_xz_yp, ''), 0) as int) + 1 as doctorLevel," +
            "       doctor_zy as doctorZy, " +
            "       dept_code," +
            "       code " +
            "from a_employee_mi with (NOLOCK) " +
            "where code = #{code} ")
    UserInfo selectedUserInfoByCode(String code);


    @Select("select rtrim(supply_code) code,rtrim(supply_name) name " +
            "from yz_supply_type with (NOLOCK) " +
            "where ps_flag in ('1', '0')")
    List<GetDropdownBox> piShiGeiYaoFangShi();

    @Select("select rtrim(code) code, rtrim(comm) name " +
            "from yz_order_frequency with (NOLOCK) " +
            "where (code like #{code} or comm like #{code})")
    List<GetDropdownBox> huoQuZhuYuanPinLv(String code);


    @Select("select rtrim(code) as code, rtrim(code) name " +
            "from yz_order_frequency")
    List<GetDropdownBox> selectFrequency();

    @Select("select rtrim(supply_code) code, " +
            "       rtrim(supply_name) name, " +
            "       py_code, " +
            "       d_code as          w_code " +
            "from yz_supply_type with (NOLOCK) where isnull(del_flag , '0') <> '1'")
    List<SelectV2> selectSupplyType();


    @Select("select rtrim(supply_code) code, rtrim(supply_name) name " +
            "from yz_supply_type with (NOLOCK) " +
            "where (supply_code like #{code} or supply_name like #{code} or py_code like #{code} )")
    List<GetDropdownBox> huoQuGeiYaoFangShi(String code);


    @Select("SELECT a.code code, " +
            "       a.name name " +
            "FROM zd_unit_code a with (NOLOCK), " +
            "     zd_dept_all b with (NOLOCK) " +
            "where isnull(a.del_flag, '0') <> '1' " +
            "  and a.code = b.small_dept " +
            "  and (a.code like #{code} or a.name like #{code} or py_code like #{code}) " +
            "group by code,name")
    List<GetDropdownBox> huoQuZhiXinKeShi(String code);


    @Select("<script>" +
            "select rtrim(code)                       order_code, " +
            "       rtrim(a.serial)                   serial, " +
            "       rtrim(group_no)                   group_no, " +
            "       rtrim(name)                       order_name," +
            "       case infusion_flag " +
            "           when '1' then 'i' " +
            "           else " +
            "               (case " +
            "                    when rtrim(code) &gt;= '30000' and rtrim(code) &lt; '50000' then 'z' " +
            "                    else 'd' end) end as drug_flag, " +
            "       mini_unit, " +
            "       isnull(weight,1)                  drug_weight, " +
            "       weigh_unit                        drug_weight_unit, " +
            "       isnull(volum,1)                   drug_volume, " +
            "       vol_unit                          drug_vol_unit," +
            "       isnull(pack_size,1) pack_size,  " +
            "       pack_unit," +
            "       a.pack_retprice,  " +
            "       national_code," +
            "       cast(isnull(NULLIF(kjyw_flag, ''), 0) as int) as kjyw_flag," +
            "       cast(isnull(NULLIF(yp_level, ''), 0) as int)  as yp_level," +
            "       cast(isnull(NULLIF(del_flag, ''), 0) as int)  as del_flag,  " +
            "       CASE " +
            "                           WHEN isnull(b.open_virtual2, '') = '1' then isnull(b.stock_amount_virtual2, 0) " +
            "                           else isnull(stock_amount,0) end as stock_amount," +
            "       cast(isnull(nullif(visible_flag_zy, ''), 0) as int) as visible_flag_zy," +
            "       deptRestrictions = (select count(1) from yp_zd_dept where code = yp_zd_dept.charge_code and dept_code = '${dept}')," +
            "       a.bill_item_zy  " +
            " from yp_zd_dict a with (NOLOCK)  " +
            " left join yp_base_yf b on (code = b.charge_code and  a.serial = b.serial) " +
            "where rtrim(code) + rtrim(a.serial) + rtrim(group_no) in " +
            "<foreach collection='code' item='item' index='index' open='(' close=')' separator=','>" +
            "#{item}" +
            "</foreach>" +
            "</script>")
    List<XinZhenYzActOrder> huoQuYaoPinXinXi(@Param("code") Set<String> code,
                                             @Param("dept") String dept);


    @Select("<script>" +
            "select          b.order_code, " +
            "                rtrim(c.name)                 order_name, " +
            "                national_code, " +
            "                kjyw_flag = 0, " +
            "                cast(rtrim(isnull(nullif(c.del_flag, " +
            "                                         ''), " +
            "                                  0)) as int) del_flag " +
            " from " +
            "     yz_order_occurence b with (NOLOCK) , " +
            "     zd_charge_item c with (NOLOCK) " +
            "where b.order_code in " +
            "<foreach collection='code' item='item' index='index' open='(' close=')' separator=','>" +
            "#{item}" +
            "</foreach>" +
            "  and b.occ_code = c.code" +
            "</script>")
    List<XinZhenYzActOrder> huoQuXiangMuXinXi(Set<String> code);

    @Select("select          b.order_code, " +
            "                rtrim(c.name)                    order_name, " +
            "                national_code, " +
            "    kjyw_flag = 0, " +
            "                cast(rtrim(isnull(nullif(c.del_flag, " +
            "                                         ''), " +
            "                                  0)) as int) as del_flag " +
            "from yz_order_occurence b with (NOLOCK), " +
            "     zd_charge_item c with (NOLOCK) " +
            "where b.order_code = #{code} " +
            "  and b.occ_code = c.code")
    List<XinZhenYzActOrder> itemDataOne(String code);


    @Select("select order_code, order_name, cast(ISNULL(del_flag, 0) as int) as del_flag  \n" +
            "from yz_order_item\n" +
            "where order_code = '${code}'")
    XinZhenYzActOrder yzItem(String code);


    @Select("select                 rtrim(code)                                            order_code, " +
            "                       rtrim(a.serial)                                     as serial, " +
            "                       rtrim(group_no)                                     as group_no, " +
            "                       rtrim(name)                                            order_name, " +
            "                       case infusion_flag " +
            "                           when '1' then 'i' " +
            "                           else " +
            "                               (case " +
            "                                    when rtrim(code) >= '30000' and rtrim(code) < " +
            "                                                                    '50000' then 'z' " +
            "                                    else 'd' end) end                      as drug_flag, " +
            "                       mini_unit, " +
            "                       isnull(weight, 1)                                      drug_weight, " +
            "                       weigh_unit                                             drug_weight_unit, " +
            "                       isnull(volum, 1)                                       drug_volume, " +
            "                       vol_unit                                               drug_vol_unit, " +
            "                       isnull(pack_size, 1)                                as pack_size, " +
            "                       pack_unit, " +
            "                       a.pack_retprice, " +
            "                       national_code, " +
            "                       cast(isnull(NULLIF(kjyw_flag, ''), 0) as int)       as kjyw_flag, " +
            "                       cast(isnull(NULLIF(yp_level, ''), 0) as int)        as yp_level, " +
            "                       cast(isnull(NULLIF(del_flag, ''), 0) as int)        as del_flag, " +
            "                       CASE " +
            "                           WHEN isnull(b.open_virtual2, '') = '1' then isnull(b.stock_amount_virtual2, 0) " +
            "                           else isnull(stock_amount, 0) end                as stock_amount, " +
            "                       cast(isnull(nullif(visible_flag_zy, ''), 0) as int) as visible_flag_zy," +
            "                       cast(isnull(NULLIF(kss_flag, ''), 0) as int)        as kss_flag, " +
            "    deptRestrictions = (select count(1) from yp_zd_dept where code = yp_zd_dept.charge_code and dept_code = '${dept}')," +
            "    supplyCode = ( select isnull(del_flag, 0) from yz_supply_type where supply_code = '${supplyCode}') " +
            "from yp_zd_dict a " +
            "         with (NOLOCK) " +
            "         left join yp_base_yf b on (code = b.charge_code and a.serial = b.serial) " +
            "where rtrim(code) + rtrim(a.serial) + rtrim(group_no) = #{code} ")
    XinZhenYzActOrder drugDataOne(String code, String dept, String supplyCode);

    default XinZhenYiZhu queryPatientInfo(String patNo,
                                          Integer times) {
        XinZhenYiZhu xinZhenYiZhu = this.sqlQueryPatientInfo(patNo, times);
        Date birthDate = xinZhenYiZhu.getBirthDate();
        if (birthDate != null) {
            try {
                xinZhenYiZhu.setAge(DateUtil.calculateAge(birthDate, xinZhenYiZhu.getAdmissDate()));
            } catch (Exception ignore) {
            }
        }

        return xinZhenYiZhu;
    }

    @Select("select          rtrim(a.inpatient_no)                as inpatient_no,\n" +
            "                admiss_times,\n" +
            "                rtrim(a.name)                        as name,\n" +
            "                rtrim(dept)                          as dept_code,\n" +
            "                a.sex,\n" +
            "                birth_date,\n" +
            "                rtrim(zk_ward)                       as ward_code,\n" +
            "                refer_physician,\n" +
            "                dept_director,\n" +
            "                times_billed,\n" +
            "                admiss_date,\n" +
            "                admiss_diag,\n" +
            "                small_dept,\n" +
            "                bed_no,\n" +
            "                zk_ward,\n" +
            "    ledger_sn = (select max(ledger_sn)\n" +
            "                 from zy_ledger_file with (NOLOCK)\n" +
            "                 where a.inpatient_no = zy_ledger_file.inpatient_no\n" +
            "                   and a.admiss_times = zy_ledger_file.admiss_times),\n" +
            "                consult_physician,\n" +
            "                zy_serial_no\n" +
            "from zy_actpatient a with (NOLOCK),\n" +
            "     a_patient_mi b\n" +
            "where a.inpatient_no = b.inpatient_no\n" +
            "  and a.inpatient_no = #{patNo}\n" +
            "  and admiss_times = #{times}")
    XinZhenYiZhu sqlQueryPatientInfo(@Param("patNo") String patNo,
                                     @Param("times") Integer times);

    @Select("<script>" +
            "select top 20 * from (" +
            "SELECT row_number() over (order by pattern_code ) row_number," +
            "       rtrim(pattern_code) pattern_code, " +
            "       rtrim(pattern_name) pattern_name," +
            "       rtrim(input_id) input_id," +
            "       input_date," +
            "       rtrim(input_type) input_type, " +
            "       sort_no," +
            "       yiBeiShouCang = (select count(1) from yz_OrderPattern b with (NOLOCK) where b.collect_code = a.pattern_code " +
            "                           and b.input_id = #{inputId})," +
            "       collect_code " +
            "FROM yz_OrderPattern a with (NOLOCK) " +
            "where 1=1 " +
            "<if test=\"code != null and code != '' \">" +
            "and (py_code like #{code} " +
            "    or pattern_code like #{code} " +
            "    or pattern_name like #{code}) " +
            "</if>" +
            "<if test=\"muBanLeiXing == 2 \">" +
            " and dept_code = #{deptCode} AND input_type = '2' " +
            "</if>" +
            "<if test=\"muBanLeiXing == 3 \">" +
            "  and input_id = #{inputId} AND input_type = '3' " +
            "</if>" +
            "<if test=\"muBanLeiXing == 1\">" +
            " and input_type = '1' " +
            "</if>" +
            "<if test=\"muBanLeiXing == 4\">" +
            " and input_id = #{inputId} AND input_type = '4' " +
            "</if>" +
            "<if test=\"muBanLeiXing == 0\">" +
            " AND input_type &lt;&gt; '4' " +
            "</if>" +
            ") temp where row_number > (${currentPage} - 1) * 20 " +
            "<if test=\"muBanLeiXing == 3 \">" +
            " order by sort_no desc " +
            "</if>" +
            "</script>")
    List<YzOrderPattern> huoQuMuBan(@Param("code") String code,
                                    @Param("inputId") String inputId,
                                    @Param("deptCode") String deptCode,
                                    @Param("muBanLeiXing") Integer muBanLeiXing,
                                    @Param("currentPage") long currentPage);


    @Select("select max(sort_no + 1) " +
            "from yz_OrderPattern " +
            "where input_id = #{code}")
    Integer getMyTemplateMaxSortNo(String code);

    @Select("<script>" +
            "SELECT count(*) " +
            "FROM yz_OrderPattern with (NOLOCK) " +
            "where 1=1 " +
            "<if test=\"code != null and code != '' \">" +
            "and (py_code like #{code} " +
            "    or pattern_code like #{code} " +
            "    or pattern_name like #{code}) " +
            "</if>" +
            "<if test=\"muBanLeiXing == 2 \">" +
            " and dept_code = #{deptCode} AND input_type = '2' " +
            "</if>" +
            "<if test=\"muBanLeiXing == 3 \">" +
            "  and input_id = #{inputId} AND input_type = '3' " +
            "</if>" +
            "<if test=\"muBanLeiXing == 1\">" +
            " and input_type = '1' " +
            "</if>" +
            "<if test=\"muBanLeiXing == 4\">" +
            " and input_id = #{inputId} AND input_type = '4' " +
            "</if>" +
            "<if test=\"muBanLeiXing == 0\">" +
            " AND input_type &lt;&gt; '4' " +
            "</if>" +
            "</script>")
    long huoQuMuBanTotal(@Param("code") String code,
                         @Param("inputId") String inputId,
                         @Param("deptCode") String deptCode,
                         @Param("muBanLeiXing") Integer muBanLeiXing);


    @Select("SELECT                 cast(cast(act_order_no as decimal) as varchar) id, " +
            "                       act_order_no,  " +
            "                       rtrim(a.order_name) order_name, " +
            "                       rtrim(a.order_code) order_code, " +
            "                       a.frequ_code, " +
            "    frequ_code_name  = (select rtrim(comm) " +
            "                        from yz_order_frequency with (NOLOCK) " +
            "                        where yz_order_frequency.code = a.frequ_code), " +
            "                       a.drug_specification, " +
            "                       a.supply_code, " +
            "    supply_code_name = (select rtrim(supply_name) " +
            "                        from yz_supply_type with (NOLOCK) " +
            "                        where yz_supply_type.supply_code = a.supply_code), " +
            "                       a.drug_quan, " +
            "                       a.instruction, " +
            "                       a.mini_unit, " +
            "    mini_unit_name   = (select rtrim(name) from yp_zd_unit with (NOLOCK) where code = mini_unit), " +
            "                       a.drug_weight, " +
            "                       a.drug_weight_unit, " +
            "                       a.parent_no, " +
            "                       a.drug_volume, " +
            "                       a.drug_vol_unit, " +
            "                       a.dose, " +
            "                       a.dose_unit, " +
            "    dose_unit_name   = (select rtrim(name) from yp_zd_unit with (NOLOCK) where code = dose_unit), " +
            "                       a.exclu_act_order_no, " +
            "                       a.discription, " +
            "                       a.pattern_code, " +
            "                       a.order_type, " +
            "                       a.serial, " +
            "    self_buy=isnull(a.self_buy, '0'), " +
            "    del_flag=isnull(b.del_flag, ''), " +
            "                       a.drug_flag, " +
            "    suprice_flag='', " +
            "    self_flag        ='', " +
            "    parent_flag='', " +
            "                       a.exec_unit, " +
            "    exec_unit_name   = (select rtrim(name) from zd_unit_code with (NOLOCK) where code = exec_unit)," +
            "    group_no         = '00', " +
            "    group_no_name    = N'项目' " +
            "FROM yz_pattern_order a with (NOLOCK), " +
            "     yz_order_item b with (NOLOCK) " +
            "WHERE a.pattern_code = #{code} " +
            "  and isnull(a.group_no, '00') = '00' " +
            "  and a.order_code = b.order_code " +
            "  and b.order_class not in ('B','C','D')  " +
            "UNION " +
            "SELECT                 cast(cast(act_order_no as decimal) as varchar) id," +
            "                       act_order_no,  " +
            "                       a.order_name, " +
            "                       a.order_code, " +
            "                       a.frequ_code, " +
            "    frequ_code_name  = (select rtrim(comm) " +
            "                        from yz_order_frequency with (NOLOCK) " +
            "                        where yz_order_frequency.code = a.frequ_code), " +
            "                       a.drug_specification, " +
            "                       a.supply_code, " +
            "    supply_code_name = (select rtrim(supply_name) " +
            "                        from yz_supply_type with (NOLOCK) " +
            "                        where yz_supply_type.supply_code = a.supply_code), " +
            "                       a.drug_quan, " +
            "                       a.instruction, " +
            "                       b.pack_unit as                                 mini_unit, " +
            "    mini_unit_name   = (select rtrim(name) from yp_zd_unit with (NOLOCK) where code = b.pack_unit), " +
            "                       a.drug_weight, " +
            "                       a.drug_weight_unit, " +
            "                       a.parent_no, " +
            "                       a.drug_volume, " +
            "                       a.drug_vol_unit, " +
            "                       a.dose, " +
            "                       a.dose_unit, " +
            "    dose_unit_name   = (select rtrim(name) from yp_zd_unit with (NOLOCK) where code = dose_unit), " +
            "                       a.exclu_act_order_no, " +
            "                       a.discription, " +
            "                       a.pattern_code, " +
            "                       a.order_type, " +
            "                       a.serial, " +
            "    self_buy=isnull(a.self_buy, case when b.jsy_flag = '1' then '3' else '0' end), " +
            "    del_flag=isnull(b.visible_flag_zy, ''), " +
            "                       a.drug_flag, " +
            "    suprice_flag=b.suprice_flag, " +
            "    self_flag        =b.self_flag, " +
            "    parent_flag='', " +
            "                       a.exec_unit, " +
            "    exec_unit_name   = (select rtrim(name) from zd_unit_code with (NOLOCK) where code = exec_unit)," +
            "                       a.group_no, " +
            "                       (select yp_zd_group_name.group_name " +
            "                        from yp_zd_group_name " +
            "                        where yp_zd_group_name.group_no = a.group_no) " +
            "FROM yz_pattern_order a with (NOLOCK), " +
            "     view_yp_zd_dict_base_yf b with (NOLOCK) " +
            "WHERE a.pattern_code = #{code} " +
            "  and a.group_no = b.group_no " +
            "  and a.order_code = b.code " +
            "  and a.serial = b.serial " +
            "  and isnull(b.visible_flag_zy, '') <> '1'")
    List<YzActOrder> huoQuMuBanShuJu(String code);


    @Select("select pattern_code," +
            "       rtrim(input_type) as input_type," +
            "       input_id  " +
            "from yz_OrderPattern with (NOLOCK) " +
            "where pattern_name = #{patternName} " +
            "  and input_id = #{inputId}" +
            "  and input_type <> 4 ")
    YzOrderPattern yuanLaiDeMuBanBianMa(@Param("patternName") String patternName,
                                        @Param("inputId") String inputId);

    @Delete("<script>" +
            "delete yz_OrderPattern " +
            "where pattern_code = #{patternCode}; " +
            "delete yz_pattern_order " +
            "where pattern_code = #{patternCode} " +
            "</script>")
    void shanChuLaoMuBan(@Param("patternCode") String patternCode);


    @Insert("insert yz_OrderPattern (pattern_code, pattern_name, py_code, d_code, dept_code, " +
            "                        ward_code, input_id, " +
            "                        input_type, input_date, sort_no) " +
            "values (#{patternCode},#{patternName},#{pyCode},#{dCode},#{deptCode},#{deptCode}," +
            "#{inputId},#{inputType}," +
            "getdate(),#{sortNo})")
    void chaRuMuBan(YzOrderPattern param);


    @Select("select count(1) " +
            "from yz_OrderPattern " +
            "where pattern_name = #{name} and input_id = #{userCode} ")
    Integer duplicateTemplateName(@Param("name") String name,
                                  @Param("userCode") String userCode);

    @Insert("<script>" +
            "INSERT INTO yz_pattern_order (act_order_no, order_code, frequ_code, drug_flag, supply_code, drug_quan, instruction, " +
            "                              drug_specification, mini_unit, drug_weight, drug_weight_unit, parent_no, drug_volume, " +
            "                              drug_vol_unit, dose, dose_unit, drug_occ,  order_name, discription, " +
            "                              pattern_code, serial, self_buy, exec_unit,group_no) " +
            "VALUES " +
            "<foreach collection='list' item='item' separator=','>" +
            "(#{item.actOrderNo}, #{item.orderCode}, #{item.frequCode}," +
            "<if test=\"item.drugFlag !=null and item.drugFlag != '' \">" +
            "#{item.drugFlag}," +
            "</if>" +
            "<if test=\"item.drugFlag == null or item.drugFlag == '' \">" +
            "'o'," +
            "</if>" +
            " #{item.supplyCode}," +
            "<if test=\"item.drugQuan != null \">" +
            "#{item.drugQuan}," +
            "</if>" +
            "<if test=\"item.drugQuan == null \">" +
            "null," +
            "</if>" +
            "#{item.instruction}, #{item.drugSpecification}, #{item.miniUnit}, " +
            "<if test=\"item.drugWeight != null\">" +
            "#{item.drugWeight}, " +
            "</if>" +
            "<if test=\"item.drugWeight == null\">" +
            "null, " +
            "</if>" +
            "#{item.drugWeightUnit}, " +
            "<if test=\"item.parentNo != null \">" +
            "#{item.parentNo}," +
            "</if>" +
            "<if test=\"item.parentNo == null \">" +
            "null," +
            "</if>" +
            "<if test=\"item.drugVolume != null\">" +
            "cast(#{item.drugVolume,jdbcType=DECIMAL} as decimal(10,2))," +
            "</if>" +
            "<if test=\"item.drugVolume == null\">" +
            "null," +
            "</if>" +
            " #{item.drugVolUnit}, " +
            "<if test=\"item.dose != null\">" +
            "cast(#{item.dose,jdbcType=DECIMAL} as decimal(10,2))," +
            "</if>" +
            "<if test=\"item.dose == null\">" +
            "null," +
            "</if>" +
            "#{item.doseUnit}," +
            "<if test=\"item.drugOcc != null \">" +
            "cast(#{item.drugOcc,jdbcType=DECIMAL} as decimal(10,2))," +
            "</if>" +
            "<if test=\"item.drugOcc == null \">" +
            "null," +
            "</if>" +
            " #{item.orderName},#{item.discription},#{patternCode},#{item.serial},#{item.selfBuy},#{item.execUnit},#{item.groupNo})" +
            "</foreach>" +
            "</script>")
    void chaRuMuBanShuJu(List<XinZhenYzActOrder> list, String patternCode);


    @Select("select * " +
            "from yz_OrderPattern with (NOLOCK) " +
            "where pattern_code = #{code}")
    YzOrderPattern huoQuMuBanXinXi(@Param("code") String code);

    @Update("update yz_OrderPattern " +
            "set pattern_name = #{patternName}, " +
            "    py_code      = #{pyCode}, " +
            "    d_code       = #{dCode}, " +
            "    input_date   = getdate()," +
            "    sort_no = #{sortNo} " +
            "where pattern_code = #{patternCode} ")
    void genXingMuBan(@Param("patternName") String patternName,
                      @Param("pyCode") String pyCode,
                      @Param("dCode") String dCode,
                      @Param("patternCode") String patternCode,
                      @Param("sortNo") Integer sortNo);

    @Select("select rtrim(dept_code) from a_employee_mi where code = '${code}'")
    String userDeptCode(@Param("code") String code);

    @Delete("/* 父模板 */  " +
            "delete yz_OrderPattern " +
            "where pattern_code = #{patternCode}; " +
            "/* 模板下面的数据 */  " +
            "delete yz_pattern_order " +
            "where pattern_code = #{patternCode} ")
    void shanChuMuBan(@Param("patternCode") String patternCode);

    @Select("select pattern_code " +
            "from yz_OrderPattern " +
            "where collect_code = #{patternCode} and input_id = #{userId}")
    String whetherToSaveTheDoctorSOrderTemplate(@Param("patternCode") String patternCode,
                                                @Param("userId") String userId);

    @Select("select collect_code " +
            "from yz_OrderPattern with (NOLOCK) " +
            "where input_id = #{inputId} " +
            "  and collect_code = #{collectCode} ")
    String chongFuShouCang(@Param("inputId") String inputId,
                           @Param("collectCode") String collectCode);


    @Insert("insert into yz_OrderPattern (pattern_code, pattern_name, py_code, d_code, dept_code, ward_code, " +
            "                             input_id, input_type, input_date, sort_no, collect_code) " +
            "values (#{patternCode},#{patternName},#{pyCode},#{dCode},#{deptCode},#{deptCode},#{inputId},'4',getdate(),0,#{collectCode});")
    void chaRuShouCang(@Param("patternCode") String patternCode,
                       @Param("patternName") String patternName,
                       @Param("pyCode") String pyCode,
                       @Param("dCode") String dCode,
                       @Param("deptCode") String deptCode,
                       @Param("inputId") String inputId,
                       @Param("collectCode") String collectCode);

    @Delete("delete yz_act_record_kss where act_order_no = #{orderNo}")
    void deleteAntimicrobialInformation(String orderNo);

    @Insert("insert into yz_act_record_kss " +
            "(act_order_no, charge_code, input_id, inpatient_no, " +
            "admiss_times, yyfs, ssqk, yysj)" +
            "values " +
            "(#{orderNo},#{kss.chargeCode},#{userCode},#{patNo}," +
            "#{times},#{kss.yyfs},#{kss.ssqk},#{kss.yysj})")
    void insertAntimicrobialInformation(String orderNo,
                                        YzActRecordKss kss,
                                        String userCode,
                                        String patNo,
                                        Integer times);

    @Delete("delete zy_order_zk where act_order_no = #{orderNo}")
    void deleteTransferOrder(String orderNo);

    @Insert("insert into zy_order_zk (act_order_no, old_ward, " +
            "old_dept, new_ward, new_dept) " +
            "values (#{actOrderNo},#{oldWard},#{oldDept},#{newWard},#{newDept})")
    void insertDoctorSOrder(ZyOrderZk zk);


    @Select("execute dbo.xc_zy_order_fee;1 @in_no = #{patNo}, @in_times = #{times}")
    List<DoctorSOrderFee> expensesForGettingADoctorSOrder(@Param("patNo") String patNo,
                                                          @Param("times") Integer times);

    @Update("UPDATE zy_actpatient " +
            "SET refer_physician   = #{param.referPhysician}, " +
            "    consult_physician = #{param.consultPhysician}, " +
            "    dept_director     = #{param.deptDirector} " +
            "WHERE inpatient_no = #{param.inpatientNo} " +
            "  AND admiss_times = #{param.admissTimes} ")
    void updateTheThirdLevelDoctor(@Param("param") Overview param);


    @Update("update yz_act_order " +
            "    set " +
            "    parent_no   = ${order.actOrderNo}," +
            "    order_time  = #{order.orderTime,jdbcType=TIMESTAMP}, " +
            "    start_time  = #{order.startTime,jdbcType=TIMESTAMP}, " +
            "    end_time    = #{order.endTime,jdbcType=TIMESTAMP}, " +
            "    supply_code = dbo.get_child_supply(${order.actOrderNo}), " +
            "    frequ_code  = #{order.frequCode}," +
            "    group_no  = #{order.groupNo} " +
            "where act_order_no = ${children} " +
            "  and status_flag = '1' ")
    void associateOrders(BigDecimal children, XinZhenYzActOrder order);


    @Select("SELECT                 a.gen_time, " +
            "                       inpatient_no, " +
            "                       admiss_times, " +
            "                       ledger_sn, " +
            "                       a.detail_sn, " +
            "                       a.charge_date, " +
            "                       a.charge_code_mx, " +
            "    charge_code_name = (case " +
            "                            when serial = '99' or serial = '01' " +
            "                                then (select top 1 rtrim(name) " +
            "                                      from yp_zd_dict " +
            "                                      where code = charge_code_mx " +
            "                                        and yp_zd_dict.serial = a.serial) " +
            "                            else (select rtrim(name) from zd_charge_item where code = charge_code_mx) end), " +
            "                       a.charge_fee, " +
            "                       a.charge_status, " +
            "                       a.serial, " +
            "    charge_amount=a.charge_amount, " +
            "    exec_dept=(select name from zd_unit_code where code = a.exec_unit), " +
            "    dept_code        = (select name from zd_unit_code where code = a.ward_code), " +
            "                       isnull(a.ori_detail_sn, 0) as ori_detail_sn " +
            "FROM zy_detail_charge a " +
            "where abs(order_no) = #{yz.actOrderNo} " +
            "  and inpatient_no  = #{yz.inpatientNo} " +
            "  and admiss_times  = #{yz.admissTimes} " +
            "order by charge_date desc ")
    List<ZyDetailCharge> selectOrderFee(@Param("yz") XinZhenYzActOrder yz);

    @Update("update yz_act_order " +
            "set modifier           = #{userCode}, " +
            "    end_time           = #{param.date}, " +
            "    exclu_act_order_no = #{param.orderNo} " +
            "where inpatient_no = #{param.patNo} " +
            "  and admiss_times = #{param.times} " +
            "  and status_flag in ('3', '4') " +
            "  and frequ_code <> 'ONCE' " +
            "  and end_time is null")
    int oneClickStopOrder(@Param("param") OneClickOrder param,
                          @Param("userCode") String userCode);

    @Insert("insert into yz_act_order (act_order_no, inpatient_no, admiss_times, order_code, order_time, frequ_code, enter_time, " +
            "                          enter_oper, start_time, end_time, infant_flag, drug_flag, " +
            "                          physician, confirm_time, signer, modifier, status_flag, status_time, " +
            "                          instruction, order_name, pay_self, serial, group_no, ward_code, " +
            "                          doctor_flag, dept_code, exec_unit, zy_serial_no, refer_physician, consult_physician) " +
            "values (#{one.orderNo}, #{one.patNo}, #{one.times}, '10507', #{one.nowDate}, 'ONCE', #{one.nowDate}," +
            " #{one.userCode},#{one.nowDate}, null, #{p.infantFlag}, 'o'," +
            " #{one.userCode}, #{one.nowDate}, #{one.userCode}, #{one.userCode}, '5', #{one.nowDate}," +
            " '一键停止医嘱' +  N'${one.dateStr}'  , #{one.name}, '0','00', '00', #{p.deptCode}, '1', #{p.deptCode}, #{p.zkWard}, '', #{p.referPhysician}, #{p.consultPhysician})")
    void insertOneClickStopOrder(@Param("one") OneClickOrder one,
                                 @Param("p") XinZhenYiZhu p);


    @Select("select rtrim(a.name) as name, a.code, a.code_rs, cast(isnull(NULLIF(doctor_xz_yp, ''), 0) as int) + 1 as doctorLevel  " +
            "from dj_user_base dj, " +
            "     a_employee_mi a " +
            "where dj.code = a.code " +
            "  and isnull(a.del_flag, '0') = '0' " +
            "  and a.code = #{us.code} " +
            "  and dj.password = #{us.password} ")
    DoctorAuthRest doctorAuthorizationLogin(@Param("us") DoctorAuthParams us);

    @Select("select code_rs, code, name, cast(isnull(NULLIF(doctor_xz_yp, ''), 0) as int) + 1 as doctorLevel\n" +
            "from a_employee_mi\n" +
            "where code = #{us.code}\n" +
            "  and emr_sign_pwd = #{us.signCode}")
    DoctorAuthRest doctorAuthorizationLoginByEmrSignPwd(@Param("us") DoctorAuthParams us);

    @Select("select isnull(yp_level, 0) " +
            "from yp_zd_dict " +
            "where code + '_' + serial = '${code}'")
    Integer selectYpLevel(@Param("code") String code);

    @Select("update new_act_order_recording " +
            "set authorized_doctor = #{userCode} " +
            "where act_order_no = #{orderNo}")
    void updateAuthorizedDoctor(@Param("orderNo") BigDecimal orderNo,
                                @Param("userCode") String userCode);

    @Update("update yz_act_order set instruction = cast('${str}' as char(100)) where act_order_no = #{order} ")
    void updateOrderInstruction(@Param("order") BigDecimal order,
                                @Param("str") String str);

    @Select("select count(1) from yz_order_frequency where code = #{code}")
    int getTheFrequency(@Param("code") String code);

    @Select("select item_name, order_code , count from yz_zd_order_item_confirm ")
    List<YzZdOrderItemConfirm> selectYzItemConfirm();

    @Select("select count(1) from yz_act_order where inpatient_no = '${patNo}' and admiss_times = ${times} and " +
            "order_code = '${orderCode}' and serial = '00'")
    Integer selectCountByOrderCode(String patNo, Integer times, String orderCode);

    @Select("SELECT 收费编码=a.occ_code ,          \n" +
            "         项目名称=b.name ,  \n" +
            "\t\t 数量=a.amount  ,\n" +
            "         单价=b.charge_amount ,\n" +
            "\t\t 个人自付比例=cast(cast(selfpay_prop as decimal(10,2))*100 as varchar)+'%',\n" +
            "\t\t 医保说明=isnull(b.connotation,'无')+'|'+isnull(b.descriptions,'无'),\n" +
            "\t\t 医保编码=national_code \n" +
            "    FROM yz_order_occurence a  ,zd_charge_item b\n" +
            "where    a.order_code='${code}' and \n" +
            "         a.occ_code=b.code ")
    List<JSONObject> getItemInstructions(String code);


    @Select("select case when a.serial = '00' then c.occ_code else a.order_code end\n" +
            "from yz_act_order a\n" +
            "         left join yz_order_occurence c on (a.serial = '00' and a.order_code = c.order_code)" +
            " ${ew.customSqlSegment} ")
    Set<String> selectOrderCode(@Param(Constants.WRAPPER) Wrapper<?> qw);


    @Select("select order_code\n" +
            "from yz_zd_order_item_confirm\n" +
            "where item_name = #{name}")
    Set<String> getOrderCodeByName(String name);


    @Select("select count(1)\n" +
            "from yz_act_order\n" +
            "where inpatient_no = '0434706'\n" +
            "  and admiss_times = 1\n" +
            "  and start_time >= #{start}\n" +
            "  and act_order_no <> #{orderNo} ;")
    Integer prescribeMedicalAdviceAfterDischarge(String patNo,
                                                 Integer times, Date start, BigDecimal orderNo);

    @Select("select top 1 start_time, act_order_no\n" +
            "            from yz_act_order a\n" +
            "            where a.inpatient_no = #{patNo}\n" +
            "              and a.admiss_times = #{times}\n" +
            "              and a.order_code in (select order_code\n" +
            "                                   from yz_zd_order_item_confirm\n" +
            "                                   where item_name = N'出院')\n" +
            "              and serial = '00'\n" +
            "            order by start_time desc")
    YzActOrder selectFinallyOutOrderInfo(String patNo,
                                         Integer times);


    @Select("select top 1 ward_code\n" +
            "from op_record\n" +
            "where inpatient_no = #{patNo}\n" +
            "  and admiss_times = #{times}\n" +
            "order by op_times desc")
    String getOpRecordWard(String patNo, Integer times);

    @Update("update zy_detail_charge\n" +
            "set ward_code = '${ward}'\n" +
            "where inpatient_no = '${patNo}'\n" +
            "  and admiss_times = ${times}\n" +
            "  and ward_code = '${ssWard}'")
    void updateChargeWard(String patNo, Integer times, String ward, String ssWard);


    @Select("select *\n" +
            "from zd_charge_limitations\n" +
            "where charge_code = '${code}'")
    ChargeLimitations hasCharge(String code);


    @Select("select a.limit_day, limit_times, convert(varchar(10), charge_date, 21) as charge_date " +
            "from zd_charge_limitations a,\n" +
            "     zy_detail_charge b\n" +
            "where a.charge_code = '${chargeCode}'\n" +
            "  and b.inpatient_no = '${patNo}'\n" +
            "  and b.admiss_times = ${times} \n" +
            "  and a.charge_code = b.charge_code_mx\n" +
            "  and ledger_sn =  ${ledgerSn}\n" +
            "  and ori_detail_sn is null\n" +
            "  and a.del_flag <> '1'\n" +
            "  and isnull(yb_self_flag, '0') != '1' " +
            "group by charge_date, limit_day, limit_times")
    List<ChargeLimitations> getChargeDay(String patNo, Integer times, Integer ledgerSn, String chargeCode);

    @Select("select group_no, group_name,start_time, end_time " +
            "from yp_zd_group_name\n" +
            "where zy_flag = 1\n" +
            "  and del_flag = 0\n" +
            "  and xy_flag = 1")
    List<YpZdGroupName> selectYpZdGroup();


    @Select("select group_no, group_name,start_time, end_time " +
            "from yp_zd_group_name\n" +
            "where zy_flag = 1\n" +
            "  and del_flag = 0\n" +
            "  and zcy_flag = 1")
    List<YpZdGroupName> selectYpCyGroup();

    @Select("select id, code, discharge_days " +
            "from exceeding_discharge_days\n" +
            "where code = #{code}")
    List<ExceedingDischargeDays> selectExceedingDischargeDays(String code);

}
