From 09c3fd87f7113f3b4e3066b718f9b9a4b11d821d Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Thu, 10 Aug 2023 15:51:15 +0800
Subject: [PATCH] 数据修改

---
 src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java           |   13 +++
 src/main/java/cc/mrbird/febs/job/BnbTransferJob.java                      |   10 --
 src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java                   |    5 +
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java |   88 ++++++++++++++++++++++
 src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java           |   12 ++
 src/main/java/cc/mrbird/febs/dapp/vo/PackageInfoVo.java                   |   22 +++++
 src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java              |   17 ++++
 src/main/java/cc/mrbird/febs/dapp/entity/DappMemberEntity.java            |    2 
 src/main/java/cc/mrbird/febs/dapp/enumerate/FundFlowEnum.java             |    2 
 src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java          |    4 +
 src/main/java/cc/mrbird/febs/dapp/enumerate/DataDictionaryEnum.java       |   19 ++++
 src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java          |    2 
 src/main/java/cc/mrbird/febs/dapp/controller/ApiDappOrderController.java  |   15 +++
 src/main/java/cc/mrbird/febs/dapp/dto/SalePackageDto.java                 |   14 +++
 src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java                        |    4 +
 15 files changed, 215 insertions(+), 14 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappOrderController.java b/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappOrderController.java
index 2d46299..8948de0 100644
--- a/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappOrderController.java
+++ b/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappOrderController.java
@@ -94,4 +94,19 @@
         dappMemberService.payOrder(id);
         return new FebsResponse().success().message("操作成功");
     }
+
+    @ApiOperation(value = "资产包详情", notes = "资产包详情")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "success", response = PackageInfoVo.class)
+    })
+    @GetMapping(value = "/packageInfo")
+    public FebsResponse packageInfo() {
+        return dappMemberService.packageInfo();
+    }
+
+    @ApiOperation(value = "卖出资产包积分", notes = "卖出资产包积分")
+    @PostMapping(value = "/salePackage")
+    public FebsResponse salePackage(@RequestBody SalePackageDto salePackageDto) {
+        return dappMemberService.salePackage(salePackageDto);
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/dto/SalePackageDto.java b/src/main/java/cc/mrbird/febs/dapp/dto/SalePackageDto.java
new file mode 100644
index 0000000..169bc9b
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/dto/SalePackageDto.java
@@ -0,0 +1,14 @@
+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 = "SalePackageDto", description = "接收参数类")
+public class SalePackageDto {
+    @ApiModelProperty(value = "卖出数量", example = "20")
+    private BigDecimal cnt;
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappMemberEntity.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappMemberEntity.java
index b3967d9..0b11776 100644
--- a/src/main/java/cc/mrbird/febs/dapp/entity/DappMemberEntity.java
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappMemberEntity.java
@@ -20,7 +20,7 @@
 public class DappMemberEntity extends BaseEntity {
 
     private String address;
-
+    //资产积分余额
     private BigDecimal balance;
 
     /**
diff --git a/src/main/java/cc/mrbird/febs/dapp/enumerate/DataDictionaryEnum.java b/src/main/java/cc/mrbird/febs/dapp/enumerate/DataDictionaryEnum.java
index 88d0bf2..47accb5 100644
--- a/src/main/java/cc/mrbird/febs/dapp/enumerate/DataDictionaryEnum.java
+++ b/src/main/java/cc/mrbird/febs/dapp/enumerate/DataDictionaryEnum.java
@@ -4,6 +4,25 @@
 
 @Getter
 public enum DataDictionaryEnum {
+
+    /**
+     *  资产包USDT底池
+     */
+    PACKAGE_POOR("PACKAGE_POOR","PACKAGE_POOR"),
+
+    /**
+     *  资产包卖出划入底池比例
+     */
+    PACKAGE_SALE_TO_POOR_PERCENT("PACKAGE_SALE_TO_POOR_PERCENT","PACKAGE_SALE_TO_POOR_PERCENT"),
+
+    /**
+     *  资产包积分价格
+     */
+    PACKAGE_SCORE_PRICE("PACKAGE_SCORE_PRICE","PACKAGE_SCORE_PRICE"),
+    /**
+     *  资产包总积分
+     */
+    PACKAGE_TOTAL_SCORE("PACKAGE_TOTAL_SCORE","PACKAGE_TOTAL_SCORE"),
     /**
      *  普通会员购买上线
      */
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 277b4de..903896b 100644
--- a/src/main/java/cc/mrbird/febs/dapp/enumerate/FundFlowEnum.java
+++ b/src/main/java/cc/mrbird/febs/dapp/enumerate/FundFlowEnum.java
@@ -7,6 +7,8 @@
  */
 @Getter
 public enum FundFlowEnum {
+    //卖出资产
+    SALE_PACKAGE("SALE_PACKAGE", 23),
     //实际增加余额
     ADD_AMOUNT_REAL("ADD_AMOUNT_REAL", 22),
     //实际减少赠送积分
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java b/src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java
index 85b9f94..9297707 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java
@@ -78,4 +78,8 @@
     void cancelOrder(Long id);
 
     void payOrder(Long id);
+
+    FebsResponse packageInfo();
+
+    FebsResponse salePackage(SalePackageDto salePackageDto);
 }
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 fb2231d..f8ee705 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java
@@ -118,4 +118,6 @@
     void teamStaticPerk();
 
     void updateAchieve();
+
+    void speedSalePackageMsg(Long memberId);
 }
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 1f10d5c..0d10774 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
@@ -37,6 +37,7 @@
 import org.web3j.utils.Strings;
 
 import java.math.BigDecimal;
+import java.math.BigInteger;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -777,6 +778,93 @@
         chainProducer.sendAutoLevelUpTeamMsg(member.getId());
     }
 
