package com.dxhy.jxpt.baseService.sign.service.invoicequery;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dxhy.api.model.config.UserInfo;
import com.dxhy.common.service.MpBaseService;
import com.dxhy.api.model.invoice.invoiceCheck.TDxCheckLog;

import java.io.File;
import java.util.List;
import java.util.Map;

/**
 *
 * 查验业务处理接口
 *
 * @author peipei.li
 * @date 2019-05-09
 */
public interface SignInvoiceQueryService extends MpBaseService<TDxCheckLog> {

    /**
     * 电票上传查验
     * 
     * @param pdffiles
     * @param ofdfiles
     * @param xmlFile
     * @param userInfo
     * @param pdfFileName
     * @param tempPath
     * @param saveHistory
     * @param taxNo
     * @return
     * @throws Exception
     */
    JSONObject saveUploadElecFile(List<File> pdffiles, List<File> ofdfiles, List<File> xmlFile, UserInfo userInfo, String pdfFileName,
                                  String tempPath, String saveHistory, String taxNo) throws Exception;

    /**
     * 扫码查验发票信息
     *
     * @param pramsMap
     *            请求参数
     * @return 返回结果 @ 异常
     * @since 1.0
     */
    String smQueryInvoice(Map<String, String> pramsMap);

    /**
     * 根据发票代码、发票号码查询发票明细
     *
     * @param invoiceCode
     *            发票代码
     * @param invoiceNo
     *            发票号码
     * @param dbName
     *            数据源
     * @return 返回结果 @ 异常
     * @since 1.0
     */
    String getFpmx(String invoiceCode, String invoiceNo, String dbName);

    /**
     * 扫描仪查验接口
     *
     * @param pramsMap
     *            请求参数
     * @param saveHistory
     *            保存标志
     * @param userInfo
     *            用户信息
     * @return 返回结果 @ 异常
     * @since 1.0
     */
    String smyQueryInvoice(Map<String, String> pramsMap, String saveHistory, UserInfo userInfo);

    /**
     * 修改-扫描仪查验接口
     *
     * @param pramsMap
     *            请求参数
     * @return 返回结果 @ 异常
     */
    Map<String,String> smyUpdateQueryInvoice(Map<String, String> pramsMap,UserInfo userInfo);

    /**
     * 校验excel导入信息
     *
     * @param detailArray
     *            发票信息
     * @param dbName
     *            数据源
     * @param userInfo
     *            用户信息
     * @return 返回结果
     * @since 1.0
     */
    String checkExcelFp(JSONArray detailArray, UserInfo userInfo, String dbName);

    /**
     * 把传入的请求列表转换为统一查验接口要求的形式
     *
     * @param detailArray
     *            发票信息
     * @param userId
     *            用户id
     * @param userName
     *            用户名
     * @param dbName
     *            数据源
     * @return 返回结果
     * @since 1.0
     */
    List<Map<String, String>> convertExcelFp(JSONArray detailArray, String userId, String userName, String dbName);

    /**
     * 逐条查验发票
     *
     * @param detailList
     *            发票信息
     * @param saveHistory
     *            保存标志
     * @param company
     *            公司代码
     * @param taxNo
     *            税号
     * @param menuId
     *            菜单id
     * @return 返回结果 @ 异常
     * @since 1.0
     */
    String cyExcelfp(List<Map<String, String>> detailList, String saveHistory, String company, String taxNo,
        String menuId);

    /**
     * 查询查验历史记录
     *
     * @param pramsMap
     *            请求参数
     * @param size
     *            大小
     * @param curr
     *            页码
     * @return 返回结果 @ 异常
     * @since 1.0
     */
    String getCheckHistory(Map<String, String> pramsMap, int curr, int size);

    /**
     * 删除查验历史记录
     *
     * @param pramsMap
     *            请求参数
     * @since 1.0
     */
    void delCheckHistory(Map<String, String> pramsMap);

    /**
     * 查验历史统计
     *
     * @param pramsMap
     *            请求参数
     * @return 返回结果 @ 异常
     * @since 1.0
     */
    String checkHistoryStatistics(Map<String, String> pramsMap);

    /**
     * 查询查验历史-历史记录
     *
     * @param pramsMap
     *            请求参数
     * @return 返回结果 @ 异常
     */
    String getCheckHistoryDetail(Map<String, String> pramsMap);

    /**
     * 检查发票是否可以查验
     *
     * @param dbName
     *            数据源
     * @param uuid
     *            uuid
     * @param userInfo
     *            用户信息
     * @return 返回结果
     */
    Map<String,Object> checkingInvoiceInfo(String dbName, String uuid, UserInfo userInfo);

    /**
     * 查验综合查询
     *
     * @param pramsMap
     *            请求参数
     * @param size
     *            大小
     * @param curr
     *            页码
     * @return 返回结果 @ 异常
     * @since 1.0
     */
    String getCheckList(Map<String, Object> pramsMap, int curr, int size);

}
