package com.hfkj.service;

import com.hfkj.entity.BsStoreDiscountActivity;
import com.hfkj.entity.BsTradeOrder;
import com.hfkj.model.UserDiscount;
import com.hfkj.sysenum.PlatformTypeEnum;
import com.hfkj.sysenum.TradeOrderMsgTypeEnum;
import com.hfkj.sysenum.TradeOrderPayModeEnum;

import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 交易订单
 * @author hurui
 */
public interface BsTradeOrderService {

    /**
     * 编辑订单
     * @param tradeOrder
     */
    void editOrder(BsTradeOrder tradeOrder);

    /**
     *  创建订单
     * @param storeId       门店id
     * @param tradeAmount   交易金额
     * @param param         其他参数
     */
    Map<String, Object> createOrder(Long storeId, BigDecimal tradeAmount, BsStoreDiscountActivity storeDiscount, String userPhone, UserDiscount userDiscount, Map<String, Object> param, HttpServletRequest request);

    /**
     * 支付成功
     * @param outTradeNo
     * @param transactionId
     * @param platformType
     * @param tradeOrderPayMode
     * @param tradeActualAmount
     * @param subMchId
     */
    void paySuccess(String outTradeNo, String transactionId, PlatformTypeEnum platformType, TradeOrderPayModeEnum tradeOrderPayMode, BigDecimal tradeActualAmount, String subMchId, Map<String,Object> other);

    /**
     * 根据交易流水 查询
     * @param tradeNo
     */
    BsTradeOrder getOrderByOutTradeNo(String tradeNo);

    /**
     * 查询交易订单
     * @param tradeNo 交易流水或渠道平台交易流水
     * @return
     */
    BsTradeOrder getOrderByOutTradeNoOrPlatformTradeNo(String tradeNo);
    /**
     * 根据交易订单id，查询
     * @param tradeOrderId
     */
    BsTradeOrder getOrderByTradeNoId(Long tradeOrderId);

    /**
     * 查询交易订单列表
     * @param param
     */
    List<BsTradeOrder> getTradeOrderList(Map<String, Object> param);

    /**
     * 统计交易订单价格
     * @param param
     * @return
     */
    Map<String,Object> countTradeOrderPrice(Map<String, Object> param);

}
