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

import com.ym.mec.biz.dal.dto.StudentOrganDto;
import com.ym.mec.biz.dal.dto.StudentStatisticsDto;
import com.ym.mec.biz.dal.dto.StudentStatisticsSumDto;
import com.ym.mec.biz.dal.entity.StudentStatistics;
import com.ym.mec.common.dal.BaseDAO;
import org.apache.ibatis.annotations.Param;

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

public interface StudentStatisticsDao extends BaseDAO<Integer, StudentStatistics> {

    //更新乐团主管、指导老师
    void updateTeacherAndEdu();

    //更新总课时数、已完成、剩余课时数、最近30天课耗
    void updateCourseNum();

    //更新未排课总数
    void updateNoCourseNum();

    //更新未开始价值
    void updateNotStartCourseFee();

    //更新未排课课程价值
    void updateNoCourseFee();

    //更新第一次课的时间\最近一次课时间
    void updateFirstAndLastCourseTime();

    //更新进行中课程组数量
    void updateNormalGroupNum();

    int countStatistics(Map<String, Object> params);

    List<StudentStatisticsDto> queryStatistics(Map<String, Object> params);

    //汇总小课数据
    StudentStatisticsSumDto studentSmallClassStatisticsSum(@Param("groupType") String groupType, @Param("organIdList") List<Integer> organIdList);

    //统计新增人数
    Integer countAddStudentNum(@Param("groupType") String groupType, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("organIdList") List<Integer> organIdList);

    //统计续费人数
    Integer countRenewStudentNum(@Param("groupType") String groupType, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("organIdList") List<Integer> organIdList);

    //统计回访人数
    Integer countVisitNum(@Param("groupType") String groupType, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("organIdList") List<Integer> organIdList);

    //统计流失人数
    Integer countLostStudentNum(@Param("groupType") String groupType, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("organIdList") List<Integer> organIdList);

    //获取指导老师列表
    List<Integer> queryTeacherIds(@Param("groupType") String groupType);

    //获取乐团主管
    List<Integer> queryDirectorList(@Param("groupType") String groupType);

    void clean();

    void batchUpdate(@Param("statisticsList") List<StudentStatistics> statisticsList);

    List<StudentOrganDto> queryNoScheduleNumStudent(@Param("organIds") List<Integer> organIds);

    void updateFirstOrderTime();
}