package cn.hnthyy.thmz.service.his.zd;

import cn.hnthyy.thmz.entity.MzException;
import cn.hnthyy.thmz.entity.his.zd.ZdUnitCode;
import cn.hnthyy.thmz.pageDto.ZdUnitCodePageDto;

import java.util.List;
import java.util.Map;

public interface ZdUnitCodeService {
    /**
     * 分页查询科室字典列表
     *
     * @param zdUnitCodePageDto 科室查询条件
     * @return
     */
    List<ZdUnitCode> queryZdUnitCodeWithPage(ZdUnitCodePageDto zdUnitCodePageDto);


    /**
     * 统计科室字典总数
     *
     * @param zdUnitCode 科室查询条件
     * @return
     */
    int countZdUnitCode(ZdUnitCode zdUnitCode);


    /**
     * 检查修改或者新增数据是否重复 部门编码 部门名称 新农合编码 新农合名称
     *
     * @param zdUnitCode 科室查询条件
     * @return
     */
    List<ZdUnitCode> checkZdUnitCode(ZdUnitCode zdUnitCode);

    /**
     * 新增科室字典
     *
     * @param zdUnitCode
     * @return
     */
    int saveZdUnitCode(ZdUnitCode zdUnitCode) throws MzException;

    /**
     * 修改科室字典
     *
     * @param zdUnitCode
     * @return
     */
    int modifyZdUnitCode(ZdUnitCode zdUnitCode);

    /**
     * 根据科室编码查询科室信息
     *
     * @param code 科室编码
     * @return
     */
    ZdUnitCode queryByCode(String code);

    /**
     * 查询科室名称
     * @param code
     * @return
     */
    String queryDeptNameByIdInCache(String code);

    /**
     * 查询科室字典列表
     *
     * @param zdUnitCodePageDto 科室查询条件
     * @return
     */
    List<ZdUnitCode> queryZdUnitCode(ZdUnitCodePageDto zdUnitCodePageDto);


    /**
     * 内存中查询所有未停用的科室
     * @return
     */
    List<ZdUnitCode> queryAllDeptInCache();



    /**
     * 内存中查询所有未停用门诊的科室
     * @return
     */
    List<ZdUnitCode> queryAllMzDeptInCache();

    /**
     * 内存中查询所有未停用且需要挂号的门诊的科室
     * @return
     */
    List<ZdUnitCode> queryAllMzGhDeptInCache();


    /**
     * 数据库中查询所有未停用门诊的科室
     * @return
     */
    List<ZdUnitCode> queryAllMzDeptFromDb();


    /**
     * 根据住院病人编号查询对应的科室 和医生
     * @param inpatientNo
     * @return
     */
    Map<String,String> queryZkWardByInpatientNo(String inpatientNo);


    /**
     * 根据科室编码集合查询科室集合
     * @param codes
     * @return
     */
    List<ZdUnitCode> queryZdUnitCodeByCodes(List<String> codes);


    /**
     * 查询所有的病区科室
     * @return
     */
    List<ZdUnitCode> queryAllInpatientWard();


    /**
     * 查询小科室
     * @param code
     * @return
     */
    List<ZdUnitCode> querySmallDeptByDept(String code);


    /**
     * 根据病区id查询病床
     * @param code
     * @return
     */
    List<String> queryBedNumByDept(String code);
    
}
