package com.ssj.service.kmt.arrange.service;


import java.util.List;

import org.springframework.data.domain.Pageable;

import com.ssj.bean.kmt.kmt.domain.KmtArrangeDetail;
import com.ssj.framework.core.common.service.BaseService;
import com.ssj.service.kmt.arrange.dto.ArrangeCalendarDto;
import com.ssj.service.kmt.arrange.dto.ArrangeTeacherDto;
import com.ssj.service.kmt.arrange.dto.ArrangeTeamTeacherDto;

public interface KmtArrangeDetailService extends BaseService<KmtArrangeDetail, String> {

	/**
	 * 排班日历表(校区管理员)
	 * @param type
	 * @param subject
	 * @return
	 */
	public ArrangeCalendarDto findCalendarList(String month,String type, String subject);
	
	
	/**
	 * 已选时段老师列表
	 * @param id
	 * @param teacherName
	 * @return
	 */
	public ArrangeTeacherDto findHaveTeacherList(String parentTeacherId,String id, String teacherName);
	
	
	/**
	 * 未选时段老师列表(添加老师)
	 * @param id
	 * @param teacherName
	 * @return
	 */
	public ArrangeTeacherDto findNoHaveTeacherList(String parentTeacherId,String id, String teacherName);
	
	
	/**
	 * 时段移除老师
	 * @param id
	 * @param teacherId
	 * @return
	 */
	public boolean deleteArrangeByTeacher(String id, String teacherId);
	
	
	/**
	 * 时段添加老师
	 * @param id
	 * @param teacherIds
	 * @return
	 */
	public Integer addArrangeByTeacher(String id, List<String> teacherIds);
	
	
	/**
	 * 组内排班老师列表
	 * @param id
	 * @param teacherIds
	 * @return
	 */
	public ArrangeTeamTeacherDto findTeamTeacherList(String parentTeacherId,String type,String id,String teacherName,Pageable pageable);
	
	
	/**
	 * 按老师类型，科目,查询当月的日历列表
	 * @param type
	 * @param subject
	 * @return
	 */
	List<KmtArrangeDetail> findKmtArrangeDetailByCurMonth(String type,String subject);

	/**
	 * 按老师类型，科目，月份,查询当月的日历列表
	 * @param type
	 * @param subject
	 * @return
	 */
	List<KmtArrangeDetail> findKmtArrangeDetailByMonth(String month,String type,String subject);
	
	/**
	 * 按月份,查询当月的日历列表,用于25号更新所有的日历数据
	 * @return
	 */
	List<KmtArrangeDetail> findKmtArrangeDetailByMonth(String month);
	
	
	/**
	 * 推送信息
	 * 1号的0点启动，这个月的批改时段仍有未达到储备最少人数，发送提醒给校区管理员，发送提醒给超级管理员。
	 * @return
	 */
	void pushKmtArrangeDetailByMiniNum();
	
	
	/**
	 * init数据到redis
	 * 25号更新所有的日历数据到redis
	 * @return
	 */
	void initKmtArrangeDetailByRedis(String month);
	
	
	/**
	 * update数据到redis
	 * @return
	 */
	boolean updateKmtArrangeDetailByRedisKey(String id,int haveNum);
	
	

		
}
