From cce317594d5d124f6243144f27312ea4f6356f12 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Thu, 28 Jul 2022 17:26:06 +0800
Subject: [PATCH] fix some require

---
 src/main/java/cc/mrbird/febs/dapp/chain/ChainEnumBak.java                 |    1 
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java |  148 ++++++++++++++++++++++--
 src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java           |    6 +
 src/main/java/cc/mrbird/febs/dapp/entity/DappMemberBoxRecordEntity.java   |   30 +++++
 src/main/java/cc/mrbird/febs/dapp/entity/DappWalletCoinEntity.java        |    5 
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java |    3 
 src/main/java/cc/mrbird/febs/dapp/mapper/DappSymbolDailyPriceMapper.java  |    7 +
 src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java                   |    1 
 src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java           |    6 +
 src/main/resources/mapper/dapp/DappSymbolDailyPriceMapper.xml             |    5 
 src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java              |   18 +++
 src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java                    |   15 --
 src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java  |    3 
 src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java          |    7 +
 src/main/java/cc/mrbird/febs/dapp/entity/DappSymbolDailyPriceEntity.java  |   27 ++++
 src/main/java/cc/mrbird/febs/common/contants/AppContants.java             |    6 
 src/main/java/cc/mrbird/febs/job/SystemTradeJob.java                      |    5 
 src/main/java/cc/mrbird/febs/dapp/vo/WalletInfoVo.java                    |    3 
 src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberBoxRecordMapper.java   |   12 ++
 src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java                        |    3 
 src/main/resources/mapper/dapp/DappMemberBoxRecordMapper.xml              |   15 ++
 21 files changed, 286 insertions(+), 40 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/contants/AppContants.java b/src/main/java/cc/mrbird/febs/common/contants/AppContants.java
index 99bc06e..4032d93 100644
--- a/src/main/java/cc/mrbird/febs/common/contants/AppContants.java
+++ b/src/main/java/cc/mrbird/febs/common/contants/AppContants.java
@@ -9,7 +9,7 @@
      * 系统用户
      */
     public static final String SYSTEM_USER = "system";
-    
+
     public static final String PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzIfAF0gZs9zn9ENRtz6ocHa8MGljmMmCsjLsRvTIAilBMypMJz/VNooAOhd8GTdsWm8FNGVhRauv7RfxorFJ4Um2UbweUQBIZP2pzZMnclHxhUmYZsn/6IaPzijiUNfEjygtE7ezvso/67ecZJwqfrtlbEjqUbRgo17Qj23suwQIDAQAB";
 
     public static final String PRIVATE_KEY = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALMh8AXSBmz3Of0Q1G3PqhwdrwwaWOYyYKyMuxG9MgCKUEzKkwnP9U2igA6F3wZN2xabwU0ZWFFq6/tF/GisUnhSbZRvB5RAEhk/anNkydyUfGFSZhmyf/oho/OKOJQ18SPKC0Tt7O+yj/rt5xknCp+u2VsSOpRtGCjXtCPbey7BAgMBAAECgYAAgn+23IalJ7z0AejA2T7wLotxet+24/zPcOUVY1bxlnMtDMSHWh6mFmjL4cilMXKGqXHO4NwV+zppsCTMPXVMniI1IhfcyECgFjUrpWNCk30DlqhKePtIUCHdyLrc21mMLLMOQD/Hbga5kHZpR8r5poUAJ5Tnm5rjeyggwDj3MwJBAOnY+dyd39cRPtNLH0ANuR0Hd/WuA/RSRNbBTlXIVlc0hF1QXkgIWT2zA4uvwrFsz3F11YdPdfLgUhkFHlQuhVMCQQDEGhJELXqZ3AMlE9ykhUgv9HaCofGuCvzJnBGDKh4B3ufWG728gCNruoaRmzU8TOeVCABIQ2Un3SAenq0ylYUbAkB1y9PJm0lneAtyulPKm18VTW7TNk5No6eDmqqQMbO0iALpUpO7q2Dw4J03n1jusUYp/FaMq61ZpEAW1Go7s5d7AkEArgsJjTLj7ewDaoPfPrD/6XfJOpVqPvKHepOmQ0g9C6H/FtrWIZeEWFdamZ4ruFH08yL/xSLzg1bQ6/wecZecYwJALY4OP1Z81fhNjzg1AQd1CQQJJXUIkQpxXD/zAS5Cgf7XWfELIA4+86WA8qU1ILYHClFuV0SfxyGvI4ZEmpFosg==";
