package com.openhis.web.inhospitalcharge.mapper;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.openhis.web.inhospitalcharge.dto.InHospitalInfoDto;
import com.openhis.web.inhospitalcharge.dto.InHospitalPatientInfoDto;
import com.openhis.web.inhospitalcharge.dto.InHospitalRegisterQueryDto;

/**
 * 住院登记 应用Mapper
 */
@Repository
public interface InHospitalRegisterAppMapper {

    /**
     * 查询住院登记信息
     * 
     * @param page 分页参数
     * @param encounterClass 就诊类别
     * @param encounterStatus 登记状态
     * @param registeredFlag 已登记标识,已登记传 1 ,待登记传 0
     * @param formEnum 物理位置
     * @param queryWrapper 查询条件
     * @return 住院登记信息
     */
    IPage<InHospitalRegisterQueryDto> getInHospitalRegisterInfo(@Param("page") Page<InHospitalRegisterQueryDto> page,
        @Param("encounterClass") Integer encounterClass, @Param("encounterStatus") Integer encounterStatus,
        @Param("registeredFlag") String registeredFlag, @Param("formEnum") Integer formEnum,
        @Param(Constants.WRAPPER) QueryWrapper<InHospitalRegisterQueryDto> queryWrapper);

    /**
     * 查询患者基本信息
     *
     * @param patientId 患者ID
     * @return 患者基本信息
     */
    InHospitalPatientInfoDto getPatientInfo(@Param("patientId") Long patientId);

    /**
     * 查询住院就诊信息
     * 
     * @param encounterId 住院就诊id
     * @param formEnum 物理位置
     * @param maindiseFlag 主诊断标识
     * @param participantType 参与者类型
     * @param accountType 账号类型
     * @return 住院就诊信息
     */
    InHospitalInfoDto getInHospitalInfo(@Param("encounterId") Long encounterId, @Param("formEnum") Integer formEnum,
        @Param("maindiseFlag") Integer maindiseFlag, @Param("participantType") String participantType,
        @Param("accountType") String accountType);

    /**
     * 根据病区号获取总床位数
     * 
     * @param formEnum 物理位置
     * @param status 状态
     * @param wardBusNo 病区号
     * @return 总床位数
     */
    Integer getTotalBedsNum(@Param("formEnum") Integer formEnum, @Param("status") Integer status,
        @Param("wardBusNo") String wardBusNo);

    /**
     * 根据病区号获取空闲床位数
     *
     * @param formEnum 物理位置
     * @param status 状态
     * @param wardBusNo 病区号
     * @return 空闲床位数
     */
    Integer getIdleBedsNum(@Param("formEnum") Integer formEnum, @Param("status") Integer status,
        @Param("wardBusNo") String wardBusNo);

}
