package com.ruoyi.mall.mapper;

import java.util.List;

import com.ruoyi.mall.domain.Bo.CheckingOutParamBo;
import com.ruoyi.mall.domain.Bo.SchoolMajorLinkBO;
import com.ruoyi.mall.domain.MallLinkMajorSchool;
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.SchoolVO;
import org.apache.ibatis.annotations.Param;

/**
 * 专业与学校关联Mapper接口
 *
 * @author Lsm
 * @date 2023-10-23
 */
public interface MallLinkMajorSchoolMapper
{
    /**
     * 查询专业与学校关联
     *
     * @param linkId 专业与学校关联主键
     * @return 专业与学校关联
     */
    public MallLinkMajorSchool selectMallLinkMajorSchoolByLinkId(Long linkId);

    /**
     * 学校和专业id查数据
     * @param schoolId
     * @param majorId
     * @return
     */
    public MallLinkMajorSchool selectMallLinkMajorSchoolBySchoolAndMajor(@Param("schoolId")Long schoolId,
                                                                         @Param("majorId")Long majorId);

    /**
     * 查询学校专业信息是否存在
     * @param schoolId 学校id
     * @param majorName 专业id
     * @return 结果
     */
    public MallLinkMajorSchool selectMajorSchoolBySchoolAndMajorId(@Param("schoolId")Long schoolId,
                                                                   @Param("majorName")String majorName);

    /**
     * 查询专业与学校关联列表
     *
     * @param mallLinkMajorSchool 专业与学校关联
     * @return 专业与学校关联集合
     */
    public List<MallLinkMajorSchool> selectMallLinkMajorSchoolList(MallLinkMajorSchool mallLinkMajorSchool);

    /**
     * 新增专业与学校关联
     *
     * @param mallLinkMajorSchool 专业与学校关联
     * @return 结果
     */
    public int insertMallLinkMajorSchool(MallLinkMajorSchool mallLinkMajorSchool);

    /**
     * 修改专业与学校关联
     *
     * @param mallLinkMajorSchool 专业与学校关联
     * @return 结果
     */
    public int updateMallLinkMajorSchool(MallLinkMajorSchool mallLinkMajorSchool);

    /**
     * 删除专业与学校关联
     *
     * @param linkId 专业与学校关联主键
     * @return 结果
     */
    public int deleteMallLinkMajorSchoolByLinkId(Long linkId);

    /**
     * 批量删除专业与学校关联
     *
     * @param linkIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteMallLinkMajorSchoolByLinkIds(Long[] linkIds);

    /**
     * 查询学校专业子分类
     * @param schoolId 学校id
     * @param parentId 父级id
     * @return 结果
     */
    public List<String> selectSchoolMajorByParentId(@Param("schoolId")Long schoolId, @Param("parentId")Long parentId);

    /**
     * 计算公式匹配学校
     * @param acceptRuleId
     * @return
     */
    public List<SchoolVO> selectRuleMatchSchool(@Param("acceptRuleId") Long acceptRuleId,
                                                @Param("batchId")Long batchId,
                                                @Param("positionId")Long positionId,
                                                @Param("suggestId")Long suggestId,
                                                @Param("subjectType")String subjectType);

    /** 查询 硕士点研究方向 筛选列表*/
    List<String> masterDirectionList();
    /**博士点研究方向 筛选列表*/
    List<String> doctorateDirectionList();
    /** 细分专业其他列表*/
    List<String> otherMajorTagList();
    /** 学科大类 其他列表*/
    List<String> otherSubjectTagList();
    /** 添加志愿 在筛选学校id 的基础上 筛选专业*/
    List<MajorItemVo> a3MajorItemList(CheckingOutParamBo bo);

    /**
     * 查询最新年份
     * @return
     */
    String selectMaxYear();

    List<MajorItemVo> a4MajorItemList(CheckingOutParamBo bo);


    List<MajorItemVo> a4MajorItemList2(CheckingOutParamBo bo);

    /**
     * 根据学校id 查专业
     * @param
     * @return
     */
    List<MajorItemVo> selectMajorItemList(@Param("schoolId")Long schoolId,
                                          @Param("batchId")Long batchId,
                                          @Param("subjectType")String subjectType,
                                          @Param("majorIds")Long[] majorIds,
                                          @Param("userId")Long userId,
                                          @Param("newAcceptType")String newAcceptType);
    /**
     * 查询学校有评估的学科
     * @param schoolId 学校id
     * @return 结果
     */
    List<String> selectMajorListBySchoolId(@Param("schoolId")Long schoolId);

    /**
     * 查询专业与学校关联表重复列表
     *
     * @return 学校集合
     */
    public List<MallLinkMajorSchool> selectMallLinkMajorSchoolRepetitionList();

    /**
     * 所有学校专业
     * @return
     */
    public List<MallLinkMajorSchool> selectAllList();

    /**
     * 所有学校专业录取数据
     * @return
     */
    public List<MallSchoolAccept> selectAllAccept();

    /**
     * 学校专业数据导出
     */
    public List<SchoolMajorLinkBO> getAllSchoolAndMajorList();

    /**
     * 批量插入
     * @param list
     * @return
     */
    public int batchInsert(@Param("list")List<MallLinkMajorSchool> list);

    /**
     * 批量修改
     * @param list
     * @return
     */
    public int batchUpdate(@Param("list")List<MallLinkMajorSchool> list);

}
