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