From 2a15d38ae05314799daa24e26779e036c5ec8f39 Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Mon, 29 Apr 2024 12:02:10 +0800
Subject: [PATCH] 测试环境新版

---
 src/main/java/cc/mrbird/febs/dapp/mapper/DappAchieveMapper.java            |   10 ++
 src/main/java/cc/mrbird/febs/dapp/service/impl/AdminBannerServiceImpl.java |    1 
 src/main/java/cc/mrbird/febs/job/GiveMeMoneyJob.java                       |   44 +++++++++-
 src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java   |   15 +++
 src/test/java/cc/mrbird/febs/MemberTest.java                               |   26 +++--
 src/main/java/cc/mrbird/febs/dapp/service/AsyncCjService.java              |    3 
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java  |   47 ++++++++++-
 src/main/java/cc/mrbird/febs/dapp/service/impl/AsyncCjServiceImpl.java     |   23 +++++
 src/main/java/cc/mrbird/febs/dapp/vo/WalletInfoVo.java                     |   11 ++
 src/main/resources/mapper/dapp/DappAchieveMapper.xml                       |   20 +++++
 src/main/java/cc/mrbird/febs/dapp/entity/DappAchieve.java                  |    4 
 11 files changed, 177 insertions(+), 27 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappAchieve.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappAchieve.java
index b3ecc3f..3d7497a 100644
--- a/src/main/java/cc/mrbird/febs/dapp/entity/DappAchieve.java
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappAchieve.java
@@ -19,10 +19,12 @@
 
     private Long memberId;
 
-    private BigDecimal price;//投入GFA数量
+    private BigDecimal price;//价格
     private BigDecimal amount;//投入GFA数量
 
     private BigDecimal amountDone;//累计产出
+    private BigDecimal goldAmount;//金本位
+    private BigDecimal coinAmount;//币本位
 
     private BigDecimal amountMax;//出局数量
 
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappAchieveMapper.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappAchieveMapper.java
index ad64035..50a019b 100644
--- a/src/main/java/cc/mrbird/febs/dapp/mapper/DappAchieveMapper.java
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappAchieveMapper.java
@@ -7,9 +7,19 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
 
+import java.math.BigDecimal;
+import java.util.List;
+
 public interface DappAchieveMapper  extends BaseMapper<DappAchieve> {
 
     IPage<DappAchieve> selectInPage(Page<DappAchieve> page,  @Param("record")DappAchieve dappAchieve);
 
     IPage<DappAchieveItem> dappAchieveItemInPage(Page<DappAchieveItem> page, @Param("record")DappAchieve dappAchieve);
+
+    List<DappAchieve> selectListByMemberId(@Param("memberId")Long memberId);
+
+    BigDecimal selectGoldAmountByMemberId(@Param("memberId")Long memberId);
+
+    BigDecimal selectCoinAmountByMemberId(@Param("memberId")Long memberId);
+
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/AsyncCjService.java b/src/main/java/cc/mrbird/febs/dapp/service/AsyncCjService.java
index 06e9a58..ceb10e8 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/AsyncCjService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/AsyncCjService.java
@@ -33,4 +33,7 @@
 
     @Async(FebsConstant.ASYNC_POOL)
     void confirmCancel(DappFundFlowEntity dappFundFlowEntity);
+
+    @Async(FebsConstant.ASYNC_POOL)
+    void calculateAchieve(DappAchieve dappAchieve);
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/AdminBannerServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/AdminBannerServiceImpl.java
index 5cf5a40..6a27242 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/AdminBannerServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/AdminBannerServiceImpl.java
@@ -212,6 +212,7 @@
         dappAchieve.setAmountDone(BigDecimal.ZERO);
         dappAchieveMapper.insert(dappAchieve);
         asyncCjService.insertTeamPerk(fundFlow.getId(), dappAchieve.getId());
+        asyncCjService.calculateAchieve(dappAchieve);
         return new FebsResponse().success();
     }
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/AsyncCjServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/AsyncCjServiceImpl.java
index d495f99..5f0051c 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/AsyncCjServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/AsyncCjServiceImpl.java
@@ -374,6 +374,29 @@
         }
     }
 
