diff --git a/clearing-parent/scheduler-service/pom.xml b/clearing-parent/scheduler-service/pom.xml index 04774fd14..cb13c4eef 100644 --- a/clearing-parent/scheduler-service/pom.xml +++ b/clearing-parent/scheduler-service/pom.xml @@ -28,6 +28,10 @@ ru.spcex.platform platform-imdg-api-hazelcast-impl + + ru.spcex.clearing + dictionary + ru.spcex.clearing classes diff --git a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/IRequestValidator.java b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/IRequestValidator.java index 47e0e83db..78285922a 100644 --- a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/IRequestValidator.java +++ b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/IRequestValidator.java @@ -1,27 +1,32 @@ package ru.spcex.clearing.scheduler; import org.slf4j.Logger; +import ru.clearing.platform.dictionary.AbstractDictionary; +import ru.clearing.platform.dictionary.DayStatusDictionary; +import ru.clearing.platform.dictionary.TaskDictionary; +import ru.clearing.platform.dictionary.TaskStatusDictionary; +import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; import ru.spcex.clearing.platform.messaging.domain.cud.schedule.*; -import ru.spcex.platform.enumeration.DayStatus; import ru.spcex.platform.enumeration.Market; -import ru.spcex.platform.enumeration.Status; -import ru.spcex.platform.enumeration.Task; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.utils.enumeration.IEnumKey; import java.time.LocalDate; import java.time.LocalTime; +import java.util.Collection; import java.util.LinkedList; import java.util.List; import java.util.stream.Collectors; public interface IRequestValidator { - List validate(T req); + List validate(T req, ImdgProvider imdgProvider); /** * Общий запрос на удаление */ - IRequestValidator COMMON_DELETE_REQUEST = req -> { + IRequestValidator COMMON_DELETE_REQUEST = (req, imdgProvider) -> { var errors = new LinkedList(); validateLong(req.id, "id", true, errors); return errors; @@ -30,36 +35,56 @@ public interface IRequestValidator { /** * Запрос на добавление ClearingCalendar */ - IRequestValidator CLEARING_CALENDAR_NEW_REQUEST = req -> { + IRequestValidator CLEARING_CALENDAR_NEW_REQUEST = (req, imdgProvider) -> { var errors = new LinkedList(); validateDate(req.clearingDate, "clearingDate", true, true, errors); validateLong(req.companyId, "companyId", false, errors); - validateEnum(req.dayStatus, "dayStatus", true, errors, DayStatus.values()); +// validateEnum(req.dayStatus, "dayStatus", true, errors, DayStatus.values()); + validateDictionary(req.dayStatus, + "dayStatus", + true, + imdgProvider.getImdg(IMDGDistributedNames.Map_DayStatusDictionary, DayStatusDictionary.class), + errors); return errors; }; /** * Запрос на обновление ClearingCalendar */ - IRequestValidator CLEARING_CALENDAR_UPDATE_REQUEST = req -> { + IRequestValidator CLEARING_CALENDAR_UPDATE_REQUEST = (req, imdgProvider) -> { var errors = new LinkedList(); validateLong(req.id, "id", true, errors); validateLong(req.companyId, "companyId", false, errors); validateDate(req.clearingDate, "clearingDate", false, true, errors); - validateEnum(req.dayStatus, "dayStatus", false, errors, DayStatus.values()); +// validateEnum(req.dayStatus, "dayStatus", false, errors, DayStatus.values()); + validateDictionary(req.dayStatus, + "dayStatus", + false, + imdgProvider.getImdg(IMDGDistributedNames.Map_DayStatusDictionary, DayStatusDictionary.class), + errors); return errors; }; /** * Запрос на добавление Planner */ - IRequestValidator PLANNER_NEW_REQUEST = req -> { + IRequestValidator PLANNER_NEW_REQUEST = (req, imdgProvider) -> { var errors = new LinkedList(); - validateEnum(req.task, "task", true, errors, Task.values()); +// validateEnum(req.task, "task", true, errors, Task.values()); + validateDictionary(req.task, + "task", + true, + imdgProvider.getImdg(IMDGDistributedNames.Map_TaskDictionary, TaskDictionary.class), + errors); validateDate(req.clearingDate, "clearingDate", true, true, errors); validateTime(req.taskTime, "taskTime", true, true, errors); validateEnum(req.market, "market", false, errors, Market.values()); - validateEnum(req.taskStatus, "taskStatus", true, errors, Status.values()); +// validateEnum(req.taskStatus, "taskStatus", true, errors, Status.values()); + validateDictionary(req.taskStatus, + "taskStatus", + true, + imdgProvider.getImdg(IMDGDistributedNames.Map_TaskStatusDictionary, TaskStatusDictionary.class), + errors); validateLong(req.companyId, "companyId", false, errors); validateLong(req.securityId, "securityId", false, errors); return errors; @@ -68,14 +93,24 @@ public interface IRequestValidator { /** * Запрос на обновление Planner */ - IRequestValidator PLANNER_UPDATE_REQUEST = req -> { + IRequestValidator PLANNER_UPDATE_REQUEST = (req, imdgProvider) -> { var errors = new LinkedList(); validateLong(req.id, "id", true, errors); - validateEnum(req.task, "task", false, errors, Task.values()); +// validateEnum(req.task, "task", false, errors, Task.values()); + validateDictionary(req.task, + "task", + false, + imdgProvider.getImdg(IMDGDistributedNames.Map_TaskDictionary, TaskDictionary.class), + errors); validateDate(req.clearingDate, "clearingDate", false, true, errors); validateTime(req.taskTime, "taskTime", false, true, errors); validateEnum(req.market, "market", false, errors, Market.values()); - validateEnum(req.taskStatus, "taskStatus", false, errors, Status.values()); +// validateEnum(req.taskStatus, "taskStatus", false, errors, Status.values()); + validateDictionary(req.taskStatus, + "taskStatus", + false, + imdgProvider.getImdg(IMDGDistributedNames.Map_TaskStatusDictionary, TaskStatusDictionary.class), + errors); validateLong(req.companyId, "companyId", false, errors); validateLong(req.securityId, "securityId", false, errors); return errors; @@ -84,11 +119,21 @@ public interface IRequestValidator { /** * Запрос на добавление PlannerTemplate */ - IRequestValidator PLANNER_TEMPLATE_NEW_REQUEST = req -> { + IRequestValidator PLANNER_TEMPLATE_NEW_REQUEST = (req, imdgProvider) -> { var errors = new LinkedList(); - validateEnum(req.task, "task", true, errors, Task.values()); +// validateEnum(req.task, "task", true, errors, Task.values()); + validateDictionary(req.task, + "task", + true, + imdgProvider.getImdg(IMDGDistributedNames.Map_TaskDictionary, TaskDictionary.class), + errors); validateTime(req.taskTime, "taskTime", true, true, errors); - validateEnum(req.taskStatus, "taskStatus", true, errors, Status.values()); +// validateEnum(req.taskStatus, "taskStatus", true, errors, Status.values()); + validateDictionary(req.taskStatus, + "taskStatus", + true, + imdgProvider.getImdg(IMDGDistributedNames.Map_TaskStatusDictionary, TaskStatusDictionary.class), + errors); validateLong(req.companyId, "companyId", false, errors); validateLong(req.securityId, "securityId", false, errors); return errors; @@ -97,12 +142,22 @@ public interface IRequestValidator { /** * Запрос на обновление PlannerTemplate */ - IRequestValidator PLANNER_TEMPLATE_UPDATE_REQUEST = req -> { + IRequestValidator PLANNER_TEMPLATE_UPDATE_REQUEST = (req, imdgProvider) -> { var errors = new LinkedList(); validateLong(req.id, "id", true, errors); - validateEnum(req.task, "task", false, errors, Task.values()); +// validateEnum(req.task, "task", false, errors, Task.values()); + validateDictionary(req.task, + "task", + false, + imdgProvider.getImdg(IMDGDistributedNames.Map_TaskDictionary, TaskDictionary.class), + errors); validateTime(req.taskTime, "taskTime", false, true, errors); - validateEnum(req.taskStatus, "taskStatus", false, errors, Status.values()); +// validateEnum(req.taskStatus, "taskStatus", false, errors, Status.values()); + validateDictionary(req.taskStatus, + "taskStatus", + false, + imdgProvider.getImdg(IMDGDistributedNames.Map_TaskStatusDictionary, TaskStatusDictionary.class), + errors); validateLong(req.companyId, "companyId", false, errors); validateLong(req.securityId, "securityId", false, errors); return errors; @@ -110,6 +165,19 @@ public interface IRequestValidator { + static void validateDictionary(String src, + String fieldName, + boolean required, + Imdg dictionary, + List errors) { + if (src != null) { + boolean correctTask = false; + Collection values = dictionary.getAllValues(); + for (T value : values) correctTask |= src.equalsIgnoreCase(value.getCode()); + if (!correctTask) + errors.add(new ValidationError(fieldName, ErrorType.UNKNOWN_VALUE)); + } else if (required) errors.add(new ValidationError(fieldName, ErrorType.MISSING_REQUIRED)); + } static & IEnumKey> void validateEnum(String enumStr, String fieldName,