
package com.tmerclub.cloud.api.order.feign;

import com.tmerclub.cloud.api.order.bo.EsOrderRefundBO;
import com.tmerclub.cloud.api.order.vo.*;
import com.tmerclub.cloud.common.response.ServerResponseEntity;

import java.util.Date;
import java.util.List;

/**
 * @author tmerclub
 * @date 2020/11/23
 */
public interface OrderRefundFeignClient {


    /**
     * 获取退款状态
     *
     * @param refundId 退款id
     * @return
     */
    ServerResponseEntity<Integer> getRefundStatus(Long refundId);

    /**
     * 根据参数获取商品退款订单数据分析
     *
     * @param spuIds    商品id列表
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 商品退款订单数据
     */
    ServerResponseEntity<List<OrderRefundProdEffectRespVO>> getProdRefundEffectByDateAndProdIds(List<Long> spuIds,
                                                                                                Long startTime,
                                                                                                Long endTime);

    /**
     * 通过订单id获取成功的退款订单
     *
     * @param orderId        订单id
     * @param returnMoneySts 退款状态
     * @return 成功的退款订单
     */
    ServerResponseEntity<List<OrderRefundVO>> getOrderRefundByOrderIdAndRefundStatus(Long orderId, Integer returnMoneySts);

    /**
     * 根据退款单号列表获取退款订单列表
     *
     * @param refundIds
     * @return
     */
    ServerResponseEntity<List<OrderRefundSimpleVO>> listOrderIdsByRefundIds(List<Long> refundIds);

    /**
     * 根据订单单号列表获取退款订单列表
     *
     * @param refundIds
     * @return
     */
    ServerResponseEntity<List<Long>> listOrderRefundByOrderIds(List<Long> refundIds);

    /**
     * 通过退款编号id获取退款订单
     *
     * @param refundId 退款id
     * @return 成功的退款订单
     */
    ServerResponseEntity<OrderRefundVO> getOrderRefundByRefundId(Long refundId);

    /**
     * 获取mongodb中存储的指定退款信息
     *
     * @param refundId 退款id
     * @return 成功的退款订单
     */
    ServerResponseEntity<EsOrderRefundBO> saveMongoAndGetEsOrderRefundInfo(Long refundId);

    /**
     * 查询财务对账信息，使用mongodb，当有店铺名称查询需要时
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @param shopName  店铺名称
     * @param shopId
     * @return 财务对账信息
     */
    ServerResponseEntity<AccountOrderDetailVO> getAccountOrderDetail(Date startTime,
                                                                     Date endTime,
                                                                     String shopName,
                                                                     Long shopId);

    /**
     * 查询财务对账信息，使用mongodb，当有店铺名称查询需要时
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @param shopName  店铺名称
     * @param pageNum
     * @param pageSize
     * @return 财务对账信息
     */
    ServerResponseEntity<PageShopAccountOrderVO> listShopAccountDetail(Date startTime,
                                                                       Date endTime,
                                                                       String shopName,
                                                                       Integer pageSize,
                                                                       Integer pageNum);

    /**
     * 查询财务对账信息，使用mongodb，当有店铺名称查询需要时
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @param shopId    店铺id
     * @param shopName
     * @param pageNum
     * @param pageSize
     * @return 财务对账信息
     */
    ServerResponseEntity<PageShopAccountOrderVO> listOrderRefundInfo(Date startTime,
                                                                     Date endTime,
                                                                     Long shopId,
                                                                     String shopName,
                                                                     Integer pageSize,
                                                                     Integer pageNum);

    /**
     * 执行退款请求
     *
     * @param extendInfo
     */
    void doRefund(String extendInfo);
}
