package com.ruoyi.mall.mapper;

import com.ruoyi.mall.domain.Bo.CheckingOutParamBo;
import com.ruoyi.mall.domain.MallSchool;
import com.ruoyi.mall.domain.MallSchoolAccept;
import com.ruoyi.mall.domain.MallSchoolBatchLink;
import com.ruoyi.mall.domain.Vo.MajorItemVo;
import com.ruoyi.mall.domain.Vo.SchoolMajorVO;
import com.ruoyi.mall.domain.Vo.SchoolVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 学校Mapper接口
 *
 * @author lsm
 * @date 2023-10-18
 */
public interface MallSchoolMapper
{
    /**
     * 查询学校
     *
     * @param schoolId 学校主键
     * @return 学校
     */
    public MallSchool selectMallSchoolBySchoolId(Long schoolId);

    /**
     * 硕士点数修改
     * @return
     */
    public List<MallSchool> selectPointSchoolList();

    /**
     * 学校名查询学校
     * @param schoolName 学校名
     * @return 结果
     */
    public MallSchool selectMallSchoolBySchoolName(@Param("schoolName") String schoolName);

    /**
     * 学校代码查询学校
     * @param schoolNumber 学校代码
     * @return 结果
     */
    public MallSchool selectMallSchoolBySchoolNumber(@Param("schoolNumber") String schoolNumber);

    /**
     * 查询学校列表
     *
     * @param mallSchool 学校
     * @return 学校集合
     */
    public List<MallSchool> selectMallSchoolList(MallSchool mallSchool);

    /**
     * 新增学校
     *
     * @param mallSchool 学校
     * @return 结果
     */
    public int insertMallSchool(MallSchool mallSchool);

    /**
     * 修改学校
     *
     * @param mallSchool 学校
     * @return 结果
     */
    public int updateMallSchool(MallSchool mallSchool);

    /**
     * 删除学校
     *
     * @param schoolId 学校主键
     * @return 结果
     */
    public int deleteMallSchoolBySchoolId(Long schoolId);

    /**
     * 批量删除学校
     *
     * @param schoolIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteMallSchoolBySchoolIds(Long[] schoolIds);

    /**
     * 学校列表
     * @param schoolName 学校名称
     * @param batchId 批次id
     * @param configLevelId 层次id
     * @param configTypeId 学校类型id
     * @param provinceId 省份id
     * @param cityId 城市id
     * @return 结果
     */
    public List<SchoolVO> selectSchoolList(@Param("schoolName")String schoolName,
                                           @Param("batchId") Long batchId,
                                           @Param("configLevelId") Long configLevelId,
                                           @Param("configTypeId") Long configTypeId,
                                           @Param("provinceId") Long provinceId,
                                           @Param("cityId") Long cityId ,
                                           @Param("majorName")String majorName,
                                           @Param("subjectType")String subjectType);

    /**
     * 学校列表
     * @param schoolName 学校名称
     * @param batchId 批次id
     * @param configLevelId 层次id
     * @param configTypeId 学校类型id
     * @param provinceId 省份id
     * @param cityId 城市id
     * @return 结果
     */
    public List<SchoolVO> selectMatchSchoolList(@Param("schoolName")String schoolName,
                                           @Param("batchId") Long batchId,
                                           @Param("configLevelId") Long configLevelId,
                                           @Param("configTypeId") Long configTypeId,
                                           @Param("provinceId") Long provinceId,
                                           @Param("cityId") Long cityId ,
                                           @Param("majorId")Long majorId,
                                           @Param("subjectType")String subjectType);

    /**
     * 学校概述
     * @param schoolId 学校id
     * @return 结果
     */
    public SchoolVO selectSchoolDetail(@Param("schoolId")Long schoolId);

    /**
     * 学校介绍详情
     * @param schoolId 学校id
     * @return 结果
     */
    public SchoolVO selectSchoolIntroduceDetail(@Param("schoolId")Long schoolId);

    /**
     * 层次id查询院校列表
     * @param batchId 批次id
     * @param configLevelId 层次id
     * @return 结果
     */
    public List<SchoolVO> selectSchoolListByLevelId(@Param("batchId")Long batchId,
                                                    @Param("configLevelId")Long configLevelId,
                                                    @Param("schoolId")Long schoolId,
                                                    @Param("subjectType")String subjectType);

    /** 查询 开设硕士点 筛选列表*/
    List<Object> masterDetailList();
    /**查询 开设博士点 筛选列表*/
    List<Object> doctorateDetailList();

    /**志愿自主选择 筛选学校*/
    List<Long> selectSchoolByParams(CheckingOutParamBo bo);

    /**志愿自主选择 获取学校信息*/
    List<SchoolMajorVO> schoolListInfoForReport(@Param("sIds") List<Long> sIds);
    public List<MallSchool> selectAllSchoolNames(@Param("schoolNames")List<String> schoolNames);

    /**
     * 志愿自主选择 ,分页查询
     * @param bo
     * @return
     */
    List<SchoolMajorVO> selectRateSchoolList(CheckingOutParamBo bo);


    List<SchoolVO> selectTypeSchoolList(CheckingOutParamBo bo);

    /**
     * 学校专业
     * @param schoolId
     * @param majorIds
     * @return
     */
    List<MajorItemVo> selectMajorList(@Param("schoolId")Long schoolId, @Param("majorIds")Long[] majorIds);



    /**
     * 保研率学校列表
     * @param schoolName 学校名
     * @param batchId 批次id
     * @param configLevelId 层次id
     * @param configTypeId 办学类型id
     * @param provinceId 省份
     * @param cityId 城市
     * @return
     */
    public  List<SchoolVO> selectSchoolListForMaster(@Param("schoolName")String schoolName,
                                                      @Param("batchId") Long batchId,
                                                      @Param("configLevelId") Long configLevelId,
                                                      @Param("configTypeId") Long configTypeId,
                                                      @Param("provinceId") Long provinceId,
                                                      @Param("cityId") Long cityId );


    /**
     * 专业查询学校列表
     * @param schoolName 学校名称
     * @param batchId 批次id
     * @param configLevelId 层次id
     * @param configTypeId 类型id
     * @param provinceId 省份id
     * @param cityId 城市id
     * @param type  类型(0-强校,1-硕士点)
     * @return 结果
     */
    public List<SchoolVO> selectSchoolListByMajorId(@Param("schoolName")String schoolName,
                                                    @Param("batchId") Long batchId,
                                                    @Param("configLevelId") Long configLevelId,
                                                    @Param("configTypeId") Long configTypeId,
                                                    @Param("provinceId") Long provinceId,
                                                    @Param("cityId") Long cityId,
                                                    @Param("type")Integer type,
                                                    @Param("majorId")Long majorId);

    /**
     * 录取院校信息
     * @return 结果
     */
    public SchoolVO selectSchoolAcceptInfo(@Param("schoolId")Long schoolId);
    /** 根据schoolIds 获取schoolVo列表*/
    List<SchoolVO> selectSchoolVoByIds(@Param("sIds") List<Long> sIds);

    /**
     * 新招学校
     * @param batchId
     * @param subjectType
     * @return
     */
    List<SchoolVO> selectNewSchoolList(@Param("batchId")Long batchId, @Param("subjectType")String subjectType);


    /**
     * 修改招生计划（学校重复数据）
     *
     * @param schoolId 保留的学校ID
     * @param deleteSchoolId 删除的学校ID
     * @return 结果
     */
    public int updateMallAcceptPlanDuplicateData(@Param("schoolId") Long schoolId, @Param("deleteSchoolId") Long deleteSchoolId);

    /**
     * 修改（学校重复数据）
     *
     * @param schoolId 保留的学校ID
     * @param deleteSchoolId 删除的学校ID
     * @return 结果
     */
    public int updateMallSchoolAcceptDuplicateData(@Param("schoolId") Long schoolId, @Param("deleteSchoolId") Long deleteSchoolId);

    /**
     * 修改（学校重复数据）
     *
     * @param schoolId 保留的学校ID
     * @param deleteSchoolId 删除的学校ID
     * @return 结果
     */
    public int updateMallSchoolAcceptRecordDuplicateData(@Param("schoolId") Long schoolId, @Param("deleteSchoolId") Long deleteSchoolId);

    /**
     * 修改（学校重复数据）
     *
     * @param schoolId 保留的学校ID
     * @param deleteSchoolId 删除的学校ID
     * @return 结果
     */
    public int updateMallSchoolBatchLinkDuplicateData(@Param("schoolId") Long schoolId, @Param("deleteSchoolId") Long deleteSchoolId);

    /**
     * 修改（学校重复数据）
     *
     * @param schoolId 保留的学校ID
     * @param deleteSchoolId 删除的学校ID
     * @return 结果
     */
    public int updateMallLinkMajorSchoolDuplicateData(@Param("schoolId") Long schoolId, @Param("deleteSchoolId") Long deleteSchoolId, @Param("schoolName") String schoolName);

    /**
     * 修改（学校重复数据）
     *
     * @param schoolId 保留的学校ID
     * @param deleteSchoolId 删除的学校ID
     * @return 结果
     */
    public int updateMallSchoolSceneryDuplicateData(@Param("schoolId") Long schoolId, @Param("deleteSchoolId") Long deleteSchoolId);

    /**
     * 修改（学校重复数据）
     *
     * @param schoolId 保留的学校ID
     * @param deleteSchoolId 删除的学校ID
     * @return 结果
     */
    public int updateMallSchoolIntroduceDuplicateData(@Param("schoolId") Long schoolId, @Param("deleteSchoolId") Long deleteSchoolId);

    /**
     * 查询学校编号重复列表
     *
     * @return 学校集合
     */
    public List<MallSchool> selectMallSchoolNumberRepetitionList();

    /**
     * 根据学校编号查询学校列表
     *
     * @return 学校集合
     */
    public List<MallSchool> selectMallSchoolNumberList(String schoolNumber);

    /**
     *
     * 所有学校id集合
     * @return
     */
    public List<Long> selectAllSchoolIds(@Param("batchId")Long batchId);


    /**
     * 招生稳定学校
     * @param batchId
     * @param subjectType
     * @return
     */
    public List<MallSchoolAccept> selectSchoolSteadyNum(@Param("batchId")Long batchId,
                                                        @Param("subjectType")String subjectType,
                                                        @Param("afterYear")String afterYear);

    /**
     * 新招和未公布
     * @param batchId
     * @param subjectType
     * @return
     */
    public int selectSchoolNewNum(@Param("batchId")Long batchId, @Param("subjectType")String subjectType);

    /**
     * 招生公式变化
     * @param batchId
     * @param subjectType
     * @return
     */
    public int selectSchoolChangeNum(@Param("batchId")Long batchId, @Param("subjectType")String subjectType);

    /**
     * 修改学校
     *
     * @param mallSchool 学校
     * @return 结果
     */
    public int updateSchoolUser(MallSchool mallSchool);

    /**
     * 学校
     * @param sysUserName 账号
     * @return 结果
     */
    public MallSchool selectSchoolBySysUserName(@Param("sysUserName") String sysUserName);

    /**
     * 查询学校
     *
     * @param sysUserId 系统用户ID
     * @return 学校
     */
    public MallSchool selectMallSchoolBySysUserId(@Param("sysUserId") Long sysUserId);

}
