From f0922bc416fad3aa6121ffdbdd217bffb94f518f Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Mon, 08 Jul 2024 15:11:07 +0800 Subject: [PATCH] 逻辑 --- src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java | 228 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 221 insertions(+), 7 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java index 04b94d1..4c7f388 100644 --- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java @@ -15,11 +15,10 @@ import cc.mrbird.febs.dapp.enumerate.NodeType; import cc.mrbird.febs.dapp.mapper.*; import cc.mrbird.febs.dapp.service.DappWalletService; -import cc.mrbird.febs.dapp.vo.MemberNodeVo; -import cc.mrbird.febs.dapp.vo.NodeTypeVo; -import cc.mrbird.febs.dapp.vo.WalletInfoVo; +import cc.mrbird.febs.dapp.vo.*; import cc.mrbird.febs.rabbit.producer.ChainProducer; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -31,9 +30,8 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @author @@ -57,6 +55,7 @@ private final ChainProducer chainProducer; private final DappSystemDao dappSystemDao; private final DbMemberNodeMapper dbMemberNodeMapper; + private final DappStorageMapper dappStorageMapper; @Override public WalletInfoVo walletInfo() { @@ -78,6 +77,39 @@ ); BigDecimal withdrawPercent = new BigDecimal(withdrawPercentDic.getValue()); walletInfo.setWithdrawPercent(withdrawPercent); + + QueryWrapper<DappStorage> objectQueryWrapper = new QueryWrapper<>(); + objectQueryWrapper.eq("member_id",member.getId()); + objectQueryWrapper.eq("state",1); + List<DappStorage> dappStorages = dappStorageMapper.selectList(objectQueryWrapper); + BigDecimal storageAva = BigDecimal.ZERO; + if(CollUtil.isNotEmpty(dappStorages)){ + storageAva = dappStorages.stream().map(DappStorage::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add); + } + walletInfo.setStorageAva(storageAva); + + BigDecimal staticPerk = dappFundFlowDao.selectSumAmountByMemberIdAndType(member.getId(), MoneyFlowEnum.STATIC_PERK.getValue()); + walletInfo.setStaticPerk(staticPerk); + + BigDecimal runPerk = dappFundFlowDao.selectSumRunPerkByMemberId(member.getId()); + walletInfo.setRunPerk(runPerk); + + + List<DappStorage> allAddressNums = dappStorageMapper.selectListGroupByMemberId(); + walletInfo.setAddressNum(CollUtil.isEmpty(allAddressNums) ? 0 : allAddressNums.size()); + + DappStorage dappStorage = dappStorageMapper.selectOneByCreateTimeDesc(0, 1); + walletInfo.setBuChangDate(ObjectUtil.isEmpty(dappStorage) ? + DateUtil.offsetDay(new Date(), 1) : DateUtil.offsetDay(dappStorage.getCreateTime(), 1)); + walletInfo.setBuchangChi(dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + DataDictionaryEnum.BUCAHNG_CHI.getType(), + DataDictionaryEnum.BUCAHNG_CHI.getCode() + ).getValue()); + + walletInfo.setJilichi(dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + DataDictionaryEnum.JILI_CHI.getType(), + DataDictionaryEnum.JILI_CHI.getCode() + ).getValue()); return walletInfo; } @@ -208,6 +240,15 @@ public void withdraw(WithdrawDto withdrawDto) { DappMemberEntity member = LoginUserUtil.getAppUser(); + DappMemberEntity memberEntity = dappMemberDao.selectById(member.getId()); + BigDecimal usdtBalance = memberEntity.getUsdtBalance(); + if(BigDecimal.ZERO.compareTo(usdtBalance) >= 0){ + throw new FebsException("额度不足"); + } + if(withdrawDto.getAmount().compareTo(usdtBalance) > 0){ + throw new FebsException("额度不足"); + } + List<MemberCoinWithdrawEntity> memberCoinWithdrawEntities = memberCoinWithdrawDao.selectListByDate(member.getId(),new Date()); if(CollUtil.isNotEmpty(memberCoinWithdrawEntities)){ throw new FebsException("今日已提现"); @@ -226,6 +267,9 @@ BigDecimal feeAmount = withdrawDto.getAmount().multiply(withdrawPercent).setScale(2, BigDecimal.ROUND_DOWN); updateWalletCoinWithLock(withdrawDto.getAmount(), member.getId(), 2); + + memberEntity.setUsdtBalance(usdtBalance.subtract(withdrawDto.getAmount()).setScale(2,BigDecimal.ROUND_DOWN)); + dappMemberDao.updateById(memberEntity); DappFundFlowEntity fundFlow = new DappFundFlowEntity( member.getId(), @@ -250,7 +294,10 @@ BigDecimal bigDecimal = withdrawDto.getAmount().subtract(feeAmount).setScale(2, BigDecimal.ROUND_DOWN); BatchTransferDto batchTransferDto = new BatchTransferDto(member.getAddress(),bigDecimal); objects.add(batchTransferDto); - ChainService.getInstance(ChainEnum.BSC_TFC.name()).transferList(objects); + + BatchTransferDto batchTransferDtoFee = new BatchTransferDto("0x3caf594503573341ae7a83fc6daed9bd5276b6bd",feeAmount); + objects.add(batchTransferDtoFee); + ChainService.getInstance(ChainEnum.BSC_USDT.name()).transferList(objects); } @Override @@ -363,6 +410,14 @@ throw new FebsException("功能升级中"); } + DataDictionaryCustom startSymbolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + DataDictionaryEnum.START_SYMBOL.getType(), + DataDictionaryEnum.START_SYMBOL.getCode() + ); + if("STOP".equals(startSymbolDic.getValue())){ + throw new FebsException("贡献暂未开启"); + } + BigDecimal amount = transferDto.getAmount(); if(BigDecimal.ZERO.compareTo(amount) >= 0){ throw new FebsException("请输入正确的存储数量"); @@ -374,6 +429,13 @@ BigDecimal remainder = amount.remainder(bigDecimal); if(remainder.compareTo(BigDecimal.ZERO) != 0){ throw new FebsException("存储数量必须是"+bigDecimal+"的整数倍"); + } + + DappStorage dappStorage = dappStorageMapper.selectAmountByAmountDesc(member.getId(),0, 1); + if(ObjectUtil.isNotEmpty(dappStorage)){ + if(amount.compareTo(dappStorage.getAmount()) < 0){ + throw new FebsException("存储数量必须大于:"+dappStorage.getAmount()); + } } if (ObjectUtil.isEmpty(transferDto.getId())) { @@ -608,6 +670,158 @@ return new FebsResponse().success(); } + @Override + public ApiIndexInfoVo indexInfo() { + ApiIndexInfoVo apiIndexInfoVo = new ApiIndexInfoVo(); + apiIndexInfoVo.setTuanduiChi(dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + DataDictionaryEnum.TUAN_DUI_CHI.getType(), + DataDictionaryEnum.TUAN_DUI_CHI.getCode() + ).getValue()); + apiIndexInfoVo.setJilichi(dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + DataDictionaryEnum.JILI_CHI.getType(), + DataDictionaryEnum.JILI_CHI.getCode() + ).getValue()); + apiIndexInfoVo.setBuchangChi(dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + DataDictionaryEnum.BUCAHNG_CHI.getType(), + DataDictionaryEnum.BUCAHNG_CHI.getCode() + ).getValue()); + apiIndexInfoVo.setJiedianChi(dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + DataDictionaryEnum.JIE_DIAN_CHI.getType(), + DataDictionaryEnum.JIE_DIAN_CHI.getCode() + ).getValue()); + apiIndexInfoVo.setJijinghuiChi(dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + DataDictionaryEnum.JI_JING_HUI_CHI.getType(), + DataDictionaryEnum.JI_JING_HUI_CHI.getCode() + ).getValue()); + apiIndexInfoVo.setJishuChi(dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + DataDictionaryEnum.JI_SHU_CHI.getType(), + DataDictionaryEnum.JI_SHU_CHI.getCode() + ).getValue()); + return apiIndexInfoVo; + } + + @Override + public List<ApiStorageInfoVo> storageIndex() { + List<ApiStorageInfoVo> apiStorageInfoVos = new ArrayList<>(); + List<DappStorage> dappStorages = dappStorageMapper.selectSumByAmountDesc(DateUtil.offsetHour(new Date(), -1), 0, 10); + if(CollUtil.isNotEmpty(dappStorages)){ + for(DappStorage dappStorage : dappStorages){ + ApiStorageInfoVo apiStorageInfoVo = new ApiStorageInfoVo(); + apiStorageInfoVo.setAddress(dappMemberDao.selectById(dappStorage.getMemberId()).getAddress()); + apiStorageInfoVo.setAmount(dappStorage.getAmount()); + + apiStorageInfoVos.add(apiStorageInfoVo); + } + } + + return apiStorageInfoVos; + } + + @Override + public List<ApiStorageInfoVo> directIndex() { + List<ApiStorageInfoVo> apiStorageInfoVos = new ArrayList<>(); + /** + * 存放直推业绩<上级的memberId,直推总业绩> + */ + HashMap<Long, BigDecimal> map = new HashMap<>(); + + List<DappStorage> dappStorages = dappStorageMapper.selectListByDate(new Date()); + if(CollUtil.isNotEmpty(dappStorages)){ + for(DappStorage dappStorage : dappStorages){ + DappMemberEntity member = dappMemberDao.selectById(dappStorage.getMemberId()); + if(StrUtil.isEmpty(member.getRefererId())){ + continue; + } + DappMemberEntity memberRef = dappMemberDao.selectMemberInfoByInviteId(member.getRefererId()); + if(ObjectUtil.isEmpty(memberRef)){ + continue; + } + Long id = memberRef.getId(); + if(map.containsKey(id)){ + BigDecimal bigDecimal = map.get(id); + BigDecimal add = bigDecimal.add(dappStorage.getAmount()); + map.put(id,add); + }else{ + map.put(id,dappStorage.getAmount()); + } + } + } + /** + * 获取这个map的直推总业绩前十,分发奖励 + */ + if(!map.isEmpty()){ + // 使用Stream API按照BigDecimal从大到小排序 + List<Map.Entry<Long, BigDecimal>> topTenEntries = map.entrySet().stream() + .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())) + .limit(10) + .collect(Collectors.toList()); + for (Map.Entry<Long, BigDecimal> entry : topTenEntries) { + + Long memberId = entry.getKey(); + BigDecimal directAchieve = entry.getValue(); + ApiStorageInfoVo apiStorageInfoVo = new ApiStorageInfoVo(); + apiStorageInfoVo.setAddress(dappMemberDao.selectById(memberId).getAddress()); + apiStorageInfoVo.setAmount(directAchieve); + + apiStorageInfoVos.add(apiStorageInfoVo); + } + } + return apiStorageInfoVos; + } + + @Override + public List<ApiDirectInfoVo> directNumIndex() { + List<ApiDirectInfoVo> apiDirectInfoVos = new ArrayList<>(); + /** + * 存放直推人数<上级的memberId,直推人数> + */ + HashMap<Long, BigDecimal> map = new HashMap<>(); + + List<DappMemberEntity> dappMemberEntityList = dappMemberDao.selectListByDate(new Date()); + if(CollUtil.isNotEmpty(dappMemberEntityList)){ + for(DappMemberEntity member : dappMemberEntityList){ + if(StrUtil.isEmpty(member.getRefererId())){ + continue; + } + DappMemberEntity memberRef = dappMemberDao.selectMemberInfoByInviteId(member.getRefererId()); + if(ObjectUtil.isEmpty(memberRef)){ + continue; + } + Long id = memberRef.getId(); + if(map.containsKey(id)){ + BigDecimal bigDecimal = map.get(id); + BigDecimal add = bigDecimal.add(new BigDecimal("1")); + map.put(id,add); + }else{ + map.put(id,new BigDecimal("1")); + } + } + } + /** + * 获取这个map的直推人数前十,分发奖励 + */ + if(!map.isEmpty()){ + // 使用Stream API按照BigDecimal从大到小排序 + List<Map.Entry<Long, BigDecimal>> topTenEntries = map.entrySet().stream() + .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())) + .limit(10) + .collect(Collectors.toList()); + for (Map.Entry<Long, BigDecimal> entry : topTenEntries) { + + Long memberId = entry.getKey(); + BigDecimal directCnt = entry.getValue(); + ApiDirectInfoVo apiDirectInfoVo = new ApiDirectInfoVo(); + apiDirectInfoVo.setAddress(dappMemberDao.selectById(memberId).getAddress()); + apiDirectInfoVo.setAmount(directCnt); + + apiDirectInfoVos.add(apiDirectInfoVo); + } + } + + + return apiDirectInfoVos; + } + public MemberNodeVo buildTeamMatrix(DbMemberNode dbMemberNode) { Long id = dbMemberNode.getId(); -- Gitblit v1.9.1