@@ -157,6 +157,8 @@
     // 用户购买奖励比例(给上级)
     public static final String DIC_VALUE_USER_BUY_REWARD = "USER_BUY_REWARD";
     public static final String DIC_VALUE_MAKER_MIN_LIMIT = "MAKER_MIN_LIMIT";
+    // 获取盲盒推荐数量
+    public static final String DIC_VALUE_BOX_RECOMMEND_CNT = "BOX_RECOMMEND_CNT";
 
     public static final String DESTROY_ADDRESS = "0x0000000000000000000000000000000000000001";
 
@@ -173,4 +175,6 @@
 
     public static final String IDO_MEMBER_RECOMMEND_CNT = "IDO_MEMBER_RECOMMEND_CNT";
     public static final String IDO_BOX_PRIZE = "IDO_BOX_PRIZE";
+
+    public static final String REDIS_KEY_SYMBOL_DAILY_PRICE = "SYMBOL_DAILY_PRICE";
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java b/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java
index 73d652d..4d31c97 100644
--- a/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java
+++ b/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java
@@ -8,21 +8,6 @@
  */
 @Getter
 public enum ChainEnum {
-    /**
-     * 以太坊 USDT合约
-     */
-    ETH_USDT("ETH", "0x6c5640c572504a75121e57760909a9dd0E672f2D",
-            "77f650768ff50a4243c008fbae1be9ffe74c52908ee9081e2e15f3d3411690bb",
-            "https://mainnet.infura.io/v3/f54a5887a3894ebb9425920701a97fe0",
-            "0xdac17f958d2ee523a2206206994597c13d831ec7",
-            ""),
-
-    TRX_USDT("TRX", "TUFzqZRpLwLWJU4jcdf77RKS3Ts2uEhmWL",
-            "e08dce7a4626f97b790e791bcdec31cffab46233744bb1aa133f69f98623d3fb",
-            "",
-            "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
-            "9d461be6-9796-47b9-85d8-b150cbabbb54"),
-
 
     /**
      * 币安 usdt合约
diff --git a/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnumBak.java b/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnumBak.java
index 12a6eef..baba112 100644
--- a/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnumBak.java
+++ b/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnumBak.java
@@ -5,6 +5,7 @@
 /**
  * 链类型
  */
+@Deprecated
 @Getter
 public enum ChainEnumBak {
     /**
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappMemberBoxRecordEntity.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappMemberBoxRecordEntity.java
new file mode 100644
index 0000000..c4511ff
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappMemberBoxRecordEntity.java
@@ -0,0 +1,30 @@
+package cc.mrbird.febs.dapp.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author wzy
+ * @date 2022-07-28
+ **/
+@Data
+@TableName("dapp_member_box_record")
+public class DappMemberBoxRecordEntity {
+
+    private Date createTime = new Date();
+
+    @TableId(value = "id",type = IdType.AUTO)
+    private Long id;
+
+    private Long memberId;
+
+    private String address;
+
+    private Long fromMemberId;
+
+    private String fromAddress;
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappSymbolDailyPriceEntity.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappSymbolDailyPriceEntity.java
new file mode 100644
index 0000000..22fa0d9
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappSymbolDailyPriceEntity.java
@@ -0,0 +1,27 @@
+package cc.mrbird.febs.dapp.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author wzy
+ * @date 2022-07-28
+ **/
+@Data
+@TableName("dapp_symbol_daily_price")
+public class DappSymbolDailyPriceEntity {
+
+    private Date createTime = new Date();
+
+    private String createBy = "system";
+
+    @TableId(value = "id",type = IdType.AUTO)
+    private Long id;
+
+    private BigDecimal price;
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappWalletCoinEntity.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappWalletCoinEntity.java
index 41f39e2..55d298b 100644
--- a/src/main/java/cc/mrbird/febs/dapp/entity/DappWalletCoinEntity.java
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappWalletCoinEntity.java
@@ -27,11 +27,6 @@
     private String address;
 
     /**
-     * usdt余额
-     */
-    private BigDecimal usdtAmount;
-
-    /**
      * 盲盒数量
      */
     private Integer boxCnt;
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberBoxRecordMapper.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberBoxRecordMapper.java
new file mode 100644
index 0000000..f61c0f5
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberBoxRecordMapper.java
@@ -0,0 +1,12 @@
+package cc.mrbird.febs.dapp.mapper;
+
+import cc.mrbird.febs.dapp.entity.DappMemberBoxRecordEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+public interface DappMemberBoxRecordMapper extends BaseMapper<DappMemberBoxRecordEntity> {
+
+    DappMemberBoxRecordEntity selectByFromAddress(@Param("address") String address);
+
+    DappMemberBoxRecordEntity selectByFromMemberId(@Param("memberId") Long memberId);
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappSymbolDailyPriceMapper.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappSymbolDailyPriceMapper.java
new file mode 100644
index 0000000..051bbfc
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappSymbolDailyPriceMapper.java
@@ -0,0 +1,7 @@
+package cc.mrbird.febs.dapp.mapper;
+
+import cc.mrbird.febs.dapp.entity.DappSymbolDailyPriceEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface DappSymbolDailyPriceMapper extends BaseMapper<DappSymbolDailyPriceEntity> {
+}
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 e33de0c..459a06b 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java
@@ -3,6 +3,7 @@
 import cc.mrbird.febs.dapp.dto.SystemDto;
 import cc.mrbird.febs.dapp.entity.DappMineDataEntity;
 
+import java.math.BigDecimal;
 import java.util.Map;
 
 public interface DappSystemService {
@@ -39,4 +40,10 @@
     void transferPoolSetting();
 
     void sourcePoolUsdtOutLimitSetting();
+
+    void boxCnt(Long id);
+
+    boolean systemHasStart();
+
+    BigDecimal newestPrice();
 }
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 4e2b52d..6fe8687 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
@@ -165,6 +165,9 @@
 
                 // 发送购买奖励消息
                 chainProducer.sendUserBuyReward(fundFlow.getId());
+
+                // 发送盲盒消息
+                chainProducer.sendNftBoxMsg(fundFlow.getId());
             }
         }
     }
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 3b66239..c7bf6c8 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
@@ -50,6 +50,9 @@
     private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
     private final DappOnlineTransferDao dappOnlineTransferDao;
     private final ChainProducer chainProducer;
+    private final DappSymbolDailyPriceMapper dappSymbolDailyPriceMapper;
+    private final DappMemberBoxRecordMapper dappMemberBoxRecordMapper;
+    private final DappWalletCoinDao dappWalletCoinDao;
 
 
     @Override
@@ -275,6 +278,14 @@
         // 中转池交易量
         BigDecimal transferPoll = (BigDecimal) transferPoolObj;
 
+        // 判断今日价格比前一日价格是否跌了,若是,则今天挖矿减半
+        BigDecimal downReduce = BigDecimal.ONE;
+        if (symbolPriceUpOrDown()) {
+            downReduce = new BigDecimal("0.5");
+        }
+
+        BigDecimal totalMineCnt = transferPoll.multiply(new BigDecimal("0.2")).multiply(downReduce);
+
         List<DappMemberEntity> allMembers = dappMemberDao.selectList(null);
         if (CollUtil.isEmpty(allMembers)) {
             return;
@@ -294,7 +305,7 @@
             }
 
             // 挖矿数量
-            BigDecimal mine = transferPoll.multiply(new BigDecimal("0.2")).multiply(balance.divide(allInternet, instance.decimals(), RoundingMode.HALF_UP));
+            BigDecimal mine = totalMineCnt.multiply(balance.divide(allInternet, instance.decimals(), RoundingMode.HALF_UP));
             if (mine.compareTo(BigDecimal.ZERO) < 1) {
                 continue;
             }
@@ -354,20 +365,20 @@
         }
 
         // 判断系统是否启动,如满足条件则启动系统
-        String hasStart = redisUtils.getString(AppContants.SYSTEM_START_FLAG);
-        if (!"start".equals(hasStart)) {
-            DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(AppContants.DIC_TYPE_SYSTEM_SETTING, AppContants.DIC_VALUE_SYSTEM_START_TARGET);
-            BigDecimal target = new BigDecimal(dic.getValue());
-
-            // 若源池中的USDT达到或超过8万U,则启动整个系统
-            BigDecimal balance = ChainService.getInstance(ChainEnum.BSC_USDT_SOURCE.name()).balanceOf(ChainEnum.BSC_USDT_SOURCE.getAddress());
-            if (target.compareTo(balance) < 1) {
-                redisUtils.set(AppContants.SYSTEM_START_FLAG, "start");
-
-                // 启动系统
-                startSystem();
-            }
-        }
+//        String hasStart = redisUtils.getString(AppContants.SYSTEM_START_FLAG);
+//        if (!"start".equals(hasStart)) {
+//            DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(AppContants.DIC_TYPE_SYSTEM_SETTING, AppContants.DIC_VALUE_SYSTEM_START_TARGET);
+//            BigDecimal target = new BigDecimal(dic.getValue());
+//
+//            // 若源池中的USDT达到或超过8万U,则启动整个系统
+//            BigDecimal balance = ChainService.getInstance(ChainEnum.BSC_USDT_SOURCE.name()).balanceOf(ChainEnum.BSC_USDT_SOURCE.getAddress());
+//            if (target.compareTo(balance) < 1) {
+//                redisUtils.set(AppContants.SYSTEM_START_FLAG, "start");
+//
+//                // 启动系统
+//                startSystem();
+//            }
+//        }
     }
 
     @Override
