Jelajahi Sumber

fix: 跨链

Wren 1 tahun lalu
induk
melakukan
67ad919047

+ 8 - 0
src/main/java/com/ichaoj/ams/controller/ExecuteController.java

@@ -35,6 +35,14 @@ public class ExecuteController {
         return PublicResult.success();
     }
 
+    @PutMapping("/{executeId}/{password}/restart")
+    @Operation(summary = "重启任务")
+    @AuthResource
+    public PublicResult<Object> restartExecute(@PathVariable String executeId, @PathVariable("password") String password) {
+        executeService.restartExecute(executeId, password);
+        return PublicResult.success();
+    }
+
     @PutMapping
     @Operation(summary = "修改执行")
     @AuthResource(true)

+ 3 - 1
src/main/java/com/ichaoj/ams/entity/AmsExecuteRecord.java

@@ -3,8 +3,10 @@ package com.ichaoj.ams.entity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+
 import java.io.Serializable;
 import java.time.LocalDateTime;
+
 import lombok.Getter;
 import lombok.Setter;
 
@@ -87,7 +89,7 @@ public class AmsExecuteRecord implements Serializable {
     private String maxGas;
 
     /**
-     * 执行状态;是否完成(0否,1是)
+     * 执行状态;是否完成(0否,1是,2中断)
      */
     private Integer executeStatus;
 

+ 1 - 1
src/main/java/com/ichaoj/ams/script/zksync2/cross/ZkSyncCrossScript.java

@@ -97,7 +97,7 @@ public class ZkSyncCrossScript extends IScript {
                 value.toBigInteger(),
                 l2Encoder);
         BigInteger gasLimit = Web3Util.getTransactionGasLimit(web3j, callTransaction);
-
+        gasLimit = BigDecimal.valueOf(1.3).multiply(new BigDecimal(gasLimit)).toBigInteger();
         RawTransaction rawTransaction = RawTransaction.createTransaction(nonce,
                 gasPrice,
                 gasLimit,

+ 4 - 0
src/main/java/com/ichaoj/ams/service/IAmsExecuteRecordService.java

@@ -20,6 +20,7 @@ public interface IAmsExecuteRecordService extends IService<AmsExecuteRecord> {
 
     /**
      * 分页查询执行
+     *
      * @param interactionRequest 请求参数
      * @return 查询结果
      */
@@ -27,14 +28,17 @@ public interface IAmsExecuteRecordService extends IService<AmsExecuteRecord> {
 
     /**
      * 创建执行
+     *
      * @param createExecute 创建参数
      */
     void createExecute(CreateExecute createExecute);
 
     /**
      * 修改执行
+     *
      * @param updateExecute 修改参数
      */
     void updateExecute(UpdateExecute updateExecute);
 
+    void restartExecute(String executeId, String password);
 }

+ 46 - 20
src/main/java/com/ichaoj/ams/service/impl/AmsExecuteRecordServiceImpl.java

@@ -150,35 +150,60 @@ public class AmsExecuteRecordServiceImpl extends SuperWhaleServiceImpl<AmsExecut
                 airdropParamMap.put(airdropParam.getName(), airdropParam);
             }
             int i = 0;
-            for (AirdropWallet wallet : wallets) {
-                if (i != 0) {
-                    long sleepTime = RandomUtil.randomLong(intervalMin, intervalMax);
-                    ThreadUtil.sleep(sleepTime, TimeUnit.MINUTES);
+            AmsExecuteRecord executeRecord = this.getById(execId);
+            try {
+                for (AirdropWallet wallet : wallets) {
+                    if (i != 0) {
+                        long sleepTime = RandomUtil.randomLong(intervalMin, intervalMax);
+                        ThreadUtil.sleep(sleepTime, TimeUnit.MINUTES);
 
+                    }
+                    i++;
+                    IScript script = ScriptContext.getScriptByCode(taskCode);
+                    SResult sResult = script.run(airdropParamMap, wallet);
+                    AmsTradeRecord tradeRecord = new AmsTradeRecord();
+                    tradeRecord.setExecuteId(execId);
+                    tradeRecord.setStatus(sResult.getStatus());
+                    tradeRecord.setAddress(wallet.getAddress());
+                    tradeRecord.setGas(sResult.getGas());
+                    tradeRecord.setTxId(sResult.getTxId());
+                    tradeRecord.setCreateTime(LocalDateTime.now());
+                    tradeRecord.setUpdateTime(LocalDateTime.now());
+                    tradeRecord.setCurrentBalance(sResult.getCurrentBalance());
+                    tradeService.save(tradeRecord);
                 }
-                i++;
-                IScript script = ScriptContext.getScriptByCode(taskCode);
-                SResult sResult = script.run(airdropParamMap, wallet);
-                AmsTradeRecord tradeRecord = new AmsTradeRecord();
-                tradeRecord.setExecuteId(execId);
-                tradeRecord.setStatus(sResult.getStatus());
-                tradeRecord.setAddress(wallet.getAddress());
-                tradeRecord.setGas(sResult.getGas());
-                tradeRecord.setTxId(sResult.getTxId());
-                tradeRecord.setCreateTime(LocalDateTime.now());
-                tradeRecord.setUpdateTime(LocalDateTime.now());
-                tradeRecord.setCurrentBalance(sResult.getCurrentBalance());
-                tradeService.save(tradeRecord);
-            }
 
-            AmsExecuteRecord executeRecord = this.getById(execId);
-            executeRecord.setExecuteStatus(1);
+            } catch (Exception e) {
+                e.printStackTrace();
+                executeRecord.setExecuteStatus(2);
+            }
+            executeRecord.setExecuteStatus(executeRecord.getExecuteStatus() == null || executeRecord.getExecuteStatus() == 0 ? 1 : executeRecord.getExecuteStatus());
             this.updateById(executeRecord);
         });
 
 
     }
 
+
+    @Override
+    public void restartExecute(String executeId, String password) {
+        AmsExecuteRecord executeRecord = this.getById(executeId);
+        String groupName = executeRecord.getGroupName();
+        String userId = executeRecord.getUserId();
+        List<AmsAddressAccount> accounts = accountService.getByGroupNameAndUserId(groupName, userId);
+        List<AirdropWallet> wallets = accountService.getAirdropAddressByAccount(accounts, userId, groupName, password);
+        AmsAirdropTask task = taskService.getById(executeRecord.getTaskId());
+        runTask(
+                executeRecord.getIntervalMin(),
+                executeRecord.getIntervalMax(),
+                executeRecord.getExecuteId(),
+                task.getTaskCode(),
+                JSON.parseArray(executeRecord.getAirdropParams(), AirdropParam.class),
+                wallets
+        );
+
+    }
+
     @Override
     public void updateExecute(UpdateExecute updateExecute) {
         AmsAirdropProject project = verifyProject(updateExecute.getProjectId());
@@ -190,6 +215,7 @@ public class AmsExecuteRecordServiceImpl extends SuperWhaleServiceImpl<AmsExecut
         this.updateById(execute);
     }
 
+
     /**
      * 验证项目id
      *