Browse Source

fix: ams 地址模块优化

cjwen 1 year ago
parent
commit
fdfabbf6b6
29 changed files with 698 additions and 38 deletions
  1. 15 0
      src/main/java/com/ichaoj/ams/constant/AmsConstant.java
  2. 14 7
      src/main/java/com/ichaoj/ams/controller/AirdropProjectController.java
  3. 16 0
      src/main/java/com/ichaoj/ams/controller/AirdropTaskController.java
  4. 14 3
      src/main/java/com/ichaoj/ams/controller/AutoController.java
  5. 20 4
      src/main/java/com/ichaoj/ams/controller/StrategyController.java
  6. 1 1
      src/main/java/com/ichaoj/ams/entity/AmsAuto.java
  7. 10 3
      src/main/java/com/ichaoj/ams/entity/AmsStrategy.java
  8. 13 0
      src/main/java/com/ichaoj/ams/entity/AmsTransaction.java
  9. 4 0
      src/main/java/com/ichaoj/ams/request/address/BatchAddressRequest.java
  10. 12 1
      src/main/java/com/ichaoj/ams/request/airdrop/CreateAirdropProject.java
  11. 21 0
      src/main/java/com/ichaoj/ams/request/airdrop/PageProjectRequest.java
  12. 24 0
      src/main/java/com/ichaoj/ams/request/airdrop/task/UpdateTaskStatusRequest.java
  13. 14 8
      src/main/java/com/ichaoj/ams/request/auto/CreateAuto.java
  14. 22 0
      src/main/java/com/ichaoj/ams/request/auto/PageAutoRequest.java
  15. 3 3
      src/main/java/com/ichaoj/ams/request/auto/UpdateAuto.java
  16. 9 3
      src/main/java/com/ichaoj/ams/request/strategy/CreateStrategy.java
  17. 21 0
      src/main/java/com/ichaoj/ams/request/strategy/PageStrategyRequest.java
  18. 61 0
      src/main/java/com/ichaoj/ams/response/airdrop/AirdropProjectResponse.java
  19. 55 0
      src/main/java/com/ichaoj/ams/response/auto/AutoResponse.java
  20. 49 0
      src/main/java/com/ichaoj/ams/response/strategy/StrategyResponse.java
  21. 21 0
      src/main/java/com/ichaoj/ams/service/IAmsAirdropProjectService.java
  22. 12 0
      src/main/java/com/ichaoj/ams/service/IAmsAirdropTaskService.java
  23. 24 0
      src/main/java/com/ichaoj/ams/service/IAmsAutoService.java
  24. 9 0
      src/main/java/com/ichaoj/ams/service/IAmsStrategyService.java
  25. 70 2
      src/main/java/com/ichaoj/ams/service/impl/AmsAirdropProjectServiceImpl.java
  26. 9 0
      src/main/java/com/ichaoj/ams/service/impl/AmsAirdropTaskServiceImpl.java
  27. 131 2
      src/main/java/com/ichaoj/ams/service/impl/AmsAutoServiceImpl.java
  28. 20 1
      src/main/java/com/ichaoj/ams/service/impl/AmsStrategyServiceImpl.java
  29. 4 0
      src/main/resources/application.yml

+ 15 - 0
src/main/java/com/ichaoj/ams/constant/AmsConstant.java

@@ -102,4 +102,19 @@ public class AmsConstant {
         TRANSACTION
     }
 
+    public enum StrategyType {
+        /**
+         * 时间
+         */
+        TIME,
+        /**
+         * 数值
+         */
+        VALUE,
+        /**
+         * 周期
+         */
+        CYCLE
+    }
+
 }

+ 14 - 7
src/main/java/com/ichaoj/ams/controller/AirdropProjectController.java

@@ -4,9 +4,14 @@ import cn.hutool.core.bean.BeanUtil;
 import com.ichaoj.ams.constant.AmsConstant;
 import com.ichaoj.ams.entity.AmsAirdropProject;
 import com.ichaoj.ams.request.airdrop.CreateAirdropProject;
+import com.ichaoj.ams.request.airdrop.PageProjectRequest;
 import com.ichaoj.ams.request.airdrop.UpdateAirdropProject;
+import com.ichaoj.ams.request.auto.PageAutoRequest;
+import com.ichaoj.ams.response.airdrop.AirdropProjectResponse;
+import com.ichaoj.ams.response.auto.AutoResponse;
 import com.ichaoj.ams.service.IAmsAirdropProjectService;
 import com.ichaoj.common.annotation.AuthResource;
