package com.ruoyi.mall.service;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageInfo;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.mall.domain.Bo.CheckingOutParamBo;
import com.ruoyi.mall.domain.Bo.MatchSchoolBO;
import com.ruoyi.mall.domain.MallSchool;
import com.ruoyi.mall.domain.MallSchoolBatchLink;
import com.ruoyi.mall.domain.Vo.*;
import org.apache.ibatis.annotations.Param;

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

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

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

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

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

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

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

    /**
     * 学校列表
     * @param schoolName 学校名称
     * @param batchId 批次id
     * @param configLevelId 层次id
     * @param configTypeId 学校类型id
     * @param provinceId 省份id
     * @param cityId 城市id
     * @param pageNum 页码
     * @param pageSize 每页个数
     * @return 结果
     */
    public PageInfo<SchoolVO> selectSchoolList(String schoolName,
                                                Long batchId,
                                                Long configLevelId,
                                                Long configTypeId,
                                                Long provinceId,
                                                Long cityId ,
                                                Integer pageNum,
                                               Integer pageSize);

    /**
     * 学校列表
     * @param schoolName 学校名称
     * @param batchId 批次id
     * @param configLevelId 层次id
     * @param configTypeId 学校类型id
     * @param provinceId 省份id
     * @param cityId 城市id
     * @param pageNum 页码
     * @param pageSize 每页个数
     * @return 结果
     */
    public AjaxResult selectMatchSchoolList(String schoolName,
                                               Long batchId,
                                               Long configLevelId,
                                               Long configTypeId,
                                               Long provinceId,
                                               Long cityId ,
                                               Long id,
                                               Integer pageNum,
                                               Integer pageSize);

    /**
     * 学校详情
     * @param schoolId 学校id

     * @return 结果
     */
    public SchoolVO selectSchoolDetail(Long id, Long schoolId, Long batchId);

    /**
     * 学校风景
     * @param schoolId 学校id
     * @param pageNum 页码
     * @param pageSize 每页个数
     * @return 结果
     */
    public PageInfo<SchoolSceneryVO> selectSchoolSceneryList(Long schoolId, Integer pageNum, Integer pageSize);

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

    /**
     * 学校录取数据

     * @param schoolId 学校id
     * @param batchId 批次id
     * @param id 用户id
     * @return 结果
     */
    public AjaxResult selectSchoolRecord( Long schoolId, Long batchId, Long id);

    /**
     * 我的综合分
     * @param id
     * @return
     */
    public Map<String, Object> myTotalScore(Long schoolId, Long batchId, Long id);

    /**
     * 院校录取详情
     * @param schoolAcceptRecordId 数据id
     * @return 结果
     */
    public AjaxResult selectSchoolRecordDetail( Long schoolAcceptRecordId);

    /**
     * 学校专业评估列表
     * @param schoolId 学校id
     * @return 结果
     */
    public List<SchoolAppraiseVO> selectSchoolAppraiseList(Long schoolId);

    /**
     * 学校招生简章
     * @param schoolId 学校id
     * @return 结果
     */
    public AjaxResult schoolAboutInfo(Long schoolId, Long batchId, Long id);

    /**
     * 三个层次学校
     * @param configLevelId
     * @param batchId
     * @return
     */
    public AjaxResult selectSchoolListByLevel(Long configLevelId, Long batchId, Long schoolId, Long id);

    /**
     * 层级院校列表
     * @param configLevelId
     * @param batchId
     * @return
     */
    public PageInfo<SchoolVO> selectSchoolListByLevelId(Long configLevelId, Long batchId, Long schoolId, Long id, Integer pageNum, Integer pageSize);

    /**
     * 联考成绩分析
     * @param schoolId 学校id
     * @param batchId 批次id
     * @param id 用户id
     * @param pageNum 页码
     * @param pageSize 每页个数
     * @return 结果
     */
    public AjaxResult selectUnionTestAnalysisList(Long schoolId, Long batchId, Long id, Integer pageNum, Integer pageSize);

    /**
     * 综合成绩分析
     * @param schoolId 学校id
     * @param batchId 批次id
     * @param id 用户id
     * @param pageNum 页码
     * @param pageSize 每页个数
     * @return 结果
     */
    public AjaxResult selectUserScoreAnalysisList(Long schoolId,  Long batchId, Long id, Integer pageNum, Integer pageSize);

    /**
     * 只能匹配大学
     * @param matchSchoolBO 匹配参数
     * @return 结果
     */
    public AjaxResult matchSchoolList(MatchSchoolBO matchSchoolBO);


    /**
     * 查看匹配类型学校列表
     * @param rateType 类型(0-可冒险,1-搏一搏,2-较稳妥,3-可保底)
     * @param id 用户id
     * @param batchId 批次id
     * @param cultureScore 文化分
     * @param majorScore 文化分
     * @return 结果
     */
    public List<SchoolVO> matchSchoolListByType(Integer rateType, Long id,  Long batchId,
                                                Integer cultureScore, Integer majorScore,
                                                Integer pageNum, Integer pageSize, Integer subjectId);

    /**
     * 升序规划-
     * @param rateType 类型
     * @param id 用户id
     * @param batchId 批次id
     * @param pageNum 页码
     * @param pageSize 每页个数
     * @return 结果
     */
    public AjaxResult enterPlanSchoolListByType(Integer rateType, Long id,  Long batchId, String schoolName, Long majorId, Integer pageNum, Integer pageSize);

    /**
     * 升学规划=目标学校
     * @param id id
     * @param batchId 批次id
     * @param schoolName 学校名称
     * @param majorId 专业id
     * @return 结果
     */
    public PageInfo<SchoolVO> enterPlanTargetList(Long id, Long batchId, String schoolName, Long majorId, Integer pageNum, Integer pageSize);

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

    /**志愿自主选择 获取学校信息*/
    List<SchoolMajorVO> schoolListInfoForReport(List<Long> sIds);

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

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

    /**
     * 修改学校重复数据
     * @param schoolId 保留的学校ID
     * @param deleteSchoolId 删除的学校ID
     * @param schoolName 学校名
     * @return 结果
     */
    public AjaxResult updateSchoolDuplicateData(Long schoolId, Long deleteSchoolId, String schoolName);

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

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

    /**
     * 新增系统学校用户
     *
     * @param mallSchool 学校
     * @return 结果
     */
    public AjaxResult submitSchoolUser(MallSchool mallSchool);

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

}
