package com.ym.mec.biz.dal.dao;

import com.ym.mec.biz.dal.dto.BasicUserDto;
import com.ym.mec.biz.dal.dto.StudentPreVisitDto;
import com.ym.mec.biz.dal.dto.StudentVisitDto;
import com.ym.mec.biz.dal.dto.TeacherVisitDto;
import com.ym.mec.biz.dal.entity.StudentVisit;
import com.ym.mec.common.dal.BaseDAO;
import org.apache.ibatis.annotations.Param;

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


public interface StudentVisitDao extends BaseDAO<Integer, StudentVisit> {

    /**
     * 获取访问详情
     *
     * @param id
     * @return
     */
    StudentVisitDto getInfo(Integer id);

    /**
     * 获取访问列表
     *
     * @param params
     * @return
     */
    List<StudentVisitDto> getPageList(Map<String, Object> params);

    /**
     * 修改状态
     */
    Integer updateProbStatus(@Param("id") Integer id ,@Param("probStatus")Integer probStatus);

    /**
     * 获取学生列表
     *
     * @param params
     * @return
     */
    List<BasicUserDto> getStudents(Map<String, Object> params);

    /**
     * 获取学生总数
     *
     * @param params
     * @return
     */
    Integer getStudentsCount(Map<String, Object> params);

    /**
     * 获取乐团回访的学生
     *
     * @param musicGroupId
     * @param studentIds
     * @return
     */
    List<Integer> getMusicGroupVisitStudent(@Param("musicGroupId") String musicGroupId, @Param("studentIds") List<Integer> studentIds);

    /**
     * 获取老师时间段的回访次数
     *
     * @param teacherIds
     * @param startTime
     * @param endTime
     * @return
     */
    List<TeacherVisitDto> getTeacherVisitCount(@Param("teacherIds") List<Integer> teacherIds, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 时间段内是否有训练统计的回访
     * @param teacherId
     * @param addDays1
     * @param addDays3
     * @return
     */
    List<Integer> queryRecordVisitStudentIds(@Param("teacherId") Integer teacherId,
                                             @Param("addDays1") Date addDays1,
                                             @Param("addDays3") Date addDays3);

    /**
    * @description: 获取当月待回访学员数量
     * @param params
    * @return int
    * @author zx
    * @date 2022/9/19 10:38
    */
    int countWaitVisit(Map<String, Object> params);

    List<StudentPreVisitDto> queryWaitVisit(Map<String, Object> params);
}