Helius
2023-01-04 adf9145657843833baeb35d84e3833d8126b5b9d
修改监听链上及归集逻辑
1 files added
5 files modified
124 ■■■■ changed files
src/main/java/cc/mrbird/febs/mall/chain/constants/ChainConstants.java 4 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/chain/job/BlockCoinUpdateJob.java 4 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/chain/job/NotionalPoolingJob.java 83 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/chain/job/Trc20PoolAddressInitJob.java 4 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/chain/job/UsdtErc20InitJob.java 2 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/chain/service/BscUsdtContractEvent.java 27 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/chain/constants/ChainConstants.java
@@ -2,6 +2,8 @@
public interface ChainConstants {
    public static final String REDIS_KEY_POOL_ADDRESS = "TRC20_POOL";
    String REDIS_KEY_POOL_ADDRESS = "TRC20_POOL";
    String REDIS_KEY_ADDRESS_LIST = "TRC20_ADDRESS_LIST";
    String REDIS_KEY_SYSTEM_ADDRESS = "SYSTEM_ADDRESS_LIST";
}
src/main/java/cc/mrbird/febs/mall/chain/job/BlockCoinUpdateJob.java
@@ -20,8 +20,8 @@
 * @date 2020-07-02
 **/
@Slf4j
@Component
@ConditionalOnProperty(prefix = "system", name = "block-job", havingValue = "true")
//@Component
//@ConditionalOnProperty(prefix = "system", name = "block-job", havingValue = "true")
public class BlockCoinUpdateJob {
    @Resource
src/main/java/cc/mrbird/febs/mall/chain/job/NotionalPoolingJob.java
New file
@@ -0,0 +1,83 @@
package cc.mrbird.febs.mall.chain.job;
import cc.mrbird.febs.common.utils.RedisUtils;
import cc.mrbird.febs.mall.chain.constants.ChainConstants;
import cc.mrbird.febs.mall.chain.service.TrxUsdtUpdateService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Set;
/**
 * 归集定时任务
 *
 * @author wzy
 * @date 2020-07-02
 **/
@Slf4j
@Component
@ConditionalOnProperty(prefix = "system", name = "block-job", havingValue = "true")
public class NotionalPoolingJob {
    @Resource
    private RedisUtils redisUtils;
    @Resource
    private TrxUsdtUpdateService trxUsdtUpdateService;
//    /**
//     * usdt 归集
//     */
//    @Scheduled(cron = "0 5/30 * * * ? ")
//    public void poolUsdtEth() {
//        try {
//            log.info("USDT归集开始");
//            usdtEthService.pool();
//            log.info("USDT归集结束");
//        } catch (ExecutionException | InterruptedException e) {
//            log.error("#usdt归集错误#", e);
//        }
//    }
//
//    /**
//     * 使用扫块 不需要这个
//     */
//    //@Scheduled(cron = "0 2/8 * * * ? ")
//    @Deprecated
//    public void usdtEthPoolCheck() {
//        log.info("USDTETH归集结果扫描开始");
//        usdtEthService.usdtEthPoolCheck();
//    }
//
//    @Scheduled(cron = "0 2/30 * * * ? ")
//    public void poolEth() {
//        try {
//            usdtEthService.ethPool();
//        } catch (ExecutionException | InterruptedException e) {
//            log.info("#ETH归集错误#", e);
//        }
//    }
    /**
     * 归集TRC20
     */
    @Scheduled(cron = "0 0/30 * * * ? ")
    public void poolUsdtTrc20() {
        // TODO 执行BSC归集逻辑
        log.info("归集TRC20执行");
//        Set<Object> poolAddress = redisUtils.sGet(ChainConstants.REDIS_KEY_POOL_ADDRESS);
//        if (poolAddress == null || poolAddress.isEmpty()) {
//            return;
//        }
//
//        for (Object address : poolAddress) {
//            String next = (String) address;
//            log.info("归集地址:{}", next);
//            trxUsdtUpdateService.poolByAddress(next);
//        }
    }
}
src/main/java/cc/mrbird/febs/mall/chain/job/Trc20PoolAddressInitJob.java
@@ -39,7 +39,11 @@
        }
        addressList.forEach(item -> {
            // 待归集的地址
            redisUtils.sSet(ChainConstants.REDIS_KEY_POOL_ADDRESS, item.getAddress());
            // 系统所有用户地址
            redisUtils.sSet(ChainConstants.REDIS_KEY_SYSTEM_ADDRESS, item.getAddress());
        });
    }
}
src/main/java/cc/mrbird/febs/mall/chain/job/UsdtErc20InitJob.java
@@ -23,7 +23,7 @@
    @Resource
    private UsdtErc20UpdateService usdtErc20UpdateService;
    @PostConstruct