+    @Override
+    public void calculateAchieve(DappAchieve achieve) {
+        Long id = achieve.getId();
+        DappAchieve dappAchieve = dappAchieveMapper.selectById(id);
+        if(ObjectUtil.isEmpty(dappAchieve)){
+            return;
+        }
+        /**
+         * 计算金本位和币本位
+         *  金本位:数量*价格*70*产矿百分比
+         *  币本位:数量*30*产矿百分比
+         */
+        BigDecimal achieveOut = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_ACHIEVE_OUT.getValue())).setScale(2,BigDecimal.ROUND_DOWN);
+
+        BigDecimal amount = dappAchieve.getAmount();
+        BigDecimal price = dappAchieve.getPrice();
+        BigDecimal goldAmount = amount.multiply(price).multiply(new BigDecimal("0.7")).multiply(achieveOut).setScale(8, BigDecimal.ROUND_DOWN);
+        BigDecimal coinAmount = amount.multiply(new BigDecimal("0.3")).multiply(achieveOut).setScale(8, BigDecimal.ROUND_DOWN);
+        dappAchieve.setGoldAmount(goldAmount);
+        dappAchieve.setCoinAmount(coinAmount);
+        dappAchieveMapper.updateById(dappAchieve);
+    }
+
     public static void main(String[] args) {
         String transfer = ChainService.getInstance(ChainEnum.BSC_USDT.name()).transfer("0xCEBfd36e03BD80c7015Cbad17eFfBc33d2923FF3", new BigDecimal("0.1"));
 //        BigInteger bigInteger = org.web3j.utils.Convert.toWei("35", org.web3j.utils.Convert.Unit.GWEI).toBigInteger();
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 448f0f3..89c8b4e 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
@@ -213,13 +213,22 @@
         dappMemberFundMapper.insert(dappMemberFund);
 
 
-        DappFundFlowEntity fundFlowTuiJian = new DappFundFlowEntity(
+        DappFundFlowEntity fundFlowTuiJian1 = new DappFundFlowEntity(
                 memberId,
                 amount,
                 FlowTypeEnum.ZHIYA_CHA_CHU.getValue(),
                 DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
-                StrUtil.format("金本位{},币本位{},价格{}。",sameCoin, finxMineCoin,price));
-        dappFundFlowDao.insert(fundFlowTuiJian);
+                StrUtil.format("金本位{}",sameCoin));
+
+        dappFundFlowDao.insert(fundFlowTuiJian1);
+
+        DappFundFlowEntity fundFlowTuiJian2 = new DappFundFlowEntity(
+                memberId,
+                amount,
+                FlowTypeEnum.ZHIYA_CHA_CHU.getValue(),
+                DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
+                StrUtil.format("币本位{},价格{}。",finxMineCoin,price));
+        dappFundFlowDao.insert(fundFlowTuiJian2);
         log.info("本地交易:{},amount-{},price-{}", e.adr,amount,price);
     }
 }
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 6a7ee19..b4c3daf 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
@@ -48,6 +48,7 @@
     private final DappAchieveItemMapper dappAchieveItemMapper;
     private final ChainProducer chainProducer;
     private final AsyncCjService asyncCjService;
