package com.kexue.skills.service;

import com.github.pagehelper.PageInfo;
import com.kexue.skills.entity.PaymentOrder;
import com.kexue.skills.entity.dto.PaymentOrderDto;

import java.util.List;

/**
 * (PaymentOrder)表服务接口
 *
 * @author 王志维
 * @since 2025-02-21 23:01:48
 */
public interface PaymentOrderService extends BaseService {
    /**
     * 分页查询
     *
     * @param queryDto 筛选条件
     * @return 查询结果
     */
    PageInfo<PaymentOrder> getPageList(PaymentOrderDto queryDto);

    /**
     * 查询列表
     *
     * @param queryDto 筛选条件
     * @return 查询结果
     */
    List<PaymentOrder> getList(PaymentOrderDto queryDto);

    /**
     * 通过主键查询单条数据
     *
     * @param orderId 主键
     * @return 实例对象
     */
    PaymentOrder queryById(Long orderId);

    /**
     * 通过订单号查询单条数据
     *
     * @param orderNo 微信或者支付宝订单号
     * @return 实例对象
     */
    PaymentOrder queryByOrderNo(String orderNo);

    /**
     * 通过渠道订单号查询单条数据
     *
     * @param ChannelOrderNo 渠道订单号
     * @return 订单信息
     */
    PaymentOrder queryByChannelOrderNo(String ChannelOrderNo);

    /**
     * 新增数据
     *
     * @param paymentOrder 实例对象
     * @return 实例对象
     */
    PaymentOrder insert(PaymentOrder paymentOrder);

    /**
     * 更新数据
     *
     * @param paymentOrder 实例对象
     * @return 实例对象
     */
    PaymentOrder update(PaymentOrder paymentOrder);

    /**
     * 更新订单状态
     *
     * @param orderId 订单ID
     * @param status 状态
     * @param channelOrderNo 渠道订单号
     * @return 影响行数
     */
    int updateStatus(Long orderId, Integer status, String channelOrderNo);

    /**
     * 通过主键逻辑删除
     *
     * @param orderId 主键
     * @param updateBy 更新人
     * @return 影响行数
     */
    int logicDeleteById(Long orderId, String updateBy);

    /**
     * 通过主键物理删除
     *
     * @param orderId 主键
     * @return 影响行数
     */
    int deleteById(Long orderId);

    /**
     * 创建支付订单
     *
     * @param paymentOrder 订单信息
     * @return 支付订单
     */
    PaymentOrder createPaymentOrder(PaymentOrder paymentOrder);

    /**
     * 处理支付回调
     *
     * @param orderNo 订单号
     * @param status 支付状态
     * @param channelOrderNo 渠道订单号
     * @return 处理结果
     */
    boolean handlePaymentCallback(String orderNo, Integer status, String channelOrderNo);
}