package com.fs.doctor.mapper;

import java.time.LocalDateTime;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.fs.doctor.domain.FsDoctorOnline;

/**
 * 医生在线状态Mapper接口
 * 
 * @author fs
 * @date 2025-12-12
 */
public interface FsDoctorOnlineMapper extends BaseMapper<FsDoctorOnline>{
    /**
     * 查询医生在线状态
     * 
     * @param doctorId 医生在线状态主键
     * @return 医生在线状态
     */
    FsDoctorOnline selectFsDoctorOnlineByDoctorId(Long doctorId);

    /**
     * 查询医生在线状态列表
     * 
     * @param fsDoctorOnline 医生在线状态
     * @return 医生在线状态集合
     */
    List<FsDoctorOnline> selectFsDoctorOnlineList(FsDoctorOnline fsDoctorOnline);

    /**
     * 新增医生在线状态
     * 
     * @param fsDoctorOnline 医生在线状态
     * @return 结果
     */
    int insertFsDoctorOnline(FsDoctorOnline fsDoctorOnline);

    /**
     * 新增医生在线心跳机制 原子操作，避免并发插入冲突
     *
     * @param fsDoctorOnline 医生在线状态
     * @return 结果
     */
    int upsertHeartbeat(FsDoctorOnline fsDoctorOnline);

    /**
     * 修改医生在线状态
     * 
     * @param fsDoctorOnline 医生在线状态
     * @return 结果
     */
    int updateFsDoctorOnline(FsDoctorOnline fsDoctorOnline);

    /**
     * 删除医生在线状态
     * 
     * @param doctorId 医生在线状态主键
     * @return 结果
     */
    int deleteFsDoctorOnlineByDoctorId(Long doctorId);

    /**
     * 批量删除医生在线状态
     * 
     * @param doctorIds 需要删除的数据主键集合
     * @return 结果
     */
    int deleteFsDoctorOnlineByDoctorIds(Long[] doctorIds);

    /**
     * 批量设置离线
     *
     * @param timeout
     * @return
     */
    int setOfflineByTimeout(LocalDateTime timeout);
}