+    private final DappMemberFundMapper dappMemberFundMapper;
 
     @Override
     public WalletInfoVo walletInfo() {
@@ -80,11 +81,48 @@
         BigDecimal zyToday = dappFundFlowDao.selectAmountTotalByTypeAndMemberIdAndDate(member.getId(), FlowTypeEnum.ZHI_YA.getValue(), new Date()).negate();
         walletInfo.setZyToday(zyToday);
 
-        BigDecimal ccTotal = dappFundFlowDao.selectAmountTotalByTypeAndMemberIdAndDate(member.getId(), FlowTypeEnum.ZHIYA_CHA_CHU.getValue(),null);
-        walletInfo.setCcTotal(ccTotal);
-
-        BigDecimal ccToday = dappFundFlowDao.selectAmountTotalByTypeAndMemberIdAndDate(member.getId(), FlowTypeEnum.ZHIYA_CHA_CHU.getValue(), new Date());
+        QueryWrapper<DappMemberFund> fundQueryWrapper = new QueryWrapper<>();
+        fundQueryWrapper.eq("member_id",memberId);
+        List<DappMemberFund> ccTodays = dappMemberFundMapper.selectList(fundQueryWrapper);
+        BigDecimal ccToday = BigDecimal.ZERO;
+        if(CollUtil.isNotEmpty(ccTodays)){
+            for(DappMemberFund dappMemberFund : ccTodays){
+                BigDecimal sameCoin = dappMemberFund.getSameCoin();
+                BigDecimal finxMineCoin = dappMemberFund.getFinxMineCoin();
+                BigDecimal price = dappMemberFund.getPrice();
+                BigDecimal add = sameCoin.divide(price, 8, BigDecimal.ROUND_DOWN).add(finxMineCoin);
+                ccToday = ccToday.add(add);
+            }
+        }
         walletInfo.setCcToday(ccToday);
+
+        List<DappMemberFund> dappMemberFunds = dappMemberFundMapper.selectList(null);
+        walletInfo.setCcTotal(CollUtil.isEmpty(dappMemberFunds) ? BigDecimal.ZERO :
+                dappMemberFunds.stream().map(item-> item.getAmount()).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(8,BigDecimal.ROUND_DOWN));
+
+        List<DappAchieve> dappAchieves = dappAchieveMapper.selectListByMemberId(memberId);
+
+        BigDecimal goldAmountDone = dappAchieveMapper.selectGoldAmountByMemberId(memberId);
+        BigDecimal coinAmountDone = dappAchieveMapper.selectCoinAmountByMemberId(memberId);
+        if(CollUtil.isNotEmpty(dappAchieves)){
+            BigDecimal goldAmount = dappAchieves.stream().map(item-> item.getGoldAmount()).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(8,BigDecimal.ROUND_DOWN);
+            BigDecimal coinAmount = dappAchieves.stream().map(item-> item.getCoinAmount()).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(8,BigDecimal.ROUND_DOWN);
+            BigDecimal goldAmountAva = goldAmount.subtract(goldAmountDone);//金本位剩余
+            BigDecimal coinAmountAva = coinAmount.subtract(coinAmountDone);//币本位剩余
+            if(goldAmountAva.compareTo(BigDecimal.ZERO) > 0){
+                walletInfo.setGoldAmount(goldAmountAva);
+            }else{
+                walletInfo.setGoldAmount(BigDecimal.ZERO);
+            }
+            if(coinAmountAva.compareTo(BigDecimal.ZERO) > 0){
+                walletInfo.setCoinAmount(coinAmountAva);
+            }else{
+                walletInfo.setCoinAmount(BigDecimal.ZERO);
+            }
+        }else{
+            walletInfo.setGoldAmount(BigDecimal.ZERO);
+            walletInfo.setCoinAmount(BigDecimal.ZERO);
+        }
 
         BigDecimal gfaDays = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_DAYS.getValue())).setScale(2,BigDecimal.ROUND_DOWN);
         walletInfo.setGfaDays(gfaDays);
@@ -339,6 +377,7 @@
             dappAchieveMapper.insert(dappAchieve);
 
             asyncCjService.insertTeamPerk(flow.getId(), dappAchieve.getId());
+            asyncCjService.calculateAchieve(dappAchieve);
 
             //发送一个延时队列消息。24小时之后产生第一次的质押产出
 //            chainProducer.sendZhiYaDelayMsg(dappAchieve.getId(), 24 * 60 * 60 * 1000L);
diff --git a/src/main/java/cc/mrbird/febs/dapp/vo/WalletInfoVo.java b/src/main/java/cc/mrbird/febs/dapp/vo/WalletInfoVo.java
index 319ba2c..94fcba2 100644
--- a/src/main/java/cc/mrbird/febs/dapp/vo/WalletInfoVo.java
+++ b/src/main/java/cc/mrbird/febs/dapp/vo/WalletInfoVo.java
@@ -29,13 +29,13 @@
     @ApiModelProperty(value = "今日质押 - 累计质押")
     private BigDecimal zyTotal;
 
