KKSU
2024-04-16 1d5f689f34d827ac4be67fd84212a5cb7fc80d57
src/main/java/cc/mrbird/febs/dapp/service/impl/AsyncCjServiceImpl.java
@@ -242,10 +242,6 @@
         */
        //当天实际当天滑点
        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);
@@ -255,20 +251,8 @@
        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%用自身质押
@@ -281,9 +265,9 @@
        //平分份数
        BigDecimal totalPercent = new BigDecimal(selfPercent + teamPercent + workPercent);
        //每一份有多少
        BigDecimal divideEveryUsdt = usdtAmountReal.divide(totalPercent, 4, BigDecimal.ROUND_DOWN);
        BigDecimal divideEveryUsdt = usdtAmountReal.divide(totalPercent, 8, BigDecimal.ROUND_DOWN);
        //每一份有多少
        BigDecimal divideEveryCoin = coinAmountReal.divide(totalPercent, 4, BigDecimal.ROUND_DOWN);
        BigDecimal divideEveryCoin = coinAmountReal.divide(totalPercent, 8, BigDecimal.ROUND_DOWN);
        //1%用自身质押
        selfHdPerk(selfPercent,divideEveryUsdt,divideEveryCoin);
        //3%用于团队业绩计算
@@ -311,12 +295,16 @@
        Map<Long, BigDecimal> memberPerkMap = new HashMap<>();
        //总团队业绩
        BigDecimal memberPerkTotal = BigDecimal.ZERO;
//        BigDecimal memberPerkTotal = dappAchieves.stream().map(DappAchieve::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
//        if(BigDecimal.ZERO.compareTo(memberPerkTotal) >= 0){
//            return;
//        }
        //获取全部会员
        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){
//        Set<Long> achieveMembers = dappAchieves.stream().map(DappAchieve::getMemberId).collect(Collectors.toSet());
//        Collection<Long> intersection = CollUtil.intersection(allMembers, achieveMembers);
        for(Long memberId : allMembers){
            /**
             * 获取每一个成员的四级直推
             */
@@ -355,41 +343,59 @@
            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);
        BigDecimal everyUsdt = multiplyDivideEveryUsdt.divide(memberPerkTotal,8,BigDecimal.ROUND_DOWN);
        BigDecimal everyCoin = multiplyDivideEveryCoin.divide(memberPerkTotal,8,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);
            BigDecimal multiplyUsdt = amountMember.multiply(everyUsdt).setScale(8, BigDecimal.ROUND_DOWN);
            if(BigDecimal.ZERO.compareTo(multiplyUsdt) >= 0){
                continue;
            }
            //这个人实际可以分到的数量COIN
            BigDecimal multiplyCoin = amountMember.multiply(everyCoin).setScale(4, BigDecimal.ROUND_DOWN);
            BigDecimal multiplyCoin = amountMember.multiply(everyCoin).setScale(8, BigDecimal.ROUND_DOWN);
            DappMemberEntity dappMemberEntityExit = dappMemberDao.selectById(memberId);
            if(ObjectUtil.isEmpty(dappMemberEntityExit)){
                continue;
            }
            //如果没有进行中的质押,直接返回
            QueryWrapper<DappAchieve> objectQueryWrappereq = new QueryWrapper<>();
            objectQueryWrappereq.eq("state",DappAchieve.STATUS_ING);
            objectQueryWrappereq.eq("member_id",memberId);
            List<DappAchieve> dappAchieveseq = dappAchieveMapper.selectList(objectQueryWrappereq);
            if(CollUtil.isEmpty(dappAchieveseq)){
                DappFundFlowEntity fundFlowTuiJian = new DappFundFlowEntity(
                        memberId,
                        multiplyUsdt,
                        FlowTypeEnum.TUAN_DUI_FAIL.getValue(),
                        DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
                        StrUtil.format(FlowTypeEnum.TUAN_DUI_FAIL_DES.getDescrition(), amountMember));
                dappFundFlowDao.insert(fundFlowTuiJian);
                continue;
            }
            createFlow(
                    multiplyUsdt,
                    memberId,
                    FlowTypeEnum.HUA_DIAN_TUANDUI_USDT.getValue(),
                    FlowTypeEnum.HUA_DIAN_TUANDUI_USDT.getDescrition(),
                    StrUtil.format(FlowTypeEnum.HUA_DIAN_TUANDUI_USDT.getDescrition(), amountMember),
                    4,
                    1,
                    ChainEnum.BSC_TFC_REWARD.name(),
                    DataDicEnum.USDT_COIN.getValue(),
                    2);
            createFlow(
                    multiplyCoin,
                    memberId,
                    FlowTypeEnum.HUA_DIAN_TUANDUI_DAIBI.getValue(),
                    StrUtil.format(FlowTypeEnum.HUA_DIAN_TUANDUI_DAIBI.getDescrition(), amountMember),
                    4,
                    1,
                    ChainEnum.BSC_TFC_REWARD.name(),
                    DataDicEnum.USDT_COIN.getValue(),
                    1);
//            createFlow(
//                    multiplyCoin,
//                    memberId,
//                    FlowTypeEnum.HUA_DIAN_TUANDUI_DAIBI.getValue(),
//                    StrUtil.format(FlowTypeEnum.HUA_DIAN_TUANDUI_DAIBI.getDescrition(), amountMember),
//                    4,
//                    1,
//                    ChainEnum.BSC_TFC_REWARD.name(),
//                    DataDicEnum.USDT_COIN.getValue(),
//                    1);
        }
    }
