package com.ym.mec.collectfee.service;

import com.alibaba.fastjson.JSON;
import com.ym.mec.collectfee.common.page.PageInfo;
import com.ym.mec.collectfee.common.service.BaseService;
import com.ym.mec.collectfee.entity.*;
import com.ym.mec.collectfee.utils.yqpay.YqPayUtil;
import org.apache.ibatis.annotations.Param;

import javax.xml.bind.JAXBException;
import java.math.BigDecimal;
import java.util.*;

public interface OrderService extends BaseService<Integer, Order> {

    /**
     * 根据学生编号，获取订单列表
     *
     * @param userId
     * @return
     */
    List<Order> getOrderByUserId(Integer userId);

    /**
     * 根据乐团编号，获取订单列表
     *
     * @param userId
     * @return
     */
    List<Order> getOrderByClassId(Integer classId, Integer type, String voicyPart,String startTime,String endTime, Integer branchId);


    /**
     * 支付成功后推送订单列表
     *
     * @param batchNum 批次号
     * @return
     */
    String pushOrder(String batchNum);

    /**
     * 查询某声部报名成功人数
     *
     * @param poName    乐团名称
     * @param voicePort 声部名称
     * @return
     */
    int countOrder(String poName, String voicePort);

    /**
     * 根据系统订单号获取订单
     *
     * @param orderNo 系统订单号
     * @return
     */
    Order getOrderByOrderNo(String orderNo);


    /**
     * 根据乐团编号获取乐团信息
     *
     * @param schoolId
     * @return
     */
    Object getSchoolDetail(Integer schoolId);


    /**
     * 获取支付中和成功的订单数
     *
     * @return
     */
    int getPayOrderNums();

    /**
     * 获取支付中的订单
     *
     * @return
     */
    List<Order> findPayingOrders();

    /**
     * 获取支付的参数
     *
     * @param account
     * @param order
     * @param school
     * @return
     * @throws Exception
     */
    Map getPayMap(Account account, Order order, School school) throws Exception;

    /**
     * 根据id和status状态更新订单
     *
     * @param upMap
     * @return
     */
    int updateByIdAndStatus(Map upMap);

    List<Order> findPayingOrdersOver(Map<String,Object> map);

    Integer getPayingOrderNums(int groupId);

    Order findOrderByStatus(Integer userId,Integer status);

    Order findRegOrderByStatus(Integer userId, Integer status);

    PageInfo<Order> queryOrderPage(OrderQueryInfo queryInfo);

}