From 7c5eb91ce4cc1a02077aeb84941368373278fe1b Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Thu, 11 Aug 2022 14:32:02 +0800
Subject: [PATCH] fix:add active nft function

---
 src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java          |   11 +-
 src/main/java/cc/mrbird/febs/dapp/entity/DappNftActivation.java           |   29 +++++++
 src/main/resources/i18n/message_zh_CN.properties                          |   24 +++--
 src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java |   17 ++++
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java |   60 +++++++++++++-
 src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java          |    2 
 src/main/java/cc/mrbird/febs/dapp/dto/ActiveDto.java                      |   24 ++++++
 src/main/java/cc/mrbird/febs/common/contants/AppContants.java             |    2 
 src/main/resources/i18n/message_en_US.properties                          |    4 
 src/main/java/cc/mrbird/febs/dapp/mapper/DappNftActivationDao.java        |    9 ++
 src/main/resources/mapper/dapp/DappNftActivationDao.xml                   |    5 +
 src/main/java/cc/mrbird/febs/dapp/vo/ActiveNftListVo.java                 |   20 +++++
 src/main/resources/spy.properties                                         |   14 +-
 13 files changed, 189 insertions(+), 32 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 3da48dc..4ba5b59 100644
--- a/src/main/java/cc/mrbird/febs/common/contants/AppContants.java
+++ b/src/main/java/cc/mrbird/febs/common/contants/AppContants.java
@@ -178,4 +178,6 @@
     public static final String IDO_BOX_PRIZE = "IDO_BOX_PRIZE";
 
     public static final String REDIS_KEY_SYMBOL_DAILY_PRICE = "SYMBOL_DAILY_PRICE";
+
+    public static final BigDecimal NFT_ACTIVE_PRICE = new BigDecimal("30");
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java b/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java
index 1501361..23f34c7 100644
--- a/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java
+++ b/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java
@@ -20,8 +20,10 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
+import javax.validation.Valid;
+
 /**
- * @author 
+ * @author
  * @date 2022-03-17
  **/
 @Slf4j
@@ -97,4 +99,17 @@
         redisUtils.hdel(AppContants.REDIS_KEY_SIGN, member.getAddress());
         return new FebsResponse().success();
     }