@@ -409,8 +415,8 @@
        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);
        BigDecimal everyUsdt = multiplyDivideEveryUsdt.divide(amountMemberTotal,8,BigDecimal.ROUND_DOWN);
        BigDecimal everyCoin = multiplyDivideEveryCoin.divide(amountMemberTotal,8,BigDecimal.ROUND_DOWN);
        Map<Long, List<DappAchieve>> collect = dappAchieves.stream().collect(Collectors.groupingBy(DappAchieve::getMemberId));
        Set<Long> set = collect.keySet(); // 得到所有key的集合
@@ -418,30 +424,37 @@
            //当前每个人生效中的质押总数
            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);
            BigDecimal multiplyUsdt = amountMember.multiply(everyUsdt).setScale(8, BigDecimal.ROUND_DOWN);
            if(BigDecimal.ZERO.compareTo(multiplyUsdt) >= 0){
                continue;
            }
            //这个人实际可以分到的数量COIN
            BigDecimal multiplyCoin = amountMember.multiply(everyCoin).setScale(4, BigDecimal.ROUND_DOWN);
            BigDecimal multiplyCoin = amountMember.multiply(everyCoin).setScale(8, BigDecimal.ROUND_DOWN);
            DappMemberEntity dappMemberEntityExit = dappMemberDao.selectById(memberId);
            if(ObjectUtil.isEmpty(dappMemberEntityExit)){
                continue;
            }
            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(),
                    StrUtil.format(FlowTypeEnum.HUA_DIAN_GEREN.getDescrition(), amountMember),
                    4,
                    1,
                    ChainEnum.BSC_TFC_REWARD.name(),
                    DataDicEnum.GFA_COIN.getValue(),
                    1);
                    DataDicEnum.USDT_COIN.getValue(),
                    2);
//            createFlow(
//                    multiplyCoin,
//                    memberId,
//                    FlowTypeEnum.HUA_DIAN_GEREN.getValue(),
//                    StrUtil.format(FlowTypeEnum.HUA_DIAN_GEREN.getDescrition(), amountMember),
//                    4,
//                    1,
//                    ChainEnum.BSC_TFC_REWARD.name(),
//                    DataDicEnum.GFA_COIN.getValue(),
//                    1);
        }
    }