+    @Override
+    public FebsResponse packageInfo() {
+        Long memberId = LoginUserUtil.getAppUser().getId();
+        PackageInfoVo packageInfoVo = new PackageInfoVo();
+        DataDictionaryCustom packageTotalScoreDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getType(),
+                DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getCode()
+        );
+        BigDecimal packageTotalScore = new BigDecimal(ObjectUtil.isEmpty(packageTotalScoreDic) ? "0" : packageTotalScoreDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
+        packageInfoVo.setPackageTotalScore(packageTotalScore);
+
+        DataDictionaryCustom packageScorePriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.PACKAGE_SCORE_PRICE.getType(),
+                DataDictionaryEnum.PACKAGE_SCORE_PRICE.getCode()
+        );
+        BigDecimal packageScorePrice = new BigDecimal(ObjectUtil.isEmpty(packageScorePriceDic) ? "0" : packageScorePriceDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
+        packageInfoVo.setPackageScorePrice(packageScorePrice);
+
+        DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
+        BigDecimal balance = dappMemberEntity.getBalance();
+        packageInfoVo.setPackageMemberScore(balance);
+        return new FebsResponse().success().data(packageInfoVo);
+    }
+
+    @Override
+    public FebsResponse salePackage(SalePackageDto salePackageDto) {
+        Long memberId = LoginUserUtil.getAppUser().getId();
+        BigDecimal cnt = salePackageDto.getCnt();
+        DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
+        BigDecimal balance = dappMemberEntity.getBalance();
+        if(BigDecimal.ZERO.compareTo(cnt) >= 0){
+            throw new FebsException("资产不足");
+        }
+        if(cnt.compareTo(balance) > 0){
+            throw new FebsException("资产不足");
+        }
+        DataDictionaryCustom packageScorePriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.PACKAGE_SCORE_PRICE.getType(),
+                DataDictionaryEnum.PACKAGE_SCORE_PRICE.getCode()
+        );
+        BigDecimal packageScorePrice = new BigDecimal(ObjectUtil.isEmpty(packageScorePriceDic) ? "0" : packageScorePriceDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
+        //卖出资产乘以价格获取到预期获取的总额
+        BigDecimal totalAmount = cnt.multiply(packageScorePrice).setScale(2, BigDecimal.ROUND_DOWN);
+        //资产包卖出划入底池比例
+        DataDictionaryCustom packageToPoorPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.PACKAGE_SALE_TO_POOR_PERCENT.getType(),
+                DataDictionaryEnum.PACKAGE_SALE_TO_POOR_PERCENT.getCode()
+        );
+        BigDecimal packageToPoorPercent = new BigDecimal(ObjectUtil.isEmpty(packageToPoorPercentDic) ? "0.1" : packageToPoorPercentDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
+        //划入底池的金额
+        BigDecimal poorAmount = totalAmount.multiply(packageToPoorPercent).setScale(2, BigDecimal.ROUND_DOWN);
+        //生成一条资金流水
+        DappFundFlowEntity scoreFlow = new DappFundFlowEntity(
+                memberId,
+                totalAmount.subtract(poorAmount),
+                FundFlowEnum.SALE_PACKAGE.getCode(),
+                DappFundFlowEntity.WITHDRAW_STATUS_ING,
+                poorAmount);
+        dappFundFlowDao.insert(scoreFlow);
+
+
+        //卖出积分直接销毁。
+        DataDictionaryCustom packageTotalScoreDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getType(),
+                DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getCode()
+        );
+        BigDecimal packageTotalScore = new BigDecimal(ObjectUtil.isEmpty(packageTotalScoreDic) ? "21000" : packageTotalScoreDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
+        BigDecimal avaPackageTotalScore = packageTotalScore.subtract(cnt);
+        packageTotalScoreDic.setValue(avaPackageTotalScore.toString());
+        dataDictionaryCustomMapper.updateById(packageTotalScoreDic);
+        //更新USDT底池
+        DataDictionaryCustom packagePoorDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.PACKAGE_POOR.getType(),
+                DataDictionaryEnum.PACKAGE_POOR.getCode()
+        );
+        BigDecimal packagePoor = new BigDecimal(ObjectUtil.isEmpty(packagePoorDic) ? "0" : packagePoorDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
+        BigDecimal avaPackagePoor = packagePoor.add(poorAmount);
+        packagePoorDic.setValue(avaPackagePoor.toString());
+        dataDictionaryCustomMapper.updateById(packagePoorDic);
+        //计算当前价格
+        BigDecimal divide = avaPackagePoor.divide(avaPackageTotalScore, 2, BigDecimal.ROUND_DOWN);
+        packageScorePriceDic.setValue(divide.toString());
+        dataDictionaryCustomMapper.updateById(packageScorePriceDic);
+
+        return null;
+    }
+
     public static List<List<String>> partitionList(List<String> originalList, int partitionSize) {
         List<List<String>> partitionedList = new ArrayList<>();
         int size = originalList.size();
diff --git a/src/main/java/cc/mrbird/febs/dapp/vo/PackageInfoVo.java b/src/main/java/cc/mrbird/febs/dapp/vo/PackageInfoVo.java
new file mode 100644
index 0000000..b3c6c88
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/vo/PackageInfoVo.java
@@ -0,0 +1,22 @@
+package cc.mrbird.febs.dapp.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel(value = "PackageInfoVo", description = "资产包详情")
+public class PackageInfoVo {
+
+    @ApiModelProperty(value = "资产总量")
+    private BigDecimal packageTotalScore;
+
+    @ApiModelProperty(value = "我的资产")
+    private BigDecimal packageMemberScore;
+
+    @ApiModelProperty(value = "资产价格")
+    private BigDecimal packageScorePrice;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/job/BnbTransferJob.java b/src/main/java/cc/mrbird/febs/job/BnbTransferJob.java
index 3380cf7..5dcf1ff 100644
--- a/src/main/java/cc/mrbird/febs/job/BnbTransferJob.java
+++ b/src/main/java/cc/mrbird/febs/job/BnbTransferJob.java
@@ -1,16 +1,6 @@
 package cc.mrbird.febs.job;
 
-import cc.mrbird.febs.dapp.entity.DappFundFlowEntity;
-import cc.mrbird.febs.dapp.entity.DataDictionaryCustom;
-import cc.mrbird.febs.dapp.enumerate.FundFlowEnum;
-import cc.mrbird.febs.dapp.enumerate.MemberLevelEnum;
-import cc.mrbird.febs.dapp.enumerate.NodeCodeEnum;
-import cc.mrbird.febs.dapp.enumerate.PoolEnum;
-import cc.mrbird.febs.dapp.mapper.DappFundFlowDao;
-import cc.mrbird.febs.dapp.mapper.DataDictionaryCustomMapper;
 import cc.mrbird.febs.dapp.service.DappSystemService;
-import cc.mrbird.febs.rabbit.producer.ChainProducer;
-import cn.hutool.core.util.ObjectUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
diff --git a/src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java b/src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java
index 3d3e1e4..adcc100 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java
@@ -7,6 +7,11 @@
 public class QueueConstants {
 
     /**
+     * speed 卖出资产
+     */
+    public static final String QUEUE_SPEED_SALE_PACKAGE = "queue_speed_sale_package";
+
+    /**
      * speed 直推返利
      */
     public static final String QUEUE_SPEED_DIRECT_PERK = "queue_speed_direct_perk";
diff --git a/src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java b/src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java
index 72934f7..f258ddd 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java
@@ -6,6 +6,10 @@
 @Getter
 public enum QueueEnum {
     /**
+     * speed 卖出资产
+     */
+    SPEED_SALE_PACKAGE("exchange_speed_sale_package", "route_key_speed_sale_package", QueueConstants.QUEUE_SPEED_SALE_PACKAGE),
+    /**
      * speed 直推返利
      */
     SPEED_DIRECT_PERK("exchange_speed_direct_perk", "route_key_speed_direct_perk", QueueConstants.QUEUE_SPEED_DIRECT_PERK),
diff --git a/src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java b/src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java
index 26eafcb..368979d 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java
@@ -96,4 +96,21 @@
         return BindingBuilder.bind(speedDirectPerkQueue()).to(speedDirectPerkExchange()).with(QueueEnum.SPEED_DIRECT_PERK.getRoute());
     }
     // === speed 代理升级  end ===
+
+    // === speed 卖出资产  start ===
+    @Bean
+    public DirectExchange speedSalePackageExchange() {
+        return new DirectExchange(QueueEnum.SPEED_SALE_PACKAGE.getExchange());
+    }
+
+    @Bean
+    public Queue speedSalePackageQueue() {
+        return new Queue(QueueEnum.SPEED_SALE_PACKAGE.getQueue());
+    }
+
+    @Bean
+    public Binding speedSalePackageBind() {
+        return BindingBuilder.bind(speedSalePackageQueue()).to(speedSalePackageExchange()).with(QueueEnum.SPEED_SALE_PACKAGE.getRoute());
+    }
+    // === speed 卖出资产  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 593eb6a..bb83d70 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java
@@ -74,4 +74,17 @@
             log.error("speedDirectPerkErr:", e);
         }
     }
+
+    /**
+     * speed 卖出资产
+     */
+    @RabbitListener(queues = QueueConstants.QUEUE_SPEED_SALE_PACKAGE)
+    public void speedSalePackageMsg(Long memberId) {
+        log.info("speedSalePackageMsg:{}", memberId);
+        try {
+            dappSystemService.speedSalePackageMsg(memberId);
+        } catch (Exception e) {
+            log.error("speedSalePackageErr:", e);
+        }
+    }
 }
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 b3e86cd..ec8a3e4 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java
@@ -45,7 +45,6 @@
         rabbitTemplate.convertAndSend(QueueEnum.SPEED_PAY_ORDER.getExchange(), QueueEnum.SPEED_PAY_ORDER.getRoute(), orderId, correlationData);
     }
 
