package com.yunyan.business.service;

import java.io.IOException;
import java.util.List;

import com.yunyan.business.document.y22.pojo.finalExcelY22.ExcelDeptInfoVo;
import com.yunyan.business.document.y23.budget.pojo.budgetY23.update.UpdateBudgetP3Vo;
import com.yunyan.business.domain.FinalData;
import com.baomidou.mybatisplus.extension.service.IService;

import com.yunyan.business.pojo.admin.dto.*;
import com.yunyan.business.pojo.admin.vo.*;
import com.yunyan.common.core.domain.AjaxResultVo;
import org.springframework.transaction.annotation.Transactional;

import javax.servlet.http.HttpServletResponse;

/**
 * 报告数据Service接口
 *
 * @author yunyan
 * @date 2023-07-27
 */
public interface IFinalDataService extends IService<FinalData>
{

    /**
     * 查询报告数据列表
     *
     * @param finalData 报告数据
     * @return 报告数据集合
     */
    public List<FinalDataListVo> selectFinalDataList(FinalDataListDto dto);

    /**
     * 导出报告数据列表
     * @param dto
     * @return
     */
    public List<FinalDataExportListVo> selectFinalDataExportList(FinalDataListDto dto);

    /**
     * 查询  公开网址的 导出 excel
     * @param dto
     * @return
     */
    public List<FinalDataPublicSiteListVo> selectFinalDataPublicSiteList(FinalDataListDto dto);

    /**
    * 新增
    * @param
    * @return
    */
    AjaxResultVo add(FinalData dto);

    /**
     * 编辑
     * @param
     * @return
     */
    AjaxResultVo edit(FinalData dto);

    /**
     * 详情
     * @param id
     * @return
     */
    AjaxResultVo info(Long id);
    /**
     *
     *申请审核报告数据
     * @author loovi
     * @date
     */
    public AjaxResultVo applyAuditFinalData(Long id);
    /**
    *审核决算
    *
    * @author loovi
    * @date
    */
    public AjaxResultVo auditFinalData(FinalAuditDto dto);

    /**
     * 状态 的批量变更
     * @param dto
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public AjaxResultVo auditBatchFinalData(FinalAuditBatchDto dto);

    /**
    *网站填报
    *
    * @author loovi
    * @date
    */
    public AjaxResultVo websiteFill(WebsiteFillDto websiteFillDto);
    /**
    *远程PDF与本地PDF文件比较
    *
    * @author loovi
    * @date
    */
    public AjaxResultVo PDFComparator(Long id) throws IOException;
    /**
     * 读取 上传的 excel数据文件
     * @param
     * @return
     */
    AjaxResultVo finalImportExcel( FinalImportExcelDto dto);

    /**
     * 预决算生成PDF
     * @param id
     * @return
     */
    AjaxResultVo<FinalDataGeneratePDFVo> generatePDF(Long id);

    AjaxResultVo getTableInfo(Long id);

    AjaxResultVo getBudgetInfo(Long id);

    /**
     * 名词解释的保存
     * @param dto
     * @return
     */
    AjaxResultVo termEdit(TermEditDto dto);

    /**
     * 决算情况的说明修改
     * @param dto
     * @return
     */
    AjaxResultVo changeOverview(FinalDataTableDto dto);

    AjaxResultVo changeOverviewBudget(BudgetDataEditDto dto);
    AjaxResultVo changeOverviewBudgetAuditText(BudgetDataEditDto dto);

    /**
     * 检测 网址的访问性
     * @param dto
     * @return
     */
    AjaxResultVo checkUrl(CheckUrlDto dto);

    /**
     * 报告导出
     * @param id
     * @return
     */
    AjaxResultVo<FinalDataDownloadFileVo> exportReport(Long id);

    /**
     * 查询excel里的部门的人数信息
     * @param deptId
     * @return
     */
    AjaxResultVo<ExcelDeptInfoVo> finalDataService(Long deptId);

    /**
     * 导出 选择的 报告
     * @param response
     * @param dto
     * @return
     */
    void selectExportZip(HttpServletResponse response, FinalDataSelectExportDto dto);

    /**
     * 导出 区域 全部的报告
     * @param response
     * @param dto
     */
    void exportZip(HttpServletResponse response, FinalDataExportDto dto);

    /**
     * 保存新增/修改 报告列表 以及对应的 表格,情况说明数据
     * @param finalData
     * @param jsonTableContent
     * @return
     */
    boolean saveFinalDataAndReportExplain(FinalData finalData, String jsonTableContent, Long reportExplainId);

    AjaxResultVo infositeFill(InfositeFillDto dto);

    /**
     * 检测 区域的公开网址的状态
     * @param dto
     * @return
     */
    AjaxResultVo checkWebsiteFillStatue(FinalDataListDto dto);

    /**
     * 获取 单位的最后一个填报 id
     * @param deptId
     * @return
     */
    Long getLastFillReportId(Long deptId, Integer year);

}
