package com.cpop.mall.business.service;

import com.alibaba.fastjson.JSONObject;
import com.cpop.mall.business.bo.*;
import com.cpop.mall.business.dto.UserPointDto;
import com.cpop.mall.business.entity.Order;
import com.cpop.mall.business.vo.OrderInfoVo;
import com.cpop.mall.business.vo.OrderPageVo;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;

/**
 * 商城订单表 服务层。
 *
 * @author DB
 * @since 2023-10-24
 */
public interface OrderService extends IService<Order> {

    /**
     * @descriptions 分页查询商城-订单
     * @author DB
     * @date 2023/10/24 15:19
     * @param bo 请求参数
     * @return: com.mybatisflex.core.paginate.Page<com.cpop.mall.business.vo.OrderPageVo>
     */
    Page<OrderPageVo> getOrderPage(OrderPageBo bo);

    /**
     * @descriptions 生成预订单
     * @author DB
     * @date 2023/11/06 11:17
     * @param bo 请求参数
     * @return: java.lang.Object
     */
    String createAdvanceOrder(AdvanceOrderBo bo);

    /**
     * @descriptions 商城-订单-下单
     * @author DB
     * @date 2023/10/25 9:32
     * @param bo 下单请求对象
     * @return: void
     */
    Object placeOrder(PlaceOrderBo bo);

    /**
     * @descriptions 申请退款
     * @author DB
     * @date 2023/10/26 17:24
     * @param bo 申请退款对象
     * @return: void
     */
    void applyRefund(OrderApplyRefundBo bo);

    /**
     * @descriptions 微信支付订单通知
     * @author DB
     * @date 2023/10/27 16:04
     * @param xmlData 加密数据
     * @return: void
     */
    void wxPayNotifyOrder(String xmlData);

    /**
     * @descriptions 取消订单
     * @author DB
     * @date 2023/10/27 17:17
     * @param orderId 订单id
     * @return: void
     */
    void cancelOrder(String orderId);

    /**
     * @Description: 输入物流订单
     * @param bo 请求参数
     * @Author DB
     * @Date: 2023/10/28 15:27
     */
    void inputLogisticsOrder(LogisticsOrderBo bo);

    /**
     * @descriptions 小程序-重新支付订单
     * @author DB
     * @date 2023/11/03 16:14
     * @param orderId 订单id
     * @return: java.lang.Object
     */
    Object rePayOrder(String orderId);

    /**
     * @descriptions 小程序-获取订单详情
     * @author DB
     * @date 2023/11/06 14:26
     * @param orderId 订单id
     * @return: com.cpop.mall.business.vo.OrderInfoVo
     */
    OrderInfoVo getOrderInfo(String orderId);

    /**
     * @descriptions 后台确定订单完成
     * @author DB
     * @date 2023/11/13 17:42
     * @param id 主键
     * @return: void
     */
    void orderFinish(String id);

    /**
     * 获取用户积分
     * @param loginUserInfo
     * @return
     */
    UserPointDto getUserPoint(JSONObject loginUserInfo);
}
