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.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<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.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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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.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<R>(String fieldName,
|
||||
Function<R, LocalTime> getter,
|
||||
boolean required,
|
||||
boolean isToday) implements IValidationRule<ImdgValidationContext<R>> {
|
||||
boolean isToday,
|
||||
Function<R, LocalDate> getterForDate) implements IValidationRule<ImdgValidationContext<R>> {
|
||||
|
||||
/**
|
||||
* @param fieldName Название поля класса, используется для передачи ошибки
|
||||
|
|
@ -27,9 +29,21 @@ public record TimeNotBeforeRule<R>(String fieldName,
|
|||
* @param 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 getter Метод получения проверяемого времени
|
||||
|
|
@ -37,7 +51,7 @@ public record TimeNotBeforeRule<R>(String fieldName,
|
|||
* @param <R> Класс проверяемого объекта
|
||||
*/
|
||||
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> Класс проверяемого объекта
|
||||
*/
|
||||
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
|
||||
public Optional<EnumMessage> validate(ImdgValidationContext<R> 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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue