package com.persagy.dmp.file.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.persagy.dmp.common.lang.PsDate;
import com.persagy.dmp.file.model.FileInfo;
import com.persagy.dmp.file.model.FileMd5;
import com.persagy.dmp.file.model.FileRequestData;
import com.persagy.dmp.file.model.UploadMes;

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

/**
 * 文件管理接口
 * @author Charlie Yu
 */
public interface IFileService extends IService<FileInfo> {

    /**
     * 保存
     * @param vo:文件信息
     */
    FileInfo insertFile(FileInfo vo);

    /**
     * 保存
     * @param vo:文件信息
     */
    FileInfo updateFile(FileInfo vo);

    /**
     * 批量保存
     * @param voList:文件信息列表
     */
    List<FileInfo> batchInsert(List<FileInfo> voList);

    /**
     * 删除
     * @param vo:文件信息
     */
    void deleteFile(FileInfo vo);

    /**
     * 通过id查询
     * @param id:文件信息id
     */
    FileInfo load(String id);

    /**
     * 通过业务ID查询
     * @param businessId:业务数据id
     */
    List<FileInfo> queryByBusinessId(String businessId);

    /***
     * Description: 初始化文件上传路径列表
     * @param requestData : 请求参数
     * @return : java.util.List<com.persagy.dmp.file.model.FileInfo>
     * @author : lijie
     * Update By lijie 2021/10/9 20:27
     */
    UploadMes initChunkUpload(FileRequestData requestData);
    /***
     * Description: 合并断点续传的文件
     * @param requestData : 请求参数
     * @return : com.persagy.dmp.file.model.FileInfo
     * @author : lijie
     * Update By lijie 2021/10/20 21:57
     */
    FileInfo composeFile(FileRequestData requestData);
    /***
     * Description: 单个文件上传
     * @param requestData : 请求参数
     * @return : com.persagy.dmp.file.domain.UploadMes
     * @author : lijie
     * Update By lijie 2021/10/22 19:29
     */
    UploadMes initSingleUpload(FileRequestData requestData);
    /***
     * Description: 根据Md5查询文件信息
     * @param fileMd5s : 文件md5值集合
     * @return : java.util.List<com.persagy.dmp.file.model.FileInfo>
     * @author : lijie
     * Update By lijie 2021/10/22 22:36
     */
    List<FileInfo> queryByFileMd5s(Set<String> fileMd5s);
    /***
     * Description: 初始化文件下载
     * @param requestData : 请求参数
     * @return : com.persagy.dmp.file.model.FileInfo
     * @author : lijie
     * Update By lijie 2021/10/23 13:18
     */
    FileInfo initFileDownload(FileRequestData requestData);
    /***
     * Description: 秒传逻辑
     * @param fileName : 文件名称
     * @param groupCode : 集团编码
     * @param businessId : 业务id
     * @param expireDate : 过期时间
     * @return : com.persagy.dmp.file.domain.FileView
     * @author : lijie
     * Update By lijie 2021/10/22 10:03
     */
    UploadMes secondTransmission(String fileName, String groupCode,
                                 String businessId, PsDate expireDate, String fileMd5, String fileId);
    /***
     * Description: 根据文件id批量查询预文件下载Url
     * @param fileIds : 文件id集合
     * @return : Map<String,String>
     * @author : lijie
     * Update By 2021/12/23 10:29
     */
    Map<String,String> queryFetchUrlsByFileIds(Set<String> fileIds);
}
