KKSU
2024-05-31 83fb08a153d1cbd1400ae7c293c6329aee5d1865
src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
@@ -163,60 +163,61 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void tradeProfitDistribute(Long id) {
        /**
         * 获取滑点钱包的代币余额A和U余额B
         * 获取最新一条的记录C,然后A-C.A,B-C.B,获得这段时间内的滑点新增D
         * 用D来进行划定分配
         * 并且生成一条新的记录dappHdRecord,用来下次分配参照
         */
        //当天实际当天滑点
        BigDecimal gfaPrice = new BigDecimal(
                redisUtils.getString(DataDicEnum.GFA_PRICE.getValue())
        ).setScale(2,BigDecimal.ROUND_DOWN);
        BigDecimal usdtAmount = new BigDecimal(
                redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_WALLET_USDT_AMOUNT.getValue())
        ).setScale(2,BigDecimal.ROUND_DOWN);
        BigDecimal coinAmount = new BigDecimal(
                redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_WALLET_COIN_AMOUNT.getValue())
        ).setScale(2,BigDecimal.ROUND_DOWN);
        if(BigDecimal.ZERO.compareTo(usdtAmount) > 0){
            return;
        }
        if(BigDecimal.ZERO.compareTo(coinAmount) > 0){
            return;
        }
        BigDecimal usdtAmountReal = usdtAmount;
        BigDecimal coinAmountReal = coinAmount;
        //生成一条记录
        DappHdRecord dappHdRecordAdd = new DappHdRecord();
        dappHdRecordAdd.setPrice(gfaPrice);
        dappHdRecordAdd.setUsdtEvery(usdtAmountReal);
        dappHdRecordAdd.setUsdtAmount(usdtAmountReal);
        dappHdRecordAdd.setCoinEvery(coinAmountReal);
        dappHdRecordAdd.setCoinAmount(coinAmountReal);
        dappHdRecordMapper.insert(dappHdRecordAdd);
        /**
         * 5%滑奖分配:
         * 1%用自身质押
         * 3%用于团队业绩计算
         * 1%用于布道者奖励
         */
        int selfPercent = Convert.toInt(redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_SELF.getValue()));
        int teamPercent = Convert.toInt(redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_TEAM.getValue()));
        int workPercent = Convert.toInt(redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_WORK.getValue()));
        //平分份数
        BigDecimal totalPercent = new BigDecimal(selfPercent + teamPercent + workPercent);
        //每一份有多少
        BigDecimal divideEveryUsdt = usdtAmountReal.divide(totalPercent, 2, BigDecimal.ROUND_DOWN);
        //每一份有多少
        BigDecimal divideEveryCoin = coinAmountReal.divide(totalPercent, 2, BigDecimal.ROUND_DOWN);
        //1%用自身质押
        selfHdPerk(selfPercent,divideEveryUsdt,divideEveryCoin);
        //3%用于团队业绩计算
        teamHdPerk(teamPercent,divideEveryUsdt,divideEveryCoin);
        asyncCjService.tradeProfitDistribute();