@@ -509,4 +520,111 @@
         redisUtils.set(AppContants.REDIS_KEY_USDT_OUT_LIMIT, total);
         redisUtils.set(AppContants.REDIS_KEY_USDT_OUT_LIMIT_REMAIN, total);
     }
+
+    private boolean symbolPriceUpOrDown() {
+        String dailyPrice = redisUtils.getString(AppContants.REDIS_KEY_SYMBOL_DAILY_PRICE);
+        BigDecimal lastDayPrice = BigDecimal.ZERO;
+        if (StrUtil.isNotBlank(dailyPrice)) {
+            lastDayPrice = new BigDecimal(dailyPrice);
+        }
+
+        ContractChainService tfcInstance = ChainService.getInstance(ChainEnum.BSC_TFC.name());
+        // 源池币种数量
+        BigDecimal tfcBalance = tfcInstance.balanceOf(ChainEnum.BSC_TFC.getAddress());
+
+        // 源池USDT数量
+        BigDecimal usdtBalance = ChainService.getInstance(ChainEnum.BSC_USDT.name()).balanceOf(ChainEnum.BSC_USDT.getAddress());
+
+        BigDecimal todayPrice = tfcBalance.divide(usdtBalance, tfcInstance.decimals(), RoundingMode.HALF_UP);
+
+        DappSymbolDailyPriceEntity dailyPriceEntity = new DappSymbolDailyPriceEntity();
+        dailyPriceEntity.setPrice(todayPrice);
+        this.dappSymbolDailyPriceMapper.insert(dailyPriceEntity);
+
+        redisUtils.set(AppContants.REDIS_KEY_SYMBOL_DAILY_PRICE, todayPrice.toString());
+
+        // 如果价格有跌幅,则挖矿减半
+        return todayPrice.compareTo(lastDayPrice) < 0;
+    }
+
+    @Override
+    public void boxCnt(Long id) {
+        DappFundFlowEntity fundFlow = dappFundFlowDao.selectById(id);
+
+        DappMemberEntity member = dappMemberDao.selectById(fundFlow.getMemberId());
+        DappMemberEntity parent = dappMemberDao.selectMemberInfoByInviteId(member.getRefererId());
+        if (parent == null) {
+            return;
+        }
+
+        DappMemberBoxRecordEntity memberBox = dappMemberBoxRecordMapper.selectByFromMemberId(fundFlow.getMemberId());
+        if (memberBox != null) {
+            return;
+        }
+
+        BigDecimal balance = ChainService.getInstance(ChainEnum.BSC_TFC.name()).balanceOf(member.getAddress());
+        BigDecimal usdtBalance = balance.multiply(newestPrice());
+
+        DataDictionaryCustom data = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(AppContants.DIC_TYPE_SYSTEM_SETTING, AppContants.DIC_VALUE_MINI_HOLD_COIN_LIMIT);
+        BigDecimal miniLimit = new BigDecimal(data.getValue());
+        if (usdtBalance.compareTo(miniLimit) < 0) {
+            return;
+        }
+
+        DataDictionaryCustom boxRecommendCnt = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(AppContants.DIC_TYPE_SYSTEM_SETTING, AppContants.DIC_VALUE_BOX_RECOMMEND_CNT);
+        int box = 0;
+        // 需要第一次购买,才在推荐中加1
+        Object parentRecommend = redisUtils.hget(AppContants.IDO_MEMBER_RECOMMEND_CNT, parent.getAddress());
+        if (parentRecommend == null) {
+            redisUtils.hset(AppContants.IDO_MEMBER_RECOMMEND_CNT, parent.getAddress(), 1);
+        } else {
+            int i = (int) parentRecommend;
+
+            // 如果超过10个,则新增一个盲盒,并重置推荐人数
+            if (++i == new Integer(boxRecommendCnt.getValue())) {
+                box = 1;
+                redisUtils.hset(AppContants.IDO_MEMBER_RECOMMEND_CNT, parent.getAddress(), 0);
+            } else {
+                redisUtils.hset(AppContants.IDO_MEMBER_RECOMMEND_CNT, parent.getAddress(), i);
+            }
+        }
+
+        if (box > 0) {
+            DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(parent.getId());
+            walletCoin.setBoxCnt(walletCoin.getBoxCnt() + box);
+            dappWalletCoinDao.updateById(walletCoin);
+
+            DappMemberBoxRecordEntity memberBoxRecordEntity = new DappMemberBoxRecordEntity();
+            memberBoxRecordEntity.setMemberId(parent.getId());
+            memberBoxRecordEntity.setAddress(parent.getAddress());
+            memberBoxRecordEntity.setFromMemberId(member.getId());
+            memberBoxRecordEntity.setFromAddress(member.getAddress());
+            this.dappMemberBoxRecordMapper.insert(memberBoxRecordEntity);
+
+            DappFundFlowEntity boxFundFlow = new DappFundFlowEntity(parent.getId(), new BigDecimal(box), 5, 2, BigDecimal.ZERO);
+            dappFundFlowDao.insert(boxFundFlow);
+        }
+
+    }
+
+    @Override
+    public boolean systemHasStart() {
+        String hasStart = redisUtils.getString(AppContants.SYSTEM_START_FLAG);
+        if (!"start".equals(hasStart)) {
+            log.info("系统未启动");
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public BigDecimal newestPrice() {
+        if (systemHasStart()) {
+            String dailyPrice = redisUtils.getString(AppContants.REDIS_KEY_SYMBOL_DAILY_PRICE);
+            return StrUtil.isNotBlank(dailyPrice) ? new BigDecimal(dailyPrice) : BigDecimal.ZERO;
+        } else {
+            return new BigDecimal("0.05");
+        }
+    }
 }
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 845bbb5..f757126 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
@@ -60,12 +60,15 @@
         List<DappMemberEntity> notDirect = dappMemberDao.selectChildMemberDirectOrNot(member.getInviteId(), 2);
         BigDecimal childHoldAmount = dappMemberDao.selectChildHoldAmount(member.getInviteId());
 
+        DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(member.getId());
+
         walletInfo.setTotalChild(notDirect.size());
         walletInfo.setDirectCnt(direct.size());
         walletInfo.setTotalChildCoin(childHoldAmount);
         walletInfo.setTeamReward(map.get("teamReward"));
         walletInfo.setMiningAmount(map.get("mine"));
         walletInfo.setInviteId(member.getInviteId());
+        walletInfo.setBoxCnt(walletCoin.getBoxCnt());
         return walletInfo;
     }
 
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 dedb98f..1862428 100644
--- a/src/main/java/cc/mrbird/febs/dapp/vo/WalletInfoVo.java
+++ b/src/main/java/cc/mrbird/febs/dapp/vo/WalletInfoVo.java
@@ -40,4 +40,7 @@
 
     @ApiModelProperty(value = "团队奖励数量")
     private BigDecimal teamReward;
