From 08d6ef989fbd10f3a85a119a934020361cb1d347 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Fri, 14 May 2021 10:44:37 +0800 Subject: [PATCH] Merge branch 'yunding' of http://120.27.238.55:7000/r/exchange into yunding --- src/main/java/com/xcong/excoin/modules/blackchain/service/TrxUsdtUpdateService.java | 13 ++++++ src/main/java/com/xcong/excoin/quartz/job/BlockCoinUpdateJob.java | 22 +++++++---- src/main/resources/mapper/yunding/YdOrderDao.xml | 5 +- src/test/java/com/xcong/excoin/XchTest.java | 5 ++ src/main/java/com/xcong/excoin/modules/yunding/service/Impl/XchProfitServiceImpl.java | 5 ++ src/test/java/com/xcong/excoin/TrcTest.java | 48 ++++++++++++++++++++++++ 6 files changed, 87 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/xcong/excoin/modules/blackchain/service/TrxUsdtUpdateService.java b/src/main/java/com/xcong/excoin/modules/blackchain/service/TrxUsdtUpdateService.java index 7393792..fbe30a5 100644 --- a/src/main/java/com/xcong/excoin/modules/blackchain/service/TrxUsdtUpdateService.java +++ b/src/main/java/com/xcong/excoin/modules/blackchain/service/TrxUsdtUpdateService.java @@ -1,6 +1,8 @@ package com.xcong.excoin.modules.blackchain.service; import cn.hutool.core.math.MathUtil; +import cn.hutool.http.HttpResponse; +import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -167,7 +169,8 @@ Map<String, Object> map = new HashMap<>(); map.put("num", num); String param = JSON.toJSONString(map); - return postForEntity(url, param).getBody(); +// return postForEntity(url, param).getBody(); + return postForEntityHuTool(url, param).body(); } @@ -208,6 +211,14 @@ return result; } + private static HttpResponse postForEntityHuTool(String url, String param) { + System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2"); + return HttpUtil.createPost(url).body(param) + .timeout(20000).contentType("application/json") + .header("TRON-PRO-API-KEY", Trc20Service.API_KEY) + .execute(); + } + /** * 比对本地地址 同步充值USDT-TRC20 * diff --git a/src/main/java/com/xcong/excoin/modules/yunding/service/Impl/XchProfitServiceImpl.java b/src/main/java/com/xcong/excoin/modules/yunding/service/Impl/XchProfitServiceImpl.java index ef83a33..8b530e4 100644 --- a/src/main/java/com/xcong/excoin/modules/yunding/service/Impl/XchProfitServiceImpl.java +++ b/src/main/java/com/xcong/excoin/modules/yunding/service/Impl/XchProfitServiceImpl.java @@ -17,6 +17,7 @@ import com.xcong.excoin.modules.yunding.entity.YdProductEntity; import com.xcong.excoin.modules.yunding.service.XchProfitService; import com.xcong.excoin.utils.LogRecordUtils; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -24,6 +25,7 @@ import java.math.BigDecimal; import java.util.*; +@Slf4j @Service public class XchProfitServiceImpl implements XchProfitService { @@ -203,6 +205,7 @@ } @Override + @Transactional(rollbackFor = Exception.class) public void xchProfitDistributor(BigDecimal totalProfit) { Date currentDate = new Date(); List<YdProductEntity> products = ydProductDao.selectList(null); @@ -219,6 +222,7 @@ // 单位XCH收益 BigDecimal unitProfit = totalProfit.divide(totalCount, 8, BigDecimal.ROUND_DOWN); + log.info("单位XCH收益:{}", unitProfit); List<YdOrderEntity> orders = ydOrderDao.selectAllValidOrders(); if (CollUtil.isNotEmpty(orders)) { @@ -253,6 +257,7 @@ } } + remainProfit = remainProfit.subtract(orderProfit.subtract(orderProfit.multiply(order.getYdProductEntity().getManageExpense()))); String content = "XCH收益"; LogRecordUtils.insertMemberAccountMoneyChangeWithId(order.getMemberId(), content, remainProfit, "XCH", 1, 4, order.getId()); MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(order.getMemberId(), "XCH"); diff --git a/src/main/java/com/xcong/excoin/quartz/job/BlockCoinUpdateJob.java b/src/main/java/com/xcong/excoin/quartz/job/BlockCoinUpdateJob.java index 4b2514f..d421ba1 100644 --- a/src/main/java/com/xcong/excoin/quartz/job/BlockCoinUpdateJob.java +++ b/src/main/java/com/xcong/excoin/quartz/job/BlockCoinUpdateJob.java @@ -1,5 +1,6 @@ package com.xcong.excoin.quartz.job; +import cn.hutool.http.HttpException; import com.xcong.excoin.modules.blackchain.service.TrxUsdtUpdateService; import com.xcong.excoin.modules.coin.service.BlockCoinService; import com.xcong.excoin.utils.RedisUtils; @@ -21,7 +22,7 @@ **/ @Slf4j @Component -@ConditionalOnProperty(prefix = "app", name = "block-job", havingValue = "true") +//@ConditionalOnProperty(prefix = "app", name = "block-job", havingValue = "true") public class BlockCoinUpdateJob { @Resource @@ -50,7 +51,7 @@ redisUtils.set("USDT_TRC20_CURRENT_BLOCK_NUM", blocnNum); try { trxUsdtUpdateService.monitorCoinListener(blocnNum); - } catch (RestClientException e) { + } catch (RestClientException | HttpException e) { // 此时是连接问题 这个块需要重新扫描 log.info("查询区块超时:" + blocnNum); TRC_BLOCK.add(blocnNum); @@ -60,11 +61,11 @@ } - @Scheduled(cron = "0/2 * * * * ? ") + @Scheduled(cron = "0 0/1 * * * ? ") public void usdtTc20UpdateQueue() { // 查询最新区块号 long getnowblock = trxUsdtUpdateService.getnowblockFromTronScan() - 25; - // 生成块到队列 + // 拿到redis里最新区块 Object trc20BlockNum = redisUtils.get("USDT_TRC20_BLOCK_NUM"); if (trc20BlockNum == null) { // 没有则取最新的块 @@ -72,13 +73,18 @@ redisUtils.set("USDT_TRC20_BLOCK_NUM", getnowblock); } Long blockNum = Long.valueOf(trc20BlockNum.toString()); - if (getnowblock < blockNum) { + if (getnowblock <= blockNum) { // 如果当前区块比最新已确认区块还大,则不继续执行 return; } - // 将得到的区块+1 放入队列 - TRC_BLOCK.add(blockNum + 1L); - redisUtils.incr("USDT_TRC20_BLOCK_NUM", 1); + // 得到最新区块和当前区块的差值 + Long diff = getnowblock-blockNum; + for(long i=1;i<=diff;i++){ + blockNum++; + TRC_BLOCK.add(blockNum); + } + // 将最新的最大区块放入redis + redisUtils.set("USDT_TRC20_BLOCK_NUM", blockNum); } /** diff --git a/src/main/resources/mapper/yunding/YdOrderDao.xml b/src/main/resources/mapper/yunding/YdOrderDao.xml index b5b1d61..51b3c03 100644 --- a/src/main/resources/mapper/yunding/YdOrderDao.xml +++ b/src/main/resources/mapper/yunding/YdOrderDao.xml @@ -47,13 +47,14 @@ <association property="ydProductEntity" javaType="com.xcong.excoin.modules.yunding.entity.YdProductEntity"> <id column="p_id" property="id" /> <result column="pro_unit" property="proUnit" /> + <result column="manage_expense" property="manageExpense" /> </association> </resultMap> <select id="selectAllValidOrders" resultMap="orderMap"> - select a.*, b.id p_id, b.pro_unit from yd_order a + select a.*, b.id p_id, b.pro_unit, b.manage_expense from yd_order a inner join yd_product b on a.product_id=b.id - where a.state=2 + where a.state=2 and a.type = 1 </select> <update id="UpdateByIdAndState"> diff --git a/src/test/java/com/xcong/excoin/TrcTest.java b/src/test/java/com/xcong/excoin/TrcTest.java new file mode 100644 index 0000000..85ae927 --- /dev/null +++ b/src/test/java/com/xcong/excoin/TrcTest.java @@ -0,0 +1,48 @@ +package com.xcong.excoin; + +import cn.hutool.http.HttpResponse; +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson.JSON; +import com.xcong.excoin.modules.blackchain.service.Trc20Service; +import com.xcong.excoin.utils.RedisUtils; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + +/** + * @author wzy + * @date 2021-05-04 + **/ +@Slf4j +@SpringBootTest +public class TrcTest { + + @Autowired + private RedisUtils redisUtils; + + @Test + public void trc20Test() { + String url = "https://api.trongrid.io/wallet/getblockbynum"; + + while(true) { + Object current = redisUtils.get("USDT_TRC20_CURRENT_BLOCK_NUM"); + Map<String, Object> map = new HashMap<>(); + map.put("num", current); + String param = JSON.toJSONString(map); + System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2"); + HttpResponse response = HttpUtil.createPost(url).body(param).contentType("application/json").header("TRON-PRO-API-KEY", Trc20Service.API_KEY).execute(); +// log.info(response.body()); + + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } +} diff --git a/src/test/java/com/xcong/excoin/XchTest.java b/src/test/java/com/xcong/excoin/XchTest.java index be438a4..611af9d 100644 --- a/src/test/java/com/xcong/excoin/XchTest.java +++ b/src/test/java/com/xcong/excoin/XchTest.java @@ -60,4 +60,9 @@ orderEntity.setAmount(BigDecimal.TEN); ydOrderDao.insert(orderEntity); } + + @Test + public void xchProfitTest() { + xchProfitService.xchProfitDistributor(BigDecimal.valueOf(1)); + } } -- Gitblit v1.9.1