+import com.ichaoj.common.model.PublicPage;
 import com.ichaoj.common.model.PublicResult;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -36,10 +41,7 @@ public class AirdropProjectController {
     @Operation(summary = "创建空投项目")
     @AuthResource(true)
     public PublicResult<Object> createAirdropProject(@RequestBody CreateAirdropProject createAirdropProject) {
-        AmsAirdropProject project = BeanUtil.copyProperties(createAirdropProject, AmsAirdropProject.class);
-        project.setCreateTime(LocalDateTime.now());
-        project.setStatus(AmsConstant.AirdropStatus.NOT_STARTED);
-        airdropProjectService.save(project);
+        airdropProjectService.createAirdropProject(createAirdropProject);
         return PublicResult.success();
     }
 
@@ -47,9 +49,7 @@ public class AirdropProjectController {
     @Operation(summary = "修改空投项目")
     @AuthResource(true)
     public PublicResult<Object> updateAirdropProject(@RequestBody @Validated UpdateAirdropProject updateAirdropProject) {
-        AmsAirdropProject project = BeanUtil.copyProperties(updateAirdropProject, AmsAirdropProject.class);
-        project.setUpdateTime(LocalDateTime.now());
-        airdropProjectService.updateById(project);
+        airdropProjectService.updateAirdropProject(updateAirdropProject);
         return PublicResult.success();
     }
 
@@ -61,4 +61,11 @@ public class AirdropProjectController {
         return PublicResult.success();
     }
 
+    @PostMapping("/page")
+    @Operation(summary = "分页查询空投项目")
+    @AuthResource
+    public PublicResult<PublicPage<AirdropProjectResponse>> pageAirdropProject(@RequestBody PageProjectRequest projectRequest) {
+        PublicPage<AirdropProjectResponse> result = airdropProjectService.pageAirdropProject(projectRequest);
+        return PublicResult.success(result);
+    }
 }

+ 16 - 0
src/main/java/com/ichaoj/ams/controller/AirdropTaskController.java

@@ -7,8 +7,10 @@ import com.ichaoj.ams.request.airdrop.CreateAirdropProject;
 import com.ichaoj.ams.request.airdrop.UpdateAirdropProject;
 import com.ichaoj.ams.request.airdrop.task.CreateAirdropTask;
 import com.ichaoj.ams.request.airdrop.task.UpdateAirdropTask;
+import com.ichaoj.ams.request.airdrop.task.UpdateTaskStatusRequest;
 import com.ichaoj.ams.service.IAmsAirdropTaskService;
 import com.ichaoj.common.annotation.AuthResource;
+import com.ichaoj.common.exception.ErrorServiceException;
 import com.ichaoj.common.model.PublicResult;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -49,6 +51,20 @@ public class AirdropTaskController {
         return PublicResult.success();
     }
 
+    @PutMapping("update-status")
+    @Operation(summary = "修改空投任务状态")
+    @AuthResource
+    public PublicResult<Object> updateAirdropTaskStatus(@RequestBody @Validated UpdateTaskStatusRequest statusRequest) {
+        AmsAirdropTask task = taskService.getById(statusRequest.getAmsTaskId());
+        if (task != null) {
+            task.setTaskStatus(statusRequest.getTaskStatus());
+            taskService.updateById(task);
+        }else {
+            throw new ErrorServiceException("Task Error");
+        }
+        return PublicResult.success();
+    }
+
     @DeleteMapping("/{taskId}")
     @Operation(summary = "删除空投任务")
     @AuthResource(true)

+ 14 - 3
src/main/java/com/ichaoj/ams/controller/AutoController.java

@@ -3,9 +3,12 @@ package com.ichaoj.ams.controller;
 import cn.hutool.core.bean.BeanUtil;
 import com.ichaoj.ams.entity.AmsAuto;
 import com.ichaoj.ams.request.auto.CreateAuto;
+import com.ichaoj.ams.request.auto.PageAutoRequest;
 import com.ichaoj.ams.request.auto.UpdateAuto;
+import com.ichaoj.ams.response.auto.AutoResponse;
 import com.ichaoj.ams.service.IAmsAutoService;
 import com.ichaoj.common.annotation.AuthResource;
+import com.ichaoj.common.model.PublicPage;
 import com.ichaoj.common.model.PublicResult;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -31,7 +34,7 @@ public class AutoController {
     @Operation(summary = "创建自动化")
     @AuthResource(true)
     public PublicResult<Object> createAuto(@RequestBody CreateAuto createAuto) {
-        autoService.save(BeanUtil.copyProperties(createAuto, AmsAuto.class));
+        autoService.createAuto(createAuto);
         return PublicResult.success();
     }
 
@@ -39,16 +42,24 @@ public class AutoController {
     @Operation(summary = "修改自动化")
     @AuthResource(true)
     public PublicResult<Object> updateAuto(@RequestBody @Validated UpdateAuto updateAuto) {
-        autoService.updateById(BeanUtil.copyProperties(updateAuto, AmsAuto.class));
+        autoService.updateAuto(updateAuto);
         return PublicResult.success();
     }
 
     @DeleteMapping("/{autoId}")
     @Operation(summary = "删除自动化")
     @AuthResource(true)
-    public PublicResult<Object> deleteAirdropProject(@PathVariable String autoId) {
+    public PublicResult<Object> deleteAuto(@PathVariable String autoId) {
         autoService.removeById(autoId);
         return PublicResult.success();
     }
+
+    @PostMapping("/page")
+    @Operation(summary = "分页查询自动化")
+    @AuthResource
+    public PublicResult<PublicPage<AutoResponse>> pageAuto(@RequestBody PageAutoRequest autoRequest) {
+        PublicPage<AutoResponse> result = autoService.pageAuto(autoRequest);
+        return PublicResult.success(result);
+    }
     
 }

+ 20 - 4
src/main/java/com/ichaoj/ams/controller/StrategyController.java

@@ -3,9 +3,12 @@ package com.ichaoj.ams.controller;
 import cn.hutool.core.bean.BeanUtil;
 import com.ichaoj.ams.entity.AmsStrategy;
 import com.ichaoj.ams.request.strategy.CreateStrategy;
+import com.ichaoj.ams.request.strategy.PageStrategyRequest;
 import com.ichaoj.ams.request.strategy.UpdateStrategy;
+import com.ichaoj.ams.response.strategy.StrategyResponse;
 import com.ichaoj.ams.service.IAmsStrategyService;
 import com.ichaoj.common.annotation.AuthResource;
+import com.ichaoj.common.model.PublicPage;
 import com.ichaoj.common.model.PublicResult;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -13,6 +16,7 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.time.LocalDateTime;
 
 /**
  * <p>
@@ -34,24 +38,36 @@ public class StrategyController {
     @Operation(summary = "创建策略")
     @AuthResource(true)
     public PublicResult<Object> createStrategy(@RequestBody CreateStrategy createStrategy) {
-        strategyService.save(BeanUtil.copyProperties(createStrategy, AmsStrategy.class));
+        AmsStrategy strategy = BeanUtil.copyProperties(createStrategy, AmsStrategy.class);
+        strategy.setCreateTime(LocalDateTime.now());
+        strategyService.save(strategy);
         return PublicResult.success();
     }
 
     @PutMapping
     @Operation(summary = "修改策略")
     @AuthResource(true)
-    public PublicResult<Object> updateAuto(@RequestBody @Validated UpdateStrategy updateStrategy) {
-        strategyService.updateById(BeanUtil.copyProperties(updateStrategy, AmsStrategy.class));
+    public PublicResult<Object> updateStrategy(@RequestBody @Validated UpdateStrategy updateStrategy) {
+        AmsStrategy strategy = BeanUtil.copyProperties(updateStrategy, AmsStrategy.class);
+        strategy.setUpdateTime(LocalDateTime.now());
+        strategyService.updateById(strategy);
         return PublicResult.success();
     }
 
     @DeleteMapping("/{strategyId}")
     @Operation(summary = "删除策略")
     @AuthResource(true)
-    public PublicResult<Object> deleteAirdropProject(@PathVariable String strategyId) {
+    public PublicResult<Object> deleteStrategy(@PathVariable String strategyId) {
         strategyService.removeById(strategyId);
         return PublicResult.success();
     }
 
+    @PostMapping("/page")
+    @Operation(summary = "分页查询策略")
+    @AuthResource
+    public PublicResult<PublicPage<StrategyResponse>> pageStrategy(@RequestBody PageStrategyRequest strategyRequest) {
+        PublicPage<StrategyResponse> result = strategyService.pageStrategy(strategyRequest);
+        return PublicResult.success(result);
+    }
+
 }

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

@@ -57,7 +57,7 @@ public class AmsAuto implements Serializable {
     /**
      * 创建时间
      */
-    private LocalDateTime createTiame;
+    private LocalDateTime createTime;
 
     /**
      * 更新时间

+ 10 - 3
src/main/java/com/ichaoj/ams/entity/AmsStrategy.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
 import java.time.LocalDateTime;
+
+import com.ichaoj.ams.constant.AmsConstant;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -37,17 +39,22 @@ public class AmsStrategy implements Serializable {
     /**
      * 策略规划
      */
-    private String strategyPlan;
+    private String strategyRule;
 
     /**
      * 策略类型
      */
-    private String strategyType;
+    private AmsConstant.StrategyType strategyType;
+
+    /**
+     * 策略值
+     */
+    private String strategyValue;
 
     /**
      * 执行状态;是否启用(0否,1是)
      */
-    private String strategyStatus;
+    private Integer strategyStatus;
 
     /**
      * 创建时间

+ 13 - 0
src/main/java/com/ichaoj/ams/entity/AmsTransaction.java

@@ -39,6 +39,19 @@ public class AmsTransaction implements Serializable {
      */
     private String to;
 
+    /**
+     * 交易Id
+     */
+    private String txId;
+
+    private String blockHash;
+
+    private Integer blockHeight;
+
+    private String transactionTime;
+
+    private String gasFee;
+
     /**
      * 项目ID
      */

+ 4 - 0
src/main/java/com/ichaoj/ams/request/address/BatchAddressRequest.java

@@ -25,4 +25,8 @@ public class BatchAddressRequest {
     @Schema(title = "当前地址组名称")
     @NotBlank(message = "groupName cannot be null")
     private String groupName;
+
+    @Schema(title = "公链id")
+    @NotBlank(message = "The chain cannot be null")
+    private String chainId;
 }

+ 12 - 1
src/main/java/com/ichaoj/ams/request/airdrop/CreateAirdropProject.java

@@ -1,11 +1,13 @@
 package com.ichaoj.ams.request.airdrop;
 
 import com.ichaoj.ams.constant.AmsConstant;
+import com.ichaoj.ams.request.airdrop.task.CreateAirdropTask;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * @author : cjwen
@@ -40,11 +42,20 @@ public class CreateAirdropProject {
      */
     private String projectWebsite;
 
-
     /**
      * 空投状态
      */
     private AmsConstant.AirdropStatus status;
 
+    /**
+     * 合约地址
+     */
+    private String contractAddress;
+
+    /**
+     * 交互任务
+     */
+    List<CreateAirdropTask> tasks;
+
 
 }

+ 21 - 0
src/main/java/com/ichaoj/ams/request/airdrop/PageProjectRequest.java

@@ -0,0 +1,21 @@
+package com.ichaoj.ams.request.airdrop;
+
+import com.ichaoj.ams.response.airdrop.AirdropProjectResponse;
+import com.ichaoj.common.model.PublicPage;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author : cjwen
+ * @date : 2023/05/12 15:49
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Schema(title = "分页查询策略")
+public class PageProjectRequest extends PublicPage<AirdropProjectResponse> {
+
+    @Schema(title = "查询参数")
+    private String queryValue;
+
+}

+ 24 - 0
src/main/java/com/ichaoj/ams/request/airdrop/task/UpdateTaskStatusRequest.java

@@ -0,0 +1,24 @@
+package com.ichaoj.ams.request.airdrop.task;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+
+/**
+ * @author cjwen
+ */
+@Data
+@Schema(title = "修改空投任务状态")
+public class UpdateTaskStatusRequest{
+
+    @Schema(title = "空投任务Id")
+    @NotBlank(message = "taskId is required!")
+    private String amsTaskId;
+
+    @Schema(title = "任务状态;是否完成(0否,1是)")
+    @NotBlank(message = "taskStatus is required!")
+    private Integer taskStatus;
+
+}

+ 14 - 8
src/main/java/com/ichaoj/ams/request/auto/CreateAuto.java

@@ -3,6 +3,8 @@ package com.ichaoj.ams.request.auto;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
+import java.util.List;
+
 /**
  * @author : cjwen
  * @date : 2023/04/26 14:25
@@ -12,24 +14,28 @@ import lombok.Data;
 public class CreateAuto {
 
     /**
-     * 策略名称
+     * 自动化名称
      */
-    private String strategyName;
+    private String autoName;
 
     /**
-     * 策略规划
+     * 空投项目id
      */
-    private String strategyPlan;
+    private String projectId;
 
     /**
-     * 策略类型
+     * 用户id
      */
-    private String strategyType;
+    private String userId;
 
     /**
-     * 执行状态;是否启用(0否,1是)
+     * 策略id
      */
-    private String strategyStatus;
+    private List<String> strategyIds;
 
+    /**
+     * 任务id
+     */
+    private List<String> taskIds;
 
 }

+ 22 - 0
src/main/java/com/ichaoj/ams/request/auto/PageAutoRequest.java

@@ -0,0 +1,22 @@
+package com.ichaoj.ams.request.auto;
+
+import com.ichaoj.ams.response.auto.AutoResponse;
+import com.ichaoj.ams.response.strategy.StrategyResponse;
+import com.ichaoj.common.model.PublicPage;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author : cjwen
+ * @date : 2023/05/12 15:49
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Schema(title = "分页查询策略")
+public class PageAutoRequest extends PublicPage<AutoResponse> {
+
+    @Schema(title = "查询参数")
+    private String queryValue;
+
+}

+ 3 - 3
src/main/java/com/ichaoj/ams/request/auto/UpdateAuto.java

@@ -12,11 +12,11 @@ import javax.validation.constraints.NotBlank;
  */
 @EqualsAndHashCode(callSuper = true)
 @Data
-@Schema(title = "修改策略")
+@Schema(title = "修改自动化")
 public class UpdateAuto extends CreateAuto {
 
-    @Schema(title = "策略Id")
+    @Schema(title = "自动化Id")
     @NotBlank
-    private String amsStrategyId;
+    private String amsAutoId;
 
 }

+ 9 - 3
src/main/java/com/ichaoj/ams/request/strategy/CreateStrategy.java

@@ -1,5 +1,6 @@
 package com.ichaoj.ams.request.strategy;
 
+import com.ichaoj.ams.constant.AmsConstant;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -19,17 +20,22 @@ public class CreateStrategy {
     /**
      * 策略规划
      */
-    private String strategyPlan;
+    private String strategyRule;
 
     /**
      * 策略类型
      */
-    private String strategyType;
+    private AmsConstant.StrategyType strategyType;
+
+    /**
+     * 策略值
+     */
+    private String strategyValue;
 
     /**
      * 执行状态;是否启用(0否,1是)
      */
-    private String strategyStatus;
+    private Integer strategyStatus;
 
 
 }

+ 21 - 0
src/main/java/com/ichaoj/ams/request/strategy/PageStrategyRequest.java

@@ -0,0 +1,21 @@
+package com.ichaoj.ams.request.strategy;
+
+import com.ichaoj.ams.response.strategy.StrategyResponse;
+import com.ichaoj.common.model.PublicPage;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author : cjwen
+ * @date : 2023/05/12 15:49
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Schema(title = "分页查询策略")
+public class PageStrategyRequest extends PublicPage<StrategyResponse> {
+
+    @Schema(title = "查询参数")
+    private String queryValue;
+
+}

+ 61 - 0
src/main/java/com/ichaoj/ams/response/airdrop/AirdropProjectResponse.java

@@ -0,0 +1,61 @@
+package com.ichaoj.ams.response.airdrop;
+
+import com.ichaoj.ams.constant.AmsConstant;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * @author : cjwen
+ * @date : 2023/05/12 15:51
+ */
+@Data
+@Schema(title = "空投项目信息")
+public class AirdropProjectResponse {
+
+    private String amsProjectId;
+
+    /**
+     * 项目名称
+     */
+    private String projectName;
+
+    /**
+     * 项目logo
+     */
+    private String projectLogo;
+
+    /**
+     * 预估费用
+     */
+    private BigDecimal estimatedCost;
+
+    /**
+     * 项目相关url
+     */
+    private String projectUrl;
+
+    /**
+     * 官网地址
+     */
+    private String projectWebsite;
+
+    /**
+     * 空投状态
+     */
+    private AmsConstant.AirdropStatus status;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+}

+ 55 - 0
src/main/java/com/ichaoj/ams/response/auto/AutoResponse.java

@@ -0,0 +1,55 @@
+package com.ichaoj.ams.response.auto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.time.LocalDateTime;
+
+/**
+ * @author : cjwen
+ * @date : 2023/05/12 15:51
+ */
+@Data
+@Schema(title = "自动化信息")
+public class AutoResponse {
+
+    @Schema(title = "自动化Id")
+    private String amsAutoId;
+
+    /**
+     * 自动化名称
+     */
+    private String autoName;
+
+    /**
+     * 空投项目id
+     */
+    private String projectId;
+
+    /**
+     * 用户id
+     */
+    private String userId;
+
+    /**
+     * 策略id
+     */
+    private String strategyIds;
+
+    /**
+     * 任务id
+     */
+    private String taskIds;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+}

+ 49 - 0
src/main/java/com/ichaoj/ams/response/strategy/StrategyResponse.java

@@ -0,0 +1,49 @@
+package com.ichaoj.ams.response.strategy;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author : cjwen
+ * @date : 2023/05/12 15:51
+ */
+@Data
+@Schema(title = "策略信息")
+public class StrategyResponse {
+
+    @Schema(title = "策略Id")
+    private String amsStrategyId;
+
+    /**
+     * 策略名称
+     */
+    private String strategyName;
+
+    /**
+     * 策略规划
+     */
+    private String strategyRule;
+
+    /**
+     * 策略类型
+     */
+    private String strategyType;
+
+    /**
+     * 执行状态;是否启用(0否,1是)
+     */
+    private Integer strategyStatus;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+}

+ 21 - 0
src/main/java/com/ichaoj/ams/service/IAmsAirdropProjectService.java

@@ -2,6 +2,11 @@ package com.ichaoj.ams.service;
 
 import com.ichaoj.ams.entity.AmsAirdropProject;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ichaoj.ams.request.airdrop.CreateAirdropProject;
+import com.ichaoj.ams.request.airdrop.PageProjectRequest;
+import com.ichaoj.ams.request.airdrop.UpdateAirdropProject;
+import com.ichaoj.ams.response.airdrop.AirdropProjectResponse;
+import com.ichaoj.common.model.PublicPage;
 
 /**
  * <p>
@@ -13,6 +18,22 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IAmsAirdropProjectService extends IService<AmsAirdropProject> {
 
+    /**
+     * 分页查询空投项目
+     * @param projectRequest 请求参数
+     * @return 分页结果
+     */
+    PublicPage<AirdropProjectResponse> pageAirdropProject(PageProjectRequest projectRequest);
 
+    /**
+     * 创建空投项目及任务
+     * @param createAirdropProject 创建参数
+     */
+    void createAirdropProject(CreateAirdropProject createAirdropProject);
 
+    /**
+     * 修改空投及任务
+     * @param updateAirdropProject 修改参数
+     */
+    void updateAirdropProject(UpdateAirdropProject updateAirdropProject);
 }

+ 12 - 0
src/main/java/com/ichaoj/ams/service/IAmsAirdropTaskService.java

@@ -1,5 +1,6 @@
 package com.ichaoj.ams.service;
 
+import com.ichaoj.ams.constant.AmsConstant;
 import com.ichaoj.ams.entity.AmsAirdropTask;
 import com.baomidou.mybatisplus.extension.service.IService;
 
@@ -13,4 +14,15 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IAmsAirdropTaskService extends IService<AmsAirdropTask> {
 
+    /**
+     * 验证task参数
+     * @param taskApi 任务api
+     * @param taskName 任务名称
+     * @param taskUrl 任务url
+     * @param taskType 任务类型
+     * @return 验证结果
+     */
+    boolean verifyTaskParam(String taskApi, String taskName, String taskUrl, AmsConstant.TaskType taskType);
+
+
 }

+ 24 - 0
src/main/java/com/ichaoj/ams/service/IAmsAutoService.java

@@ -2,6 +2,12 @@ package com.ichaoj.ams.service;
 
 import com.ichaoj.ams.entity.AmsAuto;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ichaoj.ams.request.auto.CreateAuto;
+import com.ichaoj.ams.request.auto.PageAutoRequest;
+import com.ichaoj.ams.request.auto.UpdateAuto;
+import com.ichaoj.ams.request.strategy.PageStrategyRequest;
+import com.ichaoj.ams.response.auto.AutoResponse;
+import com.ichaoj.common.model.PublicPage;
 
 /**
  * <p>
@@ -13,4 +19,22 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IAmsAutoService extends IService<AmsAuto> {
 
+    /**
+     * 分页查询自动化
+     * @param autoRequest 请求参数
+     * @return 查询结果
+     */
+    PublicPage<AutoResponse> pageAuto(PageAutoRequest autoRequest);
+
+    /**
+     * 创建自动化
+     * @param createAuto 创建参数
+     */
+    void createAuto(CreateAuto createAuto);
+
+    /**
+     * 修改自动化
+     * @param updateAuto 修改参数
+     */
+    void updateAuto(UpdateAuto updateAuto);
 }

