From 0c424b52df132f7486136e796b1fe67421e1f6fa Mon Sep 17 00:00:00 2001 From: Echo009 Date: Thu, 4 Mar 2021 14:05:50 +0800 Subject: [PATCH] feat: copy job API --- .../powerjob/common/OpenAPIConstant.java | 1 + .../powerjob/server/service/JobService.java | 31 +++++++++++++++++-- .../server/web/controller/JobController.java | 10 ++++-- .../web/controller/OpenAPIController.java | 18 ++++++++--- 4 files changed, 51 insertions(+), 9 deletions(-) diff --git a/powerjob-common/src/main/java/com/github/kfcfans/powerjob/common/OpenAPIConstant.java b/powerjob-common/src/main/java/com/github/kfcfans/powerjob/common/OpenAPIConstant.java index 7a491eec..45e17437 100644 --- a/powerjob-common/src/main/java/com/github/kfcfans/powerjob/common/OpenAPIConstant.java +++ b/powerjob-common/src/main/java/com/github/kfcfans/powerjob/common/OpenAPIConstant.java @@ -19,6 +19,7 @@ public class OpenAPIConstant { /* ************* JOB 区 ************* */ public static final String SAVE_JOB = "/saveJob"; + public static final String COPY_JOB = "/copyJob"; public static final String FETCH_JOB = "/fetchJob"; public static final String FETCH_ALL_JOB = "/fetchAllJob"; public static final String QUERY_JOB = "/queryJob"; diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/JobService.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/JobService.java index 7618200c..54303528 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/JobService.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/JobService.java @@ -57,7 +57,7 @@ public class JobService { * * @param request 任务请求 * @return 创建的任务ID(jobId) - * @throws ParseException 异常 + * @exception ParseException 异常 */ public Long saveJob(SaveJobInfoRequest request) throws ParseException { @@ -96,6 +96,31 @@ public class JobService { return res.getId(); } + /** + * 复制任务 + * @param jobId 目标任务ID + * @return 复制后的任务 ID + */ + public JobInfoDO copyJob(Long jobId) { + + JobInfoDO origin = jobInfoRepository.findById(jobId).orElseThrow(() -> new IllegalArgumentException("can't find job by jobId: " + jobId)); + JobInfoDO copyJob = new JobInfoDO(); + // 值拷贝 + BeanUtils.copyProperties(origin, copyJob); + // 填充默认值,理论上应该不需要 + fillDefaultValue(copyJob); + // 修正创建时间以及更新时间 + copyJob.setId(null); + copyJob.setJobName(copyJob.getJobName()+"_COPY"); + copyJob.setGmtCreate(new Date()); + copyJob.setGmtModified(new Date()); + + copyJob = jobInfoRepository.saveAndFlush(copyJob); + return copyJob; + + } + + public JobInfoDTO fetchJob(Long jobId) { return convert(jobInfoRepository.findById(jobId).orElseThrow(() -> new IllegalArgumentException("can't find job by jobId: " + jobId))); } @@ -156,7 +181,7 @@ public class JobService { * 启用某个任务 * * @param jobId 任务ID - * @throws ParseException 异常(CRON表达式错误) + * @exception ParseException 异常(CRON表达式错误) */ public void enableJob(Long jobId) throws ParseException { JobInfoDO jobInfoDO = jobInfoRepository.findById(jobId).orElseThrow(() -> new IllegalArgumentException("can't find job by jobId:" + jobId)); @@ -197,7 +222,7 @@ public class JobService { executeLogs.forEach(instance -> { try { // 重复查询了数据库,不过问题不大,这个调用量很小 - instanceService.stopInstance(instance.getAppId(),instance.getInstanceId()); + instanceService.stopInstance(instance.getAppId(), instance.getInstanceId()); } catch (Exception ignore) { // ignore exception } diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/JobController.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/JobController.java index 6925d315..dc2e022b 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/JobController.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/JobController.java @@ -44,8 +44,14 @@ public class JobController { return ResultDTO.success(null); } + @PostMapping("/copy") + public ResultDTO copyJob(String jobId) { + return ResultDTO.success(JobInfoVO.from(jobService.copyJob(Long.valueOf(jobId)))); + } + + @GetMapping("/disable") - public ResultDTO disableJob(String jobId) throws Exception { + public ResultDTO disableJob(String jobId) { jobService.disableJob(Long.valueOf(jobId)); return ResultDTO.success(null); } @@ -86,7 +92,7 @@ public class JobController { result.setTotalItems(1); result.setTotalPages(1); result.setData(Lists.newArrayList(JobInfoVO.from(jobInfoOpt.get()))); - }else { + } else { result.setTotalPages(0); result.setTotalItems(0); result.setData(Lists.newLinkedList()); diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/OpenAPIController.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/OpenAPIController.java index 7bbd2244..979383c6 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/OpenAPIController.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/OpenAPIController.java @@ -17,6 +17,7 @@ import com.github.kfcfans.powerjob.common.response.*; import com.github.kfcfans.powerjob.common.request.http.AddWorkflowNodeRequest; import com.github.kfcfans.powerjob.common.request.http.ModifyWorkflowNodeRequest; import com.github.kfcfans.powerjob.common.request.http.SaveWorkflowDAGRequest; +import com.github.kfcfans.powerjob.server.web.response.JobInfoVO; import com.github.kfcfans.powerjob.server.web.response.WorkflowInfoVO; import org.springframework.web.bind.annotation.*; @@ -64,6 +65,11 @@ public class OpenAPIController { return ResultDTO.success(jobService.saveJob(request)); } + @PostMapping(OpenAPIConstant.COPY_JOB) + public ResultDTO copyJob(Long jobId) { + return ResultDTO.success(JobInfoVO.from(jobService.copyJob(jobId))); + } + @PostMapping(OpenAPIConstant.FETCH_JOB) public ResultDTO fetchJob(Long jobId, Long appId) { checkJobIdValid(jobId, appId); @@ -86,12 +92,14 @@ public class OpenAPIController { jobService.deleteJob(jobId); return ResultDTO.success(null); } + @PostMapping(OpenAPIConstant.DISABLE_JOB) public ResultDTO disableJob(Long jobId, Long appId) { checkJobIdValid(jobId, appId); jobService.disableJob(jobId); return ResultDTO.success(null); } + @PostMapping(OpenAPIConstant.ENABLE_JOB) public ResultDTO enableJob(Long jobId, Long appId) throws ParseException { checkJobIdValid(jobId, appId); @@ -110,7 +118,7 @@ public class OpenAPIController { @PostMapping(OpenAPIConstant.STOP_INSTANCE) public ResultDTO stopInstance(Long instanceId, Long appId) { checkInstanceIdValid(instanceId, appId); - instanceService.stopInstance(appId,instanceId); + instanceService.stopInstance(appId, instanceId); return ResultDTO.success(null); } @@ -153,7 +161,7 @@ public class OpenAPIController { @PostMapping(OpenAPIConstant.COPY_WORKFLOW) public ResultDTO copy(Long workflowId, Long appId) { - return ResultDTO.success(workflowService.copyWorkflow(workflowId,appId)); + return ResultDTO.success(workflowService.copyWorkflow(workflowId, appId)); } @@ -167,11 +175,13 @@ public class OpenAPIController { workflowService.deleteWorkflow(workflowId, appId); return ResultDTO.success(null); } + @PostMapping(OpenAPIConstant.DISABLE_WORKFLOW) public ResultDTO disableWorkflow(Long workflowId, Long appId) { workflowService.disableWorkflow(workflowId, appId); return ResultDTO.success(null); } + @PostMapping(OpenAPIConstant.ENABLE_WORKFLOW) public ResultDTO enableWorkflow(Long workflowId, Long appId) { workflowService.enableWorkflow(workflowId, appId); @@ -215,8 +225,8 @@ public class OpenAPIController { } @PostMapping(OpenAPIConstant.MARK_WORKFLOW_NODE_AS_SUCCESS) - public ResultDTO markWorkflowNodeAsSuccess(Long wfInstanceId,Long nodeId, Long appId) { - workflowInstanceService.markNodeAsSuccess(appId,wfInstanceId,nodeId); + public ResultDTO markWorkflowNodeAsSuccess(Long wfInstanceId, Long nodeId, Long appId) { + workflowInstanceService.markNodeAsSuccess(appId, wfInstanceId, nodeId); return ResultDTO.success(null); }