package com.ym.mec.biz.service;

import com.ym.mec.biz.dal.dto.*;
import com.ym.mec.biz.dal.entity.MusicGroup;
import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
import com.ym.mec.biz.dal.page.BaseOrganQueryInfo;
import com.ym.mec.biz.dal.page.MusicGroupPaymentCalenderQueryInfo;
import com.ym.mec.common.entity.HttpResponseResult;
import com.ym.mec.common.page.PageInfo;
import com.ym.mec.common.service.BaseService;
import org.springframework.ui.ModelMap;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Set;

public interface MusicGroupPaymentCalenderService extends BaseService<Long, MusicGroupPaymentCalender> {

	/**
	 * 创建缴费信息(目前只支持合班缴费)
	 * @param musicGroupPaymentCalenderDto
	 * @return
	 */
	String create(MusicGroupPaymentCalenderDto musicGroupPaymentCalenderDto);

	/**
	 * 创建缴费信息
	 * @param musicGroupPaymentBaseCalender
	 * @return
	 */
	HttpResponseResult<ModelMap> create1(MusicGroupPaymentBaseCalender musicGroupPaymentBaseCalender);
	
	/**
	 * 获取明细
	 * @param id
	 * @return
	 */
	Map<String, Object> getDetail(Long id);

	Map<String, Object> getCalenderDetail(Map<String, Object> result,Long calenderId);
	
	/**
	 * 更新缴费信息
	 */
	String merge(MusicGroupPaymentCalenderDto musicGroupPaymentCalenderDto);
	
	/**
	 * 
	 * @param id
	 * @param memo
	 * @return
	 */
	boolean makesureSchoolePaid(Long id, String memo);

	/**
	 * 进行中加学员
	 * @param musicGroupPaymentCalender
	 * @param musicGroup
	 */
	void addStudent(MusicGroupPaymentCalender musicGroupPaymentCalender,
					MusicGroup musicGroup);


		/**
         * 自动更新付款日历记录状态
         * @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);

	/**
	 * @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 推送学生待续费通知
	 * @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);

	/**
	 * 待审核缴费撤回
	 * @param batchNo
	 */
	void revoke(String batchNo);

	List<MusicGroupPaymentCalender> findByBatchNo(String batchNo);

	PageInfo<MusicGroupPaymentCalenderResultDto> queryCalenderPage(MusicGroupPaymentCalenderQueryInfo queryInfo);

	/**
	* @description: 新版修改缴费项目，先删除原有的缴费项目，再重新生成
	 * @param musicGroupPaymentBaseCalender
	* @return java.lang.String
	* @author zx
	* @date 2021/12/27 20:43
	*/
	HttpResponseResult<ModelMap> merge1(MusicGroupPaymentBaseCalender musicGroupPaymentBaseCalender);

    MusicGroupPaymentCalender getMusicGroupRegCalender(String musicGroupId);

    //获取乐保金额
    BigDecimal getRepairAmount(Long calenderId);

    //获取会员金额
    BigDecimal getMemberAmount(Long calenderId);

    //获取活动总金额
	BigDecimal getActivityAmount(List<Long> buyCalenderActivityIdList);

	/**
	* @description: 获取报名缴费订单
	 * @param musicGroupId
	* @return com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender
	* @author zx
	* @date 2021/12/30 10:41
	*/
	MusicGroupPaymentCalender getApplyCalenderByMusicId(String musicGroupId);

	/**
	* @description: 学员已排课时长未消耗完
	 * @param queryInfo
	* @return com.ym.mec.common.page.PageInfo<com.ym.mec.biz.dal.dto.HasFreeCourseTimesDto>
	* @author zx
	* @date 2022/3/4 11:35
	*/
	PageInfo<HasFreeCourseTimesDto> queryHasFreeCourseTimesStudent(BaseOrganQueryInfo queryInfo);

	/**
	* @description: 获取缴费项目关联的合作单为编号
	 * @param calenderIds
	* @return java.util.List<java.util.Map<java.lang.Long,java.lang.Integer>>
	* @author zx
	* @date 2022/3/17 11:16
	*/
	Map<Long, Integer>  findCooperationByIds(List<Long> calenderIds);
}