package com.yida.data.school.smart.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yida.data.common.core.entity.CurrentUser;
import com.yida.data.common.core.entity.constant.FebsConstant;
import com.yida.data.common.core.entity.smart.EduSmartWelcomeGuideRoster;
import com.yida.data.common.core.entity.smart.EduSmartWelcomeGuideRosterRelation;
import com.yida.data.common.core.file.common.DownloadFileChunk;
import com.yida.data.school.dto.smart.GuideFillInfoSaveDTO;
import com.yida.data.school.dto.smart.GuideRosterSelectPageDTO;
import com.yida.data.school.dto.smart.StaffPassStepDTO;
import com.yida.data.school.vo.smart.GuideRosterInfoVO;
import com.yida.data.school.vo.smart.StatisticsGuideRosterVO;
import org.springframework.scheduling.annotation.Async;

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

/**
 * 智慧迎新指南花名册表Service接口
 *
 * @author ZYJ
 * @date 2023-05-16 15:06:19
 */
public interface EduSmartWelcomeGuideRosterService extends IService<EduSmartWelcomeGuideRoster> {

    /**
     * 保存填报信息
     *
     * @param dto 保存迎新填报信息请求类
     * @author ZYJ
     * @date 2023/9/13 20:43
     */
    void saveGuideFillInfo(GuideFillInfoSaveDTO dto);

    /**
     * 删除花名册相关信息
     *
     * @param rosterId 花名册id
     * @author ZYJ
     * @date 2023/9/13 21:07
     */
    void deleteRosterInfo(Long rosterId);

    /**
     * 查询指南花名册列表
     *
     * @param dto 迎新指南花名册后台列表请求类
     * @return com.baomidou.mybatisplus.core.metadata.IPage<java.util.Map < java.lang.String, java.lang.String>>
     * @author ZYJ
     * @date 2023/5/24 11:05
     */
    IPage<Map<String, String>> listGuideRoster(GuideRosterSelectPageDTO dto);

    /**
     * 查询指南花名册统计信息
     *
     * @param guideId 指南id
     * @return java.util.List<com.yida.data.school.vo.smart.StatisticsGuideRosterVO>
     * @author ZYJ
     * @date 2023/8/28 16:27
     */
    List<StatisticsGuideRosterVO> statisticsGuideRoster(Long guideId);

    /**
     * 获取花名册详细信息
     *
     * @param rosterId 花名册id
     * @return com.yida.data.school.vo.smart.GuideRosterInfoVO
     * @author ZYJ
     * @date 2023/5/22 15:53
     */
    GuideRosterInfoVO getGuideRosterInfo(Long rosterId);

    /**
     * 导入指南花名册数据
     *
     * @param fileUrl     导入的excel文件地址
     * @param guideId     指南id
     * @param currentUser 当前登录用户信息
     * @author ZYJ
     * @date 2023/6/1 11:14
     */
    @Async(FebsConstant.ASYNC_POOL)
    void importGuideRoster(String fileUrl, Long guideId, CurrentUser currentUser, String uuid);

    /**
     * 下载指南花名册导入模板
     *
     * @param response HttpServletResponse
     * @author ZYJ
     * @date 2023/6/1 16:55
     */
    void downloadGuideTemplate(HttpServletResponse response);

    /**
     * 职工扫码后查询花名册人员详细信息
     *
     * @param rosterId 花名册id
     * @param staffId  职工id
     * @return com.yida.data.common.core.entity.smart.EduSmartWelcomeGuideRosterRelation
     * @author ZYJ
     * @date 2023/6/5 13:50
     */
    EduSmartWelcomeGuideRosterRelation getRosterInfo(Long rosterId, Long staffId);

    /**
     * 职工通过步骤
     *
     * @param dto 职工通过步骤请求类
     * @author ZYJ
     * @date 2023/6/5 13:57
     */
    void passStep(StaffPassStepDTO dto);

    /**
     * 导出花名册数据
     *
     * @param dto  迎新指南花名册后台列表请求类
     * @param uuid uuid
     * @author ZYJ
     * @date 2023/6/13 9:35
     */
    @Async
    void exportRosterInfoData(GuideRosterSelectPageDTO dto, String uuid);

    /**
     * 生成花名册二维码
     *
     * @param rosterId 花名册id
     * @param guideId  指南id
     * @author ZYJ
     * @date 2023/6/13 15:56
     */
    void createRosterQrCode(Long rosterId, Long guideId);

    /**
     * 花名册身份证和通知书
     *
     * @param guideId 指南id
     * @param key     当前操作标识
     * @author ZYJ
     * @date 2023/10/19 15:51
     */
    @Async
    void exportRosterPic(Long guideId, String key);

    /**
     * 查询导出进度
     *
     * @param key 导出唯一标识
     * @return java.lang.Object
     * @author ZYJ
     * @date 2023/12/12 14:05
     */
    Object getExportRosterPicInfo(String key);

    /**
     * 分片下载花名册身份证和通知书图片
     *
     * @param dto      分片下载请求类
     * @param response response返回流信息
     * @author ZYJ
     * @date 2023/10/19 16:38
     */
    void downloadRosterPicChunk(DownloadFileChunk dto, HttpServletResponse response);

}
