package com.ym.mec.biz.service;

import com.ym.mec.biz.dal.dto.ConditionDto;
import com.ym.mec.biz.dal.dto.SubFeeSettingDto;
import com.ym.mec.biz.dal.dto.SubjectApplyDetailDto;
import com.ym.mec.biz.dal.entity.Subject;
import com.ym.mec.biz.dal.entity.SubjectGoodsMapper;
import com.ym.mec.biz.dal.page.SubjectQueryInfo;
import com.ym.mec.common.page.PageInfo;
import com.ym.mec.common.service.BaseService;

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

public interface SubjectService extends BaseService<Integer, Subject> {

    /**
     * 通过乐团编号查询科目列表
     *
     * @param musicGroupId
     * @return
     */
    List<Subject> findSubByMusicGroupId(String musicGroupId);

    /**
     * 分页查询科目树状列表
     *
     * @param queryInfo
     * @return
     */
    PageInfo<Subject> queryPageTree(SubjectQueryInfo queryInfo);

    /**
     * 通过乐团收费类型，获取默认的声部列表
     *
     * @param chargeTypeId
     * @return
     */
    List<Subject> findDefaultSubByChargeTypeId(Integer chargeTypeId,Integer organId,Integer number);

    /**
     * 通过乐团编号获取声部列表以及声部报名、缴费、计划人数
     *
     * @param musicGroupId
     * @return
     */
    List<SubjectApplyDetailDto> findSubApplyDetail(String musicGroupId);

    /**
     * 修改、新增科目树状列表
     *
     * @param subject
     */
    void upSetSubject(Subject subject);

    /**
     * 修改、保存声部与乐器关联
     *
     * @param subjectGoodsMappers
     */
    void markGoods(List<SubjectGoodsMapper> subjectGoodsMappers);

    /**
     * @Author: Joburgess
     * @Date: 2019/9/26
     * 获取教师所属科目列表
     */
    List<Subject> findTeacherSubjects(Integer userId);

    List<ConditionDto> findSubjectConditions();

    /**
     * @Author: Joburgess
     * @Date: 2019/10/17
     * @params [subjectIdsList]
     * @return java.util.Map<java.lang.Long,java.lang.String>
     * @describe 根据部门编号列表获取部门编号,名称map
     */
    Map<Long,String> findSubjectMapBySubjectIdsList(List<String> subjectIdsList);

    /**
     * 获取子级科目列表
     * @return
     */
    List<Subject> findSubSubjects(Integer tenantId);

    List<Subject> findBySubjectByIdList(List<Integer> subjectIdList);

    List<Subject> findBySubjectByIdList(String subjectIdList);

    /**
     * 根据声部id字符串查询
     *
     * @param subIds
     * @return
     */
    List<String> findBySubIds(String subIds);

    /**
     * 获取收费类型关联的默认声部数据
     * @param chargeTypeId
     * @return
     */
    SubFeeSettingDto setSubjectInfo(Integer chargeTypeId);
}
