KKSU
2024-03-27 f10afe3a9aab4e962b3ec456b8a707163e11f9bd
滑点
8 files modified
438 ■■■■ changed files
src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java 3 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/AsyncCjService.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/impl/AsyncCjServiceImpl.java 289 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java 119 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java 7 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/dapp/DappFundFlowDao.xml 2 ●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/dapp/member-money-flow.html 13 ●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/dapp/member-zhi-ya.html 2 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java
@@ -4,9 +4,10 @@
@Getter
public enum FlowTypeEnum {
    HUA_DIAN_TUANDUI_USDT(9,"滑点奖励USDT"),
    DAI_BI_OUT(8,"USDT提现"),
    USDT_OUT(7,"代币提现"),
    HUA_DIAN_TUANDUI(6,"滑点奖励"),
    HUA_DIAN_TUANDUI_DAIBI(6,"滑点奖励代币"),
    TUAN_DUI_FAIL(5,"奖励失效"),
    ZHIYA_CHA_CHU(4,"质押产币"),
    HUA_DIAN_GEREN(3,"质押滑点奖励"),
src/main/java/cc/mrbird/febs/dapp/service/AsyncCjService.java
@@ -23,4 +23,7 @@
    @Async(FebsConstant.ASYNC_POOL)
    void insertTeamPerk(Long flowId, Long achieveId);
    @Async(FebsConstant.ASYNC_POOL)
    void tradeProfitDistribute();
}
src/main/java/cc/mrbird/febs/dapp/service/impl/AsyncCjServiceImpl.java
@@ -23,9 +23,8 @@
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@Service
@@ -40,6 +39,7 @@
    private final DappAchieveMapper dappAchieveMapper;
    private final DappAchieveItemMapper dappAchieveItemMapper;
    private final ChainProducer chainProducer;
    private final DappHdRecordMapper dappHdRecordMapper;
    @Override
    public void redisCacheUpdate(String key, Object value, long time) {
@@ -108,12 +108,12 @@
        BigDecimal tuanDuiPerkTimes = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_PERCENT.getValue()));
        BigDecimal tuanDuiPercent = new BigDecimal("0.01")
                .multiply(tuanDuiPerkTimes
                        .setScale(2,BigDecimal.ROUND_DOWN));
                        .setScale(4,BigDecimal.ROUND_DOWN));
        BigDecimal tuanDuiPerkTotal = tuanDuiPercent.multiply(amount).setScale(2,BigDecimal.ROUND_DOWN);
        BigDecimal tuanDuiPerkTotal = tuanDuiPercent.multiply(amount).setScale(4,BigDecimal.ROUND_DOWN);
        Integer tuanDuiLevel = Convert.toInt(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL.getValue()));
        //分成【团队的所占比例】的份数
        BigDecimal tuanDuiPerk = tuanDuiPerkTotal.divide(tuanDuiPerkTimes, 2, BigDecimal.ROUND_DOWN);
        BigDecimal tuanDuiPerk = tuanDuiPerkTotal.divide(tuanDuiPerkTimes, 4, BigDecimal.ROUND_DOWN);
        //团队奖励对象
        HashMap<Integer, DappMemberEntity> objectObjectHashMap = new HashMap<>();//累计奖励的用户集合
        Long refMemberId = memberId;//循环的上级用户ID
@@ -147,21 +147,24 @@
            DappMemberEntity refMember = entry.getValue();
            BigDecimal perkPercent = BigDecimal.ZERO;
            if(key == 0){
                perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_YI.getValue())).setScale(2, BigDecimal.ROUND_DOWN);
                perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_YI.getValue())).setScale(4, BigDecimal.ROUND_DOWN);
            }
            if(key == 1){
                perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_YI.getValue())).setScale(2, BigDecimal.ROUND_DOWN);
                perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_YI.getValue())).setScale(4, BigDecimal.ROUND_DOWN);
            }
            if(key == 2){
                perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_YI.getValue())).setScale(2, BigDecimal.ROUND_DOWN);
                perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_YI.getValue())).setScale(4, BigDecimal.ROUND_DOWN);
            }
            if(key == 3){
                perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_YI.getValue())).setScale(2, BigDecimal.ROUND_DOWN);
                perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_YI.getValue())).setScale(4, BigDecimal.ROUND_DOWN);
            }
            if(key == 4){
                perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_WU.getValue())).setScale(2, BigDecimal.ROUND_DOWN);
                perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_WU.getValue())).setScale(4, BigDecimal.ROUND_DOWN);
            }
            BigDecimal realPerk = tuanDuiPerk.multiply(perkPercent).setScale(2, BigDecimal.ROUND_DOWN);
            BigDecimal realPerk = tuanDuiPerk.multiply(perkPercent).setScale(4, BigDecimal.ROUND_DOWN);
            if(BigDecimal.ZERO.compareTo(realPerk) >= 0){
                continue;
            }
            QueryWrapper<DappAchieve> objectQueryWrapper = new QueryWrapper<>();
            objectQueryWrapper.eq("member_id",refMember.getId());
