From c2bd914e791d0dcd82e9cbcbd4e35c2b54fc7f27 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Thu, 8 Feb 2024 13:35:03 +0300 Subject: [PATCH] =?UTF-8?q?backend-api=20scheduler-service=20meta=20GALB?= =?UTF-8?q?=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20=D0=BF=D0=B0=D0=B0=D1=80?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D1=80=20fromTime?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../queue/scheduler/LauncherController.java | 2 +- .../request/cud/schedule/LauncherNew.java | 20 +++++++++ .../src/main/resources/meta/meta.xml | 1 + .../balance/service/Sdf08Service.java | 10 +++-- .../balance/service/Sdf08ServiceTest.java | 42 +++++++++++++++++++ .../service/LauncherServiceTest.java | 2 + .../ru/spcex/clearing/test/TestUtils.java | 5 +++ .../cud/schedule/LauncherCommandRequest.java | 18 ++++++++ 8 files changed, 96 insertions(+), 4 deletions(-) diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/scheduler/LauncherController.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/scheduler/LauncherController.java index 0972526f5..7e4816486 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/scheduler/LauncherController.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/scheduler/LauncherController.java @@ -104,7 +104,7 @@ public class LauncherController extends AbstractQueueController { if (taskEnum == null) { throw new NotFound404Exception("task dictionary element with code '" + launcherNew.getTask() + "'"); } - if (!IEnumKey.contains(taskEnum.getCode(), Task.startOfClearing, Task.dbfExport_OUTV)) { + if (!IEnumKey.contains(taskEnum.getCode(), Task.startOfClearing, Task.dbfExport_OUTV, Task.getAllBalance)) { log.warn(String.format("Task %s not support request with body", taskEnum.getCode())); } // else В мете эти модели с дополнительными параметрами (OUTV). Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/schedule/LauncherNew.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/schedule/LauncherNew.java index bc687bb3a..6dbaf1b9f 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/schedule/LauncherNew.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/schedule/LauncherNew.java @@ -2,14 +2,19 @@ package ru.spcex.clearing.backendapi.controller.request.cud.schedule; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; 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.LauncherCommandRequest; +import ru.spcex.clearing.platform.messaging.domain.json.deserialize.LocalTimeDeserializer; +import ru.spcex.clearing.platform.messaging.domain.json.serialize.LocalTimeSerializer; import ru.spcex.platform.utils.enumeration.EnumMessage; import java.math.BigDecimal; +import java.time.LocalTime; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -64,6 +69,12 @@ public class LauncherNew implements IAction { @JsonProperty private Long debitLeg_accountId; + @ApiModelProperty(value = "Время", dataType = "java.lang.String", example = "16:30:00") + @JsonSerialize(using = LocalTimeSerializer.class) + @JsonDeserialize(using = LocalTimeDeserializer.class) + @JsonProperty + public LocalTime fromTime; + @Override public Object toRequest() { LauncherCommandRequest taskRunnerCommandRequest = new LauncherCommandRequest(); @@ -83,6 +94,7 @@ public class LauncherNew implements IAction { taskRunnerCommandRequest.setCreditLeg_accountId(creditLeg_accountId); taskRunnerCommandRequest.setAddresseeId(addresseeId); taskRunnerCommandRequest.setDebitLeg_accountId(debitLeg_accountId); + taskRunnerCommandRequest.setFromTime(fromTime); return taskRunnerCommandRequest; } @@ -227,4 +239,12 @@ public class LauncherNew implements IAction { public void setFullBalance(BigDecimal fullBalance) { this.fullBalance = fullBalance; } + + public LocalTime getFromTime() { + return fromTime; + } + + public void setFromTime(LocalTime fromTime) { + this.fromTime = fromTime; + } } diff --git a/clearing-parent/backend-api/src/main/resources/meta/meta.xml b/clearing-parent/backend-api/src/main/resources/meta/meta.xml index c228ceb52..e155dfbf7 100644 --- a/clearing-parent/backend-api/src/main/resources/meta/meta.xml +++ b/clearing-parent/backend-api/src/main/resources/meta/meta.xml @@ -1236,6 +1236,7 @@ + diff --git a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/Sdf08Service.java b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/Sdf08Service.java index 61b4baac9..a62a256c5 100644 --- a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/Sdf08Service.java +++ b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/Sdf08Service.java @@ -10,6 +10,7 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.balance.ExportToFileRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; import ru.spcex.platform.enumeration.Task; @@ -36,14 +37,17 @@ public class Sdf08Service extends QueueConsumer implements InitializingBean { @Override public void afterPropertiesSet() { - callback(Object.class) + callback(LauncherCommandRequest.class) .setConsumer(this::newSDf08) .forDestination(Task.getAllBalance.topic(), callbacks::put); init(); } - private void newSDf08(BaseRequest userRequest) { - log.debug("getAllBalance request received"); + private void newSDf08(BaseRequest userRequest) { + LauncherCommandRequest req = userRequest.getRequestPayload(); + log.debug("getAllBalance request received, parameter fromTime={}", + req == null ? null : req.getFromTime()); + // todo use опциональный параметр req.fromTime SDf08 sDf08 = new SDf08(); // sDf08.setNumber(idGenerator.nextId().toString()); Instant now = Instant.now(); diff --git a/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/Sdf08ServiceTest.java b/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/Sdf08ServiceTest.java index 26afe1433..80c7e2973 100644 --- a/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/Sdf08ServiceTest.java +++ b/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/Sdf08ServiceTest.java @@ -15,11 +15,14 @@ import ru.spcex.clearing.platform.messaging.domain.ActionType; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.balance.ExportToFileRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest; import ru.spcex.clearing.platform.messaging.service.RequestInfo; import ru.spcex.platform.enumeration.Task; import javax.annotation.PostConstruct; +import java.time.LocalTime; + import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.mockito.Mockito.timeout; @@ -80,4 +83,43 @@ class Sdf08ServiceTest extends AbstractServiceTest { assertNotNull(resultsSDf08); assertNotNull(resultRequestInfo); } + + + /** + * {@link Sdf08Service}
+ * Тест проверяет генерацию сущностей {@link RequestInfo}
+ * Входные параметры:
+ * {@link BaseRequest} - new BaseRequest<>() с полем fromTime
+ */ + @Test + void newSDf08_withTime() throws JsonProcessingException { + BaseRequest baseNewRequest = new BaseRequest<>(); + baseNewRequest.setId(currentId.getAndIncrement()); + baseNewRequest.setActionType(ActionType.NEW); + LauncherCommandRequest launcherCommandRequest = new LauncherCommandRequest(); + final LocalTime fromTime = LocalTime.of(12, 23); + launcherCommandRequest.setFromTime(fromTime); + baseNewRequest.setRequestPayload(launcherCommandRequest); + ObjectMapper objectMapper = new ObjectMapper(); + String jsonBaseNewRequest = objectMapper.writeValueAsString(baseNewRequest); + + + addRecordToKafka(mockConsumer, TOPIC, PARTITION, 0, jsonBaseNewRequest); + + //waiting for kafka producer send message (finale event) + verify(producer, timeout(30_000L).times(1)) + .send(producerRecord.capture()); + + assertEquals(Consts.EXPORT_PROCESS, producerRecord.getValue().topic()); + BaseRequest baseRequest = (BaseRequest) producerRecord.getValue().value(); + + ExportToFileRequest exportToFileRequest = (ExportToFileRequest) baseRequest.getRequestPayload(); + //todo test newSDf08_withTime assertEquals(fromTime, exportToFileRequest.getFromTime()); + SDf08 resultsSDf08 = sdf08Imdg.getFirstObjectBySQL(String.format("generationId = %s and id != null", exportToFileRequest.getSdfGroupId())); + RequestInfo resultRequestInfo = requestInfoImdg.getSingleObjectByID(baseRequest.getId()); + + assertNotNull(baseRequest); + assertNotNull(resultsSDf08); + assertNotNull(resultRequestInfo); + } } \ No newline at end of file diff --git a/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/service/LauncherServiceTest.java b/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/service/LauncherServiceTest.java index 49dca5ead..436ffd1e5 100644 --- a/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/service/LauncherServiceTest.java +++ b/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/service/LauncherServiceTest.java @@ -20,6 +20,7 @@ import ru.spcex.clearing.test.MatcherFactory; import javax.annotation.PostConstruct; import java.math.BigDecimal; +import java.time.LocalTime; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.timeout; @@ -80,6 +81,7 @@ class LauncherServiceTest extends AbstractServiceTest { launcherCommandRequest.setCreditLeg_accountId(123L); launcherCommandRequest.setAddresseeId(144L); launcherCommandRequest.setDebitLeg_accountId(145L); + launcherCommandRequest.setFromTime(LocalTime.of(12,23)); BaseRequest predictableBaseRequest = new BaseRequest<>(); predictableBaseRequest.setRequestPayload(launcherCommandRequest); diff --git a/clearing-parent/test-clearing/src/main/java/ru/spcex/clearing/test/TestUtils.java b/clearing-parent/test-clearing/src/main/java/ru/spcex/clearing/test/TestUtils.java index e903ef4d4..f27a0157f 100644 --- a/clearing-parent/test-clearing/src/main/java/ru/spcex/clearing/test/TestUtils.java +++ b/clearing-parent/test-clearing/src/main/java/ru/spcex/clearing/test/TestUtils.java @@ -2,6 +2,7 @@ package ru.spcex.clearing.test; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.MockConsumer; import org.apache.kafka.clients.producer.Producer; @@ -41,6 +42,10 @@ import static ru.spcex.clearing.test.config.KafkaTestConfig.getCaptor; public class TestUtils { public static final MatcherFactory.Matcher> BASE_REQUEST_MATCHER = usingIgnoringFieldsComparator(); private static final ObjectMapper objectMapper = new ObjectMapper(); + static { + // see JacksonObjectMapper: jackson-datatype-jsr310 + objectMapper.registerModule(new JavaTimeModule()); + } public static void waitingSendAndCheckRecord(Long id, Producer mockProducer, ArgumentCaptor producerRecord) { //waiting for kafka send message (finale event) diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/schedule/LauncherCommandRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/schedule/LauncherCommandRequest.java index 52b5b6442..abcff7aa8 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/schedule/LauncherCommandRequest.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/schedule/LauncherCommandRequest.java @@ -1,8 +1,13 @@ package ru.spcex.clearing.platform.messaging.domain.cud.schedule; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import ru.spcex.clearing.platform.messaging.domain.json.deserialize.LocalTimeDeserializer; +import ru.spcex.clearing.platform.messaging.domain.json.serialize.LocalTimeSerializer; import java.math.BigDecimal; +import java.time.LocalTime; public class LauncherCommandRequest { @@ -40,6 +45,11 @@ public class LauncherCommandRequest { @JsonProperty private Long debitLeg_accountId; + @JsonSerialize(using = LocalTimeSerializer.class) + @JsonDeserialize(using = LocalTimeDeserializer.class) + @JsonProperty + public LocalTime fromTime; + public Long getUserId() { return userId; } @@ -167,4 +177,12 @@ public class LauncherCommandRequest { public void setFullBalance(BigDecimal fullBalance) { this.fullBalance = fullBalance; } + + public LocalTime getFromTime() { + return fromTime; + } + + public void setFromTime(LocalTime fromTime) { + this.fromTime = fromTime; + } }