package com.fs.his.service;

import java.util.List;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fs.common.core.domain.R;
import com.fs.course.param.DiagnosisConfirmParam;
import com.fs.course.param.FsFirstDiagnosisListUParam;
import com.fs.course.vo.FsFirstDiagnosisListUVO;
import com.fs.his.domain.FsFirstDiagnosis;
import com.fs.his.param.FsDiagnosisFillDParam;
import com.fs.his.param.FsDiagnosisListDParam;
import com.fs.his.param.FsFirstDiagnosisParam;
import com.fs.his.vo.FsDiagnosisListDVO;
import com.fs.his.vo.FsFirstDiagnosisVO;

/**
 * 初诊单Service接口
 * 
 * @author fs
 * @date 2025-09-01
 */
public interface IFsFirstDiagnosisService extends IService<FsFirstDiagnosis>{
    /**
     * 查询初诊单
     * 
     * @param id 初诊单主键
     * @return 初诊单
     */
    FsFirstDiagnosis selectFsFirstDiagnosisById(Long id);

    /**
     * 查询初诊单列表
     * 
     * @param fsFirstDiagnosis 初诊单
     * @return 初诊单集合
     */
    List<FsFirstDiagnosis> selectFsFirstDiagnosisList(FsFirstDiagnosis fsFirstDiagnosis);

    List<FsFirstDiagnosisVO> selectFsFirstDiagnosisVOList(FsFirstDiagnosisParam param);

    /**
     * 新增初诊单
     * 
     * @param fsFirstDiagnosis 初诊单
     * @return 结果
     */
    int insertFsFirstDiagnosis(FsFirstDiagnosis fsFirstDiagnosis);

    /**
     * 修改初诊单
     * 
     * @param fsFirstDiagnosis 初诊单
     * @return 结果
     */
    int updateFsFirstDiagnosis(FsFirstDiagnosis fsFirstDiagnosis);

    /**
     * 批量删除初诊单
     * 
     * @param ids 需要删除的初诊单主键集合
     * @return 结果
     */
    int deleteFsFirstDiagnosisByIds(Long[] ids);

    /**
     * 删除初诊单信息
     * 
     * @param id 初诊单主键
     * @return 结果
     */
    int deleteFsFirstDiagnosisById(Long id);

    /**
     * 根据用户ID获取首次诊断信息
     * @param userId 用户ID
     * @return 返回对应的首次诊断信息对象，如果不存在则可能返回null
     */
    FsFirstDiagnosis getByUserId(Long userId);


    List<FsDiagnosisListDVO> getDiagnosisList(FsDiagnosisListDParam param);

    R fill(FsDiagnosisFillDParam param);

    List<FsFirstDiagnosisListUVO> selectFsFirstDiagnosisListUVO(FsFirstDiagnosisListUParam param);

    FsFirstDiagnosisListUVO getInfo(Long id);

    R confirm(DiagnosisConfirmParam param);
}
