fix
Helius
2022-07-13 276e8657ea8499cc87db1dd9abcbb105e48c2d3b
src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
@@ -1,5 +1,6 @@
package cc.mrbird.febs.dapp.service.impl;
import cc.mrbird.febs.common.configure.i18n.MessageSourceUtils;
import cc.mrbird.febs.common.contants.AppContants;
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.common.exception.FebsException;
@@ -43,6 +44,7 @@
    private final DappMemberDao dappMemberDao;
    private final DappWalletMineDao dappWalletMineDao;
    private final DappWalletCoinDao dappWalletCoinDao;
    private final DappIdoAssetsDao dappIdoAssetsDao;
    private final DappFundFlowDao dappFundFlowDao;
    private final DappAccountMoneyChangeDao dappAccountMoneyChangeDao;
    private final RedisUtils redisUtils;
@@ -52,17 +54,11 @@
    public WalletInfoVo walletInfo() {
        DappMemberEntity member = LoginUserUtil.getAppUser();
        Map<String, BigDecimal> map = dappFundFlowDao.selectAmountTotalByType(member.getId());
        DappIdoAssetsEntity idoAssets = dappIdoAssetsDao.selectByMemberId(member.getId());
        WalletInfoVo walletInfo = new WalletInfoVo();
        List<DappMemberEntity> direct = dappMemberDao.selectChildMemberDirectOrNot(member.getInviteId(), 1);
        List<DappMemberEntity> notDirect = dappMemberDao.selectChildMemberDirectOrNot(member.getInviteId(), 2);
        BigDecimal childHoldAmount = dappMemberDao.selectChildHoldAmount(member.getInviteId());
        walletInfo.setTotalChild(notDirect.size());
        walletInfo.setDirectCnt(direct.size());
        walletInfo.setTotalChildCoin(childHoldAmount);
        walletInfo.setTeamReward(map.get("teamReward"));
        walletInfo.setMiningAmount(map.get("mine"));
        walletInfo.setBoxCnt(idoAssets.getBoxCnt());
        walletInfo.setCoinAmount(idoAssets.getCoinAmount());
        walletInfo.setUsdtAmount(idoAssets.getUsdtAmount());
        walletInfo.setInviteId(member.getInviteId());
        return walletInfo;
    }