-
     /**
      * speed 代理升级
      * @param memberId
@@ -55,7 +54,6 @@
         CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
         rabbitTemplate.convertAndSend(QueueEnum.SPEED_LEVEL_UP_TEAM.getExchange(), QueueEnum.SPEED_LEVEL_UP_TEAM.getRoute(), memberId, correlationData);
     }
-
 
     /**
      * speed 代理升级
@@ -67,7 +65,6 @@
         rabbitTemplate.convertAndSend(QueueEnum.SPEED_LEVEL_UP.getExchange(), QueueEnum.SPEED_LEVEL_UP.getRoute(), memberId, correlationData);
     }
 
-
     /**
      * speed 直推返利
      */
@@ -77,4 +74,13 @@
         rabbitTemplate.convertAndSend(QueueEnum.SPEED_DIRECT_PERK.getExchange(), QueueEnum.SPEED_DIRECT_PERK.getRoute(), memberId, correlationData);
     }
 
+    /**
+     * speed 卖出资产
+     */
+    public void sendSalePackageMsg(@NotNull Long memberId) {
+        log.info("sendSalePackageMsg:{}", memberId);
+        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
+        rabbitTemplate.convertAndSend(QueueEnum.SPEED_SALE_PACKAGE.getExchange(), QueueEnum.SPEED_SALE_PACKAGE.getRoute(), memberId, correlationData);
+    }
+
 }

--
Gitblit v1.9.1