@@ -220,7 +223,7 @@
        }
        BigDecimal gfaDays = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_DAYS.getValue())).setScale(2,BigDecimal.ROUND_DOWN);
        //更新每日限额的质押总数
        gfaDays = gfaDays.add(flow.getAmount()).setScale(2,BigDecimal.ROUND_DOWN);
        gfaDays = gfaDays.add(flow.getAmount()).setScale(4,BigDecimal.ROUND_DOWN);
        dataDictionaryCustomMapper.updateDicValueByTypeAndCode(
                DataDicEnum.GFA_DAYS.getValue(),
                DataDicEnum.GFA_DAYS.getValue(),
@@ -228,4 +231,264 @@
        );
        this.redisCacheUpdate(DataDicEnum.GFA_DAYS.getValue(),gfaDays.toString(),0);
    }
    @Override
    public void 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, 4, BigDecimal.ROUND_DOWN);
        //每一份有多少
        BigDecimal divideEveryCoin = coinAmountReal.divide(totalPercent, 4, BigDecimal.ROUND_DOWN);
        //1%用自身质押
        selfHdPerk(selfPercent,divideEveryUsdt,divideEveryCoin);
        //3%用于团队业绩计算
        teamHdPerk(teamPercent,divideEveryUsdt,divideEveryCoin);
    }
    public void teamHdPerk(int teamPercent,BigDecimal divideEveryUsdt,BigDecimal divideEveryCoin){
        //3%用于团队业绩计算
        BigDecimal teamPercentMultiply = new BigDecimal(teamPercent);
        BigDecimal multiplyDivideEveryUsdt = divideEveryUsdt.multiply(teamPercentMultiply);
        BigDecimal multiplyDivideEveryCoin = divideEveryCoin.multiply(teamPercentMultiply);
        List<DappMemberEntity> dappMemberEntities = dappMemberDao.selectList(null);//获取全部成员
        if(CollUtil.isEmpty(dappMemberEntities)){
            return;
        }
        //如果没有进行中的质押,直接返回
        QueryWrapper<DappAchieve> objectQueryWrapper = new QueryWrapper<>();
        objectQueryWrapper.eq("state",DappAchieve.STATUS_ING);
        List<DappAchieve> dappAchieves = dappAchieveMapper.selectList(objectQueryWrapper);
        if(CollUtil.isEmpty(dappAchieves)){
            return;
        }
        //可以获取奖励的用户
        Map<Long, BigDecimal> memberPerkMap = new HashMap<>();
        //总团队业绩
        BigDecimal memberPerkTotal = BigDecimal.ZERO;
        //获取全部会员
        Set<Long> allMembers = dappMemberEntities.stream().map(DappMemberEntity::getId).collect(Collectors.toSet());
        //获取正在质押的会员ID
        Set<Long> achieveMembers = dappAchieves.stream().map(DappAchieve::getMemberId).collect(Collectors.toSet());
        Collection<Long> intersection = CollUtil.intersection(allMembers, achieveMembers);
        for(Long memberId : intersection){
            /**
             * 获取每一个成员的四级直推
             */
            DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
            String inviteId = dappMemberEntity.getInviteId();
            List<String> inviteIds = new ArrayList<>();
            inviteIds.add(inviteId);
            //每一个账号的往下四级直推
            List<DappMemberEntity> downMembersList = new ArrayList<>();
            int teamLevel = Convert.toInt(redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_LEVEL.getValue()));
            while(teamLevel >= 1){
                //获取直推用户
                List<DappMemberEntity> downMembers = dappMemberDao.selectChildMemberDirectOrNotInlist(inviteIds);
                if(CollUtil.isEmpty(downMembers)){
                    teamLevel = 0;
                }
                CollUtil.addAll(downMembersList,downMembers);
                List<String> collect = downMembers.stream().map(DappMemberEntity::getInviteId).collect(Collectors.toList());
                inviteIds.clear();
                inviteIds.addAll(collect);
                teamLevel = teamLevel -1;
            }
            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",collect);
            queryWrapper.eq("state",DappAchieve.STATUS_ING);
            List<DappAchieve> dappAchieveSumList = dappAchieveMapper.selectList(queryWrapper);
            //个人团队总业绩
            BigDecimal teamAchieveMemberSum = dappAchieveSumList.stream().map(DappAchieve::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
            if(BigDecimal.ZERO.compareTo(teamAchieveMemberSum) >= 0){
                continue;
            }
            memberPerkTotal = memberPerkTotal.add(teamAchieveMemberSum);
            memberPerkMap.put(memberId,teamAchieveMemberSum);
        }
        if(BigDecimal.ZERO.compareTo(memberPerkTotal) >= 0){
            return;
        }
        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) {
            //当前生效中的团队业绩
            BigDecimal amountMember = memberPerkMap.get(memberId);
            //这个人实际可以分到的数量USDT
            BigDecimal multiplyUsdt = amountMember.multiply(everyUsdt).setScale(4, BigDecimal.ROUND_DOWN);
            //这个人实际可以分到的数量COIN
            BigDecimal multiplyCoin = divideEveryCoin.multiply(everyCoin).setScale(4, BigDecimal.ROUND_DOWN);
            createFlow(
                    multiplyUsdt,
                    memberId,
                    FlowTypeEnum.HUA_DIAN_TUANDUI_USDT.getValue(),
                    FlowTypeEnum.HUA_DIAN_TUANDUI_USDT.getDescrition(),
                    4,
                    1,
                    ChainEnum.BSC_TFC_REWARD.name(),
                    DataDicEnum.USDT_COIN.getValue(),
                    2);
            createFlow(
                    multiplyCoin,
                    memberId,
                    FlowTypeEnum.HUA_DIAN_TUANDUI_DAIBI.getValue(),
                    FlowTypeEnum.HUA_DIAN_TUANDUI_DAIBI.getDescrition(),
                    4,
                    1,
                    ChainEnum.BSC_TFC_REWARD.name(),
                    DataDicEnum.USDT_COIN.getValue(),
                    1);
        }
    }
    public void selfHdPerk(int selfPercent,BigDecimal divideEveryUsdt,BigDecimal divideEveryCoin){
        QueryWrapper<DappAchieve> objectQueryWrapper = new QueryWrapper<>();
        objectQueryWrapper.eq("state",DappAchieve.STATUS_ING);
        List<DappAchieve> dappAchieves = dappAchieveMapper.selectList(objectQueryWrapper);
        if(CollUtil.isEmpty(dappAchieves)){
            return;
        }
        BigDecimal selfPercentMultiply = new BigDecimal(selfPercent);
        BigDecimal multiplyDivideEveryUsdt = divideEveryUsdt.multiply(selfPercentMultiply);
        BigDecimal multiplyDivideEveryCoin = divideEveryCoin.multiply(selfPercentMultiply);
        //当前生效中的质押总数
        BigDecimal amountMemberTotal = dappAchieves.stream().map(DappAchieve::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
        if(BigDecimal.ZERO.compareTo(amountMemberTotal) >= 0){
            return;
        }
        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的集合
        for (Long memberId : set) {
            //当前每个人生效中的质押总数
            BigDecimal amountMember = collect.get(memberId).stream().map(DappAchieve::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
            //这个人实际可以分到的数量USDT
            BigDecimal multiplyUsdt = amountMember.multiply(everyUsdt).setScale(4, BigDecimal.ROUND_DOWN);
            //这个人实际可以分到的数量COIN
            BigDecimal multiplyCoin = divideEveryCoin.multiply(everyCoin).setScale(4, BigDecimal.ROUND_DOWN);
            createFlow(
                    multiplyUsdt,
                    memberId,
                    FlowTypeEnum.HUA_DIAN_GEREN.getValue(),
                    FlowTypeEnum.HUA_DIAN_GEREN.getDescrition(),
                    4,
                    1,
                    ChainEnum.BSC_TFC_REWARD.name(),
                    DataDicEnum.USDT_COIN.getValue(),
                    2);
            createFlow(
                    multiplyCoin,
                    memberId,
                    FlowTypeEnum.HUA_DIAN_GEREN.getValue(),
                    FlowTypeEnum.HUA_DIAN_GEREN.getDescrition(),
                    4,
                    1,
                    ChainEnum.BSC_TFC_REWARD.name(),
                    DataDicEnum.GFA_COIN.getValue(),
                    1);
        }
    }
    /**
     * 插入流水记录,增加转账记录,发送线上转账的消息
     * @param multiplyUsdt
     * @param memberId
     * @param type
     * @param description
     * @param typeTransfer
     * @param targetType
     * @param chainEnumName
     * @param coinType
     */
    public void createFlow(BigDecimal multiplyUsdt,Long memberId,Integer type,String description,Integer typeTransfer,
                           Integer targetType,String chainEnumName,String coinType,Integer typeadd){
        if (BigDecimal.ZERO.compareTo(multiplyUsdt) < 0) {
            DappFundFlowEntity fundFlowTuiJian = new DappFundFlowEntity(
                    memberId,
                    multiplyUsdt,
                    type,
                    DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
                    description);
            dappFundFlowDao.insert(fundFlowTuiJian);
            Integer systemFlag = Integer.parseInt(redisUtils.getString(DataDicEnum.GFA_ZHUAN_ZHANG_KAI_GUAN.getValue()));
            if (1 == systemFlag) {
                //生成转账记录
                DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
                if (ObjectUtil.isNotEmpty(dappMemberEntity)) {
                    OnlineTransferUtil.addTransfer(
                            dappMemberEntity.getAddress(),
                            multiplyUsdt,
                            typeTransfer,//挖矿
                            targetType,//普通账户
                            chainEnumName,
                            coinType,
                            fundFlowTuiJian.getId().toString());
                    Map<String, String> map = new HashMap<>();
                    map.put("batchNo", fundFlowTuiJian.getId().toString());
                    map.put("type", AppContants.SYMBOL_FLOW_TYPE_BATCH);
                    //发送链上转账消息
                    chainProducer.sendOnlineTransfer(JSONObject.toJSONString(map));
                }
            }else{
                this.updateAmount(typeadd,memberId,multiplyUsdt);
            }
        }
    }
}
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){
@@ -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(),
@@ -656,7 +657,7 @@
            }
            //发送一个延时队列消息。24小时之后产生下一次的质押产出
            chainProducer.sendZhiYaDelayMsg(dappAchieve.getId(), 24 * 60 * 60 * 1000L);
