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

import cn.hnthyy.thmz.entity.MzException;
import cn.hnthyy.thmz.entity.his.mz.MzyReqrec;
import cn.hnthyy.thmz.entity.thmz.User;
import cn.hnthyy.thmz.pageDto.MzyReqrecPageDto;
import cn.hnthyy.thmz.vo.ThmzmxsrParamsVo;

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

/**
 * 门诊挂号记录
 */
public interface MzyReqrecService {
    /**
     * 保存挂号信息
     * @param mzyReqrecPageDto
     * @return
     * @throws MzException
     */
    int saveMzyReqrec(MzyReqrecPageDto mzyReqrecPageDto) throws MzException;


    /**
     * 查询符合条件的挂号数据总数
     * @param mzyReqrecPageDto
     * @return
     */
    Integer countMzyReqrec(MzyReqrecPageDto mzyReqrecPageDto);

    /**
     * 分页查询挂号信息
     * @param mzyReqrecPageDto
     * @return
     */
    List<MzyReqrec> queryMzyReqrecWithPage(MzyReqrecPageDto mzyReqrecPageDto);


    /**
     * 查询所有退号信息
     * @return
     */
    List<MzyReqrec> queryAllCancel();


    /**
     * 修改挂号信息
     * @param mzyReqrec
     * @return
     */
    int modifyMzyReqrec(MzyReqrec mzyReqrec,User tokenUser);

    /**
     * 按照病人id 和次数查询病人挂号信息
     *
     * @param patientId
     * @param times
     * @return
     */
    MzyReqrec queryMzyReqrecByPatientIdAndTimes(String patientId, Integer times);

    /**
     * 按照缴费流水号查询病人挂号信息
     *
     * @param serialNo
     * @return
     */
    MzyReqrec queryMzyReqrecBySerialNo(Integer serialNo);

    /**
     * 退费重收 本院记账
     * @param serialNo
     * @param paymode 付费方式
     * @param opId 操作员
     * @return
     */
    MzyReqrec chargeFeeForByjz(Integer serialNo,String paymode, String opId) throws MzException;
    /**
     * 根据病人编号查询最后一次挂号信息
     *
     * @param patientId
     * @return
     */
    MzyReqrec queryLastMzyReqrecByPatientId(String patientId);

    /**
     * 打印门诊发票
      * @param mzyReqrec
     * @return
     */
    int printMzyReqrecRecept(MzyReqrec mzyReqrec) throws MzException;


    /**
     * 门诊好别统计表
     * @param thmzmxsrParamsVo
     * @return
     */
    List<Map<String, Object>> queryMzhbCount(ThmzmxsrParamsVo thmzmxsrParamsVo);


    /**
     * 按照日期分组查询号数与金额
     *
     * @param mzyReqrecPageDto
     * @return
     */
    List<Map<String, Object>> countAndAmountMzyReqrec(MzyReqrecPageDto mzyReqrecPageDto);


    /**
     * 判断手机自助缴费平台对应的流水号有无成功挂号
     * @param psordnum
     * @param agtordnum
     * @return
     */
    MzyReqrec queryMzyReqrecByAgtordnum(String psordnum,String agtordnum,String tableName);

    /**
     * 判断是否减免挂号费
     * @param unitCode
     * @param requestDayD
     * @param ampm
     * @return true 减免  false 不减免
     */
    boolean notPayGhFee(String unitCode, Date requestDayD, String ampm);

    /**
     * 新冠拦截手机挂号
     * @param patientId
     * @param unitCode
     * @throws MzException
     */
    void covidManageForHaici(String patientId, String unitCode) throws MzException;

    /**
     * 修改挂号记录
     * @param mzyReqrec
     * @return
     */
    int modifyMzyReqrec(MzyReqrec mzyReqrec);
}
