package com.cpop.jambox.business.service;

import com.cpop.jambox.business.bo.*;
import com.cpop.jambox.business.dto.EasyLearnPageDto;
import com.cpop.jambox.business.entity.EasyLearnOrder;
import com.cpop.jambox.business.vo.EasyLearnPageVo;
import com.github.binarywang.wxpay.bean.payscore.WxPartnerPayScoreSignPlanResult;
import com.github.binarywang.wxpay.bean.payscore.WxPartnerPayScoreUserSignPlanResult;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 果酱-放心学订单表 服务层。
 *
 * @author DB
 * @since 2023-12-14
 */
public interface EasyLearnOrderService extends IService<EasyLearnOrder> {

    /**
     * 获取放心学分页
     * @author DB
     * @since 2023/12/15
     * @param bo 查询参数
     * @return Page<EasyLearnPageVo>
     */
    Page<EasyLearnPageVo> getEasyLearnPage(EasyLearnPageBo bo);

    /**
     * 导出放心学数据
     * @author DB
     * @since 2023/12/15
     * @param bo 请求参数
     * @return List<EasyLearnPageDto>
     */
    List<EasyLearnPageDto> getEasyLearnXml(EasyLearnPageBo bo);

    /**
     * 微信支付订单通知
     * @author DB
     * @since 2023/12/21
     * @param xmlData 数据
     */
    void oncePayResult(String xmlData);

    /**
     * 一次性支付下单
     * @author DB
     * @since  2023/10/23 12:15
     * @param bo 下单请求对象
     */
    Object oncePlaceOrder(OncePlaceOrderBo bo);

    /**
     * 放心学统一支付
     * @author DB
     * @since 2023/12/28
     * @param bo 请求参数
     * @return R<Object>
     */
    Object unionPay(EasyLearnUnionPayBo bo);

    /**
     * 微信支付联合支付订单通知
     * @param xmlData 数据
     */
    void unionPayResult(String xmlData);

    /**
     * 放心学统一支付
     * @author DB
     * @since 2024/1/9
     * @param bo 请求参数
     * @return Object
     */
    Object unifiedPay(EasyLearnUnifiedPayBo bo);

    /**
     * 创建用户签约计划
     * @author DB
     * @since 2024/1/19
     * @param bo 请求参数
     */
    WxPartnerPayScoreUserSignPlanResult createUserSignPlans(LearnNowPayLaterUserSignPlansBo bo);

    /**
     * 用户签约成功回调
     * @author DB
     * @since 2024/1/20
     * @param notifyData 返回参数
     */
    void learnNowPayLaterUserSignPlanNotify(String notifyData);

    /**
     * 创建用户服务订单(核销)
     * @author DB
     * @since 2024/1/20
     * @param bo 请求参数
     * @return WxPartnerPayScoreSignPlanResult
     */
    WxPartnerPayScoreSignPlanResult createServiceOrder(LearnNowPayLaterServiceOrderBo bo);

    /**
     * 支付分用户核销成功回调
     * @author DB
     * @since 2024/1/20
     * @param notifyData 返回数据
     */
    void userServiceOrderSuccess(String notifyData);

    /**
     * 取消用户签约计划
     * @author DB
     * @since 2024/1/20
     * @param bo 请求参数
     */
    void stopUserSignPlans(LearnNowPayLaterStopUserSignPlansBo bo);

    /**
     * 发送数币手机验证码
     * @author DB
     * @since 2024/1/29
     * @param phone 手机号
     */
    void sendEcppMsmCode(String phone);

    /**
     * 微信支付联合支付普通订单通知
     * @author DB
     * @since 2024/2/22
     * @return String
     */
    String normalUnionPay(HttpServletRequest request, HttpServletResponse response);
}
