|
@@ -13,12 +13,18 @@ import com.ichaoj.ams.mapper.AmsTradeRecordMapper;
|
|
|
import com.ichaoj.ams.request.record.CreateTradeRecordRequest;
|
|
|
import com.ichaoj.ams.request.record.PageTradeRecordRequest;
|
|
|
import com.ichaoj.ams.response.record.TradeRecordResponse;
|
|
|
+import com.ichaoj.ams.service.IAmsAddressAccountService;
|
|
|
+import com.ichaoj.ams.service.IAmsAirdropTaskService;
|
|
|
import com.ichaoj.ams.service.IAmsTradeRecordService;
|
|
|
import com.ichaoj.common.model.PublicPage;
|
|
|
+import com.ichaoj.common.model.PublicUserInfo;
|
|
|
import com.ichaoj.mybatis.service.SuperWhaleServiceImpl;
|
|
|
+import com.ichaoj.web.context.SuperWhaleContext;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.context.annotation.Lazy;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import javax.annotation.Resource;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.*;
|
|
@@ -39,15 +45,13 @@ public class AmsTradeRecordServiceImpl extends SuperWhaleServiceImpl<AmsTradeRec
|
|
|
|
|
|
private final static ScheduledExecutorService AMS_SCHEDULER = Executors.newScheduledThreadPool(5);
|
|
|
|
|
|
+ @Resource
|
|
|
+ @Lazy
|
|
|
+ private IAmsAddressAccountService accountService;
|
|
|
+
|
|
|
@Override
|
|
|
public PublicPage<TradeRecordResponse> pageTradeRecord(PageTradeRecordRequest pageRequest) {
|
|
|
- LambdaQueryWrapper<AmsTradeRecord> wrapper = Wrappers.lambdaQuery();
|
|
|
- wrapper
|
|
|
- .eq(StrUtil.isNotBlank(pageRequest.getQueryValue()), AmsTradeRecord::getExecuteId, pageRequest.getQueryValue())
|
|
|
- .or(w -> w.eq(StrUtil.isNotBlank(pageRequest.getQueryValue()), AmsTradeRecord::getTxId, pageRequest.getQueryValue())
|
|
|
- .eq(StrUtil.isNotBlank(pageRequest.getQueryValue()), AmsTradeRecord::getAddress, pageRequest.getQueryValue()))
|
|
|
- .orderByDesc(AmsTradeRecord::getCreateTime);
|
|
|
- Page<AmsTradeRecord> result = this.page(this.buildPageObj(pageRequest), wrapper);
|
|
|
+ Page<TradeRecordResponse> result = this.baseMapper.pageTradeRecord(this.buildPageObj(pageRequest), pageRequest);
|
|
|
return this.convertPublicPage(result, s -> BeanUtil.copyProperties(s, TradeRecordResponse.class));
|
|
|
}
|
|
|
|
|
@@ -62,24 +66,31 @@ public class AmsTradeRecordServiceImpl extends SuperWhaleServiceImpl<AmsTradeRec
|
|
|
addressMap.put(address, false);
|
|
|
}
|
|
|
|
|
|
- while (set.size() != addresses.size()) {
|
|
|
+ while (set.size() <= addresses.size()) {
|
|
|
for (int i = 0; i < addresses.size(); i++) {
|
|
|
BigDecimal gas = getCurrentGasPrice(maxGas);
|
|
|
log.info("当前gas: {}", gas);
|
|
|
BigDecimal currenAmount = getCurrenAmount(amount);
|
|
|
log.info("amount: {}", currenAmount);
|
|
|
String address = getUnusedAddress(addressMap, addresses);
|
|
|
+ int sleepSeconds = RandomUtil.randomInt(intervalMin, intervalMax);
|
|
|
+ long sleep = sleepSeconds * 60L + RandomUtil.randomInt(1, 30);
|
|
|
+ log.info("执行器{} ,当前总共有{} 条交易需要执行,当前是第{} 笔交易,第{}笔交易需要等待{} 分钟",
|
|
|
+ executeId,
|
|
|
+ addresses.size(),
|
|
|
+ i + 1,
|
|
|
+ i + 2,
|
|
|
+ sleep / 60);
|
|
|
if (i == 0) {
|
|
|
saveTrade(executeId, address, gas, currenAmount);
|
|
|
+
|
|
|
+ // 修改地址操作时间
|
|
|
+ AmsAddressAccount account = accountService.getByAddress(address);
|
|
|
+ account.setLastOperTime(LocalDateTime.now());
|
|
|
+ accountService.updateById(account);
|
|
|
// todo 调用链上交易
|
|
|
} else {
|
|
|
- int sleepSeconds = RandomUtil.randomInt(intervalMin, intervalMax);
|
|
|
- long sleep = sleepSeconds * 60L + RandomUtil.randomInt(1, 30);
|
|
|
- log.info("执行器{} ,总共有{} 条交易需要执行,当前是{},第{} 笔交易,需要等待{} 分钟",
|
|
|
- executeId,
|
|
|
- addresses.size(),
|
|
|
- address, i + 1,
|
|
|
- sleep);
|
|
|
+
|
|
|
AmsTradeRecord record = this.getOne(
|
|
|
new LambdaQueryWrapper<AmsTradeRecord>()
|
|
|
.eq(AmsTradeRecord::getExecuteId, executeId)
|
|
@@ -87,15 +98,17 @@ public class AmsTradeRecordServiceImpl extends SuperWhaleServiceImpl<AmsTradeRec
|
|
|
);
|
|
|
|
|
|
if (record == null) {
|
|
|
- AMS_SCHEDULER.schedule(new TimerTask() {
|
|
|
- @Override
|
|
|
- public void run() {
|
|
|
- saveTrade(executeId, address, gas, currenAmount);
|
|
|
- // todo 调用链上交易
|
|
|
- }
|
|
|
+ AMS_SCHEDULER.schedule(() -> {
|
|
|
+ saveTrade(executeId, address, gas, currenAmount);
|
|
|
+ // 修改地址操作时间
|
|
|
+ AmsAddressAccount account = accountService.getByAddress(address);
|
|
|
+ account.setLastOperTime(LocalDateTime.now());
|
|
|
+ accountService.updateById(account);
|
|
|
+ // todo 调用链上交易
|
|
|
}, sleep, TimeUnit.SECONDS);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
addressMap.put(address, true);
|
|
|
set.add(address);
|
|
|
}
|