/*
 * Copyright ©2023 CJB-CNIT Team. All rights reserved
 */
package com.openhis.web.inhospitalnursestation.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.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.openhis.web.inhospitalnursestation.dto.AdmissionBedPageDto;
import com.openhis.web.inhospitalnursestation.dto.AdmissionPageParam;
import com.openhis.web.inhospitalnursestation.dto.AdmissionPatientInfoDto;
import com.openhis.web.inhospitalnursestation.dto.AdmissionPatientPageDto;

/**
 * 入出转管理 appMapper
 *
 * @author zwh
 * @date 2025-07-28
 */
@Repository
public interface ATDManageAppMapper {

    /**
     * 入院患者分页列表
     * 
     * @param page 分页信息
     * @param queryWrapper 查询条件
     * @param imp 就诊类型：住院
     * @param toBeRegistered 就诊状态：待登记
     * @param active 住院位置状态：使用中
     * @param ward 位置类型：病区
     * @param house 位置类型：病房
     * @param bed 位置类型：病床
     * @return 入院患者分页列表
     */
    Page<AdmissionPatientPageDto> selectAdmissionPatientPage(@Param("page") Page<AdmissionPatientPageDto> page,
        @Param(Constants.WRAPPER) QueryWrapper<AdmissionPageParam> queryWrapper, @Param("imp") Integer imp,
        @Param("toBeRegistered") Integer toBeRegistered, @Param("active") Integer active, @Param("ward") Integer ward,
        @Param("house") Integer house, @Param("bed") Integer bed);

    /**
     * 入院患者床位信息分页列表
     *
     * @param page 分页信息
     * @param queryWrapper 查询条件
     * @param active 住院位置状态：使用中
     * @param ward 位置类型：病区
     * @param house 位置类型：病房
     * @param bed 位置类型：病床
     * @param personalCashAccount 账户类型：个人现金账户
     * @param inactive 床位状态：停用
     * @param billable 收费状态：待结算
     * @param billed 收费状态：已结算
     * @param refunded 收费状态：已退费
     * @return 患者床位信息分页列表
     */
    Page<AdmissionBedPageDto> selectAdmissionBadPage(@Param("page") Page<AdmissionBedPageDto> page,
        @Param(Constants.WRAPPER) QueryWrapper<AdmissionPageParam> queryWrapper, @Param("active") Integer active,
        @Param("ward") Integer ward, @Param("house") Integer house, @Param("bed") Integer bed,
        @Param("personalCashAccount") String personalCashAccount, @Param("inactive") Integer inactive,
        @Param("billable") Integer billable, @Param("billed") Integer billed, @Param("refunded") Integer refunded);

    /**
     * 查询住院患者详细信息
     *
     * @param encounterId 住院id
     * @param active 住院位置状态：使用中
     * @param ward 位置类型：病区
     * @param house 位置类型：病房
     * @param bed 位置类型：病床
     * @param primaryNurse 住院参与人：责任护士
     * @param attendingDoctor 住院参与人：主治医生
     * @param admittingDoctor 住院参与人：住院医生
     * @param chiefDoctor 住院参与人：主任医生
     * @return 住院患者详细信息
     */
    AdmissionPatientInfoDto selectAdmissionPatientInfo(@Param("encounterId") Long encounterId,
        @Param("active") Integer active, @Param("ward") Integer ward, @Param("house") Integer house,
        @Param("bed") Integer bed, @Param("primaryNurse") String primaryNurse,
        @Param("attendingDoctor") String attendingDoctor, @Param("admittingDoctor") String admittingDoctor,
        @Param("chiefDoctor") String chiefDoctor);
}
