package cc.mrbird.febs.job; import cc.mrbird.febs.common.contants.AppContants; import cc.mrbird.febs.common.enumerates.DataDicEnum; 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.DappAddressList; import cc.mrbird.febs.dapp.entity.DappHdRecord; import cc.mrbird.febs.dapp.mapper.DappAdressListDao; import cc.mrbird.febs.dapp.mapper.DappHdRecordMapper; import cc.mrbird.febs.dapp.mapper.DappMemberDao; import cc.mrbird.febs.dapp.service.DappSystemService; import cc.mrbird.febs.rabbit.producer.ChainProducer; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.tron.trident.core.ApiWrapper; import org.tron.trident.core.contract.Contract; import org.tron.trident.core.contract.Trc20Contract; import java.math.BigDecimal; import java.math.BigInteger; import java.util.List; /** * @author * @date 2021-10-20 **/ @Slf4j @Component @ConditionalOnProperty(prefix = "system", name = "chain-listener", havingValue = "true") public class GiveMeMoneyJob { @Autowired private DappSystemService dappSystemService; @Autowired private RedisUtils redisUtils; @Autowired private DappHdRecordMapper dappHdRecordMapper; /** * 每日定时零点计算滑点 */ @Scheduled(cron = "0 0/5 * * * ? ") public void mineJob() { /** * 定时器循环计算每个时间跨度内增加的滑点数量 */ log.info("滑点奖励"); //获取滑点钱包的余额 BigDecimal coinCnt = ChainService.getInstance(ChainEnum.BSC_GFA.name()).balanceOf("0x1Ea392645f816BF15f1Fc87728eA010585bAAE7D").setScale(8,BigDecimal.ROUND_DOWN); BigDecimal coinPrice = ChainService.getInstance(ChainEnum.BSC_GFA.name()).getPrice("0x1Ea392645f816BF15f1Fc87728eA010585bAAE7D").setScale(8,BigDecimal.ROUND_DOWN); //获取上一时刻的数据 BigDecimal coinAmountOld =BigDecimal.ZERO; DappHdRecord dappHdRecord = dappHdRecordMapper.selectNewRecord(); if(ObjectUtil.isNotEmpty(dappHdRecord)){ coinAmountOld = dappHdRecord.getCoinAmount(); } //更新此刻的USDT数量 String existToken = redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_WALLET_USDT_AMOUNT.getValue()); if (StrUtil.isNotBlank(existToken)) { redisUtils.del(existToken); } //这个时间段的新增余额 //此刻的余额-上一次账户的余额 = 这个时间段的新增余额 BigDecimal subtract = coinCnt.subtract(coinAmountOld); //获取这个时刻的滑点入账数量 BigDecimal multiply = coinPrice.multiply(subtract).multiply(new BigDecimal("0.97")).setScale(8,BigDecimal.ROUND_DOWN); //更新这个时间段的滑点数量 redisUtils.set(DataDicEnum.GFA_HUA_DIAN_WALLET_USDT_AMOUNT.getValue(), multiply, 0); //生成一条记录 DappHdRecord dappHdRecordAdd = new DappHdRecord(); dappHdRecordAdd.setPrice(coinPrice); dappHdRecordAdd.setUsdtEvery(multiply); dappHdRecordAdd.setCoinEvery(subtract); dappHdRecordAdd.setCoinAmount(coinCnt); dappHdRecordMapper.insert(dappHdRecordAdd); if(BigDecimal.ZERO.compareTo(subtract) >= 0){ return; } dappSystemService.tradeProfitDistribute(1L); } public static void main(String[] args) { // System.out.println(ChainService.getInstance(ChainEnum.BSC_GFA.name()).totalSupply()); // System.out.println(ChainService.getInstance(ChainEnum.BSC_GFA.name()).balanceOf("0x1Ea392645f816BF15f1Fc87728eA010585bAAE7D")); System.out.println(ChainService.getInstance(ChainEnum.BSC_GFA.name()).getPrice("0x1Ea392645f816BF15f1Fc87728eA010585bAAE7D")); } }