diff --git a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/quartz/controller/QuartzJobConfigurationController.java b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/quartz/controller/QuartzJobConfigurationController.java index 9905e4f2..7adfb4aa 100644 --- a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/quartz/controller/QuartzJobConfigurationController.java +++ b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/quartz/controller/QuartzJobConfigurationController.java @@ -42,12 +42,21 @@ public PageResponseBodyBean getPageList( @PostMapping("/quartz-job-configurations") @ApiOperation(value = "Create Quartz job configuration", notes = "Create Quartz job configuration") - public ResponseBodyBean create( - @Valid @RequestBody CreateQuartzJobConfigurationPayload payload + public ResponseBodyBean create( + @Valid @RequestBody CreateOrModifyQuartzJobConfigurationPayload payload ) { return ResponseBodyBean.ofSuccess(this.service.create(payload)); } + @PutMapping("/quartz-job-configurations/{id}") + @ApiOperation(value = "Modify Quartz job configuration", notes = "Modify Quartz job configuration") + public ResponseBodyBean modify( + @PathVariable Long id, + @Valid @RequestBody CreateOrModifyQuartzJobConfigurationPayload payload + ) { + return ResponseBodyBean.ofSuccess(this.service.modify(id, payload)); + } + @Override protected void onExceptionOccurred() { log.error("Exception occurred when uploading excel. Excel class: {}", QuartzJobConfigurationExcel.class); diff --git a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/quartz/entity/CreateQuartzJobConfigurationPayload.java b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/quartz/entity/CreateOrModifyQuartzJobConfigurationPayload.java similarity index 57% rename from spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/quartz/entity/CreateQuartzJobConfigurationPayload.java rename to spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/quartz/entity/CreateOrModifyQuartzJobConfigurationPayload.java index f94120be..5de4d93d 100644 --- a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/quartz/entity/CreateQuartzJobConfigurationPayload.java +++ b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/quartz/entity/CreateOrModifyQuartzJobConfigurationPayload.java @@ -9,14 +9,14 @@ import javax.validation.constraints.NotNull; /** - *

CreateQuartzJobConfigurationPayload

+ *

CreateOrModifyQuartzJobConfigurationPayload

*

* Change description here. * - * @author Johnny Miller (鍾俊), email: johnnysviva@outlook.com, 10/1/21 10:29 PM + * @author Johnny Miller (鍾俊), email: johnnysviva@outlook.com, 10/1/21 11:43 PM **/ @Data -public class CreateQuartzJobConfigurationPayload { +public class CreateOrModifyQuartzJobConfigurationPayload { @NotBlank @Length(max = 50) private String name; @@ -40,15 +40,15 @@ public class CreateQuartzJobConfigurationPayload { private Byte status; public QuartzJobConfiguration asQuartzJobConfiguration() { - val quartzJobConfiguration = new QuartzJobConfiguration(); - quartzJobConfiguration.setName(this.name); - quartzJobConfiguration.setGroup(this.group); - quartzJobConfiguration.setInvokeTarget(this.invokeTarget); - quartzJobConfiguration.setCronExpression(this.cronExpression); - quartzJobConfiguration.setMisfirePolicy(this.misfirePolicy); - quartzJobConfiguration.setConcurrent(this.concurrent); - quartzJobConfiguration.setDescription(this.description); - quartzJobConfiguration.setStatus(this.status); - return quartzJobConfiguration; + val result = new QuartzJobConfiguration(); + result.setName(this.name); + result.setGroup(this.group); + result.setInvokeTarget(this.invokeTarget); + result.setCronExpression(this.cronExpression); + result.setMisfirePolicy(this.misfirePolicy); + result.setConcurrent(this.concurrent); + result.setDescription(this.description); + result.setStatus(this.status); + return result; } } diff --git a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/quartz/entity/CreateQuartzJobConfigurationResponse.java b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/quartz/entity/CreateOrModifyQuartzJobConfigurationResponse.java similarity index 66% rename from spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/quartz/entity/CreateQuartzJobConfigurationResponse.java rename to spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/quartz/entity/CreateOrModifyQuartzJobConfigurationResponse.java index 6be3460d..dcb7483f 100644 --- a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/quartz/entity/CreateQuartzJobConfigurationResponse.java +++ b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/quartz/entity/CreateOrModifyQuartzJobConfigurationResponse.java @@ -4,14 +4,14 @@ import lombok.Data; /** - *

CreateQuartzJobConfigurationResponse

+ *

CreateOrModifyQuartzJobConfigurationResponse

*

* Change description here. * - * @author Johnny Miller (鍾俊), email: johnnysviva@outlook.com, 10/1/21 10:29 PM + * @author Johnny Miller (鍾俊), email: johnnysviva@outlook.com, 10/1/21 11:43 PM **/ @Data @AllArgsConstructor -public class CreateQuartzJobConfigurationResponse { +public class CreateOrModifyQuartzJobConfigurationResponse { private Long id; } diff --git a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/quartz/service/QuartzJobConfigurationService.java b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/quartz/service/QuartzJobConfigurationService.java index 7041097c..44754bba 100644 --- a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/quartz/service/QuartzJobConfigurationService.java +++ b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/quartz/service/QuartzJobConfigurationService.java @@ -15,7 +15,7 @@ * Description: QuartzJobConfigurationService * * @author Johnny Miller (锺俊), email: johnnysviva@outlook.com, date: 9/23/2021 8:23 AM - */ + **/ @Validated public interface QuartzJobConfigurationService extends IService { String TEMPLATE_EXCEL = "quartz-job-configuration-stat.xlsx"; @@ -60,5 +60,15 @@ void validateBeforeAddToBeanList(List beanList, Qua * @param payload the payload * @return the create quartz job configuration response */ - CreateQuartzJobConfigurationResponse create(@Valid @NotNull CreateQuartzJobConfigurationPayload payload); + CreateOrModifyQuartzJobConfigurationResponse create(@Valid @NotNull CreateOrModifyQuartzJobConfigurationPayload payload); + + /** + * Modify modify quartz job configuration response. + * + * @param id the id + * @param payload the payload + * @return the modify quartz job configuration response + */ + CreateOrModifyQuartzJobConfigurationResponse modify(@NotNull Long id, + @Valid @NotNull CreateOrModifyQuartzJobConfigurationPayload payload); } diff --git a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/quartz/service/impl/QuartzJobConfigurationServiceImpl.java b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/quartz/service/impl/QuartzJobConfigurationServiceImpl.java index 84317e15..d9137e89 100644 --- a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/quartz/service/impl/QuartzJobConfigurationServiceImpl.java +++ b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/quartz/service/impl/QuartzJobConfigurationServiceImpl.java @@ -112,16 +112,35 @@ public List getListForExporting() { @Override @SneakyThrows - public CreateQuartzJobConfigurationResponse create(@Valid @NotNull CreateQuartzJobConfigurationPayload payload) { + public CreateOrModifyQuartzJobConfigurationResponse create( + @Valid @NotNull CreateOrModifyQuartzJobConfigurationPayload payload + ) { + this.validateCronExpression(payload.getCronExpression()); val quartzJobConfiguration = payload.asQuartzJobConfiguration(); - val cronExpression = quartzJobConfiguration.getCronExpression(); + quartzJobConfiguration.setServiceName(this.mafProjectProperty.getProjectArtifactId()); + requireTrue(this.save(quartzJobConfiguration), saved -> log.info("Quartz job configuration saved: {}", saved)) + .orElseThrow(() -> new IllegalStateException("Failed to save quartz job configuration")); + return new CreateOrModifyQuartzJobConfigurationResponse(quartzJobConfiguration.getId()); + } + + private void validateCronExpression(String cronExpression) throws Throwable { requireTrue( CronUtil.isValid(cronExpression), valid -> log.warn("Cron validation: {}, expression: {}", valid, cronExpression) ).orElseThrow(() -> new IllegalArgumentException(format("Cron({}) invalid", cronExpression))); - quartzJobConfiguration.setServiceName(this.mafProjectProperty.getProjectArtifactId()); - requireTrue(this.save(quartzJobConfiguration), saved -> log.info("Quartz job configuration saved: {}", saved)) - .orElseThrow(() -> new IllegalStateException("Failed to save quartz job configuration")); - return new CreateQuartzJobConfigurationResponse(quartzJobConfiguration.getId()); + } + + @Override + @SneakyThrows + public CreateOrModifyQuartzJobConfigurationResponse modify(@NotNull Long id, + @Valid @NotNull CreateOrModifyQuartzJobConfigurationPayload payload) { + this.validateCronExpression(payload.getCronExpression()); + val quartzJobConfiguration = payload.asQuartzJobConfiguration(); + quartzJobConfiguration.setId(id); + requireTrue( + this.updateById(quartzJobConfiguration), + updated -> log.warn("Quartz job configuration updated: {}", updated) + ).orElseThrow(() -> new IllegalStateException("Failed to update quartz job configuration")); + return new CreateOrModifyQuartzJobConfigurationResponse(id); } }