+
+    @ApiOperation(value = "激活卡牌", notes = "激活卡牌")
+    @PostMapping(value = "/activeNft")
+    public FebsResponse activeNft(@RequestBody @Valid ActiveDto activeDto) {
+        dappWalletService.activeNft(activeDto);
+        return new FebsResponse().success();
+    }
+
+    @ApiOperation(value = "卡牌列表", notes = "卡牌列表")
+    @PostMapping(value = "/findNftList")
+    public FebsResponse findNftList() {
+        return null;
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/dto/ActiveDto.java b/src/main/java/cc/mrbird/febs/dapp/dto/ActiveDto.java
new file mode 100644
index 0000000..7b878af
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/dto/ActiveDto.java
@@ -0,0 +1,24 @@
+package cc.mrbird.febs.dapp.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author wzy
+ * @date 2022-08-11
+ **/
+@Data
+@ApiModel(value = "ActiveDto", description = "激活卡牌参数接收类")
+public class ActiveDto {
+
+    @NotNull(message = "参数错误")
+    @ApiModelProperty(value = "id")
+    private Long id;
+
+    @NotNull(message = "参数错误")
+    @ApiModelProperty(value = "交易哈希")
+    private String txHash;
+}
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 627b4b9..05b44a6 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-采矿 4-返利 5-获取盲盒 6-开盲盒获取卡牌 7-推荐奖励
+     * 类型 1-买入 2-卖出 3-采矿 4-返利 5-获取盲盒 6-开盲盒获取卡牌 7-推荐奖励 8-激活盲盒
      */
     private Integer type;
 
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappNftActivation.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappNftActivation.java
new file mode 100644
index 0000000..50a988b
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappNftActivation.java
@@ -0,0 +1,29 @@
+package cc.mrbird.febs.dapp.entity;
+
+import cc.mrbird.febs.common.controller.BaseController;
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author wzy
+ * @date 2022-08-11
+ **/
+@Data
+@TableName("dapp_nft_activation")
+public class DappNftActivation extends BaseEntity {
+
+    private Long memberId;
+
+    private Integer tokenId;
+
+    private String hash;
+
+    private Date openTime;
+
+    private Integer status;
+
+    private Long flowId;
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappNftActivationDao.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappNftActivationDao.java
new file mode 100644
index 0000000..c9e970c
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappNftActivationDao.java
@@ -0,0 +1,9 @@
+package cc.mrbird.febs.dapp.mapper;
+
+import cc.mrbird.febs.dapp.entity.DappNftActivation;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+public interface DappNftActivationDao extends BaseMapper<DappNftActivation> {
+}
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 e17101f..720e581 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java
@@ -1,14 +1,12 @@
 package cc.mrbird.febs.dapp.service;
 
 import cc.mrbird.febs.common.entity.QueryRequest;
-import cc.mrbird.febs.dapp.dto.PriceDto;
-import cc.mrbird.febs.dapp.dto.RecordInPageDto;
-import cc.mrbird.febs.dapp.dto.TransferDto;
-import cc.mrbird.febs.dapp.dto.WalletOperateDto;
+import cc.mrbird.febs.dapp.dto.*;
 import cc.mrbird.febs.dapp.entity.DappAccountMoneyChangeEntity;
 import cc.mrbird.febs.dapp.entity.DappFundFlowEntity;
 import cc.mrbird.febs.dapp.entity.DappWalletCoinEntity;
 import cc.mrbird.febs.dapp.entity.DappWalletMineEntity;
+import cc.mrbird.febs.dapp.vo.ActiveNftListVo;
 import cc.mrbird.febs.dapp.vo.WalletInfoVo;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
@@ -41,4 +39,9 @@
     Map<String, BigDecimal> calPrice(PriceDto priceDto);
 
     int boxSurprise();
+
+    void activeNft(ActiveDto activeDto);
+
+    List<ActiveNftListVo> findUnActiveNftList();
+
 }
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 0a44401..be99e2a 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
@@ -10,17 +10,20 @@
 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.PriceDto;
-import cc.mrbird.febs.dapp.dto.RecordInPageDto;
-import cc.mrbird.febs.dapp.dto.TransferDto;
-import cc.mrbird.febs.dapp.dto.WalletOperateDto;
+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;
 import cc.mrbird.febs.dapp.vo.WalletInfoVo;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
@@ -30,9 +33,7 @@
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * @author
@@ -51,6 +52,7 @@
     private final RedisUtils redisUtils;
     private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
     private final DappSystemService dappSystemService;
+    private final DappNftActivationDao dappNftActivationDao;
 
     @Override
     public WalletInfoVo walletInfo() {
@@ -367,6 +369,7 @@
         HashMap<String, BigDecimal> map = new HashMap<>();
         map.put("x", x);
         map.put("y", y);
+        map.put("nft", AppContants.NFT_ACTIVE_PRICE);
         return map;
     }
 
@@ -407,4 +410,47 @@
 //
 //        return box.getIndex();
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void activeNft(ActiveDto activeDto) {
+        DappMemberEntity member = LoginUserUtil.getAppUser();
+        DappFundFlowEntity fundFlow = new DappFundFlowEntity(member.getId(), BigDecimal.ONE, 8, 1, BigDecimal.ZERO, activeDto.getTxHash());
+        fundFlow.setNewestPrice(AppContants.NFT_ACTIVE_PRICE);
+
+        dappFundFlowDao.insert(fundFlow);
+
+        DappNftActivation nftActive = dappNftActivationDao.selectById(activeDto.getId());
+        if (nftActive.getStatus() != 1) {
+            throw new FebsException(MessageSourceUtils.getString("nft_active_001"));
+        }
+
+        nftActive.setStatus(2);
+        dappNftActivationDao.updateById(nftActive);
+    }
+
+    @Override
+    public List<ActiveNftListVo> findUnActiveNftList() {
+        DappMemberEntity member = LoginUserUtil.getAppUser();
+        List<ActiveNftListVo> list = new ArrayList<>();
+
+        UpdateWrapper<DappNftActivation> query = new UpdateWrapper<>();
+        query.eq("status", 3);
+        query.eq("member_id", member.getId());
+        List<DappNftActivation> nftActivations = dappNftActivationDao.selectList(query);
+
+        if (CollUtil.isEmpty(nftActivations)) {
+            return list;
+        }
+
+        Date now = new Date();
+        nftActivations.forEach(nft -> {
+            ActiveNftListVo nftVo = new ActiveNftListVo();
+            nftVo.setId(nft.getId());
+            nftVo.setRemain(DateUtil.between(nft.getOpenTime(), now, DateUnit.SECOND, false));
+            list.add(nftVo);
+        });
+
+        return list;
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/vo/ActiveNftListVo.java b/src/main/java/cc/mrbird/febs/dapp/vo/ActiveNftListVo.java
new file mode 100644
index 0000000..4657eb3
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/vo/ActiveNftListVo.java
@@ -0,0 +1,20 @@
+package cc.mrbird.febs.dapp.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author wzy
+ * @date 2022-08-11
+ **/
+@Data
+@ApiModel(value = "ActiveNftListVo", description = "卡牌列表")
+public class ActiveNftListVo {
+
+    @ApiModelProperty(value = "待激活卡牌ID")
+    private Long id;
+
+    @ApiModelProperty(value = "倒计时(剩余多少秒)")
+    private Long remain;
+}
diff --git a/src/main/resources/i18n/message_en_US.properties b/src/main/resources/i18n/message_en_US.properties
index cd03dce..0167e28 100644
--- a/src/main/resources/i18n/message_en_US.properties
+++ b/src/main/resources/i18n/message_en_US.properties
@@ -12,4 +12,6 @@
 box_surprise_002=Feature upgrade
 
 
-system_regist_error=Please contact the recommender to recommend registration.
\ No newline at end of file
+system_regist_error=Please contact the recommender to recommend registration.
+
+nft_active_001=Do Not Repeat Activation
\ No newline at end of file
diff --git a/src/main/resources/i18n/message_zh_CN.properties b/src/main/resources/i18n/message_zh_CN.properties
index 7cd5d1b..c30d30e 100644
--- a/src/main/resources/i18n/message_zh_CN.properties
+++ b/src/main/resources/i18n/message_zh_CN.properties
@@ -1,14 +1,16 @@
-system_error=\u7cfb\u7edf\u5f02\u5e38
+system_error=\u7CFB\u7EDF\u5F02\u5E38
 
-transfer_msg_001=\u7cfb\u7edf\u672a\u542f\u52a8
-transfer_msg_002=\u5269\u4f59\u0055\u0053\u0044\u0054\u4e0d\u8db3
-transfer_msg_003=\u8d85\u51fa\u0032\u0034\u5c0f\u65f6\u53ef\u7528\u6570\u91cf
-transfer_msg_004=\u0054\u0046\u0043\u5e01\u4e0d\u8db3
-transfer_msg_005=\u4f4e\u4e8e\u6700\u5c0f\u8d2d\u4e70\u91cf
-transfer_msg_006=\u0054\u0046\u0043\u5e01\u4e0d\u8db3
-transfer_msg_007=\u6bcf\u5929\u6700\u591a\u8d2d\u4e70\u0031\u0030\u0030\u0030\u0055\u0053\u0044\u0054
+transfer_msg_001=\u7CFB\u7EDF\u672A\u542F\u52A8
+transfer_msg_002=\u5269\u4F59USDT\u4E0D\u8DB3
+transfer_msg_003=\u8D85\u51FA24\u5C0F\u65F6\u53EF\u7528\u6570\u91CF
+transfer_msg_004=TFC\u5E01\u4E0D\u8DB3
+transfer_msg_005=\u4F4E\u4E8E\u6700\u5C0F\u8D2D\u4E70\u91CF
+transfer_msg_006=TFC\u5E01\u4E0D\u8DB3
+transfer_msg_007=\u6BCF\u5929\u6700\u591A\u8D2D\u4E701000USDT
 
-box_surprise_001=\u76f2\u76d2\u6570\u91cf\u4e0d\u8db3
-box_surprise_002=\u529f\u80fd\u5347\u7ea7\u4e2d
+box_surprise_001=\u76F2\u76D2\u6570\u91CF\u4E0D\u8DB3
+box_surprise_002=\u529F\u80FD\u5347\u7EA7\u4E2D
 
-system_regist_error=\u8bf7\u8054\u7cfb\u63a8\u8350\u4eba\u63a8\u8350\u6ce8\u518c
\ No newline at end of file
+system_regist_error=\u8BF7\u8054\u7CFB\u63A8\u8350\u4EBA\u63A8\u8350\u6CE8\u518C
+
+nft_active_001=\u8BF7\u52FF\u91CD\u590D\u6FC0\u6D3B
\ No newline at end of file
diff --git a/src/main/resources/mapper/dapp/DappNftActivationDao.xml b/src/main/resources/mapper/dapp/DappNftActivationDao.xml
new file mode 100644
index 0000000..d35d775
--- /dev/null
+++ b/src/main/resources/mapper/dapp/DappNftActivationDao.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.DappNftActivationDao">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/spy.properties b/src/main/resources/spy.properties
index 68fbf3f..fecc552 100644
--- a/src/main/resources/spy.properties
+++ b/src/main/resources/spy.properties
@@ -1,13 +1,13 @@
-# p6spy���ã��ĵ� https://p6spy.readthedocs.io/en/latest/configandusage.html
-# ʹ����־ϵͳ��¼ sql
+# p6spy\u914D\u7F6E\uFF0C\u6587\u6863 https://p6spy.readthedocs.io/en/latest/configandusage.html
+# \u4F7F\u7528\u65E5\u5FD7\u7CFB\u7EDF\u8BB0\u5F55 sql
 appender=com.p6spy.engine.spy.appender.Slf4JLogger
-# �Զ�����־��ӡ
+# \u81EA\u5B9A\u4E49\u65E5\u5FD7\u6253\u5370
 logMessageFormat=cc.mrbird.febs.common.configure.P6spySqlFormatConfigure
-# �Ƿ����� SQL��¼
+# \u662F\u5426\u5F00\u542F\u6162 SQL\u8BB0\u5F55
 outagedetection=true
-# �� SQL��¼��׼ 2 ��
+# \u6162 SQL\u8BB0\u5F55\u6807\u51C6 2 \u79D2
 outagedetectioninterval=2
-# ��������
+# \u5F00\u542F\u8FC7\u6EE4
 filter=true
-# ���� QRTZ�IJ���ӡ
+# \u5305\u542B QRTZ\u7684\u4E0D\u6253\u5370
 exclude=QRTZ,select 1
\ No newline at end of file

--
Gitblit v1.9.1