package com.fs.course.service;

import java.util.List;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fs.common.core.domain.R;
import com.fs.course.domain.FsCourseProductOrder;
import com.fs.course.param.FsCourseProductOrderCreateParam;
import com.fs.course.param.FsCourseProductOrderListParam;
import com.fs.course.param.FsCourseProductOrderListUParam;
import com.fs.course.vo.FsCourseProductOrderListUVO;
import com.fs.course.vo.FsCourseProductOrderVO;
import com.fs.his.param.ApplyCourseProductOrderRefundParam;
import com.fs.his.param.FsCourseProductOrderComputeParam;
import com.fs.his.param.FsCourseProductOrderDoPayParam;
import com.fs.his.param.FsCourseProductOrderRefundParam;

/**
 * 拍单商品订单Service接口
 *
 * @author fs
 * @date 2025-07-28
 */
public interface IFsCourseProductOrderService extends IService<FsCourseProductOrder>{
    /**
     * 查询拍单商品订单
     *
     * @param courseOrderId 拍单商品订单主键
     * @return 拍单商品订单
     */
    FsCourseProductOrder selectFsCourseProductOrderByCourseOrderId(Long courseOrderId);

    /**
     * 查询拍单商品订单列表
     *
     * @param param 拍单商品订单
     * @return 拍单商品订单集合
     */
    List<FsCourseProductOrderVO> selectFsCourseProductOrderList(FsCourseProductOrderListParam param);

    /**
     * 新增拍单商品订单
     *
     * @param fsCourseProductOrder 拍单商品订单
     * @return 结果
     */
    int insertFsCourseProductOrder(FsCourseProductOrder fsCourseProductOrder);

    /**
     * 修改拍单商品订单
     *
     * @param fsCourseProductOrder 拍单商品订单
     * @return 结果
     */
    int updateFsCourseProductOrder(FsCourseProductOrder fsCourseProductOrder);

    /**
     * 批量删除拍单商品订单
     *
     * @param courseOrderIds 需要删除的拍单商品订单主键集合
     * @return 结果
     */
    int deleteFsCourseProductOrderByCourseOrderIds(Long[] courseOrderIds);

    /**
     * 删除拍单商品订单信息
     *
     * @param courseOrderId 拍单商品订单主键
     * @return 结果
     */
    int deleteFsCourseProductOrderByCourseOrderId(Long courseOrderId);

    R createOrder(FsCourseProductOrderCreateParam param);

    FsCourseProductOrderListUVO selectCourseProductByCourseOrderId(Long courseOrderId);

    R computeOrder(FsCourseProductOrderComputeParam param);

    List<FsCourseProductOrderListUVO> selectFsCourseProductOrderListUVO(FsCourseProductOrderListUParam param);

    R payment(FsCourseProductOrderDoPayParam param);

    R  payConfirm(String orderSn,String payCode, String tradeNo,String payType,Integer type,String bankTransactionId,String bankSerialNo);

    R refund(FsCourseProductOrderRefundParam param);

    R applyRefund(ApplyCourseProductOrderRefundParam param);

    List<FsCourseProductOrderVO> selectFsCourseProductOrderDecodePhoneList(FsCourseProductOrderListParam param);
}
