package com.qmth.teachcloud.common.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qmth.teachcloud.common.bean.dto.TaskPrintClassDto;
import com.qmth.teachcloud.common.bean.params.BasicStudentParams;
import com.qmth.teachcloud.common.bean.result.BasicStudentResult;
import com.qmth.teachcloud.common.entity.BasicStudent;
import com.qmth.teachcloud.common.entity.SysUser;
import org.springframework.util.LinkedMultiValueMap;

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

/**
 * <p>
 * 学校id 服务类
 * </p>
 *
 * @author wangliang
 * @since 2021-08-02
 */
public interface BasicStudentService extends IService<BasicStudent> {

    IPage<BasicStudent> listPage(Page<BasicStudent> page, String classId);

    List<TaskPrintClassDto> listByClass(Long schoolId, Set<String> stringList);

    /**
     * 学生基础信息分页查询
     *
     * @param queryParams 查询参数（学生学号或姓名）
     * @param campusId    校区主键
     * @param collegeId   校区主键
     * @param majorId     专业主键
     * @param clazzIdList 班级主键集合
     * @param pageNumber  分页页码
     * @param pageSize    分页容量
     * @return 分页结果
     */
    IPage<BasicStudentResult> basicStudentPage(String queryParams, Long campusId, Long collegeId, Long majorId, Set<Long> clazzIdList, int pageNumber, int pageSize);

    /**
     * 新增/编辑 学生基础信息
     *
     * @param basicStudentParams 基础学生信息参数
     * @param requestUser        新增或编辑的校区id
     * @return
     */
    Long saveBasicStudent(BasicStudentParams basicStudentParams, SysUser requestUser);

    /**
     * 批量新增或更新基础学生信息
     *
     * @param basicStudentParamsList 学生参数集合
     * @param requestUser            请求人
     */
    void saveOrUpdateBasicStudentBatch(List<BasicStudentParams> basicStudentParamsList, SysUser requestUser);

    /**
     * 批量删除学生基本信息（逻辑）
     *
     * @param idList 要删除的学生主键集合
     * @return 是否删除成功
     */
    Boolean removeBasicStudentBatch(List<Long> idList);

    /**
     * 根据条件删除基础学生信息
     * @param queryParams 学生参数（学号或姓名）
     * @param campusId 校区主键
     * @param collegeId 学院主键
     * @param majorId 专业主键
     * @param clazzIdList 班级主键集合
     * @return 是否删除成功
     */
    Boolean removeBasicStudentByCondition(String queryParams, Long campusId, Long collegeId, Long majorId, Set<Long> clazzIdList);

    /**
     * 执行批量导入学生逻辑
     *
     * @param finalList 基础学生数据集合
     * @param map       参数
     * @return 结果
     */
    Map<String, Object> executeBasicStudentImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList, Map<String, Object> map) throws IllegalAccessException;
}
