From 02c885c7ae66d23625e98df3eb63a21bd5f8bc90 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Mon, 29 May 2023 15:31:54 +0800
Subject: [PATCH] twoCoin项目修改

---
 src/main/java/cc/mrbird/febs/dapp/enumerate/FundFlowEnum.java             |    4 +
 src/main/java/cc/mrbird/febs/dapp/enumerate/PoolEnum.java                 |    4 +
 src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java          |    4 +
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java |    1 
 src/main/resources/mapper/dapp/DappMemberDao.xml                          |    1 
 src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java |   14 +++
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java |  127 +++++++++++++++++++++++++++++++
 src/main/java/cc/mrbird/febs/dapp/vo/DappMemberInfoVo.java                |    6 +
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java |   10 ++
 src/main/java/cc/mrbird/febs/dapp/dto/RoundCoinDto.java                   |   19 ++++
 10 files changed, 189 insertions(+), 1 deletions(-)

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 471a375..c98fbc4 100644
--- a/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java
+++ b/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java
@@ -114,6 +114,20 @@
         return new FebsResponse().success().data("success");
     }
 
+    @ApiOperation(value = "互转ANDAO", notes = "互转ANDAO")
+    @PostMapping(value = "/roundCoin")
+    public FebsResponse roundCoin(@RequestBody RoundCoinDto roundCoinDto) {
+        dappWalletService.roundCoin(roundCoinDto);
+        return new FebsResponse().success().data("success");
+    }
+
+    @ApiOperation(value = "互转AUSDT", notes = "互转AUSDT")
+    @PostMapping(value = "/roundCoinAusdt")
+    public FebsResponse roundCoinAusdt(@RequestBody RoundCoinDto roundCoinDto) {
+        dappWalletService.roundCoinAusdt(roundCoinDto);
+        return new FebsResponse().success().data("success");
+    }
+
     @ApiOperation(value = "记录列表", notes = "记录列表")
     @ApiResponses({
             @ApiResponse(code = 200, message = "success", response = DappFundFlowVo.class)
diff --git a/src/main/java/cc/mrbird/febs/dapp/dto/RoundCoinDto.java b/src/main/java/cc/mrbird/febs/dapp/dto/RoundCoinDto.java
new file mode 100644
index 0000000..830aaef
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/dto/RoundCoinDto.java
@@ -0,0 +1,19 @@
+package cc.mrbird.febs.dapp.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel(value = "RoundCoinDto", description = "互转")
+public class RoundCoinDto {
+
+    @ApiModelProperty(value = "对方地址", example = "0Xadsfsa")
+    private String address;
+
+    @ApiModelProperty(value = "币的数量", example = "20")
+    private BigDecimal coinCnt;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/enumerate/FundFlowEnum.java b/src/main/java/cc/mrbird/febs/dapp/enumerate/FundFlowEnum.java
index 6488d47..2e18710 100644
--- a/src/main/java/cc/mrbird/febs/dapp/enumerate/FundFlowEnum.java
+++ b/src/main/java/cc/mrbird/febs/dapp/enumerate/FundFlowEnum.java
@@ -8,6 +8,10 @@
  */
 @Getter
 public enum FundFlowEnum {
+    //ANDAO互转
+    ANDAO_MEMBER_TO_MENBER("ANDAO_MEMBER_TO_MENBER", 32),
+    //AUSDT互转
+    AUSDT_MEMBER_TO_MENBER("AUSDT_MEMBER_TO_MENBER", 31),
     //20%全网加权分红(按20%释放递减)-(全网收益)
     POOL_MEMBER_A_CNT("POOL_MEMBER_A_CNT", 30),
     //每小时燃烧-(AN DAO燃烧)
diff --git a/src/main/java/cc/mrbird/febs/dapp/enumerate/PoolEnum.java b/src/main/java/cc/mrbird/febs/dapp/enumerate/PoolEnum.java
index 1977a49..0326e2e 100644
--- a/src/main/java/cc/mrbird/febs/dapp/enumerate/PoolEnum.java
+++ b/src/main/java/cc/mrbird/febs/dapp/enumerate/PoolEnum.java
@@ -8,6 +8,10 @@
 @Getter
 public enum PoolEnum {
     /**
+     * AUSD互转20%
+     */
+    ANDAO_MEMBER_TO_MENBER_PERCENT("WALLET_SET", "ANDAO_MEMBER_TO_MENBER_PERCENT"),
+    /**
      * AUSD价格
      */
     TRANSFER_A_AUSD_PRICE("WALLET_SET", "TRANSFER_A_AUSD_PRICE"),
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 3dd1dee..811c700 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java
@@ -59,4 +59,8 @@
     Long transferAusd(TransferAusdDto transferAusdDto);
 
     List<DappFundFlowVo> getRecordVoInPage(RecordInPageDto recordInPageDto);
+
+    void roundCoin(RoundCoinDto roundCoinDto);
+
+    void roundCoinAusdt(RoundCoinDto roundCoinDto);
 }
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 ce24af0..a9dd40e 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
@@ -136,7 +136,8 @@
 
         if (member == null) {
             if (!"asdf4321".equals(connectDto.getInviteId())) {
-                DappMemberEntity parent = dappMemberDao.selectMemberInfoByInviteId(connectDto.getInviteId());
+//                DappMemberEntity parent = dappMemberDao.selectMemberInfoByInviteId(connectDto.getInviteId());
+                DappMemberEntity parent = dappMemberDao.selectByAddress(connectDto.getInviteId(), null);
                 if (parent == null) {
                     throw new FebsException("recommender is not exist");
                 }
@@ -510,6 +511,13 @@
     public FebsResponse getMemberInfo() {
         DappMemberEntity member = LoginUserUtil.getAppUser();
         DappMemberInfoVo dappMemberInfoVo = dappMemberDao.selectByMemberId(member.getId());
+
+        DataDictionaryCustom ausdPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                PoolEnum.TRANSFER_A_AUSD_PERCENT.getType(),
+                PoolEnum.TRANSFER_A_AUSD_PERCENT.getCode()
+        );
+        BigDecimal ausdPercent = new BigDecimal(ausdPercentDic.getValue());
+        dappMemberInfoVo.setAusdtFee(ausdPercent);
         //ausd价格
         DataDictionaryCustom ausdPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                 PoolEnum.TRANSFER_A_AUSD_PRICE.getType(),
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 f7be496..5a1cbfe 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
@@ -1496,6 +1496,7 @@
 
     @Override
     public void selectAndInsertDics() {
+        selectAndInsertDic(PoolEnum.ANDAO_MEMBER_TO_MENBER_PERCENT.getType(),PoolEnum.ANDAO_MEMBER_TO_MENBER_PERCENT.getCode(),"0.2","ANDAO互转20%");
         selectAndInsertDic(PoolEnum.TRANSFER_A_AUSD_PRICE.getType(),PoolEnum.TRANSFER_A_AUSD_PRICE.getCode(),"0.01","AUSD价格");
         selectAndInsertDic(PoolEnum.TRANSFER_A_AUSD_PERCENT.getType(),PoolEnum.TRANSFER_A_AUSD_PERCENT.getCode(),"0.1","买入A,10%的AUSD比例");
         selectAndInsertDic(PoolEnum.WALLET_COIN_OUT_PERCENT.getType(),PoolEnum.WALLET_COIN_OUT_PERCENT.getCode(),"0.3","30%回流底池溢价");
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 7efe3bc..bc794cf 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
@@ -977,4 +977,131 @@
         IPage<DappFundFlowVo> records = dappFundFlowDao.selectVoInPage(page, dappFundFlowEntity);
         return records.getRecords();
     }
+
+    @Override
+    public void roundCoin(RoundCoinDto roundCoinDto) {
+        DappMemberEntity member = LoginUserUtil.getAppUser();
+        DappMemberEntity dappMemberEntity = dappMemberDao.selectById(member.getId());
+
+        String address = roundCoinDto.getAddress();
+        DappMemberEntity memberParent = dappMemberDao.selectByAddress(address, null);
+        if(ObjectUtil.isEmpty(memberParent)){
+            throw new FebsException("请输入正确的地址");
+        }
+
+        BigDecimal coinCnt = roundCoinDto.getCoinCnt();
+        if(BigDecimal.ZERO.compareTo(coinCnt) >= 0){
+            throw new FebsException("输入正确的数量");
+        }
+
+        DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(dappMemberEntity.getId());
+        BigDecimal availableAmount = dappWalletCoinEntity.getAvailableAmount();
+        if(availableAmount.compareTo(coinCnt) < 0){
+            throw new FebsException("数量不足");
+        }
+        //减少闪兑钱包
+        this.updateWalletCoinWithLock(coinCnt,dappMemberEntity.getId(),2);
+        //插入资产闪对的流水
+        DappFundFlowEntity aCoinCntFlow = new DappFundFlowEntity(
+                dappMemberEntity.getId(),
+                coinCnt.negate(),
+                FundFlowEnum.ANDAO_MEMBER_TO_MENBER.getCode(),
+                2,
+                BigDecimal.ZERO);
+        dappFundFlowDao.insert(aCoinCntFlow);
+        //闪对钱包20% 手续费(扣币)
+        DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                PoolEnum.ANDAO_MEMBER_TO_MENBER_PERCENT.getType(),
+                PoolEnum.ANDAO_MEMBER_TO_MENBER_PERCENT.getCode());
+        BigDecimal feePercent = new BigDecimal(StrUtil.isEmpty(dic.getValue()) ? "0.2" : dic.getValue());
+        //手续费
+        BigDecimal feeCnt = coinCnt.multiply(feePercent).setScale(4,BigDecimal.ROUND_DOWN);
+        //闪对钱包获取的
+        BigDecimal aCoinCntReal = coinCnt.subtract(feeCnt).setScale(4, BigDecimal.ROUND_DOWN);
+        //增加闪对钱包
+        this.updateWalletCoinWithLock(aCoinCntReal,memberParent.getId(),1);
+        //插入资产闪对的流水
+        DappFundFlowEntity dappFundFlowEntity = new DappFundFlowEntity(
+                dappMemberEntity.getId(),
+                aCoinCntReal,
+                FundFlowEnum.ANDAO_MEMBER_TO_MENBER.getCode(),
+                2,
+                BigDecimal.ZERO);
+        dappFundFlowDao.insert(dappFundFlowEntity);
+
+        //金本位底池数量
+        DataDictionaryCustom coinAUsdtPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                PoolEnum.COIN_A_USDT_PRICE.getType(),
+                PoolEnum.COIN_A_USDT_PRICE.getCode()
+        );
+        BigDecimal coinAUsdtCnt = new BigDecimal(coinAUsdtPriceDic.getValue());
+        //币本位底池数量
+        DataDictionaryCustom coinACntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                PoolEnum.COIN_A_CNT.getType(),
+                PoolEnum.COIN_A_CNT.getCode()
+        );
+        BigDecimal coinACnt = new BigDecimal(coinACntDic.getValue());
+        coinACnt = coinACnt.subtract(feeCnt).setScale(4,BigDecimal.ROUND_DOWN);
+        coinACntDic.setValue(coinACnt.toString());
+        dataDictionaryCustomMapper.updateById(coinACntDic);
+
+        DataDictionaryCustom aCoinPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                PoolEnum.COIN_A_PRICE.getType(),
+                PoolEnum.COIN_A_PRICE.getCode()
+        );
+        BigDecimal coinAPrice = new BigDecimal(aCoinPriceDic.getValue());
+        coinAPrice = coinAUsdtCnt.divide(coinACnt,8,BigDecimal.ROUND_DOWN);
+        aCoinPriceDic.setValue(coinAPrice.toString());
+        dataDictionaryCustomMapper.updateById(aCoinPriceDic);
+
+        chainProducer.sendAntKLineMsg(0);
+
+    }
+
+    @Override
+    public void roundCoinAusdt(RoundCoinDto roundCoinDto) {
+
+        DappMemberEntity member = LoginUserUtil.getAppUser();
+        DappMemberEntity dappMemberEntity = dappMemberDao.selectById(member.getId());
+
+        String address = roundCoinDto.getAddress();
+        DappMemberEntity memberParent = dappMemberDao.selectByAddress(address, null);
+        if(ObjectUtil.isEmpty(memberParent)){
+            throw new FebsException("请输入正确的地址");
+        }
+
+        BigDecimal coinCnt = roundCoinDto.getCoinCnt();
+        if(BigDecimal.ZERO.compareTo(coinCnt) >= 0){
+            throw new FebsException("输入正确的数量");
+        }
+
+        DappUsdtPerkEntity dappUsdtPerkEntity = dappUsdtPerkEntityMapper.selectByMemberId(dappMemberEntity.getId());
+        BigDecimal availableAmount = dappUsdtPerkEntity.getAusdAmount();
+        if(availableAmount.compareTo(coinCnt) < 0){
+            throw new FebsException("数量不足");
+        }
+        dappUsdtPerkEntity.setAusdAmount(availableAmount.subtract(coinCnt));
+        dappUsdtPerkEntityMapper.updateById(dappUsdtPerkEntity);
+        //插入资产闪对的流水
+        DappFundFlowEntity aCoinCntFlow = new DappFundFlowEntity(
+                dappMemberEntity.getId(),
+                coinCnt.negate(),
+                FundFlowEnum.AUSDT_MEMBER_TO_MENBER.getCode(),
+                2,
+                BigDecimal.ZERO);
+        dappFundFlowDao.insert(aCoinCntFlow);
+
+        DappUsdtPerkEntity parentEntity = dappUsdtPerkEntityMapper.selectByMemberId(dappMemberEntity.getId());
+        BigDecimal availableAmountParent = parentEntity.getAusdAmount();
+        parentEntity.setAusdAmount(availableAmountParent.add(coinCnt));
+        dappUsdtPerkEntityMapper.updateById(parentEntity);
+        //插入资产闪对的流水
+        DappFundFlowEntity aCoinCntFlowParent = new DappFundFlowEntity(
+                dappMemberEntity.getId(),
+                coinCnt,
+                FundFlowEnum.AUSDT_MEMBER_TO_MENBER.getCode(),
+                2,
+                BigDecimal.ZERO);
+        dappFundFlowDao.insert(aCoinCntFlowParent);
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/vo/DappMemberInfoVo.java b/src/main/java/cc/mrbird/febs/dapp/vo/DappMemberInfoVo.java
index e89949c..83822e4 100644
--- a/src/main/java/cc/mrbird/febs/dapp/vo/DappMemberInfoVo.java
+++ b/src/main/java/cc/mrbird/febs/dapp/vo/DappMemberInfoVo.java
@@ -34,6 +34,9 @@
     @ApiModelProperty(value = "A币的价格")
     private BigDecimal coinAPrice;
 
+    @ApiModelProperty(value = "兑换AUSDT的手续费比例")
+    private BigDecimal ausdtFee;
+
     @ApiModelProperty(value = "资产到闪兑的手续费比例")
     private BigDecimal mineToCoinFee;
 
@@ -43,4 +46,7 @@
     @ApiModelProperty(value = "我的贡献值")
     private BigDecimal nftDevote;
 
+    @ApiModelProperty(value = "是否激活 1:已激活 2:未激活  已激活,有推广链接")
+    private Integer activeStatus;
+
 }
diff --git a/src/main/resources/mapper/dapp/DappMemberDao.xml b/src/main/resources/mapper/dapp/DappMemberDao.xml
index 5031249..5d05b9a 100644
--- a/src/main/resources/mapper/dapp/DappMemberDao.xml
+++ b/src/main/resources/mapper/dapp/DappMemberDao.xml
@@ -190,6 +190,7 @@
         select
             a.invite_id inviteId,
             a.account_type accountType,
+            a.active_status activeStatus,
             b.ausd_amount ausdAmount,
             b.nft_devote nftDevote,
             b.amount amount,

--
Gitblit v1.9.1