package org.dromara.payment.bill.service;

import org.dromara.payment.bill.domain.MerBillDetail;
import org.dromara.payment.bill.domain.vo.MerBillDetailVo;
import org.dromara.payment.bill.domain.bo.MerBillDetailBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.springframework.transaction.annotation.Transactional;

import java.util.Collection;
import java.util.List;

/**
 * 账单明细Service接口
 *
 * @author LionLi
 * @date 2024-04-08
 */
public interface IMerBillDetailService {

    /**
     * 查询账单明细
     */
    MerBillDetailVo queryById(Long id);

    /**
     * 查询账单明细列表
     */
    TableDataInfo<MerBillDetailVo> queryPageList(MerBillDetailBo bo, PageQuery pageQuery);

    /**
     * 查询账单明细列表
     */
    List<MerBillDetailVo> queryList(MerBillDetailBo bo);

    /**
     * 新增账单明细
     */
    Boolean insertByBo(MerBillDetailBo bo);

    /**
     * 修改账单明细
     */
    Boolean updateByBo(MerBillDetailBo bo);

    /**
     * 校验并批量删除账单明细信息
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 退账单明细
     * @author 张涛
     * @date 2022年3月3日
     * @param busNo 账单明细编号
     * @param trxamt 交易金额
     * @param reason 原因
     * @return 是否退账单明细
     */
    public boolean refundBillDetail(String busNo,Long trxamt,String reason);

    /**
     * 处理代发整体完成后的结果
     * @param billId
     */
    public void billResult(long billId);

    /**
     * 代发明细失败
     * @param billId 代发id
     * @param id 代发明细id
     * @param reason 失败原因
     * @param isRefund 是否退款（0:否 1:是）
     * @param isOut 是否三方代发
     */
    Boolean failBillDetail(long billId,Long id,String reason,int isRefund,Long isOut);


    /****
     * 补发失败的明细
     * @param bo
     * @return
     */
    int rePay(MerBillDetailBo bo);
}
