From f2b28d0e3c5a74ab0c26117cffd99f94667e22a8 Mon Sep 17 00:00:00 2001 From: ialbert Date: Fri, 28 Oct 2022 09:47:14 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-70 http://jira.mfd.msk:8088/browse/CLS-101 --- .../queue/scheduler/TaskRunnerController.java | 41 ++++++++++++- .../request/cud/schedule/TaskRunnerNew.java | 60 +++++++++++++++++++ .../platform/messaging/domain/Consts.java | 1 + 3 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/schedule/TaskRunnerNew.java diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/scheduler/TaskRunnerController.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/scheduler/TaskRunnerController.java index a57d0d4f8..d90d3b877 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/scheduler/TaskRunnerController.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/scheduler/TaskRunnerController.java @@ -1,28 +1,48 @@ package ru.spcex.clearing.backendapi.controller.queue.scheduler; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import ru.clearing.classes.statics.data.scheduler.TaskRunner; +import ru.clearing.classes.statics.data.user.User; +import ru.spcex.clearing.backendapi.controller.queue.AbstractQueueController; +import ru.spcex.clearing.backendapi.controller.request.cud.schedule.TaskRunnerNew; +import ru.spcex.clearing.backendapi.controller.response.BasicSpcexResponse; +import ru.spcex.clearing.backendapi.controller.response.cud.CudResponse; import ru.spcex.clearing.backendapi.controller.response.entity.schedule.TaskRunnerBackendGetAll; +import ru.spcex.clearing.backendapi.security.KeycloakUtils; +import ru.spcex.clearing.backendapi.service.IOperator; import ru.spcex.clearing.backendapi.service.IStateLoader; import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; import java.util.Collection; +import java.util.Map; +import java.util.concurrent.ExecutionException; @Controller @RequestMapping("/schedule/task-runners") -public class TaskRunnerController { +public class TaskRunnerController extends AbstractQueueController { private final IStateLoader stateLoader; + private final Imdg userImdg; @Autowired - public TaskRunnerController(IStateLoader stateLoader) { + public TaskRunnerController(IStateLoader stateLoader, IOperator operator, ImdgProvider imdgProvider) { + super(operator); this.stateLoader = stateLoader; + this.userImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_User, User.class); } @ApiOperation(value = "get all TaskRunners.") @@ -35,4 +55,21 @@ public class TaskRunnerController { response.fromEntity(all); return response; } + + @ApiOperation(value = "create task runner.") + @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CudResponse.class), @ApiResponse(code = 400, message = "Ошибка валидации", response = BasicSpcexResponse.class)}) + @RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public CudResponse add( + @ApiParam(value = "Параметры команды в JSON формате.", required = true) + @RequestBody TaskRunnerNew taskRunnerCommand) throws ExecutionException, InterruptedException { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + String username = KeycloakUtils.getUserNameFromAuthentication(authentication); + User user = userImdg.getSingleObjectByFieldValues(Map.of("identifier", username)); + if (user == null) { + throw new IllegalStateException("cannot obtain userId from logged in user " + username); + } + taskRunnerCommand.setUserId(user.getId()); + return processRequest(Consts.TASK_RUNNER_NEW, taskRunnerCommand); + } } diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/schedule/TaskRunnerNew.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/schedule/TaskRunnerNew.java new file mode 100644 index 000000000..95f348e31 --- /dev/null +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/schedule/TaskRunnerNew.java @@ -0,0 +1,60 @@ +package ru.spcex.clearing.backendapi.controller.request.cud.schedule; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModelProperty; +import ru.spcex.clearing.backendapi.domain.actions.IAction; +import ru.spcex.clearing.backendapi.errors.BackEndError; +import ru.spcex.clearing.platform.messaging.domain.ActionType; +import ru.spcex.clearing.platform.messaging.domain.cud.schedule.TaskRunnerCommandRequest; +import ru.spcex.platform.utils.enumeration.EnumMessage; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +public class TaskRunnerNew implements IAction { + @ApiModelProperty(value = "Идентификатор единоличного исполнительного органа", example = "ABCD") + @JsonProperty + private String task; + + @JsonIgnore + private Long userId; + + @Override + public TaskRunnerCommandRequest toRequest() { + TaskRunnerCommandRequest taskRunnerCommandRequest = new TaskRunnerCommandRequest(); + taskRunnerCommandRequest.setTaskName(task); + taskRunnerCommandRequest.setUserId(userId); + return taskRunnerCommandRequest; + } + + @Override + public ActionType getActionType() { + return ActionType.NEW; + } + + @Override + public Collection validate() { + if (task == null || !Arrays.asList("addBalance", "getBalanceDiff").contains(task)) { + return List.of(new EnumMessage(BackEndError.ValidationError,"task")); + } + return IAction.super.validate(); + } + + public String getTask() { + return task; + } + + public void setTask(String task) { + this.task = task; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } +} diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java index c1998ac7f..fab1a1636 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java @@ -33,6 +33,7 @@ public interface Consts { String EXPORT_PROCESS = "export-process"; String ACCOUNT_NEW = "account-new"; String BALANCE_ACCOUNT_NEW = "balance-account-new"; + String TASK_RUNNER_NEW = "task-runner-new"; String REQUEST_INFO_UPDATE = "request-info-update";