package com.bonus.canteen.core.account.service;

import com.bonus.canteen.core.account.constants.AccTradeTypeEnum;
import com.bonus.canteen.core.account.domain.AccTrade;
import com.bonus.canteen.core.account.domain.bo.TradeAndWallerInfo;
import com.bonus.canteen.core.account.domain.param.AccConsumeDetailQueryParam;
import com.bonus.canteen.core.account.domain.param.AccWalletOperationQueryParam;
import com.bonus.canteen.core.account.domain.vo.AccConsumeDetailVO;
import com.bonus.canteen.core.account.domain.vo.AccOperationListVO;
import com.bonus.canteen.core.account.domain.vo.AccTradeVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 账户交易记录Service接口
 * 
 * @author xsheng
 * @date 2025-04-05
 */
public interface IAccTradeService {
    /**
     * 查询账户交易记录
     * 
     * @param tradeId 账户交易记录主键
     * @return 账户交易记录
     */
    public AccTrade selectAccTradeByTradeId(Long tradeId);

    public List<AccTrade> selectAccTradeByOrderNo(Long orderNo);

    /**
     * 查询账户交易记录列表
     * 
     * @param accTrade 账户交易记录
     * @return 账户交易记录集合
     */
    public List<AccTrade> selectAccTradeList(AccTrade accTrade);

    /**
     * 新增账户交易记录
     * 
     * @param accTrade 账户交易记录
     * @return 结果
     */
    public int insertAccTrade(AccTrade accTrade);

    public int insertAccTradeVo(AccTradeVo accTrade);

    /**
     * 修改账户交易记录
     * 
     * @param accTrade 账户交易记录
     * @return 结果
     */
    public int updateAccTrade(AccTrade accTrade);

    public int updateAccTradeVoByOrderNo(AccTradeVo accTrade);

    /**
     * 批量删除账户交易记录
     * 
     * @param tradeIds 需要删除的账户交易记录主键集合
     * @return 结果
     */
    public int deleteAccTradeByTradeIds(Long[] tradeIds);

    /**
     * 删除账户交易记录信息
     * 
     * @param tradeId 账户交易记录主键
     * @return 结果
     */
    public int deleteAccTradeByTradeId(Long tradeId);

    List<AccOperationListVO> queryAccOperationList(AccWalletOperationQueryParam param);

    List<TradeAndWallerInfo> queryTradeAndWallerInfoByOrderNo(String orderNo, AccTradeTypeEnum accTradeTypeEnum);

    List<AccConsumeDetailVO> queryAccConsumeDetail(AccConsumeDetailQueryParam param);
}
