scheduler-service dbf-exporter http://jira.mfd.msk:8088/browse/CLS-268 параметры запуска, валидация. Task.java
This commit is contained in:
parent
eebfd0b16a
commit
d5c6123575
7 changed files with 108 additions and 20 deletions
|
|
@ -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.Consts;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.balance.ExportToFileRequest;
|
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.clearing.SdfClearingRequest;
|
||||||
|
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.QueueConsumer;
|
||||||
|
import ru.spcex.platform.enumeration.Task;
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
@ -62,6 +64,11 @@ public class CommandService extends QueueConsumer implements InitializingBean {
|
||||||
callback(SdfClearingRequest.class)
|
callback(SdfClearingRequest.class)
|
||||||
.setConsumer(r -> processSpecial(Table.S_DF56, r))
|
.setConsumer(r -> processSpecial(Table.S_DF56, r))
|
||||||
.forDestination(Consts.SDF56_PROCESS, callbacks::put);
|
.forDestination(Consts.SDF56_PROCESS, callbacks::put);
|
||||||
|
|
||||||
|
callback(LauncherCommandRequest.class)
|
||||||
|
.setConsumer(r -> processByLauncher(Table.S_DF54, r))
|
||||||
|
.forDestination(Task.dbfExport_OUTV.topic(), callbacks::put);
|
||||||
|
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -83,4 +90,12 @@ public class CommandService extends QueueConsumer implements InitializingBean {
|
||||||
resultContainer.setGroupId(request.getGroupId());
|
resultContainer.setGroupId(request.getGroupId());
|
||||||
processor.process(resultContainer);
|
processor.process(resultContainer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void processByLauncher(Table table, BaseRequest<LauncherCommandRequest> 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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.ClearingCalendarNewRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.ClearingCalendarUpdateRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.ClearingCalendarUpdateRequest;
|
||||||
import ru.spcex.clearing.scheduler.error.ValidationError;
|
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.DateNotBeforeRule;
|
||||||
import ru.spcex.clearing.scheduler.validation.rules.common.DictionaryPresentRule;
|
import ru.spcex.clearing.scheduler.validation.rules.common.DictionaryPresentRule;
|
||||||
import ru.spcex.clearing.scheduler.validation.rules.common.IdPresentRule;
|
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_Company);
|
||||||
addImdg.accept(IMDGDistributedNames.Map_DayStatusDictionary);
|
addImdg.accept(IMDGDistributedNames.Map_DayStatusDictionary);
|
||||||
return new ValidatorImpl<>(context,
|
return new ValidatorImpl<>(context,
|
||||||
DateNotBeforeRule.instance("clearingDate",
|
DateAfterTodayRule.instance("clearingDate",
|
||||||
ClearingCalendarNewRequest::getClearingDate),
|
ClearingCalendarNewRequest::getClearingDate),
|
||||||
IdPresentRule.instance("companyId",
|
IdPresentRule.instance("companyId",
|
||||||
ClearingCalendarNewRequest::getCompanyId,
|
ClearingCalendarNewRequest::getCompanyId,
|
||||||
|
|
@ -68,7 +69,7 @@ public class ClearingCalendarValidationConfig {
|
||||||
IMDGDistributedNames.Map_ClearingCalendar,
|
IMDGDistributedNames.Map_ClearingCalendar,
|
||||||
ClearingCalendar.class,
|
ClearingCalendar.class,
|
||||||
ValidationError.RecordNotFound),
|
ValidationError.RecordNotFound),
|
||||||
DateNotBeforeRule.instance("clearingDate",
|
DateNotBeforeRule.instance("clearingDate",//todo при редактировании DateAfterTodayRule или DateNotBeforeRule?
|
||||||
ClearingCalendarUpdateRequest::getClearingDate),
|
ClearingCalendarUpdateRequest::getClearingDate),
|
||||||
IdPresentRule.instance("companyId",
|
IdPresentRule.instance("companyId",
|
||||||
ClearingCalendarUpdateRequest::getCompanyId,
|
ClearingCalendarUpdateRequest::getCompanyId,
|
||||||
|
|
|
||||||
|
|
@ -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.DictionaryPresentRule;
|
||||||
import ru.spcex.clearing.scheduler.validation.rules.common.EnumPresentRule;
|
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.IdPresentRule;
|
||||||
import ru.spcex.clearing.scheduler.validation.rules.common.TimeNotBeforeRule;
|
|
||||||
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||||
import ru.spcex.platform.enumeration.Section;
|
import ru.spcex.platform.enumeration.Section;
|
||||||
import ru.spcex.platform.enumeration.WorkflowStatus;
|
import ru.spcex.platform.enumeration.WorkflowStatus;
|
||||||
|
|
@ -48,10 +47,10 @@ public class PlannerTemplateValidationConfig {
|
||||||
PlannerTemplateNewRequest::getTask,
|
PlannerTemplateNewRequest::getTask,
|
||||||
IMDGDistributedNames.Map_TaskDictionary,
|
IMDGDistributedNames.Map_TaskDictionary,
|
||||||
TaskDictionary.class),
|
TaskDictionary.class),
|
||||||
TimeNotBeforeRule.instance("taskTime",
|
// TimeNotBeforeRule.instance("taskTime",
|
||||||
PlannerTemplateNewRequest::getTaskTime,
|
// PlannerTemplateNewRequest::getTaskTime,
|
||||||
true,
|
// true,
|
||||||
false),
|
// false),
|
||||||
DictionaryPresentRule.instance("taskStatus",
|
DictionaryPresentRule.instance("taskStatus",
|
||||||
PlannerTemplateNewRequest::getTaskStatus,
|
PlannerTemplateNewRequest::getTaskStatus,
|
||||||
IMDGDistributedNames.Map_TaskStatusDictionary,
|
IMDGDistributedNames.Map_TaskStatusDictionary,
|
||||||
|
|
@ -106,10 +105,10 @@ public class PlannerTemplateValidationConfig {
|
||||||
IMDGDistributedNames.Map_TaskDictionary,
|
IMDGDistributedNames.Map_TaskDictionary,
|
||||||
TaskDictionary.class,
|
TaskDictionary.class,
|
||||||
false),
|
false),
|
||||||
TimeNotBeforeRule.instance("taskTime",
|
// TimeNotBeforeRule.instance("taskTime",
|
||||||
PlannerTemplateUpdateRequest::getTaskTime,
|
// PlannerTemplateUpdateRequest::getTaskTime,
|
||||||
false,
|
// false,
|
||||||
false),
|
// false),
|
||||||
DictionaryPresentRule.instance("taskStatus",
|
DictionaryPresentRule.instance("taskStatus",
|
||||||
PlannerTemplateUpdateRequest::getTaskStatus,
|
PlannerTemplateUpdateRequest::getTaskStatus,
|
||||||
IMDGDistributedNames.Map_TaskStatusDictionary,
|
IMDGDistributedNames.Map_TaskStatusDictionary,
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,8 @@ public class PlannerValidationConfig {
|
||||||
PlannerNewRequest::getClearingDate),
|
PlannerNewRequest::getClearingDate),
|
||||||
TimeNotBeforeRule.instance("taskTime",
|
TimeNotBeforeRule.instance("taskTime",
|
||||||
PlannerNewRequest::getTaskTime,
|
PlannerNewRequest::getTaskTime,
|
||||||
LocalDate.now().equals(plannerNewRequest.getClearingDate())),
|
true,
|
||||||
|
PlannerNewRequest::getClearingDate),
|
||||||
EnumPresentRule.instance("section",
|
EnumPresentRule.instance("section",
|
||||||
PlannerNewRequest::getSection,
|
PlannerNewRequest::getSection,
|
||||||
Section.values(),
|
Section.values(),
|
||||||
|
|
@ -108,7 +109,7 @@ public class PlannerValidationConfig {
|
||||||
TimeNotBeforeRule.instance("taskTime",
|
TimeNotBeforeRule.instance("taskTime",
|
||||||
PlannerUpdateRequest::getTaskTime,
|
PlannerUpdateRequest::getTaskTime,
|
||||||
false,
|
false,
|
||||||
LocalDate.now().equals(plannerUpdateRequest.getClearingDate())),
|
PlannerUpdateRequest::getClearingDate),
|
||||||
DateNotBeforeRule.instance("clearingDate",
|
DateNotBeforeRule.instance("clearingDate",
|
||||||
PlannerUpdateRequest::getClearingDate,
|
PlannerUpdateRequest::getClearingDate,
|
||||||
false),
|
false),
|
||||||
|
|
|
||||||
|
|
@ -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 <R> Класс проверяемого объекта
|
||||||
|
*/
|
||||||
|
public record DateAfterTodayRule<R>(String fieldName, Function<R, LocalDate> getter, boolean required) implements IValidationRule<ImdgValidationContext<R>> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param fieldName Название поля класса, используется для передачи ошибки
|
||||||
|
* @param getter Метод получения проверяемой даты
|
||||||
|
* @param required Флаг обязательности поля
|
||||||
|
* @param <R> Класс проверяемого объекта
|
||||||
|
*/
|
||||||
|
public static <R> DateAfterTodayRule<R> instance(String fieldName, Function<R, LocalDate> getter, boolean required) {
|
||||||
|
return new DateAfterTodayRule<>(fieldName, getter, required);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param fieldName Название поля класса, используется для передачи ошибки
|
||||||
|
* @param getter Метод получения проверяемой даты
|
||||||
|
* @param <R> Класс проверяемого объекта
|
||||||
|
*/
|
||||||
|
public static <R> DateAfterTodayRule<R> instance(String fieldName, Function<R, LocalDate> getter) {
|
||||||
|
return new DateAfterTodayRule<>(fieldName, getter, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<EnumMessage> validate(ImdgValidationContext<R> 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -5,6 +5,7 @@ import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
||||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||||
import ru.spcex.platform.utils.validation.IValidationRule;
|
import ru.spcex.platform.utils.validation.IValidationRule;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
@ -17,7 +18,8 @@ import java.util.function.Function;
|
||||||
public record TimeNotBeforeRule<R>(String fieldName,
|
public record TimeNotBeforeRule<R>(String fieldName,
|
||||||
Function<R, LocalTime> getter,
|
Function<R, LocalTime> getter,
|
||||||
boolean required,
|
boolean required,
|
||||||
boolean isToday) implements IValidationRule<ImdgValidationContext<R>> {
|
boolean isToday,
|
||||||
|
Function<R, LocalDate> getterForDate) implements IValidationRule<ImdgValidationContext<R>> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param fieldName Название поля класса, используется для передачи ошибки
|
* @param fieldName Название поля класса, используется для передачи ошибки
|
||||||
|
|
@ -27,9 +29,21 @@ public record TimeNotBeforeRule<R>(String fieldName,
|
||||||
* @param isToday Флаг что дата сегодняшняя
|
* @param isToday Флаг что дата сегодняшняя
|
||||||
*/
|
*/
|
||||||
public static <R> TimeNotBeforeRule<R> instance(String fieldName, Function<R, LocalTime> getter, boolean required, boolean isToday) {
|
public static <R> TimeNotBeforeRule<R> instance(String fieldName, Function<R, LocalTime> 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 <R>
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static <R> TimeNotBeforeRule<R> instance(String fieldName, Function<R, LocalTime> getter, boolean required, Function<R, LocalDate> getterForDate) {
|
||||||
|
return new TimeNotBeforeRule<>(fieldName, getter, required, true, getterForDate);
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* @param fieldName Название поля класса, используется для передачи ошибки
|
* @param fieldName Название поля класса, используется для передачи ошибки
|
||||||
* @param getter Метод получения проверяемого времени
|
* @param getter Метод получения проверяемого времени
|
||||||
|
|
@ -37,7 +51,7 @@ public record TimeNotBeforeRule<R>(String fieldName,
|
||||||
* @param <R> Класс проверяемого объекта
|
* @param <R> Класс проверяемого объекта
|
||||||
*/
|
*/
|
||||||
public static <R> TimeNotBeforeRule<R> instance(String fieldName, Function<R, LocalTime> getter, boolean required) {
|
public static <R> TimeNotBeforeRule<R> instance(String fieldName, Function<R, LocalTime> 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<R>(String fieldName,
|
||||||
* @param <R> Класс проверяемого объекта
|
* @param <R> Класс проверяемого объекта
|
||||||
*/
|
*/
|
||||||
public static <R> TimeNotBeforeRule<R> instance(String fieldName, Function<R, LocalTime> getter) {
|
public static <R> TimeNotBeforeRule<R> instance(String fieldName, Function<R, LocalTime> getter) {
|
||||||
return new TimeNotBeforeRule<>(fieldName, getter, true, true);
|
return new TimeNotBeforeRule<>(fieldName, getter, true,true, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<EnumMessage> validate(ImdgValidationContext<R> context) {
|
public Optional<EnumMessage> validate(ImdgValidationContext<R> context) {
|
||||||
R validatedObject = context.getValidatedObject();
|
R validatedObject = context.getValidatedObject();
|
||||||
LocalTime date = getter.apply(validatedObject);
|
LocalTime time = getter.apply(validatedObject);
|
||||||
if (date == null) return required ? of(ValidationError.EmptyRequiredValue, fieldName) : Optional.empty();
|
if (time == null) return required ? of(ValidationError.EmptyRequiredValue, fieldName) : Optional.empty();
|
||||||
if (date.isBefore(LocalTime.now()))
|
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 isToday ? of(ValidationError.TaskForPastTime, fieldName) : Optional.empty();
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -36,10 +36,18 @@ public enum Task implements IEnumKey {
|
||||||
createRegistry_GCMR("GCMR"), // Формирование реестра участников клиринга
|
createRegistry_GCMR("GCMR"), // Формирование реестра участников клиринга
|
||||||
createRegistry_GSRR("GSRR"), // Формирование реестра отправленных отчетов
|
createRegistry_GSRR("GSRR"), // Формирование реестра отправленных отчетов
|
||||||
createRegistry_GACA("GACA"), // Создание файла остатков CSV по клиринговым счетам
|
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"), // Формирование распоряжения на перевод с ТБС
|
forming_CMBA("CMBA"), // Формирование распоряжения на перевод с ТБС
|
||||||
creatingFile_GAIA("GAIA"), // Создание файла остатков CSV по внутренним информацион.счетам
|
creatingFile_GAIA("GAIA"), // Создание файла остатков CSV по внутренним информацион.счетам
|
||||||
loadParty_LOCM("LOCM"), // Загрузка участников
|
loadParty_LOCM("LOCM"), // Загрузка участников
|
||||||
loadIssue_LOSC("LOSC"), // Загрузка инструментов
|
loadIssue_LOSC("LOSC"), // Загрузка инструментов
|
||||||
|
dbfExport_OUTV("OUTV"), // для dbf-exporter сообщение на создание файла ДФ-54
|
||||||
;
|
;
|
||||||
|
|
||||||
private final String key;
|
private final String key;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue