package com.yida.data.user.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.yida.data.common.core.common.ResultBean;
import com.yida.data.common.core.entity.CurrentUser;
import com.yida.data.common.core.entity.constant.FebsConstant;
import com.yida.data.common.core.entity.school.EduSchoolStudentInformation;
import com.yida.data.common.core.enums.ImportTemplateTypeEnum;
import com.yida.data.common.core.enums.ReportStatusEnum;
import com.yida.data.user.dto.CheckStudentInformationDTO;
import com.yida.data.user.vo.CheckStudentInformationReturnVO;
import com.yida.data.user.vo.EduSchoolStudentInformationVo;
import org.ehcache.impl.internal.concurrent.ConcurrentHashMap;
import org.springframework.scheduling.annotation.Async;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 学校智慧迎新-学生报到信息service层
 *
 * @author ZYJ
 * @date 2021/8/20
 */
public interface EduSchoolStudentInformationService extends IService<EduSchoolStudentInformation> {

    /**
     * 验证提交的学生信息
     *
     * @param checkStudentInformationDTO 保存学生信息请求类
     * @return com.yida.data.common.core.common.ResultBean<java.util.List < com.yida.data.school.vo.CheckStudentInformationReturnVO>>
     * @author ZYJ
     * @date 2021/8/19 19:47
     */
    ResultBean<List<CheckStudentInformationReturnVO>> checkStudentInformation(CheckStudentInformationDTO checkStudentInformationDTO);

    IPage<EduSchoolStudentInformationVo> listStudentInfo(Page page, Integer schoolId, Integer campusId, Integer sectionId,
                                                         Integer gradeId, Integer classId, String studentName,
                                                         String studentIdCard, Integer reportStatus);

    /**
     * 导入迎新学生数据
     *
     * @param file      导入的excel文件
     * @param schoolId  学校id
     * @param timestamp 时间戳
     * @return com.yida.data.common.core.common.ResultBean<org.ehcache.impl.internal.concurrent.ConcurrentHashMap < java.lang.Integer, java.lang.Object>>
     * @throws Exception 导入迎新学生数据抛出的异常
     * @author ZYJ
     * @date 2021/8/23 16:10
     */
    ResultBean<ConcurrentHashMap<Integer, Object>> importWelcomeStudentDataExcel(MultipartFile file, Long schoolId, long timestamp)
            throws Exception;

    /**
     * 根据查询条件导出迎新学生数据
     *
     * @param schoolId      学校id
     * @param campusId      学区id
     * @param sectionId     学段id
     * @param gradeId       年级id
     * @param classId       班级id
     * @param studentName   学生姓名
     * @param studentIdCard 学生身份证号码
     * @param reportStatus  报到状态 {@link ReportStatusEnum}
     * @param response      response返回类
     * @author ZYJ
     * @date 2021/8/24 10:55
     */
    void exportWelcomeStudentData(Integer schoolId, Integer campusId, Integer sectionId,
                                  Integer gradeId, Integer classId, String studentName,
                                  String studentIdCard, Integer reportStatus, HttpServletResponse response);

    /**
     * 下载智慧迎新相关导入模板
     *
     * @param type     模板类型 {@link ImportTemplateTypeEnum}
     * @param response response返回类
     * @throws Exception 导出模板异常信息
     * @author ZYJ
     * @date 2021/8/24 16:16
     */
    void downloadTemplate(Integer type, HttpServletResponse response) throws Exception;

    /**
     * 导入学生基础信息
     *
     * @param fileUrl     导入的excel文件地址
     * @param schoolId    学校id
     * @param currentUser 当前登录用户信息
     * @author ZYJ
     * @date 2021/8/24 17:16
     */
    @Async(FebsConstant.ASYNC_POOL)
    void importWelcomeInviteData(String fileUrl, Long schoolId, CurrentUser currentUser);

    void getDeptInfo(Long schoolId, String str);
}
