diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/bot/TgLongPollingBot.java b/ruoyi-system/src/main/java/com/ruoyi/system/bot/TgLongPollingBot.java index f4e4f247b..34bebe21d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/bot/TgLongPollingBot.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/bot/TgLongPollingBot.java @@ -4,12 +4,11 @@ import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; import org.telegram.telegrambots.bots.TelegramLongPollingBot; import org.telegram.telegrambots.meta.api.objects.Update; import org.telegram.telegrambots.meta.exceptions.TelegramApiException; -@Component +//@Component @Slf4j public class TgLongPollingBot extends TelegramLongPollingBot { diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/handler/EnergyTenantTransferHandler.java b/ruoyi-system/src/main/java/com/ruoyi/system/handler/EnergyTenantTransferHandler.java index ece877cd4..f47b6f25f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/handler/EnergyTenantTransferHandler.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/handler/EnergyTenantTransferHandler.java @@ -1,6 +1,7 @@ package com.ruoyi.system.handler; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import com.ruoyi.common.core.domain.entity.ErrorLog; import com.ruoyi.common.core.domain.entity.TenantInfo; @@ -8,6 +9,7 @@ import com.ruoyi.common.core.domain.entity.TrxExchangeInfo; import com.ruoyi.common.utils.DictUtils; import com.ruoyi.common.utils.ForwardCounter; import com.ruoyi.common.utils.LogUtils; +import com.ruoyi.common.utils.encrpt.Dt; import com.ruoyi.system.domain.TrxExchangeMonitorAccountInfo; import com.ruoyi.system.mapper.TenantInfoMapper; import com.ruoyi.system.mapper.TrxExchangeInfoMapper; @@ -16,6 +18,7 @@ import com.ruoyi.system.service.ITenantInfoService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.tron.trident.core.ApiWrapper; import java.util.Date; import java.util.List; @@ -48,26 +51,56 @@ public class EnergyTenantTransferHandler { String eneryBusiTypeByDay = DictUtils.getDictValue("sys_energy_busi_type", "天数套餐"); - if (tenantInfo.getEnergyBusiType().equals(eneryBusiTypeByDay)){ - String delegateStatus = DictUtils.getDictValue("sys_delegate_status", "已委托"); - //查看有没有没回收的能量,有的话先回收 + if (tenantInfo.getEnergyBusiType().equals(eneryBusiTypeByDay)) { - TrxExchangeInfo trxExchangeInfo = TrxExchangeInfo.builder() - .fromAddress(tenantInfo.getReceiverAddress()) - .delegateStatus(delegateStatus) - .energyBusiType(eneryBusiTypeByDay) - .fcd(DateUtil.offsetDay(new Date(), -2)) - .build(); + Long period = tenantInfo.getPeriod(); + long between = DateUtil.between(tenantInfo.getFcd(), new Date(), DateUnit.DAY); + + TrxExchangeInfo trxExchangeInfo = buildTrxExchangeInfo(tenantInfo, eneryBusiTypeByDay); List trxExchangeMonitorAccountInfoList = trxExchangeInfoMapper.selectTrxExchangeMonitorAccountInfo(trxExchangeInfo); - for (TrxExchangeMonitorAccountInfo trxExchangeMonitorAccountInfo : trxExchangeMonitorAccountInfoList) { - undelegateEnergyHandler.unDelegateResource(trxExchangeMonitorAccountInfo); + if (between > period) { + + String apiKey = DictUtils.getRandomDictValue("sys_tron_api_key"); + + for (TrxExchangeMonitorAccountInfo trxExchangeMonitorAccountInfo : trxExchangeMonitorAccountInfoList) { + String encryptPrivateKey = trxExchangeMonitorAccountInfo.getEncryptPrivateKey(); + String encryptKey = trxExchangeMonitorAccountInfo.getEncryptKey(); + String decryptPrivateKey = Dt.decrypt(encryptPrivateKey, encryptKey); + ApiWrapper apiWrapper = ApiWrapper.ofMainnet(decryptPrivateKey, apiKey); + undelegateEnergyHandler.doUndelegateEnergy(trxExchangeMonitorAccountInfo,apiWrapper); + } + + //满期不继续处理 + tenantInfo.setDelegatedDays(between); + String delegateStatus = DictUtils.getDictValue("sys_delegate_status", "已满期"); + tenantInfo.setStatus(delegateStatus); + tenantInfo.setLcu("system"); + tenantInfoMapper.updateTenantInfo(tenantInfo); + + + return; } - //赠送每天的能量 - tenantInfoService.doDelegateEnergy(tenantInfo,"system"); - }else{ + /* + TrxExchangeInfo trxExchangeInfo = buildTrxExchangeInfo(tenantInfo, eneryBusiTypeByDay); + + List trxExchangeMonitorAccountInfoList = trxExchangeInfoMapper.selectTrxExchangeMonitorAccountInfo(trxExchangeInfo); + for (TrxExchangeMonitorAccountInfo trxExchangeMonitorAccountInfo : trxExchangeMonitorAccountInfoList) { + undelegateEnergyHandler.unDelegateResource(trxExchangeMonitorAccountInfo); + }*/ + + if (CollectionUtil.isNotEmpty(trxExchangeMonitorAccountInfoList)) { + tenantInfo.setTotalCountUsed(0L); + tenantInfo.setDelegatedDays(tenantInfo.getDelegatedDays() + 1); + tenantInfo.setLcu("system"); + tenantInfoMapper.updateTenantInfo(tenantInfo); + } else { + //赠送每天的能量 + tenantInfoService.doDelegateEnergy(tenantInfo, "system"); + } + } else { String delegateStatus = DictUtils.getDictValue("sys_delegate_status", "已回收"); //查看有没有没回收的能量,有的话先回收 TrxExchangeInfo trxExchangeInfo = TrxExchangeInfo.builder() @@ -78,9 +111,9 @@ public class EnergyTenantTransferHandler { .build(); List trxExchangeMonitorAccountInfoList = trxExchangeInfoMapper.selectTrxExchangeMonitorAccountInfo(trxExchangeInfo); - if (CollectionUtil.isEmpty(trxExchangeMonitorAccountInfoList)){ + if (CollectionUtil.isEmpty(trxExchangeMonitorAccountInfoList)) { //一笔都没有使用,每天自动扣除一笔 - tenantInfo.setTotalCountUsed(tenantInfo.getTotalCountUsed()+1); + tenantInfo.setTotalCountUsed(tenantInfo.getTotalCountUsed() + 1); tenantInfo.setLcu("system"); tenantInfoMapper.updateTenantInfo(tenantInfo); } @@ -103,5 +136,18 @@ public class EnergyTenantTransferHandler { } + private static TrxExchangeInfo buildTrxExchangeInfo(TenantInfo tenantInfo, String eneryBusiTypeByDay) { + String delegateStatus = DictUtils.getDictValue("sys_delegate_status", "已委托"); + //查看有没有没回收的能量,有的话先回收 + + TrxExchangeInfo trxExchangeInfo = TrxExchangeInfo.builder() + .fromAddress(tenantInfo.getReceiverAddress()) + .delegateStatus(delegateStatus) + .energyBusiType(eneryBusiTypeByDay) + .fcd(DateUtil.offsetDay(new Date(), -2)) + .build(); + return trxExchangeInfo; + } + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/handler/UndelegateEnergyHandler.java b/ruoyi-system/src/main/java/com/ruoyi/system/handler/UndelegateEnergyHandler.java index 01761fe4a..9bf5f276c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/handler/UndelegateEnergyHandler.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/handler/UndelegateEnergyHandler.java @@ -66,7 +66,7 @@ public class UndelegateEnergyHandler { String fromAddress = trxExchangeMonitorAccountInfo.getFromAddress(); - if (betweenHours < lockPeriod) { + if (betweenHours < lockPeriod || betweenHours == 999L) { String sysEnergyUndelegateWhitelistString = configService.selectConfigByKey("sys.energy.undelegate.whitelist"); if (StringUtils.isNotEmpty(sysEnergyUndelegateWhitelistString) && sysEnergyUndelegateWhitelistString.contains(trxExchangeMonitorAccountInfo.getFromAddress())){ String sysEnergyUndelegatePeriod = configService.selectConfigByKey("sys.energy.undelegate.period"); @@ -162,7 +162,6 @@ public class UndelegateEnergyHandler { String accountAddress = trxExchangeMonitorAccountInfo.getAccountAddress(); RLock lock = redissonClient.getLock("lock_undelegate_" + trxExchangeMonitorAccountInfo.getDelegateTxId()); try { -// String decryptPrivateKey = accountAddressInfoService.getDecryptPrivateKey(accountAddress); String encryptPrivateKey = trxExchangeMonitorAccountInfo.getEncryptPrivateKey(); String encryptKey = trxExchangeMonitorAccountInfo.getEncryptKey(); @@ -181,8 +180,6 @@ public class UndelegateEnergyHandler { return; } - -// String tronApiKey = DictUtils.getDictValue("sys_tron_api_key", "synp@outlook"); String apiKey = DictUtils.getRandomDictValue("sys_tron_api_key"); ApiWrapper apiWrapper = ApiWrapper.ofMainnet(decryptPrivateKey, apiKey); @@ -207,13 +204,6 @@ public class UndelegateEnergyHandler { if (tenantInfoList.size() > 0) { tenantInfo = tenantInfoList.get(0); - - /* if (UserConstants.NO.equals(tenantInfo.getIsPaid())) { - return; - }*/ - - - Long totalCountUsed = tenantInfo.getTotalCountUsed(); long newTotalCountUsed = totalCountUsed + countUsed; tenantInfo.setTotalCountUsed(newTotalCountUsed); @@ -226,7 +216,7 @@ public class UndelegateEnergyHandler { accountAddress, 2, tenantInfo.getReceiverAddress(), - 24, + 999, null, tenantInfo.getPrice(), tenantInfo.getEnergyBusiType(), @@ -259,51 +249,6 @@ public class UndelegateEnergyHandler { tenantInfoMapper.updateTenantInfo(tenantInfo); } - //查询是否是按天支付的租户,是的话需要回收完再次赠送 -// -// Integer totalCountUsed = trxExchangeMonitorAccountInfo.getTotalCountUsed(); -// -// if (totalCountUsed == null) { -// //不是天数或者套餐不需要再继续处理 -// return; -// } -// if (UserConstants.NO.equals(trxExchangeMonitorAccountInfo.getIsPaid())) { -// return; -// } -// -// -//// if (delegatedDays == period) { -//// //委托天数已用完不再处理,更改状态为已满期 -//// String expire = DictUtils.getDictValue("sys_tenant_status", "已满期"); -//// tenantInfo.setStatus(expire); -//// tenantInfoMapper.updateTenantInfo(tenantInfo); -//// } -// Integer maxTransferCount = trxExchangeMonitorAccountInfo.getMaxTransferCount(); -// TenantInfo tenantInfo = new TenantInfo(); -// tenantInfo.setIdTenantInfo(trxExchangeMonitorAccountInfo.getIdTenantInfo()); -// tenantInfo.setTotalCountUsed(trxExchangeMonitorAccountInfo.getTotalCountUsed().longValue()); -// if (totalCountUsed < maxTransferCount) { -// //回收完再次赠送 -// -// } else { -// Long period = trxExchangeMonitorAccountInfo.getPeriod(); -// Long delegatedDays = trxExchangeMonitorAccountInfo.getDelegatedDays(); -// String sysEnergyBusiType = DictUtils.getDictValue("sys_energy_busi_type", "天数套餐"); -// String trxExchangeInfoBusiType = trxExchangeMonitorAccountInfo.getEnergyBusiType(); -// if (trxExchangeInfoBusiType.equals(sysEnergyBusiType) ) { -// if ( delegatedDays == period){ -// //委托天数已用完不再处理,更改状态为已满期 -// String expire = DictUtils.getDictValue("sys_tenant_status", "已满期"); -// tenantInfo.setStatus(expire); -// } -// }else{ -// //笔数套餐超过次数直接设置为耗尽 -// String expire = DictUtils.getDictValue("sys_tenant_status", "已满期"); -// tenantInfo.setStatus(expire); -// } -// } -// -// tenantInfoMapper.updateTenantInfo(tenantInfo); } catch (Exception e) { log.error("回收能量业务处理异常{}", trxExchangeMonitorAccountInfo.getIdTrxExchangeInfo(), e); @@ -335,7 +280,7 @@ public class UndelegateEnergyHandler { * @param * @throws IllegalException */ - private void doUndelegateEnergy(TrxExchangeMonitorAccountInfo trxExchangeMonitorAccountInfo, ApiWrapper apiWrapper) throws IllegalException { + public void doUndelegateEnergy(TrxExchangeMonitorAccountInfo trxExchangeMonitorAccountInfo, ApiWrapper apiWrapper) throws IllegalException { String accountAddress = trxExchangeMonitorAccountInfo.getAccountAddress(); String fromAddress = trxExchangeMonitorAccountInfo.getFromAddress(); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/handler/Usdt2TrxTransferHandler.java b/ruoyi-system/src/main/java/com/ruoyi/system/handler/Usdt2TrxTransferHandler.java index 412571670..b4b58fcd0 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/handler/Usdt2TrxTransferHandler.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/handler/Usdt2TrxTransferHandler.java @@ -202,7 +202,9 @@ public class Usdt2TrxTransferHandler { usdtExchangeInfoMapper.insertUsdtExchangeInfo(usdtExchangeInfo); - doSendTgNotice(oneUsdtToTrxPair.getFirst(), from, trxValue, transferValue, txId); + if (oneUsdtToTrxPair != null){ + doSendTgNotice(oneUsdtToTrxPair.getFirst(), from, trxValue, transferValue, txId); + } } private void doSendTgNotice(BigDecimal oneUsdtToTrx, String from, BigDecimal trxValue, BigDecimal transferValue, String txId) throws TelegramApiException { diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TenantInfoServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TenantInfoServiceImpl.java index 8103afd6c..7861568e3 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TenantInfoServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TenantInfoServiceImpl.java @@ -176,9 +176,9 @@ public class TenantInfoServiceImpl implements ITenantInfoService { for (String id : idArray) { TenantInfo tenantInfo = tenantInfoMapper.selectTenantInfoByIdTenantInfo(Long.valueOf(id)); - Long totalCountUsed = tenantInfo.getTotalCountUsed(); - - Preconditions.checkState(totalCountUsed == 0, "该接收能量地址已在任务中,请勿重复发起"); +// Long totalCountUsed = tenantInfo.getTotalCountUsed(); +// +// Preconditions.checkState(totalCountUsed == 0, "该接收能量地址已在任务中,请勿重复发起"); String status = DictUtils.getDictValue("sys_tenant_status", "生效中"); Preconditions.checkState(status.equals(tenantInfo.getStatus()), "该租户不是生效中状态,不能发起委托任务"); @@ -239,7 +239,7 @@ public class TenantInfoServiceImpl implements ITenantInfoService { trxExchange.setMonitorAddress(monitorAddress); // long between = DateUtil.between(DateUtil.date(), DateUtil.endOfDay(DateUtil.date()), DateUnit.HOUR); - trxExchange.setLockNum(24L); + trxExchange.setLockNum(999L); trxExchange.setEnergyBusiType(tenantInfo.getEnergyBusiType()); trxExchange.setResourceCode(Common.ResourceCode.ENERGY.name());