package com.hai.service;

import com.alibaba.fastjson.JSONObject;
import com.hai.entity.HighOrder;
import com.hai.entity.HighUserCard;
import com.hai.entity.OutRechargeChildOrder;
import com.hai.entity.OutRechargeOrder;
import com.hai.model.*;
import io.swagger.models.auth.In;

import java.math.BigDecimal;
import java.util.Calendar;
import java.util.List;
import java.util.Map;

public interface OutRechargeOrderService {

    /**
     * @Author Sum1Dream
     * @Description // 查询充值订单
     * @Date 15:18 2021/6/11
     * @Param [map]
     * @return java.util.List<com.hai.entity.OutRechargeOrder>
     **/
    List<OutRechargeOrder> getListRechargeOrder(Map<String , Object> map);

    /**
     * @Author Sum1Dream
     * @Description // 根据订单ID查询订单
     * @Date 15:19 2021/6/11
     * @Param [orderId]
     * @return com.hai.entity.OutRechargeOrder
     **/
    OutRechargeOrder findByOrderId(Long orderId);

    /**
     * @Author Sum1Dream
     * @Description // 根据订单号查询订单
     * @Date 15:20 2021/6/11
     * @Param [orderNo]
     * @return com.hai.entity.OutRechargeOrder
     **/
    OutRechargeOrder findByOrderNo(String orderNo);

    /**
     * @Author Sum1Dream
     * @Description // 根据订单号查询订单
     * @Date 15:20 2021/6/11
     * @Param [orderNo]
     * @return com.hai.entity.OutRechargeOrder
     **/
    OutRechargeOrder findByOrderNoNotChild(String orderNo);


    /***
     * @Author Sum1Dream
     * @Description // 修改订单
     * @Date 15:26 2021/6/11
     * @Param [outRechargeOrder]
     * @return void
     **/
    void updateOrder(OutRechargeOrder outRechargeOrder);

    /**
     * @Author Sum1Dream
     * @Description //取消订单 Administrator
     * @Date 18:37 2021/6/12
     * @Param [orderId]
     * @return void
     **/
    void cancelOrder(Long orderId);

    /**
     * @Author Sum1Dream
     * @Description //完成订单 Administrator
     * @Date 10:10 2021/6/14
     * @Param [orderId]
     * @return void
     **/
    void finishOrder(Long orderId);

    /**
     * 查询订单统计
     * @param map
     * @return
     */
    List<OutRechargeOrderModel> getOrderCount(Map<String,Object> map) throws Exception;

    /**
     * @Author Sum1Dream
     * @Description //TODO Administrator
     * @Date 1:04 2021/6/22
     * @Param [map]
     * @return java.util.List<com.hai.model.OutRechargeOrderModel>
     **/
    List<OutOrderModel> getListOrderCount(Map<String , String> map)  throws Exception;

    /**
     * @Author Sum1Dream
     * @Description //TODO Administrator
     * @Date 0:56 2021/6/23
     * @Param [map]
     * @return java.util.List<com.hai.model.OutUserOrderModel>
     **/
    List<OutUserOrderModel> getUserCountList(Map<String , String> map)  throws Exception;


    /**
    * @Author Sum1Dream
    * @name rechargeOrderByIndex.java
    * @Description // 话费订单统计
    * @Date 4:25 下午 2022/1/10
    * @Param [java.lang.Integer]
    * @return com.hai.model.OrderCountModel
    */
    OrderCountModel rechargeOrderByIndex(Integer code);

    /**
    * @Author Sum1Dream
    * @name orderToRefund.java
    * @Description // 话费订单退款
    * @Date 4:44 下午 2022/1/24
    * @Param [java.lang.Long]
    * @return void
    */
    void rechargeOrderToRefund(Long orderId) throws Exception;

    /**
     * @Author Sum1Dream
     * @Name refundOrder
     * @Description // 话费退款
     * @Date 15:18 2022/11/2
     * @Param [orderId]
     * @Return void
     */
    void refundOrder(Long orderId) throws Exception;


    /**
     * @Author Sum1Dream
     * @Name getPrepaidRechargeApi
     * @Description // 请求上游话费充值接口
     * @Date 14:25 2023/3/28
     * @Param [rechargeOrder]
     * @Return void
     */
    void getPrepaidRechargeApi(OutRechargeOrder outRechargeOrder);

    /**
     * @Author Sum1Dream
     * @Name prepaidRechargeHandle
     * @Description // 处理订单应用
     * @Date 18:44 2023/3/28
     * @Param [outRechargeOrder]
     * @Return void
     */
    void prepaidRechargeHandle(OutRechargeOrder outRechargeOrder) throws Exception;


    /**
     * @Author Sum1Dream
     * @Name completeOrder
     * @Description // 完成话费订单
     * @Date 14:58 2023/2/13
     * @Param [order, childOrder]
     * @Return void
     */
    void completeOrder(Long orderId);


    /**
     * @Author Sum1Dream
     * @Name getApiRechargePhoneByList
     * @Description // 查询API话费订单列表
     * @Date 15:53 2023/1/4
     * @Param [map]
     * @Return java.util.List<com.hai.model.ApiRechargePhoneModel>
     */
    List<ApiRechargePhoneModel> getApiRechargePhoneByList(Map<String , Object> map);


    /**
     * @Author Sum1Dream
     * @Name editOutRechargeOrder
     * @Description // 根据订单号修改订单内容
     * @Date 11:42 2022/11/2
     * @Param [order, outRechargeOrder]
     * @Return void
     */
    void editOutRechargeOrder(HighOrder order , OutRechargeOrder outRechargeOrder);

    /**
     * @Author Sum1Dream
     * @Name getRechargeOrderLegality
     * @Description // 判断话费订单合法性
     * @Date 15:57 2023/2/15
     * @Param [object]
     * @Return void
     */
    Integer getRechargeOrderLegality(OutRechargeChildOrder childOrder);

    /**
     * @Author Sum1Dream
     * @Name orderWhetherRecharge
     * @Description // 订单是否可以充值
     * @Date 16:11 2023/3/28
     * @Param [childOrder]
     * @Return java.lang.Integer 1：满足继续充值条件 2：订单满足退款条件 3：订单不可以退款不可以继续充值 4:订单异常 5:订单充值完成 6：充值订单号未查询到任何充值记录
     */
    Integer orderWhetherRecharge(OutRechargeOrder rechargeOrder);

    OutRechargeChildOrder mobileChildOrderHandle(HighOrder  highOrder , OutRechargeOrder outRechargeOrder);

    JSONObject prepaidRechargeOrderHandle(JSONObject object);

    boolean rechargeOrderAbnormal(OutRechargeOrder order);
}
