package com.yida.data.mall.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yida.data.common.core.entity.mall.EduBill;
import com.yida.data.common.core.enums.BillStatusEnum;
import com.yida.data.mall.dto.BillOrderSelectPageDTO;
import com.yida.data.mall.dto.BillSaveDTO;
import com.yida.data.mall.dto.BillSelectPageDTO;
import com.yida.data.mall.vo.BillInfoVO;
import com.yida.data.mall.vo.BillItemInfoVO;
import com.yida.data.mall.vo.BillOrderSelectPageVO;
import com.yida.data.mall.vo.BillSelectPageVO;

import java.util.List;

/**
 * 缴费账单表 Service接口
 *
 * @author ZYJ
 * @date 2021-12-24 09:47:02
 */
public interface EduBillService extends IService<EduBill> {

    /**
     * 查询缴费账单列表数据
     *
     * @param billSelectPageDTO 账单后台列表请求类
     * @return com.baomidou.mybatisplus.core.metadata.IPage<com.yida.data.mall.vo.BillSelectPageVO>
     * @author ZYJ
     * @date 2021/12/24 11:24
     */
    IPage<BillSelectPageVO> listBillPage(BillSelectPageDTO billSelectPageDTO);

    /**
     * 获取账单详细信息
     *
     * @param billId 账单id
     * @return com.yida.data.mall.vo.BillInfoVO
     * @author ZYJ
     * @date 2021/12/24 13:38
     */
    BillInfoVO getBillInfo(Long billId);

    /**
     * 保存缴费单数据
     *
     * @param billSaveDTO 保存缴费单请求类
     * @author ZYJ
     * @date 2021/12/29 15:07
     */
    void saveBill(BillSaveDTO billSaveDTO);

    /**
     * 修改缴费单状态
     *
     * @param billId       账单id
     * @param enableStatus 状态 {@link BillStatusEnum}
     * @author ZYJ
     * @date 2022/3/28 19:49
     */
    void updateBillEnableStatus(Long billId, Integer enableStatus);

    /**
     * 删除账单
     *
     * @param billId 账单id
     * @author ZYJ
     * @date 2022/3/30 16:30
     */
    void deleteBill(Long billId);

    /**
     * 查询账单明细缴费项动态表头
     *
     * @param billId 账单id
     * @return java.lang.Object
     * @author ZYJ
     * @date 2022/4/2 14:31
     */
    List<BillItemInfoVO> listBillPayDetailTableCol(Long billId);

    /**
     * 查询账单订单列表数据
     *
     * @param dto 账单订单后台列表请求类
     * @return com.baomidou.mybatisplus.core.metadata.IPage<com.yida.data.mall.vo.BillOrderSelectPageVO>
     * @author ZYJ
     * @date 2022/6/29 15:01
     */
    IPage<BillOrderSelectPageVO> listBillOrderPage(BillOrderSelectPageDTO dto);

    /**
     * 缴费账单退款
     *
     * @param orderCode 订单号
     * @author ZYJ
     * @date 2022/6/29 20:37
     */
    void refundOrder(String orderCode);

    /**
     * 查询账单集合数据
     *
     * @param type 查询类型. 0-全部, 1-已开始账单
     * @return java.util.List<com.yida.data.common.core.entity.mall.EduBill>
     * @author ZYJ
     * @date 2022/7/7 10:07
     */
    List<EduBill> listBill(Integer type);
}