//            chainProducer.sendZhiYaDelayMsg(dappAchieve.getId(), 24 * 60 * 60 * 1000L);
        }
    }
src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
@@ -69,8 +69,9 @@
        walletInfo.setTzCoin(tzCoin);
        BigDecimal hdCoinGeren = dappFundFlowDao.selectAmountTotalByTypeAndMemberIdAndDate(member.getId(), FlowTypeEnum.HUA_DIAN_GEREN.getValue(),null);
        BigDecimal hdCoinTuandui = dappFundFlowDao.selectAmountTotalByTypeAndMemberIdAndDate(member.getId(), FlowTypeEnum.HUA_DIAN_TUANDUI.getValue(),null);
        walletInfo.setHdCoin(hdCoinGeren.add(hdCoinTuandui));
        BigDecimal hdCoinTuandui = dappFundFlowDao.selectAmountTotalByTypeAndMemberIdAndDate(member.getId(), FlowTypeEnum.HUA_DIAN_TUANDUI_DAIBI.getValue(),null);
        BigDecimal hdCoinTuanduiUSDT = dappFundFlowDao.selectAmountTotalByTypeAndMemberIdAndDate(member.getId(), FlowTypeEnum.HUA_DIAN_TUANDUI_USDT.getValue(),null);
        walletInfo.setHdCoin(hdCoinGeren.add(hdCoinTuandui).add(hdCoinTuanduiUSDT));
        BigDecimal zyTotal = dappFundFlowDao.selectAmountTotalByTypeAndMemberIdAndDate(member.getId(), FlowTypeEnum.ZHI_YA.getValue(),null).negate();
        walletInfo.setZyTotal(zyTotal);