//    @PostConstruct
    public void initCoinTrade() {
        System.out.println("开启USDT同步");
        usdtErc20UpdateService.updateUsdt();
src/main/java/cc/mrbird/febs/mall/chain/service/BscUsdtContractEvent.java
@@ -4,6 +4,7 @@
import cc.mrbird.febs.common.enumerates.MallMoneyFlowTypeEnum;
import cc.mrbird.febs.common.utils.AppContants;
import cc.mrbird.febs.common.utils.RedisUtils;
import cc.mrbird.febs.mall.chain.constants.ChainConstants;
import cc.mrbird.febs.mall.chain.enums.ChainEnum;
import cc.mrbird.febs.mall.chain.enums.CoinTypeEnum;
import cc.mrbird.febs.mall.entity.MallMemberWallet;
@@ -14,6 +15,7 @@
import cc.mrbird.febs.mall.mapper.MemberCoinAddressDao;
import cc.mrbird.febs.mall.mapper.MemberCoinChargeDao;
import cc.mrbird.febs.mall.service.IMallMoneyFlowService;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
@@ -26,6 +28,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@Slf4j
@Service
@@ -52,13 +55,10 @@
        String address = e.to;
        String hash =  e.log.getTransactionHash();
        MemberCoinAddressEntity coinAddressEntity = memberCoinAddressDao.selectCoinAddressByAddressAndSymbol(address, CoinTypeEnum.USDT.toString());
        if (coinAddressEntity == null) {
            return;
        }
        Set<Object> addressList = redisUtils.sGet(ChainConstants.REDIS_KEY_SYSTEM_ADDRESS);
        // 判断对方打款地址是否为源池地址
        if(ObjectUtil.isNotEmpty(coinAddressEntity)){
//        if (ChainEnum.BSC_USDT.getAddress().toLowerCase().equals(e.to)) {
        if(CollUtil.isNotEmpty(addressList) && addressList.contains(address)){
            log.info("触发USDT合约监听事件");
            redisUtils.set(AppContants.REDIS_KEY_BLOCK_ETH_INCREMENT_NUM, e.log.getBlockNumber());
            // hash没有用过
@@ -70,10 +70,10 @@
                return;
            }
//            MemberCoinAddressEntity coinAddressEntity = memberCoinAddressDao.selectCoinAddressByAddressAndSymbol(address, CoinTypeEnum.USDT.toString());
//            if (coinAddressEntity == null) {
//                return;
//            }
            MemberCoinAddressEntity coinAddressEntity = memberCoinAddressDao.selectCoinAddressByAddressAndSymbol(address, CoinTypeEnum.USDT.toString());
            if (coinAddressEntity == null) {
                return;
            }
            Long memberId = coinAddressEntity.getMemberId();
            ContractChainService sourceUsdtInstance = ChainService.getInstance(ChainEnum.BSC_USDT.name());
            int decimals = sourceUsdtInstance.decimals();
@@ -105,14 +105,11 @@
                        FlowTypeEnum.BALANCE.getValue(),
                        MallMoneyFlowTypeEnum.CHARGE.getName()
                );
                // 同步
//                BigDecimal bigDecimal = ChainService.getInstance(ChainEnum.BSC_USDT.name()).balanceOf(e.to);
            }
        }
    }
    public String insertCoinCharge(String address, Long memberId, BigDecimal newBalance, String symbol, String tag, BigDecimal lastAmount, String hash) {
        MemberCoinChargeEntity memberCoinChargeEntity = new MemberCoinChargeEntity();
        memberCoinChargeEntity.setAddress(address);