From 56e3507e2607b89dda7651ca5fb40b5a8d404160 Mon Sep 17 00:00:00 2001 From: etreshenkov Date: Mon, 5 Jun 2023 14:00:34 +0300 Subject: [PATCH 01/22] fix registry builders --- .../clearing/session/stage/impl/RegistryDepoBuilder.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryDepoBuilder.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryDepoBuilder.java index 0435e7905..fbd8dc2ce 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryDepoBuilder.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryDepoBuilder.java @@ -98,7 +98,7 @@ public class RegistryDepoBuilder implements IRegistryBuilder { boolean isTSelling = regDsgn.equals(RegistryDesignation.T) && side.isSell(); boolean isTBuying = regDsgn.equals(RegistryDesignation.T) && side.isBuy(); - if ((isOBuying || isTSelling) && !secondLeg || (isOSelling || isTBuying) && secondLeg) { + if ((isOSelling || isTBuying) && !secondLeg || (isOBuying || isTSelling) && secondLeg) { reg.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); reg.setBalanceDimension(BalanceDimension.MONY.getKey()); Currency currency = currencyImdg.getSingleObjectByFieldValues(Map.of("currencyCode", exec.getSettlementCurrency())); @@ -133,11 +133,11 @@ public class RegistryDepoBuilder implements IRegistryBuilder { reg.setSettledDebit((execDep).getFirstLegAmount()); } if (secondLeg) { - reg.setSettlementDate(execDep.getFirstLegSettlementDate()); - reg.setSettlementCode(execDep.getFirstLegSettlementCode()); - } else { reg.setSettlementDate(execDep.getSecondLegSettlementDate()); reg.setSettlementCode(execDep.getSecondLegSettlementCode()); + } else { + reg.setSettlementDate(execDep.getFirstLegSettlementDate()); + reg.setSettlementCode(execDep.getFirstLegSettlementCode()); } reg.setRefundDate(execDep.getSecondLegSettlementDate()); reg.setValueDate(execDep.getFirstLegSettlementDate()); From 415d5697d88f63546d12a7b79f54e747d50cc1d0 Mon Sep 17 00:00:00 2001 From: ialbert Date: Mon, 5 Jun 2023 17:06:45 +0300 Subject: [PATCH 02/22] session closing --- .../java/ru/spcex/clearing/session/stage/FinalMkrSession.java | 1 + .../ru/spcex/clearing/session/stage/IntermediateMkrSession.java | 1 + .../ru/spcex/clearing/session/stage/PrimaryAuctionB0Session.java | 1 + .../ru/spcex/clearing/session/stage/PrimaryAuctionBnSession.java | 1 + .../ru/spcex/clearing/session/stage/PrimaryAuctionT0Session.java | 1 + .../ru/spcex/clearing/session/stage/ReturnDepositSession.java | 1 + .../spcex/clearing/session/stage/SecondaryAuctionT0Session.java | 1 + 7 files changed, 7 insertions(+) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/FinalMkrSession.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/FinalMkrSession.java index c15a83f38..a63815c1d 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/FinalMkrSession.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/FinalMkrSession.java @@ -187,6 +187,7 @@ public class FinalMkrSession extends AbstractSession implements InitializingBean payload.setSection(currSession.getSection()); payload.setSessionId(currSession.getId()); runStage(TaskType.EndStageNotification, payload, endStageNotification); + endSession(); } } catch (StageException e) { //already logged diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/IntermediateMkrSession.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/IntermediateMkrSession.java index f16863c52..8fbb17d97 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/IntermediateMkrSession.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/IntermediateMkrSession.java @@ -192,6 +192,7 @@ public class IntermediateMkrSession extends AbstractSession implements Initializ payload.setSection(currSession.getSection()); payload.setSessionId(currSession.getId()); runStage(TaskType.EndStageNotification, payload, endStageNotification); + endSession(); } } catch (StageException e) { //already logged diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionB0Session.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionB0Session.java index 19b668450..1f64973bb 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionB0Session.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionB0Session.java @@ -180,6 +180,7 @@ public class PrimaryAuctionB0Session extends AbstractSession implements Initiali payload.setSection(currSession.getSection()); payload.setSessionId(currSession.getId()); runStage(TaskType.EndStageNotification, payload, endStageNotification); + endSession(); } } catch (StageException e) { //already logged diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionBnSession.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionBnSession.java index c3904fc86..445d976ae 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionBnSession.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionBnSession.java @@ -178,6 +178,7 @@ public class PrimaryAuctionBnSession extends AbstractSession implements Initiali payload.setSection(currSession.getSection()); payload.setSessionId(currSession.getId()); runStage(TaskType.EndStageNotification, payload, endStageNotification); + endSession(); } } catch (StageException e) { //already logged diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionT0Session.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionT0Session.java index c52bd0260..ebd12cdcd 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionT0Session.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionT0Session.java @@ -179,6 +179,7 @@ public class PrimaryAuctionT0Session extends AbstractSession implements Initiali payload.setSection(currSession.getSection()); payload.setSessionId(currSession.getId()); runStage(TaskType.EndStageNotification, payload, endStageNotification); + endSession(); } } catch (StageException e) { //already logged diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/ReturnDepositSession.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/ReturnDepositSession.java index 736ae4b4b..de4867b1c 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/ReturnDepositSession.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/ReturnDepositSession.java @@ -166,6 +166,7 @@ public class ReturnDepositSession extends AbstractSession implements Initializin payload.setSection(currSession.getSection()); payload.setSessionId(currSession.getId()); runStage(TaskType.EndStageNotification, payload, endStageNotification); + endSession(); } } catch (StageException e) { //already logged diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/SecondaryAuctionT0Session.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/SecondaryAuctionT0Session.java index d6f72a96b..d2c752416 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/SecondaryAuctionT0Session.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/SecondaryAuctionT0Session.java @@ -179,6 +179,7 @@ public class SecondaryAuctionT0Session extends AbstractSession implements Initia payload.setSection(currSession.getSection()); payload.setSessionId(currSession.getId()); runStage(TaskType.EndStageNotification, payload, endStageNotification); + endSession(); } } catch (StageException e) { //already logged From 9c3e8737a079a0ccf8b97c3d113d6eeb0d612ca9 Mon Sep 17 00:00:00 2001 From: aalehin Date: Mon, 5 Jun 2023 17:42:02 +0300 Subject: [PATCH 03/22] http://jira.mfd.msk:8088/browse/CLS-339 --- NotificationService set up --- .../balance/service/Sdf16Executor.java | 3 +- .../clearing/utility/config/KafkaConfig.java | 30 ++++++ .../utility/service/NotificationService.java | 94 +++++++++++++++++++ .../enumeration/NotificationStatus.java | 21 +++++ .../platform/messaging/domain/Consts.java | 7 +- .../NotificationFeedbackRequest.java | 17 ++++ .../utilities/NotificationUpdateRequest.java | 27 ++++++ 7 files changed, 197 insertions(+), 2 deletions(-) create mode 100644 clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/service/NotificationService.java create mode 100644 platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/NotificationStatus.java create mode 100644 platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/utilities/NotificationFeedbackRequest.java create mode 100644 platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/utilities/NotificationUpdateRequest.java diff --git a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/Sdf16Executor.java b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/Sdf16Executor.java index eb9080003..00df68179 100644 --- a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/Sdf16Executor.java +++ b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/Sdf16Executor.java @@ -51,7 +51,8 @@ public class Sdf16Executor extends AbstractExecutor { LoggingService errorLogger, ImdgProvider imdgProvider, AccountBalanceService accountBalanceService, - IMessageResolver errorResolver, KafkaSender kafaSender) { + IMessageResolver errorResolver, + KafkaSender kafaSender) { this.statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class); this.sdf17Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf17, SDf17.class); this.accountBalanceImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_AccountBalance, AccountBalance.class); diff --git a/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/config/KafkaConfig.java b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/config/KafkaConfig.java index 2dde7ea72..bb9abc2af 100644 --- a/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/config/KafkaConfig.java +++ b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/config/KafkaConfig.java @@ -3,13 +3,22 @@ package ru.spcex.clearing.utility.config; import org.apache.kafka.clients.consumer.Consumer; import org.apache.kafka.clients.producer.Producer; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.core.ProducerFactory; +import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.config.KafkaConsumerFactory; import ru.spcex.clearing.platform.messaging.config.KafkaProducerFactory; +import ru.spcex.clearing.platform.messaging.service.RequestInfo; +import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; import ru.spcex.clearing.utility.config.settings.UtilityServiceSettings; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgId; +import ru.spcex.platform.imdg.api.ImdgProvider; @Configuration public class KafkaConfig { @@ -26,4 +35,25 @@ public class KafkaConfig { return KafkaProducerFactory.producer(settings.getKafkaProducer()); } + + @Bean("kafkaTemplate") + public KafkaTemplate kafkaTemplate(ProducerFactory pf) { + return new KafkaTemplate<>(pf); + } + + @Autowired + @Bean + public KafkaSender kafkaSender(@Qualifier("kafkaTemplate") KafkaTemplate kafkaTemplate, + ImdgProvider imdgProvider) { + ImdgId imdgIdGenerator = imdgProvider.getImdgIdGenerator(); + return KafkaSender + .setup() + .setKafkaTemplate(kafkaTemplate) + .idGenerator(imdgIdGenerator::nextId) + .imdgProvider(s -> { + Imdg imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_RequestInfo, RequestInfo.class); + return imdg::insert; + }) + .build(); + } } diff --git a/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/service/NotificationService.java b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/service/NotificationService.java new file mode 100644 index 000000000..cb5b13b60 --- /dev/null +++ b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/service/NotificationService.java @@ -0,0 +1,94 @@ +package ru.spcex.clearing.utility.service; + +import org.apache.kafka.clients.consumer.Consumer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.misc.Notification; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.utilities.*; +import ru.spcex.clearing.platform.messaging.service.QueueConsumer; +import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.time.Instant; +import java.time.LocalDate; + +import static ru.spcex.clearing.platform.messaging.domain.Consts.*; +import static ru.spcex.platform.enumeration.NotificationStatus.PEND; +import static ru.spcex.platform.enumeration.ObjectType.statement; + +@Service +public class NotificationService extends QueueConsumer implements InitializingBean { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final Imdg notificationMap; + private final KafkaSender kafkaSender; + + @Autowired + public NotificationService(Consumer kafkaQueue, + ImdgProvider imdgProvider, + KafkaSender kafkaSender) { + super(kafkaQueue); + this.notificationMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Notification, Notification.class); + this.kafkaSender = kafkaSender; + } + + @Override + public void afterPropertiesSet() { + callback(NotificationNewRequest.class) + .setConsumer(this::notificationNewRequest) + .forDestination(NOTIFICATION_NEW, callbacks::put); + callback(NotificationUpdateRequest.class) + .setConsumer(this::notificationUpdateRequest) + .forDestination(NOTIFICATION_UPDATE, callbacks::put); + init(); + } + + private void notificationNewRequest(BaseRequest notificationNewRequestBaseRequest) { + log.info("Starting notificationNewRequest processing..."); + NotificationNewRequest request = notificationNewRequestBaseRequest.getRequestPayload(); + Notification notification = notificationBuilderFromNotificationNewRequest(request); + notificationMap.insert(notification); + log.info("NotificationNewRequest successfully processed! Generated id:\t{}", notification.getId()); + } + + private void notificationUpdateRequest(BaseRequest notificationUpdateRequestBaseRequest) { + log.info("Starting notificationUpdateRequest processing..."); + NotificationUpdateRequest request = notificationUpdateRequestBaseRequest.getRequestPayload(); + Notification notification = notificationMap.getSingleObjectByID(request.getId()); + notification.setNotificationStatus(request.getNotificationStatus()); + notification.setUpdated(Instant.now()); + notificationMap.update(notification); + sendFeedbackString(notification.getObjectType(), notification.getNotificationStatus()); + log.info("NotificationUpdateRequest successfully processed!"); + } + + private Notification notificationBuilderFromNotificationNewRequest(NotificationNewRequest request) { + Notification notification = new Notification(); + notification.setClearingDate(LocalDate.now()); + notification.setSenderId(request.getSenderId()); + notification.setAddresseeId(request.getAddresseeId()); + notification.setObjectType(request.getObjectType()); + notification.setObjectId(request.getObjectId()); + notification.setNotificationStatus(PEND.getKey()); + notification.setCreated(Instant.now()); + notification.setUpdated(Instant.now()); + return notification; + } + + private void sendFeedbackString(String objectType, String status){ + if (objectType.equalsIgnoreCase(statement.getKey())){ + kafkaSender.sendRequestToQueue(CLEARING_NOTIFICATION_FEEDBACK, buildFeedbackRequest(status)); + } + } + + private NotificationFeedbackRequest buildFeedbackRequest(String status){ + NotificationFeedbackRequest request = new NotificationFeedbackRequest(); + request.setNotificationStatus(status); + return request; + } +} diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/NotificationStatus.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/NotificationStatus.java new file mode 100644 index 000000000..553981867 --- /dev/null +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/NotificationStatus.java @@ -0,0 +1,21 @@ +package ru.spcex.platform.enumeration; + +import ru.spcex.platform.utils.enumeration.IEnumKey; + +public enum NotificationStatus implements IEnumKey { + PEND("PEND"), + CNCL("CNCL"), + ACPT("ACPT"), + READ("READ"); + + private final String key; + + NotificationStatus(String key) { + this.key = key; + } + + @Override + public String getKey() { + return key; + } +} 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 7101cbf0f..717696611 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 @@ -102,6 +102,11 @@ public interface Consts { String DESTINATION_TRADING_CLEARING_REGISTRY_UPDATE = "trading-clearing-registry-update"; String DESTINATION_TRADING_CLEARING_REGISTRY_BLOCK = "trading-clearing-registry-block"; + String CLEARING_NOTIFICATION_FEEDBACK = "clearing-notification-feedback"; + String NOTIFICATION_NEW = "notification-new"; + String NOTIFICATION_UPDATE = "notification-update"; + + String DESTINATION_SDF08_NEW = "s-df-08-new"; String DESTINATION_SDF02_NEW = "s-df-02-new"; @@ -137,7 +142,7 @@ public interface Consts { String BALANCE_ACCOUNT_UPDATE = "balance-account-update"; String CONTINUE_CLEARING = "continue-clearing"; String LAUNCHER_NEW = "launcher-new"; - String NOTIFICATION_NEW = "notification-new"; + String REQUEST_INFO_UPDATE = "request-info-update"; diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/utilities/NotificationFeedbackRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/utilities/NotificationFeedbackRequest.java new file mode 100644 index 000000000..f58461bfc --- /dev/null +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/utilities/NotificationFeedbackRequest.java @@ -0,0 +1,17 @@ +package ru.spcex.clearing.platform.messaging.domain.cud.utilities; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; + +public class NotificationFeedbackRequest { + @JsonProperty + public String notificationStatus; + + public String getNotificationStatus() { + return notificationStatus; + } + + public void setNotificationStatus(String notificationStatus) { + this.notificationStatus = notificationStatus; + } +} diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/utilities/NotificationUpdateRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/utilities/NotificationUpdateRequest.java new file mode 100644 index 000000000..3a14578d3 --- /dev/null +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/utilities/NotificationUpdateRequest.java @@ -0,0 +1,27 @@ +package ru.spcex.clearing.platform.messaging.domain.cud.utilities; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class NotificationUpdateRequest { + @JsonProperty + public Long id; + + @JsonProperty + public String notificationStatus; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getNotificationStatus() { + return notificationStatus; + } + + public void setNotificationStatus(String notificationStatus) { + this.notificationStatus = notificationStatus; + } +} From c10dd23a3829da5612bc14f657a908f4197ace07 Mon Sep 17 00:00:00 2001 From: ialbert Date: Mon, 5 Jun 2023 18:07:46 +0300 Subject: [PATCH 04/22] =?UTF-8?q?=D1=83=D0=B1=D1=80=D0=B0=D0=BB=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D1=83=20account#relationId?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=20=D0=B2=D0=B0=D0=BB=D0=B8=D0=B4=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20=D1=80=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=BD=D0=B0=20=D1=88=D0=B0=D0=B3=D0=B5=20=D1=81?= =?UTF-8?q?=D0=B5=D1=81=D1=81=D0=B8=D0=B8=20ObligationAdmission?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/validation/RegistryStep3ValidationRule.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/RegistryStep3ValidationRule.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/RegistryStep3ValidationRule.java index 7d1eb69d9..2b44ccdf3 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/RegistryStep3ValidationRule.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/RegistryStep3ValidationRule.java @@ -61,9 +61,8 @@ public enum RegistryStep3ValidationRule implements IValidationRule validate(ImdgValidationContext context) { Registry validatedObject = context.getValidatedObject(); - Relation relation = context.getStoredObject(RegistryValidationStored.Relation); Imdg accountImdg = context.obtainMap(IMDGDistributedNames.Map_Account, Account.class); - Account account = accountImdg.getSingleObjectBySQL("id = %d and relationId = %d".formatted(validatedObject.getAccountId(), relation.getId())); + Account account = accountImdg.getSingleObjectBySQL("id = %d".formatted(validatedObject.getAccountId())); if (account == null || (!IEnumKey.contains(account.getStatus(), ServiceStatus.Active, ServiceStatus.Reopened))) { return of(ClearingError.AccountNotActive, validatedObject.getAccountId()); } From ae37e501f66177b70076b7552dad8a027ad318cd Mon Sep 17 00:00:00 2001 From: AKurakin Date: Mon, 5 Jun 2023 18:12:26 +0300 Subject: [PATCH 05/22] =?UTF-8?q?securities-service=20http://jira.mfd.msk:?= =?UTF-8?q?8088/browse/CLS-258=20=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B7=D0=B0=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BF=D0=BE=D0=BB=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../securities/service/cud/EquitySecurityService.java | 1 + .../securities/service/cud/FixedIncomeSecurityService.java | 1 + .../securities/service/cud/MoneyMarketSecurityService.java | 3 +++ .../clearing/securities/service/AbstractServiceTest.java | 5 ++++- .../securities/service/MoneyMarketSecurityFactory.java | 4 ++++ 5 files changed, 13 insertions(+), 1 deletion(-) diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/EquitySecurityService.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/EquitySecurityService.java index 4b874f3f8..b55bbc06a 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/EquitySecurityService.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/EquitySecurityService.java @@ -101,6 +101,7 @@ public class EquitySecurityService extends QueueConsumer implements Initializing equity.setInstrumentType(req.getInstrumentType()); equity.setSecurityId(equity.getId()); equity.setCreated(Instant.now()); + equity.setUpdated(equity.getCreated()); try { transaction.beginTransaction(); Imdg equityImdg = transaction.getImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class); diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/FixedIncomeSecurityService.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/FixedIncomeSecurityService.java index 1753206d9..beee6b1e4 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/FixedIncomeSecurityService.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/FixedIncomeSecurityService.java @@ -105,6 +105,7 @@ public class FixedIncomeSecurityService extends QueueConsumer implements Initial fixedIncome.setInstrumentType(req.getInstrumentType()); fixedIncome.setSecurityId(fixedIncome.getId()); fixedIncome.setCreated(Instant.now()); + fixedIncome.setUpdated(fixedIncome.getCreated()); try { transaction.beginTransaction(); Imdg fixedIncomeImdg = transaction.getImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class); diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/MoneyMarketSecurityService.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/MoneyMarketSecurityService.java index 5fbf1afc2..3a2e38883 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/MoneyMarketSecurityService.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/MoneyMarketSecurityService.java @@ -135,7 +135,9 @@ public class MoneyMarketSecurityService extends QueueConsumer implements Initial mms.setIssuerId(req.getIssuerId()); mms.setSecurityId(mms.getId()); mms.setDescription(req.getDescription()); + mms.setConvention(req.getConvention()); mms.setCreated(Instant.now()); + mms.setUpdated(mms.getCreated()); if (req.getWorkflowStatus() == null) { mms.setWorkflowStatus(WorkflowStatus.Active.getKey()); } else { @@ -206,6 +208,7 @@ public class MoneyMarketSecurityService extends QueueConsumer implements Initial mms.setIssuerId(req.getIssuerId()); mms.setSecurityId(mms.getId()); mms.setDescription(req.getDescription()); + mms.setConvention(req.getConvention()); if (req.getWorkflowStatus() != null) { mms.setWorkflowStatus(req.getWorkflowStatus()); } diff --git a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/AbstractServiceTest.java b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/AbstractServiceTest.java index 85df3f211..75a4070f8 100644 --- a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/AbstractServiceTest.java +++ b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/AbstractServiceTest.java @@ -18,10 +18,12 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.securities.config.ErrorResolverConfig; import ru.spcex.clearing.securities.config.ValidationConfig; import ru.spcex.clearing.securities.service.cud.*; +import ru.spcex.clearing.securities.validation.ListingValidationProvider; import ru.spcex.clearing.securities.validation.ValidationProvider; import ru.spcex.clearing.test.MatcherFactory; import ru.spcex.clearing.test.config.ImdgTestConfig; import ru.spcex.clearing.test.config.KafkaTestConfig; +import ru.spcex.clearing.util.security.SecuritySelector; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; @@ -37,7 +39,8 @@ import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProv EquitySecurityService.class, FixedIncomeSecurityService.class, MoneyMarketSecurityService.class, - ListingService.class, + ListingService.class, ListingValidationProvider.class, + SecuritySelector.class, ImdgTestConfig.class, KafkaTestConfig.class, ValidationProvider.class, diff --git a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/MoneyMarketSecurityFactory.java b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/MoneyMarketSecurityFactory.java index 780630784..3e78596d8 100644 --- a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/MoneyMarketSecurityFactory.java +++ b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/MoneyMarketSecurityFactory.java @@ -24,6 +24,7 @@ class MoneyMarketSecurityFactory { private String fullName = "estat"; private String shortName = "esasdftat"; private String securitySymbol = "sdfafd"; + private String convention = "convention"; private String istin = "istin"; private String termType = AbstractServiceTest.termType; @@ -106,6 +107,7 @@ class MoneyMarketSecurityFactory { moneyMarketSecurity.setDescription(description); moneyMarketSecurity.setLotSize(lotSize); moneyMarketSecurity.setSecuritySymbol(securitySymbol); + moneyMarketSecurity.setConvention(convention); moneyMarketSecurity.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Active.getKey()); return moneyMarketSecurity; @@ -131,6 +133,7 @@ class MoneyMarketSecurityFactory { moneyMarketSecurityUpdateRequest.setIssuerId(issuerId); moneyMarketSecurityUpdateRequest.setDescription(description); moneyMarketSecurityUpdateRequest.setSecuritySymbol(securitySymbol); + moneyMarketSecurityUpdateRequest.setConvention(convention); moneyMarketSecurityUpdateRequest.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Active.getKey()); return moneyMarketSecurityUpdateRequest; @@ -160,6 +163,7 @@ class MoneyMarketSecurityFactory { keyRequest.setIsin(istin); keyRequest.setDescription(description); keyRequest.setSecuritySymbol(securitySymbol); + keyRequest.setConvention(convention); keyRequest.setWorkflowStatus(ru.spcex.platform.enumeration.Status.Active.getKey()); From 2254f94de7df37e78cade9e0e210680266930d47 Mon Sep 17 00:00:00 2001 From: akulikov Date: Mon, 5 Jun 2023 18:15:52 +0300 Subject: [PATCH 06/22] http://jira.mfd.msk:8088/browse/CLS-301 --- .../gatewayapi/config/LoggingInterceptor.java | 34 +++++++++++++++++++ .../gatewayapi/config/RestTemplateConfig.java | 5 ++- .../gatewayapi/request/InboundRequest.java | 12 ++++++- .../gatewayapi/service/GatewayService.java | 5 +-- .../src/main/resources/application.properties | 8 ++--- 5 files changed, 56 insertions(+), 8 deletions(-) create mode 100644 clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/LoggingInterceptor.java diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/LoggingInterceptor.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/LoggingInterceptor.java new file mode 100644 index 000000000..2c9d269fe --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/LoggingInterceptor.java @@ -0,0 +1,34 @@ +package ru.spcex.clearing.gatewayapi.config; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpRequest; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.util.StreamUtils; + +import java.io.IOException; +import java.nio.charset.Charset; + +public class LoggingInterceptor implements ClientHttpRequestInterceptor { + + private final Logger log = LoggerFactory.getLogger(getClass()); + + @Override + public ClientHttpResponse intercept(HttpRequest request, + byte[] body, + ClientHttpRequestExecution execution) throws IOException { + + log.info("Request URI: " + request.getURI()); + log.info("Request method: " + request.getMethod()); + log.info("Request body: " + new String(body, "UTF-8")); + + ClientHttpResponse response = execution.execute(request, body); + + log.info("Response status code: " + response.getStatusCode()); + log.info("Response body: " + StreamUtils.copyToString(response.getBody(), Charset.defaultCharset())); + + return response; + } +} \ No newline at end of file diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/RestTemplateConfig.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/RestTemplateConfig.java index 08d62366d..f92c5ab3f 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/RestTemplateConfig.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/RestTemplateConfig.java @@ -7,6 +7,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; import java.time.Duration; +import java.util.Collections; @Configuration public class RestTemplateConfig { @@ -19,9 +20,11 @@ public class RestTemplateConfig { @Bean("rest-template") public RestTemplate restTemplate() { - return builder + RestTemplate restTemplate = builder .setConnectTimeout(Duration.ofMillis(10000)) .setReadTimeout(Duration.ofMillis(40000)) .build(); + restTemplate.setInterceptors(Collections.singletonList(new LoggingInterceptor())); + return restTemplate; } } \ No newline at end of file diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/InboundRequest.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/InboundRequest.java index 539dc9e67..56d4801bf 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/InboundRequest.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/InboundRequest.java @@ -2,8 +2,10 @@ package ru.spcex.clearing.gatewayapi.request; 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.gatewayapi.config.deserializers.InstantDeserializer; +import ru.spcex.clearing.gatewayapi.config.serializers.InstantSerializer; import java.time.Instant; import java.util.UUID; @@ -32,6 +34,7 @@ public class InboundRequest { @JsonProperty("datetime") @JsonDeserialize(using = InstantDeserializer.class) + @JsonSerialize(using = InstantSerializer.class) @ApiModelProperty( value = "Передавать дату и время формирования JSON объекта в формате «ДД.ММ.ГГГГ ЧЧ:ММ:СС:ссс».", example = "01.01.2023 12:34:56:789" @@ -42,7 +45,14 @@ public class InboundRequest { @ApiModelProperty( value = "Секция (FOND или MKR)", example = "FOND" ) - private String section; + private String section = ""; + + // todo Пока так, чтобы отсылал null, в дальнейшем тип надо заменить на используемый в запросе. Возможно с помощью параметризации + @JsonProperty("content") + @ApiModelProperty( + value = "Контент", example = "null" + ) + private String content = null; public UUID getId() { diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/GatewayService.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/GatewayService.java index 124b86a6d..360545a3f 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/GatewayService.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/GatewayService.java @@ -22,6 +22,7 @@ import ru.spcex.platform.enumeration.Section; import ru.spcex.platform.enumeration.Task; import java.time.Instant; +import java.util.Collections; import java.util.Map; import java.util.UUID; @@ -66,6 +67,7 @@ public class GatewayService extends QueueConsumer implements InitializingBean { String url = formingInboundUrl(inboundServerSettings.getPathLOCM()); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON); + httpHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); InboundRequest inboundRequest = new InboundRequest(); inboundRequest.setId(UUID.randomUUID()); inboundRequest.setType("MEMBER_ON_DEMAND"); @@ -89,11 +91,10 @@ public class GatewayService extends QueueConsumer implements InitializingBean { String url = formingInboundUrl(inboundServerSettings.getPathLOCM()); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON); + httpHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); InboundRequest inboundRequest = new InboundRequest(); inboundRequest.setId(UUID.randomUUID()); inboundRequest.setType("ON_DEMAND"); - // todo здесь возникла проблема: место обработки LOCM одно, но в этом месте могут быть сформированы запросы с разными - // section, нужно уточнить как определять какой именно section отправлять в запросе inboundRequest.setSection(Section.FOND.getKey()); inboundRequest.setDatetime(Instant.now()); HttpEntity request = new HttpEntity<>(inboundRequest, httpHeaders); diff --git a/clearing-parent/gateway-api/src/main/resources/application.properties b/clearing-parent/gateway-api/src/main/resources/application.properties index a67693f48..0b44aca31 100644 --- a/clearing-parent/gateway-api/src/main/resources/application.properties +++ b/clearing-parent/gateway-api/src/main/resources/application.properties @@ -25,8 +25,8 @@ gateway-api.kafka-consumer.auto-offset-reset=latest gateway-api.kafka-consumer.linger-ms=1 gateway-api.kafka-consumer.buffer-memory=33554432 -gateway-api.inbound-server.enable-ssl=true +gateway-api.inbound-server.enable-ssl=false gateway-api.inbound-server.host=localhost -gateway-api.inbound-server.port=9999 -gateway-api.inbound-server.pathLOCM=/inbound_request -gateway-api.inbound-server.pathLOSC=/inbound_request \ No newline at end of file +gateway-api.inbound-server.port=8080 +gateway-api.inbound-server.pathLOCM=test_tomcat9/p1 +gateway-api.inbound-server.pathLOSC=test_tomcat9/p2 \ No newline at end of file From a036261319f6eb6e6c5e74a33c4282e54adf9cb3 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Mon, 5 Jun 2023 18:53:36 +0300 Subject: [PATCH 07/22] securities-service http://jira.mfd.msk:8088/browse/CLS-326 --- .../securities/errors/SecuritiesError.java | 6 ++-- .../validation/ListingValidationProvider.java | 32 ++++++++++++++++--- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/errors/SecuritiesError.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/errors/SecuritiesError.java index 836333d1b..8a4b572d2 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/errors/SecuritiesError.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/errors/SecuritiesError.java @@ -15,9 +15,11 @@ public enum SecuritiesError implements IErrorEnumId { CurrencyAlreadyExists(1015L), CurrencyNotFound(1016L), ListingAlreadyExist(1017L), // Инструмент на режиме %s уже существует - ListingNotFound(1017L), // Инструмент на режиме %s не найден + ListingNotFound(1018L), // Инструмент на режиме %s не найден MarketNotFound(1020L), // Режим %s не найден - ListingOnMMSCreatedBySystem(1021L), // Информиция об инструментах Денежного рынка на режимах добавляется автоматически + ListingOnMMSCreatedBySystem(1021L), // Информиция об инструментах Денежного рынка на режимах добавляется автоматически. + ListingOnMMSUpdatedBySystem(1022L), // Информиция об инструментах Денежного рынка на режимах изменяется автоматически. + ListingOnMMSDeletedBySystem(1023L), // Информиция об инструментах Денежного рынка на режимах блокируется автоматически. ; private final Long id; diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/ListingValidationProvider.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/ListingValidationProvider.java index 84158be33..7665bd599 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/ListingValidationProvider.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/ListingValidationProvider.java @@ -2,14 +2,15 @@ package ru.spcex.clearing.securities.validation; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.misc.Listing; -import ru.clearing.classes.statics.data.scheduler.PlannerTemplate; import ru.clearing.classes.statics.data.security.Security; +import ru.clearing.platform.dictionary.CurrencyCodeDictionary; +import ru.clearing.platform.dictionary.WorkflowStatusDictionary; 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.PlannerTemplateUpdateRequest; import ru.spcex.clearing.platform.messaging.domain.cud.securitites.*; import ru.spcex.clearing.util.security.SecuritySelector; import ru.spcex.clearing.securities.errors.SecuritiesError; +import ru.spcex.clearing.validation.common.rules.DictionaryPresentRule; import ru.spcex.clearing.validation.common.rules.IdPresentRule; import ru.spcex.clearing.validation.common.rules.SpecialIdPresentRule; import ru.spcex.platform.classes.base.SpcexObjectBase; @@ -31,6 +32,7 @@ import java.util.function.Function; @Component public class ListingValidationProvider { final Imdg workflowStatusDictionaryImdg; + final Imdg currencyCodeDictionaryImdg; final Imdg listingImdg; final Imdg marketImdg; final SecuritySelector securitySelector; @@ -39,6 +41,7 @@ public class ListingValidationProvider { public ListingValidationProvider(ImdgProvider imdgProvider, SecuritySelector securitySelector) { this.securitySelector = securitySelector; this.workflowStatusDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_WorkflowStatusDictionary, SpcexObjectBase.class); + this.currencyCodeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, SpcexObjectBase.class); this.listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class); this.marketImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Market, ru.clearing.classes.statics.data.misc.Market.class); } @@ -49,6 +52,7 @@ public class ListingValidationProvider { ImdgValidationContext context = new ImdgValidationContext<>(); context.setValidatedObject(listingRequest); context.addImdg(IMDGDistributedNames.Map_WorkflowStatusDictionary, workflowStatusDictionaryImdg); + context.addImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, currencyCodeDictionaryImdg); context.addImdg(IMDGDistributedNames.Map_Market, marketImdg); context.addImdg(IMDGDistributedNames.Map_Listing, listingImdg); return new ValidatorImpl>(context, @@ -62,6 +66,16 @@ public class ListingValidationProvider { SecuritiesError.RequiredFieldIsEmpty, SecuritiesError.MarketNotFound, true ), + DictionaryPresentRule.instance("tradingCurrency", ListingNewRequest::getTradingCurrency, + IMDGDistributedNames.Map_CurrencyCodeDictionary, CurrencyCodeDictionary.class, + SecuritiesError.RequiredFieldIsEmpty, SecuritiesError.WrongFieldValue, + false + ), + DictionaryPresentRule.instance("workflowStatus", ListingNewRequest::getWorkflowStatus, + IMDGDistributedNames.Map_WorkflowStatusDictionary, WorkflowStatusDictionary.class, + SecuritiesError.RequiredFieldIsEmpty, SecuritiesError.WrongFieldValue, + false + ), new NotSameActiveListing<>(ListingNewRequest::getSecurityId, ListingNewRequest::getMarket) ); }; @@ -77,7 +91,17 @@ public class ListingValidationProvider { new PresentById(IMDGDistributedNames.Map_Listing, SecuritiesError.ListingNotFound, true), new SecurityIdPresentRule("securityId", ListingUpdateRequest::getSecurityId, (Security security) -> - InstrumentType.RATE.equalsByKey(security.getInstrumentType()) ? SecuritiesError.ListingOnMMSCreatedBySystem : null + InstrumentType.RATE.equalsByKey(security.getInstrumentType()) ? SecuritiesError.ListingOnMMSUpdatedBySystem : null + ), + DictionaryPresentRule.instance("tradingCurrency", ListingUpdateRequest::getTradingCurrency, + IMDGDistributedNames.Map_CurrencyCodeDictionary, CurrencyCodeDictionary.class, + SecuritiesError.RequiredFieldIsEmpty, SecuritiesError.WrongFieldValue, + false + ), + DictionaryPresentRule.instance("workflowStatus", ListingUpdateRequest::getWorkflowStatus, + IMDGDistributedNames.Map_WorkflowStatusDictionary, WorkflowStatusDictionary.class, + SecuritiesError.RequiredFieldIsEmpty, SecuritiesError.WrongFieldValue, + false ) ); }; @@ -102,7 +126,7 @@ public class ListingValidationProvider { Security security = securitySelector.selectSecurityById(listing.getSecurityId()); if (security != null) { if (InstrumentType.RATE.equalsByKey(security.getInstrumentType())) - return SecuritiesError.ListingOnMMSCreatedBySystem; + return SecuritiesError.ListingOnMMSDeletedBySystem; } return null; } From bff41c81f91677ef5f137cc79d774f84ef1d75e8 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Mon, 5 Jun 2023 18:58:22 +0300 Subject: [PATCH 08/22] securities-service . --- .../securities/validation/ListingValidationProvider.java | 1 + 1 file changed, 1 insertion(+) diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/ListingValidationProvider.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/ListingValidationProvider.java index 7665bd599..8a30eedbf 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/ListingValidationProvider.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/ListingValidationProvider.java @@ -86,6 +86,7 @@ public class ListingValidationProvider { ImdgValidationContext context = new ImdgValidationContext<>(); context.setValidatedObject(mmsRequest); context.addImdg(IMDGDistributedNames.Map_WorkflowStatusDictionary, workflowStatusDictionaryImdg); + context.addImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, currencyCodeDictionaryImdg); context.addImdg(IMDGDistributedNames.Map_Listing, listingImdg); return new ValidatorImpl<>(context, new PresentById(IMDGDistributedNames.Map_Listing, SecuritiesError.ListingNotFound, true), From 3db1ef31b84a68a5ccf4f6db1151350c8158b61f Mon Sep 17 00:00:00 2001 From: AKurakin Date: Mon, 5 Jun 2023 19:32:10 +0300 Subject: [PATCH 09/22] =?UTF-8?q?meta=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=BE=D0=BF=D0=B5=D1=87=D0=B0=D1=82=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/meta/data.xml | 1138 ++--- .../src/main/resources/meta/meta.json | 2 +- .../src/main/resources/meta/meta.xml | 4220 ++++++++--------- .../backend-api/src/test/resources/meta.json | 2 +- .../db-scripts/src/main/resources/db/DATA.sql | 10 +- 5 files changed, 2686 insertions(+), 2686 deletions(-) diff --git a/clearing-parent/backend-api/src/main/resources/meta/data.xml b/clearing-parent/backend-api/src/main/resources/meta/data.xml index bea743845..66cecd1dd 100644 --- a/clearing-parent/backend-api/src/main/resources/meta/data.xml +++ b/clearing-parent/backend-api/src/main/resources/meta/data.xml @@ -1,570 +1,570 @@ - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/clearing-parent/backend-api/src/main/resources/meta/meta.json b/clearing-parent/backend-api/src/main/resources/meta/meta.json index 56a0696e4..afebb94c7 100644 --- a/clearing-parent/backend-api/src/main/resources/meta/meta.json +++ b/clearing-parent/backend-api/src/main/resources/meta/meta.json @@ -2079,7 +2079,7 @@ "fields": [ {"code": "companyId", - "type": 1,"name": "Наименование компании","shortname": "Компании","link": "company","linkCode": "shortName","required": true,"enabled": false + "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName","required": true,"enabled": false } , {"code": "documentType", diff --git a/clearing-parent/backend-api/src/main/resources/meta/meta.xml b/clearing-parent/backend-api/src/main/resources/meta/meta.xml index 0cf8db772..81fc3a0ad 100644 --- a/clearing-parent/backend-api/src/main/resources/meta/meta.xml +++ b/clearing-parent/backend-api/src/main/resources/meta/meta.xml @@ -1,2111 +1,2111 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - -
- - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - -
- - - - - - - - - - -
- - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -