package com.ym.mec.biz.service;

import java.util.List;
import java.util.Set;

import com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderAuditDetailDto;
import com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderAuditDto;
import com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderDto;
import com.ym.mec.biz.dal.entity.MusicGroup;
import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
import com.ym.mec.biz.dal.entity.MusicGroupStudentClassAdjust;
import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
import com.ym.mec.biz.dal.page.MusicGroupPaymentCalenderQueryInfo;
import com.ym.mec.common.page.PageInfo;
import com.ym.mec.common.service.BaseService;

public interface MusicGroupPaymentCalenderService extends BaseService<Long, MusicGroupPaymentCalender> {

	/**
	 * 创建缴费信息
	 * @param musicGroupPaymentCalenderDto
	 * @return
	 */
	String create(MusicGroupPaymentCalenderDto musicGroupPaymentCalenderDto);
	
	/**
	 * 获取明细
	 * @param id
	 * @return
	 */
	Object getDetail(Long id);
	
	/**
	 * 更新缴费信息
	 */
	String merge(MusicGroupPaymentCalenderDto musicGroupPaymentCalenderDto);
	
	/**
	 * 
	 * @param id
	 * @param memo
	 * @return
	 */
	boolean makesureSchoolePaid(Long id, String memo);
	
	/**
	 * 自动更新付款日历记录状态
	 * @return
	 */
	boolean autoUpdateMusicGroupPaymentCalenderStatus();

	/**
	 * 批量新增、修改乐团缴费周期
	 * @param musicGroupPaymentCalenders
	 */
	void batchInsert(List<MusicGroupPaymentCalender> musicGroupPaymentCalenders);

	/**
	 * 删除
	 * @param id
	 */
	void del(Long id);
	
	/**
	 * 根据批次号删除对象
	 * @param batchNo
	 * @return
	 */
	boolean deleteByBatchNo(String batchNo);

	/**
	 * @describe 更新乐团学员缴费状态
	 * @apiNote 时光荏苒，认真工作的时间总是过得很快，而我、享受这一刻！
	 * @author zouxuan
	 * @date 2020/9/21
	 * @time 13:56
	 * @param :
	 * @return void
	 */
	void autoUpdateMusicGroupStudentFeeStatus();

	/**
	 * @describe 乐团缴费日历审核列表
	 * @apiNote 时光荏苒，认真工作的时间总是过得很快，而我、享受这一刻！
	 * @author zouxuan
	 * @date 2020/10/30
	 * @time 10:45
	 * @param pageInfo:
	 * @return void
	 */
	PageInfo<MusicGroupPaymentCalenderAuditDto> auditList(MusicGroupPaymentCalenderQueryInfo pageInfo);

	/**
	 * @describe 乐团缴费日历审核列表详情
	 * @apiNote 时光荏苒，认真工作的时间总是过得很快，而我、享受这一刻！
	 * @author zouxuan
	 * @date 2020/10/30
	 * @time 15:10
	 * @param batchNo:
	 * @return com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderAuditDetailDto
	 */
	MusicGroupPaymentCalenderAuditDetailDto auditListDetail(String batchNo);

	/**
	 * @describe 审核通过
	 * @apiNote 时光荏苒，认真工作的时间总是过得很快，而我、享受这一刻！
	 * @author zouxuan
	 * @date 2020/10/30
	 * @time 17:39
	 * @param batchNo:
	 * @return void
	 */
	void auditPass(String batchNo,String auditMemo);

	/**
	 * 审核通过后自动排课
	 * @author zouxuan
	 * @param batchNo
	 */
	public void autoClassGroupAdjust(MusicGroupStudentClassAdjust musicGroupStudentClassAdjust);

	/**
	 * @describe 审核拒绝
	 * @apiNote 时光荏苒，认真工作的时间总是过得很快，而我、享受这一刻！
	 * @author zouxuan
	 * @date 2020/10/30
	 * @time 17:39
	 * @param batchNo:
	 * @return void
	 */
	void auditRefuse(String batchNo,String auditMemo);

	/**
	 * 获取乐团报名的缴费日历
	 * @param musicGroupId
	 * @return
	 */
	MusicGroupPaymentCalender findByMusicGroupRegCalender(String musicGroupId);

	/**
	 * @describe 缴费成功后更新calender
	 * @apiNote 时光荏苒，认真工作的时间总是过得很快，而我、享受这一刻！
	 * @author zouxuan
	 * @date 2020/11/3
	 * @time 17:04
	 * @param detailId:
	 * @param userId:
	 * @return com.ym.mec.biz.dal.entity.MusicGroupStudentFee
	 */
    MusicGroupStudentFee updateCalender(Long detailId, Integer userId);

	/**
	 * @describe 推送学生待续费通知
	 * @apiNote 时光荏苒，认真工作的时间总是过得很快，而我、享受这一刻！
	 * @author zouxuan
	 * @date 2020/11/3
	 * @time 17:04
	 * @param calenderId:
	 * @param musicGroup:
	 * @return com.ym.mec.biz.dal.entity.MusicGroupStudentFee
	 */
	void pushWaitRenewMessage(Long calenderId, MusicGroup musicGroup, Set<Integer> studentIds);
}