+ 9 - 0
src/main/java/com/ichaoj/ams/service/IAmsStrategyService.java

@@ -2,6 +2,9 @@ package com.ichaoj.ams.service;
 
 import com.ichaoj.ams.entity.AmsStrategy;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ichaoj.ams.request.strategy.PageStrategyRequest;
+import com.ichaoj.ams.response.strategy.StrategyResponse;
+import com.ichaoj.common.model.PublicPage;
 
 /**
  * <p>
@@ -13,4 +16,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IAmsStrategyService extends IService<AmsStrategy> {
 
+    /**
+     * 分页查询策略
+     * @param strategyRequest 请求参数
+     * @return 查询结果
+     */
+    PublicPage<StrategyResponse> pageStrategy(PageStrategyRequest strategyRequest);
 }

+ 70 - 2
src/main/java/com/ichaoj/ams/service/impl/AmsAirdropProjectServiceImpl.java

@@ -1,10 +1,29 @@
 package com.ichaoj.ams.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ichaoj.ams.constant.AmsConstant;
 import com.ichaoj.ams.entity.AmsAirdropProject;
+import com.ichaoj.ams.entity.AmsAirdropTask;
 import com.ichaoj.ams.mapper.AmsAirdropProjectMapper;
+import com.ichaoj.ams.request.airdrop.CreateAirdropProject;
+import com.ichaoj.ams.request.airdrop.PageProjectRequest;
+import com.ichaoj.ams.request.airdrop.UpdateAirdropProject;
+import com.ichaoj.ams.response.airdrop.AirdropProjectResponse;
 import com.ichaoj.ams.service.IAmsAirdropProjectService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ichaoj.ams.service.IAmsAirdropTaskService;
