package shop.alien.store.service;

import com.baomidou.mybatisplus.extension.service.IService;
import shop.alien.entity.store.UserReservationOrder;

import java.util.List;

/**
 * 用户预订订单表 服务类
 *
 * @author system
 */
public interface UserReservationOrderService extends IService<UserReservationOrder> {

    /**
     * 根据订单编号查询
     *
     * @param orderSn 订单编号
     * @return 订单，不存在返回 null
     */
    UserReservationOrder getByOrderSn(String orderSn);

    /**
     * 根据支付单商户订单号查询（通过 merchant_payment_order 关联）
     *
     * @param outTradeNo 商户订单号
     * @return 预订订单，不存在返回 null
     */
    UserReservationOrder getByOutTradeNo(String outTradeNo);

    /**
     * 生成订单编号，格式：YS + yyyyMMdd + 6位序列
     *
     * @return 订单编号
     */
    String generateOrderSn();

    /**
     * 按预约ID物理删除订单（用于 delete 接口与 add 新建数据对应）
     *
     * @param reservationId 预约ID
     * @return 删除行数
     */
    int physicalDeleteByReservationId(Integer reservationId);

    /**
     * 查询支付状态为「退款中」的付费订单ID列表，用于定时任务重试退款
     *
     * @return 订单ID列表
     */
    List<Integer> listOrderIdsForRefundRetry();
}
