xiaoyong931011
2023-08-10 09c3fd87f7113f3b4e3066b718f9b9a4b11d821d
数据修改
13 files modified
2 files added
229 ■■■■■ changed files
src/main/java/cc/mrbird/febs/dapp/controller/ApiDappOrderController.java 15 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/dto/SalePackageDto.java 14 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/entity/DappMemberEntity.java 2 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/enumerate/DataDictionaryEnum.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/enumerate/FundFlowEnum.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/DappMemberService.java 4 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java 88 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/vo/PackageInfoVo.java 22 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/job/BnbTransferJob.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/QueueConstants.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/QueueEnum.java 4 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java 17 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java 13 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java 12 ●●●● patch | view | raw | blame | history
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);
    }
}
src/main/java/cc/mrbird/febs/dapp/dto/SalePackageDto.java
New file
@@ -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;
}
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;
    /**
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"),
    /**
     *  普通会员购买上线
     */
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),
    //实际减少赠送积分
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);
}
src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java
@@ -118,4 +118,6 @@
    void teamStaticPerk();
    void updateAchieve();
    void speedSalePackageMsg(Long memberId);
}
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();
src/main/java/cc/mrbird/febs/dapp/vo/PackageInfoVo.java
New file
@@ -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;
}
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;
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";
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),
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 ===
}
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);
        }
    }
}
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);
    }
}