package com.ym.mec.biz.service;

import com.ym.mec.biz.dal.dto.SimpleUserDto;
import com.ym.mec.biz.dal.entity.CourseSchedule;
import com.ym.mec.biz.dal.entity.CourseScheduleStudentPayment;
import com.ym.mec.biz.dal.page.CourseScheduleStudentPaymentQueryInfo;
import com.ym.mec.biz.dal.enums.GroupType;
import com.ym.mec.common.service.BaseService;
import java.util.List;
import java.util.Map;

public interface CourseScheduleStudentPaymentService extends BaseService<Long, CourseScheduleStudentPayment> {

	/**
	 * @Author: Joburgess
	 * @Date: 2019/10/14
	 * @params [vipGroupId, userId]
	 * @return int
	 * @describe 生成学生vip课单节课时收费信息
	 */
	int createCourseScheduleStudentPaymentForVipGroup(Long vipGroupId, Integer userId);


	/**
	 * 删除学生对应的课程
	 * @param userId
	 * @param courseScheduleList
	 * @return
	 */
	int deleteStudentCourseSchedule(Integer userId, List<CourseSchedule> courseScheduleList);

	/**
	 * @describe 根据课表创建学生的缴费记录
	 * @author Joburgess
	 * @date 2019/10/24
	 * @param courseSchedules: 课程计划列表
	 * @return void
	 */
	void createCourseScheduleStudentPaymentByCourseSchedules(List<CourseSchedule> courseSchedules);


	/**
	 * @return int
	 * @Author: Joburgess
	 * @Date: 2019/10/10
	 * @params [courseScheduleStudentPayments]
	 * @describe 批量插入
	 */
	int batchInsert(List<CourseScheduleStudentPayment> courseScheduleStudentPayments);

	/**
	 * @describe 更新VIP课赠送课顺序
	 * @author Joburgess
	 * @date 2020/1/10
	 * @param vipGroupId: 小课编号
	 * @return void
	 */
	void updateVipGiveCourse(Long vipGroupId);

	/**
	 * @describe 创建课程缴费记录-乐团
	 * @author Joburgess
	 * @date 2020.10.27
	 * @param musicGroupId: 乐团编号
	 * @param courseSchedules: 课程计划列表
	 * @param studentIds: 课程学员列表
	 * @return void
	 */
	void createForMusicGroup(String musicGroupId, List<CourseSchedule> courseSchedules, List<Integer> studentIds);

	/**
	 * @describe 创建课程缴费记录-乐团-用于合班拆班自动排课
	 * @author zouxuan
	 * @date 2020.10.27
	 * @param courseSchedules: 课程计划列表
	 * @param studentIds: 课程学员列表
	 * @return void
	 */
	void createForMusicGroup(List<CourseSchedule> courseSchedules, List<Integer> studentIds,Integer musicGroupStudentClassAdjustId);

	/**
	 * @describe 根据缴费日历更新乐团课程学院课程价格
	 * @author Joburgess
	 * @date 2020.10.29
	 * @param batchNo: 缴费日历批次号
	 * @return void
	 */
	void updateForMusicGroupWithPaymentCalender(String batchNo);

	/**
	 * 获取班级未开始的的课程
	 * @param classGroupIds
	 * @return
	 */
	List<CourseScheduleStudentPayment> getClassGroupNoStartCourse(List<Integer> classGroupIds);

	int deleteByMusicGroupId(String musicGroupId, GroupType music);
	/**
	 * @describe 查询课程上学员列表
	 * @author Joburgess
	 * @date 2020/11/17 0017
	 * @param queryInfo:
	 * @return com.ym.mec.common.page.PageInfo<com.ym.mec.biz.dal.dto.CourseScheduleStudentListDto>
	 */
	Map<String, Object> queryCourseStudentList(CourseScheduleStudentPaymentQueryInfo queryInfo);

	/**
	 * @describe 获取指定课程上的学员信息
	 * @author qnc99
	 * @date 2020/11/27 0027
	 * @param courseIds:
	 * @return java.util.List<com.ym.mec.biz.dal.dto.SimpleUserDto>
	 */
	List<SimpleUserDto> getCourseStudents(List<Long> courseIds);

	/**
	 * @describe 更新课程营收
	 * @author qnc99
	 * @date 2020/12/2 0002
	 * @return void
	 */
	void updateCourseActualPrice(List<String> groupIds, List<Integer> userIds, GroupType groupType);

}
