package com.sunda.spmsorder.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sunda.spmscommon.ResponseResult;
import com.sunda.spmsorder.entity.MaterialApplication;
import com.sunda.spmsorder.entity.MaterialApplicationDtl;
import com.sunda.spmsorder.entity.OrderWerks;
import com.sunda.spmsorder.entity.ShoppingScenario;
import com.sunda.spmsorder.entity.vo.MaterialApplicationQueryResultVo;
import com.sunda.spmsorder.entity.vo.MaterialApplicationQueryVo;
import org.springframework.web.multipart.MultipartFile;

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

/**
 * <p>
 * 文件操作 服务类
 * </p>
 *
 * @author Wayne
 * @since 2021-05-21
 */
public interface IFileOperationService {

    /**
     * 保存物料申请信息到本地Excel文件
     * @param materialApplication
     * @param materialApplicationDtlList
     * @param filename
     * @return
     */
    String saveMaterialApplicationExcel(MaterialApplication materialApplication, List<MaterialApplicationDtl> materialApplicationDtlList, String filename);

    /**
     * 保存请购单信息到本地Excel文件
     * @param orderWerks
     * @param orderWerksDtlArr
     * @param filename
     * @return
     */
    String saveOrderWerksExcel(OrderWerks orderWerks, List<Map<String, Object>> orderWerksDtlArr, String filename);

    /**
     * 保存领用单分析报表到本地Excel文件
     * @param dtl
     * @param filename
     * @return
     */
    String saveOverseaRequisitionExcel(List<Map<String, Object>> dtl, String filename);

    public String saveOverseaDeliveryNoteExcel(List<Map<String, Object>> dtl, String filename);

	String saveShoppingScenarioExcel(ShoppingScenario head, List<Map<String, Object>> dtl, String filename);

	String exportWhsDeskAccount(List<Map<String, Object>> dtl, String filename);

    /**
     * 保存物料图片信息到本地
     * @param file
     * @return 本地缓存路径
     */
    String saveMaterialApplicationPic(MultipartFile file, String filename);

        /**
         * 使用MinIO上传文件
         * @return
         */
    String fileUploader(String filename, String localFilePath);
    
    /**
     * 保存发送SAP失败的单据报表到本地Excel文件
     * @param dtl
     * @param filename
     * @return
     */
    String saveSendSapFailedExcel(List<Map<String, Object>> dtl, String filename);
    
    /**
     * 物料图片覆盖报表导出EXCEL文件
     * @param materialPhotosList
     * @param filename
     * @return
     */
	String saveMaterialPhotosExcel(ResponseResult materialPhotosList, String filename);
	
	/**
	 * SPMS与SAP库存差异报表导出excel
	 * @param materialStockQtyDifferList
	 * @param filename
	 * @return
	 */
	String saveMaterialStockQtyDifferExcel(ResponseResult materialStockQtyDifferList, String filename);
	
	/**
	 * 国内仓导出SPMS与SAP库存差异报表
	 * @param materialStockQtyDifferList
	 * @param filename
	 * @return
	 */
	String saveWhsMaterialStockQtyDifferExcel(ResponseResult materialStockQtyDifferList, String filename);
	
	/**
	 * 国内仓库存明细报表导出EXCEL
	 * @param whsStockList
	 * @param filename
	 * @return
	 */
	String saveWhsStockQtyExcel(ResponseResult whsStockList, String filename);
	
	/**
	 * 国内仓箱码信息导出EXCEL
	 * @param boxInfoList
	 * @param filename
	 * @return
	 */
	String saveWhsBoxInfoExcel(ResponseResult boxInfoList, String filename);

	String saveIntransitDataExcel(ResponseResult materialStockQtyDifferList, String filename);
	
	/**
	 * 工资计件报表导出EXCEL
	 * @param sapDeliveryNoteAndOtherTask
	 * @param filename
	 * @return
	 */
	String saveSapDeliveryNoteAndOtherTaskExcel(ResponseResult sapDeliveryNoteAndOtherTask, String filename);
	
	/**
	 * 物料板位数导出excel
	 * @param materialDeliveryBoardsList
	 * @param filename
	 * @return
	 */
	String saveMaterialAndDeliveryBoardsExcel(ResponseResult materialDeliveryBoardsList, String filename);

	/**
	 * 全生命周期报表导出EXCEL
	 * @param dtl
	 * @param filename
	 * @return
	 */
	String saveOrderKeyDatesExcel(List<Map<String, Object>> dtl, String filename);


	String saveWhsOperateLogExcel(ResponseResult dtl, String filename);
	
	/**
	 * 导出对账报表EXCEL
	 * 
	 * @param reconciliationReport
	 * @param filename
	 * @return
	 */
	String saveReconciliationReportExcel(ResponseResult reconciliationReport, String filename);

	/**
	 * 导出海外仓转储单明细数据
	 *
	 * @param dtl
	 * @param filename
	 * @return
	 */
	String saveWhsDumpDtlsExcel(List<Map<String, Object>> dtl, String filename);
	
	/**
	 * 导出分批收货明细
	 * @param selectList
	 * @param filename
	 * @return
	 */
	String saveOverseaReceiptDtlExcel(List<Map<String, Object>> selectList, String filename);
	
	/**
	 * 导出发货效率统计报表
	 * @param dtl
	 * @param filename
	 * @return
	 */
	String saveDeliveryReportExcel(ResponseResult dtl, String filename);
	
	/**
	 * 导出发货效率统计指标数据
	 * @param dtl
	 * @param filename
	 * @return
	 */
	String saveDeliveryTargetReportExcel(ResponseResult dtl, String filename);
	
	/**
	 * 导出PDA覆盖率统计报表
	 * @param deliveryReportList
	 * @param filename
	 * @return
	 */
	String savePdaCoverageRateExcel(ResponseResult dtl, String filename);
	
	/**
	 * 导出PDA覆盖率统计指标数据
	 * @param deliveryReportList
	 * @param filename
	 * @return
	 */
	String savePdaCoverageRateTargetExcel(ResponseResult dtl, String filename);
	
	/**
	 * 导出收货效率统计报表
	 * @param deliveryReportList
	 * @param filename
	 * @return
	 */
	String saveReceivingGoodsReportExcel(ResponseResult dtl, String filename);
	
	/**
	 * 导出收货效率统计指标报表
	 * @param deliveryReportList
	 * @param filename
	 * @return
	 */
	String saveReceivingGoodsTargetReportExcel(ResponseResult dtl, String filename);
	
	/**
	 * 导出过账异常率统计报表
	 * @param deliveryReportList
	 * @param filename
	 * @return
	 */
	String saveAnomaliesRateExcel(List<Map<String, Object>> list, String filename);
	
	/**
	 * 导出过账异常率统计指标报表
	 * @param deliveryReportList
	 * @param filename
	 * @return
	 */
	String saveAnomaliesTargetExcel(List<Map<String, Object>> list, String filename);
	
	/**
	 * 导出在途超期统计报表
	 * @param onwayReportList
	 * @param filename
	 * @return
	 */
	String saveOnwayRateExcel(List<Map<String, Object>> list, String filename);
	
	/**
	 * 导出在途超期统计指标报表
	 * @param onwayTargetReportList
	 * @param filename
	 * @return
	 */
	String saveOnwayRateTargetExcel(List<Map<String, Object>> list, String filename);

}
