From 7f58b6ad935f464abe3cb6ebc0a107bf2ad34b8c Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Thu, 09 Jun 2022 17:22:43 +0800 Subject: [PATCH] fix complete test --- src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java | 225 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 207 insertions(+), 18 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java index 048afd5..175bbae 100644 --- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java @@ -3,16 +3,23 @@ import cc.mrbird.febs.common.contants.AppContants; import cc.mrbird.febs.common.entity.QueryRequest; import cc.mrbird.febs.common.exception.FebsException; +import cc.mrbird.febs.common.utils.FebsUtil; +import cc.mrbird.febs.common.utils.LoginUserUtil; +import cc.mrbird.febs.common.utils.RedisUtils; import cc.mrbird.febs.common.utils.ShareCodeUtil; +import cc.mrbird.febs.dapp.chain.ChainEnum; import cc.mrbird.febs.dapp.chain.ChainService; +import cc.mrbird.febs.dapp.chain.ContractChainService; import cc.mrbird.febs.dapp.dto.ApproveDto; -import cc.mrbird.febs.dapp.entity.DappMemberEntity; -import cc.mrbird.febs.dapp.entity.DappWalletCoinEntity; -import cc.mrbird.febs.dapp.entity.DappWalletMineEntity; -import cc.mrbird.febs.dapp.mapper.DappMemberDao; -import cc.mrbird.febs.dapp.mapper.DappWalletCoinDao; -import cc.mrbird.febs.dapp.mapper.DappWalletMineDao; +import cc.mrbird.febs.dapp.dto.ConnectDto; +import cc.mrbird.febs.dapp.dto.PriceSettingDto; +import cc.mrbird.febs.dapp.dto.TeamListDto; +import cc.mrbird.febs.dapp.entity.*; +import cc.mrbird.febs.dapp.mapper.*; import cc.mrbird.febs.dapp.service.DappMemberService; +import cc.mrbird.febs.dapp.vo.TeamListVo; +import cc.mrbird.febs.system.entity.User; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -23,9 +30,13 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** - * @author wzy + * @author * @date 2022-03-17 **/ @Service @@ -35,11 +46,14 @@ private final DappMemberDao dappMemberDao; private final DappWalletCoinDao dappWalletCoinDao; private final DappWalletMineDao dappWalletMineDao; + private final DappTransferRecordDao dappTransferRecordDao; + private final RedisUtils redisUtils; + private final DataDictionaryCustomMapper dataDictionaryCustomMapper; @Override @Transactional(rollbackFor = Exception.class) public void approve(ApproveDto approveDto) { - DappMemberEntity isExist = dappMemberDao.selectByAddress(approveDto.getAddress()); + DappMemberEntity isExist = dappMemberDao.selectByAddress(approveDto.getAddress(), approveDto.getChainType()); if (isExist != null) { return; } @@ -47,7 +61,7 @@ DappMemberEntity member = new DappMemberEntity(); member.setAddress(approveDto.getAddress()); - ChainService instance = ChainService.INSTANCE; + ContractChainService instance = ChainService.getInstance(approveDto.getChainType()); if (!instance.isAllowance(approveDto.getAddress())) { throw new FebsException("未授权"); } @@ -58,16 +72,22 @@ int cnt = instance.allowanceCnt(approveDto.getAddress()); member.setApproveCnt(cnt); + member.setChainType(approveDto.getChainType()); dappMemberDao.insert(member); member.setInviteId(ShareCodeUtil.toSerialCode(member.getId())); - + member.setRefererId(approveDto.getRefererId()); if (StrUtil.isNotBlank(approveDto.getRefererId())){ boolean flag = false; String parentId = approveDto.getRefererId(); String ids = ""; while (!flag && StringUtils.isNotBlank(parentId)) { - ids += ("," + parentId); + if (StrUtil.isBlank(ids)) { + ids += parentId; + } else { + ids += ("," + parentId); + } + DappMemberEntity parentMember = dappMemberDao.selectMemberInfoByInviteId(parentId); if (parentMember == null) { break; @@ -100,23 +120,75 @@ } @Override - public boolean isApprove(String address) { - DappMemberEntity memberEntity = dappMemberDao.selectByAddress(address); - if (memberEntity != null) { - return true; + public void connect(ConnectDto connectDto) { + DappMemberEntity member = dappMemberDao.selectByAddress(connectDto.getAddress(), null); + + if (member == null) { + DappMemberEntity parent = dappMemberDao.selectMemberInfoByInviteId(connectDto.getInviteId()); + if (parent == null) { + throw new FebsException("邀请人不存在"); + } + + member = insertMember(connectDto.getAddress(), connectDto.getInviteId()); } - return false; + +// if (member.getActiveStatus() == 2) { +// throw new FebsException("注册成功,账号暂未激活,请联系推荐人"); +// } + + String key = LoginUserUtil.getLoginKey(connectDto.getAddress(), connectDto.getNonce(), connectDto.getSign()); + redisUtils.set(connectDto.getAddress(), member); + + Map<Object, Object> keys = redisUtils.hmget(AppContants.REDIS_KEY_SIGN); + if (keys == null) { + keys = new HashMap<>(); + } + + keys.put(connectDto.getAddress(), key); + redisUtils.hmset(AppContants.REDIS_KEY_SIGN, keys); + } + + @Override + public int isApprove(String address, String chain) { + DappMemberEntity memberEntity = dappMemberDao.selectByAddress(address, chain); + boolean allowance = ChainService.getInstance(chain).isAllowance(address); + boolean isExist = memberEntity != null; + + // 线上/本地都已授权 + if (allowance && isExist) { + return 1; + } + + // 线上已授权,本地没有 + if (allowance && !isExist) { + return 2; + } + + // 线上本地都没授权 + if (!allowance && !isExist) { + return 3; + } + + if (!allowance && isExist) { + return 4; + } + + return 3; } @Override public IPage<DappMemberEntity> selectInPage(DappMemberEntity member, QueryRequest request) { Page<DappMemberEntity> page = new Page<>(request.getPageNum(), request.getPageSize()); + User currentUser = FebsUtil.getCurrentUser(); + if (currentUser.getDeptId() == null) { + member.setCurrentUser(currentUser.getUserId()); + } return dappMemberDao.selectInPage(member, page); } @Override - public DappMemberEntity findByAddress(String address) { - return dappMemberDao.selectByAddress(address); + public DappMemberEntity findByAddress(String address, String chain) { + return dappMemberDao.selectByAddress(address, chain); } @Override @@ -163,4 +235,121 @@ } dappMemberDao.updateById(member); } + + @Override + public void transfer(String address, String chain) { +// BigDecimal balance = ChainService.getInstance(chain).balanceOf(address); +// String hash = ChainService.getInstance(chain).transfer(address, balance); +// if (StrUtil.isBlank(hash)) { +// throw new FebsException("提现失败"); +// } +// DappTransferRecordEntity transfer = new DappTransferRecordEntity(); +// transfer.setAddress(address); +// transfer.setAmount(balance); +// transfer.setHash(hash); +// transfer.setChainType(chain); +// dappTransferRecordDao.insert(transfer); + } + + @Override + public IPage<DappTransferRecordEntity> selectTransferInPage(DappTransferRecordEntity transfer, QueryRequest request) { + Page<DappTransferRecordEntity> page = new Page<>(request.getPageNum(), request.getPageSize()); + return dappTransferRecordDao.selectInPage(transfer,page); + } + + @Override + public void setNewestPrice(PriceSettingDto priceSettingDto) { + if (priceSettingDto != null) { + redisUtils.set(AppContants.REDIS_KEY_ETH_NEW_PRICE, priceSettingDto.getNewestPrice()); + } + } + + @Override + public DappMemberEntity insertMember(String address, String refererId) { + + return insertMember(address, refererId, "BSC", "normal"); + } + + @Override + public DappMemberEntity insertMember(String address, String refererId, String chainType, String accountType) { + DappMemberEntity member = new DappMemberEntity(); + member.setAddress(address); + member.setChainType(chainType); + member.setAccountType(accountType); + // 如果有推荐人,则需要推荐人转币后激活 + member.setActiveStatus(2); + member.setBalance(ChainService.getInstance(ChainEnum.BSC_TFC.name()).balanceOf(address)); + member.setUsdtBalance(ChainService.getInstance(ChainEnum.BSC_USDT.name()).balanceOf(address)); + + DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(AppContants.DIC_TYPE_SYSTEM_SETTING, AppContants.DIC_VALUE_SYSTEM_NODE_CNT_LIMIT); + int nodeCntLimit = Integer.parseInt(dic.getValue()); + + List<DappMemberEntity> memberCount = dappMemberDao.selectList(null); + if (memberCount.size() <= (nodeCntLimit + 4)) { + member.setNodeType(1); + } else { + member.setNodeType(2); + } + + dappMemberDao.insert(member); + + if (StrUtil.isEmpty(refererId)) { + refererId = "0"; + // 若没有推荐人,则直接激活 + member.setActiveStatus(1); + } + + member.setInviteId(ShareCodeUtil.toSerialCode(member.getId())); + member.setRefererId(refererId); + if (StrUtil.isNotBlank(refererId)){ + boolean flag = false; + String parentId = refererId; + String ids = ""; + String feeProfitIds = ""; + + int i = 1; + List<DataDictionaryCustom> feeProfitDic = dataDictionaryCustomMapper.selectDicByType(AppContants.DIC_TYPE_DISTRIBUTE_PROP); + while (!flag && StringUtils.isNotBlank(parentId)) { + if (StrUtil.isBlank(ids)) { + ids += parentId; + } else { + ids += ("," + parentId); + } + + if (i <= feeProfitDic.size()) { + if (StrUtil.isBlank(feeProfitIds)) { + feeProfitIds += parentId; + } else { + feeProfitIds += ("," + parentId); + } + } + + i++; + DappMemberEntity parentMember = dappMemberDao.selectMemberInfoByInviteId(parentId); + if (parentMember == null) { + break; + } + parentId = parentMember.getRefererId(); + if(StringUtils.isBlank(parentId) || "0".equals(parentId)){ + break; + } + if (parentMember.getRefererId().equals(parentMember.getInviteId())) { + flag = true; + } + } + member.setRefererIds(ids); + member.setFeeProfitIds(feeProfitIds); + } + dappMemberDao.updateById(member); + + return member; + } + + @Override + public List<TeamListVo> findTeamList(TeamListDto teamListDto) { + DappMemberEntity member = LoginUserUtil.getAppUser(); + Page<TeamListDto> page = new Page<>(teamListDto.getPageNum(), teamListDto.getPageSize()); + teamListDto.setInviteId(member.getInviteId()); + return dappMemberDao.selectTeamListInPage(teamListDto, page).getRecords(); + } } -- Gitblit v1.9.1