package com.ruoyi.account.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.ruoyi.account.api.model.AppUser;
|
import com.ruoyi.account.api.model.AppUserGiveawayTemporary;
|
import com.ruoyi.account.api.model.BalanceChangeRecordCopy;
|
import com.ruoyi.account.api.model.WithdrawalRequests;
|
import com.ruoyi.account.service.*;
|
import com.ruoyi.account.vo.WalletVO;
|
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.other.api.domain.VipSetting;
|
import com.ruoyi.other.api.enums.WithdrawalAuditStatus;
|
import com.ruoyi.other.api.feignClient.RemoteVipSettingClient;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
import java.util.List;
|
|
@Service
|
public class WalletServiceImpl implements WalletService {
|
@Resource
|
private AppUserService appUserService;
|
@Resource
|
private RemoteVipSettingClient remoteVipSettingClient;
|
@Resource
|
private WithdrawalRequestsService withdrawalRequestsService;
|
@Resource
|
private IAppUserGiveawayTemporaryService appUserGiveawayTemporaryService;
|
|
|
@Override
|
public WalletVO getWalletByUserId(Long userId) {
|
AppUser appUser = appUserService.getById(userId);
|
if (appUser == null) {
|
throw new RuntimeException("用户不存在");
|
}
|
Integer vipId = appUser.getVipId();
|
R<VipSetting> r = remoteVipSettingClient.getVipSettingById(vipId);
|
VipSetting data = r.getData();
|
if (data == null) {
|
throw new RuntimeException("会员设置信息为空");
|
}
|
|
|
List<AppUserGiveawayTemporary> list = appUserGiveawayTemporaryService.list(new LambdaQueryWrapper<AppUserGiveawayTemporary>().eq(AppUserGiveawayTemporary::getAppUserId, userId));
|
BigDecimal commissionAmount = BigDecimal.ZERO;
|
if(!list.isEmpty()){
|
commissionAmount = list.stream().map(AppUserGiveawayTemporary::getTotalDistributionAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
}
|
|
// 获取提现审核中的金额
|
List<WithdrawalRequests> waitAuditList = withdrawalRequestsService.list(new LambdaQueryWrapper<WithdrawalRequests>()
|
.eq(WithdrawalRequests::getAppUserId, userId)
|
.eq(WithdrawalRequests::getAuditStatus, WithdrawalAuditStatus.WAIT_AUDIT.getCode()));
|
BigDecimal reduce = waitAuditList.stream().map(WithdrawalRequests::getWithdrawalAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
WalletVO walletVO = new WalletVO();
|
BigDecimal balance = appUser.getBalance();
|
walletVO.setCommissionAmount(appUser.getTotalDistributionAmount().add(commissionAmount).setScale(2, RoundingMode.HALF_UP));
|
walletVO.setWithdrawalAmount(appUser.getWithdrawableAmount());
|
walletVO.setWithdrawnAmount(appUser.getWithdrawnAmount().subtract(reduce));
|
walletVO.setVipWithdrawalMinAmount(data.getVipWithdrawalMinAmount());
|
walletVO.setTotalRechargeAmount(appUser.getTotalRechargeAmount());
|
walletVO.setTotalRedPacketAmount(appUser.getTotalRedPacketAmount());
|
walletVO.setTotalDistributionAmount(appUser.getTotalDistributionAmount().add(commissionAmount).setScale(2, RoundingMode.HALF_UP));
|
walletVO.setAuditAmount(reduce);
|
walletVO.setBalance(balance);
|
return walletVO;
|
}
|
|
|
|
}
|