From 08d5c76dc776c64efeb2a7d8fa33f90ee5132bfe Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Sun, 04 Sep 2022 12:10:36 +0800 Subject: [PATCH] fix --- src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java | 6 ++ src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java | 55 ++++++++++++++++- src/main/resources/mapper/dapp/DappFundFlowDao.xml | 7 ++ src/main/resources/mapper/dapp/DappMemberDao.xml | 10 +++ src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java | 4 + src/main/java/cc/mrbird/febs/dapp/mapper/DappFundFlowDao.java | 2 src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java | 53 +++++++++++++++++ src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java | 2 src/main/resources/application-dev.yml | 2 src/test/java/cc/mrbird/febs/TreeTest.java | 5 + src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java | 2 src/main/resources/mapper/dapp/DappWalletCoinDao.xml | 1 12 files changed, 139 insertions(+), 10 deletions(-) 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 f87f085..b1dc889 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-直推收益 4-保险池 5-提现 6-手续费充值 7-手续费扣除 8-结算 + * 类型 1-买入 2-矩阵收益 3-直推收益 4-保险池 5-提现 6-手续费充值 7-手续费扣除 8-结算 9-冻结 10-冻结释放 */ private Integer type; diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappFundFlowDao.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappFundFlowDao.java index 512f9c2..c5bd217 100644 --- a/src/main/java/cc/mrbird/febs/dapp/mapper/DappFundFlowDao.java +++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappFundFlowDao.java @@ -24,4 +24,6 @@ Map<String, BigDecimal> selectAmountTotalByType(@Param("memberId") Long memberId); BigDecimal selectProfitAmountByMemberId(@Param("memberId") Long memberId); + + DappFundFlowEntity selectNewestFundFlow(@Param("memberId") Long memberId, @Param("type") Integer type); } diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java index a6b328d..218c222 100644 --- a/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java +++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java @@ -33,11 +33,13 @@ List<DappMemberEntity> selectMemberByAccountType(@Param("accountType") String accountType); - List<DappMemberEntity> selectChildMemberDirectOrNot(@Param("inviteId") String inviteId, @Param("type") Integer type); + List<DappMemberEntity> selectChildMemberDirectOrNot(@Param("inviteId") String inviteId, @Param("type") Integer type, @Param("status") Integer status); BigDecimal selectChildHoldAmount(@Param("inviteId") String inviteId); List<DappMemberEntity> selectMakerAddress(); int updateMemberActive(); + + DappMemberEntity selectNewestDirectMember(@Param("inviteId") String inviteId); } 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 3376782..beb9060 100644 --- a/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java +++ b/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java @@ -39,4 +39,10 @@ void updateWalletMineWithLock(BigDecimal amount, Long memberId, int type); + void addFrozenAmountWithLock(BigDecimal amount, Long memberId); + + void releaseFrozenAmountWithLock(Long memberId); + + DappWalletCoinEntity findByMemberId(Long memberId); + } 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 f0b3880..2d637ea 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 @@ -133,7 +133,7 @@ throw new FebsException("recommender is not exist"); } - List<DappMemberEntity> child = dappMemberDao.selectChildMemberDirectOrNot(connectDto.getInviteId(), 1); + List<DappMemberEntity> child = dappMemberDao.selectChildMemberDirectOrNot(connectDto.getInviteId(), 1, null); if (child.size() == 6) { throw new FebsException("Invite Code is Invalid"); } 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 ad5521a..f520e99 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 @@ -4,6 +4,8 @@ import cc.mrbird.febs.common.utils.LoginUserUtil; import cc.mrbird.febs.common.utils.RedisUtils; import cc.mrbird.febs.common.utils.SpringContextUtil; +import cc.mrbird.febs.dapp.chain.ChainEnum; +import cc.mrbird.febs.dapp.chain.ChainService; import cc.mrbird.febs.dapp.dto.SystemDto; import cc.mrbird.febs.dapp.entity.*; import cc.mrbird.febs.dapp.mapper.*; @@ -172,13 +174,56 @@ // 如果是复投的,则需奖励 if (isReIn == 1) { - member.setOutCnt(member.getOutCnt() + 1); - dappMemberDao.updateById(member); + List<DappMemberEntity> directCnt = dappMemberDao.selectChildMemberDirectOrNot(member.getInviteId(), 1, 1); - dappWalletService.updateWalletCoinWithLock(new BigDecimal(190), member.getId(), 1); + boolean hasNewDirect = false; + if (directCnt.size() < 3) { + DappMemberEntity newestDirect = dappMemberDao.selectNewestDirectMember(member.getInviteId()); + DappFundFlowEntity fundFlow = dappFundFlowDao.selectNewestFundFlow(memberId, 9); - DappFundFlowEntity matrixProfitFlow = new DappFundFlowEntity(memberId, new BigDecimal("190"), 2, 2, null, null); - dappFundFlowDao.insert(matrixProfitFlow); + if (newestDirect != null && fundFlow != null) { + if (newestDirect.getCreateTime().after(fundFlow.getCreateTime())) { + hasNewDirect = true; + } + } + } + + /** + * 复投后,推一个拿一轮,推两个拿两轮,推三个后终身有效。 + * 按规则每轮未能提取的奖金分配: + * 50%直接进入TFC底池 + * 20%给到推荐人 + * 30%留下待提。 + */ + if (directCnt.size() < 3 && member.getOutCnt() != 0 && member.getOutCnt() - 1 == directCnt.size() && !hasNewDirect) { + BigDecimal amount = new BigDecimal("190"); + + BigDecimal sourcePool = amount.multiply(new BigDecimal("0.5")); + BigDecimal directAmount = amount.multiply(new BigDecimal("0.2")); + + BigDecimal remain = amount.subtract(sourcePool).subtract(directAmount); + +// ChainService.getInstance(ChainEnum.BSC_USDT.name()).transfer("", sourcePool); + + if (parent != null) { + dappWalletService.updateWalletCoinWithLock(directAmount, parent.getId(), 1); + + DappFundFlowEntity direct = new DappFundFlowEntity(parent.getId(), directAmount, 3, 2, null, null); + dappFundFlowDao.insert(direct); + } + + dappWalletService.addFrozenAmountWithLock(remain, memberId); + } else { + dappWalletService.releaseFrozenAmountWithLock(memberId); + + member.setOutCnt(member.getOutCnt() + 1); + dappMemberDao.updateById(member); + + dappWalletService.updateWalletCoinWithLock(new BigDecimal(190), member.getId(), 1); + + 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); 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 5c8cf98..9bf87e4 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 @@ -64,7 +64,7 @@ DappMemberEntity memberInfo = dappMemberDao.selectById(member.getId()); WalletInfoVo walletInfo = new WalletInfoVo(); - List<DappMemberEntity> direct = dappMemberDao.selectChildMemberDirectOrNot(member.getInviteId(), 1); + List<DappMemberEntity> direct = dappMemberDao.selectChildMemberDirectOrNot(member.getInviteId(), 1, null); DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(member.getId()); DappWalletMineEntity walletMine = dappWalletMineDao.selectByMemberId(member.getId()); @@ -264,4 +264,55 @@ } } } + + @Override + public void addFrozenAmountWithLock(BigDecimal amount, Long memberId) { + boolean isSuccess = false; + while(!isSuccess) { + DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(memberId); + + walletCoin.setTotalAmount(walletCoin.getTotalAmount().add(amount)); + walletCoin.setFrozenAmount(walletCoin.getFrozenAmount().add(amount)); + + int i = dappWalletCoinDao.updateWithLock(walletCoin); + if (i > 0) { + isSuccess = true; + + DappFundFlowEntity frozenAmount = new DappFundFlowEntity(memberId, amount, 9, 2, null, null); + dappFundFlowDao.insert(frozenAmount); + } + } + } + + @Override + public void releaseFrozenAmountWithLock(Long memberId) { + boolean isSuccess = false; + while(!isSuccess) { + DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(memberId); + + if (walletCoin.getFrozenAmount().compareTo(BigDecimal.ZERO) <= 0) { + return; + } + BigDecimal frozen = walletCoin.getFrozenAmount(); + + walletCoin.setAvailableAmount(walletCoin.getAvailableAmount().add(frozen)); + walletCoin.setFrozenAmount(walletCoin.getFrozenAmount().subtract(frozen)); + + int i = dappWalletCoinDao.updateWithLock(walletCoin); + if (i > 0) { + isSuccess = true; + + DappFundFlowEntity releaseFrozen = new DappFundFlowEntity(memberId, frozen, 10, 2, null, null); + dappFundFlowDao.insert(releaseFrozen); + + DappFundFlowEntity releaseFrozenNegate = new DappFundFlowEntity(memberId, frozen.negate(), 9, 2, null, null); + dappFundFlowDao.insert(releaseFrozenNegate); + } + } + } + + @Override + public DappWalletCoinEntity findByMemberId(Long memberId) { + return dappWalletCoinDao.selectByMemberId(memberId); + } } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 9651cf3..079091e 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -61,4 +61,4 @@ online-transfer: false chain-listener: false reset-job: false - debug: false \ No newline at end of file + debug: true \ No newline at end of file diff --git a/src/main/resources/mapper/dapp/DappFundFlowDao.xml b/src/main/resources/mapper/dapp/DappFundFlowDao.xml index 73b9373..a07f24d 100644 --- a/src/main/resources/mapper/dapp/DappFundFlowDao.xml +++ b/src/main/resources/mapper/dapp/DappFundFlowDao.xml @@ -68,4 +68,11 @@ select ifnull(sum(amount), 0) from dapp_fund_flow where member_id=#{memberId} and type in (2,3) </select> + + <select id="selectNewestFundFlow" resultType="cc.mrbird.febs.dapp.entity.DappFundFlowEntity"> + select * from dapp_fund_flow + where member_id=#{memberId} and type = #{type} + order by id desc + limit 1 + </select> </mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/dapp/DappMemberDao.xml b/src/main/resources/mapper/dapp/DappMemberDao.xml index 02b9685..ad20f83 100644 --- a/src/main/resources/mapper/dapp/DappMemberDao.xml +++ b/src/main/resources/mapper/dapp/DappMemberDao.xml @@ -102,6 +102,9 @@ <if test="type==2"> and find_in_set(#{inviteId}, fee_profit_ids) </if> + <if test="status != null"> + and active_status=#{status} + </if> </where> </select> @@ -120,4 +123,11 @@ set active_status = 2 where active_status = 1 </update> + + <select id="selectNewestDirectMember" resultType="cc.mrbird.febs.dapp.entity.DappMemberEntity"> + select * from dapp_member + where referer_id=#{inviteId} and active_status=1 + order by id desc + limit 1 + </select> </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 346a02d..757027e 100644 --- a/src/main/resources/mapper/dapp/DappWalletCoinDao.xml +++ b/src/main/resources/mapper/dapp/DappWalletCoinDao.xml @@ -23,6 +23,7 @@ update dapp_wallet_coin set total_amount=#{record.totalAmount}, available_amount=#{record.availableAmount}, + frozen_amount=#{record.frozenAmount}, version=version+1 where id=#{record.id} and version=#{record.version} </update> diff --git a/src/test/java/cc/mrbird/febs/TreeTest.java b/src/test/java/cc/mrbird/febs/TreeTest.java index 56278f6..12a0ec3 100644 --- a/src/test/java/cc/mrbird/febs/TreeTest.java +++ b/src/test/java/cc/mrbird/febs/TreeTest.java @@ -48,4 +48,9 @@ dappSystemService.resetMatrix(); // dappAchieveMemberTreeDao.emptyTable(); } + + @Test + public void limitResetProfitTest() { + dappSystemService.putIntoProfit(60L, 1); + } } -- Gitblit v1.9.1