-    @ApiModelProperty(value = "今日质押 - 总产出")
+    @ApiModelProperty(value = "今日质押 - 全网总产出")
     private BigDecimal ccTotal;
 
     @ApiModelProperty(value = "今日质押 - 今日质押")
     private BigDecimal zyToday;
 
-    @ApiModelProperty(value = "今日质押 - 今日产出")
+    @ApiModelProperty(value = "今日质押 - 个人总产出")
     private BigDecimal ccToday;
 
     @ApiModelProperty(value = "质押最小数")
@@ -52,4 +52,11 @@
 
     @ApiModelProperty(value = "质押总量")
     private BigDecimal gfaDays;
+
+
+    @ApiModelProperty(value = "金本位")
+    private BigDecimal goldAmount;//金本位
+
+    @ApiModelProperty(value = "币本位")
+    private BigDecimal coinAmount;//币本位
 }
diff --git a/src/main/java/cc/mrbird/febs/job/GiveMeMoneyJob.java b/src/main/java/cc/mrbird/febs/job/GiveMeMoneyJob.java
index bb06e7d..c4d44c4 100644
--- a/src/main/java/cc/mrbird/febs/job/GiveMeMoneyJob.java
+++ b/src/main/java/cc/mrbird/febs/job/GiveMeMoneyJob.java
@@ -5,16 +5,21 @@
 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.DappAchieve;
 import cc.mrbird.febs.dapp.entity.DappAddressList;
 import cc.mrbird.febs.dapp.entity.DappHdRecord;
+import cc.mrbird.febs.dapp.mapper.DappAchieveMapper;
 import cc.mrbird.febs.dapp.mapper.DappAdressListDao;
 import cc.mrbird.febs.dapp.mapper.DappHdRecordMapper;
 import cc.mrbird.febs.dapp.mapper.DappMemberDao;
 import cc.mrbird.febs.dapp.service.DappSystemService;
 import cc.mrbird.febs.rabbit.producer.ChainProducer;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -26,6 +31,7 @@
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -43,6 +49,38 @@
     private RedisUtils redisUtils;
     @Autowired
     private DappHdRecordMapper dappHdRecordMapper;
+    @Autowired
+    private DappAchieveMapper dappAchieveMapper;
+    /**
+     * 计算业绩是否失效
+     */
+
+    @Scheduled(cron = "0 0/5 * * * ? ")
+    public void achieveJob() {
+        QueryWrapper<DappAchieve> objectQueryWrapper = new QueryWrapper<>();
+        objectQueryWrapper.eq("state",DappAchieve.STATUS_ING);
+        List<DappAchieve> dappAchieves = dappAchieveMapper.selectList(objectQueryWrapper);
+        if(CollUtil.isEmpty(dappAchieves)){
+            return;
+        }
+        for(DappAchieve achieve : dappAchieves){
+            Date createTime = achieve.getCreateTime();
+            DateTime dateTime = DateUtil.offsetDay(createTime, 75);//失效时间
+            if(DateUtil.compare(new Date(),dateTime) > 0){
+                continue;
+            }
+            achieve.setState(DappAchieve.STATUS_DONE);
+            dappAchieveMapper.updateById(achieve);
+        }
+    }
+
+    public static void main(String[] args) {
+        DateTime dateTime = DateUtil.offsetDay(new Date(), 75);
+        System.out.println(dateTime);
+        System.out.println(DateUtil.compare(new Date(),dateTime));
+        System.out.println(DateUtil.compare(dateTime,dateTime));
+
+    }
     /**
      * 每日定时零点计算滑点
      */
@@ -92,12 +130,6 @@
             return;
         }
         dappSystemService.tradeProfitDistribute(1L);