+
+    @ApiModelProperty(value = "盲盒数量")
+    private Integer boxCnt;
 }
diff --git a/src/main/java/cc/mrbird/febs/job/SystemTradeJob.java b/src/main/java/cc/mrbird/febs/job/SystemTradeJob.java
index d2ca19c..7d34c06 100644
--- a/src/main/java/cc/mrbird/febs/job/SystemTradeJob.java
+++ b/src/main/java/cc/mrbird/febs/job/SystemTradeJob.java
@@ -56,15 +56,14 @@
         systemService.sourcePoolUsdtOutLimitSetting();
     }
 
-
     /**
      * 挖矿
      *
      * 以中转池成交数1:0.2出矿(中转池卖出多少,矿池则1:0.2出币),每个地址所得=出币量*(单个地址持币量/全网持币量)
      * source限矿算法:
-     * TODO 按前一天价格,有跌幅则按实际产矿量减半。
+     * 按前一天价格,有跌幅则按实际产矿量减半。
      */
-    @Scheduled(cron = "0 0 2 * * ?")
+    @Scheduled(cron = "0 0 1 * * ?")
     public void mineJob() {
         log.info("挖矿");
         systemService.mining();
diff --git a/src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java b/src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java
index ab42222..64b41f2 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java
@@ -9,4 +9,5 @@
     public static final String ONLINE_TRANSFER = "queue_online_transfer";
     public static final String DISTRIB_PROFIT = "queue_distrib_profit";
     public static final String USER_BUY_REWARD = "queue_user_buy_reward";
+    public static final String NFT_BOX = "queue_nft_box";
 }