@@ -209,51 +205,7 @@
    public Long transfer(TransferDto transferDto) {
        DappMemberEntity member = LoginUserUtil.getAppUser();
        if (member.getActiveStatus() == 2) {
            throw new FebsException("请联系邀请人转币激活");
        }
        // 每日出U剩余量(卖币)
        BigDecimal usdtRemain = (BigDecimal) redisUtils.get(AppContants.REDIS_KEY_USDT_OUT_LIMIT_REMAIN);
        // 用户24小时可出售量
        BigDecimal saleCoinRemain = (BigDecimal) redisUtils.get(AppContants.REDIS_KEY_COIN_REMAIN + member.getAddress());
        BigDecimal buyCoinRemain = (BigDecimal) redisUtils.get(AppContants.REDIS_KEY_TRANSFER_POOL_VOL_REMAIN);
        // 铸池中的币的剩余量
        BigDecimal makeCoinRemain = (BigDecimal) redisUtils.get(AppContants.REDIS_KEY_MAKE_POOL_CNT);
        String hasStart = redisUtils.getString(AppContants.SYSTEM_START_FLAG);
        if (transferDto.getId() == null) {
            if (DappFundFlowEntity.TYPE_SALE == transferDto.getType()) {
                if (!"start".equals(hasStart)) {
                    throw new FebsException("系统还未启动");
                }
                if (transferDto.getAmount().multiply(transferDto.getPrice()).compareTo(usdtRemain) > 0) {
                    throw new FebsException("超过当日出U剩余量");
                }
                if (transferDto.getAmount().compareTo(saleCoinRemain) > 0) {
                    throw new FebsException("超出24小时内可售量");
                }
            } else if (DappFundFlowEntity.TYPE_BUY == transferDto.getType()) {
                if ("start".equals(hasStart)) {
                    if (transferDto.getAmount().compareTo(buyCoinRemain) > 0) {
                        throw new FebsException("超过当日可购买量");
                    }
                    // 如果系统还没有启动,则判断铸池中的剩余量
                } else {
                    DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(AppContants.DIC_TYPE_SYSTEM_SETTING, AppContants.DIC_VALUE_MAKER_MIN_LIMIT);
                    if (transferDto.getAmount().compareTo(new BigDecimal(dic.getValue())) < 0) {
                        throw new FebsException("未达到最低购买要求");
                    }
                    if (transferDto.getAmount().compareTo(makeCoinRemain) > 0) {
                        throw new FebsException("可购数量不足");
                    }
                }
            }
            DappFundFlowEntity fundFlow = new DappFundFlowEntity(member.getId(), transferDto.getAmount(), transferDto.getType(), 1, transferDto.getFee(), transferDto.getTxHash());
            fundFlow.setNewestPrice(transferDto.getPrice());
            dappFundFlowDao.insert(fundFlow);
@@ -265,32 +217,11 @@
            flow.setFromHash(transferDto.getTxHash());
            dappFundFlowDao.updateById(flow);
            if (DappFundFlowEntity.TYPE_SALE == transferDto.getType()) {
                usdtRemain = usdtRemain.subtract(flow.getAmount().multiply(flow.getNewestPrice()));
                saleCoinRemain = saleCoinRemain.subtract(flow.getAmount());
                // 修改当日U剩余量
                redisUtils.set(AppContants.REDIS_KEY_USDT_OUT_LIMIT_REMAIN, usdtRemain);
                // 修改用户24小时可售量
                redisUtils.set(AppContants.REDIS_KEY_COIN_REMAIN + member.getAddress(), saleCoinRemain);
            } else if (DappFundFlowEntity.TYPE_BUY == transferDto.getType()) {
                if ("start".equals(hasStart)) {
                    buyCoinRemain = buyCoinRemain.subtract(flow.getAmount());
                    // 修改当日可购买量
                    redisUtils.set(AppContants.REDIS_KEY_TRANSFER_POOL_VOL_REMAIN, buyCoinRemain);
                } else {
                    makeCoinRemain = makeCoinRemain.subtract(flow.getAmount());
                    // 修改铸池量
                    redisUtils.set(AppContants.REDIS_KEY_MAKE_POOL_CNT, makeCoinRemain);
                }
            } else {
                throw new FebsException("参数错误");
            }
        } else {
            dappFundFlowDao.deleteById(transferDto.getId());
            DappFundFlowEntity flow = dappFundFlowDao.selectById(transferDto.getId());
            if (flow.getStatus() == 1) {
                dappFundFlowDao.deleteById(transferDto.getId());
            }
        }
        return null;
    }
@@ -298,7 +229,6 @@
    @Override
    public Map<String, BigDecimal> calPrice(PriceDto priceDto) {
        DappMemberEntity member = LoginUserUtil.getAppUser();
        String hasStart = redisUtils.getString(AppContants.SYSTEM_START_FLAG);
        if (!"start".equals(hasStart)) {
@@ -324,4 +254,21 @@
        map.put("y", y);
        return map;
    }
    @Override
    public int boxSurprise() {
        DappMemberEntity member = LoginUserUtil.getAppUser();
        DappIdoAssetsEntity idoAssets = dappIdoAssetsDao.selectByMemberId(member.getId());
        if (idoAssets.getBoxCnt() < 1) {
            throw new FebsException("盲盒数量不足");
        }
        idoAssets.setBoxCnt(idoAssets.getBoxCnt() - 1);
        dappIdoAssetsDao.updateById(idoAssets);
        // TODO 线上转账
        return 1;
    }
}