From 2c86d804e005a62591fcc6a78c845d7a295aebcf Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Thu, 26 May 2022 19:40:45 +0800
Subject: [PATCH] add dapp login

---
 src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java |   74 ++++++++++++++++---------------------
 1 files changed, 32 insertions(+), 42 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java
index c8ba7de..bb60950 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java
@@ -5,24 +5,38 @@
 import cc.mrbird.febs.dapp.chain.ChainService;
 import cc.mrbird.febs.dapp.chain.ContractEventService;
 import cc.mrbird.febs.dapp.chain.EthUsdtContract;
+import cc.mrbird.febs.dapp.entity.DappFundFlowEntity;
 import cc.mrbird.febs.dapp.entity.DappMemberEntity;
+import cc.mrbird.febs.dapp.mapper.DappFundFlowDao;
 import cc.mrbird.febs.dapp.mapper.DappMemberDao;
+import cc.mrbird.febs.dapp.service.DappMemberService;
 import cn.hutool.core.util.StrUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.math.RoundingMode;
 
 @Service
 public class BscCoinContractEvent implements ContractEventService {
 
-    @Autowired
+    @Resource
     private DappMemberDao dappMemberDao;
+
+    @Resource
+    private DappMemberService dappMemberService;
+
+    @Resource
+    private DappFundFlowDao dappFundFlowDao;
 
     private final String ADDRESS = "0x977a9ddfb965a9a3416fa72ca7f91c4949c18f25";
     int decimals = ChainService.getInstance(ChainEnum.BSC_TFC.name()).decimals();
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public void compile(EthUsdtContract.TransferEventResponse e) {
         if (e.to != null) {
@@ -30,61 +44,37 @@
                 return;
             }
 
-            DappMemberEntity fromMember = dappMemberDao.selectByAddress(e.from, null);
+            DappMemberEntity fromMember = dappMemberService.findByAddress(e.from, null);
             if (fromMember == null) {
-                fromMember = insertMember(e.from, null);
+                fromMember = dappMemberService.insertMember(e.from, null);
             }
 
             if (!e.to.equals(ADDRESS)) {
                 DappMemberEntity toMember = dappMemberDao.selectByAddress(e.to, null);
                 if (toMember == null) {
-                    toMember = insertMember(e.to, fromMember.getInviteId());
+                    toMember = dappMemberService.insertMember(e.to, fromMember.getInviteId());
                 }
             }
 
+            //
             // 卖币
             if (e.to.equals(ADDRESS)) {
                 BigInteger tokens = e.tokens;
+
+                BigDecimal amount = BigDecimal.valueOf(tokens.intValue()).divide(BigDecimal.TEN.pow(4), decimals, RoundingMode.HALF_DOWN);
+
+                DappFundFlowEntity fundFlow = new DappFundFlowEntity(fromMember.getId(), amount, 2, null, null, e.log.getTransactionHash());
+                dappFundFlowDao.insert(fundFlow);
+
+                // TODO price
+                BigDecimal newPrice = BigDecimal.valueOf(1);
+
+                BigDecimal transferAmount = amount.multiply(newPrice);
+                String hash = ChainService.getInstance(ChainEnum.BSC_USDT.name()).transfer(e.from, transferAmount);
+                fundFlow.setToHash(hash);
+                dappFundFlowDao.updateById(fundFlow);
             }
 
         }
-    }
-
-    private DappMemberEntity insertMember(String address, String refererId) {
-        DappMemberEntity member = new DappMemberEntity();
-        member.setAddress(address);
-
-        dappMemberDao.insert(member);
-
-        member.setInviteId(ShareCodeUtil.toSerialCode(member.getId()));
-        member.setRefererId(refererId);
-        if (StrUtil.isNotBlank(refererId)){
-            boolean flag = false;
-            String parentId = refererId;
-            String ids = "";
-            while (!flag && StringUtils.isNotBlank(parentId)) {
-                if (StrUtil.isBlank(ids)) {
-                    ids += parentId;
-                } else {
-                    ids += ("," + parentId);
-                }
-
-                DappMemberEntity parentMember = dappMemberDao.selectMemberInfoByInviteId(parentId);
-                if (parentMember == null) {
-                    break;
-                }
-                parentId = parentMember.getRefererId();
-                if(StringUtils.isBlank(parentId)){
-                    break;
-                }
-                if (parentMember.getRefererId().equals(parentMember.getInviteId())) {
-                    flag = true;
-                }
-            }
-            member.setRefererIds(ids);
-        }
-        dappMemberDao.updateById(member);
-
-        return member;
     }
 }

--
Gitblit v1.9.1