diff --git a/src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java b/src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java
index de125f9..1a739d5 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java
@@ -8,7 +8,8 @@
 
     ONLINE_TRANSFER("exchange_online_transfer", "route_key_online_transfer", "queue_online_transfer"),
     DISTRIB_PROFIT("exchange_distrib_profit", "route_key_distrib_profit", "queue_distrib_profit"),
-    USER_BUY_REWARD("exchange_user_buy_reward", "route_key_user_buy_reward", "queue_user_buy_reward");
+    USER_BUY_REWARD("exchange_user_buy_reward", "route_key_user_buy_reward", "queue_user_buy_reward"),
+    NFT_BOX("exchange_nft_box", "route_key_nft_box", "queue_nft_box");
 
     private String exchange;
 
diff --git a/src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java b/src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java
index 0b28eb2..0e6c190 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java
@@ -75,4 +75,22 @@
         return BindingBuilder.bind(userBuyRewardQueue()).to(userBuyRewardExchange()).with(QueueEnum.USER_BUY_REWARD.getRoute());
     }
     // === 用户购买奖励 end ===
+
+
+    // === nft卡牌盲盒 start ===
+    @Bean
+    public DirectExchange nftBoxExchange() {
+        return new DirectExchange(QueueEnum.NFT_BOX.getExchange());
+    }
+
+    @Bean
+    public Queue nftBoxQueue() {
+        return new Queue(QueueEnum.NFT_BOX.getQueue());
+    }
+
+    @Bean
+    public Binding nftBoxBind() {
+        return BindingBuilder.bind(nftBoxQueue()).to(nftBoxExchange()).with(QueueEnum.NFT_BOX.getRoute());
+    }
+    // === nft卡牌盲盒 end ===
 }
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 11dc7db..9b0b618 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java
@@ -39,4 +39,10 @@
         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));
