diff --git a/pom.xml b/pom.xml
index 3fcd0a3..d8e9ffc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -44,17 +44,17 @@
com.aizuda
snail-job-client-starter
- 1.1.1
+ 1.2.0-beta2
com.aizuda
snail-job-client-retry-core
- 1.1.1
+ 1.2.0-beta2
com.aizuda
snail-job-client-job-core
- 1.1.1
+ 1.2.0-beta2
com.googlecode.aviator
diff --git a/src/main/java/com/example/snailjob/controller/JobController.java b/src/main/java/com/example/snailjob/controller/JobController.java
new file mode 100644
index 0000000..1376dac
--- /dev/null
+++ b/src/main/java/com/example/snailjob/controller/JobController.java
@@ -0,0 +1,130 @@
+package com.example.snailjob.controller;
+
+import com.aizuda.snailjob.client.job.core.dto.JobResponseVO;
+import com.example.snailjob.handler.*;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author opensnail
+ * @date 2024-10-19 10:41:25
+ * @since sj_1.2.0-beta2
+ */
+@RestController
+@RequestMapping("/open-api/job")
+@Tag(name = "JobOpenApi", description = "通过OpenApi可以灵活的实现对Job的增、改、查功能")
+@RequiredArgsConstructor
+public class JobController {
+ private final TestAddJobHandler testAddJobHandler;
+ private final TestUpdateJobHandler testUpdateJobHandler;
+ private final TestQueryJobHandler testQueryJobHandler;
+ private final TestTriggerJobHandler testTriggerJobHandler;
+ private final TestUpdateJobStatusHandler testUpdateJobStatusHandler;
+
+ @Operation(
+ description = "添加集群模式的定时任务"
+ )
+ @PostMapping("/custer/add")
+ public Long addClusterJob(@RequestBody String jobName) {
+ return testAddJobHandler.addClusterJob(jobName);
+ }
+
+ @Operation(
+ description = "添加广播模式的定时任务"
+ )
+ @PostMapping("/broadcast/add")
+ public Long addBroadcastJob(@RequestBody String jobName) {
+ return testAddJobHandler.addBroadcastJob(jobName);
+ }
+
+ @Operation(
+ description = "添加静态分片模式的定时任务"
+ )
+ @PostMapping("/sharding/add")
+ public Long addShardingJob(@RequestBody String jobName) {
+ return testAddJobHandler.addShardingJob(jobName);
+ }
+
+ @Operation(
+ description = "添加Map模式的定时任务"
+ )
+ @PostMapping("/map/add")
+ public Long addMapJob(@RequestBody String jobName) {
+ return testAddJobHandler.addMapJob(jobName);
+ }
+
+ @Operation(
+ description = "添加MapReduce模式的定时任务"
+ )
+ @PostMapping("/map-reduce/add")
+ public Long addMapReduceJob(@RequestBody String jobName) {
+ return testAddJobHandler.addMapReduceJob(jobName);
+ }
+
+ @Operation(
+ description = "更新集群模式的定时任务"
+ )
+ @PutMapping("/custer/update")
+ public Boolean updateClusterJob(@RequestBody Long id) {
+ return testUpdateJobHandler.updateClusterJob(id);
+ }
+
+ @Operation(
+ description = "更新广播模式的定时任务"
+ )
+ @PutMapping("/broadcast/update")
+ public Boolean updateBroadcastJob(@RequestBody Long id) {
+ return testUpdateJobHandler.updateBroadcastJob(id);
+ }
+
+ @Operation(
+ description = "更新静态分片模式的定时任务"
+ )
+ @PutMapping("/sharding/update")
+ public Boolean addShardingJob(@RequestBody Long id) {
+ return testUpdateJobHandler.updateShardingJob(id);
+ }
+
+ @Operation(
+ description = "更新Map模式的定时任务"
+ )
+ @PutMapping("/map/update")
+ public Boolean updateMapJob(@RequestBody Long id) {
+ return testUpdateJobHandler.updateMapJob(id);
+ }
+
+ @Operation(
+ description = "更新MapReduce模式的定时任务"
+ )
+ @PutMapping("/map-reduce/update")
+ public Boolean updateMapReduceJob(@RequestBody Long id) {
+ return testUpdateJobHandler.updateMapReduceJob(id);
+ }
+
+ @Operation(
+ description = "通过任务id查询任务的详情"
+ )
+ @GetMapping("/detail/{id}")
+ public JobResponseVO addMapReduceJob(@PathVariable("id") Long id) {
+ return testQueryJobHandler.queryJob(id);
+ }
+
+ @Operation(
+ description = "手动触发任务"
+ )
+ @PostMapping("/trigger/{id}")
+ public Boolean triggerJob(@PathVariable("id") Long id) {
+ return testTriggerJobHandler.triggerJob(id);
+ }
+
+ @Operation(
+ description = "根据id更新任务的状态",
+ summary = "0:关闭 1:开启"
+ )
+ @PutMapping("/update/status/{id}/{status}")
+ public Boolean updateJob(@PathVariable("id") Long id, @PathVariable("status") Long status) {
+ return testUpdateJobStatusHandler.updateJobStatus(id, status);
+ }
+}
diff --git a/src/main/java/com/example/snailjob/controller/WorkflowController.java b/src/main/java/com/example/snailjob/controller/WorkflowController.java
new file mode 100644
index 0000000..29917fc
--- /dev/null
+++ b/src/main/java/com/example/snailjob/controller/WorkflowController.java
@@ -0,0 +1,40 @@
+package com.example.snailjob.controller;
+
+import com.example.snailjob.handler.TestTriggerJobHandler;
+import com.example.snailjob.handler.TestUpdateJobStatusHandler;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author opensnail
+ * @date 2024-10-19 10:41:25
+ * @since sj_1.2.0-beta2
+ */
+@RestController
+@RequestMapping("/open-api/workflow")
+@Tag(name = "JobOpenApi", description = "通过OpenApi可以灵活的实现对的Workflow触发和更新状态功能")
+@RequiredArgsConstructor
+public class WorkflowController {
+ private final TestTriggerJobHandler testTriggerJobHandler;
+ private final TestUpdateJobStatusHandler testUpdateJobStatusHandler;
+
+ @Operation(
+ description = "手动触发任务"
+ )
+ @PostMapping("/trigger/{id}")
+ public Boolean triggerJob(@PathVariable("id") Long id) {
+ return testTriggerJobHandler.triggerWorkFlow(id);
+ }
+
+ @Operation(
+ description = "根据id更新任务的状态",
+ summary = "0:关闭 1:开启"
+ )
+ @PutMapping("/update/status/{id}/{status}")
+ public Boolean updateJob(@PathVariable("id") Long id, @PathVariable("status") Long status) {
+ return testUpdateJobStatusHandler.updateWorkFlowStatus(id, status);
+ }
+}
diff --git a/src/main/java/com/example/snailjob/handler/TestAddJobHandler.java b/src/main/java/com/example/snailjob/handler/TestAddJobHandler.java
new file mode 100644
index 0000000..8f184f4
--- /dev/null
+++ b/src/main/java/com/example/snailjob/handler/TestAddJobHandler.java
@@ -0,0 +1,126 @@
+package com.example.snailjob.handler;
+
+import com.aizuda.snailjob.client.job.core.enums.AllocationAlgorithmEnum;
+import com.aizuda.snailjob.client.job.core.enums.TriggerTypeEnum;
+import com.aizuda.snailjob.client.job.core.openapi.SnailJobOpenApi;
+import com.aizuda.snailjob.common.core.enums.BlockStrategyEnum;
+import org.springframework.stereotype.Component;
+
+@Component
+public class TestAddJobHandler {
+
+ /**
+ * 新增集群模式的任务
+ *
+ * @param jobName 任务名称
+ * @return 任务id
+ */
+ public Long addClusterJob(String jobName) {
+ return SnailJobOpenApi.addClusterJob()
+ .setRouteKey(AllocationAlgorithmEnum.RANDOM)
+ .setJobName(jobName)
+ .setExecutorInfo("testJobExecutor")
+ .setExecutorTimeout(30)
+ .setDescription("add")
+ .setBlockStrategy(BlockStrategyEnum.DISCARD)
+ .setMaxRetryTimes(1)
+ .setTriggerType(TriggerTypeEnum.SCHEDULED_TIME)
+ .setTriggerInterval(String.valueOf(60))
+ .addArgsStr("测试数据", 123)
+ .addArgsStr("addArg", "args")
+ .setRetryInterval(3)
+ .execute();
+
+ }
+
+ /**
+ * 新增集群模式的任务
+ *
+ * @param jobName 任务名称
+ * @return 任务id
+ */
+ public Long addBroadcastJob(String jobName) {
+ return SnailJobOpenApi.addBroadcastJob()
+ .setJobName(jobName)
+ .setExecutorInfo("testJobExecutor")
+ .setExecutorTimeout(30)
+ .setDescription("add")
+ .setBlockStrategy(BlockStrategyEnum.DISCARD)
+ .setMaxRetryTimes(1)
+ .setTriggerType(TriggerTypeEnum.CRON)
+ .setTriggerInterval("afas")
+ .addArgsStr("测试数据", 123)
+ .addArgsStr("addArg", "args")
+ .setRetryInterval(3)
+ .execute();
+
+ }
+
+ /**
+ * 新增Sharding模式的任务
+ *
+ * @param jobName 任务名称
+ * @return 任务id
+ */
+ public Long addShardingJob(String jobName) {
+ return SnailJobOpenApi.addShardingJob()
+ .setJobName(jobName)
+ .setExecutorInfo("testJobExecutor")
+ .setExecutorTimeout(30)
+ .setDescription("add")
+ .setBlockStrategy(BlockStrategyEnum.DISCARD)
+ .setMaxRetryTimes(1)
+ .setTriggerType(TriggerTypeEnum.SCHEDULED_TIME)
+ .setTriggerInterval(60)
+ .addShardingArgs("分片1", "分片2", "分片3")
+ .setParallelNum(1)
+ .setRetryInterval(3)
+ .execute();
+
+ }
+
+ /**
+ * 新增MapReduce模式的任务
+ *
+ * @param jobName 任务名称
+ * @return 任务id
+ */
+ public Long addMapJob(String jobName) {
+ return SnailJobOpenApi.addMapJob()
+ .setJobName(jobName)
+ .setExecutorInfo("testJobExecutor")
+ .setExecutorTimeout(30)
+ .setDescription("add")
+ .setBlockStrategy(BlockStrategyEnum.DISCARD)
+ .setMaxRetryTimes(1)
+ .setTriggerType(TriggerTypeEnum.SCHEDULED_TIME)
+ .setTriggerInterval(String.valueOf(60))
+ .setParallelNum(3)
+ .setRetryInterval(3)
+ .execute();
+
+ }
+
+ /**
+ * 新增MapReduce模式的任务
+ *
+ * @param jobName 任务名称
+ * @return 任务id
+ */
+ public Long addMapReduceJob(String jobName) {
+ return SnailJobOpenApi.addMapReduceJob()
+ .setJobName(jobName)
+ .setExecutorInfo("testJobExecutor")
+ .setExecutorTimeout(30)
+ .setDescription("add")
+ .setBlockStrategy(BlockStrategyEnum.DISCARD)
+ .setMaxRetryTimes(1)
+ .setTriggerType(TriggerTypeEnum.SCHEDULED_TIME)
+ .setTriggerInterval(String.valueOf(60))
+ .setParallelNum(3)
+ .setShardNum(2)
+ .setRetryInterval(3)
+ .execute();
+
+ }
+}
diff --git a/src/main/java/com/example/snailjob/handler/TestQueryJobHandler.java b/src/main/java/com/example/snailjob/handler/TestQueryJobHandler.java
new file mode 100644
index 0000000..d78fa55
--- /dev/null
+++ b/src/main/java/com/example/snailjob/handler/TestQueryJobHandler.java
@@ -0,0 +1,19 @@
+package com.example.snailjob.handler;
+
+import com.aizuda.snailjob.client.job.core.dto.JobResponseVO;
+import com.aizuda.snailjob.client.job.core.openapi.SnailJobOpenApi;
+import org.springframework.stereotype.Component;
+
+@Component
+public class TestQueryJobHandler {
+
+ /**
+ * 查看任务详情
+ *
+ * @param jobId
+ * @return 任务详情
+ */
+ public JobResponseVO queryJob(Long jobId){
+ return SnailJobOpenApi.getJobDetail(jobId).execute();
+ }
+}
diff --git a/src/main/java/com/example/snailjob/handler/TestTriggerJobHandler.java b/src/main/java/com/example/snailjob/handler/TestTriggerJobHandler.java
new file mode 100644
index 0000000..1d22f47
--- /dev/null
+++ b/src/main/java/com/example/snailjob/handler/TestTriggerJobHandler.java
@@ -0,0 +1,28 @@
+package com.example.snailjob.handler;
+
+import com.aizuda.snailjob.client.job.core.openapi.SnailJobOpenApi;
+import org.springframework.stereotype.Component;
+
+@Component
+public class TestTriggerJobHandler {
+
+ /**
+ * 手动调度任务
+ *
+ * @param jobId 任务ID
+ * @return
+ */
+ public Boolean triggerJob(Long jobId){
+ return SnailJobOpenApi.triggerJob(jobId).execute();
+ }
+
+ /**
+ * 手动调度工作流任务
+ *
+ * @param workFlowId 工作流任务ID
+ * @return
+ */
+ public Boolean triggerWorkFlow(Long workFlowId){
+ return SnailJobOpenApi.triggerWorkFlow(workFlowId).execute();
+ }
+}
diff --git a/src/main/java/com/example/snailjob/handler/TestUpdateJobHandler.java b/src/main/java/com/example/snailjob/handler/TestUpdateJobHandler.java
new file mode 100644
index 0000000..7af4ba8
--- /dev/null
+++ b/src/main/java/com/example/snailjob/handler/TestUpdateJobHandler.java
@@ -0,0 +1,77 @@
+package com.example.snailjob.handler;
+
+import com.aizuda.snailjob.client.job.core.enums.TriggerTypeEnum;
+import com.aizuda.snailjob.client.job.core.openapi.SnailJobOpenApi;
+import org.springframework.stereotype.Component;
+
+import java.util.Random;
+
+@Component
+public class TestUpdateJobHandler {
+
+ /**
+ * 新增集群模式的任务
+ *
+ * @return 任务id
+ */
+ public Boolean updateClusterJob(Long jobId) {
+ return SnailJobOpenApi.updateClusterJob(jobId)
+ .setMaxRetryTimes(1)
+ .setTriggerType(TriggerTypeEnum.SCHEDULED_TIME)
+ .setTriggerInterval(String.valueOf(60))
+ .addArgsStr("update测试数据", new Random().nextInt(1000))
+ .addArgsStr("updateArg", "args")
+ .setRetryInterval(3)
+ .execute();
+
+ }
+
+ /**
+ * 新增集群模式的任务
+ *
+ * @return 任务id
+ */
+ public Boolean updateBroadcastJob(Long jobId) {
+ return SnailJobOpenApi.updateBroadcastJob(jobId)
+ .addArgsStr("update测试数据", new Random().nextInt(1000))
+ .execute();
+
+ }
+
+ /**
+ * 新增Sharding模式的任务
+ *
+ * @return 任务id
+ */
+ public Boolean updateShardingJob(Long jobId) {
+ return SnailJobOpenApi.updateShardingJob(jobId)
+ .addShardingArgs("update分片1", "update分片2", "update分片3")
+ .execute();
+
+ }
+
+ /**
+ * 新增MapReduce模式的任务
+ *
+ * @return 任务id
+ */
+ public Boolean updateMapJob(Long jobId) {
+ return SnailJobOpenApi.updateMapJob(jobId)
+ .addArgsStr("update测试数据", new Random().nextInt(1000))
+ .setParallelNum(3)
+ .execute();
+
+ }
+
+ /**
+ * 新增MapReduce模式的任务
+ *
+ * @return 任务id
+ */
+ public Boolean updateMapReduceJob(Long jobId) {
+ return SnailJobOpenApi.updateMapReduceJob(jobId)
+ .addArgsStr("update测试数据", new Random().nextInt(1000))
+ .execute();
+
+ }
+}
diff --git a/src/main/java/com/example/snailjob/handler/TestUpdateJobStatusHandler.java b/src/main/java/com/example/snailjob/handler/TestUpdateJobStatusHandler.java
new file mode 100644
index 0000000..8894e4f
--- /dev/null
+++ b/src/main/java/com/example/snailjob/handler/TestUpdateJobStatusHandler.java
@@ -0,0 +1,36 @@
+package com.example.snailjob.handler;
+
+import com.aizuda.snailjob.client.job.core.openapi.SnailJobOpenApi;
+import com.aizuda.snailjob.common.core.enums.StatusEnum;
+import org.springframework.stereotype.Component;
+
+@Component
+public class TestUpdateJobStatusHandler {
+
+ /**
+ * 更新定时任务状态
+ *
+ * @param jobId 定时任务ID
+ * @return
+ */
+ public Boolean updateJobStatus(Long jobId, Long status) {
+ return SnailJobOpenApi
+ .updateJobStatus(jobId)
+ .setStatus(StatusEnum.YES.getStatus().equals(status.intValue()) ? StatusEnum.YES : StatusEnum.NO)
+ .execute();
+ }
+
+ /**
+ * 更新工作流任务状态
+ *
+ * @param workFlowId 工作流ID
+ * @param status
+ * @return
+ */
+ public Boolean updateWorkFlowStatus(Long workFlowId, Long status) {
+ return SnailJobOpenApi
+ .updateWorkFlowStatus(workFlowId)
+ .setStatus(StatusEnum.YES.getStatus().equals(status.intValue()) ? StatusEnum.YES : StatusEnum.NO)
+ .execute();
+ }
+}