package com.fs.patient.service;

import java.util.List;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fs.common.core.domain.R;
import com.fs.his.param.FsPatientBaseInfoListDParam;
import com.fs.his.vo.FsPatientBaseInfoListDVO;
import com.fs.patient.domain.FsPatientBaseInfo;
import com.fs.patient.param.BindPatientParam;
import com.fs.patient.param.FsProjectSendRewardUParam;
import com.fs.patient.param.FsProjectVideoFinishUParam;

/**
 * 患者基本信息Service接口
 * 
 * @author fs
 * @date 2026-04-19
 */
public interface IFsPatientBaseInfoService extends IService<FsPatientBaseInfo>{
    /**
     * 查询患者基本信息
     * 
     * @param id 患者基本信息主键
     * @return 患者基本信息
     */
    FsPatientBaseInfo selectFsPatientBaseInfoById(Long id);

    /**
     * 查询患者基本信息列表
     * 
     * @param fsPatientBaseInfo 患者基本信息
     * @return 患者基本信息集合
     */
    List<FsPatientBaseInfo> selectFsPatientBaseInfoList(FsPatientBaseInfo fsPatientBaseInfo);

    /**
     * 新增患者基本信息
     * 
     * @param fsPatientBaseInfo 患者基本信息
     * @return 结果
     */
    int insertFsPatientBaseInfo(FsPatientBaseInfo fsPatientBaseInfo);

    /**
     * 修改患者基本信息
     * 
     * @param fsPatientBaseInfo 患者基本信息
     * @return 结果
     */
    int updateFsPatientBaseInfo(FsPatientBaseInfo fsPatientBaseInfo);

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

    /**
     * 删除患者基本信息信息
     * 
     * @param id 患者基本信息主键
     * @return 结果
     */
    int deleteFsPatientBaseInfoById(Long id);

    /**
     * 生成患者信息二维码
     * @param patientId 患者id
     * @return 二维码
     */
    R getWxaCodePatientBaseInfoUnLimit(Long patientId,String appId);

    R getPatientBaseInfoDetail(Long patientId,Long userId);

    R patientBindUser(BindPatientParam param);

    List<FsPatientBaseInfoListDVO> selectFsPatientBaseInfoListDVO(FsPatientBaseInfoListDParam param);

    R diagnose(FsPatientBaseInfo param);

    /**
     * 发放理疗红包奖励
     * @param param
     * @return
     */
    R sendProjectReward(FsProjectSendRewardUParam param);

    //销售驳回诊断
    int reject(FsPatientBaseInfo param);

    //总后台审核
    int check(FsPatientBaseInfo param);

    /**
     * 计算理疗流量
     */
    R getInternetTraffic(FsProjectVideoFinishUParam param);
}
