From 130ee4ec701c05d2930c766935e32e96a6aab753 Mon Sep 17 00:00:00 2001 From: gao <gaoleox@163> Date: Tue, 28 Jul 2020 19:15:45 +0800 Subject: [PATCH] 更新代码 --- src/test/java/com/xcong/excoin/GuijiTest.java | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/test/java/com/xcong/excoin/RedisTest.java | 4 +- 2 files changed, 108 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/xcong/excoin/GuijiTest.java b/src/test/java/com/xcong/excoin/GuijiTest.java new file mode 100644 index 0000000..b0f35e2 --- /dev/null +++ b/src/test/java/com/xcong/excoin/GuijiTest.java @@ -0,0 +1,106 @@ +package com.xcong.excoin; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import javax.annotation.Resource; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +import com.xcong.excoin.common.enumerates.CoinTypeEnum; +import com.xcong.excoin.modules.blackchain.service.EthService; +import com.xcong.excoin.modules.member.dao.MemberCoinAddressDao; +import com.xcong.excoin.modules.member.dao.MemberCoinChargeDao; +import com.xcong.excoin.modules.member.dao.MemberWalletCoinDao; +import com.xcong.excoin.modules.member.entity.MemberCoinAddressEntity; +import com.xcong.excoin.modules.member.entity.MemberCoinChargeEntity; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@SpringBootTest +public class GuijiTest { + + private static final BigDecimal LIMIT = new BigDecimal("50"); + private static final BigDecimal FEE = new BigDecimal("0.0044"); + + public static String ETH_FEE = "0.0044"; + + public static final String TOTAL_ADDRESS = "0x067b4bE5d7B05560AE539Fc8f10597D854ae056D"; + public static final String TOTAL_PRIVATE = "1fb7288c8c88c37d6f79e9617822bffc8d3635bf2d808c5f6afdee9bb326e49c"; + + @Resource + private MemberCoinChargeDao memberCoinChargeDao; + @Resource + private MemberCoinAddressDao memberCoinAddressDao; + @Resource + private MemberWalletCoinDao memberWalletCoinDao; + + @Test + public void pool() throws ExecutionException, InterruptedException { + //List<MemberCoinChargeEntity> list = memberCoinChargeDao.selectAllBySymbolAndTag(CoinTypeEnum.USDT.name(), "ERC20", 1); + List<MemberCoinChargeEntity> list = new ArrayList<MemberCoinChargeEntity>(); + MemberCoinChargeEntity coin = new MemberCoinChargeEntity(); + coin.setAddress("0x4b859f7ba68e2757ae935f9e7426da0c73f63a68"); + coin.setMemberId(184L); + coin.setLastAmount(new BigDecimal(70.83975901)); + list.add(coin); + if (CollUtil.isNotEmpty(list)) { + EthService ethService = new EthService(); + + for (MemberCoinChargeEntity coinCharge : list) { + // 首先根据每个地址查询其是否有ETH 如果没有就充值ETH并设置1 表示初始状态 status=2(待充值)3:表示已提过 + String address = coinCharge.getAddress(); + Long memberId = coinCharge.getMemberId(); + BigDecimal lastAmount = coinCharge.getLastAmount(); + if (lastAmount == null || lastAmount.compareTo(LIMIT) < 0) { + continue; + } + + BigDecimal usdt = ethService.tokenGetBalance(address); + System.out.println("地址:{}, 金额:{}"+address+" usdt="+usdt); + if (usdt != null && usdt.compareTo(LIMIT) > 0) { + usdt = usdt.subtract(new BigDecimal("0.01")); + + // 查询eth是否足够 + BigDecimal eth = EthService.getEthBlance(address); + System.out.println("地址:"+address+" eth = "+eth); + if (eth != null && eth.compareTo(FEE) >= 0) { + MemberCoinAddressEntity memberCoinAddressEntity = memberCoinAddressDao.selectBlockAddressWithTag(memberId, CoinTypeEnum.USDT.name(), "ERC20"); + if (memberCoinAddressEntity == null) { + continue; + } + + String privateKey = memberCoinAddressEntity.getPrivateKey(); + + usdt = usdt.multiply(new BigDecimal("1000000")); + String usdtStr = usdt.toPlainString(); + if (usdtStr.contains(".")) { + usdtStr = usdtStr.substring(0, usdtStr.lastIndexOf(".")); + } + + String hash = ethService.tokenSend(privateKey, address, TOTAL_ADDRESS, usdtStr); + System.out.println("归集:"+hash); + if (StrUtil.isNotBlank(hash)) { + // 归集成功更新状态 先保存本次的hash值,待交易成功后再更新 + coinCharge.setHash(hash); + memberCoinChargeDao.updateById(coinCharge); + } + } else { + String hash = ethService.ethSend(TOTAL_PRIVATE, TOTAL_ADDRESS, address, ETH_FEE); + System.out.println("转手续费:"+hash); + } + } + } + } + } + + + +} + diff --git a/src/test/java/com/xcong/excoin/RedisTest.java b/src/test/java/com/xcong/excoin/RedisTest.java index 03183c3..8f94101 100644 --- a/src/test/java/com/xcong/excoin/RedisTest.java +++ b/src/test/java/com/xcong/excoin/RedisTest.java @@ -25,8 +25,8 @@ @Test public void redisResetTest() { - MemberEntity member = memberDao.selectById(72L); - redisUtils.set("app_893e3963d1fe4be3b047d4a6e5f99ca9", member); + MemberEntity member = memberDao.selectById(1L); + redisUtils.set("app_5b6298754d5b4aac985d9d7d42a2db9d", member); } } -- Gitblit v1.9.1