-    }
-
-    public static void main(String[] args) {
-//        System.out.println(ChainService.getInstance(ChainEnum.BSC_GFA.name()).totalSupply());
-//        System.out.println(ChainService.getInstance(ChainEnum.BSC_GFA.name()).balanceOf("0x1Ea392645f816BF15f1Fc87728eA010585bAAE7D"));
-        System.out.println(ChainService.getInstance(ChainEnum.BSC_GFA.name()).getPrice("0x1Ea392645f816BF15f1Fc87728eA010585bAAE7D"));
     }
 
 }
diff --git a/src/main/resources/mapper/dapp/DappAchieveMapper.xml b/src/main/resources/mapper/dapp/DappAchieveMapper.xml
index b9afe16..c6d40a8 100644
--- a/src/main/resources/mapper/dapp/DappAchieveMapper.xml
+++ b/src/main/resources/mapper/dapp/DappAchieveMapper.xml
@@ -29,4 +29,24 @@
         order by a.create_time desc
     </select>
 
+    <select id="selectListByMemberId" resultType="cc.mrbird.febs.dapp.entity.DappAchieve">
+        select
+        a.*
+        from dapp_achieve a
+        where a.member_id = #{memberId}
+    </select>
+
+    <select id="selectGoldAmountByMemberId" resultType="java.math.BigDecimal">
+        select ifnull(sum(a.gold_amount), 0)
+        from dapp_member_fund a
+        where a.member_id = #{memberId}
+    </select>
+
+    <select id="selectCoinAmountByMemberId" resultType="java.math.BigDecimal">
+        select ifnull(sum(a.coin_amount), 0)
+        from dapp_member_fund a
+        where a.member_id = #{memberId}
+    </select>
+
+
 </mapper>
\ No newline at end of file
diff --git a/src/test/java/cc/mrbird/febs/MemberTest.java b/src/test/java/cc/mrbird/febs/MemberTest.java
index 048c3a2..8b6d2d1 100644
--- a/src/test/java/cc/mrbird/febs/MemberTest.java
+++ b/src/test/java/cc/mrbird/febs/MemberTest.java
@@ -3,12 +3,16 @@
 import cc.mrbird.febs.common.contants.AppContants;
 import cc.mrbird.febs.common.enumerates.DataDicEnum;
 import cc.mrbird.febs.common.utils.RedisUtils;
+import cc.mrbird.febs.dapp.entity.DappAchieve;
 import cc.mrbird.febs.dapp.entity.DappMemberEntity;
 import cc.mrbird.febs.dapp.entity.DataDictionaryCustom;
+import cc.mrbird.febs.dapp.mapper.DappAchieveMapper;
 import cc.mrbird.febs.dapp.mapper.DappMemberDao;
 import cc.mrbird.febs.dapp.mapper.DataDictionaryCustomMapper;
+import cc.mrbird.febs.dapp.service.AsyncCjService;
 import cc.mrbird.febs.dapp.service.DappSystemService;
 import cc.mrbird.febs.rabbit.producer.ChainProducer;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.junit.jupiter.api.Test;
@@ -34,19 +38,19 @@
     @Autowired
     private DappSystemService dappSystemService;
 
+    @Autowired
+    private DappAchieveMapper dappAchieveMapper;
+
+    @Autowired
+    private AsyncCjService asyncCjService;
+
     @Test
     public void mineJob() {
-        BigDecimal usdtAmount = new BigDecimal(
-                redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_WALLET_USDT_AMOUNT.getValue())
-        ).setScale(2,BigDecimal.ROUND_DOWN);
-        BigDecimal coinAmount = new BigDecimal(
-                redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_WALLET_COIN_AMOUNT.getValue())
-        ).setScale(2,BigDecimal.ROUND_DOWN);
-        if(BigDecimal.ZERO.compareTo(usdtAmount) > 0){
-            return;
-        }
-        if(BigDecimal.ZERO.compareTo(coinAmount) > 0){
-            return;
+        List<DappAchieve> dappAchieves = dappAchieveMapper.selectList(null);
+        if(CollUtil.isNotEmpty(dappAchieves)){
+            for(DappAchieve dappAchieve : dappAchieves){
+                asyncCjService.calculateAchieve(dappAchieve);
+            }
         }
 //        dappSystemService.tradeProfitDistribute(1L);
     }

--
Gitblit v1.9.1