xiaoyong931011
2023-05-30 2ef870d14d21528b963023db8b89bec6a4184b29
src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
@@ -650,6 +650,17 @@
        BigDecimal amountPerk = dappUsdtPerkEntity.getAmount();
        amountPerk = amountPerk.add(amount.multiply(new BigDecimal(3)));
        dappUsdtPerkEntity.setAmount(amountPerk);
        //生成一条金本位的三倍额度的资金流水记录
        DappFundFlowEntity amountPerkFundFlow = new DappFundFlowEntity(
                memberId,
                amount.multiply(new BigDecimal(3)),
                FundFlowEnum.MEMBER_AMOUNT_PERK_TOTAL.getCode(),
                2,
                BigDecimal.ZERO,
                null,
                chergeRecordId);
        dappFundFlowDao.insert(amountPerkFundFlow);
        //增加业绩
        BigDecimal achieveAmount = dappUsdtPerkEntity.getAchieveAmount();
        achieveAmount = achieveAmount.add(amount);
@@ -809,7 +820,19 @@
                chergeRecordId);
        dappFundFlowDao.insert(poolAllMemberAFundFlow);
        nodePoolPerk(poolAllMemberAPercentCnt, MemberLevelEnum.MEMBER.getType(), FundFlowEnum.POOL_MEMBER_A_CNT.getCode());
        BigDecimal poolAllMemberAPercentCntAva = nodePoolPerk(poolAllMemberAPercentCnt, MemberLevelEnum.MEMBER.getType(), FundFlowEnum.POOL_MEMBER_A_CNT.getCode());
        DappFundFlowEntity poolAllMemberAFundFlowAva = new DappFundFlowEntity(
                1L,
                poolAllMemberAPercentCnt.subtract(poolAllMemberAPercentCntAva),
                FundFlowEnum.POOL_MEMBER_A_CNT.getCode(),
                2,
                BigDecimal.ZERO,
                null,
                chergeRecordId);
        dappFundFlowDao.insert(poolAllMemberAFundFlowAva);
        dappWalletService.updateWalletMineWithLock(poolAllMemberAPercentCnt.subtract(poolAllMemberAPercentCntAva),
                1L,1);
        /**
         * 10%直推
         */
@@ -854,6 +877,19 @@
                //用户的A币账户增加directAPercentCnt数量
                dappWalletService.updateWalletMineWithLock(directAPercentFundFlowToMemberFlag,directMemberEntity.getId(),1);
            }
            if(directAPercentCnt.compareTo(directAPercentFundFlowToMemberFlag) > 0){
                DappFundFlowEntity directAPercentFundFlowToMemberAva = new DappFundFlowEntity(
                        1L,
                        directAPercentCnt.subtract(directAPercentFundFlowToMemberFlag),
                        FundFlowEnum.DIRECT_A_PERCENT.getCode(),
                        2,
                        BigDecimal.ZERO,
                        null,
                        chergeRecordId);
                dappFundFlowDao.insert(directAPercentFundFlowToMemberAva);
                dappWalletService.updateWalletMineWithLock(directAPercentCnt.subtract(directAPercentFundFlowToMemberFlag),
                        1L,1);
            }
        }
        /**
         * 5%节点
@@ -884,7 +920,21 @@
        nodeAPercentPoolDic.setValue(nodeAPercentPoolDicCnt.toString());
        dataDictionaryCustomMapper.updateById(nodeAPercentPoolDic);
        superNodePoolPerk(nodeAPercentCnt, NodeCodeEnum.SUPER_NODE.getCode(), FundFlowEnum.NODE_A_PERCENT_TO_MEMBER.getCode());
        BigDecimal nodeAPercentCntAva = superNodePoolPerk(nodeAPercentCnt, NodeCodeEnum.SUPER_NODE.getCode(), FundFlowEnum.NODE_A_PERCENT_TO_MEMBER.getCode());
        if(nodeAPercentCnt.compareTo(nodeAPercentCntAva) > 0){
            DappFundFlowEntity nodeAPercentFundFlowAva = new DappFundFlowEntity(
                    1L,
                    nodeAPercentCnt.subtract(nodeAPercentCntAva),
                    FundFlowEnum.NODE_A_PERCENT_TO_MEMBER.getCode(),
                    2,
                    BigDecimal.ZERO,
                    null,
                    chergeRecordId);
            dappFundFlowDao.insert(nodeAPercentFundFlowAva);
            dappWalletService.updateWalletMineWithLock(nodeAPercentCnt.subtract(nodeAPercentCntAva),
                    1L,1);
        }
        /**
         * 5%基金会
         */
