From afe2e9a2da152a9b1a54d88b7637e811bf298749 Mon Sep 17 00:00:00 2001 From: wzy <wzy19931122ai@163.com> Date: Sat, 27 Aug 2022 00:39:49 +0800 Subject: [PATCH] finish matrix profit --- src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletCoinDao.java | 2 src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java | 4 + src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java | 40 +++++++++++++ src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java | 49 ++++++---------- src/main/java/cc/mrbird/febs/common/advise/MyResponseBodyAdvise.java | 1 src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java | 14 +--- src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java | 2 src/main/java/cc/mrbird/febs/dapp/entity/DappMineDataEntity.java | 5 + src/main/java/cc/mrbird/febs/job/MatrixTreeInit.java | 1 src/main/java/cc/mrbird/febs/dapp/mapper/DappSystemDao.java | 2 src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java | 8 -- src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java | 7 ++ src/main/resources/mapper/dapp/DappSystemDao.xml | 5 + src/main/resources/mapper/dapp/DappWalletCoinDao.xml | 8 ++ 14 files changed, 96 insertions(+), 52 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/common/advise/MyResponseBodyAdvise.java b/src/main/java/cc/mrbird/febs/common/advise/MyResponseBodyAdvise.java index 53c9ed8..bfa20fd 100644 --- a/src/main/java/cc/mrbird/febs/common/advise/MyResponseBodyAdvise.java +++ b/src/main/java/cc/mrbird/febs/common/advise/MyResponseBodyAdvise.java @@ -31,7 +31,6 @@ @Override public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) { if (!AppContants.ENCRYPT_METHOD.contains(methodParameter.getMethod().getName()) || isDebug) { - System.out.println(1111111); return o; } diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java index 30a2062..f98420a 100644 --- a/src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java +++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java @@ -47,7 +47,7 @@ private BigDecimal amount; /** - * 类型 1-买入 2-矩阵收益 3-直推收益 + * 类型 1-买入 2-矩阵收益 3-直推收益 4-保险池 */ private Integer type; diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappMineDataEntity.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappMineDataEntity.java index 6518064..176c99a 100644 --- a/src/main/java/cc/mrbird/febs/dapp/entity/DappMineDataEntity.java +++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappMineDataEntity.java @@ -20,4 +20,9 @@ private Integer partnerCnt; private BigDecimal partnerIncome; + + /** + * 保险池 + */ + private BigDecimal safePool; } diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappSystemDao.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappSystemDao.java index a93f511..054da1f 100644 --- a/src/main/java/cc/mrbird/febs/dapp/mapper/DappSystemDao.java +++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappSystemDao.java @@ -1,9 +1,11 @@ package cc.mrbird.febs.dapp.mapper; import cc.mrbird.febs.dapp.entity.DappMineDataEntity; +import org.apache.ibatis.annotations.Param; public interface DappSystemDao { DappMineDataEntity selectMineDataForOne(); + int updateMineData(@Param("record") DappMineDataEntity dappMineDataEntity); } diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletCoinDao.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletCoinDao.java index efbdb75..2e5dc89 100644 --- a/src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletCoinDao.java +++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletCoinDao.java @@ -11,4 +11,6 @@ DappWalletCoinEntity selectByMemberId(@Param("memberId") Long memberId); IPage<DappWalletCoinEntity> selectInPage(@Param("record") DappWalletCoinEntity walletCoin, Page<DappWalletCoinEntity> page); + + int updateWithLock(@Param("record") DappWalletCoinEntity dappWalletCoinEntity); } diff --git a/src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java b/src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java index 6955a64..77f3653 100644 --- a/src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java +++ b/src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java @@ -57,4 +57,11 @@ boolean hasProfit(String address); void achieveTree(Long memberId); + + /** + * 投入收益 + * + * @param isReIn + */ + void putIntoProfit(Long memberId, int isReIn); } diff --git a/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java b/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java index b5cf7e0..df88832 100644 --- a/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java +++ b/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java @@ -45,6 +45,8 @@ List<ActiveNftListVo> findUnActiveNftList(); - void withdraw(@RequestBody WithdrawDto withdrawDto); + void withdraw(WithdrawDto withdrawDto); + + void updateWalletCoinWithLock(BigDecimal amount, Long memberId); } diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java index 46751a5..0e79963 100644 --- a/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java +++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java @@ -100,16 +100,10 @@ } OnlineTransferUtil.addTransferRecord(e.from, e.to, amount, e.log.getTransactionHash(), DappTransferRecordEntity.TRANSFER_SOURCE_FLAG_APPLICATION, "USDT"); + fundFlow.setAmount(fundFlow.getAmount().negate()); // 更改状态为已同步 fundFlow.setStatus(2); dappFundFlowDao.updateById(fundFlow); - - synchronized (this) { - DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(fundFlow.getMemberId()); - walletCoin.setTotalAmount(walletCoin.getTotalAmount().add(amount)); - walletCoin.setAvailableAmount(walletCoin.getAvailableAmount().add(amount)); - dappWalletCoinDao.updateById(walletCoin); - } chainProducer.sendAchieveTreeMsg(fundFlow.getMemberId()); } 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 40aae19..2511380 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 @@ -137,8 +137,10 @@ if (child.size() == 6) { throw new FebsException("Invite Code is Invalid"); } + } else { + connectDto.setInviteId(null); } - member = insertMember(connectDto.getAddress(), null); + member = insertMember(connectDto.getAddress(), connectDto.getInviteId()); } String key = LoginUserUtil.getLoginKey(connectDto.getAddress(), connectDto.getNonce(), connectDto.getSign()); @@ -282,8 +284,6 @@ 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)); dappMemberDao.insert(member); @@ -303,19 +303,12 @@ boolean flag = false; String parentId = refererId; String ids = ""; - String feeProfitIds = ""; while (!flag && StringUtils.isNotBlank(parentId)) { if (StrUtil.isBlank(ids)) { ids += parentId; } else { ids += ("," + parentId); - } - - if (StrUtil.isBlank(feeProfitIds)) { - feeProfitIds += parentId; - } else { - feeProfitIds += ("," + parentId); } DappMemberEntity parentMember = dappMemberDao.selectMemberInfoByInviteId(parentId); @@ -331,7 +324,6 @@ } } member.setRefererIds(ids); - member.setFeeProfitIds(feeProfitIds); } dappMemberDao.updateById(member); diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java index 21ccecd..19e4a35 100644 --- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java @@ -11,6 +11,7 @@ import cc.mrbird.febs.dapp.enumerate.CardPeriod; import cc.mrbird.febs.dapp.mapper.*; import cc.mrbird.febs.dapp.service.DappSystemService; +import cc.mrbird.febs.dapp.service.DappWalletService; import cc.mrbird.febs.dapp.utils.OnlineTransferUtil; import cc.mrbird.febs.dapp.vo.RedisTransferPoolVo; import cc.mrbird.febs.dapp.vo.SlipSettingVo; @@ -66,6 +67,7 @@ private final DappAchieveTreeDao dappAchieveTreeDao; private final DappAchieveMemberTreeDao dappAchieveMemberTreeDao; + private final DappWalletService dappWalletService; @Override @@ -685,6 +687,11 @@ } dappAchieveMemberTreeDao.insert(achieveMemberTree); + // 激活用户状态 + member.setActiveStatus(1); + dappMemberDao.updateById(member); + + putIntoProfit(memberId, 2); if (parentNode == null) { return; } @@ -733,10 +740,43 @@ dappAchieveMemberTreeDao.resetMatrixTree(memberId); dappAchieveMemberTreeDao.reentryMoney(memberId); + putIntoProfit(memberId, 1); DappAchieveMemberTreeEntity bottomNode = dappAchieveMemberTreeDao.selectNodeByDeep(memberId, 3); if (bottomNode != null) { finishMatrixTree(bottomNode.getTopNode()); } } } + + @Override + public void putIntoProfit(Long memberId, int isReIn) { + DappMemberEntity member = dappMemberDao.selectById(memberId); + DappMemberEntity parent = dappMemberDao.selectMemberInfoByInviteId(member.getRefererId()); + + if (parent != null) { + BigDecimal directProfit = new BigDecimal("100").multiply(new BigDecimal("0.15")); + dappWalletService.updateWalletCoinWithLock(directProfit, parent.getId()); + + DappFundFlowEntity fundFlow = new DappFundFlowEntity(parent.getId(), directProfit, 3, 2, null, null); + dappFundFlowDao.insert(fundFlow); + } + + // 如果是复投的,则需奖励 + if (isReIn == 1) { + dappWalletService.updateWalletCoinWithLock(new BigDecimal(190), member.getId()); + + DappFundFlowEntity matrixProfitFlow = new DappFundFlowEntity(memberId, new BigDecimal("190"), 2, 2, null, null); + dappFundFlowDao.insert(matrixProfitFlow); + + DappFundFlowEntity rePutInFlow = new DappFundFlowEntity(memberId, new BigDecimal("100").negate(), 1, 2, null, null); + dappFundFlowDao.insert(rePutInFlow); + + DappFundFlowEntity safePoolFlow = new DappFundFlowEntity(memberId, new BigDecimal("10").negate(), 4, 2, null, null); + dappFundFlowDao.insert(safePoolFlow); + + DappMineDataEntity mineData = dappSystemDao.selectMineDataForOne(); + mineData.setSafePool(mineData.getSafePool().add(BigDecimal.TEN)); + dappSystemDao.updateMineData(mineData); + } + } } 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 22af2e1..0c487d5 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 @@ -13,7 +13,6 @@ import cc.mrbird.febs.dapp.dto.*; import cc.mrbird.febs.dapp.entity.*; import cc.mrbird.febs.dapp.mapper.*; -import cc.mrbird.febs.dapp.service.DappSystemService; import cc.mrbird.febs.dapp.service.DappWalletService; import cc.mrbird.febs.dapp.utils.BoxUtil; import cc.mrbird.febs.dapp.vo.ActiveNftListVo; @@ -53,7 +52,6 @@ private final DappAccountMoneyChangeDao dappAccountMoneyChangeDao; private final RedisUtils redisUtils; private final DataDictionaryCustomMapper dataDictionaryCustomMapper; - private final DappSystemService dappSystemService; private final DappNftActivationDao dappNftActivationDao; private final ChainProducer chainProducer; @@ -228,12 +226,10 @@ if (transferDto.getAmount().compareTo(walletCoin.getAvailableAmount()) > 0) { throw new FebsException("Balance Not Enough"); } - walletCoin.setTotalAmount(walletCoin.getTotalAmount().subtract(transferDto.getAmount())); - walletCoin.setAvailableAmount(walletCoin.getAvailableAmount().subtract(transferDto.getAmount())); - dappWalletCoinDao.updateById(walletCoin); + updateWalletCoinWithLock(transferDto.getAmount().negate(), member.getId()); - DappFundFlowEntity fundFlow = new DappFundFlowEntity(member.getId(), transferDto.getAmount(), 1, 2, transferDto.getFee(), transferDto.getTxHash()); + DappFundFlowEntity fundFlow = new DappFundFlowEntity(member.getId(), transferDto.getAmount().negate(), 1, 2, transferDto.getFee(), transferDto.getTxHash()); dappFundFlowDao.insert(fundFlow); chainProducer.sendAchieveTreeMsg(member.getId()); @@ -260,30 +256,7 @@ @Override public Map<String, BigDecimal> calPrice(PriceDto priceDto) { - DappMemberEntity member = LoginUserUtil.getAppUser(); - - if (!dappSystemService.systemHasStart()) { - HashMap<String, BigDecimal> map = new HashMap<>(); - map.put("x", new BigDecimal("0.05")); - map.put("y", new BigDecimal("0.05")); - return map; - } - - ContractChainService tfcInstance = ChainService.getInstance(ChainEnum.BSC_TFC.name()); - // u剩余数量 - BigDecimal sourceU = ChainService.getInstance(ChainEnum.BSC_USDT.name()).balanceOf(ChainEnum.BSC_USDT_SOURCE.getAddress()); - // 源池代币剩余数量 - BigDecimal sourceCoin = tfcInstance.balanceOf(ChainEnum.BSC_USDT_SOURCE.getAddress()); - // 用户卖出数量 - BigDecimal coin = priceDto.getAmount(); - BigDecimal x = sourceU.divide(sourceCoin, tfcInstance.decimals(), RoundingMode.HALF_UP); - BigDecimal y = sourceU.divide(sourceCoin.add(coin), tfcInstance.decimals(), RoundingMode.HALF_UP); - - log.info("购买价格:{}, 出卖价格:{}", x, y); - HashMap<String, BigDecimal> map = new HashMap<>(); - map.put("x", x); - map.put("y", y); - return map; + return null; } @Override @@ -406,4 +379,20 @@ public void withdraw(WithdrawDto withdrawDto) { } + + @Override + public void updateWalletCoinWithLock(BigDecimal amount, Long memberId) { + boolean isSuccess = false; + while(!isSuccess) { + DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(memberId); + + walletCoin.setTotalAmount(walletCoin.getTotalAmount().add(amount)); + walletCoin.setAvailableAmount(walletCoin.getAvailableAmount().add(amount)); + + int i = dappWalletCoinDao.updateWithLock(walletCoin); + if (i > 0) { + isSuccess = true; + } + } + } } diff --git a/src/main/java/cc/mrbird/febs/job/MatrixTreeInit.java b/src/main/java/cc/mrbird/febs/job/MatrixTreeInit.java index 69991c6..1b842c4 100644 --- a/src/main/java/cc/mrbird/febs/job/MatrixTreeInit.java +++ b/src/main/java/cc/mrbird/febs/job/MatrixTreeInit.java @@ -36,6 +36,5 @@ node.setMemberId(treeNode.getMidNode()); instance.addNode(node); } - System.out.println(11); } } diff --git a/src/main/resources/mapper/dapp/DappSystemDao.xml b/src/main/resources/mapper/dapp/DappSystemDao.xml index 176511a..95ba411 100644 --- a/src/main/resources/mapper/dapp/DappSystemDao.xml +++ b/src/main/resources/mapper/dapp/DappSystemDao.xml @@ -6,4 +6,9 @@ select * from dapp_mine_data limit 1 </select> + <update id="updateMineData"> + update dapp_mine_data + set safe_pool=#{record.safePool} + where id=#{record.id} + </update> </mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/dapp/DappWalletCoinDao.xml b/src/main/resources/mapper/dapp/DappWalletCoinDao.xml index f1b9c56..346a02d 100644 --- a/src/main/resources/mapper/dapp/DappWalletCoinDao.xml +++ b/src/main/resources/mapper/dapp/DappWalletCoinDao.xml @@ -18,4 +18,12 @@ </if> </where> </select> + + <update id="updateWithLock"> + update dapp_wallet_coin + set total_amount=#{record.totalAmount}, + available_amount=#{record.availableAmount}, + version=version+1 + where id=#{record.id} and version=#{record.version} + </update> </mapper> \ No newline at end of file -- Gitblit v1.9.1