package cn.superdesk.uniorder.service.thirdpart.qchjc.account;

import cn.superdesk.uniorder.common.rest.response.R;
import cn.superdesk.uniorder.dao.entity.accounting.score.customer.AccountingScoreCustomer;
import cn.superdesk.uniorder.dao.entity.thirdpart.qchjc.accounting.QchjcAccountingScoreCustomerEntity;
import cn.superdesk.uniorder.dto.param.accounting.qchjc.QchjcCustomerAccountingListRequest;
import cn.superdesk.uniorder.dto.param.thirdpart.qchjc.accounting.QchjcCustomerStorageParam;
import cn.superdesk.uniorder.dto.param.thirdpart.qchjc.api.customer.QchjcCustomerCancelStatementParam;
import cn.superdesk.uniorder.dto.param.thirdpart.qchjc.api.customer.QchjcCustomerMakeInvoiceStatusParam;
import cn.superdesk.uniorder.dto.param.thirdpart.qchjc.api.customer.QchjcCustomerReceivePaymentStatusParam;
import cn.superdesk.uniorder.dto.vo._function.select.SelectOptionVirt;
import cn.superdesk.uniorder.dto.vo.thirdpart.qchjc.accounting.QchjcCustomerStatementVo;
import cn.superdesk.uniorder.service.base.BaseService;

import java.util.List;

/**
 * @author xc
 * @description
 * @date 2022/4/1 11:43
 */
public interface QchjcCustomerStatementService extends BaseService<QchjcAccountingScoreCustomerEntity> {
    void receive(String data);

    List<QchjcCustomerStatementVo> getTodoList();

    QchjcCustomerStatementVo getTodoList(Long id);

    QchjcAccountingScoreCustomerEntity selectByAccountingOrderSn(String accountingOrderSn);

    QchjcAccountingScoreCustomerEntity selectByPrimaryKey(Long id);

    QchjcCustomerStorageParam doSaveDetail(Long vo);

    void syncStatus(String toJSONString);

    /**
     * 采购单位开票状态同步
     *
     * @param param
     * @return
     */
    void makeInvoiceStatusSync(QchjcCustomerMakeInvoiceStatusParam param);

    /**
     * 采购单位收款状态同步
     *
     * @param param
     * @return
     */
    void receivePaymentStatusSync(QchjcCustomerReceivePaymentStatusParam param);

    /**
     * 采购单位对账单作废接口
     *
     * @param param
     * @return
     */
    void statementCancelSync(QchjcCustomerCancelStatementParam param);

    R<List<QchjcCustomerStatementVo>> queryQchjcCustomerStatementList(QchjcCustomerAccountingListRequest request);

    R<String> updateRemark(Long id, String remark, String token);

    R<QchjcCustomerStatementVo> queryQchjcCustomerStatementVoById(Long id);

    List<Long> getTodoIdList();

    void putInvoiceApplyIntoStorage(Long id, AccountingScoreCustomer scoreAccountingCustomer);

    void recordFailLog(QchjcAccountingScoreCustomerEntity qchjcAccountingScoreCustomerEntity, String toJSONString);

    R<List<SelectOptionVirt>> queryCustomerList();
}