@@ -311,7 +312,7 @@
            asyncCjService.insertTeamPerk(flow.getId(), dappAchieve.getId());
            //发送一个延时队列消息。24小时之后产生第一次的质押产出
            chainProducer.sendZhiYaDelayMsg(dappAchieve.getId(), 24 * 60 * 60 * 1000L);
//            chainProducer.sendZhiYaDelayMsg(dappAchieve.getId(), 24 * 60 * 60 * 1000L);
        } else {
            dappFundFlowDao.deleteById(transferDto.getId());
        }
src/main/resources/mapper/dapp/DappFundFlowDao.xml
@@ -110,7 +110,7 @@
        a.create_time createTime
        from dapp_fund_flow a
        where
            a.type in (2,3,6)
            a.type in (2,3,5,6,9)
                and a.member_id=#{record.memberId}
        order by a.create_time desc
    </select>
src/main/resources/templates/febs/views/dapp/member-money-flow.html
@@ -17,7 +17,10 @@
                                                <option value="3">质押滑点奖励</option>
                                                <option value="4">质押产币</option>
                                                <option value="5">奖励失效</option>
                                                <option value="6">滑点奖励</option>
                                                <option value="6">滑点奖励代币</option>
                                                <option value="7">代币提现</option>
                                                <option value="8">USDT提现</option>
                                                <option value="9">滑点奖励USDT</option>
                                            </select>
                                        </div>
                                    </div>
@@ -86,7 +89,13 @@
    {{# } else if(d.type === 5) { }}
    <span class="layui-badge febs-bg-red">奖励失效</span>
    {{# } else if(d.type === 6) { }}
    <span class="layui-badge febs-bg-green">滑点奖励</span>
    <span class="layui-badge febs-bg-blue">滑点奖励代币</span>
    {{# } else if(d.type === 7) { }}
    <span class="layui-badge febs-bg-red">代币提现</span>
    {{# } else if(d.type === 8) { }}
    <span class="layui-badge febs-bg-red">USDT提现</span>
    {{# } else if(d.type === 9) { }}
    <span class="layui-badge febs-bg-green">滑点奖励USDT</span>
    {{# } else { }}
    {{# } }}
</script>
src/main/resources/templates/febs/views/dapp/member-zhi-ya.html
@@ -117,7 +117,7 @@
                    {field: 'address', title: '用户地址', minWidth: 400,align:'center'},
                    {templet: '#beState', title: '状态', minWidth: 180,align:'center'},
                    {field: 'amount', title: '质押数量', minWidth: 100,align:'center'},
                    {field: 'amountDone', title: '累计产出', minWidth: 100,align:'center'},
                    // {field: 'amountDone', title: '累计产出', minWidth: 100,align:'center'},
                    {field: 'amountMax', title: '出局数量', minWidth: 100,align:'center'},
                    {field: 'amountDay', title: '每日产出', minWidth: 100,align:'center'},
                    {field: 'createTime', title: '质押时间', minWidth: 300,align:'center'},