package thyyxxk.webserver.dao.his.datamodify;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import thyyxxk.webserver.entity.datamodify.TYzActOrderModify;

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

/**
 * <p>
 * 描述
 * </p>
 *
 * @author xc
 * @date 2021-04-09 08:40
 */
@Mapper
public interface YzActOrderModifyVerifyDao extends BaseMapper<TYzActOrderModify> {

    /**
     * 修改医嘱的时间 审核人员点击通过时执行，为空的默认不操作,开始时间和医嘱时间要一起修改。
     *
     * @param startTime  开始时间
     * @param endTime    结束时间
     * @param actOrderNo 医嘱号
     */
    @Update("<script>" +
            "update yz_act_order " +
            "<trim prefix=\"set\" suffixOverrides=\",\">" +
            "<if test=\"startTime!=null \">" +
            "start_time=#{startTime}, order_time = #{startTime}," +
            "</if>" +
            "<if test=\"endTime!=null\">" +
            "end_time=#{endTime}," +
            "</if>" +
            "</trim>" +
            " where act_order_no=#{actOrderNo}" +
            "</script>")
    void yzActOrderModify(@Param("startTime") Date startTime,
                          @Param("endTime") Date endTime,
                          @Param("actOrderNo") BigDecimal actOrderNo);

    /**
     * 医嘱修改数据撤回 在这里开始时间要和医嘱时间一起改变
     *
     * @param startTime  开始时间
     * @param endTime    结束时间
     * @param actOrderNo 医嘱号
     */
    @Update("update yz_act_order set start_time = #{startTime} ,end_time = #{endTime},order_time=#{startTime} where act_order_no = #{actOrderNo}")
    void shuJuHuiChe(@Param("startTime") Date startTime,
                     @Param("endTime") Date endTime,
                     @Param("actOrderNo") BigDecimal actOrderNo);

    /**
     * 审核状态改变 就是判断 操作员的操作
     *
     * @param auditFlag   1-未审核；2-审核通过；3-审核不通过； 4-数据回撤：
     * @param auditStaff  审核人员
     * @param actOrderNo  医嘱号 必传 因为需要根据医嘱号来修改
     * @param auditRemark 审核员备注
     */
    @Update("update t_yz_act_order_modify set " +
            "audit_flag=#{auditFlag},audit_staff=#{auditStaff},audit_time=getdate()," +
            "audit_remark=#{auditRemark} where act_order_no=#{actOrderNo}")
    void shenHeZhuangTaiGaiBian(@Param("auditFlag") int auditFlag,
                                @Param("auditStaff") String auditStaff,
                                @Param("actOrderNo") BigDecimal actOrderNo,
                                @Param("auditRemark") String auditRemark);

    /**
     * @return 返回是只有 待审核的状态 住院号超过五条的
     */
    @Select("select count(inpatient_no) count,inpatient_no from t_yz_act_order_modify where audit_flag = 1  group by inpatient_no HAVING count(*) >= 5")
    List<TYzActOrderModify> getCount();

    @Select("select admiss_date " +
            "from zy_actpatient " +
            "where inpatient_no = #{patNo} ")
    Date huanZaiRuYuanShiJian(@Param("patNo") String patNo);

}
