package com.jianshui.invoice.mapper;

import java.util.List;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jianshui.invoice.domain.BillInfo;
import com.jianshui.invoice.domain.BillDetail;
import com.jianshui.invoice.domain.Invoice;
import org.apache.ibatis.annotations.Param;

/**
 * 开票信息Mapper接口
 *
 * @author Gong Quanlin
 * @date 2022-03-06
 */
public interface BillInfoMapper extends BaseMapper<BillInfo> {
    /**
     * 查询开票信息
     *
     * @param id 开票信息主键
     * @return 开票信息
     */
    public BillInfo selectBillInfoById(Long id);

    /**
     * 查询开票信息列表
     *
     * @param billInfo 开票信息
     * @return 开票信息集合
     */
    public List<BillInfo> selectBillInfoList(BillInfo billInfo);

    /**
     * 新增开票信息
     *
     * @param billInfo 开票信息
     * @return 结果
     */
    public int insertBillInfo(BillInfo billInfo);

    /**
     * 修改开票信息
     *
     * @param billInfo 开票信息
     * @return 结果
     */
    public int updateBillInfo(BillInfo billInfo);

    /**
     * 删除开票信息
     *
     * @param id 开票信息主键
     * @return 结果
     */
    public int deleteBillInfoById(Long id);

    /**
     * 批量删除开票信息
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteBillInfoByIds(Long[] ids);

    /**
     * 批量删除发票明细
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteBillDetailByBillInfoIds(Long[] ids);

    /**
     * 批量新增发票明细
     *
     * @param billDetailList 发票明细列表
     * @return 结果
     */
    public int batchBillDetail(List<BillDetail> billDetailList);


    /**
     * 通过开票信息主键删除发票明细信息
     *
     * @param id 开票信息ID
     * @return 结果
     */
    public int deleteBillDetailByBillInfoId(Long id);

    /**
     * 根据税号和系统订单号查找billinfo
     *
     * @param companyId
     * @param systemOrderNo
     * @return
     */
    public BillInfo selectBySystemOrderNo(@Param(("companyId")) Long companyId, @Param("system_orderno") String systemOrderNo);


    public BillInfo selectByOutTradeOrderno(@Param(("companyId")) Long companyId, @Param("out_trade_orderno") String outTradeOrderno);

    public List<BillInfo> selectByOutTradeOrdernoNotDel(@Param(("companyId")) Long companyId, @Param("out_trade_orderno") String outTradeOrderno, @Param("updateBy") String updateBy);

}
