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

import com.ym.mec.auth.api.entity.SysUser;
import com.ym.mec.biz.dal.dto.StudentApplyDetailDto;
import com.ym.mec.biz.dal.dto.StudentFeeDto;
import com.ym.mec.biz.dal.dto.StudentInfo;
import com.ym.mec.biz.dal.entity.StudentRegistration;
import com.ym.mec.common.dal.BaseDAO;

import org.apache.ibatis.annotations.Param;

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

public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistration> {

	/**
	 * 获取乐团学员报名详情
	 *
	 * @param params
	 * @return
	 */
	List<StudentApplyDetailDto> queryStudentDetailPage(Map<String, Object> params);

	/**
	 * 获取乐团学员报名详情条数
	 *
	 * @param params
	 * @return
	 */
	int queryStudentDetailCount(Map<String, Object> params);

	/**
	 * 根据乐团编号和声部获取缴费学员人数
	 *
	 * @param musicGroupId
	 * @return
	 */
	List<Map<Integer, Integer>> countPayNum(@Param("musicGroupId") String musicGroupId);

	/**
	 * 学生报名缴费金额详情
	 *
	 * @param studentId
	 * @param musicGroupId
	 * @return
	 */
	StudentFeeDto queryFeeDetail(Integer studentId, String musicGroupId);

	/**
	 * 获取乐团声部未分配的班级的学生
	 *
	 * @param musicGroupId    乐团id
	 * @param actualSubjectId 科目id
	 * @return
	 */
	List<StudentRegistration> getNoClassStuBySubjectId(@Param("musicGroupId") String musicGroupId, @Param("actualSubjectId") String actualSubjectId);

	/**
	 * 获取乐团声部未分配学生数
	 *
	 * @param musicGroupId
	 * @return
	 */
	List<Map<Integer, Long>> getNoClassStuCountBySubjectId(@Param("musicGroupId") String musicGroupId);

	/**
	 * 根据乐团id和user_id 更新
	 *
	 * @param studentRegistration
	 * @return
	 */
	Integer updateByUserIdAndMusicGroupId(@Param("studentRegistration") StudentRegistration studentRegistration);

	/**
	 * 查询学生信息
	 *
	 * @param userId
	 * @return
	 */
	StudentInfo queryStudentInfo(Integer userId);

	/**
	 * 查询用户指定乐团的报名信息
	 *
	 * @param userId       用户编号
	 * @param musicGroupId 乐团编号
	 * @return
	 */
	StudentRegistration queryByUserIdAndMusicGroupId(@Param("userId") Integer userId, @Param("musicGroupId") String musicGroupId);


	/**
	 * 查询手机是否已注册
	 *
	 * @param musicGroupId
	 * @param parentsPhone
	 * @return
	 */
	StudentRegistration getByPhoneAndMusicGroupId(@Param("musicGroupId") String musicGroupId, @Param("parentsPhone") String parentsPhone);

	/**
	 * 查询用户是否存在
	 *
	 * @param phone
	 * @return
	 */
	SysUser getSysUserByPhone(String phone);

	/**
	 * 获取班级学生
	 * @param musicGroupId
	 * @param classGroupId
	 * @return
	 */
	List<StudentRegistration> findClassGroupStu(@Param("musicGroupId") String musicGroupId, @Param("classGroupId") Integer classGroupId);
}