package com.red.circle.order.inner.service;

import com.red.circle.order.inner.model.cmd.UserRechargeMonthQryCmd;
import com.red.circle.order.inner.model.dto.MonthlyRechargeUserDTO;
import com.red.circle.order.inner.model.dto.TotalRechargeUserDTO;
import com.red.circle.order.inner.model.enums.MonthlyRechargeType;
import java.math.BigDecimal;
import java.util.List;

/**
 * 用户充值统计.
 *
 * @author pengliang on 2023/9/13
 */
public interface UserRechargeCountClientService {

  /**
   * 查询用户总充值数据
   */
  List<TotalRechargeUserDTO> listUserRechargeTotal(String sysOrigin);

  /**
   * 查询本月用户充值数据
   */
  List<MonthlyRechargeUserDTO> listMonthlyRecharge(UserRechargeMonthQryCmd cmd);

  /**
   * 累计金额.
   */
  void count(Long userId, BigDecimal amount, MonthlyRechargeType type);

  /**
   * 扣除金额.
   */
  void decr(Long userId, BigDecimal amount, MonthlyRechargeType type);

  /**
   * 本月个人充值总额.
   */
  BigDecimal getThisMonthTotalPersonalRecharge(Long userId);
}
