src/main/java/cc/mrbird/febs/dapp/controller/MemberMoneyFlowController.java
@@ -38,18 +38,6 @@ return new FebsResponse().success().data(getDataTable(dappWalletService.fundFlowInPage(dappFundFlowEntity, request))); } @PostMapping(value = "/withdrawAgree/{id}") public FebsResponse withdrawAgree(@PathVariable("id") Long id) { dappWalletService.withdrawAgreeOrNot(id, 1); return new FebsResponse().success(); } @PostMapping(value = "/withdrawDisAgree/{id}") public FebsResponse withdrawDisAgree(@PathVariable("id") Long id) { dappWalletService.withdrawAgreeOrNot(id, 2); return new FebsResponse().success(); } @RequestMapping(value = "accountMoneyChangeFlow") public FebsResponse accountMoneyChangeFlow(DappAccountMoneyChangeEntity record, QueryRequest request) { return new FebsResponse().success().data(getDataTable(dappWalletService.accountMoneyChangeInPage(record, request))); src/main/java/cc/mrbird/febs/dapp/mapper/DappAchieveMemberTreeDao.java
@@ -19,4 +19,6 @@ int resetMatrixTree(@Param("memberId") Long memberId); int reentryMoney(@Param("memberId") Long memberId); int emptyTable(); } src/main/java/cc/mrbird/febs/dapp/mapper/DappAchieveTreeDao.java
@@ -11,4 +11,10 @@ DappAchieveTreeEntity selectByMidNode(@Param("memberId") Long memberId); List<DappAchieveTreeEntity> selectTreeList(); DappAchieveTreeEntity selectNewestTreeNode(); List<DappAchieveTreeEntity> selectLastCountTreeNode(@Param("count") int count); int updateNodeValidState(); } src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java
@@ -38,4 +38,6 @@ BigDecimal selectChildHoldAmount(@Param("inviteId") String inviteId); List<DappMemberEntity> selectMakerAddress(); int updateMemberActive(); } src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java
@@ -20,4 +20,6 @@ void putIntoProfit(Long memberId, int isReIn); void tfcNewPrice(String data); void resetMatrix(); } src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
@@ -3,45 +3,22 @@ import cc.mrbird.febs.common.contants.AppContants; import cc.mrbird.febs.common.utils.LoginUserUtil; import cc.mrbird.febs.common.utils.RedisUtils; 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.SystemDto; import cc.mrbird.febs.dapp.entity.*; 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; import cc.mrbird.febs.job.SystemTradeJob; import cc.mrbird.febs.rabbit.producer.ChainProducer; import cc.mrbird.febs.tree.MatrixTree; import cc.mrbird.febs.tree.MemberNode; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.IOException; import java.math.BigDecimal; import java.math.BigInteger; import java.math.RoundingMode; import java.net.MalformedURLException; import java.net.URL; import java.util.*; /** @@ -54,16 +31,9 @@ public class DappSystemServiceImpl implements DappSystemService { private final DappSystemDao dappSystemDao; private final DappReturnRatioDao dappReturnRatioDao; private final RedisUtils redisUtils; private final DappFundFlowDao dappFundFlowDao; private final DappMemberDao dappMemberDao; private final DataDictionaryCustomMapper dataDictionaryCustomMapper; private final DappOnlineTransferDao dappOnlineTransferDao; private final ChainProducer chainProducer; private final DappSymbolDailyPriceMapper dappSymbolDailyPriceMapper; private final DappMemberBoxRecordMapper dappMemberBoxRecordMapper; private final DappWalletCoinDao dappWalletCoinDao; private final DappAchieveTreeDao dappAchieveTreeDao; private final DappAchieveMemberTreeDao dappAchieveMemberTreeDao; @@ -79,20 +49,26 @@ return system; } // 最低容量(百分比) private final BigDecimal volProp = new BigDecimal("2"); // 每日增/减百分比 private final BigDecimal changeProp = new BigDecimal("1"); @Override @Transactional(rollbackFor = Exception.class) public synchronized void achieveTree(Long memberId) { DappMemberEntity member = dappMemberDao.selectById(memberId); int batchNo = 0; DappAchieveTreeEntity newestTreeNode = dappAchieveTreeDao.selectNewestTreeNode(); if (newestTreeNode != null) { if (newestTreeNode.getValidState() == 2) { batchNo = newestTreeNode.getBatchNo() + 1; } else { batchNo = newestTreeNode.getBatchNo(); } } // 在大树中,插入当前节点 DappAchieveTreeEntity achieveTree = new DappAchieveTreeEntity(); achieveTree.setMidNode(memberId); achieveTree.setValidState(1); achieveTree.setBatchNo(batchNo); dappAchieveTreeDao.insert(achieveTree); // 在内存树(大树)中插入当前节点,并返回父节点 @@ -177,9 +153,6 @@ DappMemberEntity member = dappMemberDao.selectById(memberId); DappMemberEntity parent = dappMemberDao.selectMemberInfoByInviteId(member.getRefererId()); member.setOutCnt(member.getOutCnt() + 1); dappMemberDao.updateById(member); if (parent != null) { BigDecimal directProfit = new BigDecimal("100").multiply(new BigDecimal("0.15")); dappWalletService.updateWalletCoinWithLock(directProfit, parent.getId()); @@ -190,6 +163,9 @@ // 如果是复投的,则需奖励 if (isReIn == 1) { member.setOutCnt(member.getOutCnt() + 1); dappMemberDao.updateById(member); dappWalletService.updateWalletCoinWithLock(new BigDecimal(190), member.getId()); DappFundFlowEntity matrixProfitFlow = new DappFundFlowEntity(memberId, new BigDecimal("190"), 2, 2, null, null); @@ -211,4 +187,21 @@ public void tfcNewPrice(String data) { redisUtils.set(AppContants.REDIS_KEY_TFC_NEW_PRICE, new BigDecimal(data)); } @Override public void resetMatrix() { DappAchieveTreeEntity node = dappAchieveTreeDao.selectNewestTreeNode(); if (node.getValidState() == 2) { return; } long days = DateUtil.between(node.getCreateTime(), new Date(), DateUnit.DAY); if (days < 7) { return; } dappAchieveTreeDao.updateNodeValidState(); dappAchieveMemberTreeDao.emptyTable(); dappMemberDao.updateMemberActive(); } } src/main/java/cc/mrbird/febs/job/MatrixResetJob.java
New file @@ -0,0 +1,38 @@ package cc.mrbird.febs.job; import cc.mrbird.febs.common.contants.AppContants; import cc.mrbird.febs.common.utils.RedisUtils; import cc.mrbird.febs.dapp.chain.ChainEnum; import cc.mrbird.febs.dapp.chain.ChainService; import cc.mrbird.febs.dapp.entity.DataDictionaryCustom; import cc.mrbird.febs.dapp.mapper.DataDictionaryCustomMapper; import cc.mrbird.febs.dapp.service.DappSystemService; import cc.mrbird.febs.dapp.vo.RedisTransferPoolVo; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; /** * @author wzy * @date 2022-05-30 **/ @Slf4j @Component @ConditionalOnProperty(prefix = "system", name = "reset-job", havingValue = "true") public class MatrixResetJob { @Autowired private DappSystemService systemService; @Scheduled(cron = "0 0 0 * * ?") public void resetMatrix() { log.info("重置"); systemService.resetMatrix(); } } src/main/java/cc/mrbird/febs/job/SystemTradeJob.java
File was deleted src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java
@@ -22,30 +22,6 @@ @Autowired private DappSystemService dappSystemService; // @RabbitListener(queues = QueueConstants.ONLINE_TRANSFER) // public void onlineTransfer(String batchNo) { // log.info("收到链上转账消息:{}", batchNo); // dappSystemService.onlineTransfer(batchNo); // } // // @RabbitListener(queues = QueueConstants.DISTRIB_PROFIT) // public void distrbProfit(String id) { // log.info("收到滑点分配消息:{}", id); // dappSystemService.tradeNftProfitDistribute(Long.parseLong(id)); // } // // @RabbitListener(queues = QueueConstants.USER_BUY_REWARD) // public void userBuyReward(String id) { // log.info("收到用户购买奖励消息:{}", id); // dappSystemService.userBuyReward(Long.parseLong(id)); // } // // @RabbitListener(queues = QueueConstants.NFT_BOX) // public void nftBox(String id) { // log.info("收到nft盲盒消息:{}", id); // dappSystemService.boxCnt(Long.parseLong(id)); // } @RabbitListener(queues = QueueConstants.ACHIEVE_TREE) public void achieveTree(String id) { log.info("收到业绩树消息"); src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java
@@ -33,31 +33,6 @@ } public void sendOnlineTransfer(String batchNo) { log.info("发送链上转账消息:{}", batchNo); CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString()); rabbitTemplate.convertAndSend(QueueEnum.ONLINE_TRANSFER.getExchange(), QueueEnum.ONLINE_TRANSFER.getRoute(), batchNo, correlationData); } public void sendDitribProfit(Long id) { log.info("发送滑点分配消息:{}", id); CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString()); rabbitTemplate.convertAndSend(QueueEnum.DISTRIB_PROFIT.getExchange(), QueueEnum.DISTRIB_PROFIT.getRoute(), id, correlationData); } public void sendUserBuyReward(Long id) { log.info("发送用户购买奖励消息:{}", id); CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString()); rabbitTemplate.convertAndSend(QueueEnum.USER_BUY_REWARD.getExchange(), QueueEnum.USER_BUY_REWARD.getRoute(), id, correlationData); } public void sendNftBoxMsg(Long id) { log.info("发送NFT盲盒消息:{}", id); CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString()); rabbitTemplate.convertAndSend(QueueEnum.NFT_BOX.getExchange(), QueueEnum.NFT_BOX.getRoute(), id, correlationData); } public void sendAchieveTreeMsg(Long id) { log.info("发送业绩树消息:{}", id); CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString()); src/main/resources/application-dev.yml
@@ -50,5 +50,5 @@ system: online-transfer: true chain-listener: false trade-job: false reset-job: false debug: false src/main/resources/application-prod.yml
@@ -55,5 +55,5 @@ system: online-transfer: true chain-listener: true trade-job: true reset-job: true debug: false src/main/resources/application-test.yml
@@ -51,5 +51,5 @@ system: online-transfer: false chain-listener: false trade-job: false reset-job: false debug: false src/main/resources/mapper/dapp/DappAchieveMemberTreeDao.xml
@@ -36,4 +36,9 @@ set has_money=1 where tree_node=#{memberId} </update> <delete id="emptyTable"> delete from dapp_achieve_member_tree where 1=1 </delete> </mapper> src/main/resources/mapper/dapp/DappAchieveTreeDao.xml
@@ -3,12 +3,31 @@ <mapper namespace="cc.mrbird.febs.dapp.mapper.DappAchieveTreeDao"> <select id="selectByMidNode" resultType="cc.mrbird.febs.dapp.entity.DappAchieveTreeEntity"> select * from dapp_achieve_tree where mid_node=#{memberId} select * from dapp_achieve_tree where mid_node=#{memberId} and valid_state=1 </select> <select id="selectTreeList" resultType="cc.mrbird.febs.dapp.entity.DappAchieveTreeEntity"> select a.*, b.address, b.invite_id, b.referer_id from dapp_achieve_tree a inner join dapp_member b on a.mid_node=b.id inner join dapp_member b on a.mid_node=b.id and valid_state=1 order by a.id </select> <select id="selectNewestTreeNode" resultType="cc.mrbird.febs.dapp.entity.DappAchieveTreeEntity"> select * from dapp_achieve_tree a order by a.id desc limit 1 </select> <select id="selectLastCountTreeNode" resultType="cc.mrbird.febs.dapp.entity.DappAchieveTreeEntity"> select * from dapp_achieve_tree a where valid_state=1 order by a.id desc limit #{count} </select> <update id="updateNodeValidState"> update dapp_achieve_tree set valid_state=2 where valid_state=1 </update> </mapper> src/main/resources/mapper/dapp/DappMemberDao.xml
@@ -114,4 +114,10 @@ select * from dapp_member where maker_type=1 and account_type='normal' </select> <update id="updateMemberActive"> update dapp_member set active_status = 2 where active_status = 1 </update> </mapper>