From cf7f5d0ca619660bbce938204755a565a776b53f Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Wed, 30 Nov 2022 18:20:25 +0800
Subject: [PATCH] 20221130
---
src/main/java/cc/mrbird/febs/dapp/enumerate/LevelProfitEnum.java | 2
src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java | 26 +++++++-
src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java | 48 ++++++++-------
src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java | 14 +++-
src/test/java/cc/mrbird/febs/TreeTest.java | 14 +++-
src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java | 4
src/main/java/cc/mrbird/febs/dapp/entity/DappSystemProfit.java | 4 +
src/main/java/cc/mrbird/febs/dapp/mapper/DappSystemProfitDao.java | 4 +
src/main/resources/mapper/dapp/DappSystemProfitDao.xml | 12 ++++
9 files changed, 89 insertions(+), 39 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappSystemProfit.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappSystemProfit.java
index d885a7a..863bca6 100644
--- a/src/main/java/cc/mrbird/febs/dapp/entity/DappSystemProfit.java
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappSystemProfit.java
@@ -17,6 +17,10 @@
private Integer state;
public static final int STATE_IN = 1;
public static final int STATE_OUT = 2;
+ //层级奖励是否产生 1:否 2:是
+ private Integer levelProfit;
+ public static final int ENUM_NO = 1;
+ public static final int ENUM_YES = 2;
public DappSystemProfit(Long memberId, BigDecimal amount) {
this.memberId = memberId;
diff --git a/src/main/java/cc/mrbird/febs/dapp/enumerate/LevelProfitEnum.java b/src/main/java/cc/mrbird/febs/dapp/enumerate/LevelProfitEnum.java
index 2d89543..f1f88fe 100644
--- a/src/main/java/cc/mrbird/febs/dapp/enumerate/LevelProfitEnum.java
+++ b/src/main/java/cc/mrbird/febs/dapp/enumerate/LevelProfitEnum.java
@@ -39,7 +39,7 @@
public BigDecimal getProfit(int memberCnt) {
for (LevelProfitEnum value : LevelProfitEnum.values()) {
if (value.memberCnt == memberCnt) {
- return new BigDecimal(value.profit).multiply(new BigDecimal(0.01)).setScale(BigDecimal.ROUND_DOWN, 2);
+ return new BigDecimal(value.profit).multiply(new BigDecimal(0.01)).setScale(2,BigDecimal.ROUND_DOWN);
}
}
return BigDecimal.ZERO;
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappSystemProfitDao.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappSystemProfitDao.java
index f3f65c8..2f5faeb 100644
--- a/src/main/java/cc/mrbird/febs/dapp/mapper/DappSystemProfitDao.java
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappSystemProfitDao.java
@@ -9,4 +9,8 @@
DappSystemProfit selectSystemProfitByState(@Param("state") int stateOut);
DappSystemProfit selectByIdForUpdate(@Param("id") Long id,@Param("state") int stateOut);
+
+ void updateLevelProfitById(@Param("levelProfit") int levelProfit,@Param("id")Long id);
+
+ void updateStateById(@Param("state") int stateOut,@Param("id")Long id);
}
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 0cd20b8..c5e7d8f 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
@@ -295,6 +295,11 @@
if(ObjectUtil.isEmpty(dappSystemProfit)){
return;
}
+ Integer levelProfitState = dappSystemProfit.getLevelProfit();
+
+ if(DappSystemProfit.ENUM_YES == levelProfitState){
+ return;
+ }
Long memberId = dappSystemProfit.getMemberId();
//获取用户的上级用户信息
DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
@@ -318,7 +323,15 @@
//返回十层
List<String> refererIdList = StrUtil.split(refererIds, ',');
//i:计数层数,同时i也为对应层数应推广的人数,当达到对应的直推人数时,才能获取对应层级奖励
- for(int i = 0;i < 10; i++){
+ if(CollUtil.isEmpty(refererIdList)){
+ return;
+ }
+ //层级奖励最大循环次数
+ int maxLevel = 10;
+ if(maxLevel > refererIdList.size()){
+ maxLevel = refererIdList.size();
+ }
+ for(int i = 0;i < maxLevel; i++){
if(systemProfitTotal.compareTo(levelProfitTotal) < 0){
String inviteId = refererIdList.get(i);
//获取每层用户的直推人数,判断能否获得这个层级的层级奖励
@@ -331,7 +344,7 @@
continue;
}
//获取对应层级奖励
- BigDecimal profit = LevelProfitEnum.YI.getProfit(i);
+ BigDecimal profit = LevelProfitEnum.YI.getProfit(i+1);
String accountType = refererMember.getAccountType();
//根据会员的等级类型,获取对应的百分比收益
DataDictionaryCustom memberLevelSet = dataDictionaryCustomMapper.selectDicDataByTypeAndCode("MEMBER_LEVEL", accountType);
@@ -354,6 +367,8 @@
//发送转币消息
chainProducer.sendBnbTransferMsg(fundFlow.getId());
}
+
+ dappSystemProfitDao.updateLevelProfitById(DappSystemProfit.ENUM_YES,dappSystemProfit.getId());
}
@Override
@@ -402,8 +417,7 @@
redisUtils.set(redisKey,realCount,0L);
DappSystemProfit dappSystemProfitNow = dappSystemProfitDao.selectByIdForUpdate(dappSystemProfit.getId(),DappSystemProfit.STATE_IN);
- dappSystemProfitNow.setState(DappSystemProfit.STATE_OUT);
- dappSystemProfitDao.updateById(dappSystemProfitNow);
+ dappSystemProfitDao.updateStateById(DappSystemProfit.STATE_OUT,dappSystemProfitNow.getId());
//todo 直接拿走0.95ge
DappFundFlowEntity fundFlowOut = new DappFundFlowEntity(dappSystemProfitNow.getMemberId(), new BigDecimal(0.95), 7, 1, BigDecimal.ZERO, null,dappSystemProfitNow.getId());
@@ -424,6 +438,7 @@
transferDto.setBuyType(2);
transferDto.setId(fundFlow.getId());
transferDto.setFlag("success");
+ transferDto.setAmount(investAmount);
transferDto.setMemberId(dappSystemProfitNow.getMemberId());
dappWalletService.transferAgain(transferDto);
}
@@ -433,6 +448,9 @@
log.info("{}",id);
//获取对应的流水记录
DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectById(id);
+ if(ObjectUtil.isEmpty(dappFundFlowEntity)){
+ return;
+ }
if(DappFundFlowEntity.WITHDRAW_STATUS_AGREE == dappFundFlowEntity.getStatus()){
return;
}
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 0ec4e67..131056c 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
@@ -172,17 +172,20 @@
}
if ("success".equals(transferDto.getFlag())) {
+ DappFundFlowEntity flow = dappFundFlowDao.selectById(transferDto.getId());
+ if(DappFundFlowEntity.WITHDRAW_STATUS_AGREE == flow.getStatus()){
+ return null;
+ }
//插入一条会员入列记录,即加入动能队列
DappSystemProfit dappSystemProfit = new DappSystemProfit(member.getId(), transferDto.getAmount());
dappSystemProfitDao.insert(dappSystemProfit);
- //升级成为Agent
- dappMemberDao.updateMemberAccountType(DataDictionaryEnum.AGENT.getCode(),member.getId());
- DappFundFlowEntity flow = dappFundFlowDao.selectById(transferDto.getId());
flow.setFromHash(transferDto.getTxHash());
flow.setSystemProfitId(dappSystemProfit.getId());
flow.setStatus(DappFundFlowEntity.WITHDRAW_STATUS_AGREE);
dappFundFlowDao.updateById(flow);
+ //升级成为Agent
+ dappMemberDao.updateMemberAccountType(DataDictionaryEnum.AGENT.getCode(),member.getId());
//直接拿走0.05个BNB放入技术方
DataDictionaryCustom systemProfit = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.SYSTEM_PROFIT.getType(), DataDictionaryEnum.SYSTEM_PROFIT.getCode());
@@ -198,7 +201,8 @@
DataDictionaryCustom directProfitSet = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.DIRECT_PROFIT.getType(), DataDictionaryEnum.DIRECT_PROFIT.getCode());
BigDecimal directProfitStr = new BigDecimal(StrUtil.isEmpty(directProfitSet.getValue()) ? "0.3" : directProfitSet.getValue());
- BigDecimal directProfit = (transferDto.getAmount().subtract(new BigDecimal(systemProfitStr))).multiply(directProfitStr).setScale(BigDecimal.ROUND_DOWN, 2);
+ BigDecimal subtract = transferDto.getAmount().subtract(new BigDecimal(systemProfitStr));
+ BigDecimal directProfit = subtract.multiply(directProfitStr).setScale(2,BigDecimal.ROUND_DOWN);
DappFundFlowEntity fundFlow = new DappFundFlowEntity(refererMember.getId(), directProfit, 3, 1, BigDecimal.ZERO, transferDto.getTxHash(),dappSystemProfit.getId());
dappFundFlowDao.insert(fundFlow);
@@ -411,7 +415,7 @@
DataDictionaryCustom directProfitSet = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.DIRECT_PROFIT.getType(), DataDictionaryEnum.DIRECT_PROFIT.getCode());
BigDecimal directProfitStr = new BigDecimal(StrUtil.isEmpty(directProfitSet.getValue()) ? "0.3" : directProfitSet.getValue());
- BigDecimal directProfit = (transferDto.getAmount().subtract(new BigDecimal(systemProfitStr))).multiply(directProfitStr).setScale(BigDecimal.ROUND_DOWN, 2);
+ BigDecimal directProfit = (transferDto.getAmount().subtract(new BigDecimal(systemProfitStr))).multiply(directProfitStr).setScale(2,BigDecimal.ROUND_DOWN);
DappFundFlowEntity fundFlow = new DappFundFlowEntity(refererMember.getId(), directProfit, 3, 1, BigDecimal.ZERO, transferDto.getTxHash(),dappSystemProfit.getId());
dappFundFlowDao.insert(fundFlow);
diff --git a/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java b/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java
index ad37063..1f1d768 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java
@@ -2,6 +2,7 @@
import cc.mrbird.febs.dapp.service.DappSystemService;
import cc.mrbird.febs.rabbit.QueueConstants;
+import cn.hutool.core.date.DateUtil;
import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
@@ -22,34 +23,35 @@
@Autowired
private DappSystemService dappSystemService;
- @RabbitListener(queues = QueueConstants.ACHIEVE_TREE)
- public void achieveTree(String id) {
- log.info("收到业绩树消息");
- dappSystemService.achieveTree(Long.parseLong(id));
- }
-
- /**
- * 生产者在tfc应用
- * @param data
- */
- @RabbitListener(queues = QueueConstants.TFC_NEW_PRICE)
- public void tfcNewPrice(String data) {
-// dappSystemService.tfcNewPrice(data);
- }
-
- /**
- * @param data
- */
- @RabbitListener(queues = QueueConstants.DISTRIB_PROFIT)
- public void feeDistribute(String data) {
- dappSystemService.feeDistribute(data);
- }
+// @RabbitListener(queues = QueueConstants.ACHIEVE_TREE)
+// public void achieveTree(String id) {
+// log.info("收到业绩树消息");
+// dappSystemService.achieveTree(Long.parseLong(id));
+// }
+//
+// /**
+// * 生产者在tfc应用
+// * @param data
+// */
+// @RabbitListener(queues = QueueConstants.TFC_NEW_PRICE)
+// public void tfcNewPrice(String data) {
+//// dappSystemService.tfcNewPrice(data);
+// }
+//
+// /**
+// * @param data
+// */
+// @RabbitListener(queues = QueueConstants.DISTRIB_PROFIT)
+// public void feeDistribute(String data) {
+// dappSystemService.feeDistribute(data);
+// }
/**层级奖励分发消息
* @param id
*/
@RabbitListener(queues = QueueConstants.QUEUE_LEVEL_PROFIT)
public void levelProfit(Long id) {
+ log.info("消费层级奖励分发消息:{}", id);
dappSystemService.levelProfit(id);
}
@@ -58,6 +60,7 @@
*/
@RabbitListener(queues = QueueConstants.QUEUE_MEMBER_OUT)
public void memberOut(Long id) {
+ log.info("消费计算是否有人出局:{}", id);
dappSystemService.memberOut(id);
}
@@ -66,6 +69,7 @@
*/
@RabbitListener(queues = QueueConstants.QUEUE_BNB_TRANSFER)
public void bnbTransfer(Long id) {
+ log.info("消费转账拨币:{}", id);
dappSystemService.bnbTransfer(id);
}
}
diff --git a/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java b/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java
index ff8c0b4..4c55582 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java
@@ -78,9 +78,9 @@
* 计算是否有人出局分发消息
*/
public void sendMemberOutMsg(Long id) {
- log.info("计算是否有人出局:{}", DateUtil.now());
+ log.info("计算是否有人出局:{}", id);
CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
- rabbitTemplate.convertAndSend(QueueEnum.LEVEL_PROFIT.getExchange(), QueueEnum.LEVEL_PROFIT.getRoute(), id, correlationData);
+ rabbitTemplate.convertAndSend(QueueEnum.MEMBER_OUT.getExchange(), QueueEnum.MEMBER_OUT.getRoute(), id, correlationData);
}
/**
diff --git a/src/main/resources/mapper/dapp/DappSystemProfitDao.xml b/src/main/resources/mapper/dapp/DappSystemProfitDao.xml
index a584bc4..9dcc9dc 100644
--- a/src/main/resources/mapper/dapp/DappSystemProfitDao.xml
+++ b/src/main/resources/mapper/dapp/DappSystemProfitDao.xml
@@ -19,4 +19,16 @@
for update
</select>
+ <update id="updateLevelProfitById">
+ update dapp_system_profit
+ set level_Profit = #{levelProfit}
+ where id = #{id}
+ </update>
+
+ <update id="updateStateById">
+ update dapp_system_profit
+ set state = #{state}
+ where id = #{id}
+ </update>
+
</mapper>
\ No newline at end of file
diff --git a/src/test/java/cc/mrbird/febs/TreeTest.java b/src/test/java/cc/mrbird/febs/TreeTest.java
index 54e91c9..170b7ed 100644
--- a/src/test/java/cc/mrbird/febs/TreeTest.java
+++ b/src/test/java/cc/mrbird/febs/TreeTest.java
@@ -65,7 +65,11 @@
transferDto.setFee(BigDecimal.ZERO);
transferDto.setType(1);
transferDto.setBuyType(2);
- transferDto.setMemberId(106L);
+ transferDto.setMemberId(119L);
+ Long transfer = dappWalletService.transfer(transferDto);
+ transferDto.setTxHash("ceshi"+ DateUtil.now());
+ transferDto.setId(transfer);
+ transferDto.setFlag("success");
dappWalletService.transfer(transferDto);
}
@Test
@@ -74,19 +78,19 @@
TransferDto transferDto = new TransferDto();
transferDto.setType(1);
transferDto.setTxHash("ceshi"+ DateUtil.now());
- transferDto.setId(324L);
+ transferDto.setId(422L);
transferDto.setFlag("success");
transferDto.setBuyType(2);
transferDto.setAmount(new BigDecimal(1.05));
transferDto.setFee(BigDecimal.ZERO);
- transferDto.setMemberId(106L);
+ transferDto.setMemberId(111L);
dappWalletService.transfer(transferDto);
}
@Test
public void resetMatrix() {
-// dappSystemService.resetMatrix();
-// dappAchieveMemberTreeDao.emptyTable();
+ dappSystemService.levelProfit(9L);
+ dappSystemService.memberOut(9L);
}
@Test
--
Gitblit v1.9.1