KKSU
2024-04-18 879f78c45ef034969c5fa7a5876a57d0466c818c
src/main/java/cc/mrbird/febs/dapp/service/impl/AsyncCjServiceImpl.java
@@ -6,6 +6,7 @@
import cc.mrbird.febs.common.exception.FebsException;
import cc.mrbird.febs.common.utils.RedisUtils;
import cc.mrbird.febs.dapp.chain.ChainEnum;
import cc.mrbird.febs.dapp.chain.ChainService;
import cc.mrbird.febs.dapp.entity.*;
import cc.mrbird.febs.dapp.mapper.*;
import cc.mrbird.febs.dapp.service.AsyncCjService;
@@ -23,9 +24,9 @@
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.math.BigInteger;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@Service
@@ -40,6 +41,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 +110,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 +149,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 +225,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 +233,380 @@
        );
        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 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;
        }
        BigDecimal usdtAmountReal = usdtAmount;
        BigDecimal coinAmountReal = coinAmount;
        /**
         * 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, 8, BigDecimal.ROUND_DOWN);
        //每一份有多少
        BigDecimal divideEveryCoin = coinAmountReal.divide(totalPercent, 8, BigDecimal.ROUND_DOWN);
        //1%用自身质押
        selfHdPerk(selfPercent,divideEveryUsdt,divideEveryCoin);
        //3%用于团队业绩计算
        teamHdPerk(teamPercent,divideEveryUsdt,divideEveryCoin);
    }
    @Override
    public void confirmOrder(DappFundFlowEntity dappFundFlow) {
        Long id = dappFundFlow.getId();
        DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectById(id);
        Integer status = dappFundFlowEntity.getStatus();
        if(1 != status){
            return;
        }
        Integer type = dappFundFlowEntity.getType();
        BigDecimal amount = dappFundFlowEntity.getAmount().negate();
        if(BigDecimal.ZERO.compareTo(amount) >=0){
            amount = amount.negate();
        }
        Long memberId = dappFundFlowEntity.getMemberId();
        DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
        if(FlowTypeEnum.USDT_OUT.getValue() == type){
            //USDT转账
            String transfer = ChainService.getInstance(ChainEnum.BSC_USDT.name()).transfer(dappMemberEntity.getAddress(), amount);
            int retryTime = 0;//重试次数
            while (StrUtil.isEmpty(transfer)) {
                // 休眠2s
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                if(retryTime < 3){
                    transfer = ChainService.getInstance(ChainEnum.BSC_USDT.name()).transfer(dappMemberEntity.getAddress(), amount);
                }
                retryTime ++ ;
            }
            if(StrUtil.isNotEmpty(transfer)){
                dappFundFlowEntity.setFromHash(transfer);
                dappFundFlowEntity.setStatus(2);
                dappFundFlowDao.updateById(dappFundFlowEntity);
            }else{
                dappFundFlowEntity.setStatus(1);
                dappFundFlowDao.updateById(dappFundFlowEntity);
            }
        }else if(FlowTypeEnum.DAI_BI_OUT.getValue() == type){
            //代币转账
            String transfer = ChainService.getInstance(ChainEnum.BSC_GFA.name()).transfer(dappMemberEntity.getAddress(), amount);
            int retryTime = 0;//重试次数
            while (StrUtil.isEmpty(transfer)) {
                // 休眠2s
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                if(retryTime < 3){
                    transfer = ChainService.getInstance(ChainEnum.BSC_USDT.name()).transfer(dappMemberEntity.getAddress(), amount);
                }
                retryTime ++ ;
            }
            if(StrUtil.isNotEmpty(transfer)){
                dappFundFlowEntity.setFromHash(transfer);
                dappFundFlowEntity.setStatus(2);
                dappFundFlowDao.updateById(dappFundFlowEntity);
            }else{
                dappFundFlowEntity.setStatus(1);
                dappFundFlowDao.updateById(dappFundFlowEntity);
            }
        }else{
            return;
        }
    }
    @Override
    public void confirmCancel(DappFundFlowEntity dappFundFlow) {
        Long id = dappFundFlow.getId();
        DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectById(id);
        Integer status = dappFundFlowEntity.getStatus();
        if(1 != status){
            return;
        }
        Integer type = dappFundFlowEntity.getType();
        BigDecimal amount = dappFundFlowEntity.getAmount().negate();
        if(BigDecimal.ZERO.compareTo(amount) >=0){
            amount = amount.negate();
        }
        Long memberId = dappFundFlowEntity.getMemberId();
        DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
        dappFundFlowEntity.setStatus(DappFundFlowEntity.WITHDRAW_STATUS_DISAGREE);
        dappFundFlowDao.updateById(dappFundFlowEntity);
        if(FlowTypeEnum.USDT_OUT.getValue() == type){
            dappMemberEntity.setUsdtBalance(dappMemberEntity.getUsdtBalance().add(amount));
            dappMemberDao.updateUsdtBalanceWithVersion(dappMemberEntity);
        }else if(FlowTypeEnum.DAI_BI_OUT.getValue() == type){
            dappMemberEntity.setBalance(dappMemberEntity.getBalance().add(amount));
            dappMemberDao.updateBalanceWithVersion(dappMemberEntity);
        }else{
            return;
        }
    }
    public static void main(String[] args) {
        String transfer = ChainService.getInstance(ChainEnum.BSC_USDT.name()).transfer("0xCEBfd36e03BD80c7015Cbad17eFfBc33d2923FF3", new BigDecimal("0.1"));
//        BigInteger bigInteger = org.web3j.utils.Convert.toWei("35", org.web3j.utils.Convert.Unit.GWEI).toBigInteger();
//        System.out.println(bigInteger);
    }
    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;
//        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 : allMembers){
            /**
             * 获取每一个成员的四级直推
             */
            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);
        }
        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(8, BigDecimal.ROUND_DOWN);
            if(BigDecimal.ZERO.compareTo(multiplyUsdt) >= 0){
                continue;
            }
            //这个人实际可以分到的数量COIN
            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(),
                    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);
        }
    }
    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,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的集合
        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(8, BigDecimal.ROUND_DOWN);
            if(BigDecimal.ZERO.compareTo(multiplyUsdt) >= 0){
                continue;
            }
            //这个人实际可以分到的数量COIN
            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(),
                    StrUtil.format(FlowTypeEnum.HUA_DIAN_GEREN.getDescrition(), amountMember),
                    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);
        }
    }
    /**
     * 插入流水记录,增加转账记录,发送线上转账的消息
     * @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);
            }
        }
    }
}