fix
Helius
2022-08-31 db8be7ac334e1297dcfc3111b926a598bf750002
src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
@@ -20,6 +20,7 @@
import cc.mrbird.febs.dapp.vo.WalletInfoVo;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
@@ -235,6 +236,9 @@
        // 铸池中的币的剩余量
        BigDecimal makeCoinRemain = (BigDecimal) redisUtils.get(AppContants.REDIS_KEY_MAKE_POOL_CNT);
        DateTime tomorrow = DateUtil.beginOfDay(DateUtil.tomorrow());
        long time = DateUtil.between(new Date(), tomorrow, DateUnit.SECOND, true);
        String hasStart = redisUtils.getString(AppContants.SYSTEM_START_FLAG);
        if (transferDto.getId() == null) {
            if (DappFundFlowEntity.TYPE_SALE == transferDto.getType()) {
@@ -289,8 +293,9 @@
                    makeCoinRemain = makeCoinRemain.subtract(transferDto.getAmount());
                    buyUsdtMax = buyUsdtMax.subtract(usdtAmount);
                    // 修改每日最大购买USDT量
                    redisUtils.set(AppContants.REDIS_KEY_IDO_USDT_MAX_BUY_DAILY + member.getAddress(), buyUsdtMax);
                    redisUtils.set(AppContants.REDIS_KEY_IDO_USDT_MAX_BUY_DAILY + member.getAddress(), buyUsdtMax, time);
                    // 修改铸池量
                    redisUtils.set(AppContants.REDIS_KEY_MAKE_POOL_CNT, makeCoinRemain);
@@ -328,7 +333,7 @@
                        // 修改铸池量
                        redisUtils.set(AppContants.REDIS_KEY_MAKE_POOL_CNT, makeCoinRemain);
                        redisUtils.set(AppContants.REDIS_KEY_IDO_USDT_MAX_BUY_DAILY + member.getAddress(), buyUsdtMax);
                        redisUtils.set(AppContants.REDIS_KEY_IDO_USDT_MAX_BUY_DAILY + member.getAddress(), buyUsdtMax, time);
                    }
                } else {
                    usdtRemain = usdtRemain.add(transferDto.getAmount().multiply(transferDto.getPrice()));
@@ -366,7 +371,7 @@
        BigDecimal x = sourceU.divide(sourceCoin, tfcInstance.decimals(), RoundingMode.HALF_UP);
        BigDecimal y = sourceU.divide(sourceCoin.add(coin), tfcInstance.decimals(), RoundingMode.HALF_UP);
        log.info("购买价格:{}, 出卖价格:{}", x, y);
//        log.info("购买价格:{}, 出卖价格:{}", x, y);
        HashMap<String, BigDecimal> map = new HashMap<>();
        map.put("x", x);
        map.put("y", y);
@@ -387,25 +392,8 @@
        BoxUtil.Box box = BoxUtil.openBox();
//        DappFundFlowEntity boxFundFlow = new DappFundFlowEntity(member.getId(), new BigDecimal(box.getIndex()), 6, 2, BigDecimal.ZERO);
//        dappFundFlowDao.insert(boxFundFlow);
//
//        new Thread(() -> {
//            try {
//                int count = box.getIndex();
//                while (count > 0) {
//                    ChainService.getInstance(ChainEnum.BSC_NFT_SDC.name()).safeMintNFT(member.getAddress());
//                    Thread.sleep(5000);
//                    count--;
//                }
//            } catch (Exception e) {
//                e.printStackTrace();
//                log.error("发放卡牌错误", e);
//            }
//        }).start();
        Date time = new Date();
        Date expire = DateUtil.offset(time, DateField.HOUR, 2);
        Date expire = DateUtil.offset(time, DateField.HOUR, 48);
        DappNftActivation nftActivation = new DappNftActivation();
        nftActivation.setMemberId(member.getId());
        nftActivation.setCount(box.getIndex());
@@ -428,20 +416,28 @@
        DappNftActivation nftActive = dappNftActivationDao.selectById(activeDto.getId());
        if (nftActive == null) {
            throw new FebsException("NFT不存在");
            throw new FebsException(MessageSourceUtils.getString("nft_active_003"));
        }
        if (nftActive.getCount() < activeDto.getCount()) {
            throw new FebsException("NFT不足或者正在激活中");
            throw new FebsException(MessageSourceUtils.getString("nft_active_004"));
        }
        if (DateUtil.between(new Date(), nftActive.getExpireTime(), DateUnit.SECOND) < 0) {
            throw new FebsException(MessageSourceUtils.getString("nft_active_005"));
        }
        if (nftActive.getStatus() != 1) {
            throw new FebsException(MessageSourceUtils.getString("nft_active_001"));
        }
        PriceDto priceDto = new PriceDto();
        priceDto.setAmount(BigDecimal.ZERO);
        Map<String, BigDecimal> price = calPrice(priceDto);
        DappFundFlowEntity fundFlow = new DappFundFlowEntity(member.getId(), new BigDecimal(activeDto.getCount()), 8, 1, BigDecimal.ZERO, activeDto.getTxHash());
        fundFlow.setNewestPrice(AppContants.NFT_ACTIVE_PRICE.multiply(BigDecimal.valueOf(nftActive.getCount())));
        fundFlow.setTargetAmount(AppContants.NFT_ACTIVE_PRICE.multiply(BigDecimal.valueOf(nftActive.getCount())).multiply(price.get("x")));
        fundFlow.setNewestPrice(price.get("x"));
        dappFundFlowDao.insert(fundFlow);
        int count = nftActive.getCount() - activeDto.getCount();
@@ -462,6 +458,7 @@
        UpdateWrapper<DappNftActivation> query = new UpdateWrapper<>();
        query.eq("status", 1);
        query.eq("member_id", member.getId());
        query.ge("expire_time", new Date());
        List<DappNftActivation> nftActivations = dappNftActivationDao.selectList(query);
        if (CollUtil.isEmpty(nftActivations)) {