@@ -929,6 +979,11 @@
        dappFundFlowDao.insert(levelAPercentCntFundFlow);
        chainProducer.sendAntACoinInLevelMsg(levelAPercentCntFundFlow.getId());
        /**
         * 更新用户为有效用户
         */
        dappMemberDao.updateMemberActiveStatus(1,memberId);
    }
    @Override
@@ -954,6 +1009,14 @@
        dappFundFlowEntity.setFromHash(hash);
        dappFundFlowEntity.setStatus(2);
        dappFundFlowDao.updateById(dappFundFlowEntity);
    }
    public static void main(String[] args) {
        String address = AppContants.ADDRESS_A_POOL_PEOJECT;
        /**
         * 发起USDT转账
         */
        String hash = ChainService.getInstance(ChainEnum.BSC_USDT_A_POOL.name()).transfer(address, new BigDecimal("0.01"));
    }
    @Override
@@ -1116,7 +1179,19 @@
                    dappFundFlowDao.updateById(dappFundFlowEntity);
                    BigDecimal subtract = amountTC.subtract(teamIncomePerkTotal);
                    //用户的A币账户增加divide数量
                    dappWalletService.updateWalletMineWithLock(subtract,1L,1);
                    if(amountTC.compareTo(teamIncomePerkTotal) > 0){
                        DappFundFlowEntity nodeAPercentFundFlowAva = new DappFundFlowEntity(
                                1L,
                                subtract,
                                FundFlowEnum.LEVEL_A_PERCENT_CNT_MEMBER.getCode(),
                                2,
                                BigDecimal.ZERO,
                                null,
                                systemProfitId);
                        dappFundFlowDao.insert(nodeAPercentFundFlowAva);
                        dappWalletService.updateWalletMineWithLock(subtract,
                                1L,1);
                    }
                }
            }
        }
