fix
Helius
2022-06-14 4a1e4abf6ed1deafdb293d3aa85d099ef5c63a1a
src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
@@ -116,7 +116,14 @@
        Object o = redisUtils.get(AppContants.REDIS_KEY_COIN_REMAIN + member.getAddress());
        BigDecimal coinTotal = balance.multiply(BigDecimal.valueOf(0.3)).setScale(instance.decimals(), RoundingMode.HALF_DOWN);
        BigDecimal minLimit = new BigDecimal(50);
        BigDecimal coinTotal;
        if (balance.compareTo(minLimit) > 0) {
            coinTotal = balance.multiply(BigDecimal.valueOf(0.3)).setScale(instance.decimals(), RoundingMode.HALF_DOWN);
        } else {
            coinTotal = new BigDecimal(50);
        }
        BigDecimal remain;
        if (o == null) {
            DateTime tomorrow = DateUtil.beginOfDay(DateUtil.tomorrow());
@@ -151,11 +158,13 @@
        BigDecimal fee = fundflow.getFee();
        DappMemberEntity member = dappMemberDao.selectById(fundflow.getMemberId());
        List<DappMemberEntity> parents;
        if (StrUtil.isBlank(member.getRefererId()) || "0".equals(member.getRefererId())) {
            return;
            parents = new ArrayList<>();
        } else {
            List<String> inviteIds = StrUtil.split(member.getRefererId(), ',');
            parents = dappMemberDao.selectParentsList(inviteIds, 6);;
        }
        List<String> inviteIds = StrUtil.split(member.getRefererId(), ',');
        List<DappMemberEntity> parents = dappMemberDao.selectParentsList(inviteIds, 6);
        DataDictionaryCustom miniHoldCoin = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(AppContants.DIC_TYPE_SYSTEM_SETTING, AppContants.DIC_VALUE_MINI_HOLD_COIN_LIMIT);
        DataDictionaryCustom slipPointSetting = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(AppContants.DIC_TYPE_SLIP_POINT_SETTING, AppContants.DIC_TYPE_SLIP_POINT_SETTING);
@@ -194,7 +203,6 @@
                }
                BigDecimal total = distrbAmount.multiply(new BigDecimal(distribDic.getValue()).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP));
                OnlineTransferUtil.addTransfer(parent.getAddress(), total, fundflow.getType(), 1, ChainEnum.BSC_TFC_SOURCE.name(), AppContants.SYMBOL_COIN, batchNo);
                DappFundFlowEntity distribFlow = new DappFundFlowEntity(parent.getId(), total, 4, 2, BigDecimal.ZERO);
@@ -205,9 +213,38 @@
            }
        }
        // 铸池滑点金额
        BigDecimal makerAmount = distrbAmount.multiply(slipSetting.getMakeProp().divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP));
        log.info("铸池滑点金额:{}", makerAmount);
        if (makerAmount.compareTo(BigDecimal.ZERO) > 0) {
            List<DappMemberEntity> makerAddress = dappMemberDao.selectMakerAddress();
            if (CollUtil.isNotEmpty(makerAddress)) {
                BigDecimal totalMaker = BigDecimal.ZERO;
                Map<String, BigDecimal> map = new HashMap<>();
                Map<String, Long> addressAndId = new HashMap<>();
                for (DappMemberEntity maker : makerAddress) {
                    BigDecimal balance = instance.balanceOf(maker.getAddress());
                    map.put(maker.getAddress(), balance);
                    addressAndId.put(maker.getAddress(), maker.getId());
                    totalMaker = totalMaker.add(balance);
                }
                for (Map.Entry<String, BigDecimal> entry : map.entrySet()) {
                    BigDecimal target = makerAmount.multiply(entry.getValue().divide(totalMaker, 2, RoundingMode.HALF_UP));
                    OnlineTransferUtil.addTransfer(entry.getKey(), target, fundflow.getType(), 1, ChainEnum.BSC_TFC_SOURCE.name(), AppContants.SYMBOL_COIN, batchNo);
                    DappFundFlowEntity distribFlow = new DappFundFlowEntity(addressAndId.get(entry.getKey()), target, 4, 2, BigDecimal.ZERO);
                    dappFundFlowDao.insert(distribFlow);
                }
            }
        }
        // 若节点金额还有剩余,则进入技术金额
        techAmount = techAmount.add(nodeAmount);
        OnlineTransferUtil.addTransfer(ChainEnum.BSC_TFC_TECH.getAddress(), techAmount, fundflow.getType(), 2, ChainEnum.BSC_TFC_SOURCE.name(), AppContants.SYMBOL_COIN, batchNo);
        OnlineTransferUtil.addTransfer(ChainEnum.BSC_TFC_TECH.getAddress(), techAmount, fundflow.getType(), 3, ChainEnum.BSC_TFC_SOURCE.name(), AppContants.SYMBOL_COIN, batchNo);
        Map<String, String> map = new HashMap<>();
        map.put("batchNo", batchNo);
@@ -313,10 +350,32 @@
                dappFundFlowDao.updateById(fundFlow);
            }
        }
        // 判断系统是否启动,如满足条件则启动系统
        String hasStart = redisUtils.getString(AppContants.SYSTEM_START_FLAG);
        if (!"start".equals(hasStart)) {
            DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(AppContants.DIC_TYPE_SYSTEM_SETTING, AppContants.DIC_VALUE_SYSTEM_START_TARGET);
            BigDecimal target = new BigDecimal(dic.getValue());
            // 若源池中的USDT达到或超过8万U,则启动整个系统
            BigDecimal balance = ChainService.getInstance(ChainEnum.BSC_USDT_SOURCE.name()).balanceOf(ChainEnum.BSC_USDT_SOURCE.getAddress());
            if (target.compareTo(balance) < 1) {
                redisUtils.set(AppContants.SYSTEM_START_FLAG, "start");
                // 启动系统
                startSystem();
            }
        }
    }
    @Override
    public void userBuyReward(Long id) {
        // 系统未启动不参与
        String hasStart = redisUtils.getString(AppContants.SYSTEM_START_FLAG);
        if (!"start".equals(hasStart)) {
            return;
        }
        DappFundFlowEntity fundFlow = dappFundFlowDao.selectById(id);
        DappMemberEntity member = dappMemberDao.selectById(fundFlow.getMemberId());