package com.yida.data.device.studentCard.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yida.data.common.core.entity.card.EduStudentCard;
import com.yida.data.device.dto.studentCard.CardPageDTO;
import com.yida.data.device.dto.studentCard.CardWithAddressDTO;
import com.yida.data.device.dto.studentCard.DisturbStatusDTO;
import com.yida.data.device.vo.studentCard.CardInfoVO;
import com.yida.data.device.vo.studentCard.CardPageVO;
import com.yida.data.device.vo.studentCard.CardWithAddressVO;
import com.yida.data.device.vo.studentCard.ListStudentCardVO;
import com.yida.data.device.vo.studentCard.LocationVO;
import com.yida.data.device.vo.OnlineCountVO;
import com.yida.data.device.vo.studentCard.TrackVO;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.springframework.scheduling.annotation.Async;

/**
 * 电子学生证-设备管理 Service接口
 *
 * @author zhanghaijun
 * @date 2021-08-04 14:44:39
 */
public interface EduStudentCardService extends IService<EduStudentCard> {

    IPage<CardPageVO> listCardPage(CardPageDTO dto);


    void exportCard(CardPageDTO dto, HttpServletResponse response);

    CardInfoVO getInfo(Long cardId);

    /**
     * 更新学生证手机号
     */
    void updateCardPhone(String imei, String oldPhone, String newPhone);

    List<CardWithAddressVO> listCardWithAddress(CardWithAddressDTO dto);

    /**
     * 刷入缓存中的定位信息
     */
    void flushCacheLocation(Long schoolId);

    @Async
    void importCard(String path, String key);

    void downloadTemplate(HttpServletResponse response);

    List<ListStudentCardVO> listStudentCard(Long parentId);

    /**
     * 批量免打扰
     *
     * @param disturbStatusDTO
     */
    void setDisturbStatus(DisturbStatusDTO disturbStatusDTO);

    /**
     * 查询轨迹
     */
    List<TrackVO> listTrack(String iMei, Long cardId, String startTime, String endTime);

    List<CardPageVO> listStudentCardByImeiOrName(Long schoolId, String keyword);


    /**
     * 更新定位信息
     */
    void updateCardPos();

    /**
     * 更新在线状态
     */
    void updateCardStatus();

    /**
     * 查询学生证定位数据
     */
    LocationVO getLocation(String imei);

    /**
     * 刷新学生证定位数据
     */
    void refreshLocation(String imei);

    /**
     * 更新学生证信息
     */
    void updateCard(EduStudentCard card);

    /**
     * 下发监听
     */
    void issueMonitor(String mobile, String imei);

    /**
     * 查询在线状态分布情况
     */
    OnlineCountVO getCardDistrib(List<Long> schoolIds);
}