@@ -1131,7 +1206,22 @@
        BigDecimal averagePerk = nodePerk.getAveragePerk();
        BigDecimal averagePerkCnt = amountTC.multiply(averagePerk).setScale(4, BigDecimal.ROUND_DOWN);
        nodePoolPerk(averagePerkCnt, MemberLevelEnum.NODE_3.getType(), FundFlowEnum.DAO_3_NODE_PERK.getCode());
        BigDecimal averagePerkCntAva = nodePoolPerk(averagePerkCnt, MemberLevelEnum.NODE_3.getType(), FundFlowEnum.DAO_3_NODE_PERK.getCode());
        //用户的A币账户增加divide数量
        if(averagePerkCnt.compareTo(averagePerkCntAva) > 0){
            DappFundFlowEntity nodeAPercentFundFlowAva = new DappFundFlowEntity(
                    1L,
                    averagePerkCnt.subtract(averagePerkCntAva),
                    FundFlowEnum.DAO_3_NODE_PERK.getCode(),
                    2,
                    BigDecimal.ZERO,
                    null,
                    systemProfitId);
            dappFundFlowDao.insert(nodeAPercentFundFlowAva);
            dappWalletService.updateWalletMineWithLock(averagePerkCnt.subtract(averagePerkCntAva),
                    1L,1);
        }
        //生成流水记录
        DappFundFlowEntity nodeThreeFundFlow = new DappFundFlowEntity(
                1L,
@@ -1158,7 +1248,21 @@
        BigDecimal averagePerkFour = nodeFourDicPerk.getAveragePerk();
        BigDecimal averagePerkFourCnt = amountTC.multiply(averagePerkFour).setScale(4, BigDecimal.ROUND_DOWN);
        nodePoolPerk(averagePerkFourCnt, MemberLevelEnum.NODE_4.getType(), FundFlowEnum.DAO_4_NODE_PERK.getCode());
        BigDecimal averagePerkFourCntAva = nodePoolPerk(averagePerkFourCnt, MemberLevelEnum.NODE_4.getType(), FundFlowEnum.DAO_4_NODE_PERK.getCode());
        //用户的A币账户增加divide数量
        if(averagePerkFourCnt.compareTo(averagePerkFourCntAva) > 0){
            DappFundFlowEntity nodeAPercentFundFlowAva = new DappFundFlowEntity(
                    1L,
                    averagePerkFourCnt.subtract(averagePerkFourCntAva),
                    FundFlowEnum.DAO_4_NODE_PERK.getCode(),
                    2,
                    BigDecimal.ZERO,
                    null,
                    systemProfitId);
            dappFundFlowDao.insert(nodeAPercentFundFlowAva);
            dappWalletService.updateWalletMineWithLock(averagePerkFourCnt.subtract(averagePerkFourCntAva),
                    1L,1);
        }
        DappFundFlowEntity nodeFourFundFlow = new DappFundFlowEntity(
                1L,
                averagePerkFourCnt,
@@ -1183,7 +1287,21 @@
        BigDecimal averagePerkFive = nodeFiveDicPerk.getAveragePerk();
        BigDecimal averagePerkFiveCnt = amountTC.multiply(averagePerkFive).setScale(4, BigDecimal.ROUND_DOWN);
        nodePoolPerk(averagePerkFiveCnt, MemberLevelEnum.NODE_5.getType(), FundFlowEnum.DAO_5_NODE_PERK.getCode());
        BigDecimal averagePerkFiveCntAva = nodePoolPerk(averagePerkFiveCnt, MemberLevelEnum.NODE_5.getType(), FundFlowEnum.DAO_5_NODE_PERK.getCode());
        //用户的A币账户增加divide数量
        if(averagePerkFiveCnt.compareTo(averagePerkFiveCntAva) > 0){
            DappFundFlowEntity nodeAPercentFundFlowAva = new DappFundFlowEntity(
                    1L,
                    averagePerkFiveCnt.subtract(averagePerkFiveCntAva),
                    FundFlowEnum.DAO_5_NODE_PERK.getCode(),
                    2,
                    BigDecimal.ZERO,
                    null,
                    systemProfitId);
            dappFundFlowDao.insert(nodeAPercentFundFlowAva);
            dappWalletService.updateWalletMineWithLock(averagePerkFiveCnt.subtract(averagePerkFiveCntAva),
                    1L,1);
        }
        DappFundFlowEntity nodeFiveFundFlow = new DappFundFlowEntity(
                1L,
                averagePerkFiveCnt,
@@ -1210,7 +1328,21 @@
        BigDecimal nodeFiveEquals = new BigDecimal(nodeFiveEqualsDic.getValue());
        BigDecimal nodeFiveEqualsCnt = amountTC.multiply(nodeFiveEquals).setScale(4, BigDecimal.ROUND_DOWN);
        nodePoolEqualsPerk(nodeFiveEqualsCnt, MemberLevelEnum.NODE_5.getType(), FundFlowEnum.DAO_5_NODE_EQUALS_PERK.getCode());
        BigDecimal nodeFiveEqualsCntAva = nodePoolEqualsPerk(nodeFiveEqualsCnt, MemberLevelEnum.NODE_5.getType(), FundFlowEnum.DAO_5_NODE_EQUALS_PERK.getCode());
        //用户的A币账户增加divide数量
        if(nodeFiveEqualsCnt.compareTo(nodeFiveEqualsCntAva) > 0){
            DappFundFlowEntity nodeAPercentFundFlowAva = new DappFundFlowEntity(
                    1L,
                    nodeFiveEqualsCnt.subtract(nodeFiveEqualsCntAva),
                    FundFlowEnum.DAO_5_NODE_EQUALS_PERK.getCode(),
                    2,
                    BigDecimal.ZERO,
                    null,
                    systemProfitId);
            dappFundFlowDao.insert(nodeAPercentFundFlowAva);
            dappWalletService.updateWalletMineWithLock(nodeFiveEqualsCnt.subtract(nodeFiveEqualsCntAva),
                    1L,1);
        }
        DappFundFlowEntity nodeFiveEqualsFundFlow = new DappFundFlowEntity(
                1L,
                nodeFiveEqualsCnt,
@@ -1347,25 +1479,26 @@
    public BigDecimal superNodePoolPerk(BigDecimal nodeFivePoolDicCnt, String code, int code1) {
        BigDecimal realPerkAmount = BigDecimal.ZERO;
        //获取type级别的会员
        List<DappMemberNodeEntity> dappMemberNodeEntities = dappMemberNodeMapper.selectNodeByNodeCode(NodeCodeEnum.SUPER_NODE.getCode());
//        List<DappMemberNodeEntity> dappMemberNodeEntities = dappMemberNodeMapper.selectNodeByNodeCode(NodeCodeEnum.SUPER_NODE.getCode());
        List<DappMemberEntity> dappMemberEntities = dappMemberDao.selectByNodetype();
        //每日补贴总数
//        BigDecimal nodePerk = nodeFivePoolDicCnt.multiply(AppContants.NODE_PERK_PERCENT);
        BigDecimal nodePerk = nodeFivePoolDicCnt;
        if(CollUtil.isNotEmpty(dappMemberNodeEntities)){
        if(CollUtil.isNotEmpty(dappMemberEntities)){
            //每人的补贴
            BigDecimal averagePerk = nodePerk.divide(new BigDecimal(dappMemberNodeEntities.size()), 4, BigDecimal.ROUND_DOWN);
            BigDecimal averagePerk = nodePerk.divide(new BigDecimal(dappMemberEntities.size()), 4, BigDecimal.ROUND_DOWN);
            for(DappMemberNodeEntity dappMemberNodeEntity : dappMemberNodeEntities){
            for(DappMemberEntity dappMemberEntitie : dappMemberEntities){
                DappFundFlowEntity fundFlowToMember = new DappFundFlowEntity(
                        dappMemberNodeEntity.getMemberId(),
                        dappMemberEntitie.getId(),
                        averagePerk,
                        code1,
                        2,
                        BigDecimal.ZERO);
                dappFundFlowDao.insert(fundFlowToMember);
                //用户的A币账户增加memberGetACnt数量
                dappWalletService.updateWalletMineWithLock(averagePerk,dappMemberNodeEntity.getMemberId(),1);
                dappWalletService.updateWalletMineWithLock(averagePerk,dappMemberEntitie.getId(),1);
                realPerkAmount = realPerkAmount.add(averagePerk);
            }
@@ -1375,6 +1508,7 @@
    @Override
    public void selectAndInsertDics() {
        selectAndInsertDic(PoolEnum.ANDAO_MEMBER_TO_MENBER_PERCENT.getType(),PoolEnum.ANDAO_MEMBER_TO_MENBER_PERCENT.getCode(),"0.2","ANDAO互转20%");
        selectAndInsertDic(PoolEnum.TRANSFER_A_AUSD_PRICE.getType(),PoolEnum.TRANSFER_A_AUSD_PRICE.getCode(),"0.01","AUSD价格");
        selectAndInsertDic(PoolEnum.TRANSFER_A_AUSD_PERCENT.getType(),PoolEnum.TRANSFER_A_AUSD_PERCENT.getCode(),"0.1","买入A,10%的AUSD比例");
        selectAndInsertDic(PoolEnum.WALLET_COIN_OUT_PERCENT.getType(),PoolEnum.WALLET_COIN_OUT_PERCENT.getCode(),"0.3","30%回流底池溢价");
@@ -1448,7 +1582,11 @@
            return;
        }
        //金额
        BigDecimal amount = dappFundFlowEntity.getAmount();
        BigDecimal amount = dappFundFlowEntity.getAmount().setScale(4,BigDecimal.ROUND_DOWN).negate();
        log.info("amount:{}",amount);
        if(BigDecimal.ZERO.compareTo(amount) >= 0){
            return;
        }
        Long memberId = dappFundFlowEntity.getMemberId();
        DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
@@ -1458,14 +1596,14 @@
         * 发起USDT转账
         */
        log.info("amount:{},address:{}",amount,address);
//        String hash = ChainService.getInstance(ChainEnum.BSC_USDT_W_POOL.name()).transfer(address, amount);
//        if(StrUtil.isEmpty(hash)){
//            return;
//        }
//        log.info("{},{}",id,hash);
//        dappFundFlowEntity.setFromHash(hash);
//        dappFundFlowEntity.setStatus(2);
//        dappFundFlowDao.updateById(dappFundFlowEntity);
        String hash = ChainService.getInstance(ChainEnum.BSC_USDT_W_POOL.name()).transfer(address, amount);
        if(StrUtil.isEmpty(hash)){
            return;
        }
        log.info("{},{}",id,hash);
        dappFundFlowEntity.setFromHash(hash);
        dappFundFlowEntity.setStatus(2);
        dappFundFlowDao.updateById(dappFundFlowEntity);
    }
    @Override
@@ -1583,11 +1721,15 @@
        );
        BigDecimal coinAPrice = new BigDecimal(dataDictionaryCustom.getValue());
        DateTime dateTime = DateUtil.offsetHour(DateUtil.date(), -1);
        String format = DateUtil.format(dateTime, "yyyy-MM-dd HH");
        List<String> dataDayStrList = new ArrayList<>();
        dataDayStrList.add(format);
        List<DappAKlineEntity> dappAKlineEntities = dappAKlineMapper.selectListByTypeAndHour(dataDayStrList);
        /**
         * 查询出上一条更新的小时数据
         */
        DappAKlineEntity minRecord = dappAKlineMapper.selectOneHourByType();
        if(ObjectUtil.isEmpty(minRecord)){
            minRecord = dappAKlineMapper.selectOneByType();
        }
        DappAKlineEntity maxRecord = dappAKlineMapper.selectOneByType();
        List<DappAKlineEntity> dappAKlineEntities = dappAKlineMapper.selectListByIds(minRecord.getId(),maxRecord.getId());
        DappAKlineEntity dappAKlineEntity = new DappAKlineEntity();
        dappAKlineEntity.setType(1);
@@ -1775,6 +1917,45 @@
    }
    @Override
    public void antKLineABMsg(Long id) {
        log.info("{}",id);
        //获取对应的流水记录
        DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectInfoById(id);
        if(ObjectUtil.isEmpty(dappFundFlowEntity)){
            return;
        }
        Long memberId = dappFundFlowEntity.getMemberId();
        DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
        if(ObjectUtil.isEmpty(dappMemberEntity)){
            return;
        }
        DappFundFlowEntity dappFundFlow = dappFundFlowDao.selectById(id);
        //金额
        BigDecimal amount = dappFundFlow.getAmount();
        //目标地址
        String address = null;
        if(5 == dappFundFlowEntity.getType()){
            address = AppContants.ADDRESS_A_POOL_PEOJECT;
        }else if(6 == dappFundFlowEntity.getType()){
            address = AppContants.ADDRESS_B_POOL_PEOJECT;
        }else{
            return;
        }
        /**
         * 发起USDT转账
         */
        String hash = ChainService.getInstance(ChainEnum.BSC_USDT_A_POOL.name()).transfer(address, amount);
        if(StrUtil.isEmpty(hash)){
            return;
        }
        log.info("{},{}",id,hash);
        dappFundFlow.setFromHash(hash);
        dappFundFlow.setStatus(2);
        dappFundFlowDao.updateById(dappFundFlow);
    }
    /**
     * 生成当前分钟的k线数据,type为0
     */
@@ -1793,8 +1974,9 @@
        DappAKlineEntity oldOne = dappAKlineMapper.selectOneByType();
        if(ObjectUtil.isNotEmpty(oldOne)){
            dappAKlineEntity.setOpenPrice(oldOne.getClosePrice());
        }else{
            dappAKlineEntity.setOpenPrice(coinAPrice);
        }
        dappAKlineEntity.setOpenPrice(coinAPrice);
        dappAKlineEntity.setLowestPrice(coinAPrice);
        dappAKlineEntity.setHighestPrice(coinAPrice);
        dappAKlineEntity.setClosePrice(coinAPrice);
@@ -1802,13 +1984,13 @@
    }
    public static void main(String[] args) {
        int month = DateUtil.dayOfMonth(DateUtil.date());
        String s = DateUtil.dayOfWeekEnum(DateUtil.date()).toChinese();
        System.out.println(s);
        System.out.println(month);
    }
//    public static void main(String[] args) {
//
//        int month = DateUtil.dayOfMonth(DateUtil.date());
//        String s = DateUtil.dayOfWeekEnum(DateUtil.date()).toChinese();
//        System.out.println(s);
//        System.out.println(month);
//    }
    /**
     * 判断直推人数是否达标