From 5d9b16b455079407acdcff587d6152ef6cb6bc55 Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Fri, 03 Jan 2025 17:22:54 +0800 Subject: [PATCH] feat(mall): 为 ApiGrowChargeDto 中的 amount 字段添加 NotNull 注解 --- src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java | 124 +++++++++++++++++++++++++++++++--------- 1 files changed, 95 insertions(+), 29 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java index e97d254..81ac8aa 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java @@ -47,6 +47,7 @@ import java.io.IOException; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.*; import java.util.stream.Collectors; @@ -295,11 +296,14 @@ mallMemberVo.setChangeState(runVip.getChangeState()); mallMemberVo.setWithdrawState(runVip.getWithdrawState()); mallMemberVo.setInsideState(runVip.getInsideState()); + mallMemberVo.setCommissionState(runVip.getCommissionState()); + mallMemberVo.setGrowState(runVip.getGrowState()); MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(mallMemberVo.getId()); mallMemberVo.setBalance(wallet.getBalance()); mallMemberVo.setScore(wallet.getScore()); + mallMemberVo.setCommission(wallet.getCommission()); return new FebsResponse().success().data(mallMemberVo); } @@ -440,6 +444,7 @@ //获取个人的碳币 MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId); myTeamVo.setMyBalance(mallMemberWallet.getBalance()); + myTeamVo.setMyCommission(mallMemberWallet.getCommission()); //全部直推 List<MallMember> mallMembers = this.baseMapper.selectByRefererId(mallMember.getInviteId()); /** @@ -448,6 +453,7 @@ if(CollUtil.isEmpty(mallMembers)){ myTeamVo.setMyTeamCnt(0); myTeamVo.setMyTeamBalance(BigDecimal.ZERO); + myTeamVo.setMyTeamCommission(BigDecimal.ZERO); myTeamVo.setTeam(null); return new FebsResponse().success().data(myTeamVo); } @@ -455,7 +461,8 @@ * 如果有下级,获取所有的团队 */ myTeamVo.setMyTeamCnt(mallMembers.size()); - myTeamVo.setMyTeamBalance(getTeamBalance(mallMembers)); + myTeamVo.setMyTeamBalance(getTeamBalance(mallMembers).getMyTeamBalance()); + myTeamVo.setMyTeamCommission(getTeamBalance(mallMembers).getMyTeamCommission()); List<TeamListVo> teamListVos = MallMemberConversion.INSTANCE.entityToTeamListVos(mallMembers); teamListVos.forEach(item -> { @@ -465,10 +472,12 @@ if(CollUtil.isEmpty(mallMemberRefs)){ item.setMyTeamCnt(0); item.setMyTeamBalance(BigDecimal.ZERO); + item.setMyTeamCommission(BigDecimal.ZERO); }else{ item.setMyTeamCnt(mallMemberRefs.size()); //获取mallMembers的所有id - item.setMyTeamBalance(getTeamBalance(mallMemberRefs)); + item.setMyTeamBalance(getTeamBalance(mallMemberRefs).getMyTeamBalance()); + item.setMyTeamCommission(getTeamBalance(mallMemberRefs).getMyTeamCommission()); } }); myTeamVo.setTeam(teamListVos); @@ -485,15 +494,17 @@ * @param mallMembers 商城成员列表,用于计算总余额 * @return 团队的总余额,表示为BigDecimal类型 */ - private BigDecimal getTeamBalance(List<MallMember> mallMembers) { + private TeamListVo getTeamBalance(List<MallMember> mallMembers) { + TeamListVo teamListVo = new TeamListVo(); // 提取所有商城成员的ID,以便进行后续的钱包信息查询 List<Long> ids = mallMembers.stream().map(MallMember::getId).collect(Collectors.toList()); // 根据成员ID列表查询所有相关成员的钱包信息 List<MallMemberWallet> mallMemberWallets = mallMemberWalletMapper.selectList(new LambdaQueryWrapper<MallMemberWallet>().in(MallMemberWallet::getMemberId, ids)); - // 计算所有成员钱包余额的总和,并返回该总和 - return mallMemberWallets.stream().map(MallMemberWallet::getBalance).reduce(BigDecimal.ZERO, BigDecimal::add); + teamListVo.setMyTeamBalance(mallMemberWallets.stream().map(MallMemberWallet::getBalance).reduce(BigDecimal.ZERO, BigDecimal::add)); + teamListVo.setMyTeamCommission(mallMemberWallets.stream().map(MallMemberWallet::getCommission).reduce(BigDecimal.ZERO, BigDecimal::add)); + return teamListVo; } @Override @@ -587,35 +598,35 @@ throw new FebsException("资金密码错误"); } - walletService.reduceBalance(transferDto.getAmount(), loginMember.getId()); + walletService.reduceCommission(transferDto.getAmount(), loginMember.getId()); String orderNo = MallUtils.getOrderNum("HZ"); this.runVipMoneyFlowAdd( loginMember.getId(), mallMember.getId(), orderNo, - FlowTypeEnum.BALANCE.getValue(), - RunVipMoneyFlowTypeEnum.BALANCE_OUT_GIVE_FRIEND.getValue(), + FlowTypeEnum.COMMISSION.getValue(), + RunVipMoneyFlowTypeEnum.COMMISSION_OUT_GIVE_FRIEND.getValue(), transferDto.getAmount().negate(), - StrUtil.format(RunVipMoneyFlowTypeEnum.BALANCE_OUT_GIVE_FRIEND.getDescription(),mallMember.getInviteId(),transferDto.getAmount()), + StrUtil.format(RunVipMoneyFlowTypeEnum.COMMISSION_OUT_GIVE_FRIEND.getDescription(),mallMember.getInviteId(),transferDto.getAmount()), YesOrNoEnum.YES.getValue() ); - walletService.addBalance(transferDto.getAmount(), mallMember.getId()); + walletService.addCommission(transferDto.getAmount(), mallMember.getId()); this.runVipMoneyFlowAdd( mallMember.getId(), loginMember.getId(), orderNo, - FlowTypeEnum.BALANCE.getValue(), - RunVipMoneyFlowTypeEnum.BALANCE_IN_GIVE_FRIEND.getValue(), + FlowTypeEnum.COMMISSION.getValue(), + RunVipMoneyFlowTypeEnum.COMMISSION_IN_GIVE_FRIEND.getValue(), transferDto.getAmount(), - StrUtil.format(RunVipMoneyFlowTypeEnum.BALANCE_IN_GIVE_FRIEND.getDescription(),loginMember.getInviteId(),transferDto.getAmount()), + StrUtil.format(RunVipMoneyFlowTypeEnum.COMMISSION_IN_GIVE_FRIEND.getDescription(),loginMember.getInviteId(),transferDto.getAmount()), YesOrNoEnum.YES.getValue() ); } @Override @Transactional(rollbackFor = Exception.class) - public void withdrawal(WithdrawalDto withdrawalDto) { + public void withdrawal(CommissionChangeDto withdrawalDto) { Long memberId = LoginUserUtil.getLoginUser().getId(); MallMember loginMember = this.baseMapper.selectById(memberId); /** @@ -634,15 +645,11 @@ throw new FebsException("资金密码错误"); } - MallMemberPayment mallMemberPayment = mallMemberPaymentMapper.selectById(withdrawalDto.getAddressId()); - if (mallMemberPayment == null) { - throw new FebsException("无效的提现地址"); - } BigDecimal minCnt = new BigDecimal( dataDictionaryCustomMapper.selectDicDataByTypeAndCode( RunVipDataDictionaryEnum.RUN_VIP_BALANCE_TO_COIN_MIN.getType(), RunVipDataDictionaryEnum.RUN_VIP_BALANCE_TO_COIN_MIN.getCode()).getValue() - ).setScale(4, BigDecimal.ROUND_DOWN); + ).setScale(4, RoundingMode.DOWN); if(minCnt.compareTo(withdrawalDto.getAmount()) > 0){ throw new FebsException(minCnt+"碳币起提"); } @@ -651,25 +658,84 @@ dataDictionaryCustomMapper.selectDicDataByTypeAndCode( RunVipDataDictionaryEnum.RUN_VIP_BALANCE_TO_COIN.getType(), RunVipDataDictionaryEnum.RUN_VIP_BALANCE_TO_COIN.getCode()).getValue() - ).setScale(2, BigDecimal.ROUND_DOWN); + ).setScale(2, RoundingMode.DOWN); + BigDecimal withdrawalAmount = withdrawalDto.getAmount().multiply(balanceToCoin).setScale(2, RoundingMode.DOWN); + if(BigDecimal.ZERO.compareTo(withdrawalAmount) >= 0){ + throw new FebsException("转换异常"); + } + + /** + * 减少碳币 + */ + walletService.reduceBalance(withdrawalDto.getAmount(), loginMember.getId()); + String orderNo = MallUtils.getOrderNum("BU"); + this.runVipMoneyFlowAdd( + loginMember.getId(), + loginMember.getId(), + orderNo, + FlowTypeEnum.BALANCE.getValue(), + RunVipMoneyFlowTypeEnum.BALANCE_OUT_COMMISSION.getValue(), + withdrawalDto.getAmount().negate(), + StrUtil.format(RunVipMoneyFlowTypeEnum.BALANCE_OUT_COMMISSION.getDescription(),withdrawalDto.getAmount(),withdrawalAmount), + YesOrNoEnum.YES.getValue() + ); + walletService.addCommission(withdrawalAmount, loginMember.getId()); + this.runVipMoneyFlowAdd( + loginMember.getId(), + loginMember.getId(), + orderNo, + FlowTypeEnum.COMMISSION.getValue(), + RunVipMoneyFlowTypeEnum.BALANCE_OUT_COMMISSION_IN.getValue(), + withdrawalAmount, + StrUtil.format(RunVipMoneyFlowTypeEnum.BALANCE_OUT_COMMISSION_IN.getDescription(),withdrawalDto.getAmount(),withdrawalAmount), + YesOrNoEnum.YES.getValue() + ); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void withdrawalU(WithdrawalDto withdrawalDto) { + Long memberId = LoginUserUtil.getLoginUser().getId(); + MallMember loginMember = this.baseMapper.selectById(memberId); + /** + * 用户的等级level是否允许USDT提现 + */ + RunVip runVip = runVipMapper.selectOne(new LambdaQueryWrapper<RunVip>().eq(RunVip::getVipCode, loginMember.getLevel())); + if(ObjectUtil.isEmpty(runVip) || runVip.getCommissionState() != YesOrNoEnum.YES.getValue()){ + throw new FebsException("请先升级会员"); + } + + if (StrUtil.isBlank(loginMember.getTradePassword())) { + throw new FebsException("未设置资金密码"); + } + + if (!loginMember.getTradePassword().equals(SecureUtil.md5(withdrawalDto.getTradePwd()))) { + throw new FebsException("资金密码错误"); + } + + MallMemberPayment mallMemberPayment = mallMemberPaymentMapper.selectById(withdrawalDto.getAddressId()); + if (mallMemberPayment == null) { + throw new FebsException("无效的提现地址"); + } BigDecimal balanceToCoinPercent = new BigDecimal( dataDictionaryCustomMapper.selectDicDataByTypeAndCode( RunVipDataDictionaryEnum.RUN_VIP_BALANCE_TO_COIN_PERCENT.getType(), RunVipDataDictionaryEnum.RUN_VIP_BALANCE_TO_COIN_PERCENT.getCode()).getValue() - ).setScale(2, BigDecimal.ROUND_DOWN); + ).setScale(2, RoundingMode.DOWN); - BigDecimal withdrawalAmount = withdrawalDto.getAmount().multiply(balanceToCoin).setScale(2, BigDecimal.ROUND_DOWN); + if(balanceToCoinPercent.compareTo(withdrawalDto.getAmount()) > 0){ + throw new FebsException("手续费不足"); + } BigDecimal fee = balanceToCoinPercent; -// BigDecimal fee = balanceToCoinPercent.multiply(withdrawalAmount).setScale(2, BigDecimal.ROUND_DOWN); - BigDecimal withdrawalAmountReal = withdrawalAmount.subtract(fee); + BigDecimal withdrawalAmountReal = withdrawalDto.getAmount().subtract(fee).setScale(2, RoundingMode.DOWN); if(BigDecimal.ZERO.compareTo(withdrawalAmountReal) >= 0){ - throw new FebsException(minCnt+"手续费不足"); + throw new FebsException("手续费不足"); } /** * 减少碳币,增加进行中提现记录 */ - walletService.reduceBalance(withdrawalDto.getAmount(), loginMember.getId()); + walletService.reduceCommission(withdrawalDto.getAmount(), loginMember.getId()); String orderNo = MallUtils.getOrderNum("TX"); MallMemberWithdraw withdraw = new MallMemberWithdraw(); @@ -687,10 +753,10 @@ loginMember.getId(), loginMember.getId(), orderNo, - FlowTypeEnum.BALANCE.getValue(), - RunVipMoneyFlowTypeEnum.BALANCE_OUT.getValue(), + FlowTypeEnum.COMMISSION.getValue(), + RunVipMoneyFlowTypeEnum.COMMISSION_OUT.getValue(), withdrawalDto.getAmount().negate(), - StrUtil.format(RunVipMoneyFlowTypeEnum.BALANCE_OUT.getDescription(),withdrawalDto.getAmount(),withdrawalAmount,fee), + StrUtil.format(RunVipMoneyFlowTypeEnum.COMMISSION_OUT.getDescription(),withdrawalDto.getAmount(),fee), YesOrNoEnum.ING.getValue() ); -- Gitblit v1.9.1