package com.engine.htsc.payment.service;

import com.engine.htsc.payment.pojo.*;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;


public interface PaymentService {

  /**
   * 校验流程编号
   * @param lcbh 流程编号
   * @param type 类型
   * @param unNumber 流程唯一标识
   * @return 重复则返回新的流程编号
   */
  String checkRequestMark(String lcbh, String type, String unNumber) throws Exception;

  /**
   * 预算控制
   * @param bgRd 入参
   * @return 返回对应金额和编码
   */
  Map<String, String> controlBudget(BudgetReqDto bgRd) throws Exception;

  /**
   * 获取汇率信息
   * @return 汇率对应关系
   */
  Map<String, String> queryExchangeRate() throws Exception;

  /**
   * 查询已付金额
   * @param contractCode 合同编号
   * @param processCode 合同流程编号
   * @return 合同金额
   */
  String queryContractPaidMoney(String contractCode, String processCode) throws Exception;

  /**
   * 出纳付款-预算按钮
   *
   * @param ids 多个 ,分割
   * @param isDiscard 是否废弃 0 标识废弃 1或其他 实占
   * @return 消息
   */
  Map<String, String> doBudget(String ids, String isDiscard);

  /**
   * 更新导出状态
   * @param id id编号,多个
   * @param type 类型 传0或空为总部;传1为联合;
   * @return 更新是否成功
   */
  String doExport(String id, String type);

  /**
   * 更新手动付款状态
   * @param id id编码 可以多个状态
   * @return 更新是否成功
   */
  String updateManualPaymentStatus(String id);

  /**
   * 查询虚拟部门个数
   * @param deptId 部门id
   * @return 返回虚拟部门个数
   */
  String queryVirtualDepartment(String deptId);

  /**
   * 查询合同信息，带分页
   * @return string
   */
  ContractInfoVo queryContractPagination(ContractRequestParam param);

  /**
   * 查询it项目信息，带分页
   * @param condition dto
   * @return it项目列表
   */
  ItProjectVo queryItProject(ItProjectQueryCondition condition) throws Exception;

  /**
   * 预算科目对应会计科目信息
   * 总部通用付款：会计节点
   * 付款明细预算科目带出会计科目会计科目
   * @param budgetCode 付款明细预算科目code
   * @return ec浏览按钮
   */
  String getAccountCode(String budgetCode);

  /**
   * 同上, {@link #getAccountCode(String)}
   * 联合适配
   */
  String getAccountCode4Lh(String budgetCode);

  /**
   * 同上, {@link #getAccountCode(String)}
   * 香港适配
   */
  String getAccountCode4HK(String budgetCode);

  /**
   * 生产流程编号
   * @param request http请求
   * @return requestMark
   */
  String generateRequestMark(HttpServletRequest request);

  /**
   * 预算
   * @param requestId 流程编号
   * @param tableName 流程表名
   * @return 更新信息
   * @throws Exception 异常
   */
  String doBudgetAccount(String requestId, String tableName, String billStatus) throws Exception;

  /**
   * it预算
   * @return 更新it预算信息
   * @throws Exception 异常
   */
  String doITBudgetAccount(String requestId, String tableName, String billStatus) throws Exception;

  /**
   * 核算
   * @param ids 建模流程号id
   * @return 更新信息
   */
  List<Map<String, String>> doCostAccount(String ids) throws Exception;

  /**
   * 付款
   * @param ids 建模流程号id
   * @return 更新信息
   * @throws Exception 异常
   */
  List<Map<String, String>> doPayment(String ids) throws Exception;

  /**
   * 发票记录
   * @param fphm 发票号码
   * @param fpdm 发票代码
   * @return map
   * @throws Exception 异常
   */
  Map<String, String> queryInvoiceOnce(String fphm, String fpdm) throws Exception;

  /**
   * 资金,付款历史
   * @param bankAccount 银行账户
   * @param payeeDept 付款单位
   * @param bankName 开户行
   * @param city 省市
   * @return map
   * @throws Exception ero
   */
  Map<String, String> queryHistoryPayRecord(String bankAccount, String payeeDept, String bankName, String city) throws Exception;

  /**
   * 提交时校验银行账户
   * @param dtData 明细11数据
   * @return string
   */
  String queryHistoryPayRecordWithSubmit(Map<String, List<String>> dtData) throws Exception;

  Map<String,Object> upMainFKZT(Map<String,Object> params);
}