+    }
 }
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 f6a225e..e2da47e 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java
@@ -50,4 +50,10 @@
         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);
+    }
 }
diff --git a/src/main/resources/mapper/dapp/DappMemberBoxRecordMapper.xml b/src/main/resources/mapper/dapp/DappMemberBoxRecordMapper.xml
new file mode 100644
index 0000000..c25d901
--- /dev/null
+++ b/src/main/resources/mapper/dapp/DappMemberBoxRecordMapper.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cc.mrbird.febs.dapp.mapper.DappMemberBoxRecordMapper">
+
+    <select id="selectByFromAddress" resultType="cc.mrbird.febs.dapp.entity.DappMemberBoxRecordEntity">
+        select * from dapp_member_box_record
+        where from_address=#{address}
+    </select>
+
+    <select id="selectByFromMemberId" resultType="cc.mrbird.febs.dapp.entity.DappMemberBoxRecordEntity">
+        select * from dapp_member_box_record
+        where from_member_id=#{memberId}
+    </select>
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/dapp/DappSymbolDailyPriceMapper.xml b/src/main/resources/mapper/dapp/DappSymbolDailyPriceMapper.xml
new file mode 100644
index 0000000..f1ced84
--- /dev/null
+++ b/src/main/resources/mapper/dapp/DappSymbolDailyPriceMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cc.mrbird.febs.dapp.mapper.DappSymbolDailyPriceMapper">
+
+</mapper>
\ No newline at end of file

--
Gitblit v1.9.1