|
@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
import cn.hutool.core.thread.ThreadUtil;
|
|
import cn.hutool.core.thread.ThreadUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
+import com.alibaba.fastjson2.JSON;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
@@ -14,6 +15,10 @@ import com.ichaoj.ams.request.execute.CreateExecute;
|
|
import com.ichaoj.ams.request.execute.PageExecuteRequest;
|
|
import com.ichaoj.ams.request.execute.PageExecuteRequest;
|
|
import com.ichaoj.ams.request.execute.UpdateExecute;
|
|
import com.ichaoj.ams.request.execute.UpdateExecute;
|
|
import com.ichaoj.ams.response.execute.ExecuteResponse;
|
|
import com.ichaoj.ams.response.execute.ExecuteResponse;
|
|
|
|
+import com.ichaoj.ams.script.IScript;
|
|
|
|
+import com.ichaoj.ams.script.ScriptContext;
|
|
|
|
+import com.ichaoj.ams.script.model.AirdropParam;
|
|
|
|
+import com.ichaoj.ams.script.model.AirdropWallet;
|
|
import com.ichaoj.ams.service.*;
|
|
import com.ichaoj.ams.service.*;
|
|
import com.ichaoj.common.exception.ErrorServiceException;
|
|
import com.ichaoj.common.exception.ErrorServiceException;
|
|
import com.ichaoj.common.model.PublicPage;
|
|
import com.ichaoj.common.model.PublicPage;
|
|
@@ -26,9 +31,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
-import java.util.HashSet;
|
|
|
|
-import java.util.List;
|
|
|
|
-import java.util.Set;
|
|
|
|
|
|
+import java.util.*;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -55,13 +58,14 @@ public class AmsExecuteRecordServiceImpl extends SuperWhaleServiceImpl<AmsExecut
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public PublicPage<ExecuteResponse> pageExecute(PageExecuteRequest executeRequest) {
|
|
public PublicPage<ExecuteResponse> pageExecute(PageExecuteRequest executeRequest) {
|
|
- LambdaQueryWrapper<AmsExecuteRecord> wrapper = Wrappers.lambdaQuery();
|
|
|
|
- wrapper
|
|
|
|
- .eq(StrUtil.isNotBlank(executeRequest.getQueryValue()), AmsExecuteRecord::getExecuteId, executeRequest.getQueryValue())
|
|
|
|
- .or(w -> w.like(StrUtil.isNotBlank(executeRequest.getQueryValue()), AmsExecuteRecord::getGroupName, executeRequest.getQueryValue())
|
|
|
|
- .or().like(StrUtil.isNotBlank(executeRequest.getQueryValue()), AmsExecuteRecord::getTaskId, executeRequest.getQueryValue()))
|
|
|
|
- .orderByDesc(AmsExecuteRecord::getCreateTime);
|
|
|
|
- Page<AmsExecuteRecord> result = this.page(this.buildPageObj(executeRequest), wrapper);
|
|
|
|
|
|
+// LambdaQueryWrapper<AmsExecuteRecord> wrapper = Wrappers.lambdaQuery();
|
|
|
|
+// wrapper
|
|
|
|
+// .eq(StrUtil.isNotBlank(executeRequest.getQueryValue()), AmsExecuteRecord::getExecuteId, executeRequest.getQueryValue())
|
|
|
|
+// .or(w -> w.like(StrUtil.isNotBlank(executeRequest.getQueryValue()), AmsExecuteRecord::getGroupName, executeRequest.getQueryValue())
|
|
|
|
+// .or().like(StrUtil.isNotBlank(executeRequest.getQueryValue()), AmsExecuteRecord::getTaskId, executeRequest.getQueryValue()))
|
|
|
|
+// .orderByDesc(AmsExecuteRecord::getCreateTime);
|
|
|
|
+
|
|
|
|
+ Page<ExecuteResponse> result = this.baseMapper.pageExecute(this.buildPageObj(executeRequest), executeRequest, SuperWhaleContext.getContext(PublicUserInfo.class).getUserId());
|
|
return this.convertPublicPage(result, s -> BeanUtil.copyProperties(s, ExecuteResponse.class));
|
|
return this.convertPublicPage(result, s -> BeanUtil.copyProperties(s, ExecuteResponse.class));
|
|
}
|
|
}
|
|
|
|
|
|
@@ -86,6 +90,7 @@ public class AmsExecuteRecordServiceImpl extends SuperWhaleServiceImpl<AmsExecut
|
|
amsExecute.setCreateTime(LocalDateTime.now());
|
|
amsExecute.setCreateTime(LocalDateTime.now());
|
|
amsExecute.setTaskId(task.getAmsTaskId());
|
|
amsExecute.setTaskId(task.getAmsTaskId());
|
|
amsExecute.setProjectId(project.getAmsProjectId());
|
|
amsExecute.setProjectId(project.getAmsProjectId());
|
|
|
|
+ amsExecute.setAirdropParams(JSON.toJSONString(createExecute.getAirdropParams()));
|
|
// todo 查询是第几次执行
|
|
// todo 查询是第几次执行
|
|
this.save(amsExecute);
|
|
this.save(amsExecute);
|
|
if (StrUtil.isBlank(createExecute.getPassword())) {
|
|
if (StrUtil.isBlank(createExecute.getPassword())) {
|
|
@@ -93,12 +98,12 @@ public class AmsExecuteRecordServiceImpl extends SuperWhaleServiceImpl<AmsExecut
|
|
}
|
|
}
|
|
// todo 验证密码是否正确
|
|
// todo 验证密码是否正确
|
|
|
|
|
|
- ThreadUtil.execute(() -> tradeService.randomTrans(accountList
|
|
|
|
- , createExecute.getIntervalMin()
|
|
|
|
- , createExecute.getIntervalMax()
|
|
|
|
- , createExecute.getAmount()
|
|
|
|
- , createExecute.getMaxGas()
|
|
|
|
- , amsExecute.getExecuteId()));
|
|
|
|
|
|
+// ThreadUtil.execute(() -> tradeService.randomTrans(accountList
|
|
|
|
+// , createExecute.getIntervalMin()
|
|
|
|
+// , createExecute.getIntervalMax()
|
|
|
|
+// , createExecute.getAmount()
|
|
|
|
+// , createExecute.getMaxGas()
|
|
|
|
+// , amsExecute.getExecuteId()));
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@@ -154,31 +159,50 @@ public class AmsExecuteRecordServiceImpl extends SuperWhaleServiceImpl<AmsExecut
|
|
|
|
|
|
@Scheduled(cron = "0/59 * * * * ? ")
|
|
@Scheduled(cron = "0/59 * * * * ? ")
|
|
public void scanExecuteStatus() {
|
|
public void scanExecuteStatus() {
|
|
- List<AmsExecuteRecord> list = this.list();
|
|
|
|
- for (AmsExecuteRecord executeRecord : list) {
|
|
|
|
- // 验证用户执行的状态
|
|
|
|
|
|
+ LambdaQueryWrapper<AmsExecuteRecord> eq = Wrappers.lambdaQuery(AmsExecuteRecord.class)
|
|
|
|
+ .eq(AmsExecuteRecord::getExecuteStatus, 0);
|
|
|
|
+ List<AmsExecuteRecord> amsExecuteRecords = this.list(eq);
|
|
|
|
+// List<AmsExecuteRecord> list = this.list();
|
|
|
|
+ for (AmsExecuteRecord executeRecord : amsExecuteRecords) {
|
|
String executeId = executeRecord.getExecuteId();
|
|
String executeId = executeRecord.getExecuteId();
|
|
String userId = executeRecord.getUserId();
|
|
String userId = executeRecord.getUserId();
|
|
String groupName = executeRecord.getGroupName();
|
|
String groupName = executeRecord.getGroupName();
|
|
List<AmsAddressAccount> accounts = accountService.getByGroupNameAndUserId(groupName, userId);
|
|
List<AmsAddressAccount> accounts = accountService.getByGroupNameAndUserId(groupName, userId);
|
|
- Set<String> predictSet = accounts.stream().map(AmsAddressAccount::getAddress).collect(Collectors.toSet());
|
|
|
|
- List<AmsTradeRecord> tradeRecords = tradeService.list(new LambdaQueryWrapper<AmsTradeRecord>()
|
|
|
|
- .eq(AmsTradeRecord::getExecuteId, executeId));
|
|
|
|
- Set<String> actualSet = tradeRecords.stream().map(AmsTradeRecord::getAddress).collect(Collectors.toSet());
|
|
|
|
- // 判断交易记录的地址是否
|
|
|
|
- if (CollectionUtil.containsAll(predictSet, actualSet) && CollectionUtil.containsAll(actualSet, predictSet)) {
|
|
|
|
- Set<String> confirmSet = new HashSet<>();
|
|
|
|
- for (AmsTradeRecord tradeRecord : tradeRecords) {
|
|
|
|
- if (tradeRecord.getStatus() == 1) {
|
|
|
|
- confirmSet.add(tradeRecord.getAddress());
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- // 修改状态
|
|
|
|
- if (CollectionUtil.containsAll(confirmSet, actualSet) && CollectionUtil.containsAll(actualSet, confirmSet)) {
|
|
|
|
- executeRecord.setExecuteStatus(1);
|
|
|
|
- this.updateById(executeRecord);
|
|
|
|
- }
|
|
|
|
|
|
+ AmsAirdropTask task = taskService.getById(executeRecord.getTaskId());
|
|
|
|
+ String taskCode = task.getTaskCode();
|
|
|
|
+ IScript script = ScriptContext.getScriptByCode(taskCode);
|
|
|
|
+ String airdropParams = executeRecord.getAirdropParams();
|
|
|
|
+ List<AirdropParam> params = JSON.parseArray(airdropParams, AirdropParam.class);
|
|
|
|
+ Map<String, AirdropParam> paramMap = new HashMap<>();
|
|
|
|
+ for (AirdropParam param : params) {
|
|
|
|
+ paramMap.put(param.getName(), param);
|
|
}
|
|
}
|
|
|
|
+// accounts.stream().map(account->{
|
|
|
|
+// AirdropWallet wallet = new AirdropWallet();
|
|
|
|
+// wallet.setAddress(account.getAddress());
|
|
|
|
+// String keystore = account.getKeystore();
|
|
|
|
+// accountService.getPrivateKeyByKeystore(keystore, executeId);
|
|
|
|
+// })
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+// Set<String> predictSet = accounts.stream().map(AmsAddressAccount::getAddress).collect(Collectors.toSet());
|
|
|
|
+// List<AmsTradeRecord> tradeRecords = tradeService.list(new LambdaQueryWrapper<AmsTradeRecord>()
|
|
|
|
+// .eq(AmsTradeRecord::getExecuteId, executeId));
|
|
|
|
+// Set<String> actualSet = tradeRecords.stream().map(AmsTradeRecord::getAddress).collect(Collectors.toSet());
|
|
|
|
+// // 判断交易记录的地址是否
|
|
|
|
+// if (CollectionUtil.containsAll(predictSet, actualSet) && CollectionUtil.containsAll(actualSet, predictSet)) {
|
|
|
|
+// Set<String> confirmSet = new HashSet<>();
|
|
|
|
+// for (AmsTradeRecord tradeRecord : tradeRecords) {
|
|
|
|
+// if (tradeRecord.getStatus() == 1) {
|
|
|
|
+// confirmSet.add(tradeRecord.getAddress());
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+// // 修改状态
|
|
|
|
+// if (CollectionUtil.containsAll(confirmSet, actualSet) && CollectionUtil.containsAll(actualSet, confirmSet)) {
|
|
|
|
+// executeRecord.setExecuteStatus(1);
|
|
|
|
+// this.updateById(executeRecord);
|
|
|
|
+// }
|
|
|
|
+// }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|