package com.yida.data.school.visitor.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yida.data.common.core.common.ResultBean;
import com.yida.data.common.core.entity.WxPublicQr;
import com.yida.data.common.core.entity.school.visitor.EduVisitorRecord;
import com.yida.data.school.dto.visitor.ListVisitorRecordDTO;
import com.yida.data.school.dto.visitor.ListVisitorRecordToStaffDTO;
import com.yida.data.school.vo.visitor.ListVisitorRecordVO;
import com.yida.data.school.vo.visitor.PassCodeVO;
import com.yida.data.school.vo.visitor.StaVisitorDistributeVO;

/**
 * 访客管理-来访人员记录表 Service接口
 *
 * @author zhanghaijun
 * @date 2021-11-09 15:04:42
 */
public interface EduVisitorRecordService extends IService<EduVisitorRecord> {

    IPage<ListVisitorRecordVO> listRecordPage(ListVisitorRecordDTO dto);

    void changeResult(Long id, Integer status, String reason);

    /**
     * 生成邀请码
     *
     * @return 邀请码base64串
     */
    String generateInviteCode(Long schoolId);

    /**
     * 提交申请
     *
     * @param visitorRecord
     */
    ListVisitorRecordVO commitVisitRequest(EduVisitorRecord visitorRecord);

    /**
     * 扫描邀请码回调
     *
     * @param wxPublicQr
     */
    void scanInviteCodeCall(WxPublicQr wxPublicQr);

    /**
     * 查询职工的访问记录
     *
     * @param dto
     * @return
     */
    IPage<ListVisitorRecordVO> listRecordToStaff(ListVisitorRecordToStaffDTO dto);

    /**
     * 根据邀请码获取详情
     *
     * @param inviteCode
     * @return
     */
    ListVisitorRecordVO getInfoByInviteCode(String inviteCode);

    /**
     * 获取通行码
     *
     * @param inviteCode
     * @return
     */
    PassCodeVO getPassQr(String inviteCode);

    /**
     * 访客进校
     *
     * @param staffId
     * @param recordId
     * @param temp
     */
    void visitorInSchool(Long staffId, Long recordId, Double temp);

    void visitorOutSchool(Long staffId, Long recordId);

    /**
     * 检测邀请码是否有效
     *
     * @param inviteCode
     * @return
     */
    Integer checkInviteCode(String inviteCode);

    /**
     * 访问请求超时
     */
    void dealRequestDdl();

    /**
     * 统计访问分布数据
     */
    StaVisitorDistributeVO staVisitorDistribute(String startDate, String endDate);

}
