package com.qmth.themis.business.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.qmth.themis.business.bean.admin.*;
import com.qmth.themis.business.bean.result.TimeScaleDataResult;

import java.util.List;
import java.util.Map;

/**
 * @Description: 报表数据
 * @Param:
 * @return:
 * @Author: wangliang
 * @Date: 2022/8/19
 */
public interface TIeReportService {

    /**
     * 考试概览
     *
     * @param orgId
     * @param examId
     * @param examActivityId
     * @param roomCode
     * @param courseCode
     * @param name
     * @param identity
     * @return
     */
    public Map<String, Object> examView(Long orgId, Long examId, Long examActivityId, String roomCode, String courseCode,
                                        String name, String identity);

    /**
     * 情况统计
     *
     * @param orgId
     * @param examId
     * @param examActivityId
     * @param roomCode
     * @param courseCode
     * @param name
     * @param identity
     * @param pageNumber
     * @param pageSize
     * @return
     */
    public IPage<ExamViewCountListBean> examViewCount(Long orgId, Long examId, Long examActivityId, String roomCode, String courseCode, String name, String identity, int pageNumber, int pageSize);

    /**
     * 情况统计考出
     *
     * @param orgId
     * @param examId
     * @param examActivityId
     * @param roomCode
     * @param courseCode
     * @param name
     * @param identity
     * @return
     */
    public List<ExamViewCountListBean> examViewCountExport(Long orgId, Long examId, Long examActivityId, String roomCode, String courseCode, String name, String identity);

    /**
     * 缺考名单
     *
     * @param orgId
     * @param examId
     * @param examActivityId
     * @param roomCode
     * @param courseCode
     * @param name
     * @param identity
     * @param pageNumber
     * @param pageSize
     * @return
     */
    public IPage<ExamDeficiencyListBean> examDeficiencyList(Long orgId, Long examId, Long examActivityId, String roomCode, String courseCode, String name,
                                                            String identity, int pageNumber, int pageSize);

    /**
     * 缺考名单导出
     *
     * @param orgId
     * @param examId
     * @param examActivityId
     * @param roomCode
     * @param courseCode
     * @param name
     * @param identity
     * @return
     */
    public List<ExamDeficiencyListBean> examDeficiencyListExport(Long orgId, Long examId, Long examActivityId, String roomCode, String courseCode, String name, String identity);

    /**
     * 异常处理
     *
     * @param examId
     * @param examActivityId
     * @param roomCode
     * @param courseCode
     * @param name
     * @param identity
     * @param pageNumber
     * @param pageSize
     * @return
     */
    public IPage examExceptionList(Long examId, Long examActivityId, String roomCode, String courseCode, String name,
                                   String identity, int pageNumber, int pageSize);

    /**
     * 异常处理明细
     *
     * @param examStudentId
     * @param pageNumber
     * @param pageSize
     * @return
     */
    public IPage<ExamExceptionDetailListBean> examExceptionDetailList(Long examStudentId, int pageNumber, int pageSize);

    /**
     * 重考处理
     *
     * @param examId
     * @param examActivityId
     * @param roomCode
     * @param courseCode
     * @param name
     * @param identity
     * @param pageNumber
     * @param pageSize
     * @return
     */
    public IPage examReexamList(Long examId, Long examActivityId, String roomCode, String courseCode, String name,
                                String identity, int pageNumber, int pageSize);

    /**
     * 违纪名单
     *
     * @param examId
     * @param examActivityId
     * @param roomCode
     * @param courseCode
     * @param name
     * @param identity
     * @param pageNumber
     * @param pageSize
     * @return
     */
    public IPage<ExamBreachListBean> examBreachList(Long examId, Long examActivityId, String roomCode, String courseCode, String name,
                                                    String identity, int pageNumber, int pageSize);

    /**
     * 违纪名单导出
     *
     * @param examId
     * @param examActivityId
     * @param roomCode
     * @param courseCode
     * @param name
     * @param identity
     * @return
     */
    public List<ExamBreachListExportBean> examBreachListExport(Long examId, Long examActivityId, String roomCode, String courseCode, String name, String identity);


    /**
     * 违纪名单明细
     *
     * @param examStudentId
     * @param status
     * @param pageNumber
     * @param pageSize
     * @return
     */
    public IPage<ExamBreachDetailListBean> examBreachListDetail(Long examStudentId, Integer status, int pageNumber, int pageSize);

    /**
     * 撤销违纪名单
     *
     * @param examId
     * @param examActivityId
     * @param roomCode
     * @param courseCode
     * @param name
     * @param identity
     * @param pageNumber
     * @param pageSize
     * @return
     */
    public IPage examRevokeBreachList(Long examId, Long examActivityId, String roomCode, String courseCode,
                                      String name, String identity, int pageNumber, int pageSize);

    /**
     * 撤销违纪名单明细
     *
     * @param examStudentId
     * @param status
     * @param pageNumber
     * @param pageSize
     * @return
     */
    public IPage<ExamBreachDetailListBean> examRevokeBreachListDetail(Long examStudentId, Integer status, int pageNumber, int pageSize);

    /**
     * 考生日志
     *
     * @param examId
     * @param examActivityId
     * @param roomCode
     * @param courseCode
     * @param name
     * @param identity
     * @param pageNumber
     * @param pageSize
     * @return
     */
    public IPage examStudentLogList(Long examId, Long examActivityId, String roomCode, String courseCode, String name,
                                    String identity, int pageNumber, int pageSize);

    /**
     * 考生日志明细
     *
     * @param examStudentId
     * @param pageNumber
     * @param pageSize
     * @return
     */
    public IPage<ExamStudentLogDetailListBean> examStudentLogListDetail(Long examStudentId, int pageNumber, int pageSize);

    /**
     * 在线巡考报表接口
     *
     * @param examId
     * @param userId
     * @return
     */
    public List<InvigilateListPatrolReportBean> patrolReport(Long examId, Long userId);

    /**
     * 考情监控-人数
     *
     * @return
     */
    public ExaminationMonitorCountBean examinationMonitorCount();

    /**
     * 考情监控-预警类型排行
     *
     * @return
     */
    public List<ExaminationMonitorWarnDistributionBean> warnDistribution();

    /**
     * 考情监控-预警时间趋势
     *
     * @return
     */
    public List<TimeScaleDataResult> warnTrend();

    /**
     * 考情监控-预警消息
     *
     * @return
     */
    public List<WarningNotifyBean> warnMsg();

    /**
     * 考情监控-预警地区排行
     *
     * @return
     */
    public List<ExaminationMonitorWarnRegionDistributionBean> warnRegionDistribution();

    /**
     * 考情监控-地图数据
     *
     * @return
     */
    public List<ExaminationMonitorMapBean> map();

    /**
     * 获取时间尺度
     *
     * @param timeSize
     * @param currentDate
     * @return
     */
    public Map<String, String> getTimeScale(List<Integer> timeSize, String currentDate);
}
