package com.xhpc.payment.service;

import com.xhpc.common.domain.XhpcRechargeOrder;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 充值订单信息 服务层
 *
 * @author ruoyi
 */
public interface IXhpcRechargeOrderService {

    /**
     * 更新 充值订单
     *
     * @param xhpcRechargeOrder 充值订单
     */
    public int update(XhpcRechargeOrder xhpcRechargeOrder);

    /**
     * 充值订单详情
     *
     * @param rechargeOrderId 充值订单id
     * @return 结果
     */
    public Map<String, Object> info(Long rechargeOrderId);

    /**
     * 充值订单分页列表
     *
     * @param phone
     * @param rechargeOrderNumber
     * @param status
     * @param createTimeStart
     * @param createTimeEnd
     * @return
     */
    public List<Map<String, Object>> page(String phone, String rechargeOrderNumber, String status, String createTimeStart, String createTimeEnd,Integer type,Integer source,Integer userId);


    /**
     * 充值订单分页列表
     *
     * @param phone
     * @param rechargeOrderNumber
     * @param status
     * @param createTimeStart
     * @param createTimeEnd
     * @return
     */
    public void export(HttpServletResponse response, String phone, String rechargeOrderNumber, String status, String createTimeStart, String createTimeEnd, Integer type,Integer source,Integer userId) throws IOException;


    /**
     * 统计
     *
     * @param phone
     * @param rechargeOrderNumber
     * @param status
     * @param createTimeStart
     * @param createTimeEnd
     * @return
     */
    public Map<String, Object> sumMoney(String phone, String rechargeOrderNumber, String status, String createTimeStart, String createTimeEnd,Integer type,Integer source,Integer userId);

    public Map<String, Object> sumUserMoney(String phone, String rechargeOrderNumber, String status, String createTimeStart, String createTimeEnd,Integer type,Integer source,Integer userId);

    /**
     * 新增 充值订单
     *
     * @param appUserId C端用户id
     * @param amount    充值金额
     * @param type      充值渠道（1微信 2支付宝）
     * @param serialNumber    预充值的桩
     * @return
     */
    public XhpcRechargeOrder addRechargeOrder(String appUserId, BigDecimal amount, String type, String orderNumber,Integer userType,String serialNumber);

    /**
     * 修改订单状态 充值订单
     *
     * @param rechargeOrderId 充值订单id
     * @param status          状态（0待支付 1充值成功，2充值失败）
     * @param type            充值渠道（1微信 2支付宝）
     * @return
     */
    public void updateRechargeOrder(Long rechargeOrderId, String type, Integer status, String paymentNumber);

    /**
     * 修改充值订单 退款金额
     *
     * @param rechargeOrderId 充值订单id
     * @param refundFee       退款金额（元）
     * @param refundStatus    退款金额状态（0 未退款 1未退款完 2全部已退还）
     * @return
     */
    public void updateRechargeOrderFeundFee(Long rechargeOrderId,BigDecimal refundFee,Integer refundStatus);
    /**
     * 充值订单详情
     *
     * @param rechargeOrderNumber 充值订单编号
     * @return 结果
     */
    public XhpcRechargeOrder infoRechargeOrderNumber(String rechargeOrderNumber);

    /**
     * 每隔30分钟，清理一次未支付的订单
     */
    public void updateRechargeOrderStatus();
}