//        /**
//         * 获取滑点钱包的代币余额A和U余额B
//         * 获取最新一条的记录C,然后A-C.A,B-C.B,获得这段时间内的滑点新增D
//         * 用D来进行划定分配
//         * 并且生成一条新的记录dappHdRecord,用来下次分配参照
//         */
//
//        //当天实际当天滑点
//
//        BigDecimal gfaPrice = new BigDecimal(
//                redisUtils.getString(DataDicEnum.GFA_PRICE.getValue())
//        ).setScale(2,BigDecimal.ROUND_DOWN);
//        BigDecimal usdtAmount = new BigDecimal(
//                redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_WALLET_USDT_AMOUNT.getValue())
//        ).setScale(2,BigDecimal.ROUND_DOWN);
//        BigDecimal coinAmount = new BigDecimal(
//                redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_WALLET_COIN_AMOUNT.getValue())
//        ).setScale(2,BigDecimal.ROUND_DOWN);
//        if(BigDecimal.ZERO.compareTo(usdtAmount) > 0){
//            return;
//        }
//        if(BigDecimal.ZERO.compareTo(coinAmount) > 0){
//            return;
//        }
//        BigDecimal usdtAmountReal = usdtAmount;
//        BigDecimal coinAmountReal = coinAmount;
//        //生成一条记录
//        DappHdRecord dappHdRecordAdd = new DappHdRecord();
//        dappHdRecordAdd.setPrice(gfaPrice);
//        dappHdRecordAdd.setUsdtEvery(usdtAmountReal);
//        dappHdRecordAdd.setUsdtAmount(usdtAmountReal);
//        dappHdRecordAdd.setCoinEvery(coinAmountReal);
//        dappHdRecordAdd.setCoinAmount(coinAmountReal);
//        dappHdRecordMapper.insert(dappHdRecordAdd);
//
//        /**
//         * 5%滑奖分配:
//         * 1%用自身质押
//         * 3%用于团队业绩计算
//         * 1%用于布道者奖励
//         */
//        int selfPercent = Convert.toInt(redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_SELF.getValue()));
//        int teamPercent = Convert.toInt(redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_TEAM.getValue()));
//        int workPercent = Convert.toInt(redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_WORK.getValue()));
//        //平分份数
//        BigDecimal totalPercent = new BigDecimal(selfPercent + teamPercent + workPercent);
//        //每一份有多少
//        BigDecimal divideEveryUsdt = usdtAmountReal.divide(totalPercent, 2, BigDecimal.ROUND_DOWN);
//        //每一份有多少
//        BigDecimal divideEveryCoin = coinAmountReal.divide(totalPercent, 2, BigDecimal.ROUND_DOWN);
//        //1%用自身质押
//        selfHdPerk(selfPercent,divideEveryUsdt,divideEveryCoin);
//        //3%用于团队业绩计算
//        teamHdPerk(teamPercent,divideEveryUsdt,divideEveryCoin);
    }
    public void teamHdPerk(int teamPercent,BigDecimal divideEveryUsdt,BigDecimal divideEveryCoin){
@@ -271,9 +272,9 @@
            if(CollUtil.isEmpty(downMembersList)){
                continue;
            }
            Set<Long> collect = downMembersList.stream().map(DappMemberEntity::getId).collect(Collectors.toSet());
            QueryWrapper<DappAchieve> queryWrapper = new QueryWrapper<>();
            queryWrapper.in("member_id",downMembersList);
            queryWrapper.in("member_id",collect);
            queryWrapper.eq("state",DappAchieve.STATUS_ING);
            List<DappAchieve> dappAchieveSumList = dappAchieveMapper.selectList(queryWrapper);
            //个人团队总业绩
@@ -285,8 +286,8 @@
            memberPerkMap.put(memberId,teamAchieveMemberSum);
        }
        BigDecimal everyUsdt = multiplyDivideEveryUsdt.divide(memberPerkTotal);
        BigDecimal everyCoin = multiplyDivideEveryCoin.divide(memberPerkTotal);
        BigDecimal everyUsdt = multiplyDivideEveryUsdt.divide(memberPerkTotal,4,BigDecimal.ROUND_DOWN);
        BigDecimal everyCoin = multiplyDivideEveryCoin.divide(memberPerkTotal,4,BigDecimal.ROUND_DOWN);
        Set<Long> set = memberPerkMap.keySet(); // 得到所有key的集合
        for (Long memberId : set) {
            //当前生效中的团队业绩
@@ -299,8 +300,8 @@
            createFlow(
                    multiplyUsdt,
                    memberId,
                    FlowTypeEnum.HUA_DIAN_TUANDUI.getValue(),
                    FlowTypeEnum.HUA_DIAN_TUANDUI.getDescrition(),
                    FlowTypeEnum.HUA_DIAN_TUANDUI_USDT.getValue(),
                    FlowTypeEnum.HUA_DIAN_TUANDUI_USDT.getDescrition(),
                    4,
                    1,
                    ChainEnum.BSC_TFC_REWARD.name(),
@@ -309,8 +310,8 @@
            createFlow(
                    multiplyCoin,
                    memberId,
                    FlowTypeEnum.HUA_DIAN_TUANDUI.getValue(),
                    FlowTypeEnum.HUA_DIAN_TUANDUI.getDescrition(),
                    FlowTypeEnum.HUA_DIAN_TUANDUI_DAIBI.getValue(),
                    FlowTypeEnum.HUA_DIAN_TUANDUI_DAIBI.getDescrition(),
                    4,
                    1,
                    ChainEnum.BSC_TFC_REWARD.name(),
@@ -332,8 +333,8 @@
        BigDecimal multiplyDivideEveryCoin = divideEveryCoin.multiply(selfPercentMultiply);
        //当前生效中的质押总数
        BigDecimal amountMemberTotal = dappAchieves.stream().map(DappAchieve::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
        BigDecimal everyUsdt = multiplyDivideEveryUsdt.divide(amountMemberTotal);
        BigDecimal everyCoin = multiplyDivideEveryCoin.divide(amountMemberTotal);
        BigDecimal everyUsdt = multiplyDivideEveryUsdt.divide(amountMemberTotal,4,BigDecimal.ROUND_DOWN);
        BigDecimal everyCoin = multiplyDivideEveryCoin.divide(amountMemberTotal,4,BigDecimal.ROUND_DOWN);
        Map<Long, List<DappAchieve>> collect = dappAchieves.stream().collect(Collectors.groupingBy(DappAchieve::getMemberId));
        Set<Long> set = collect.keySet(); // 得到所有key的集合
@@ -656,7 +657,7 @@
            }
            //发送一个延时队列消息。24小时之后产生下一次的质押产出
            chainProducer.sendZhiYaDelayMsg(dappAchieve.getId(), 24 * 60 * 60 * 1000L);
//            chainProducer.sendZhiYaDelayMsg(dappAchieve.getId(), 24 * 60 * 60 * 1000L);
        }
    }