+import com.ichaoj.common.model.PublicPage;
+import com.ichaoj.mybatis.service.SuperWhaleServiceImpl;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * <p>
@@ -15,6 +34,55 @@ import org.springframework.stereotype.Service;
  * @since 2023-05-10
  */
 @Service
-public class AmsAirdropProjectServiceImpl extends ServiceImpl<AmsAirdropProjectMapper, AmsAirdropProject> implements IAmsAirdropProjectService {
+public class AmsAirdropProjectServiceImpl extends SuperWhaleServiceImpl<AmsAirdropProjectMapper, AmsAirdropProject> implements IAmsAirdropProjectService {
+
+    @Resource
+    private IAmsAirdropTaskService taskService;
+
+    @Override
+    public PublicPage<AirdropProjectResponse> pageAirdropProject(PageProjectRequest projectRequest) {
+        LambdaQueryWrapper<AmsAirdropProject> wrapper = Wrappers.lambdaQuery();
+        wrapper
+                .eq(StrUtil.isNotBlank(projectRequest.getQueryValue()), AmsAirdropProject::getProjectWebsite, projectRequest.getQueryValue())
+                .eq(StrUtil.isNotBlank(projectRequest.getQueryValue()), AmsAirdropProject::getProjectUrl, projectRequest.getQueryValue())
+                .or().like(StrUtil.isNotBlank(projectRequest.getQueryValue()), AmsAirdropProject::getProjectName, projectRequest.getQueryValue())
+                .orderByDesc(AmsAirdropProject::getCreateTime);
+        Page<AmsAirdropProject> result = this.page(this.buildPageObj(projectRequest), wrapper);
+        return this.convertPublicPage(result, s -> BeanUtil.copyProperties(s, AirdropProjectResponse.class));
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void createAirdropProject(CreateAirdropProject createAirdropProject) {
+        AmsAirdropProject project = BeanUtil.copyProperties(createAirdropProject, AmsAirdropProject.class);
+        project.setCreateTime(LocalDateTime.now());
+        project.setStatus(AmsConstant.AirdropStatus.NOT_STARTED);
+        this.save(project);
+        if (CollectionUtil.isNotEmpty(createAirdropProject.getTasks())) {
+            List<AmsAirdropTask> tasks = BeanUtil.copyToList(createAirdropProject.getTasks(), AmsAirdropTask.class);
+            tasks.forEach(t -> {
+                t.setAirdropProjectId(project.getAmsProjectId());
+                t.setCreateTime(LocalDateTime.now());
+                t.setTaskStatus(0);
+            });
+            taskService.saveBatch(tasks);
+        }
+
+    }
+
+    @Override
+    public void updateAirdropProject(UpdateAirdropProject updateAirdropProject) {
+        AmsAirdropProject project = BeanUtil.copyProperties(updateAirdropProject, AmsAirdropProject.class);
+        project.setUpdateTime(LocalDateTime.now());
+        this.updateById(project);
+        if (CollectionUtil.isNotEmpty(updateAirdropProject.getTasks())) {
+            List<AmsAirdropTask> tasks = BeanUtil.copyToList(updateAirdropProject.getTasks(), AmsAirdropTask.class);
+            tasks.forEach(t -> {
+                t.setAirdropProjectId(project.getAmsProjectId());
+                t.setUpdateTime(LocalDateTime.now());
+            });
+            taskService.updateBatchById(tasks);
+        }
+    }
 
 }

+ 9 - 0
src/main/java/com/ichaoj/ams/service/impl/AmsAirdropTaskServiceImpl.java

@@ -1,5 +1,7 @@
 package com.ichaoj.ams.service.impl;
 
+import cn.hutool.core.util.StrUtil;
+import com.ichaoj.ams.constant.AmsConstant;
 import com.ichaoj.ams.entity.AmsAirdropTask;
 import com.ichaoj.ams.mapper.AmsAirdropTaskMapper;
 import com.ichaoj.ams.service.IAmsAirdropTaskService;
@@ -17,4 +19,11 @@ import org.springframework.stereotype.Service;
 @Service
 public class AmsAirdropTaskServiceImpl extends ServiceImpl<AmsAirdropTaskMapper, AmsAirdropTask> implements IAmsAirdropTaskService {
 
+    @Override
+    public boolean verifyTaskParam(String taskApi, String taskName, String taskUrl, AmsConstant.TaskType taskType) {
+        return StrUtil.isNotBlank(taskApi) &&
+                StrUtil.isNotBlank(taskName) &&
+                StrUtil.isNotBlank(taskUrl) &&
+                taskType != null;
+    }
 }

+ 131 - 2
src/main/java/com/ichaoj/ams/service/impl/AmsAutoServiceImpl.java

@@ -1,11 +1,36 @@
 package com.ichaoj.ams.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ichaoj.ams.entity.AmsAirdropProject;
+import com.ichaoj.ams.entity.AmsAirdropTask;
 import com.ichaoj.ams.entity.AmsAuto;
+import com.ichaoj.ams.entity.AmsStrategy;
 import com.ichaoj.ams.mapper.AmsAutoMapper;
+import com.ichaoj.ams.request.auto.CreateAuto;
+import com.ichaoj.ams.request.auto.PageAutoRequest;
+import com.ichaoj.ams.request.auto.UpdateAuto;
+import com.ichaoj.ams.response.auto.AutoResponse;
+import com.ichaoj.ams.service.IAmsAirdropProjectService;
+import com.ichaoj.ams.service.IAmsAirdropTaskService;
 import com.ichaoj.ams.service.IAmsAutoService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ichaoj.ams.service.IAmsStrategyService;
+import com.ichaoj.common.exception.ErrorServiceException;
+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 org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
 /**
  * <p>
  * 自动化 服务实现类
@@ -15,6 +40,110 @@ import org.springframework.stereotype.Service;
  * @since 2023-05-10
  */
 @Service
-public class AmsAutoServiceImpl extends ServiceImpl<AmsAutoMapper, AmsAuto> implements IAmsAutoService {
+public class AmsAutoServiceImpl extends SuperWhaleServiceImpl<AmsAutoMapper, AmsAuto> implements IAmsAutoService {
+
+    @Resource
+    private IAmsAirdropTaskService taskService;
+
+    @Resource
+    private IAmsStrategyService strategyService;
+
+    @Resource
+    private IAmsAirdropProjectService projectService;
+
+    @Override
+    public PublicPage<AutoResponse> pageAuto(PageAutoRequest autoRequest) {
+        LambdaQueryWrapper<AmsAuto> wrapper = Wrappers.lambdaQuery();
+        wrapper
+                .like(StrUtil.isNotBlank(autoRequest.getQueryValue()), AmsAuto::getAutoName, autoRequest.getQueryValue())
+                .orderByDesc(AmsAuto::getCreateTime);
+        Page<AmsAuto> result = this.page(this.buildPageObj(autoRequest), wrapper);
+        return this.convertPublicPage(result, s -> BeanUtil.copyProperties(s, AutoResponse.class));
+    }
+
+    @Override
+    public void createAuto(CreateAuto createAuto) {
+        AmsAirdropProject project = verifyProject(createAuto.getProjectId());
+        AmsAuto amsAuto = BeanUtil.copyProperties(createAuto, AmsAuto.class);
+        setAmsAuto(createAuto.getTaskIds(), createAuto.getStrategyIds(), amsAuto, project.getAmsProjectId());
+        amsAuto.setCreateTime(LocalDateTime.now());
+        this.save(amsAuto);
+    }
+
+    @Override
+    public void updateAuto(UpdateAuto updateAuto) {
+        AmsAirdropProject project = verifyProject(updateAuto.getProjectId());
+        AmsAuto auto = BeanUtil.copyProperties(updateAuto, AmsAuto.class);
+        setAmsAuto(updateAuto.getTaskIds(), updateAuto.getStrategyIds(), auto, project.getAmsProjectId());
+        auto.setUpdateTime(LocalDateTime.now());
+        this.updateById(auto);
+    }
+
+    /**
+     * 验证项目id
+     *
+     * @param projectId 项目id
+     * @return 项目实体
+     */
+    private AmsAirdropProject verifyProject(String projectId) {
+        if (StrUtil.isBlank(projectId)) {
+            throw new ErrorServiceException("projectId is required!");
+        }
+        AmsAirdropProject project = projectService.getById(projectId);
+        if (project == null) {
+            throw new ErrorServiceException("Airdrop Project Error!");
+        }
+        return project;
+    }
+
+    /**
+     * 给实体amsAuto赋任务、策略和用户id的值
+     *
+     * @param taskIds     任务id
+     * @param strategyIds 策略id
+     * @param amsAuto     实体
+     * @param projectId   项目id
+     */
+    private void setAmsAuto(List<String> taskIds, List<String> strategyIds, AmsAuto amsAuto, String projectId) {
+        if (CollectionUtil.isNotEmpty(taskIds)) {
+            String ids = getValidTaskIds(taskIds, projectId);
+            amsAuto.setTaskIds(ids);
+        }
+        if (CollectionUtil.isNotEmpty(strategyIds)) {
+            String ids = getValidStrategyIds(strategyIds);
+            amsAuto.setStrategyIds(ids);
+        }
+        amsAuto.setUserId(SuperWhaleContext.getContext(PublicUserInfo.class).getUserId());
+    }
+
+    /**
+     * 筛选出有效的任务id
+     *
+     * @param ids       任务id
+     * @param projectId 项目id
+     * @return 以 , 分割的任务id
+     */
+    private String getValidTaskIds(List<String> ids, String projectId) {
+        LambdaQueryWrapper<AmsAirdropTask> wrapper = Wrappers.lambdaQuery();
+        wrapper
+                .eq(AmsAirdropTask::getAirdropProjectId, projectId)
+                .in(AmsAirdropTask::getAmsTaskId, ids);
+        List<AmsAirdropTask> tasks = taskService.list(wrapper);
+        return tasks.stream()
+                .filter(t -> CollectionUtil.isNotEmpty(tasks))
+                .map(AmsAirdropTask::getAmsTaskId).collect(Collectors.joining(","));
+    }
 
+    /**
+     * 筛选出有效的策略id
+     *
+     * @param ids 策略id
+     * @return 以 , 分割的策略id
+     */
+    private String getValidStrategyIds(List<String> ids) {
+        List<AmsStrategy> strategies = strategyService.listByIds(ids);
+        return strategies.stream()
+                .filter(s -> CollectionUtil.isNotEmpty(strategies))
+                .map(AmsStrategy::getAmsStrategyId).collect(Collectors.joining(","));
+    }
 }

+ 20 - 1
src/main/java/com/ichaoj/ams/service/impl/AmsStrategyServiceImpl.java

@@ -1,9 +1,18 @@
 package com.ichaoj.ams.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ichaoj.ams.entity.AmsStrategy;
 import com.ichaoj.ams.mapper.AmsStrategyMapper;
+import com.ichaoj.ams.request.strategy.PageStrategyRequest;
+import com.ichaoj.ams.response.strategy.StrategyResponse;
 import com.ichaoj.ams.service.IAmsStrategyService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ichaoj.common.model.PublicPage;
+import com.ichaoj.mybatis.service.SuperWhaleServiceImpl;
 import org.springframework.stereotype.Service;
 
 /**
@@ -15,6 +24,16 @@ import org.springframework.stereotype.Service;
  * @since 2023-05-10
  */
 @Service
-public class AmsStrategyServiceImpl extends ServiceImpl<AmsStrategyMapper, AmsStrategy> implements IAmsStrategyService {
+public class AmsStrategyServiceImpl extends SuperWhaleServiceImpl<AmsStrategyMapper, AmsStrategy> implements IAmsStrategyService {
 
+    @Override
+    public PublicPage<StrategyResponse> pageStrategy(PageStrategyRequest strategyRequest) {
+        LambdaQueryWrapper<AmsStrategy> wrapper = Wrappers.lambdaQuery();
+        wrapper
+                .like(StrUtil.isNotBlank(strategyRequest.getQueryValue()), AmsStrategy::getStrategyName, strategyRequest.getQueryValue())
+                .or().like(StrUtil.isNotBlank(strategyRequest.getQueryValue()), AmsStrategy::getStrategyRule, strategyRequest.getQueryValue())
+                .orderByDesc(AmsStrategy::getCreateTime);
+        Page<AmsStrategy> result = this.page(this.buildPageObj(strategyRequest), wrapper);
+        return this.convertPublicPage(result, s -> BeanUtil.copyProperties(s, StrategyResponse.class));
+    }
 }

+ 4 - 0
src/main/resources/application.yml

@@ -7,3 +7,7 @@ spring:
 super-whale:
   title: ams服务
   description: 空投管理系统
+logging:
+  level:
+    com.ichaoj.ams.mapper:
+      debug