package com.ym.mec.biz.service;

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

import com.ym.mec.auth.api.entity.SysUser;
import com.ym.mec.biz.dal.dto.*;
import com.ym.mec.biz.dal.entity.Student;
import com.ym.mec.biz.dal.page.*;
import com.ym.mec.common.page.PageInfo;
/**
 * @Author Joburgess
 * @Date 2019/9/19
 */
public interface StudentManageService {

    /**
     * @Author: Joburgess
     * @Date: 2019/9/19
     * 根据员工分页获取该员工所属部门下所有学生
     */
    PageInfo<StudentManageListDto> findStudentsByOrganId(StudentManageQueryInfo queryInfo);


    PageInfo<SimpleUserDto> queryStudentsWithTeacher(StudentManageQueryInfo queryInfo);

    /**
     * @describe 双11活动学员查询
     * @author qnc99
     * @date 2020/11/25 0025
     * @param queryInfo:
     * @return com.ym.mec.common.page.PageInfo<com.ym.mec.biz.dal.dto.SimpleUserDto>
     */
    PageInfo<StudentVipDouble11Dto> queryDouble11Students(StudentManageQueryInfo queryInfo);

    /**
     * @describe 获取学员双11记录
     * @author qnc99
     * @date 2020/11/26 0026
     * @param studentIds:
     * @return java.util.List<com.ym.mec.biz.dal.dto.StudentVipDouble11Dto>
     */
    List<StudentVipDouble11Dto> getStudentDouble11Info(List<Integer> studentIds);

    /**
     * @Author: Joburgess
     * @Date: 2019/9/20
     * 根据学生ID获取学生基本报名信息
     */
    StudentManageListDto findStudentManageBaseInfo(Integer userId);

    /**
     * @Author: Joburgess
     * @Date: 2019/9/20
     * 根据学生ID获取其所在的乐团
     */
    List<StudentManageBaseInfoOfMusicGroupDto> findStudentMusicGroupsByUserId(Integer userId);

    /**
     * 获取学生所在乐团名称
     * @return
     */
    List<MusicCardDto> queryUserMusicInfos(Integer userId);

    /**
     * @Author: Joburgess
     * @Date: 2019/9/20
     * 获取学生排课信息
     */
    PageInfo findStudentCourseList(StudentManageCourseQueryInfo queryInfo);

    /**
     * @Author: Joburgess
     * @Date: 2019/9/20
     * 获取学生考勤记录
     */
    PageInfo findStudentAttendances(StudentManageAttendanceQueryInfo queryInfo);

    /**
     * @Author: Joburgess
     * @Date: 2019/9/20
     * 获取学生vip课
     */
    PageInfo<StudentManageVipGroupDto> findStudentVipGroups(StudentManageCourseQueryInfo queryInfo);

    /**
     * @Author: Joburgess
     * @Date: 2019/9/21
     * 获取学上账户基本信息
     */
    StudentManageAccountBaseInfoDto getStudentAccountBaseInfo(Integer userID);

    /**
     * 获取学员扣费记录列表
     * @param queryInfo
     * @return
     */
    PageInfo queryStudentPayment(TeacherPaymentRecordInfo queryInfo);

    /**
     * 获取乐团管理、学员列表
     * @param queryInfo
     * @return
     */
    PageInfo<MusicGroupStudentsDto> queryMusicGroupStudent(MusicGroupStudentQueryInfo queryInfo);

    /**
     * 乐团管理学员列表数据汇总
     * @param musicGroupId
     * @return
     */
    Object musicGroupStudentsSum(String musicGroupId);

    /**
     * 乐团管理--点名总览
     * @param queryInfo
     * @return
     */
    PageInfo<MusicGroupStudentSignDto> queryMusicGroupStudentsSign(StudentSignQueryInfo queryInfo);

    /**
     * 获取学员的班级信息列表
     * @param musicGroupId
     * @param teacherId
     * @return
     */
    List<ConditionDto> queryStudentClassGroup(String musicGroupId, Integer teacherId);

    /**
     * 修改用户信息
     * @param sysUser
     */
    void updateUser(SysUser sysUser);

    /**
     * 获取vip课班级列表
     * @param queryInfo
     * @return
     */
    PageInfo<StudentManageVipGroupClassDto> findStudentVipGroupClass(StudentManageVipClassQueryInfo queryInfo);

    /**
     * 后台注册学员
     * @param sysUser
     * @return
     */
    int studentRegister(Student student);

    /**
     * 修改学员信息
     * @param sysUser
     * @return
     */
    int studentUpdate(Student student);

    /**
     * 获取激活比例
     * @return
     */
    List<StudentRegisterPerDto> queryStudentPer();

    /**
     * 获取有课没有激活的列表（变更为所有有课学生）
     * @return
     */
    List<StudentManageListDto> queryHasCourseStudent(StudentManageQueryInfo queryInfo);

    /**
     * 课表列表签到详情统计接口
     * @param courseScheduleId
     * @return
     */
    Map<String,Integer> sumStudentAttendance(Integer courseScheduleId);

    /**
     * 运营指标学生
     * @param queryInfo
     * @return
     */
    PageInfo<Student4operating> getOperatingStudents(StudentOperatingQueryInfo queryInfo);

    /**
     * 乐团修改--学员缴费记录--可新增学员列表
     * @param musicGroupId
     * @param musicGroupPaymentCalenderId
     * @return
     */
    List<BasicUserDto> queryCanAddStudent(String musicGroupId, String batchNo,String search,Integer subjectId);

    /**
     * 获取教务老师关联的学员列表
     * @param queryInfo
     * @return
     */
    PageInfo<BasicUserDto> queryGroupStudents(StudentQueryInfo queryInfo);

    /**
     * 获取当前教务老师关联的课程组上该学员的所有剩余课程
     * @param queryInfo
     * @return
     */
    PageInfo<StudentNoStartCoursesDto> queryStudentNoStartCourse(StudentQueryInfo queryInfo);

    /**
     * 乐团管理--乐团详情--学员列表--获取学员可排课时长
     * @return
     */
    List<StudentSubTotalCourseTimesDto> queryStudentSubTotalCourseTimes(String musicGroupId);
}
