From d5c61235757fcff6d890c691cd720e514fa686f3 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Wed, 31 May 2023 11:31:43 +0300 Subject: [PATCH] =?UTF-8?q?scheduler-service=20dbf-exporter=20http://jira.?= =?UTF-8?q?mfd.msk:8088/browse/CLS-268=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC?= =?UTF-8?q?=D0=B5=D1=82=D1=80=D1=8B=20=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA?= =?UTF-8?q?=D0=B0,=20=D0=B2=D0=B0=D0=BB=D0=B8=D0=B4=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D1=8F.=20Task.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dbf/exporter/services/CommandService.java | 15 +++++++ .../ClearingCalendarValidationConfig.java | 5 ++- .../PlannerTemplateValidationConfig.java | 17 ++++--- .../validation/PlannerValidationConfig.java | 5 ++- .../rules/common/DateAfterTodayRule.java | 45 +++++++++++++++++++ .../rules/common/TimeNotBeforeRule.java | 33 +++++++++++--- .../ru/spcex/platform/enumeration/Task.java | 8 ++++ 7 files changed, 108 insertions(+), 20 deletions(-) create mode 100644 clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/validation/rules/common/DateAfterTodayRule.java diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/CommandService.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/CommandService.java index be0261798..dbd77268d 100644 --- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/CommandService.java +++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/CommandService.java @@ -12,7 +12,9 @@ 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.clearing.SdfClearingRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; +import ru.spcex.platform.enumeration.Task; import ru.spcex.platform.imdg.api.ImdgProvider; import java.util.Arrays; @@ -62,6 +64,11 @@ public class CommandService extends QueueConsumer implements InitializingBean { callback(SdfClearingRequest.class) .setConsumer(r -> processSpecial(Table.S_DF56, r)) .forDestination(Consts.SDF56_PROCESS, callbacks::put); + + callback(LauncherCommandRequest.class) + .setConsumer(r -> processByLauncher(Table.S_DF54, r)) + .forDestination(Task.dbfExport_OUTV.topic(), callbacks::put); + init(); } @@ -83,4 +90,12 @@ public class CommandService extends QueueConsumer implements InitializingBean { resultContainer.setGroupId(request.getGroupId()); processor.process(resultContainer); } + + private void processByLauncher(Table table, BaseRequest systemRequest) { + LauncherCommandRequest request = systemRequest.getRequestPayload(); + log.info("RequestId={}, LauncherCommandRequest task={}. Table {}", systemRequest.getId(), request.getTaskName(), table); + ResultContainer resultContainer = ResultContainer.createNewTask(table); + resultContainer.setGroupId(null); + processor.process(resultContainer); + } } diff --git a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/config/validation/ClearingCalendarValidationConfig.java b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/config/validation/ClearingCalendarValidationConfig.java index 237040622..332f09536 100644 --- a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/config/validation/ClearingCalendarValidationConfig.java +++ b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/config/validation/ClearingCalendarValidationConfig.java @@ -10,6 +10,7 @@ import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteReques import ru.spcex.clearing.platform.messaging.domain.cud.schedule.ClearingCalendarNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.schedule.ClearingCalendarUpdateRequest; import ru.spcex.clearing.scheduler.error.ValidationError; +import ru.spcex.clearing.scheduler.validation.rules.common.DateAfterTodayRule; import ru.spcex.clearing.scheduler.validation.rules.common.DateNotBeforeRule; import ru.spcex.clearing.scheduler.validation.rules.common.DictionaryPresentRule; import ru.spcex.clearing.scheduler.validation.rules.common.IdPresentRule; @@ -36,7 +37,7 @@ public class ClearingCalendarValidationConfig { addImdg.accept(IMDGDistributedNames.Map_Company); addImdg.accept(IMDGDistributedNames.Map_DayStatusDictionary); return new ValidatorImpl<>(context, - DateNotBeforeRule.instance("clearingDate", + DateAfterTodayRule.instance("clearingDate", ClearingCalendarNewRequest::getClearingDate), IdPresentRule.instance("companyId", ClearingCalendarNewRequest::getCompanyId, @@ -68,7 +69,7 @@ public class ClearingCalendarValidationConfig { IMDGDistributedNames.Map_ClearingCalendar, ClearingCalendar.class, ValidationError.RecordNotFound), - DateNotBeforeRule.instance("clearingDate", + DateNotBeforeRule.instance("clearingDate",//todo при редактировании DateAfterTodayRule или DateNotBeforeRule? ClearingCalendarUpdateRequest::getClearingDate), IdPresentRule.instance("companyId", ClearingCalendarUpdateRequest::getCompanyId, diff --git a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/config/validation/PlannerTemplateValidationConfig.java b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/config/validation/PlannerTemplateValidationConfig.java index a9098679c..75f864dc1 100644 --- a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/config/validation/PlannerTemplateValidationConfig.java +++ b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/config/validation/PlannerTemplateValidationConfig.java @@ -16,7 +16,6 @@ import ru.spcex.clearing.scheduler.error.ValidationError; import ru.spcex.clearing.scheduler.validation.rules.common.DictionaryPresentRule; import ru.spcex.clearing.scheduler.validation.rules.common.EnumPresentRule; import ru.spcex.clearing.scheduler.validation.rules.common.IdPresentRule; -import ru.spcex.clearing.scheduler.validation.rules.common.TimeNotBeforeRule; import ru.spcex.platform.classes.base.SpcexObjectBase; import ru.spcex.platform.enumeration.Section; import ru.spcex.platform.enumeration.WorkflowStatus; @@ -48,10 +47,10 @@ public class PlannerTemplateValidationConfig { PlannerTemplateNewRequest::getTask, IMDGDistributedNames.Map_TaskDictionary, TaskDictionary.class), - TimeNotBeforeRule.instance("taskTime", - PlannerTemplateNewRequest::getTaskTime, - true, - false), +// TimeNotBeforeRule.instance("taskTime", +// PlannerTemplateNewRequest::getTaskTime, +// true, +// false), DictionaryPresentRule.instance("taskStatus", PlannerTemplateNewRequest::getTaskStatus, IMDGDistributedNames.Map_TaskStatusDictionary, @@ -106,10 +105,10 @@ public class PlannerTemplateValidationConfig { IMDGDistributedNames.Map_TaskDictionary, TaskDictionary.class, false), - TimeNotBeforeRule.instance("taskTime", - PlannerTemplateUpdateRequest::getTaskTime, - false, - false), +// TimeNotBeforeRule.instance("taskTime", +// PlannerTemplateUpdateRequest::getTaskTime, +// false, +// false), DictionaryPresentRule.instance("taskStatus", PlannerTemplateUpdateRequest::getTaskStatus, IMDGDistributedNames.Map_TaskStatusDictionary, diff --git a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/config/validation/PlannerValidationConfig.java b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/config/validation/PlannerValidationConfig.java index 2a0a07868..bb3def7b6 100644 --- a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/config/validation/PlannerValidationConfig.java +++ b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/config/validation/PlannerValidationConfig.java @@ -50,7 +50,8 @@ public class PlannerValidationConfig { PlannerNewRequest::getClearingDate), TimeNotBeforeRule.instance("taskTime", PlannerNewRequest::getTaskTime, - LocalDate.now().equals(plannerNewRequest.getClearingDate())), + true, + PlannerNewRequest::getClearingDate), EnumPresentRule.instance("section", PlannerNewRequest::getSection, Section.values(), @@ -108,7 +109,7 @@ public class PlannerValidationConfig { TimeNotBeforeRule.instance("taskTime", PlannerUpdateRequest::getTaskTime, false, - LocalDate.now().equals(plannerUpdateRequest.getClearingDate())), + PlannerUpdateRequest::getClearingDate), DateNotBeforeRule.instance("clearingDate", PlannerUpdateRequest::getClearingDate, false), diff --git a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/validation/rules/common/DateAfterTodayRule.java b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/validation/rules/common/DateAfterTodayRule.java new file mode 100644 index 000000000..804131d46 --- /dev/null +++ b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/validation/rules/common/DateAfterTodayRule.java @@ -0,0 +1,45 @@ +package ru.spcex.clearing.scheduler.validation.rules.common; + +import ru.spcex.clearing.scheduler.error.ValidationError; +import ru.spcex.platform.imdg.validation.ImdgValidationContext; +import ru.spcex.platform.utils.enumeration.EnumMessage; +import ru.spcex.platform.utils.validation.IValidationRule; + +import java.time.LocalDate; +import java.util.Optional; +import java.util.function.Function; + +/** + * Проверка поля с LocalDate. Условие проверки: поверяемая дата > текущая дата + * @param Класс проверяемого объекта + */ +public record DateAfterTodayRule(String fieldName, Function getter, boolean required) implements IValidationRule> { + + /** + * @param fieldName Название поля класса, используется для передачи ошибки + * @param getter Метод получения проверяемой даты + * @param required Флаг обязательности поля + * @param Класс проверяемого объекта + */ + public static DateAfterTodayRule instance(String fieldName, Function getter, boolean required) { + return new DateAfterTodayRule<>(fieldName, getter, required); + } + + /** + * @param fieldName Название поля класса, используется для передачи ошибки + * @param getter Метод получения проверяемой даты + * @param Класс проверяемого объекта + */ + public static DateAfterTodayRule instance(String fieldName, Function getter) { + return new DateAfterTodayRule<>(fieldName, getter, true); + } + + @Override + public Optional validate(ImdgValidationContext context) { + R validatedObject = context.getValidatedObject(); + LocalDate date = getter.apply(validatedObject); + if (date == null) return required ? of(ValidationError.EmptyRequiredValue, fieldName) : Optional.empty(); + if (!LocalDate.now().isBefore(date)) return of(ValidationError.TaskForPastDate, fieldName); + return Optional.empty(); + } +} diff --git a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/validation/rules/common/TimeNotBeforeRule.java b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/validation/rules/common/TimeNotBeforeRule.java index acdc2df60..59144522f 100644 --- a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/validation/rules/common/TimeNotBeforeRule.java +++ b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/validation/rules/common/TimeNotBeforeRule.java @@ -5,6 +5,7 @@ import ru.spcex.platform.imdg.validation.ImdgValidationContext; import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.validation.IValidationRule; +import java.time.LocalDate; import java.time.LocalTime; import java.util.Optional; import java.util.function.Function; @@ -17,7 +18,8 @@ import java.util.function.Function; public record TimeNotBeforeRule(String fieldName, Function getter, boolean required, - boolean isToday) implements IValidationRule> { + boolean isToday, + Function getterForDate) implements IValidationRule> { /** * @param fieldName Название поля класса, используется для передачи ошибки @@ -27,9 +29,21 @@ public record TimeNotBeforeRule(String fieldName, * @param isToday Флаг что дата сегодняшняя */ public static TimeNotBeforeRule instance(String fieldName, Function getter, boolean required, boolean isToday) { - return new TimeNotBeforeRule<>(fieldName, getter, required, isToday); + return new TimeNotBeforeRule<>(fieldName, getter, required, isToday, null); } + /** + * + * @param fieldName + * @param getter + * @param required + * @param getterForDate аналог isToday + * @param + * @return + */ + public static TimeNotBeforeRule instance(String fieldName, Function getter, boolean required, Function getterForDate) { + return new TimeNotBeforeRule<>(fieldName, getter, required, true, getterForDate); + } /** * @param fieldName Название поля класса, используется для передачи ошибки * @param getter Метод получения проверяемого времени @@ -37,7 +51,7 @@ public record TimeNotBeforeRule(String fieldName, * @param Класс проверяемого объекта */ public static TimeNotBeforeRule instance(String fieldName, Function getter, boolean required) { - return new TimeNotBeforeRule<>(fieldName, getter, required, true); + return new TimeNotBeforeRule<>(fieldName, getter, required, true, null); } /** @@ -46,15 +60,20 @@ public record TimeNotBeforeRule(String fieldName, * @param Класс проверяемого объекта */ public static TimeNotBeforeRule instance(String fieldName, Function getter) { - return new TimeNotBeforeRule<>(fieldName, getter, true, true); + return new TimeNotBeforeRule<>(fieldName, getter, true,true, null); } @Override public Optional validate(ImdgValidationContext context) { R validatedObject = context.getValidatedObject(); - LocalTime date = getter.apply(validatedObject); - if (date == null) return required ? of(ValidationError.EmptyRequiredValue, fieldName) : Optional.empty(); - if (date.isBefore(LocalTime.now())) + LocalTime time = getter.apply(validatedObject); + if (time == null) return required ? of(ValidationError.EmptyRequiredValue, fieldName) : Optional.empty(); + if (getterForDate != null) { + LocalDate atDate = getterForDate.apply(validatedObject); + if (atDate != null && atDate.isAfter(LocalDate.now())) + return empty(); + } + if (time.isBefore(LocalTime.now())) return isToday ? of(ValidationError.TaskForPastTime, fieldName) : Optional.empty(); return Optional.empty(); } diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Task.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Task.java index 495661e89..0f29dfb9f 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Task.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Task.java @@ -36,10 +36,18 @@ public enum Task implements IEnumKey { createRegistry_GCMR("GCMR"), // Формирование реестра участников клиринга createRegistry_GSRR("GSRR"), // Формирование реестра отправленных отчетов createRegistry_GACA("GACA"), // Создание файла остатков CSV по клиринговым счетам + createRegistry_ADLR("ADLR"), // формирование admittedLiabilitiesRegister + createRegistry_CDLR("CDLR"), // формирование coveredLiabilitiesRegister + createRegistry_EXLR("EXLR"), // формирование excludeLiabilitiesRegister + createRegistry_LBSR("LBSR"), // формирование liabilitiesRegister + createRegistry_ECNR("ECNR"), // формирование executionRegister + createRegistry_STRS("STRS"), // Начало торговой сессии + createRegistry_ETRS("ETRS"), // Завершение торговой сессии forming_CMBA("CMBA"), // Формирование распоряжения на перевод с ТБС creatingFile_GAIA("GAIA"), // Создание файла остатков CSV по внутренним информацион.счетам loadParty_LOCM("LOCM"), // Загрузка участников loadIssue_LOSC("LOSC"), // Загрузка инструментов + dbfExport_OUTV("OUTV"), // для dbf-exporter сообщение на создание файла ДФ-54 ; private final String key;