package com.yida.data.mall.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yida.data.mall.dto.h5.CreateBillOrderDTO;
import com.yida.data.mall.dto.h5.H5BillInfoDTO;
import com.yida.data.mall.dto.h5.H5BillOrderPageDTO;
import com.yida.data.mall.dto.h5.H5BillSelectDTO;
import com.yida.data.mall.vo.h5.BillPayInfoVO;
import com.yida.data.mall.vo.h5.H5BillOrderInfoVO;
import com.yida.data.mall.vo.h5.H5BillOrderPageVO;
import com.yida.data.mall.vo.h5.H5BillSelectVO;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 缴费账单前端 Service接口
 *
 * @author ZYJ
 * @date 2022-3-30 19:47:02
 */
public interface H5EduBillService {

    /**
     * 查询前台账单列表
     *
     * @param h5BillSelectDTO 账单前端列表请求类
     * @return java.util.List<com.yida.data.mall.vo.h5.H5BillSelectVO>
     * @author ZYJ
     * @date 2022/3/30 20:25
     */
    List<H5BillSelectVO> listH5Bill(H5BillSelectDTO h5BillSelectDTO);

    /**
     * 查询前台账单详情
     *
     * @param h5BillInfoDTO 前端账单详情请求类
     * @return com.yida.data.mall.vo.h5.H5BillSelectVO
     * @author ZYJ
     * @date 2022/3/31 14:15
     */
    H5BillSelectVO getH5BillInfo(H5BillInfoDTO h5BillInfoDTO);

    /**
     * 生成账单订单
     *
     * @param createBillOrderDTO 生成账单订单请求类
     * @return com.yida.data.mall.vo.h5.BillPayInfoVO
     * @author ZYJ
     * @date 2022/3/31 19:53
     */
    BillPayInfoVO createBillOrder(CreateBillOrderDTO createBillOrderDTO);

    /**
     * 账单订单完成(前台支付完成后调用)
     *
     * @param orderCode 订单号
     * @author ZYJ
     * @date 2022/4/1 15:42
     */
    void billOrderSuccess(String orderCode);

    /**
     * 账单订单支付成功
     *
     * @param orderCode 订单号
     * @param payDate   支付完成时间
     * @author ZYJ
     * @date 2022/4/1 16:15
     */
    void billOrderPaySuccess(String orderCode, LocalDateTime payDate);

    /**
     * 前端查询账单订单列表数据
     *
     * @param h5BillOrderPageDTO 账单订单列表请求类
     * @return com.baomidou.mybatisplus.core.metadata.IPage<com.yida.data.mall.vo.h5.H5BillOrderPageVO>
     * @author ZYJ
     * @date 2022/4/1 16:54
     */
    IPage<H5BillOrderPageVO> listH5BillOrderPage(H5BillOrderPageDTO h5BillOrderPageDTO);

    /**
     * 前端查询账单订单详情
     *
     * @param billOrderId 账单订单id
     * @param orderCode   订单号
     * @return com.yida.data.mall.vo.h5.H5BillOrderInfoVO
     * @author ZYJ
     * @date 2022/4/1 17:25
     */
    H5BillOrderInfoVO getH5BillOrderInfo(Long billOrderId, String orderCode);

    /**
     * 继续支付
     *
     * @param orderCode 订单号
     * @param deptId    学校id
     * @return com.yida.data.mall.vo.h5.BillPayInfoVO
     * @author ZYJ
     * @date 2022/4/1 17:15
     */
    BillPayInfoVO continuePayOrder(String orderCode, Long deptId);

    /**
     * 取消订单
     *
     * @param orderCode 订单号
     * @author ZYJ
     * @date 2022/4/1 17:07
     */
    void cancelOrder(String orderCode);

    /**
     * 缴费账单退款
     *
     * @param orderCode 订单号
     * @author ZYJ
     * @date 2022/4/18 10:04
     */
    void refundOrder(String orderCode);

    /**
     * 查看是否存在待支付的订单
     *
     * @param billId    账单id
     * @param studentId 学生id
     * @return java.lang.String
     * @author ZYJ
     * @date 2022/7/28 15:23
     */
    String checkExistOrder(Long billId, Long studentId);
}
