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

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.TDxRecordInvoice;
import com.dxhy.api.model.sign.TDxRecordInvoiceStatistics;

import java.text.ParseException;
import java.util.List;
import java.util.Map;

/**
 *
 * 发票签收业务处理接口
 *
 * @author peipei.li
 * @date 2019-05-09
 */
public interface SignFpqsService extends MpBaseService<TDxRecordInvoice> {

    /**
     * 查询未签收发票
     *
     * @param pramsMap
     *            查询参数集合
     * @param curr
     *            当前页数
     * @param size
     *            每页多少条
     * @return 返回结果
     *
     *
     */
    String selectWqsfp(Map<String, Object> pramsMap, int curr, int size);

    /**
     * 签收未签收的发票
     *
     * @param detailArray
     *            记录id数组
     * @param pramsMap
     *            请求参数
     * @return 返回结果
     *
     */
    String qsWqsfp(JSONArray detailArray, Map<String, String> pramsMap, UserInfo userInfo) throws ParseException;

    /**
     * 扫码签收签收发票
     *
     * @param pramsMap
     *            请求参数
     * @return 返回结果
     *
     *
     */
    String smqsQsfp(Map<String, String> pramsMap,UserInfo userInfo);

    /**
     * 删除签收记录
     *
     * @param pramsMap
     *            请求参数
     *
     */
    void delQsjl(Map<String, String> pramsMap);

    /**
     *
     * 扫码仪签收签收发票
     *
     * @param pramsMap
     *            请求参数
     * @return 返回结果
     *
     *
     */
    String smyqsQsfp(Map<String, String> pramsMap,UserInfo userInfo);

    /**
     * 更新扫描记录表
     *
     * @param pramsMap
     *            请求参数
     *
     * @ 异常
     * @return 返回结果
     */
    String updateQsjl(Map<String, String> pramsMap,UserInfo userInfo);

    /**
     * 签收excel导入的发票
     *
     * @param detailArray
     *            请求参数
     * @param pramsMap
     *            请求参数
     *
     * @return 返回结果
     */
    String qsExcelfp(JSONArray detailArray, Map<String, String> pramsMap,UserInfo userInfo);

    /**
     * 校验excel导入发票信息是否正确
     *
     * @param detailArray
     *            导入的发票信息列表
     * @return 返回结果
     *
     */
    String checkExcelFp(JSONArray detailArray);

    /**
     * 查询发票签收记录
     *
     * @param pramsMap
     *            请求参数
     * @param curr
     *            页码
     * @param size
     *            大小
     * @return 返回结果
     *
     *
     */
    String selectQsfpList(Map<String, Object> pramsMap, int curr, int size);

    /**
     * 对签收失败的发票进行二次签收
     *
     * @param pramsMap
     *            请求参数
     *
     *
     * @return 返回结果
     */
    String ecQsfp(Map<String, String> pramsMap,UserInfo userInfo);

    /**
     * 查询记录是否合法，并返沪错误信息
     *
     * @param pramsMap
     *            请求参数
     * @return 返回结果
     *
     */
    String requestValidate(Map<String, String> pramsMap);

    /**
     * 获取发票的全票面信息
     *
     * @param pramsMap
     *            请求参数
     * @return 返回结果
     *
     *
     */
    String getInvoiceInfo(Map<String, String> pramsMap);

    /**
     * 取消已签收的记录
     *
     * @param pramsMap
     *            请求参数
     * @return 返回结果
     *
     */
    String yqsxxCancle(Map<String, String> pramsMap);

    /**
     * 获取认证状态
     *
     * @param pramsMap
     *            请求参数
     * @return 返回结果
     *
     */
    boolean getRzhYesNo(Map<String, String> pramsMap);

    /**
     * 批量变更业务单元
     *
     * @param pramsMap
     *            请求参数
     * @return 返回结果
     *
     */
    String yqsxxChangeBusiness(Map<String, String> pramsMap);

    /**
     * 批量添加备注
     *
     * @param pramsMap
     *            请求参数
     * @return 返回结果
     *
     */
    String yqsxxAddRemark(Map<String, String> pramsMap);

    /**
     * 获取底账信息
     *
     * @param pramsMap
     *            请求参数
     * @return 返回结果
     *
     */
    String getRecord(Map<String, String> pramsMap);

    /**
     * 批量删除
     *
     * @param pramsMap
     *            请求参数
     *
     *
     * @return 返回结果
     */
    String batchDel(Map<String, String> pramsMap);

    /**
     * 查询扫描删除记录
     *
     * @param pramsMap
     *            请求参数
     * @param curr
     *            页码
     * @param size
     *            大小
     * @return 返回结果
     *
     *
     */
    String selectDelfpList(Map<String, Object> pramsMap, int curr, int size);

    /**
     * 强制签收
     *
     * @param pramsMap
     *            请求参数
     * @return 返回结果 @ 异常
     */
    String forceSign(Map<String, String> pramsMap);

    /**
     * 每日优鲜签收查询
     *
     * @param pramsMap
     *            请求参数
     * @param curr
     *            页码
     * @param size
     *            大小
     * @return 返回结果
     *
     */
    String selectQsfpListMryx(Map<String, Object> pramsMap, int curr, int size);

    /**
     * 修改结算单号
     *
     * @param pramsMap
     *            请求参数
     * @return 返回结果
     */
    String saveSettle(Map<String, Object> pramsMap);

    /**
     * 取消关联
     *
     * @param pramsMap
     *            请求参数
     * @return 返回结果
     */
    String cancelRelate(Map<String, String> pramsMap);

    /**
     * 转移签收人
     *
     * @param pramsMap
     *            请求参数
     * @return 返回结果
     */
    String transfer(Map<String, Object> pramsMap);

    /**
     * 获取当前机构用户
     *
     * @param pramsMap
     *            请求参数
     * @return 返回结果
     */
    String getUser(Map<String, String> pramsMap);

    /**
     * 税率统计信息
     *
     * @param queryInvoiceResult
     *            发票信息
     * @return 税率统计信息
     */
    List<TDxRecordInvoiceStatistics> buildRecordInvoiceStatisticsList(JSONObject queryInvoiceResult);
}
