package com.xinelu.manage.service.patientvisitrecord;

import com.xinelu.common.core.domain.AjaxResult;
import com.xinelu.manage.domain.patientinfo.PatientInfo;
import com.xinelu.manage.domain.patientvisitrecord.PatientVisitRecord;
import com.xinelu.manage.dto.patientvisitrecord.PatientVisitRecordDto;
import com.xinelu.manage.dto.patientvisitrecord.PatientVisitRecordImportDto;
import com.xinelu.manage.dto.patientvisitrecord.PatientVisitRecordInfoSaveDto;
import com.xinelu.manage.dto.patientvisitrecord.PatientVisitRecordSaveDto;
import com.xinelu.manage.vo.patientvisitrecord.PatientVisitRecordVo;
import java.util.List;
import org.springframework.web.bind.annotation.RequestBody;

/**
 * 患者就诊记录基本信息Service接口
 *
 * @author haown
 * @date 2024-02-26
 */
public interface IPatientVisitRecordService {

    /**
     * 查询患者就诊记录基本信息
     *
     * @param id 患者就诊记录基本信息主键
     * @return 患者就诊记录基本信息
     */
    PatientVisitRecord selectPatientVisitRecordById(Long id);

	/**
	 *  查询患者最新一次就诊记录信息
	 * @param patientId 患者记录表主键
	 * @return 患者就诊信息视图类
	 */
	PatientVisitRecordVo getByPatientId(Long patientId);

    /**
     * 查询患者就诊记录基本信息列表
     *
     * @param patientVisitRecord 患者就诊记录基本信息
     * @return 患者就诊记录基本信息集合
     */
    List<PatientVisitRecord> selectPatientVisitRecordList(PatientVisitRecordDto patientVisitRecord);

    /**
     * 新增患者就诊记录基本信息
     *
     * @param patientVisitRecord 患者就诊记录基本信息
     * @return 结果
     */
    void insertPatientVisitRecord(PatientVisitRecordSaveDto patientVisitRecord);

	/**
	 * 修改患者就诊记录基本信息
	 *
	 * @param patientVisitRecord 患者就诊记录基本信息
	 * @return 结果
	 */
	int updatePatientVisitRecord(PatientVisitRecord patientVisitRecord);

	/**
	 * 患者配置——就诊信息保存
	 * @param saveDto 患者配置——就诊信息保存传输对象
	 * @return 结果
	 */
	int saveRecord(@RequestBody PatientVisitRecordInfoSaveDto saveDto);

    /**
     * 修改患者就诊记录基本信息
     *
     * @param updDto 患者就诊记录基本信息
     * @return 结果
     */
    int updateRecord(PatientVisitRecordInfoSaveDto updDto);

    /**
     * 批量删除患者就诊记录基本信息
     *
     * @param ids 需要删除的患者就诊记录基本信息主键集合
     * @return 结果
     */
    int deletePatientVisitRecordByIds(Long[] ids);

    /**
     * 删除患者就诊记录基本信息信息
     *
     * @param id 患者就诊记录基本信息主键
     * @return 结果
     */
    int deletePatientVisitRecordById(Long id);

	/**
	 * 患者就诊信息导入
	 *
	 * @param patientList 患者就诊信息
	 * @return int
	 **/
	AjaxResult importPatientList(List<PatientVisitRecordImportDto> patientList, String patientType);

	void setPatientType(PatientInfo patientInfo, PatientVisitRecord patientVisitRecord);

	PatientVisitRecord getLastRecord(PatientVisitRecordDto patientVisitRecordDto);
}
