From c773017570f881c37b931ba83eb300576e3d191d Mon Sep 17 00:00:00 2001 From: ialbert Date: Wed, 14 Dec 2022 12:40:09 +0300 Subject: [PATCH 1/2] http://jira.mfd.msk:8088/browse/CLS-178 --- .../company/ProfileDocumentController.java | 25 +++- .../cud/company/ProfileDocumentNewAction.java | 82 +++++++++++ .../platform/messaging/domain/Consts.java | 1 + .../company/ProfileDocumentNewRequest.java | 138 ++++++++++++++++++ 4 files changed, 244 insertions(+), 2 deletions(-) create mode 100644 clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/company/ProfileDocumentNewAction.java create mode 100644 platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/company/ProfileDocumentNewRequest.java diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/company/ProfileDocumentController.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/company/ProfileDocumentController.java index 1e1909a53..589051d3c 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/company/ProfileDocumentController.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/company/ProfileDocumentController.java @@ -1,28 +1,39 @@ package ru.spcex.clearing.backendapi.controller.queue.company; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import ru.clearing.classes.statics.data.profile.ProfileDocument; +import ru.spcex.clearing.backendapi.controller.queue.AbstractQueueController; +import ru.spcex.clearing.backendapi.controller.request.cud.company.ProfileDocumentNewAction; +import ru.spcex.clearing.backendapi.controller.response.BasicSpcexResponse; +import ru.spcex.clearing.backendapi.controller.response.cud.CudResponse; import ru.spcex.clearing.backendapi.controller.response.entity.CommonGetAllResponse; +import ru.spcex.clearing.backendapi.service.IOperator; import ru.spcex.clearing.backendapi.service.IStateLoader; import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.Consts; import java.util.Collection; import java.util.Map; +import java.util.concurrent.ExecutionException; @Controller @RequestMapping("/profile-documents") -public class ProfileDocumentController { +public class ProfileDocumentController extends AbstractQueueController { private final IStateLoader stateLoader; @Autowired - public ProfileDocumentController(IStateLoader stateLoader) { + public ProfileDocumentController(IStateLoader stateLoader, IOperator operator) { + super(operator); this.stateLoader = stateLoader; } @@ -36,4 +47,14 @@ public class ProfileDocumentController { response.fromEntity(all); return response; } + + @ApiOperation(value = "new profile document.") + @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CudResponse.class), @ApiResponse(code = 400, message = "Ошибка валидации", response = BasicSpcexResponse.class)}) + @RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public CudResponse add( + @ApiParam(value = "Параметры команды в JSON формате.", required = true) + @RequestBody ProfileDocumentNewAction profileDocumentNewAction) throws ExecutionException, InterruptedException { + return processRequest(Consts.DESTINATION_PROFILE_DOCUMENT_NEW, profileDocumentNewAction); + } } diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/company/ProfileDocumentNewAction.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/company/ProfileDocumentNewAction.java new file mode 100644 index 000000000..be46441b3 --- /dev/null +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/company/ProfileDocumentNewAction.java @@ -0,0 +1,82 @@ +package ru.spcex.clearing.backendapi.controller.request.cud.company; + +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.platform.messaging.domain.ActionType; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ProfileDocumentNewRequest; +import ru.spcex.clearing.platform.messaging.domain.json.deserialize.LocalDateDeserializer; +import ru.spcex.clearing.platform.messaging.domain.json.serialize.LocalDateSerializer; + +import java.time.LocalDate; + +public class ProfileDocumentNewAction implements IAction { + @ApiModelProperty(value = "Идентификатор Компании", example = "123") + @JsonProperty + private Long companyId; + @ApiModelProperty(value = "Идентификатор типа документа", example = "ABCD") + @JsonProperty + private String documentType; + @ApiModelProperty(value = "Дата выдачи", example = "2022-12-25") + @JsonSerialize(using = LocalDateSerializer.class) + @JsonDeserialize(using = LocalDateDeserializer.class) + @JsonProperty + private LocalDate issueDate; + @ApiModelProperty(value = "Место выдачи", example = "Example string") + @JsonProperty + private String issuePlace; + @ApiModelProperty(value = "Кем выдан", example = "Example string") + @JsonProperty + private String issuer; + @ApiModelProperty(value = "Код выдавшего органа", example = "Example string") + @JsonProperty + private String issuerCode; + @ApiModelProperty(value = "Наименование", example = "Example string") + @JsonProperty + private String name; + @ApiModelProperty(value = "Номер", example = "Example string") + @JsonProperty + private String number; + @ApiModelProperty(value = "Место", example = "Example string") + @JsonProperty + private String place; + @ApiModelProperty(value = "Дата начала срока действия", example = "2022-12-25") + @JsonSerialize(using = LocalDateSerializer.class) + @JsonDeserialize(using = LocalDateDeserializer.class) + @JsonProperty + private LocalDate validFromDate; + @ApiModelProperty(value = "Дата окончания срока действия", example = "2022-12-25") + @JsonSerialize(using = LocalDateSerializer.class) + @JsonDeserialize(using = LocalDateDeserializer.class) + @JsonProperty + private LocalDate validToDate; + @ApiModelProperty(value = "Ссылка на документ", example = "Example string") + @JsonProperty + private String link; + + @Override + public ProfileDocumentNewRequest toRequest() { + ProfileDocumentNewRequest request = new ProfileDocumentNewRequest(); + request.setCompanyId(this.companyId); + request.setDocumentType(this.documentType); + request.setIssueDate(this.issueDate); + request.setIssuePlace(this.issuePlace); + request.setIssuer(this.issuer); + request.setIssuerCode(this.issuerCode); + request.setName(this.name); + request.setNumber(this.number); + request.setPlace(this.place); + request.setValidFromDate(this.validFromDate); + request.setValidToDate(this.validToDate); + request.setLink(this.link); + return request; + } + + @ApiModelProperty(hidden = true) + @Override + public ActionType getActionType() { + return ActionType.NEW; + } +} diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java index ed7b1d5aa..0ffbba428 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java @@ -33,6 +33,7 @@ public interface Consts { String DESTINATION_BANK_ACCOUNT_UPDATE = "bank-account-update"; String DESTINATION_BANK_ACCOUNT_NEW = "bank-account-new"; String DESTINATION_RELATION_UPDATE = "relation-update"; + String DESTINATION_PROFILE_DOCUMENT_NEW = "profile-document-new"; String DESTINATION_SDF08_NEW = "s-df-08-new"; String DESTINATION_SDF02_NEW = "s-df-02-new"; diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/company/ProfileDocumentNewRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/company/ProfileDocumentNewRequest.java new file mode 100644 index 000000000..68fbc0903 --- /dev/null +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/company/ProfileDocumentNewRequest.java @@ -0,0 +1,138 @@ +package ru.spcex.clearing.platform.messaging.domain.cud.company; + +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.LocalDateDeserializer; +import ru.spcex.clearing.platform.messaging.domain.json.serialize.LocalDateSerializer; + +import java.time.LocalDate; + +public class ProfileDocumentNewRequest { + @JsonProperty + private Long companyId; + @JsonProperty + private String documentType; + @JsonSerialize(using = LocalDateSerializer.class) + @JsonDeserialize(using = LocalDateDeserializer.class) + @JsonProperty + private LocalDate issueDate; + @JsonProperty + private String issuePlace; + @JsonProperty + private String issuer; + @JsonProperty + private String issuerCode; + @JsonProperty + private String name; + @JsonProperty + private String number; + @JsonProperty + private String place; + @JsonSerialize(using = LocalDateSerializer.class) + @JsonDeserialize(using = LocalDateDeserializer.class) + @JsonProperty + private LocalDate validFromDate; + @JsonSerialize(using = LocalDateSerializer.class) + @JsonDeserialize(using = LocalDateDeserializer.class) + @JsonProperty + private LocalDate validToDate; + @JsonProperty + private String link; + + public Long getCompanyId() { + return companyId; + } + + public void setCompanyId(Long companyId) { + this.companyId = companyId; + } + + public String getDocumentType() { + return documentType; + } + + public void setDocumentType(String documentType) { + this.documentType = documentType; + } + + public LocalDate getIssueDate() { + return issueDate; + } + + public void setIssueDate(LocalDate issueDate) { + this.issueDate = issueDate; + } + + public String getIssuePlace() { + return issuePlace; + } + + public void setIssuePlace(String issuePlace) { + this.issuePlace = issuePlace; + } + + public String getIssuer() { + return issuer; + } + + public void setIssuer(String issuer) { + this.issuer = issuer; + } + + public String getIssuerCode() { + return issuerCode; + } + + public void setIssuerCode(String issuerCode) { + this.issuerCode = issuerCode; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getNumber() { + return number; + } + + public void setNumber(String number) { + this.number = number; + } + + public String getPlace() { + return place; + } + + public void setPlace(String place) { + this.place = place; + } + + public LocalDate getValidFromDate() { + return validFromDate; + } + + public void setValidFromDate(LocalDate validFromDate) { + this.validFromDate = validFromDate; + } + + public LocalDate getValidToDate() { + return validToDate; + } + + public void setValidToDate(LocalDate validToDate) { + this.validToDate = validToDate; + } + + public String getLink() { + return link; + } + + public void setLink(String link) { + this.link = link; + } +} From 74cb4d75c0335eb740ab1e44b661c27be4f82dd3 Mon Sep 17 00:00:00 2001 From: aalehin Date: Wed, 14 Dec 2022 14:12:50 +0300 Subject: [PATCH 2/2] =?UTF-8?q?http://jira.mfd.msk:8088/browse/CLS-37=20--?= =?UTF-8?q?-=20=D1=80=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE=D1=80=20TaskMana?= =?UTF-8?q?ger?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scheduler/enums/IEnumWithLongValue.java | 81 ------------------- .../scheduler/enums/TaskStatuses.java | 35 -------- .../spcex/clearing/scheduler/enums/Tasks.java | 45 ----------- .../scheduler/service/TaskManager.java | 45 ++++++----- .../ru/spcex/platform/enumeration/Status.java | 4 +- .../ru/spcex/platform/enumeration/Task.java | 14 +++- 6 files changed, 39 insertions(+), 185 deletions(-) delete mode 100644 clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/enums/IEnumWithLongValue.java delete mode 100644 clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/enums/TaskStatuses.java delete mode 100644 clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/enums/Tasks.java diff --git a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/enums/IEnumWithLongValue.java b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/enums/IEnumWithLongValue.java deleted file mode 100644 index 3e46ccc59..000000000 --- a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/enums/IEnumWithLongValue.java +++ /dev/null @@ -1,81 +0,0 @@ -package ru.spcex.clearing.scheduler.enums; - -import java.io.Serializable; -import java.util.Objects; - -/** - * Удобный интерфейс для enum при использовании TextErrorService. - */ -public interface IEnumWithLongValue extends Serializable { - - - /** - * Проверяет что среди данного набора Enum, присутствует элемент с данным id - * id может быть null - */ - static & IEnumWithLongValue> boolean contains(Long id, T... enumSet) { - for (T e : enumSet) { - if (Objects.equals(id, e.getId())) - return true; - } - return false; - } - - static & IEnumWithLongValue> boolean contains(T e, T... enumSet) { - for (T enumEl : enumSet) { - if (enumEl.equals(e)) - return true; - } - return false; - } - - static & IEnumWithLongValue> Long[] toLongArray(T... enumSet) { - Long[] enumId = new Long[enumSet.length]; - for (int i = 0; i < enumSet.length; i++) - enumId[i] = enumSet[i].getId(); - return enumId; - } - - /** - * Проверяет что среди всех Enum данного класса, присутствует элемент с данным id - * id может быть null - */ - static & IEnumWithLongValue> boolean contains(Class enumClass, Long id) { - for (T e : enumClass.getEnumConstants()) { - if (Objects.equals(id, e.getId())) - return true; - } - return false; - } - - - /** - * Возвращает Enum по id, если в заданном классе такой определен - * id может быть null - * - * @return Enum если нашел, иначе null - */ - static & IEnumWithLongValue> T getEnumById(Class enumClass, Long id) { - for (T e : enumClass.getEnumConstants()) { - if (Objects.equals(id, e.getId())) - return e; - } - return null; - } - - static Long getIdOrNull(IEnumWithLongValue enumVal) { - return enumVal == null ? null : enumVal.getId(); - } - - - /** - * errorCode - **/ - Long getId(); - - default boolean equalsById(Long id) { - return id != null && getId().equals(id); - } - - String elementName(); -} diff --git a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/enums/TaskStatuses.java b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/enums/TaskStatuses.java deleted file mode 100644 index b4f82ea38..000000000 --- a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/enums/TaskStatuses.java +++ /dev/null @@ -1,35 +0,0 @@ -package ru.spcex.clearing.scheduler.enums; - -import java.util.Objects; - -public enum TaskStatuses { - ACTIVE("ACTV"), - BLOCKED("CNCL"), - CANCEL("BLKD"); - - private final String name; - - TaskStatuses(String name) { - this.name = name; - } - - public static TaskStatuses getEnumByName(String name) { - for (TaskStatuses e : TaskStatuses.values()) { - if (Objects.equals(name, e.name())) - return e; - } - return null; - } - - public Boolean equalsByName(String name) { - return this.name.equalsIgnoreCase(name); - } - - public String getName() { - return this.name; - } - - public String elementName() { - return this.name(); - } -} diff --git a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/enums/Tasks.java b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/enums/Tasks.java deleted file mode 100644 index b92b42108..000000000 --- a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/enums/Tasks.java +++ /dev/null @@ -1,45 +0,0 @@ -package ru.spcex.clearing.scheduler.enums; - -import java.util.Objects; - -public enum Tasks { - GBAL("GBAL"),//Зачисление остатков - ABLK("ABLK"),//Блокировка счета - GALB("GALB"),//Запрос остатков по всем счетам - ADBL("ADBL"),//Дозачисление/списание остатков - CORD("CORD"),//Формирование сводного платежного поручения - CORC("CORC"),//Получение подтверждения переводов - GTRD("GTRD"),//Получение сделок из Торговой системы - GVER("GVER"),// Запуск сверки - GBLD("GBLD"),// Поступление средств - SCLR("SCLR"),// Запуск клиринговой сессии - SPRC("SPRC"),// Запуск преклиринга - SPOC("SPOC");// Запуск постклиринга - - private String name; - - Tasks(String name) { - this.name = name; - } - - public static Tasks getEnumByName(String name) { - for (Tasks e : Tasks.values()) { - if (Objects.equals(name, e.name())) - return e; - } - return null; - } - - public Boolean equalsByName(String name) { - return this.name.equalsIgnoreCase(name); - } - - public String getName() { - return this.name; - } - - public String elementName() { - return this.name(); - } - -} diff --git a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/TaskManager.java b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/TaskManager.java index 4bfd70cdb..4db6e99b2 100644 --- a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/TaskManager.java +++ b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/TaskManager.java @@ -11,8 +11,8 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.scheduling.TaskScheduler; import ru.clearing.classes.statics.data.scheduler.PlannerAllToday; -import ru.spcex.clearing.scheduler.enums.TaskStatuses; -import ru.spcex.clearing.scheduler.enums.Tasks; +import ru.spcex.platform.enumeration.Status; +import ru.spcex.platform.enumeration.Task; import java.time.LocalDate; import java.time.LocalDateTime; @@ -27,7 +27,8 @@ import java.util.concurrent.ScheduledFuture; import java.util.stream.Collectors; import static ru.spcex.clearing.imdg.IMDGDistributedNames.Map_PlannerAllToday; -import static ru.spcex.clearing.scheduler.enums.TaskStatuses.*; +import static ru.spcex.platform.enumeration.Status.*; +import static ru.spcex.platform.utils.enumeration.IEnumKey.getEnumByKey; /** * Планировщик задач, расписание берёт из Hazelcast map. @@ -73,7 +74,7 @@ public abstract class TaskManager implements EntryAddedListener event) { PlannerAllToday task = event.getValue(); - Tasks taskType = Tasks.getEnumByName(task.getTask()); + Task taskType = getEnumByKey(Task.class, task.getTask()); if (taskType == null) { log.warn("Task skipped, {} task type not recognized", task.getTask()); return; @@ -89,23 +90,23 @@ public abstract class TaskManager implements EntryAddedListener schedulerAllTodays = plannerAllTodayMapStore.values(); Collection sortedSchedulers = - schedulerAllTodays.stream().sorted((o1, o2) -> (ACTIVE.equalsByName(o1.getTaskStatus()) && CANCEL.equalsByName(o2.getTaskStatus())) ? -1 : 0) + schedulerAllTodays.stream().sorted((o1, o2) -> (Active.equalsByKey(o1.getTaskStatus()) && Cancel.equalsByKey(o2.getTaskStatus())) ? -1 : 0) .collect(Collectors.toCollection(ArrayList::new)); for (PlannerAllToday schedulerAllToday : sortedSchedulers) { processTask(schedulerAllToday); @@ -155,8 +156,8 @@ public abstract class TaskManager implements EntryAddedListener