From 6ad105d04a3caf9519e7b584ca6ee270caa75867 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Fri, 26 May 2023 16:13:48 +0300 Subject: [PATCH 01/35] company-service http://jira.mfd.msk:8088/browse/CLS-284 hot fix relation NPE --- .../company/service/RelationService.java | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/RelationService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/RelationService.java index 1e206c19f..491107d32 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/RelationService.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/RelationService.java @@ -287,20 +287,24 @@ public class RelationService extends QueueConsumer implements InitializingBean { ClearingMemberCategory clearingMemberCategory = transaction.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class).getSingleObjectByFieldValues(Map.of("companyId", companyId)); WorkflowStatus workflowStatus = getEnumByKey(WorkflowStatus.class, company.getWorkflowStatus()); - ClearingCategory clearingCategory = getEnumByKey(ClearingCategory.class, clearingMemberCategory.getClearingMemberCategory()); - String serviceStatus; - switch (Objects.requireNonNull(clearingCategory)) { - case B: - case I: - case V: - serviceStatus = MKR.getKey(); - break; - case C: - case F: - serviceStatus = FOND.getKey(); - break; - default: - throw new IllegalStateException("Illegal state of clearingCategory"); + String serviceStatus = null; + if (clearingMemberCategory == null) { + log.debug("clearingMemberCategory not found for companyId={}", companyId); + } else { + ClearingCategory clearingCategory = getEnumByKey(ClearingCategory.class, clearingMemberCategory.getClearingMemberCategory()); + switch (Objects.requireNonNull(clearingCategory)) { + case B: + case I: + case V: + serviceStatus = MKR.getKey(); + break; + case C: + case F: + serviceStatus = FOND.getKey(); + break; + default: + throw new IllegalStateException("Illegal state of clearingCategory"); + } } relation.setCreated(Instant.now()); From a722c869073a9d7e0e7df2906cd172a57123ccd4 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Fri, 26 May 2023 16:16:08 +0300 Subject: [PATCH 02/35] SDF01 processing --- .../java/ru/spcex/clearing/service/executors/Sdf01Executor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java index 046f5a9e7..1fd894fa6 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java @@ -137,7 +137,7 @@ public class Sdf01Executor extends AbstractExecutor { SDf02 sdf02New = createSuccessSdf02(sdf01, generationIdForGroup); //fixme тоже мб убрать sdf02Imdg.insert(sdf02New); stmt.setOutSDfId(sdf02New.getId()); - statementImdg.update(stmt); + statementImdg.insert(stmt); Optional err = validateActiveness(company, account); if (err.isEmpty()) { From 8e9f6143e48e3491cd8a42c04e94ccbe173a7d3a Mon Sep 17 00:00:00 2001 From: AKurakin Date: Fri, 26 May 2023 16:32:28 +0300 Subject: [PATCH 03/35] swt-exporter http://jira.mfd.msk:8088/browse/CLS-317 z-distr --- z-distr/src/main/resources/distr/bin/launch_all.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/z-distr/src/main/resources/distr/bin/launch_all.sh b/z-distr/src/main/resources/distr/bin/launch_all.sh index 08b924be8..539b8a7ae 100644 --- a/z-distr/src/main/resources/distr/bin/launch_all.sh +++ b/z-distr/src/main/resources/distr/bin/launch_all.sh @@ -8,6 +8,7 @@ cd /opt/mfd/clearing/bin /opt/mfd/clearing/bin/clearing-service.sh /opt/mfd/clearing/bin/dbf-exporter.sh /opt/mfd/clearing/bin/lim-exporter.sh +/opt/mfd/clearing/bin/swt-exporter.sh /opt/mfd/clearing/bin/dbf-importer.sh /opt/mfd/clearing/bin/trade-importer.sh /opt/mfd/clearing/bin/securities-service.sh From 878ec0fcbb6e034f4fd3381334d43f004959e9cf Mon Sep 17 00:00:00 2001 From: aalehin Date: Fri, 26 May 2023 16:33:19 +0300 Subject: [PATCH 04/35] sh update --- z-distr/src/main/resources/distr/bin/kill_all.sh | 1 + z-distr/src/main/resources/distr/bin/launch_all.sh | 1 + z-distr/src/main/resources/distr/bin/registry-service.sh | 9 +++++++++ 3 files changed, 11 insertions(+) create mode 100644 z-distr/src/main/resources/distr/bin/registry-service.sh diff --git a/z-distr/src/main/resources/distr/bin/kill_all.sh b/z-distr/src/main/resources/distr/bin/kill_all.sh index 05a6100e4..cf91cdbe9 100644 --- a/z-distr/src/main/resources/distr/bin/kill_all.sh +++ b/z-distr/src/main/resources/distr/bin/kill_all.sh @@ -15,5 +15,6 @@ kill -9 $(ps -ef | grep java | grep securities-service.jar | awk '{print $2}') kill -9 $(ps -ef | grep java | grep utility-service.jar | awk '{print $2}') kill -9 $(ps -ef | grep java | grep scheduler-service.jar | awk '{print $2}') kill -9 $(ps -ef | grep java | grep reports-service.jar | awk '{print $2}') +kill -9 $(ps -ef | grep java | grep registry-service.jar | awk '{print $2}') diff --git a/z-distr/src/main/resources/distr/bin/launch_all.sh b/z-distr/src/main/resources/distr/bin/launch_all.sh index 539b8a7ae..1cad17024 100644 --- a/z-distr/src/main/resources/distr/bin/launch_all.sh +++ b/z-distr/src/main/resources/distr/bin/launch_all.sh @@ -15,3 +15,4 @@ cd /opt/mfd/clearing/bin /opt/mfd/clearing/bin/utility-service.sh /opt/mfd/clearing/bin/scheduler-service.sh /opt/mfd/clearing/bin/reports-service.sh +/opt/mfd/clearing/bin/registry-service.sh diff --git a/z-distr/src/main/resources/distr/bin/registry-service.sh b/z-distr/src/main/resources/distr/bin/registry-service.sh new file mode 100644 index 000000000..f488016e0 --- /dev/null +++ b/z-distr/src/main/resources/distr/bin/registry-service.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +CLEARING_HOME=/opt/mfd/clearing/ +cd $CLEARING_HOME/bin + +CMD="java -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7880 -jar registry-service.jar --spring.config.location=$CLEARING_HOME/settings/registry-service/" + +$CMD >/dev/null 2>&1 & + From 80c2b7a2727e33b72dd5faa30b8ed8ddac1b6a89 Mon Sep 17 00:00:00 2001 From: ialbert Date: Fri, 26 May 2023 16:50:58 +0300 Subject: [PATCH 05/35] controller for sending kafka messages --- .../test/AnyKafkaMessageAction.java | 60 +++++++++++++++++ .../controller/test/KafkaApiController.java | 67 +++++++++++++++++++ 2 files changed, 127 insertions(+) create mode 100644 clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/test/AnyKafkaMessageAction.java create mode 100644 clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/test/KafkaApiController.java diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/test/AnyKafkaMessageAction.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/test/AnyKafkaMessageAction.java new file mode 100644 index 000000000..5de8b4cb0 --- /dev/null +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/test/AnyKafkaMessageAction.java @@ -0,0 +1,60 @@ +package ru.spcex.clearing.backendapi.controller.test; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonRawValue; +import com.fasterxml.jackson.databind.JsonNode; +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.registry.TradingClearingRegistryNewRequest; + +public class AnyKafkaMessageAction implements IAction { + @ApiModelProperty(value = "полное имя класса payload для BaseRequest", example = "ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest") + @JsonProperty + private String fullClassName; + @JsonProperty + private String topicName; + @JsonRawValue + public String json; + + @JsonProperty("json") + private void unpackRawJson(JsonNode json) { + this.json = json.toString(); + } + + @Override + public TradingClearingRegistryNewRequest toRequest() { + var req = new TradingClearingRegistryNewRequest(); + return req; + } + + @ApiModelProperty(hidden = true) + @Override + public ActionType getActionType() { + return ActionType.SYSTEM; + } + + public String getFullClassName() { + return fullClassName; + } + + public void setFullClassName(String fullClassName) { + this.fullClassName = fullClassName; + } + + public String getTopicName() { + return topicName; + } + + public void setTopicName(String topicName) { + this.topicName = topicName; + } + + public String getJson() { + return json; + } + + public void setJson(String json) { + this.json = json; + } +} diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/test/KafkaApiController.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/test/KafkaApiController.java new file mode 100644 index 000000000..335e0025f --- /dev/null +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/test/KafkaApiController.java @@ -0,0 +1,67 @@ +package ru.spcex.clearing.backendapi.controller.test; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Controller; +import org.springframework.util.ClassUtils; +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.spcex.clearing.backendapi.errors.BackEndError; +import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; +import ru.spcex.platform.utils.enumeration.EnumMessage; +import ru.spcex.platform.utils.error.ValidationException; +import ru.spcex.platform.utils.text.TextUtil; + +@Controller +@RequestMapping("/anonymous/kafka-api") +public class KafkaApiController { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final KafkaSender kafkaSender; + private static final ObjectMapper json = new ObjectMapper(); + static { + } + + @Autowired + public KafkaApiController(KafkaSender kafkaSender) { + this.kafkaSender = kafkaSender; + } + + @ApiOperation(value = "Test backend-api availability.") + @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = String.class)}) + @RequestMapping(method = RequestMethod.POST, path = "/any/message", produces = MediaType.TEXT_PLAIN_VALUE) + @ResponseBody + public String processGet(@ApiParam(value = "Параметры команды в JSON формате.", required = true) + @RequestBody AnyKafkaMessageAction bankAccountNewAction) throws ClassNotFoundException, ValidationException, JsonProcessingException { + log.info("Call test method for backend-api controller"); + validate(bankAccountNewAction); + Class parameterType = ClassUtils.forName(bankAccountNewAction.getFullClassName(), ClassUtils.getDefaultClassLoader()); + JavaType requestType = json.getTypeFactory().constructSimpleType(parameterType, null); + Object obj = json.readValue(bankAccountNewAction.getJson(), requestType); + Long idOfBaseRequestMessage = kafkaSender.sendRequestToQueue(bankAccountNewAction.getTopicName(), obj); + return "success: baseRequest.id = " + idOfBaseRequestMessage; + } + + private void validate(AnyKafkaMessageAction bankAccountNewAction) throws ValidationException { + if (TextUtil.isEmpty(bankAccountNewAction.getTopicName())) { + throw new ValidationException(new EnumMessage(BackEndError.ValidationError, "topicName")); + } + if (TextUtil.isEmpty(bankAccountNewAction.getFullClassName())) { + throw new ValidationException(new EnumMessage(BackEndError.ValidationError, "fullClassName")); + } + if (TextUtil.isEmpty(bankAccountNewAction.getJson())) { + throw new ValidationException(new EnumMessage(BackEndError.ValidationError, "json")); + } + } + +} From a342c01fd9fcad060326e7a1fe8fcf57260b7aac Mon Sep 17 00:00:00 2001 From: aalehin Date: Fri, 26 May 2023 16:53:38 +0300 Subject: [PATCH 06/35] bug fix --- .../src/main/resources/application.properties | 3 +++ .../registry-service/src/main/resources/logback.xml | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/clearing-parent/registry-service/src/main/resources/application.properties b/clearing-parent/registry-service/src/main/resources/application.properties index f0eee0ce8..49b0bb9c0 100644 --- a/clearing-parent/registry-service/src/main/resources/application.properties +++ b/clearing-parent/registry-service/src/main/resources/application.properties @@ -1,7 +1,9 @@ spring.main.web-application-type=none + registry-service.hazelcast.cluster-members=127.0.0.1:5701 registry-service.hazelcast.login=dev registry-service.hazelcast.password=dev-pass + registry-service.kafka-consumer.bootstrap-servers=localhost:9092 registry-service.kafka-consumer.group-id=dev-group-registry-service registry-service.kafka-consumer.enable-auto-commit=true @@ -9,6 +11,7 @@ registry-service.kafka-consumer.session-timeout-ms=30000 registry-service.kafka-consumer.auto-offset-reset=latest registry-service.kafka-consumer.linger-ms=1 registry-service.kafka-consumer.buffer-memory=33554432 + registry-service.kafka-producer.bootstrap-servers=localhost:9092 registry-service.kafka-producer.acks=all registry-service.kafka-producer.retries=0 diff --git a/clearing-parent/registry-service/src/main/resources/logback.xml b/clearing-parent/registry-service/src/main/resources/logback.xml index e3e8a4454..684da9158 100644 --- a/clearing-parent/registry-service/src/main/resources/logback.xml +++ b/clearing-parent/registry-service/src/main/resources/logback.xml @@ -8,7 +8,7 @@ - ./logs/utility-service.log + ./logs/registry-service.log %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n @@ -16,7 +16,7 @@ - ./logs/utility-service.%i.log + ./logs/registry-service.%i.log 1 10 From 7f542d6736be7f9f30e95e566dae021b3b409c63 Mon Sep 17 00:00:00 2001 From: ialbert Date: Fri, 26 May 2023 16:56:08 +0300 Subject: [PATCH 07/35] kafkaSender for backend-api --- .../backendapi/config/KafkaConfig.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/config/KafkaConfig.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/config/KafkaConfig.java index 9046c9bc8..409aee180 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/config/KafkaConfig.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/config/KafkaConfig.java @@ -1,5 +1,8 @@ package ru.spcex.clearing.backendapi.config; +import org.apache.kafka.clients.admin.AdminClient; +import org.apache.kafka.clients.admin.AdminClientConfig; +import org.apache.kafka.clients.admin.NewTopic; import org.apache.kafka.clients.consumer.Consumer; import org.apache.kafka.clients.consumer.MockConsumer; import org.apache.kafka.clients.consumer.OffsetResetStrategy; @@ -9,9 +12,23 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.core.ProducerFactory; import ru.spcex.clearing.backendapi.config.element.BackendApiSettings; import ru.spcex.clearing.platform.messaging.config.KafkaConsumerFactory; import ru.spcex.clearing.platform.messaging.config.KafkaProducerFactory; +import ru.spcex.clearing.platform.messaging.config.element.KafkaProducerSettings; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; +import ru.spcex.platform.imdg.api.ImdgId; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import javax.annotation.PostConstruct; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; +import java.util.concurrent.ExecutionException; @Configuration public class KafkaConfig { @@ -23,6 +40,31 @@ public class KafkaConfig { return KafkaProducerFactory.producer(settings.getKafkaProducer()); } + + + @Bean + public ProducerFactory pf(BackendApiSettings settings) { + KafkaProducerSettings kafkaSettings = settings.getKafkaProducer(); + return KafkaProducerFactory.producerFactory(kafkaSettings); + } + + @Bean + public KafkaTemplate kafkaTemplateS(ProducerFactory pf) { + return new KafkaTemplate<>(pf); + } + + @Profile("!kafkaDisabled") + @Autowired + @Bean + public KafkaSender kafkaSender(KafkaTemplate kafkaTemplate, ImdgProvider imdgProvider) { + ImdgId imdgIdGenerator = imdgProvider.getImdgIdGenerator(); + return KafkaSender.setup() + .saveRequestInfo(false) + .setKafkaTemplate(kafkaTemplate) + .idGenerator(imdgIdGenerator::nextId) + .build(); + } + @Profile("kafkaDisabled") @Bean public MockProducer createMockProducer() { From b4a330e713d5c9069dfdc6b392465b9896b2f636 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Fri, 26 May 2023 17:13:54 +0300 Subject: [PATCH 08/35] fix bn session --- .../clearing/service/EventsReceiver.java | 5 +--- .../stage/PrimaryAuctionBnSession.java | 24 ++++++++++++++----- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/EventsReceiver.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/EventsReceiver.java index 0fcbdca38..05f9fe61e 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/EventsReceiver.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/EventsReceiver.java @@ -62,11 +62,8 @@ public class EventsReceiver extends QueueConsumer implements InitializingBean { .setConsumer(primaryAuctionBnSession::runSession) .forDestination(Task.startOfClearing.topic(), callbacks::put); callback(Object.class) - .setConsumer(primaryAuctionBnSession::continueSessionFirstPart) + .setConsumer(primaryAuctionBnSession::continueSession) .forDestination(Consts.CONTINUE_SESSION_BN_FIRST_PART, callbacks::put); - callback(Object.class) - .setConsumer(primaryAuctionBnSession::continueSessionSecondPart) - .forDestination(Consts.CONTINUE_SESSION_BN_SECOND_PART, callbacks::put); callback(Object.class) .setConsumer(event -> clearingService.executeSTrade()) 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 dd081532c..b1ba706fc 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 @@ -89,20 +89,30 @@ public class PrimaryAuctionBnSession extends AbstractSession implements Initiali } } - public void continueSessionFirstPart(BaseRequest req) { + public void continueSession(BaseRequest req) { try { if (!checkStage(TaskType.StartRevise)) { log.error("cannot continue session, current stage is {}", currStage.get()); throw new StageException(); } -// //stage 0 -// runStage(TaskType.ContinueRevise, balanceRevise); + if (checkStage(TaskType.StartRevise)) { + firstPart(req); + } else if (checkStage(TaskType.FormingPaymentInstruction)) { + finishPart(req); + } + } catch (StageException e) { + //already logged + } + } + + private void firstPart(BaseRequest req) { + try { //stage 1 StageResult> dealsPreparationResult; { DealsPreparePayload payload = new DealsPreparePayload(); payload.setSessionId(currSession.getId()); - dealsPreparationResult = runStage(TaskType.DealsPrepare , payload, dealsPrepare); + dealsPreparationResult = runStage(TaskType.DealsPrepare, payload, dealsPrepare); } //stage 2 runStage(TaskType.RequirementsAndObligationsCreate, dealsPreparationResult.getStageResult(), requirementsAndObligationCreation); @@ -129,18 +139,20 @@ public class PrimaryAuctionBnSession extends AbstractSession implements Initiali } } - public void continueSessionSecondPart(BaseRequest req) { + + public void finishPart(BaseRequest req) { try { if (!checkStage(TaskType.FormingPaymentInstruction)) { log.error("cannot continue session, current stage is {}", currStage.get()); throw new StageException(); } - //stage 9 + //stage 10 { FinishingSessionPayload payload = new FinishingSessionPayload(); payload.setSessionId(currSession.getId()); runStage(TaskType.FinishingSession, payload, finishingSession); } + //stage 11 { EndStageNotificationPayload payload = new EndStageNotificationPayload(); payload.setSection(currSession.getSection()); From 3a36df08ebce7e56d2b060e192fa58dfe36eed35 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Fri, 26 May 2023 17:19:24 +0300 Subject: [PATCH 09/35] =?UTF-8?q?scheduler-service=20http://jira.mfd.msk:8?= =?UTF-8?q?088/browse/CLS-336=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B5=20Task?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/ru/spcex/platform/enumeration/Task.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Task.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Task.java index 422a649ae..cbf47b0f7 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Task.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Task.java @@ -32,6 +32,11 @@ public enum Task implements IEnumKey { createRegistry_GBRR("GBRR"),//Сформировать реестр на текущий день createRegistry_GORD("GORD"), // Формирование реестра распоряжений, направленных расчетному депозитарию createRegistry_GORR("GORR"), // Формирование реестра распоряжений, направленных расчетному депозитарию + createRegistry_GCMR("GCMR"), // Формирование реестра участников клиринга + createRegistry_GSRR("GSRR"), // Формирование реестра отправленных отчетов + createRegistry_GACA("GACA"), // Создание файла остатков CSV по клиринговым счетам + forming_CMBA("CMBA"), // Формирование распоряжения на перевод с ТБС + creatingFile_GAIA("GAIA"), // Создание файла остатков CSV по внутренним информацион.счетам ; private final String key; From afee32f2d564b025500f97e129647511d6864c70 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Fri, 26 May 2023 18:14:15 +0300 Subject: [PATCH 10/35] =?UTF-8?q?=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D1=8B?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D0=BE=D1=82=D0=BB=D0=B0=D0=B4=D0=BA?= =?UTF-8?q?=D0=B8=20sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- z-distr/src/main/resources/distr/bin/backend-api.sh | 2 +- z-distr/src/main/resources/distr/bin/registry-service.sh | 2 +- z-distr/src/main/resources/distr/bin/scheduler-service.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/z-distr/src/main/resources/distr/bin/backend-api.sh b/z-distr/src/main/resources/distr/bin/backend-api.sh index 986d79144..f60c40fe3 100644 --- a/z-distr/src/main/resources/distr/bin/backend-api.sh +++ b/z-distr/src/main/resources/distr/bin/backend-api.sh @@ -3,7 +3,7 @@ CLEARING_HOME=/opt/mfd/clearing/ cd $CLEARING_HOME/bin -CMD="java -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7020 -jar backend-api.jar --spring.config.location=$CLEARING_HOME/settings/backend-api/" +CMD="java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:7020 -jar backend-api.jar --spring.config.location=$CLEARING_HOME/settings/backend-api/" $CMD >/dev/null 2>&1 & diff --git a/z-distr/src/main/resources/distr/bin/registry-service.sh b/z-distr/src/main/resources/distr/bin/registry-service.sh index f488016e0..ec3292938 100644 --- a/z-distr/src/main/resources/distr/bin/registry-service.sh +++ b/z-distr/src/main/resources/distr/bin/registry-service.sh @@ -3,7 +3,7 @@ CLEARING_HOME=/opt/mfd/clearing/ cd $CLEARING_HOME/bin -CMD="java -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7880 -jar registry-service.jar --spring.config.location=$CLEARING_HOME/settings/registry-service/" +CMD="java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:7880 -jar registry-service.jar --spring.config.location=$CLEARING_HOME/settings/registry-service/" $CMD >/dev/null 2>&1 & diff --git a/z-distr/src/main/resources/distr/bin/scheduler-service.sh b/z-distr/src/main/resources/distr/bin/scheduler-service.sh index c7eb827ce..84f68a365 100644 --- a/z-distr/src/main/resources/distr/bin/scheduler-service.sh +++ b/z-distr/src/main/resources/distr/bin/scheduler-service.sh @@ -3,7 +3,7 @@ CLEARING_HOME=/opt/mfd/clearing/ cd $CLEARING_HOME/bin -CMD="java -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7080 -jar scheduler-service.jar --spring.config.location=$CLEARING_HOME/settings/scheduler-service/" +CMD="java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:7080 -jar scheduler-service.jar --spring.config.location=$CLEARING_HOME/settings/scheduler-service/" $CMD >/dev/null 2>&1 & From 2c268d84fa0e6206bda0708297df28486d23a71c Mon Sep 17 00:00:00 2001 From: ialbert Date: Fri, 26 May 2023 18:51:17 +0300 Subject: [PATCH 11/35] SDF01 executor --- .../service/executors/Sdf01Executor.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java index 1fd894fa6..e684df89f 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java @@ -150,14 +150,15 @@ public class Sdf01Executor extends AbstractExecutor { registryImdg.insert(registry); return registry; }; - Optional reg = findReg(stmt); - Registry regFinal; + Registry rgs; if (reg.isPresent()) { - update.accept(reg.get()); - regFinal = reg.get(); + rgs = reg.get(); + updateReg(stmt, rgs); + registryImdg.update(rgs); } else { - regFinal = create.get(); + rgs = createRegistryByStatement(stmt, company, account); + registryImdg.insert(rgs); } //todo //1. stmt.setOperationStatus в зависимости от diffBalance = 0 @@ -292,7 +293,7 @@ public class Sdf01Executor extends AbstractExecutor { } } rgs.setCheckBalance(BigDecimalUtil.safeBD(statement.getAmount())); - rgs.setCheckBalance(rgs.getCheckBalance().negate()); + rgs.setDiffBalance(rgs.getCheckBalance().negate()); rgs.setBalanceDimension(BalanceDimension.MONY.getKey()); //fixme ! смотри описание и ссылка на начало html'ки //fixme !rgs.setSettlementCode(); rgs.setTradingDate(statement.getSettlementDate()); //fixme ! today ? @@ -311,6 +312,10 @@ public class Sdf01Executor extends AbstractExecutor { case in -> r.setBalance(r.getBalance().add(s.getAmount())); case out -> r.setBalance(r.getBalance().subtract(s.getAmount())); } + r.setCheckBalance(s.getAmount()); + BigDecimal balance = BigDecimalUtil.safeBD(r.getBalance()); + BigDecimal checkBalance = BigDecimalUtil.safeBD(r.getCheckBalance()); + r.setDiffBalance(balance.subtract(checkBalance)); r.setUpdated(Instant.now()); } From 2245e1313c424dc925631960255fc742162293f2 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Fri, 26 May 2023 17:53:44 +0300 Subject: [PATCH 12/35] fix filling Execution.Market --- .../clearing/service/ExecutionFondComponent.java | 13 +++++++++++-- .../session/stage/PrimaryAuctionB0Session.java | 2 +- .../session/stage/PrimaryAuctionBnSession.java | 8 ++++++-- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/ExecutionFondComponent.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/ExecutionFondComponent.java index b6abd2ca6..79dd42b20 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/ExecutionFondComponent.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/ExecutionFondComponent.java @@ -23,7 +23,10 @@ import ru.spcex.clearing.platform.messaging.domain.cud.registry.DealRegisterNewR import ru.spcex.clearing.platform.messaging.domain.cud.registry.ExecutionType; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; import ru.spcex.clearing.service.validation.ValidationStored; -import ru.spcex.platform.enumeration.*; +import ru.spcex.platform.enumeration.CurrencyCode; +import ru.spcex.platform.enumeration.MoneyFlowSide; +import ru.spcex.platform.enumeration.Section; +import ru.spcex.platform.enumeration.Side; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.utils.enumeration.*; @@ -47,6 +50,7 @@ public class ExecutionFondComponent { private final Imdg executionFondImdg; private final Imdg listingImdg; private final Imdg clientCodeImdg; + private final Imdg marketImdg; //fixme ждать ТЗ Long tradeNum; @@ -64,6 +68,7 @@ public class ExecutionFondComponent { this.executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); this.listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class); this.clientCodeImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClientCode, ClientCode.class); + this.marketImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Market, ru.clearing.classes.statics.data.misc.Market.class); this.stradesValidator = stradesValidator; this.kafkaSender = kafkaSender; @@ -173,7 +178,11 @@ public class ExecutionFondComponent { eFond.setExchangeExecutionId(sTrades.getTradeNum()); eFond.setExchangeExecutionTime(sTrades.getTradeDateTime()); eFond.setTradingClearingRegistryId(rgstr.getId()); - eFond.setMarket(Market.fond.getKey()); + + //todo можем ли просто переложить sTrades.getClassCode() или все такие искать, одно и тоже же + ru.clearing.classes.statics.data.misc.Market market = marketImdg.getSingleObjectBySQL("code = '%s'".formatted(sTrades.getClassCode())); + eFond.setMarket(sTrades.getClassCode()); + eFond.setPrice(sTrades.getPrice()); eFond.setLots(sTrades.getQty()); eFond.setQuantity(sTrades.getQtyPcs()); 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 543bb940e..758bac3ae 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 @@ -99,7 +99,7 @@ public class PrimaryAuctionB0Session extends AbstractSession implements Initiali { DealsPreparePayload payload = new DealsPreparePayload(); payload.setSessionId(currSession.getId()); - dealsPreparationResult = runStage(TaskType.DealsPrepare , payload, dealsPrepare); + dealsPreparationResult = runStage(TaskType.DealsPrepare, payload, dealsPrepare); } //stage 2 runStage(TaskType.RequirementsAndObligationsCreate, dealsPreparationResult.getStageResult(), requirementsAndObligationCreation); 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 b1ba706fc..cf82d3294 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 @@ -12,7 +12,6 @@ import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.session.stage.impl.*; import ru.spcex.clearing.session.stage.task.*; import ru.spcex.platform.classes.base.interfaces.ExecutionType; -import ru.spcex.platform.enumeration.MarketType; import ru.spcex.platform.enumeration.Section; import ru.spcex.platform.enumeration.SessionStatus; import ru.spcex.platform.enumeration.SessionType; @@ -42,6 +41,11 @@ public class PrimaryAuctionBnSession extends AbstractSession implements Initiali private final Imdg executionFondImdg; + private List marketCodes = List.of("BMFC", "SMMC", "AEPC", "WBIC", "KBVC", "WBFC", "BMVC", "ABIC", + "AESC", "ABFC", "KBIC", "WBMC", "BMMC", "ABEC", "SMIC", "ABMC", "SMVC", "KBFC", "SKVC", "ABVC", "WEPC", + "KBMC", "SMFC", "BKVC", "WBVC", "BMIC", "WESC"); + + public PrimaryAuctionBnSession( ImdgProvider imdgProvider, BalanceRevise balanceRevise, @@ -73,7 +77,7 @@ public class PrimaryAuctionBnSession extends AbstractSession implements Initiali dealsPrepare.searchForExecutions(ExecutionType.ExecutionFond); ImdgPredicateBuilder execFondPb = executionFondImdg.predicateBuilder(); dealsPrepare.addExecutionFondCondition(execFondPb.regex("settlementCode", "^B[^0]\\d*$")); - dealsPrepare.addExecutionFondCondition(execFondPb.equals("marketType", MarketType.PRMR.getKey())); + dealsPrepare.addExecutionFondCondition(execFondPb.in("market", marketCodes.toArray(new String[0]))); } public void runSession(BaseRequest req) { From 94c2373dc9928eb09542c55739ffce934349d187 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Fri, 26 May 2023 18:52:07 +0300 Subject: [PATCH 13/35] fix regex --- .../spcex/clearing/session/stage/PrimaryAuctionBnSession.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 cf82d3294..80131da2b 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 @@ -76,7 +76,7 @@ public class PrimaryAuctionBnSession extends AbstractSession implements Initiali public void afterPropertiesSet() throws Exception { dealsPrepare.searchForExecutions(ExecutionType.ExecutionFond); ImdgPredicateBuilder execFondPb = executionFondImdg.predicateBuilder(); - dealsPrepare.addExecutionFondCondition(execFondPb.regex("settlementCode", "^B[^0]\\d*$")); + dealsPrepare.addExecutionFondCondition(execFondPb.regex("settlementCode", "^B\\d{2}$")); dealsPrepare.addExecutionFondCondition(execFondPb.in("market", marketCodes.toArray(new String[0]))); } From c0c8bd3056bc72512541db81cf680472b72f049a Mon Sep 17 00:00:00 2001 From: ialbert Date: Fri, 26 May 2023 18:57:38 +0300 Subject: [PATCH 14/35] SDF01 executor statement executed update --- .../java/ru/spcex/clearing/service/executors/Sdf01Executor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java index e684df89f..1d8f4bda9 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java @@ -161,9 +161,9 @@ public class Sdf01Executor extends AbstractExecutor { registryImdg.insert(rgs); } //todo - //1. stmt.setOperationStatus в зависимости от diffBalance = 0 //2. отправить notification на backend stmt.setOperationStatus(OperationStatus.Executed.getKey()); + statementImdg.update(stmt); } else { stmt.setErrorCodeId(err.get().getSubject().getId()); // fixme ErrorText insert stmt.setOperationStatus(OperationStatus.Rejected.getKey()); From ea62e754926da9580ff2a3647051fe1067bc3b5d Mon Sep 17 00:00:00 2001 From: aalehin Date: Fri, 26 May 2023 19:04:00 +0300 Subject: [PATCH 15/35] bug fix --- .../registry/service/AdmittedLiabilitiesRegisterService.java | 2 ++ .../registry/service/CoveredLiabilitiesRegisterService.java | 2 ++ .../registry/service/DepoPaymentInstructionRegisterService.java | 2 ++ .../registry/service/ExcludeLiabilitiesRegisterService.java | 2 ++ .../clearing/registry/service/ExecutionRegisterService.java | 2 ++ .../clearing/registry/service/LiabilitiesRegisterService.java | 2 ++ .../clearing/registry/service/MoneyBalanceRegisterService.java | 2 ++ .../service/MoneyPaymentInstructionRegisterService.java | 2 ++ 8 files changed, 16 insertions(+) diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/AdmittedLiabilitiesRegisterService.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/AdmittedLiabilitiesRegisterService.java index 54ff7550a..411c7b6bd 100644 --- a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/AdmittedLiabilitiesRegisterService.java +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/AdmittedLiabilitiesRegisterService.java @@ -6,6 +6,7 @@ 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.company.Company; import ru.clearing.classes.statics.data.register.AdmittedLiabilitiesRegister; import ru.clearing.classes.statics.data.registry.Registry; @@ -26,6 +27,7 @@ import java.time.Instant; import java.util.Collection; import java.util.Map; +@Service public class AdmittedLiabilitiesRegisterService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/CoveredLiabilitiesRegisterService.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/CoveredLiabilitiesRegisterService.java index 316bb460f..040844a35 100644 --- a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/CoveredLiabilitiesRegisterService.java +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/CoveredLiabilitiesRegisterService.java @@ -6,6 +6,7 @@ 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.company.Company; import ru.clearing.classes.statics.data.register.CoveredLiabilitiesRegister; import ru.clearing.classes.statics.data.registry.Registry; @@ -23,6 +24,7 @@ import java.time.Instant; import java.util.Collection; import java.util.Map; +@Service public class CoveredLiabilitiesRegisterService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/DepoPaymentInstructionRegisterService.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/DepoPaymentInstructionRegisterService.java index 19126db48..08091501a 100644 --- a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/DepoPaymentInstructionRegisterService.java +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/DepoPaymentInstructionRegisterService.java @@ -6,6 +6,7 @@ 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.Session; import ru.clearing.classes.statics.data.payment.PaymentInstruction; import ru.clearing.classes.statics.data.register.DepoPaymentInstructionRegister; @@ -25,6 +26,7 @@ import java.util.Map; import static ru.spcex.platform.enumeration.Task.createRegistry_GORR; import static ru.spcex.platform.enumeration.Task.createRegistry_GRRT; +@Service public class DepoPaymentInstructionRegisterService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/ExcludeLiabilitiesRegisterService.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/ExcludeLiabilitiesRegisterService.java index 675130949..d32f5b9ca 100644 --- a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/ExcludeLiabilitiesRegisterService.java +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/ExcludeLiabilitiesRegisterService.java @@ -6,6 +6,7 @@ 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.Session; import ru.clearing.classes.statics.data.register.ExcludeLiabilitiesRegister; import ru.clearing.classes.statics.data.registry.Registry; @@ -25,6 +26,7 @@ import java.time.LocalDate; import java.util.Collection; import java.util.Map; +@Service public class ExcludeLiabilitiesRegisterService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/ExecutionRegisterService.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/ExecutionRegisterService.java index 63caff003..a46b558e1 100644 --- a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/ExecutionRegisterService.java +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/ExecutionRegisterService.java @@ -6,6 +6,7 @@ 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.register.ExecutionRegister; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; @@ -17,6 +18,7 @@ import ru.spcex.platform.imdg.api.ImdgProvider; import static ru.spcex.clearing.imdg.IMDGDistributedNames.Map_ExecutionRegister; +@Service public class ExecutionRegisterService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/LiabilitiesRegisterService.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/LiabilitiesRegisterService.java index 046d0137b..7d56779e7 100644 --- a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/LiabilitiesRegisterService.java +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/LiabilitiesRegisterService.java @@ -6,6 +6,7 @@ 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.company.CompanySymbols; import ru.clearing.classes.statics.data.misc.Session; import ru.clearing.classes.statics.data.register.LiabilitiesRegister; @@ -28,6 +29,7 @@ import java.time.Instant; import java.util.Collection; import java.util.Map; +@Service public class LiabilitiesRegisterService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/MoneyBalanceRegisterService.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/MoneyBalanceRegisterService.java index d4db80db1..92441d90b 100644 --- a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/MoneyBalanceRegisterService.java +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/MoneyBalanceRegisterService.java @@ -6,6 +6,7 @@ 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.company.Company; import ru.clearing.classes.statics.data.company.CompanySymbols; import ru.clearing.classes.statics.data.register.MoneyBalanceRegister; @@ -24,6 +25,7 @@ import java.util.Map; import static ru.spcex.platform.enumeration.Task.createRegistry_GBRR; +@Service public class MoneyBalanceRegisterService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/MoneyPaymentInstructionRegisterService.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/MoneyPaymentInstructionRegisterService.java index eaa10d929..fbfa88193 100644 --- a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/MoneyPaymentInstructionRegisterService.java +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/MoneyPaymentInstructionRegisterService.java @@ -6,6 +6,7 @@ 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.Session; import ru.clearing.classes.statics.data.payment.PaymentInstruction; import ru.clearing.classes.statics.data.register.MoneyPaymentInstructionRegister; @@ -22,6 +23,7 @@ import java.util.Map; import static ru.spcex.platform.enumeration.Task.createRegistry_GORR; +@Service public class MoneyPaymentInstructionRegisterService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); From 2b2e04bf841dcea11bc01e7e3c97d65a2d3ff136 Mon Sep 17 00:00:00 2001 From: ialbert Date: Fri, 26 May 2023 19:15:45 +0300 Subject: [PATCH 16/35] Execution#side fix, RegistryBuilder TCR search fix --- .../ru/spcex/clearing/service/ExecutionFondComponent.java | 4 ++-- .../ru/spcex/clearing/session/stage/impl/RegistryBuilder.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/ExecutionFondComponent.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/ExecutionFondComponent.java index 79dd42b20..c296c93dc 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/ExecutionFondComponent.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/ExecutionFondComponent.java @@ -190,8 +190,8 @@ public class ExecutionFondComponent { Side sTradeSide = IEnumKey.getEnumByKey(Side.class, sTrades.getOperation()); if (sTradeSide != null) { switch (sTradeSide) { - case BUY -> eFond.setSide(MoneyFlowSide.BUY.getKey()); - case SELL -> eFond.setSide(MoneyFlowSide.SELL.getKey()); + case BUY -> eFond.setSide(Side.BUY.getKey()); + case SELL -> eFond.setSide(Side.SELL.getKey()); } } } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryBuilder.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryBuilder.java index 29e40efae..3b815b09c 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryBuilder.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryBuilder.java @@ -136,7 +136,7 @@ public class RegistryBuilder { } private TradingClearingRegistry searchTradingClearingRegistry() { - return tradingClearingRegistryImdg.getSingleObjectBySQL("tradingClearingRegistryId = " + exec.getTradingClearingRegistryId()); + return tradingClearingRegistryImdg.getSingleObjectByID(exec.getTradingClearingRegistryId()); } private static ISide getSide(ExecutionCommon exec) { From a6cf844c74cf323d859491fdc88393733a8ca4fe Mon Sep 17 00:00:00 2001 From: AKurakin Date: Fri, 26 May 2023 19:22:33 +0300 Subject: [PATCH 17/35] =?UTF-8?q?meta=20http://jira.mfd.msk:8088/browse/CL?= =?UTF-8?q?S-320=20=D0=BE=D0=BF=D1=8F=D1=82=D1=8C=20=D0=BE=D0=B1=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/meta/data.xml | 96 ++-- .../src/main/resources/meta/meta.json | 538 +++++++----------- .../src/main/resources/meta/meta.xml | 204 +++---- .../backend-api/src/test/resources/meta.json | 538 +++++++----------- .../db-scripts/src/main/resources/db/DATA.sql | 94 +-- .../db-scripts/src/main/resources/db/DDL.sql | 26 +- 6 files changed, 618 insertions(+), 878 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 c085341d6..6390799cf 100644 --- a/clearing-parent/backend-api/src/main/resources/meta/data.xml +++ b/clearing-parent/backend-api/src/main/resources/meta/data.xml @@ -1,5 +1,5 @@ - + @@ -172,6 +172,7 @@ + @@ -193,38 +194,28 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -312,6 +303,13 @@ + + + + + + + @@ -436,6 +434,8 @@ + + @@ -458,11 +458,11 @@ - - + - + + @@ -471,10 +471,10 @@ - + - + @@ -482,10 +482,10 @@ - + - + @@ -493,10 +493,10 @@ - + - + @@ -504,10 +504,10 @@ - + - + @@ -515,10 +515,10 @@ - + - + @@ -526,10 +526,10 @@ - + - + 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 00716c327..e30767a8b 100644 --- a/clearing-parent/backend-api/src/main/resources/meta/meta.json +++ b/clearing-parent/backend-api/src/main/resources/meta/meta.json @@ -1,6 +1,6 @@ { - "version": "3.5.0.25", + "version": "3.5.0.26", "enums": { @@ -1640,11 +1640,11 @@ } , {"code": "companySymbol", - "field": "id","type": 12,"name": "Тип реквизита","shortname": "Тип реквизита","searchable": true,"sortable": true,"visible": true,"linkKeyCode": "companyId","linkCode": "companySymbol","link": "companySymbols","extends": "companySymbols" + "field": "id","type": 12,"name": "Тип реквизита","shortname": "Тип реквизита","searchable": true,"sortable": true,"visible": true,"linkKeyCode": "companyId","linkCode": "companySymbol","link": "companySymbols","extends": "companySymbols","ignore": true } , {"code": "companySymbolValue", - "field": "id","type": 2,"length": 255,"name": "Значение реквизита","shortname": "Значение реквизита","searchable": true,"sortable": true,"visible": true,"linkKeyCode": "companyId","linkCode": "companySymbolValue","link": "companySymbols","extends": "companySymbols" + "field": "id","type": 2,"length": 255,"name": "Значение реквизита","shortname": "Значение реквизита","searchable": true,"sortable": true,"visible": true,"linkKeyCode": "companyId","linkCode": "companySymbolValue","link": "companySymbols","extends": "companySymbols","ignore": true } , {"code": "workflowStatus", @@ -1699,6 +1699,8 @@ "confirmation": "shortName,tradingCode", + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", + "fields": [ {"code": "id", "type": 1,"name": "Идентификатор записи","shortname": "ID","link": "company","linkCode": "id","required": true @@ -1911,6 +1913,8 @@ "name": "Удаление категории участника клиринга", + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", + "fields": [ {"code": "id", "type": 1,"name": "Идентификатор записи","shortname": "ID","link": "clearingCategory","linkCode": "id","required": true @@ -1990,6 +1994,8 @@ "name": "Удаление контакта компании", + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", + "fields": [ {"code": "id", "type": 1,"name": "Идентификатор записи","shortname": "ID","link": "contact","linkCode": "id","required": true @@ -2189,6 +2195,8 @@ "confirmation": "documentType,number,companyId", + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", + "fields": [ {"code": "id", "type": 1,"name": "Идентификатор записи","shortname": "ID","link": "profileDocument","linkCode": "id","required": true @@ -2270,6 +2278,8 @@ "name": "Удаление реквизита компании", + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", + "fields": [ {"code": "id", "type": 1,"name": "Идентификатор записи","shortname": "ID","link": "profileDocument","linkCode": "id","required": true @@ -2327,7 +2337,7 @@ } , {"code": "issuerId", - "type": 1,"dbname": "Идентификатор эмитента","name": "Наименование эмитента","shortname": "Эмитент","searchable": true,"sortable": true,"link": "company" + "type": 1,"dbname": "Идентификатор эмитента","name": "Наименование эмитента","shortname": "Эмитент","searchable": true,"sortable": true,"link": "company","linkCode": "shortName" } , {"code": "shortName", @@ -2471,7 +2481,7 @@ } , {"code": "issuerId", - "type": 1,"dbname": "Идентификатор эмитента","name": "Наименование эмитента","shortname": "Эмитент","searchable": true,"sortable": true,"link": "company","extends": "security" + "type": 1,"dbname": "Идентификатор эмитента","name": "Наименование эмитента","shortname": "Эмитент","searchable": true,"sortable": true,"link": "company","extends": "security","linkCode": "shortName" } , {"code": "shortNameEng", @@ -2553,7 +2563,7 @@ } , {"code": "issuerId", - "type": 1,"name": "Наименование эмитента","shortname": "Эмитент","link": "company" + "type": 1,"name": "Наименование эмитента","shortname": "Эмитент","link": "company","linkCode": "shortName" } , {"code": "shortNameEng", @@ -2636,7 +2646,7 @@ } , {"code": "issuerId", - "type": 1,"name": "Наименование эмитента","shortname": "Эмитент","link": "company" + "type": 1,"name": "Наименование эмитента","shortname": "Эмитент","link": "company","linkCode": "shortName" } , {"code": "shortNameEng", @@ -2663,6 +2673,8 @@ "confirmation": "securitySymbol,shortName", + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", + "fields": [ {"code": "id", "type": 1,"name": "Идентификатор записи","shortname": "ID","link": "moneyMarketSecurity","linkCode": "id","required": true @@ -2744,11 +2756,11 @@ } , {"code": "lotSize", - "field": "securityId","type": 11,"name": "Размер лота","shortname": "Лот","searchable": true,"sortable": true,"visible": true,"linkKeyCode": "securityId","linkCode": "lotSize","link": "listing","extends": "listing" + "field": "securityId","type": 11,"name": "Размер лота","shortname": "Лот","searchable": true,"sortable": true,"visible": true,"linkKeyCode": "securityId","linkCode": "lotSize","link": "listing","extends": "listing","ignore": true } , {"code": "issuerId", - "type": 1,"dbname": "Идентификатор эмитента","name": "Наименование эмитента","shortname": "Эмитент","searchable": true,"sortable": true,"link": "company","extends": "security" + "type": 1,"dbname": "Идентификатор эмитента","name": "Наименование эмитента","shortname": "Эмитент","searchable": true,"sortable": true,"link": "company","linkCode": "shortName","extends": "security" } , {"code": "shortNameEng", @@ -2806,7 +2818,7 @@ } , {"code": "issuerId", - "type": 1,"name": "Наименование эмитента","shortname": "Эмитент","link": "company" + "type": 1,"name": "Наименование эмитента","shortname": "Эмитент","link": "company","linkCode": "shortName" } , {"code": "shortNameEng", @@ -2865,7 +2877,7 @@ } , {"code": "issuerId", - "type": 1,"name": "Наименование эмитента","shortname": "Эмитент","link": "company" + "type": 1,"name": "Наименование эмитента","shortname": "Эмитент","link": "company","linkCode": "shortName" } , {"code": "shortNameEng", @@ -2888,6 +2900,8 @@ "confirmation": "securitySymbol,shortName", + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", + "fields": [ {"code": "id", "type": 1,"name": "Идентификатор записи","shortname": "ID","link": "equitySecurity","linkCode": "id","required": true @@ -2959,11 +2973,11 @@ } , {"code": "lotSize", - "field": "securityId","type": 11,"name": "Размер лота","shortname": "Лот","searchable": true,"sortable": true,"visible": true,"linkKeyCode": "securityId","linkCode": "lotSize","link": "listing","extends": "listing" + "field": "securityId","type": 11,"name": "Размер лота","shortname": "Лот","searchable": true,"sortable": true,"visible": true,"linkKeyCode": "securityId","linkCode": "lotSize","link": "listing","extends": "listing","ignore": true } , {"code": "issuerId", - "type": 1,"dbname": "Идентификатор эмитента","name": "Наименование эмитента","shortname": "Эмитент","searchable": true,"sortable": true,"link": "company","extends": "security" + "type": 1,"dbname": "Идентификатор эмитента","name": "Наименование эмитента","shortname": "Эмитент","searchable": true,"sortable": true,"link": "company","linkCode": "shortName","extends": "security" } , {"code": "shortNameEng", @@ -3041,7 +3055,7 @@ } , {"code": "issuerId", - "type": 1,"name": "Наименование эмитента","shortname": "Эмитент","link": "company" + "type": 1,"name": "Наименование эмитента","shortname": "Эмитент","link": "company","linkCode": "shortName" } , {"code": "shortNameEng", @@ -3120,7 +3134,7 @@ } , {"code": "issuerId", - "type": 1,"name": "Наименование эмитента","shortname": "Эмитент","link": "company" + "type": 1,"name": "Наименование эмитента","shortname": "Эмитент","link": "company","linkCode": "shortName" } , {"code": "shortNameEng", @@ -3248,15 +3262,15 @@ "fields": [ {"code": "securityId", - "type": 1,"dbname": "Идентификатор инструмента","name": "Наименование инструмента","shortname": "Инструмент","searchable": true,"sortable": true,"link": "security","linkCode": "shortName" + "type": 1,"dbname": "Идентификатор инструмента","name": "Наименование инструмента","shortname": "Инструмент","searchable": true,"sortable": true,"visible": true,"link": "security","linkCode": "shortName" } , {"code": "market", - "type": 12,"dbname": "Код торговой секции","name": "Наименование режима","shortname": "Режим","searchable": true,"sortable": true,"link": "market","linkCode": "description" + "type": 12,"dbname": "Код торговой секции","name": "Наименование режима","shortname": "Режим","searchable": true,"sortable": true,"visible": true,"link": "market","linkCode": "description" } , {"code": "lotSize", - "type": 11,"name": "Размер лота","shortname": "Лот","searchable": true,"sortable": true + "type": 11,"name": "Размер лота","shortname": "Лот","searchable": true,"sortable": true,"visible": true } , {"code": "symbolCode", @@ -3300,7 +3314,7 @@ } , {"code": "market", - "type": 12,"name": "Наименование режима","shortname": "Режим","link": "market","required": true,"linkCode": "code" + "type": 12,"name": "Наименование режима","shortname": "Режим","link": "market","linkCode": "description","required": true } , {"code": "lotSize", @@ -3333,7 +3347,7 @@ } , {"code": "market", - "type": 12,"name": "Наименование режима","shortname": "Режим","link": "market","linkCode": "code","required": true,"enabled": false + "type": 12,"name": "Наименование режима","shortname": "Режим","link": "market","linkCode": "description","required": true,"enabled": false } , {"code": "lotSize", @@ -3356,6 +3370,8 @@ "confirmation": "securityId,market", + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", + "fields": [ {"code": "id", "type": 1,"name": "Идентификатор записи","shortname": "ID","link": "listing","linkCode": "id","required": true @@ -3593,6 +3609,8 @@ "confirmation": "companyId,code", + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", + "fields": [ {"code": "id", "type": 1,"name": "Идентификатор записи","shortname": "ID","link": "clientCode","linkCode": "id","required": true @@ -3628,11 +3646,11 @@ } , {"code": "moneyAccountId", - "type": 1,"dbname": "Идентификатор денежного счета","name": "Номер денежного счета","shortname": "Денежный счет","searchable": true,"sortable": true,"link": "account" + "type": 1,"dbname": "Идентификатор денежного счета","name": "Номер денежного счета","shortname": "Денежный счет","searchable": true,"sortable": true,"link": "account","linkCode": "account" } , {"code": "depoAccountId", - "type": 1,"dbname": "Идентификатор депозитарного счета","name": "Номер депозитарного счета","shortname": "Депозитарный счет","searchable": true,"sortable": true,"link": "account" + "type": 1,"dbname": "Идентификатор депозитарного счета","name": "Номер депозитарного счета","shortname": "Депозитарный счет","searchable": true,"sortable": true,"link": "account","linkCode": "account" } , {"code": "tradingClearingRegistryType", @@ -3728,6 +3746,8 @@ "confirmation": "companyId,code", + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", + "fields": [ {"code": "id", "type": 1,"name": "Идентификатор записи","shortname": "ID","link": "clientCode","linkCode": "id","required": true @@ -3751,7 +3771,7 @@ "fields": [ {"code": "companyId", - "type": 1,"dbname": "Идентификатор участника","name": "Наименование участника","shortname": "Участник","searchable": true,"sortable": true,"visible": true,"link": "company" + "type": 1,"dbname": "Идентификатор участника","name": "Наименование участника","shortname": "Участник","searchable": true,"sortable": true,"visible": true,"link": "company","linkCode": "shortName" } , {"code": "tradingCode", @@ -4242,7 +4262,7 @@ } , {"code": "status", - "type": 12,"dbname": "Код статуса","name": "Наименование статуса","shortname": "Статус","searchable": true,"sortable": true,"visible": true,"link": "serviceStatus","extends": "account" + "field": "accountId","type": 12,"dbname": "Код статуса","name": "Наименование статуса","shortname": "Статус","searchable": true,"sortable": true,"visible": true,"linkKeyCode": "id","linkCode": "status","link": "account","extends": "account" } , {"code": "id", @@ -4254,7 +4274,7 @@ "name": "Добавление счета вывода средств из ПРЦ", - "confirmation": "currency,bankIdentificationCode,bankName,correspondentAccount,correspondentAccountName,taxpayerIdentificationNumber,taxRegistrationReasonCode,account,destination", + "confirmation": "currency,bankIdentificationCode,bankName,correspondentAccount,correspondentAccountName,taxpayerIdentificationNumber,taxRegistrationReasonCode,account", "class": "ru.spcex.clearing.backendapi.controller.request.cud.account.BankAccountNewAction", @@ -4296,7 +4316,7 @@ } , {"code": "companyId", - "type": 1,"name": "Компания","shortname": "Компания","link": "company","linkCode": "shortName","required": true + "type": 1,"name": "Компания","shortname": "Компания","link": "company","linkCode": "shortName","visible": false } ] } @@ -4305,7 +4325,7 @@ "name": "Изменение счета вывода средств из ПРЦ", - "confirmation": "currency,bankIdentificationCode,bankName,correspondentAccount,correspondentAccountName,taxpayerIdentificationNumber,taxRegistrationReasonCode,account,destination", + "confirmation": "currency,bankIdentificationCode,bankName,correspondentAccount,correspondentAccountName,taxpayerIdentificationNumber,taxRegistrationReasonCode,account", "class": "ru.spcex.clearing.backendapi.controller.request.cud.account.BankAccountUpdateAction", @@ -4358,6 +4378,8 @@ "confirmation": "currency,bankIdentificationCode,correspondentAccount,taxpayerIdentificationNumber,taxRegistrationReasonCode,account", + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", + "fields": [ {"code": "id", "type": 1,"name": "Идентификатор записи","shortname": "ID","link": "bankAccount","linkCode": "id","required": true @@ -4499,11 +4521,11 @@ } , {"code": "companyId", - "type": 1,"dbname": "Идентификатор компании","name": "Наименование компании","shortname": "Компания","searchable": false,"sortable": false,"visible": true,"link": "company","linkCode": "shortName" + "type": 1,"dbname": "Идентификатор компании","name": "Наименование компании","shortname": "Компания","searchable": false,"sortable": false,"link": "company","linkCode": "shortName" } , {"code": "securityId", - "type": 1,"dbname": "Идентификатор инструмента","name": "Наименование инструмента","shortname": "Инструмент","searchable": false,"sortable": true,"visible": true,"link": "security","linkCode": "shortName" + "type": 1,"dbname": "Идентификатор инструмента","name": "Наименование инструмента","shortname": "Инструмент","searchable": false,"sortable": true,"link": "security","linkCode": "shortName" } , {"code": "id", @@ -4533,6 +4555,10 @@ {"code": "taskTime", "type": 5,"name": "Время задачи","shortname": "Время задачи","required": true } + , + {"code": "taskStatus", + "type": 12,"name": "Наименование статуса","shortname": "Статус","link": "taskStatus","required": true + } , {"code": "section", "type": 12,"name": "Секция","shortname": "Секция","link": "section","linkCode": "name","linkKeyCode": "code" @@ -4541,17 +4567,13 @@ {"code": "sessionType", "type": 12,"name": "Тип клиринговой сессии","shortname": "Тип клиринговой сессии","link": "sessionType","linkCode": "name","linkKeyCode": "code" } - , - {"code": "taskStatus", - "type": 12,"name": "Наименование статуса","shortname": "Статус","link": "taskStatus","required": true - } , {"code": "companyId", - "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName" + "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName","visible": false } , {"code": "securityId", - "type": 1,"name": "Наименование инструмента","shortname": "Инструмент","link": "security","linkCode": "shortName" + "type": 1,"name": "Наименование инструмента","shortname": "Инструмент","link": "security","linkCode": "shortName","visible": false } ] } @@ -4574,6 +4596,10 @@ {"code": "taskTime", "type": 5,"name": "Время задачи","shortname": "Время задачи","required": true } + , + {"code": "taskStatus", + "type": 12,"name": "Наименование статуса","shortname": "Статус","link": "taskStatus","required": true + } , {"code": "section", "type": 12,"name": "Секция","shortname": "Секция","link": "section","linkCode": "name","linkKeyCode": "code" @@ -4582,17 +4608,13 @@ {"code": "sessionType", "type": 12,"name": "Тип клиринговой сессии","shortname": "Тип клиринговой сессии","link": "sessionType","linkCode": "name","linkKeyCode": "code" } - , - {"code": "taskStatus", - "type": 12,"name": "Наименование статуса","shortname": "Статус","link": "taskStatus","required": true - } , {"code": "companyId", - "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName" + "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName","visible": false } , {"code": "securityId", - "type": 1,"name": "Наименование инструмента","shortname": "Инструмент","link": "security","linkCode": "shortName" + "type": 1,"name": "Наименование инструмента","shortname": "Инструмент","link": "security","linkCode": "shortName","visible": false } ] } @@ -4601,7 +4623,9 @@ "name": "Блокировка шаблона расписания операционного дня", - "confirmation": "task,taskTime,taskStatus,companyId,securityId", + "confirmation": "task,taskTime,taskStatus,section,sessionType", + + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", "fields": [ {"code": "id", @@ -4664,7 +4688,7 @@ } , {"code": "companyId", - "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName" + "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName","visible": false } ] } @@ -4689,7 +4713,7 @@ } , {"code": "companyId", - "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName" + "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName","visible": false } ] } @@ -4698,7 +4722,9 @@ "name": "Блокировка записи в календаре", - "confirmation": "clearingDate,dayStatus,companyId", + "confirmation": "clearingDate,dayStatus", + + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", "fields": [ {"code": "id", @@ -4749,11 +4775,11 @@ } , {"code": "companyId", - "type": 1,"dbname": "Идентификатор компании","name": "Наименование компании","shortname": "Компания","searchable": false,"sortable": false,"visible": true,"link": "company","linkCode": "shortName" + "type": 1,"dbname": "Идентификатор компании","name": "Наименование компании","shortname": "Компания","searchable": false,"sortable": false,"link": "company","linkCode": "shortName" } , {"code": "securityId", - "type": 1,"dbname": "Идентификатор инструмента","name": "Наименование инструмента","shortname": "Инструмент","searchable": false,"sortable": true,"visible": true,"link": "security","linkCode": "shortName" + "type": 1,"dbname": "Идентификатор инструмента","name": "Наименование инструмента","shortname": "Инструмент","searchable": false,"sortable": true,"link": "security","linkCode": "shortName" } , {"code": "id", @@ -4787,6 +4813,10 @@ {"code": "taskTime", "type": 5,"name": "Время задачи","shortname": "Время задачи","required": true } + , + {"code": "taskStatus", + "type": 12,"name": "Наименование статуса","shortname": "Статус","link": "taskStatus","required": true + } , {"code": "section", "type": 12,"name": "Секция","shortname": "Секция","link": "section","linkCode": "name","linkKeyCode": "code" @@ -4795,17 +4825,13 @@ {"code": "sessionType", "type": 12,"name": "Тип клиринговой сессии","shortname": "Тип клиринговой сессии","link": "sessionType","linkCode": "name","linkKeyCode": "code" } - , - {"code": "taskStatus", - "type": 12,"name": "Наименование статуса","shortname": "Статус","link": "taskStatus","required": true - } , {"code": "companyId", - "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName" + "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName","visible": false } , {"code": "securityId", - "type": 1,"name": "Наименование инструмента","shortname": "Инструмент","link": "security","linkCode": "shortName" + "type": 1,"name": "Наименование инструмента","shortname": "Инструмент","link": "security","linkCode": "shortName","visible": false } ] } @@ -4832,6 +4858,10 @@ {"code": "taskTime", "type": 5,"name": "Время задачи","shortname": "Время задачи","required": true } + , + {"code": "taskStatus", + "type": 12,"name": "Наименование статуса","shortname": "Статус","link": "taskStatus","required": true + } , {"code": "section", "type": 12,"name": "Секция","shortname": "Секция","link": "section","linkCode": "name","linkKeyCode": "code" @@ -4840,17 +4870,13 @@ {"code": "sessionType", "type": 12,"name": "Тип клиринговой сессии","shortname": "Тип клиринговой сессии","link": "sessionType","linkCode": "name","linkKeyCode": "code" } - , - {"code": "taskStatus", - "type": 12,"name": "Наименование статуса","shortname": "Статус","link": "taskStatus","required": true - } , {"code": "companyId", - "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName" + "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName","visible": false } , {"code": "securityId", - "type": 1,"name": "Наименование инструмента","shortname": "Инструмент","link": "security","linkCode": "shortName" + "type": 1,"name": "Наименование инструмента","shortname": "Инструмент","link": "security","linkCode": "shortName","visible": false } ] } @@ -4859,7 +4885,9 @@ "name": "Блокировка расписания", - "confirmation": "task,taskTime,clearingDate,market,taskStatus,companyId,securityId", + "confirmation": "task,clearingDate,taskTime,taskStatus,section,sessionType", + + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", "fields": [ {"code": "id", @@ -4964,79 +4992,24 @@ } ] ,"actions":[ - {"method":"post", - - "destination": "GBAL", - - "group": "Обмен с расчетной организацией", - - "name": "Зачисление остатков (загрузка ДФ-57 и ДФ-01)", - - "fields": [] - } - , - {"method":"post", - - "destination": "ABLK", - - "group": "Обмен с расчетной организацией", - - "name": "Блокировка счета (загрузка ДФ-12)", - - "fields": [] - } - , {"method":"post", "destination": "GALB", "group": "Обмен с расчетной организацией", - "name": "Запрос остатков по всем счетам (экспорт ДФ-08)", + "name": "Запрос остатков по всем счетам (отправка ДФ-51, ДФ-56 для получения ответа ДФ-01, ДФ-57)", "fields": [] } , {"method":"post", - "destination": "ADBL", + "destination": "OUTV", "group": "Обмен с расчетной организацией", - "name": "Дозачисление/списание остатков (загрузка ДФ-16)", - - "fields": [] - } - , - {"method":"post", - - "destination": "CORD", - - "group": "Обмен с расчетной организацией", - - "name": "Формирование сводного платежного поручения (экспорт ДФ-03/ДФ-11)", - - "fields": [] - } - , - {"method":"post", - - "destination": "CORC", - - "group": "Обмен с расчетной организацией", - - "name": "Получение подтверждения переводов (загрузка ДФ-04)", - - "fields": [] - } - , - {"method":"post", - - "destination": "CMBA", - - "group": "Обмен с расчетной организацией", - - "name": "Формирование распоряжения на перевод с ТБС (экспорт ДФ-11)", + "name": "Вывод свободных средств инициаторов В (отправка ДФ-54 для получения ответа ДФ-55)", "fields": [] } @@ -5054,22 +5027,66 @@ , {"method":"post", - "destination": "GACA", + "destination": "LIMM", "group": "Обмен с Торговой системой", - "name": "Создание файла остатков CSV по клиринговым счетам", + "name": "Выгрузка в Торговую систему остатков по деньгам (отправка lim)", "fields": [] } , {"method":"post", - "destination": "GAIA", + "destination": "LIMS", "group": "Обмен с Торговой системой", - "name": "Создание файла остатков CSV по внутренним информационным счетам", + "name": "Выгрузка в Торговую систему остатков по бумагам (отправка lim)", + + "fields": [] + } + , + {"method":"post", + + "destination": "LOCM", + + "group": "Обмен с интеграционными модулями", + + "name": "Загрузка участников", + + "fields": [] + } + , + {"method":"post", + + "destination": "LOSC", + + "group": "Обмен с интеграционными модулями", + + "name": "Загрузка инструментов", + + "fields": [] + } + , + {"method":"post", + + "destination": "GVER", + + "group": "Общее", + + "name": "Запуск сверки", + + "fields": [] + } + , + {"method":"post", + + "destination": "GRYT", + + "group": "Общее", + + "name": "Подготовка КС к клиринговому дню", "fields": [] } @@ -5082,59 +5099,34 @@ "name": "Запуск клиринговой сессии", - "confirmation": "companyId,securityId", + "confirmation": "section,sessionType", "fields": [ + {"code": "section", + "type": 12,"name": "Секция","shortname": "Секция","link": "section","linkCode": "name","linkKeyCode": "code" + } + , + {"code": "sessionType", + "type": 12,"name": "Тип клиринговой сессии","shortname": "Тип клиринговой сессии","link": "sessionType","linkCode": "name","linkKeyCode": "code" + } + , {"code": "companyId", - "type": 1,"name": "Наименование инициатора","shortname": "Инициатор","link": "company","linkCode": "shortName" + "type": 1,"name": "Наименование инициатора","shortname": "Инициатор","link": "company","linkCode": "shortName","visible": false } , {"code": "securityId", - "type": 1,"name": "Наименование инструмента","shortname": "Инструмент","link": "security","linkCode": "shortName" + "type": 1,"name": "Наименование инструмента","shortname": "Инструмент","link": "security","linkCode": "shortName","visible": false } ] } , {"method":"post", - "destination": "SPRC", + "destination": "GRRT", - "group": "Клиринг", + "group": "Формирование реестров и отчетности", - "name": "Запуск преклиринга", - - "fields": [] - } - , - {"method":"post", - - "destination": "SPOC", - - "group": "Клиринг", - - "name": "Запуск постклиринга", - - "fields": [] - } - , - {"method":"post", - - "destination": "GVER", - - "group": "Клиринг", - - "name": "Запуск сверки", - - "fields": [] - } - , - {"method":"post", - - "destination": "GCMR", - - "group": "Клиринг", - - "name": "Формирование реестра участников клиринга", + "name": "Формирование реестра остатков ценных бумаг", "fields": [] } @@ -5143,187 +5135,51 @@ "destination": "GBRR", - "group": "Клиринг", + "group": "Формирование реестров и отчетности", "name": "Формирование реестра остатков денежных средств", "fields": [] } , + {"method":"post", + + "destination": "ADLR", + + "group": "Формирование реестров и отчетности", + + "name": "Формирование реестра обязательств, допущенных к клирингу", + + "fields": [] + } + , + {"method":"post", + + "destination": "CDLR", + + "group": "Формирование реестров и отчетности", + + "name": "Формирование реестра обязательств, прошедших процедуру контроля обеспечения", + + "fields": [] + } + , {"method":"post", "destination": "GORR", - "group": "Клиринг", + "group": "Формирование реестров и отчетности", "name": "Формирование реестра распоряжений, направленных расчетной организации", "fields": [] } , - {"method":"post", - - "destination": "GSRR", - - "group": "Клиринг", - - "name": "Формирование реестра отправленных отчетов", - - "fields": [] - } - , - {"method":"post", - - "destination": "GREP", - - "group": "Клиринг", - - "name": "Формирование отчетности", - - "fields": [ - {"code": "sessionId", - "type": 1,"name": "Клиринговая сессия","shortname": "Сессия","link": "session" - } - ] - } - , - {"method":"post", - - "destination": "LIMM", - - "group": "Обмен с Торговой системой", - - "name": "Выгрузка в торговую систему остатков по деньгам", - - "fields": [] - } - , - {"method":"post", - - "destination": "LIMS", - - "group": "Обмен с Торговой системой", - - "name": "Выгрузка в торговую систему остатков по бумагам", - - "fields": [] - } - , - {"method":"post", - - "destination": "LIQU", - - "group": "Клиринг", - - "name": "иквидационная сессия по обязательтсвам участника", - - "fields": [] - } - , - {"method":"post", - - "destination": "STRM", - - "group": "Клиринг", - - "name": "Начало торговой сессии секции МКР", - - "fields": [] - } - , - {"method":"post", - - "destination": "ETRM", - - "group": "Клиринг", - - "name": "Завершение торговой сессии секции МКР", - - "fields": [] - } - , - {"method":"post", - - "destination": "SIPO", - - "group": "Клиринг", - - "name": "Начало торговой сессии по первичным торгам", - - "fields": [] - } - , - {"method":"post", - - "destination": "EIPO", - - "group": "Клиринг", - - "name": "Завершение торговой сессии по первичным торгам", - - "fields": [] - } - , - {"method":"post", - - "destination": "STRF", - - "group": "Клиринг", - - "name": "Начало торговой сессии по вторичным торгам", - - "fields": [] - } - , - {"method":"post", - - "destination": "ETRF", - - "group": "Клиринг", - - "name": "Завершение торговой сессии по вторичным торгам", - - "fields": [] - } - , - {"method":"post", - - "destination": "RCHK", - - "group": "Клиринг", - - "name": "Запрос на сверку активов", - - "fields": [] - } - , - {"method":"post", - - "destination": "GRYT", - - "group": "Клиринг", - - "name": "Сформировать регистр на текущий день", - - "fields": [] - } - , - {"method":"post", - - "destination": "GRRT", - - "group": "Клиринг", - - "name": "Сформировать реестр на текущий день", - - "fields": [] - } - , {"method":"post", "destination": "GORD", - "group": "Клиринг", + "group": "Формирование реестров и отчетности", "name": "Формирование реестра распоряжений, направленных расчетному депозитарию", @@ -5332,25 +5188,51 @@ , {"method":"post", - "destination": "LOSC", + "destination": "EXLR", - "group": "Клиринг", + "group": "Формирование реестров и отчетности", - "name": "Загрузить инструменты", + "name": "Формирование реестра обязательств, исключенных из клирингового пула", "fields": [] } , {"method":"post", - "destination": "LOCM", + "destination": "LBSR", - "group": "Клиринг", + "group": "Формирование реестров и отчетности", - "name": "Загрузить участников", + "name": "Формирование реестра учета обязательств", "fields": [] } + , + {"method":"post", + + "destination": "ECNR", + + "group": "Формирование реестров и отчетности", + + "name": "Формирование реестра сделок", + + "fields": [] + } + , + {"method":"post", + + "destination": "GREP", + + "group": "Формирование реестров и отчетности", + + "name": "Формирование отчетности", + + "fields": [ + {"code": "sessionId", + "type": 1,"name": "Клиринговая сессия","shortname": "Сессия","link": "session" + } + ] + } ] } , 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 a7999061e..8cdbfd236 100644 --- a/clearing-parent/backend-api/src/main/resources/meta/meta.xml +++ b/clearing-parent/backend-api/src/main/resources/meta/meta.xml @@ -1,6 +1,6 @@ - + @@ -367,8 +367,8 @@ - - + + @@ -381,7 +381,7 @@ - + @@ -435,7 +435,7 @@ - + @@ -456,7 +456,7 @@ - + @@ -505,7 +505,7 @@ - + @@ -526,7 +526,7 @@ - + @@ -539,7 +539,7 @@ - + @@ -571,7 +571,7 @@ - + @@ -591,7 +591,7 @@ - + @@ -611,13 +611,13 @@ - + - + @@ -636,8 +636,8 @@ - - + + @@ -651,7 +651,7 @@ - + @@ -665,12 +665,12 @@ - + - + @@ -688,8 +688,8 @@ - - + + @@ -708,7 +708,7 @@ - + @@ -727,7 +727,7 @@ - + @@ -754,9 +754,9 @@ - - - + + + @@ -767,7 +767,7 @@ - + @@ -775,12 +775,12 @@ - + - + @@ -835,7 +835,7 @@ - + @@ -844,8 +844,8 @@ - - + + @@ -867,13 +867,13 @@ - + - + @@ -921,7 +921,7 @@ - + @@ -992,10 +992,10 @@ - + - + @@ -1005,9 +1005,9 @@ - + - + @@ -1019,7 +1019,7 @@ - + @@ -1049,8 +1049,8 @@
- - + + @@ -1058,23 +1058,23 @@ +
- - - + + +
- - - + + - + @@ -1090,15 +1090,15 @@ - + - + - + @@ -1111,8 +1111,8 @@
- - + + @@ -1121,24 +1121,24 @@ +
- - - + + +
- - - + + - + @@ -1164,77 +1164,51 @@ - + - - - - - - - - - - - + - + - + - - - + + + - + - + - + +
+ + + - + - + - + - + - + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/clearing-parent/backend-api/src/test/resources/meta.json b/clearing-parent/backend-api/src/test/resources/meta.json index 00716c327..e30767a8b 100644 --- a/clearing-parent/backend-api/src/test/resources/meta.json +++ b/clearing-parent/backend-api/src/test/resources/meta.json @@ -1,6 +1,6 @@ { - "version": "3.5.0.25", + "version": "3.5.0.26", "enums": { @@ -1640,11 +1640,11 @@ } , {"code": "companySymbol", - "field": "id","type": 12,"name": "Тип реквизита","shortname": "Тип реквизита","searchable": true,"sortable": true,"visible": true,"linkKeyCode": "companyId","linkCode": "companySymbol","link": "companySymbols","extends": "companySymbols" + "field": "id","type": 12,"name": "Тип реквизита","shortname": "Тип реквизита","searchable": true,"sortable": true,"visible": true,"linkKeyCode": "companyId","linkCode": "companySymbol","link": "companySymbols","extends": "companySymbols","ignore": true } , {"code": "companySymbolValue", - "field": "id","type": 2,"length": 255,"name": "Значение реквизита","shortname": "Значение реквизита","searchable": true,"sortable": true,"visible": true,"linkKeyCode": "companyId","linkCode": "companySymbolValue","link": "companySymbols","extends": "companySymbols" + "field": "id","type": 2,"length": 255,"name": "Значение реквизита","shortname": "Значение реквизита","searchable": true,"sortable": true,"visible": true,"linkKeyCode": "companyId","linkCode": "companySymbolValue","link": "companySymbols","extends": "companySymbols","ignore": true } , {"code": "workflowStatus", @@ -1699,6 +1699,8 @@ "confirmation": "shortName,tradingCode", + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", + "fields": [ {"code": "id", "type": 1,"name": "Идентификатор записи","shortname": "ID","link": "company","linkCode": "id","required": true @@ -1911,6 +1913,8 @@ "name": "Удаление категории участника клиринга", + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", + "fields": [ {"code": "id", "type": 1,"name": "Идентификатор записи","shortname": "ID","link": "clearingCategory","linkCode": "id","required": true @@ -1990,6 +1994,8 @@ "name": "Удаление контакта компании", + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", + "fields": [ {"code": "id", "type": 1,"name": "Идентификатор записи","shortname": "ID","link": "contact","linkCode": "id","required": true @@ -2189,6 +2195,8 @@ "confirmation": "documentType,number,companyId", + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", + "fields": [ {"code": "id", "type": 1,"name": "Идентификатор записи","shortname": "ID","link": "profileDocument","linkCode": "id","required": true @@ -2270,6 +2278,8 @@ "name": "Удаление реквизита компании", + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", + "fields": [ {"code": "id", "type": 1,"name": "Идентификатор записи","shortname": "ID","link": "profileDocument","linkCode": "id","required": true @@ -2327,7 +2337,7 @@ } , {"code": "issuerId", - "type": 1,"dbname": "Идентификатор эмитента","name": "Наименование эмитента","shortname": "Эмитент","searchable": true,"sortable": true,"link": "company" + "type": 1,"dbname": "Идентификатор эмитента","name": "Наименование эмитента","shortname": "Эмитент","searchable": true,"sortable": true,"link": "company","linkCode": "shortName" } , {"code": "shortName", @@ -2471,7 +2481,7 @@ } , {"code": "issuerId", - "type": 1,"dbname": "Идентификатор эмитента","name": "Наименование эмитента","shortname": "Эмитент","searchable": true,"sortable": true,"link": "company","extends": "security" + "type": 1,"dbname": "Идентификатор эмитента","name": "Наименование эмитента","shortname": "Эмитент","searchable": true,"sortable": true,"link": "company","extends": "security","linkCode": "shortName" } , {"code": "shortNameEng", @@ -2553,7 +2563,7 @@ } , {"code": "issuerId", - "type": 1,"name": "Наименование эмитента","shortname": "Эмитент","link": "company" + "type": 1,"name": "Наименование эмитента","shortname": "Эмитент","link": "company","linkCode": "shortName" } , {"code": "shortNameEng", @@ -2636,7 +2646,7 @@ } , {"code": "issuerId", - "type": 1,"name": "Наименование эмитента","shortname": "Эмитент","link": "company" + "type": 1,"name": "Наименование эмитента","shortname": "Эмитент","link": "company","linkCode": "shortName" } , {"code": "shortNameEng", @@ -2663,6 +2673,8 @@ "confirmation": "securitySymbol,shortName", + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", + "fields": [ {"code": "id", "type": 1,"name": "Идентификатор записи","shortname": "ID","link": "moneyMarketSecurity","linkCode": "id","required": true @@ -2744,11 +2756,11 @@ } , {"code": "lotSize", - "field": "securityId","type": 11,"name": "Размер лота","shortname": "Лот","searchable": true,"sortable": true,"visible": true,"linkKeyCode": "securityId","linkCode": "lotSize","link": "listing","extends": "listing" + "field": "securityId","type": 11,"name": "Размер лота","shortname": "Лот","searchable": true,"sortable": true,"visible": true,"linkKeyCode": "securityId","linkCode": "lotSize","link": "listing","extends": "listing","ignore": true } , {"code": "issuerId", - "type": 1,"dbname": "Идентификатор эмитента","name": "Наименование эмитента","shortname": "Эмитент","searchable": true,"sortable": true,"link": "company","extends": "security" + "type": 1,"dbname": "Идентификатор эмитента","name": "Наименование эмитента","shortname": "Эмитент","searchable": true,"sortable": true,"link": "company","linkCode": "shortName","extends": "security" } , {"code": "shortNameEng", @@ -2806,7 +2818,7 @@ } , {"code": "issuerId", - "type": 1,"name": "Наименование эмитента","shortname": "Эмитент","link": "company" + "type": 1,"name": "Наименование эмитента","shortname": "Эмитент","link": "company","linkCode": "shortName" } , {"code": "shortNameEng", @@ -2865,7 +2877,7 @@ } , {"code": "issuerId", - "type": 1,"name": "Наименование эмитента","shortname": "Эмитент","link": "company" + "type": 1,"name": "Наименование эмитента","shortname": "Эмитент","link": "company","linkCode": "shortName" } , {"code": "shortNameEng", @@ -2888,6 +2900,8 @@ "confirmation": "securitySymbol,shortName", + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", + "fields": [ {"code": "id", "type": 1,"name": "Идентификатор записи","shortname": "ID","link": "equitySecurity","linkCode": "id","required": true @@ -2959,11 +2973,11 @@ } , {"code": "lotSize", - "field": "securityId","type": 11,"name": "Размер лота","shortname": "Лот","searchable": true,"sortable": true,"visible": true,"linkKeyCode": "securityId","linkCode": "lotSize","link": "listing","extends": "listing" + "field": "securityId","type": 11,"name": "Размер лота","shortname": "Лот","searchable": true,"sortable": true,"visible": true,"linkKeyCode": "securityId","linkCode": "lotSize","link": "listing","extends": "listing","ignore": true } , {"code": "issuerId", - "type": 1,"dbname": "Идентификатор эмитента","name": "Наименование эмитента","shortname": "Эмитент","searchable": true,"sortable": true,"link": "company","extends": "security" + "type": 1,"dbname": "Идентификатор эмитента","name": "Наименование эмитента","shortname": "Эмитент","searchable": true,"sortable": true,"link": "company","linkCode": "shortName","extends": "security" } , {"code": "shortNameEng", @@ -3041,7 +3055,7 @@ } , {"code": "issuerId", - "type": 1,"name": "Наименование эмитента","shortname": "Эмитент","link": "company" + "type": 1,"name": "Наименование эмитента","shortname": "Эмитент","link": "company","linkCode": "shortName" } , {"code": "shortNameEng", @@ -3120,7 +3134,7 @@ } , {"code": "issuerId", - "type": 1,"name": "Наименование эмитента","shortname": "Эмитент","link": "company" + "type": 1,"name": "Наименование эмитента","shortname": "Эмитент","link": "company","linkCode": "shortName" } , {"code": "shortNameEng", @@ -3248,15 +3262,15 @@ "fields": [ {"code": "securityId", - "type": 1,"dbname": "Идентификатор инструмента","name": "Наименование инструмента","shortname": "Инструмент","searchable": true,"sortable": true,"link": "security","linkCode": "shortName" + "type": 1,"dbname": "Идентификатор инструмента","name": "Наименование инструмента","shortname": "Инструмент","searchable": true,"sortable": true,"visible": true,"link": "security","linkCode": "shortName" } , {"code": "market", - "type": 12,"dbname": "Код торговой секции","name": "Наименование режима","shortname": "Режим","searchable": true,"sortable": true,"link": "market","linkCode": "description" + "type": 12,"dbname": "Код торговой секции","name": "Наименование режима","shortname": "Режим","searchable": true,"sortable": true,"visible": true,"link": "market","linkCode": "description" } , {"code": "lotSize", - "type": 11,"name": "Размер лота","shortname": "Лот","searchable": true,"sortable": true + "type": 11,"name": "Размер лота","shortname": "Лот","searchable": true,"sortable": true,"visible": true } , {"code": "symbolCode", @@ -3300,7 +3314,7 @@ } , {"code": "market", - "type": 12,"name": "Наименование режима","shortname": "Режим","link": "market","required": true,"linkCode": "code" + "type": 12,"name": "Наименование режима","shortname": "Режим","link": "market","linkCode": "description","required": true } , {"code": "lotSize", @@ -3333,7 +3347,7 @@ } , {"code": "market", - "type": 12,"name": "Наименование режима","shortname": "Режим","link": "market","linkCode": "code","required": true,"enabled": false + "type": 12,"name": "Наименование режима","shortname": "Режим","link": "market","linkCode": "description","required": true,"enabled": false } , {"code": "lotSize", @@ -3356,6 +3370,8 @@ "confirmation": "securityId,market", + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", + "fields": [ {"code": "id", "type": 1,"name": "Идентификатор записи","shortname": "ID","link": "listing","linkCode": "id","required": true @@ -3593,6 +3609,8 @@ "confirmation": "companyId,code", + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", + "fields": [ {"code": "id", "type": 1,"name": "Идентификатор записи","shortname": "ID","link": "clientCode","linkCode": "id","required": true @@ -3628,11 +3646,11 @@ } , {"code": "moneyAccountId", - "type": 1,"dbname": "Идентификатор денежного счета","name": "Номер денежного счета","shortname": "Денежный счет","searchable": true,"sortable": true,"link": "account" + "type": 1,"dbname": "Идентификатор денежного счета","name": "Номер денежного счета","shortname": "Денежный счет","searchable": true,"sortable": true,"link": "account","linkCode": "account" } , {"code": "depoAccountId", - "type": 1,"dbname": "Идентификатор депозитарного счета","name": "Номер депозитарного счета","shortname": "Депозитарный счет","searchable": true,"sortable": true,"link": "account" + "type": 1,"dbname": "Идентификатор депозитарного счета","name": "Номер депозитарного счета","shortname": "Депозитарный счет","searchable": true,"sortable": true,"link": "account","linkCode": "account" } , {"code": "tradingClearingRegistryType", @@ -3728,6 +3746,8 @@ "confirmation": "companyId,code", + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", + "fields": [ {"code": "id", "type": 1,"name": "Идентификатор записи","shortname": "ID","link": "clientCode","linkCode": "id","required": true @@ -3751,7 +3771,7 @@ "fields": [ {"code": "companyId", - "type": 1,"dbname": "Идентификатор участника","name": "Наименование участника","shortname": "Участник","searchable": true,"sortable": true,"visible": true,"link": "company" + "type": 1,"dbname": "Идентификатор участника","name": "Наименование участника","shortname": "Участник","searchable": true,"sortable": true,"visible": true,"link": "company","linkCode": "shortName" } , {"code": "tradingCode", @@ -4242,7 +4262,7 @@ } , {"code": "status", - "type": 12,"dbname": "Код статуса","name": "Наименование статуса","shortname": "Статус","searchable": true,"sortable": true,"visible": true,"link": "serviceStatus","extends": "account" + "field": "accountId","type": 12,"dbname": "Код статуса","name": "Наименование статуса","shortname": "Статус","searchable": true,"sortable": true,"visible": true,"linkKeyCode": "id","linkCode": "status","link": "account","extends": "account" } , {"code": "id", @@ -4254,7 +4274,7 @@ "name": "Добавление счета вывода средств из ПРЦ", - "confirmation": "currency,bankIdentificationCode,bankName,correspondentAccount,correspondentAccountName,taxpayerIdentificationNumber,taxRegistrationReasonCode,account,destination", + "confirmation": "currency,bankIdentificationCode,bankName,correspondentAccount,correspondentAccountName,taxpayerIdentificationNumber,taxRegistrationReasonCode,account", "class": "ru.spcex.clearing.backendapi.controller.request.cud.account.BankAccountNewAction", @@ -4296,7 +4316,7 @@ } , {"code": "companyId", - "type": 1,"name": "Компания","shortname": "Компания","link": "company","linkCode": "shortName","required": true + "type": 1,"name": "Компания","shortname": "Компания","link": "company","linkCode": "shortName","visible": false } ] } @@ -4305,7 +4325,7 @@ "name": "Изменение счета вывода средств из ПРЦ", - "confirmation": "currency,bankIdentificationCode,bankName,correspondentAccount,correspondentAccountName,taxpayerIdentificationNumber,taxRegistrationReasonCode,account,destination", + "confirmation": "currency,bankIdentificationCode,bankName,correspondentAccount,correspondentAccountName,taxpayerIdentificationNumber,taxRegistrationReasonCode,account", "class": "ru.spcex.clearing.backendapi.controller.request.cud.account.BankAccountUpdateAction", @@ -4358,6 +4378,8 @@ "confirmation": "currency,bankIdentificationCode,correspondentAccount,taxpayerIdentificationNumber,taxRegistrationReasonCode,account", + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", + "fields": [ {"code": "id", "type": 1,"name": "Идентификатор записи","shortname": "ID","link": "bankAccount","linkCode": "id","required": true @@ -4499,11 +4521,11 @@ } , {"code": "companyId", - "type": 1,"dbname": "Идентификатор компании","name": "Наименование компании","shortname": "Компания","searchable": false,"sortable": false,"visible": true,"link": "company","linkCode": "shortName" + "type": 1,"dbname": "Идентификатор компании","name": "Наименование компании","shortname": "Компания","searchable": false,"sortable": false,"link": "company","linkCode": "shortName" } , {"code": "securityId", - "type": 1,"dbname": "Идентификатор инструмента","name": "Наименование инструмента","shortname": "Инструмент","searchable": false,"sortable": true,"visible": true,"link": "security","linkCode": "shortName" + "type": 1,"dbname": "Идентификатор инструмента","name": "Наименование инструмента","shortname": "Инструмент","searchable": false,"sortable": true,"link": "security","linkCode": "shortName" } , {"code": "id", @@ -4533,6 +4555,10 @@ {"code": "taskTime", "type": 5,"name": "Время задачи","shortname": "Время задачи","required": true } + , + {"code": "taskStatus", + "type": 12,"name": "Наименование статуса","shortname": "Статус","link": "taskStatus","required": true + } , {"code": "section", "type": 12,"name": "Секция","shortname": "Секция","link": "section","linkCode": "name","linkKeyCode": "code" @@ -4541,17 +4567,13 @@ {"code": "sessionType", "type": 12,"name": "Тип клиринговой сессии","shortname": "Тип клиринговой сессии","link": "sessionType","linkCode": "name","linkKeyCode": "code" } - , - {"code": "taskStatus", - "type": 12,"name": "Наименование статуса","shortname": "Статус","link": "taskStatus","required": true - } , {"code": "companyId", - "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName" + "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName","visible": false } , {"code": "securityId", - "type": 1,"name": "Наименование инструмента","shortname": "Инструмент","link": "security","linkCode": "shortName" + "type": 1,"name": "Наименование инструмента","shortname": "Инструмент","link": "security","linkCode": "shortName","visible": false } ] } @@ -4574,6 +4596,10 @@ {"code": "taskTime", "type": 5,"name": "Время задачи","shortname": "Время задачи","required": true } + , + {"code": "taskStatus", + "type": 12,"name": "Наименование статуса","shortname": "Статус","link": "taskStatus","required": true + } , {"code": "section", "type": 12,"name": "Секция","shortname": "Секция","link": "section","linkCode": "name","linkKeyCode": "code" @@ -4582,17 +4608,13 @@ {"code": "sessionType", "type": 12,"name": "Тип клиринговой сессии","shortname": "Тип клиринговой сессии","link": "sessionType","linkCode": "name","linkKeyCode": "code" } - , - {"code": "taskStatus", - "type": 12,"name": "Наименование статуса","shortname": "Статус","link": "taskStatus","required": true - } , {"code": "companyId", - "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName" + "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName","visible": false } , {"code": "securityId", - "type": 1,"name": "Наименование инструмента","shortname": "Инструмент","link": "security","linkCode": "shortName" + "type": 1,"name": "Наименование инструмента","shortname": "Инструмент","link": "security","linkCode": "shortName","visible": false } ] } @@ -4601,7 +4623,9 @@ "name": "Блокировка шаблона расписания операционного дня", - "confirmation": "task,taskTime,taskStatus,companyId,securityId", + "confirmation": "task,taskTime,taskStatus,section,sessionType", + + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", "fields": [ {"code": "id", @@ -4664,7 +4688,7 @@ } , {"code": "companyId", - "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName" + "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName","visible": false } ] } @@ -4689,7 +4713,7 @@ } , {"code": "companyId", - "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName" + "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName","visible": false } ] } @@ -4698,7 +4722,9 @@ "name": "Блокировка записи в календаре", - "confirmation": "clearingDate,dayStatus,companyId", + "confirmation": "clearingDate,dayStatus", + + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", "fields": [ {"code": "id", @@ -4749,11 +4775,11 @@ } , {"code": "companyId", - "type": 1,"dbname": "Идентификатор компании","name": "Наименование компании","shortname": "Компания","searchable": false,"sortable": false,"visible": true,"link": "company","linkCode": "shortName" + "type": 1,"dbname": "Идентификатор компании","name": "Наименование компании","shortname": "Компания","searchable": false,"sortable": false,"link": "company","linkCode": "shortName" } , {"code": "securityId", - "type": 1,"dbname": "Идентификатор инструмента","name": "Наименование инструмента","shortname": "Инструмент","searchable": false,"sortable": true,"visible": true,"link": "security","linkCode": "shortName" + "type": 1,"dbname": "Идентификатор инструмента","name": "Наименование инструмента","shortname": "Инструмент","searchable": false,"sortable": true,"link": "security","linkCode": "shortName" } , {"code": "id", @@ -4787,6 +4813,10 @@ {"code": "taskTime", "type": 5,"name": "Время задачи","shortname": "Время задачи","required": true } + , + {"code": "taskStatus", + "type": 12,"name": "Наименование статуса","shortname": "Статус","link": "taskStatus","required": true + } , {"code": "section", "type": 12,"name": "Секция","shortname": "Секция","link": "section","linkCode": "name","linkKeyCode": "code" @@ -4795,17 +4825,13 @@ {"code": "sessionType", "type": 12,"name": "Тип клиринговой сессии","shortname": "Тип клиринговой сессии","link": "sessionType","linkCode": "name","linkKeyCode": "code" } - , - {"code": "taskStatus", - "type": 12,"name": "Наименование статуса","shortname": "Статус","link": "taskStatus","required": true - } , {"code": "companyId", - "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName" + "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName","visible": false } , {"code": "securityId", - "type": 1,"name": "Наименование инструмента","shortname": "Инструмент","link": "security","linkCode": "shortName" + "type": 1,"name": "Наименование инструмента","shortname": "Инструмент","link": "security","linkCode": "shortName","visible": false } ] } @@ -4832,6 +4858,10 @@ {"code": "taskTime", "type": 5,"name": "Время задачи","shortname": "Время задачи","required": true } + , + {"code": "taskStatus", + "type": 12,"name": "Наименование статуса","shortname": "Статус","link": "taskStatus","required": true + } , {"code": "section", "type": 12,"name": "Секция","shortname": "Секция","link": "section","linkCode": "name","linkKeyCode": "code" @@ -4840,17 +4870,13 @@ {"code": "sessionType", "type": 12,"name": "Тип клиринговой сессии","shortname": "Тип клиринговой сессии","link": "sessionType","linkCode": "name","linkKeyCode": "code" } - , - {"code": "taskStatus", - "type": 12,"name": "Наименование статуса","shortname": "Статус","link": "taskStatus","required": true - } , {"code": "companyId", - "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName" + "type": 1,"name": "Наименование компании","shortname": "Компания","link": "company","linkCode": "shortName","visible": false } , {"code": "securityId", - "type": 1,"name": "Наименование инструмента","shortname": "Инструмент","link": "security","linkCode": "shortName" + "type": 1,"name": "Наименование инструмента","shortname": "Инструмент","link": "security","linkCode": "shortName","visible": false } ] } @@ -4859,7 +4885,9 @@ "name": "Блокировка расписания", - "confirmation": "task,taskTime,clearingDate,market,taskStatus,companyId,securityId", + "confirmation": "task,clearingDate,taskTime,taskStatus,section,sessionType", + + "class": "ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction", "fields": [ {"code": "id", @@ -4964,79 +4992,24 @@ } ] ,"actions":[ - {"method":"post", - - "destination": "GBAL", - - "group": "Обмен с расчетной организацией", - - "name": "Зачисление остатков (загрузка ДФ-57 и ДФ-01)", - - "fields": [] - } - , - {"method":"post", - - "destination": "ABLK", - - "group": "Обмен с расчетной организацией", - - "name": "Блокировка счета (загрузка ДФ-12)", - - "fields": [] - } - , {"method":"post", "destination": "GALB", "group": "Обмен с расчетной организацией", - "name": "Запрос остатков по всем счетам (экспорт ДФ-08)", + "name": "Запрос остатков по всем счетам (отправка ДФ-51, ДФ-56 для получения ответа ДФ-01, ДФ-57)", "fields": [] } , {"method":"post", - "destination": "ADBL", + "destination": "OUTV", "group": "Обмен с расчетной организацией", - "name": "Дозачисление/списание остатков (загрузка ДФ-16)", - - "fields": [] - } - , - {"method":"post", - - "destination": "CORD", - - "group": "Обмен с расчетной организацией", - - "name": "Формирование сводного платежного поручения (экспорт ДФ-03/ДФ-11)", - - "fields": [] - } - , - {"method":"post", - - "destination": "CORC", - - "group": "Обмен с расчетной организацией", - - "name": "Получение подтверждения переводов (загрузка ДФ-04)", - - "fields": [] - } - , - {"method":"post", - - "destination": "CMBA", - - "group": "Обмен с расчетной организацией", - - "name": "Формирование распоряжения на перевод с ТБС (экспорт ДФ-11)", + "name": "Вывод свободных средств инициаторов В (отправка ДФ-54 для получения ответа ДФ-55)", "fields": [] } @@ -5054,22 +5027,66 @@ , {"method":"post", - "destination": "GACA", + "destination": "LIMM", "group": "Обмен с Торговой системой", - "name": "Создание файла остатков CSV по клиринговым счетам", + "name": "Выгрузка в Торговую систему остатков по деньгам (отправка lim)", "fields": [] } , {"method":"post", - "destination": "GAIA", + "destination": "LIMS", "group": "Обмен с Торговой системой", - "name": "Создание файла остатков CSV по внутренним информационным счетам", + "name": "Выгрузка в Торговую систему остатков по бумагам (отправка lim)", + + "fields": [] + } + , + {"method":"post", + + "destination": "LOCM", + + "group": "Обмен с интеграционными модулями", + + "name": "Загрузка участников", + + "fields": [] + } + , + {"method":"post", + + "destination": "LOSC", + + "group": "Обмен с интеграционными модулями", + + "name": "Загрузка инструментов", + + "fields": [] + } + , + {"method":"post", + + "destination": "GVER", + + "group": "Общее", + + "name": "Запуск сверки", + + "fields": [] + } + , + {"method":"post", + + "destination": "GRYT", + + "group": "Общее", + + "name": "Подготовка КС к клиринговому дню", "fields": [] } @@ -5082,59 +5099,34 @@ "name": "Запуск клиринговой сессии", - "confirmation": "companyId,securityId", + "confirmation": "section,sessionType", "fields": [ + {"code": "section", + "type": 12,"name": "Секция","shortname": "Секция","link": "section","linkCode": "name","linkKeyCode": "code" + } + , + {"code": "sessionType", + "type": 12,"name": "Тип клиринговой сессии","shortname": "Тип клиринговой сессии","link": "sessionType","linkCode": "name","linkKeyCode": "code" + } + , {"code": "companyId", - "type": 1,"name": "Наименование инициатора","shortname": "Инициатор","link": "company","linkCode": "shortName" + "type": 1,"name": "Наименование инициатора","shortname": "Инициатор","link": "company","linkCode": "shortName","visible": false } , {"code": "securityId", - "type": 1,"name": "Наименование инструмента","shortname": "Инструмент","link": "security","linkCode": "shortName" + "type": 1,"name": "Наименование инструмента","shortname": "Инструмент","link": "security","linkCode": "shortName","visible": false } ] } , {"method":"post", - "destination": "SPRC", + "destination": "GRRT", - "group": "Клиринг", + "group": "Формирование реестров и отчетности", - "name": "Запуск преклиринга", - - "fields": [] - } - , - {"method":"post", - - "destination": "SPOC", - - "group": "Клиринг", - - "name": "Запуск постклиринга", - - "fields": [] - } - , - {"method":"post", - - "destination": "GVER", - - "group": "Клиринг", - - "name": "Запуск сверки", - - "fields": [] - } - , - {"method":"post", - - "destination": "GCMR", - - "group": "Клиринг", - - "name": "Формирование реестра участников клиринга", + "name": "Формирование реестра остатков ценных бумаг", "fields": [] } @@ -5143,187 +5135,51 @@ "destination": "GBRR", - "group": "Клиринг", + "group": "Формирование реестров и отчетности", "name": "Формирование реестра остатков денежных средств", "fields": [] } , + {"method":"post", + + "destination": "ADLR", + + "group": "Формирование реестров и отчетности", + + "name": "Формирование реестра обязательств, допущенных к клирингу", + + "fields": [] + } + , + {"method":"post", + + "destination": "CDLR", + + "group": "Формирование реестров и отчетности", + + "name": "Формирование реестра обязательств, прошедших процедуру контроля обеспечения", + + "fields": [] + } + , {"method":"post", "destination": "GORR", - "group": "Клиринг", + "group": "Формирование реестров и отчетности", "name": "Формирование реестра распоряжений, направленных расчетной организации", "fields": [] } , - {"method":"post", - - "destination": "GSRR", - - "group": "Клиринг", - - "name": "Формирование реестра отправленных отчетов", - - "fields": [] - } - , - {"method":"post", - - "destination": "GREP", - - "group": "Клиринг", - - "name": "Формирование отчетности", - - "fields": [ - {"code": "sessionId", - "type": 1,"name": "Клиринговая сессия","shortname": "Сессия","link": "session" - } - ] - } - , - {"method":"post", - - "destination": "LIMM", - - "group": "Обмен с Торговой системой", - - "name": "Выгрузка в торговую систему остатков по деньгам", - - "fields": [] - } - , - {"method":"post", - - "destination": "LIMS", - - "group": "Обмен с Торговой системой", - - "name": "Выгрузка в торговую систему остатков по бумагам", - - "fields": [] - } - , - {"method":"post", - - "destination": "LIQU", - - "group": "Клиринг", - - "name": "иквидационная сессия по обязательтсвам участника", - - "fields": [] - } - , - {"method":"post", - - "destination": "STRM", - - "group": "Клиринг", - - "name": "Начало торговой сессии секции МКР", - - "fields": [] - } - , - {"method":"post", - - "destination": "ETRM", - - "group": "Клиринг", - - "name": "Завершение торговой сессии секции МКР", - - "fields": [] - } - , - {"method":"post", - - "destination": "SIPO", - - "group": "Клиринг", - - "name": "Начало торговой сессии по первичным торгам", - - "fields": [] - } - , - {"method":"post", - - "destination": "EIPO", - - "group": "Клиринг", - - "name": "Завершение торговой сессии по первичным торгам", - - "fields": [] - } - , - {"method":"post", - - "destination": "STRF", - - "group": "Клиринг", - - "name": "Начало торговой сессии по вторичным торгам", - - "fields": [] - } - , - {"method":"post", - - "destination": "ETRF", - - "group": "Клиринг", - - "name": "Завершение торговой сессии по вторичным торгам", - - "fields": [] - } - , - {"method":"post", - - "destination": "RCHK", - - "group": "Клиринг", - - "name": "Запрос на сверку активов", - - "fields": [] - } - , - {"method":"post", - - "destination": "GRYT", - - "group": "Клиринг", - - "name": "Сформировать регистр на текущий день", - - "fields": [] - } - , - {"method":"post", - - "destination": "GRRT", - - "group": "Клиринг", - - "name": "Сформировать реестр на текущий день", - - "fields": [] - } - , {"method":"post", "destination": "GORD", - "group": "Клиринг", + "group": "Формирование реестров и отчетности", "name": "Формирование реестра распоряжений, направленных расчетному депозитарию", @@ -5332,25 +5188,51 @@ , {"method":"post", - "destination": "LOSC", + "destination": "EXLR", - "group": "Клиринг", + "group": "Формирование реестров и отчетности", - "name": "Загрузить инструменты", + "name": "Формирование реестра обязательств, исключенных из клирингового пула", "fields": [] } , {"method":"post", - "destination": "LOCM", + "destination": "LBSR", - "group": "Клиринг", + "group": "Формирование реестров и отчетности", - "name": "Загрузить участников", + "name": "Формирование реестра учета обязательств", "fields": [] } + , + {"method":"post", + + "destination": "ECNR", + + "group": "Формирование реестров и отчетности", + + "name": "Формирование реестра сделок", + + "fields": [] + } + , + {"method":"post", + + "destination": "GREP", + + "group": "Формирование реестров и отчетности", + + "name": "Формирование отчетности", + + "fields": [ + {"code": "sessionId", + "type": 1,"name": "Клиринговая сессия","shortname": "Сессия","link": "session" + } + ] + } ] } , diff --git a/clearing-parent/db-scripts/src/main/resources/db/DATA.sql b/clearing-parent/db-scripts/src/main/resources/db/DATA.sql index 28d31c8cd..ea34850e6 100644 --- a/clearing-parent/db-scripts/src/main/resources/db/DATA.sql +++ b/clearing-parent/db-scripts/src/main/resources/db/DATA.sql @@ -1,5 +1,5 @@ --- DB version: 3.5.0.21 --- DATA version: 3.5.0.5 +-- DB version: 3.5.0.26 +-- DATA version: 3.5.0.6 /* Dictionaries */ INSERT INTO ALLOWED_DICTIONARY(ID, CODE, NAME) values (1, 'ALWD', 'Разрешено') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; @@ -342,6 +342,8 @@ INSERT INTO REGISTRY_STATUS_DICTIONARY(ID, CODE, NAME) values (8, 'NACK', 'Не INSERT INTO REGISTRY_STATUS_DICTIONARY(ID, CODE, NAME) values (9, 'NACC', 'Не допущено у контрагента') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO REGISTRY_STATUS_DICTIONARY(ID, CODE, NAME) values (10, 'SPLT', 'Разделен') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + INSERT INTO BALANCE_DIMENSION_DICTIONARY(ID, CODE, NAME) values (1, 'PICS', 'Штуки') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; INSERT INTO BALANCE_DIMENSION_DICTIONARY(ID, CODE, NAME) values (2, 'LOTS', 'Лоты') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; @@ -384,69 +386,49 @@ INSERT INTO CLEARING_ACCOUNT_TYPE_DICTIONARY(ID, CODE, NAME) values (1, 'A', 'С INSERT INTO CLEARING_ACCOUNT_TYPE_DICTIONARY(ID, CODE, NAME) values (2, 'B', 'Счет клиента') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (1, 'GBAL', 'Зачисление остатков') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (1, 'GALB', 'Запрос остатков по всем счетам (отправка ДФ-51, ДФ-56 для получения ответа ДФ-01, ДФ-57)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (3, 'ABLK', 'Блокировка счета') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (2, 'OUTV', 'Вывод свободных средств инициаторов В (отправка ДФ-54 для получения ответа ДФ-55)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (4, 'GALB', 'Запрос остатков по всем счетам') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (3, 'GTRD', 'Получение сделок из Торговой системы') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (5, 'ADBL', 'Дозачисление/списание остатков') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (4, 'LIMM', 'Выгрузка в Торговую систему остатков по деньгам (отправка lim)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (7, 'CORD', 'Формирование сводного платежного поручения') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (5, 'LIMS', 'Выгрузка в Торговую систему остатков по бумагам (отправка lim)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (8, 'CORC', 'Получение подтверждения переводов') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (6, 'LOCM', 'Загрузка участников') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (9, 'GVER', 'Запуск сверки') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (7, 'LOSC', 'Загрузка инструментов') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (12, 'CMBA', 'Формирование распоряжения на перевод с ТБС') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (8, 'GVER', 'Запуск сверки') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (14, 'GCMR', 'Формирование реестра участников клиринга') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (9, 'GRYT', 'Подготовка КС к клиринговому дню') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (15, 'GBRR', 'Формирование реестра остатков денежных средств ') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (10, 'SCLR', 'Запуск клиринговой сессии') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (16, 'GORR', 'Формирование реестра распоряжений, направленных расчетной организации') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (11, 'GRRT', 'Формирование реестра остатков ценных бумаг') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (17, 'GREP', 'Формирование отчетности') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (12, 'GBRR', 'Формирование реестра остатков денежных средств') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (21, 'GSRR', 'Формирование реестра отправленных отчетов') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (13, 'ADLR', 'Формирование реестра обязательств, допущенных к клирингу') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (25, 'GTRD', 'Получение сделок из Торговой системы') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (14, 'CDLR', 'Формирование реестра обязательств, прошедших процедуру контроля обеспечения') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (32, 'GACA', 'Создание файла остатков CSV по клиринговым счетам') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (15, 'GORR', 'Формирование реестра распоряжений, направленных расчетной организации') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (33, 'GAIA', 'Создание файла остатков CSV по внутренним информацион.счетам') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (16, 'GORD', 'Формирование реестра распоряжений, направленных расчетному депозитарию') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (35, 'SCLR', 'Запуск клиринговой сессии') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (17, 'EXLR', 'Формирование реестра обязательств, исключенных из клирингового пула') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (36, 'SPRC', 'Запуск преклиринга') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (18, 'LBSR', 'Формирование реестра учета обязательств') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (37, 'SPOC', 'Запуск постклиринга') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (19, 'ECNR', 'Формирование реестра сделок') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (38, 'LIMM', 'Выгрузка в торговую систему остатков по деньгам') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (20, 'GREP', 'Формирование отчетности') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (39, 'LIMS', 'Выгрузка в торговую систему остатков по бумагам') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (21, 'STRS', 'Начало торговой сессии') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (40, 'LIQU', 'Ликвидационная сессия по обязательтсвам участника') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; - -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (41, 'STRM', 'Начало торговой сессии секции МКР') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; - -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (42, 'ETRM', 'Завершение торговой сессии секции МКР') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; - -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (43, 'SIPO', 'Начало торговой сессии по первичным торгам') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; - -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (44, 'EIPO', 'Завершение торговой сессии по первичным торгам') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; - -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (45, 'STRF', 'Начало торговой сессии по вторичным торгам') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; - -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (46, 'ETRF', 'Завершение торговой сессии по вторичным торгам') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; - -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (47, 'RCHK', 'Запрос на сверку активов') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; - -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (48, 'GRYT', 'Сформировать регистр на текущий день') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; - -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (49, 'GRRT', 'Сформировать реестр на текущий день') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; - -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (50, 'GORD', 'Формирование реестра распоряжений, направленных расчетному депозитарию') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (22, 'ETRS', 'Завершение торговой сессии') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; INSERT INTO TASK_STATUS_DICTIONARY(ID, CODE, NAME) values (1, 'ACTV', 'Активна') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; @@ -614,6 +596,20 @@ INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1015, 'SECR', 'Вал INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1016, 'SECR', 'Валюта %s не найдена.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1017, 'SECR', 'Инструмент на режиме %s уже существует.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1018, 'SECR', 'Инструмент на режиме %s не найден.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1019, 'SECR', 'Инструмент на режиме %s неактивен.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1020, 'SECR', 'Режим %s не найден.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1021, 'SECR', 'Информиция об инструментах Денежного рынка на режимах добавляется автоматически.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1022, 'SECR', 'Информиция об инструментах Денежного рынка на режимах изменяется автоматически.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1023, 'SECR', 'Информиция об инструментах Денежного рынка на режимах блокируется автоматически.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (2000, 'UTIL', 'Общая ошибка модуля utility-service.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (2001, 'UTIL', 'Нет прав на проведение данной операции.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; @@ -828,6 +824,10 @@ INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7014, 'SCHD', 'Ука INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7015, 'SCHD', 'Указанная компания неактивна.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7016, 'SCHD', 'Возможно добавить запись в календарь только на будущую дату.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7017, 'SCHD', 'Возможно добавить задачу только на будущее время.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (8000, 'CNTR', 'Общая ошибка модуля control-service.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (9000, 'BAPI', 'Ошибка проверки поля %s.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; @@ -856,12 +856,14 @@ INSERT INTO COMPANY(ID, FULL_NAME, SHORT_NAME, TRADING_CODE, CLEARING_CODE, WORK INSERT INTO COMPANY(ID, FULL_NAME, SHORT_NAME, TRADING_CODE, CLEARING_CODE, WORKFLOW_STATUS) values (4, 'ЗАО «Санкт-Петербургский Расчетно-Депозитарный Центр»', 'РДЦ', '', '', 'ACTV') ON CONFLICT (ID) DO UPDATE SET FULL_NAME = EXCLUDED.FULL_NAME, SHORT_NAME = EXCLUDED.SHORT_NAME, TRADING_CODE = EXCLUDED.TRADING_CODE, CLEARING_CODE = EXCLUDED.CLEARING_CODE, WORKFLOW_STATUS = EXCLUDED.WORKFLOW_STATUS; -INSERT INTO COMPANY(ID, FULL_NAME, SHORT_NAME, TRADING_CODE, CLEARING_CODE, WORKFLOW_STATUS) values (5, 'Центральный Банк Российской Федерации', 'ЦБ РФ', '', '', 'ACTV') ON CONFLICT (ID) DO UPDATE SET FULL_NAME = EXCLUDED.FULL_NAME, SHORT_NAME = EXCLUDED.SHORT_NAME, TRADING_CODE = EXCLUDED.TRADING_CODE, CLEARING_CODE = EXCLUDED.CLEARING_CODE, WORKFLOW_STATUS = EXCLUDED.WORKFLOW_STATUS; - INSERT INTO COMPANY_SYMBOLS(ID, COMPANY_ID, COMPANY_SYMBOL, COMPANY_SYMBOL_VALUE) values (1, 1, 'BIC', '044030920') ON CONFLICT (ID) DO UPDATE SET COMPANY_ID = EXCLUDED.COMPANY_ID, COMPANY_SYMBOL = EXCLUDED.COMPANY_SYMBOL, COMPANY_SYMBOL_VALUE = EXCLUDED.COMPANY_SYMBOL_VALUE; INSERT INTO COMPANY_SYMBOLS(ID, COMPANY_ID, COMPANY_SYMBOL, COMPANY_SYMBOL_VALUE) values (2, 2, 'BIC', '044030505') ON CONFLICT (ID) DO UPDATE SET COMPANY_ID = EXCLUDED.COMPANY_ID, COMPANY_SYMBOL = EXCLUDED.COMPANY_SYMBOL, COMPANY_SYMBOL_VALUE = EXCLUDED.COMPANY_SYMBOL_VALUE; +INSERT INTO CURRENCY(ID, CURRENCY_CODE) values (643, 'RUB') ON CONFLICT (ID) DO UPDATE SET CURRENCY_CODE = EXCLUDED.CURRENCY_CODE; + +INSERT INTO SECURITY(INSTRUMENT_TYPE, SHORT_NAME, FULL_NAME, SECURITY_SYMBOL, WORKFLOW_STATUS, ID) values ('CRNC', 'RUB', 'Российский рубль', 'RUB', 'ACTV', 643) ON CONFLICT (ID) DO UPDATE SET INSTRUMENT_TYPE = EXCLUDED.INSTRUMENT_TYPE, SHORT_NAME = EXCLUDED.SHORT_NAME, FULL_NAME = EXCLUDED.FULL_NAME, SECURITY_SYMBOL = EXCLUDED.SECURITY_SYMBOL, WORKFLOW_STATUS = EXCLUDED.WORKFLOW_STATUS; + INSERT INTO ACCOUNT(ID, COMPANY_ID, ACCOUNT, ACCOUNT_TYPE, STATUS, PROCESSING_SIGN) values (1, 1, '30414810300000006000', 'TRAN', 'ACTV', 'ALWD') ON CONFLICT (ID) DO UPDATE SET COMPANY_ID = EXCLUDED.COMPANY_ID, ACCOUNT = EXCLUDED.ACCOUNT, ACCOUNT_TYPE = EXCLUDED.ACCOUNT_TYPE, STATUS = EXCLUDED.STATUS, PROCESSING_SIGN = EXCLUDED.PROCESSING_SIGN; INSERT INTO ACCOUNT(ID, COMPANY_ID, ACCOUNT, ACCOUNT_TYPE, STATUS, PROCESSING_SIGN) values (2, 1, '30414810600000007000', 'ANLT', 'ACTV', 'ALWD') ON CONFLICT (ID) DO UPDATE SET COMPANY_ID = EXCLUDED.COMPANY_ID, ACCOUNT = EXCLUDED.ACCOUNT, ACCOUNT_TYPE = EXCLUDED.ACCOUNT_TYPE, STATUS = EXCLUDED.STATUS, PROCESSING_SIGN = EXCLUDED.PROCESSING_SIGN; diff --git a/clearing-parent/db-scripts/src/main/resources/db/DDL.sql b/clearing-parent/db-scripts/src/main/resources/db/DDL.sql index cb3537967..70978cd94 100644 --- a/clearing-parent/db-scripts/src/main/resources/db/DDL.sql +++ b/clearing-parent/db-scripts/src/main/resources/db/DDL.sql @@ -1,4 +1,4 @@ --- DB version: 3.5.0.22 +-- DB version: 3.5.0.26 /* Dictionaries */ -- allowed - Справочник признаков допустимости использования объектов @@ -1376,17 +1376,17 @@ COMMENT ON COLUMN COUPON_PERIOD_HISTORY.PERIOD_START_DATE IS 'Окончание COMMENT ON COLUMN COUPON_PERIOD_HISTORY.ID IS 'Идентификатор записи'; --- listing - Листинг инструментов +-- listing - Инструменты на режимах DROP TABLE IF EXISTS LISTING; -CREATE TABLE LISTING(SECURITY_ID bigint, LOT_SIZE numeric(72,2), MARKET varchar(4), SYMBOL_CODE varchar(255), SYMBOL_NAME varchar(255), TRADING_CURRENCY varchar(4), WORKFLOW_STATUS varchar(4), ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp); -COMMENT ON TABLE LISTING IS 'Листинг инструментов'; +CREATE TABLE LISTING(SECURITY_ID bigint, MARKET varchar(4), LOT_SIZE numeric(72,2), SYMBOL_CODE varchar(255), SYMBOL_NAME varchar(255), TRADING_CURRENCY varchar(4), WORKFLOW_STATUS varchar(4), ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp); +COMMENT ON TABLE LISTING IS 'Инструменты на режимах'; COMMENT ON COLUMN LISTING.SECURITY_ID IS 'Идентификатор инструмента (linked to security)'; -COMMENT ON COLUMN LISTING.LOT_SIZE IS 'Размер лота'; - COMMENT ON COLUMN LISTING.MARKET IS 'Код торговой секции (linked to market)'; +COMMENT ON COLUMN LISTING.LOT_SIZE IS 'Размер лота'; + COMMENT ON COLUMN LISTING.SYMBOL_CODE IS 'Код инструмента на торговой площадке'; COMMENT ON COLUMN LISTING.SYMBOL_NAME IS 'Наименование инструмента на торговой площадке'; @@ -1402,9 +1402,9 @@ COMMENT ON COLUMN LISTING.CREATED_AT IS 'Дата-время создания з COMMENT ON COLUMN LISTING.UPDATED_AT IS 'Дата-время изменения записи'; --- History log of listing - Листинг инструментов +-- History log of listing - Инструменты на режимах DROP TABLE IF EXISTS LISTING_HISTORY; -CREATE TABLE LISTING_HISTORY(LISTING_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, EVENT_TYPE VARCHAR(4), SECURITY_ID bigint, LOT_SIZE numeric(72,2), MARKET varchar(4), SYMBOL_CODE varchar(255), SYMBOL_NAME varchar(255), TRADING_CURRENCY varchar(4), WORKFLOW_STATUS varchar(4), ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp); +CREATE TABLE LISTING_HISTORY(LISTING_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, EVENT_TYPE VARCHAR(4), SECURITY_ID bigint, MARKET varchar(4), LOT_SIZE numeric(72,2), SYMBOL_CODE varchar(255), SYMBOL_NAME varchar(255), TRADING_CURRENCY varchar(4), WORKFLOW_STATUS varchar(4), ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp); COMMENT ON TABLE LISTING_HISTORY IS 'История изменений таблицы listing'; COMMENT ON COLUMN LISTING_HISTORY.LISTING_ID IS 'Идентификатор записи в таблице LISTING'; COMMENT ON COLUMN LISTING_HISTORY.EVENT_TIME IS 'Дата и время изменения'; @@ -1413,10 +1413,10 @@ COMMENT ON COLUMN LISTING_HISTORY.EVENT_TYPE IS 'Тип изменения'; COMMENT ON COLUMN LISTING_HISTORY.SECURITY_ID IS 'Идентификатор инструмента (linked to security)'; -COMMENT ON COLUMN LISTING_HISTORY.LOT_SIZE IS 'Размер лота'; - COMMENT ON COLUMN LISTING_HISTORY.MARKET IS 'Код торговой секции (linked to market)'; +COMMENT ON COLUMN LISTING_HISTORY.LOT_SIZE IS 'Размер лота'; + COMMENT ON COLUMN LISTING_HISTORY.SYMBOL_CODE IS 'Код инструмента на торговой площадке'; COMMENT ON COLUMN LISTING_HISTORY.SYMBOL_NAME IS 'Наименование инструмента на торговой площадке'; @@ -2205,10 +2205,10 @@ COMMENT ON COLUMN LAUNCHER.CREATED_AT IS 'Дата-время создания COMMENT ON COLUMN LAUNCHER.UPDATED_AT IS 'Дата-время изменения записи'; --- session - Клиринговая сессия +-- session - Клиринговые сессии DROP TABLE IF EXISTS SESSION; CREATE TABLE SESSION(ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, CLEARING_DATE date, SESSION_STATUS varchar(4), COMPANY_ID bigint, SECURITY_ID bigint, USER_ID bigint, SECTION varchar(4), SESSION_TYPE varchar(4)); -COMMENT ON TABLE SESSION IS 'Клиринговая сессия'; +COMMENT ON TABLE SESSION IS 'Клиринговые сессии'; COMMENT ON COLUMN SESSION.ID IS 'Идентификатор записи'; @@ -2231,7 +2231,7 @@ COMMENT ON COLUMN SESSION.SECTION IS 'Код наименования секци COMMENT ON COLUMN SESSION.SESSION_TYPE IS 'Код типа клиринговой сессии (linked to sessionType)'; --- History log of session - Клиринговая сессия +-- History log of session - Клиринговые сессии DROP TABLE IF EXISTS SESSION_HISTORY; CREATE TABLE SESSION_HISTORY(SESSION_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, EVENT_TYPE VARCHAR(4), ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, CLEARING_DATE date, SESSION_STATUS varchar(4), COMPANY_ID bigint, SECURITY_ID bigint, USER_ID bigint, SECTION varchar(4), SESSION_TYPE varchar(4)); COMMENT ON TABLE SESSION_HISTORY IS 'История изменений таблицы session'; From b770d8431fb1da462b76c06391b51adcb6b5ff13 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Fri, 26 May 2023 19:34:57 +0300 Subject: [PATCH 18/35] =?UTF-8?q?scheduler-service=20http://jira.mfd.msk:8?= =?UTF-8?q?088/browse/CLS-320=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=B2=20enum.=20=D0=A2=D0=B0=D0=BC=20=D0=B5=D1=89=D1=91=20?= =?UTF-8?q?=D0=BC=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=BD=D0=B0=D0=B4=D0=BE=20=D1=81?= =?UTF-8?q?=D0=B4=D0=B5=D0=BB=D0=B0=D1=82=D1=8C,=20todo.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/ru/spcex/platform/enumeration/Task.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Task.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Task.java index cbf47b0f7..bde7c6d30 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Task.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Task.java @@ -15,7 +15,7 @@ public enum Task implements IEnumKey { startPostClearing("SPOC"),// Запуск постклиринга createOrder("CORD"), createOrderConfirm("CORC"), - getAllBalance("GALB"), + getAllBalance("GALB"), // Запрос остатков по всем счетам (отправка ДФ-51, ДФ-56 для получения ответа ДФ-01, ДФ-57) createReport_GREP("GREP"), // Создание отчёта (report-service) RPRT нескольких видов, этот GREP unloadingSession_LIMM("LIMM"),//Выгрузка в торговую систему остатков по деньгам unloadingSession_LIMS("LIMS"),//Выгрузка в торговую систему остатков по бумагам @@ -37,6 +37,8 @@ public enum Task implements IEnumKey { createRegistry_GACA("GACA"), // Создание файла остатков CSV по клиринговым счетам forming_CMBA("CMBA"), // Формирование распоряжения на перевод с ТБС creatingFile_GAIA("GAIA"), // Создание файла остатков CSV по внутренним информацион.счетам + loadParty_LOCM("LOCM"), // Загрузка участников + loadIssue_LOSC("LOSC"), // Загрузка инструментов ; private final String key; From 8546affd947fbdc7615679442ad2978f3f8548d2 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Fri, 26 May 2023 19:42:26 +0300 Subject: [PATCH 19/35] meta 3.5.0.27 --- .../src/main/resources/meta/meta.json | 160 +++++++++--------- .../src/main/resources/meta/meta.xml | 43 ++--- .../backend-api/src/test/resources/meta.json | 160 +++++++++--------- 3 files changed, 186 insertions(+), 177 deletions(-) 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 e30767a8b..d48786815 100644 --- a/clearing-parent/backend-api/src/main/resources/meta/meta.json +++ b/clearing-parent/backend-api/src/main/resources/meta/meta.json @@ -1,6 +1,6 @@ { - "version": "3.5.0.26", + "version": "3.5.0.27", "enums": { @@ -2473,7 +2473,7 @@ } , {"code": "termType", - "type": 12,"dbname": "Код вида инструмента","name": "Наименование вида инструмента","shortname": "Вид инструмента","searchable": true,"sortable": true,"visible": false,"link": "termType","ignore": true + "type": 12,"dbname": "Код вида инструмента","name": "Наименование вида инструмента","shortname": "Вид инструмента","searchable": true,"sortable": true,"visible": false,"link": "termType" } , {"code": "lotSize", @@ -2638,7 +2638,7 @@ } , {"code": "termType", - "type": 12,"name": "Наименование вида инструмента","shortname": "Вид инструмента","link": "termType","visible": false + "type": 12,"name": "Наименование вида инструмента","shortname": "Вид инструмента","link": "termType" } , {"code": "description", @@ -3961,7 +3961,7 @@ ,"actions":[ {"method":"post", - "name": "Досрочное изъятие части денежных средств по депозиту МКР", + "name": "Досрочное изъятие депозита", "destination": "registries/splitDeposit", @@ -3970,8 +3970,12 @@ "class": "ru.spcex.clearing.backendapi.controller.request.cud.registry.RSplitDepositActionNew", "fields": [ + {"code": "companyId", + "type": 1,"name": "Наименование участника","shortname": "Инициатор","link": "company","linkCode": "shortName","enabled": false + } + , {"code": "contract", - "type": 2,"length": 255,"name": "Договор","shortname": "Договор","required": true + "type": 2,"length": 255,"name": "Договор","shortname": "Номер договора","required": true,"enabled": false } , {"code": "outboundAmount", @@ -5016,6 +5020,35 @@ , {"method":"post", + "destination": "SCLR", + + "group": "Клиринг", + + "name": "Запуск клиринговой сессии", + + "confirmation": "section,sessionType", + + "fields": [ + {"code": "section", + "type": 12,"name": "Секция","shortname": "Секция","link": "section","linkCode": "name","linkKeyCode": "code" + } + , + {"code": "sessionType", + "type": 12,"name": "Тип клиринговой сессии","shortname": "Тип клиринговой сессии","link": "sessionType","linkCode": "name","linkKeyCode": "code" + } + , + {"code": "companyId", + "type": 1,"name": "Наименование инициатора","shortname": "Инициатор","link": "company","linkCode": "shortName","visible": false + } + , + {"code": "securityId", + "type": 1,"name": "Наименование инструмента","shortname": "Инструмент","link": "security","linkCode": "shortName","visible": false + } + ] + } + , + {"method":"post", + "destination": "GTRD", "group": "Обмен с Торговой системой", @@ -5049,79 +5082,6 @@ , {"method":"post", - "destination": "LOCM", - - "group": "Обмен с интеграционными модулями", - - "name": "Загрузка участников", - - "fields": [] - } - , - {"method":"post", - - "destination": "LOSC", - - "group": "Обмен с интеграционными модулями", - - "name": "Загрузка инструментов", - - "fields": [] - } - , - {"method":"post", - - "destination": "GVER", - - "group": "Общее", - - "name": "Запуск сверки", - - "fields": [] - } - , - {"method":"post", - - "destination": "GRYT", - - "group": "Общее", - - "name": "Подготовка КС к клиринговому дню", - - "fields": [] - } - , - {"method":"post", - - "destination": "SCLR", - - "group": "Клиринг", - - "name": "Запуск клиринговой сессии", - - "confirmation": "section,sessionType", - - "fields": [ - {"code": "section", - "type": 12,"name": "Секция","shortname": "Секция","link": "section","linkCode": "name","linkKeyCode": "code" - } - , - {"code": "sessionType", - "type": 12,"name": "Тип клиринговой сессии","shortname": "Тип клиринговой сессии","link": "sessionType","linkCode": "name","linkKeyCode": "code" - } - , - {"code": "companyId", - "type": 1,"name": "Наименование инициатора","shortname": "Инициатор","link": "company","linkCode": "shortName","visible": false - } - , - {"code": "securityId", - "type": 1,"name": "Наименование инструмента","shortname": "Инструмент","link": "security","linkCode": "shortName","visible": false - } - ] - } - , - {"method":"post", - "destination": "GRRT", "group": "Формирование реестров и отчетности", @@ -5233,6 +5193,50 @@ } ] } + , + {"method":"post", + + "destination": "LOCM", + + "group": "Обмен с интеграционными модулями", + + "name": "Загрузка участников", + + "fields": [] + } + , + {"method":"post", + + "destination": "LOSC", + + "group": "Обмен с интеграционными модулями", + + "name": "Загрузка инструментов", + + "fields": [] + } + , + {"method":"post", + + "destination": "GVER", + + "group": "Общее", + + "name": "Запуск сверки", + + "fields": [] + } + , + {"method":"post", + + "destination": "GRYT", + + "group": "Общее", + + "name": "Подготовка КС к клиринговому дню", + + "fields": [] + } ] } , 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 8cdbfd236..b08418cf1 100644 --- a/clearing-parent/backend-api/src/main/resources/meta/meta.xml +++ b/clearing-parent/backend-api/src/main/resources/meta/meta.xml @@ -1,6 +1,6 @@ - + @@ -569,7 +569,7 @@ - + @@ -609,7 +609,7 @@ - + @@ -921,12 +921,13 @@ - - - + + + + - + @@ -1168,26 +1169,18 @@ - - - - - - - - - - - - - -
+ + + + + + @@ -1209,6 +1202,14 @@ + + + + + + + + diff --git a/clearing-parent/backend-api/src/test/resources/meta.json b/clearing-parent/backend-api/src/test/resources/meta.json index e30767a8b..d48786815 100644 --- a/clearing-parent/backend-api/src/test/resources/meta.json +++ b/clearing-parent/backend-api/src/test/resources/meta.json @@ -1,6 +1,6 @@ { - "version": "3.5.0.26", + "version": "3.5.0.27", "enums": { @@ -2473,7 +2473,7 @@ } , {"code": "termType", - "type": 12,"dbname": "Код вида инструмента","name": "Наименование вида инструмента","shortname": "Вид инструмента","searchable": true,"sortable": true,"visible": false,"link": "termType","ignore": true + "type": 12,"dbname": "Код вида инструмента","name": "Наименование вида инструмента","shortname": "Вид инструмента","searchable": true,"sortable": true,"visible": false,"link": "termType" } , {"code": "lotSize", @@ -2638,7 +2638,7 @@ } , {"code": "termType", - "type": 12,"name": "Наименование вида инструмента","shortname": "Вид инструмента","link": "termType","visible": false + "type": 12,"name": "Наименование вида инструмента","shortname": "Вид инструмента","link": "termType" } , {"code": "description", @@ -3961,7 +3961,7 @@ ,"actions":[ {"method":"post", - "name": "Досрочное изъятие части денежных средств по депозиту МКР", + "name": "Досрочное изъятие депозита", "destination": "registries/splitDeposit", @@ -3970,8 +3970,12 @@ "class": "ru.spcex.clearing.backendapi.controller.request.cud.registry.RSplitDepositActionNew", "fields": [ + {"code": "companyId", + "type": 1,"name": "Наименование участника","shortname": "Инициатор","link": "company","linkCode": "shortName","enabled": false + } + , {"code": "contract", - "type": 2,"length": 255,"name": "Договор","shortname": "Договор","required": true + "type": 2,"length": 255,"name": "Договор","shortname": "Номер договора","required": true,"enabled": false } , {"code": "outboundAmount", @@ -5016,6 +5020,35 @@ , {"method":"post", + "destination": "SCLR", + + "group": "Клиринг", + + "name": "Запуск клиринговой сессии", + + "confirmation": "section,sessionType", + + "fields": [ + {"code": "section", + "type": 12,"name": "Секция","shortname": "Секция","link": "section","linkCode": "name","linkKeyCode": "code" + } + , + {"code": "sessionType", + "type": 12,"name": "Тип клиринговой сессии","shortname": "Тип клиринговой сессии","link": "sessionType","linkCode": "name","linkKeyCode": "code" + } + , + {"code": "companyId", + "type": 1,"name": "Наименование инициатора","shortname": "Инициатор","link": "company","linkCode": "shortName","visible": false + } + , + {"code": "securityId", + "type": 1,"name": "Наименование инструмента","shortname": "Инструмент","link": "security","linkCode": "shortName","visible": false + } + ] + } + , + {"method":"post", + "destination": "GTRD", "group": "Обмен с Торговой системой", @@ -5049,79 +5082,6 @@ , {"method":"post", - "destination": "LOCM", - - "group": "Обмен с интеграционными модулями", - - "name": "Загрузка участников", - - "fields": [] - } - , - {"method":"post", - - "destination": "LOSC", - - "group": "Обмен с интеграционными модулями", - - "name": "Загрузка инструментов", - - "fields": [] - } - , - {"method":"post", - - "destination": "GVER", - - "group": "Общее", - - "name": "Запуск сверки", - - "fields": [] - } - , - {"method":"post", - - "destination": "GRYT", - - "group": "Общее", - - "name": "Подготовка КС к клиринговому дню", - - "fields": [] - } - , - {"method":"post", - - "destination": "SCLR", - - "group": "Клиринг", - - "name": "Запуск клиринговой сессии", - - "confirmation": "section,sessionType", - - "fields": [ - {"code": "section", - "type": 12,"name": "Секция","shortname": "Секция","link": "section","linkCode": "name","linkKeyCode": "code" - } - , - {"code": "sessionType", - "type": 12,"name": "Тип клиринговой сессии","shortname": "Тип клиринговой сессии","link": "sessionType","linkCode": "name","linkKeyCode": "code" - } - , - {"code": "companyId", - "type": 1,"name": "Наименование инициатора","shortname": "Инициатор","link": "company","linkCode": "shortName","visible": false - } - , - {"code": "securityId", - "type": 1,"name": "Наименование инструмента","shortname": "Инструмент","link": "security","linkCode": "shortName","visible": false - } - ] - } - , - {"method":"post", - "destination": "GRRT", "group": "Формирование реестров и отчетности", @@ -5233,6 +5193,50 @@ } ] } + , + {"method":"post", + + "destination": "LOCM", + + "group": "Обмен с интеграционными модулями", + + "name": "Загрузка участников", + + "fields": [] + } + , + {"method":"post", + + "destination": "LOSC", + + "group": "Обмен с интеграционными модулями", + + "name": "Загрузка инструментов", + + "fields": [] + } + , + {"method":"post", + + "destination": "GVER", + + "group": "Общее", + + "name": "Запуск сверки", + + "fields": [] + } + , + {"method":"post", + + "destination": "GRYT", + + "group": "Общее", + + "name": "Подготовка КС к клиринговому дню", + + "fields": [] + } ] } , From 9a40d06eb976fe54f35828e4c6ba902568f372f5 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Fri, 26 May 2023 19:28:05 +0300 Subject: [PATCH 20/35] define marketcodes for bn session --- .../config/MarketCodesBySessionConfig.java | 28 +++++++++++++++++++ .../stage/PrimaryAuctionBnSession.java | 13 +++++---- 2 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/MarketCodesBySessionConfig.java diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/MarketCodesBySessionConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/MarketCodesBySessionConfig.java new file mode 100644 index 000000000..5e8dd6bce --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/MarketCodesBySessionConfig.java @@ -0,0 +1,28 @@ +package ru.spcex.clearing.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import ru.clearing.classes.statics.data.misc.Market; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.platform.enumeration.MarketType; +import ru.spcex.platform.enumeration.Section; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Configuration +public class MarketCodesBySessionConfig { + + @Bean(name = "marketCodesForBn") + public List marketCodesForBn(ImdgProvider imdgProvider) { + Imdg marketImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Market, Market.class); + Collection markets = marketImdg.getCollectionObjectsByFieldValues(Map.of( + "section", Section.FOND.getKey(), + "marketType", MarketType.PRMR.getKey())); + return markets.stream().map(Market::getCode).distinct().collect(Collectors.toList()); + } +} 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 80131da2b..7b69881cd 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 @@ -3,6 +3,7 @@ package ru.spcex.clearing.session.stage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.execution.ExecutionCommon; import ru.clearing.classes.statics.data.execution.ExecutionFond; @@ -40,10 +41,7 @@ public class PrimaryAuctionBnSession extends AbstractSession implements Initiali private final EndStageNotification endStageNotification; private final Imdg executionFondImdg; - - private List marketCodes = List.of("BMFC", "SMMC", "AEPC", "WBIC", "KBVC", "WBFC", "BMVC", "ABIC", - "AESC", "ABFC", "KBIC", "WBMC", "BMMC", "ABEC", "SMIC", "ABMC", "SMVC", "KBFC", "SKVC", "ABVC", "WEPC", - "KBMC", "SMFC", "BKVC", "WBVC", "BMIC", "WESC"); + private final List marketCodes; public PrimaryAuctionBnSession( @@ -56,7 +54,11 @@ public class PrimaryAuctionBnSession extends AbstractSession implements Initiali FormingRegistersOnOS formingRegistersOnOS, FormingPaymentInstruction formingPaymentInstruction, UnlockResources unlockResources, - FinishingSession finishingSession, EndStageNotification endStageNotification, IMessageResolver messageResolver, InspectionObligations inspectionObligations) { + FinishingSession finishingSession, + EndStageNotification endStageNotification, + IMessageResolver messageResolver, + InspectionObligations inspectionObligations, + @Qualifier("marketCodesForBn") List marketCodes) { super(imdgProvider, messageResolver); this.balanceRevise = balanceRevise; this.dealsPrepare = dealsPrepare; @@ -70,6 +72,7 @@ public class PrimaryAuctionBnSession extends AbstractSession implements Initiali this.endStageNotification = endStageNotification; this.executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); this.inspectionObligations = inspectionObligations; + this.marketCodes = marketCodes; } @Override From 7ad62a30796d24bcc86903956f5115891ec038ef Mon Sep 17 00:00:00 2001 From: ialbert Date: Fri, 26 May 2023 19:44:06 +0300 Subject: [PATCH 21/35] registry builder fix --- .../clearing/session/stage/impl/RegistryBuilder.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryBuilder.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryBuilder.java index 3b815b09c..bd3063509 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryBuilder.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryBuilder.java @@ -1,6 +1,7 @@ package ru.spcex.clearing.session.stage.impl; import ru.clearing.classes.statics.data.account.Account; +import ru.clearing.classes.statics.data.account.ClearingAccount; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.execution.ExecutionCommon; import ru.clearing.classes.statics.data.execution.ExecutionDeposit; @@ -25,6 +26,7 @@ public class RegistryBuilder { private Imdg accountImdg; private Imdg marketImdg; private Imdg sessionImdg; + private Imdg clearingAccountImdg; private ExecutionCommon exec; private RegistryDesignation regDsgn; @@ -41,6 +43,7 @@ public class RegistryBuilder { this.accountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class); this.marketImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Market, Market.class); this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); + this.clearingAccountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingAccount, ClearingAccount.class); return this; } @@ -64,19 +67,25 @@ public class RegistryBuilder { reg.setShortName(company.getShortName()); reg.setFullName(company.getFullName()); TradingClearingRegistry tcr = searchTradingClearingRegistry(); + ClearingAccount accountForStatement = null; if ((regDsgn.equals(RegistryDesignation.O) && side.isBuy()) || (regDsgn.equals(RegistryDesignation.T) && side.isSell())) { reg.setAccountId(tcr.getMoneyAccountId()); reg.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); reg.setBalanceDimension(BalanceDimension.MONY.getKey()); //fixme add second leg code branch + accountForStatement = clearingAccountImdg.getSingleObjectByID(tcr.getMoneyAccountId()); } else if ((regDsgn.equals(RegistryDesignation.T) && side.isBuy()) || (regDsgn.equals(RegistryDesignation.O) && side.isSell())) { reg.setAccountId(tcr.getDepoAccountId()); reg.setRegistryInstrumentType(RegistryInstrumentType.S.getKey()); reg.setBalanceDimension(BalanceDimension.PICS.getKey()); //fixme add second leg code branch + accountForStatement = clearingAccountImdg.getSingleObjectByID(tcr.getDepoAccountId()); } Account account = accountImdg.getSingleObjectByID(reg.getAccountId()); reg.setAccountType(account.getAccountType()); reg.setAccount(account.getAccount()); reg.setRegistryDesignation(regDsgn.getKey()); + if (accountForStatement != null) { + reg.setRegistryCapacity(accountForStatement.getClearingAccountType()); + } reg.setRegistryCapacity(account.getAccountType()); reg.setRegistryUnit(RegistryUnit.T.getKey()); reg.setRegistryCode(RegistryUtil.clearingCode(reg)); From 0a339688cd2994f9ee1d612c918b4369868e546b Mon Sep 17 00:00:00 2001 From: AKurakin Date: Fri, 26 May 2023 19:54:42 +0300 Subject: [PATCH 22/35] backend-api http://jira.mfd.msk:8088/browse/CLS-331 fix NPE --- .../service/validation/ActionMetaValidation.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/service/validation/ActionMetaValidation.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/service/validation/ActionMetaValidation.java index c9d171354..e74398bf2 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/service/validation/ActionMetaValidation.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/service/validation/ActionMetaValidation.java @@ -63,8 +63,12 @@ public class ActionMetaValidation implements InitializingBean { return null; } + static boolean isTrue(Boolean b) { + return b!=null && b; + } + private Function validatorConstructor(ObjectExtracted metaAction) { - if (!metaAction.getFields().stream().anyMatch(field -> field.getField().isRequired())) { + if (!metaAction.getFields().stream().anyMatch(field -> isTrue(field.getField().isRequired()))) { log.debug("Action {}: no any required fields. Do not need validator.", metaAction.getClassName()); // нет обязательных полей для валидации return null; @@ -79,7 +83,7 @@ public class ActionMetaValidation implements InitializingBean { } for (FieldExtracted field : metaAction.getFields()) { try { - if (field.getField().isRequired() != null && field.getField().isRequired()) { + if (isTrue(field.getField().isRequired())) { Object value = field.extractValue(object); } } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { @@ -111,7 +115,7 @@ public class ActionMetaValidation implements InitializingBean { IAction object = context.getValidatedObject(); for (FieldExtracted field : metaAction.getFields()) { try { - if (field.getField().isRequired() != null && field.getField().isRequired()) { + if (isTrue(field.getField().isRequired())) { Object value = field.extractValue(object); if (value == null) return of(BackEndError.ValidationError, field.getMemberName()); From b80d21288d8a315d3cbe61ae5732fff4e7baca0d Mon Sep 17 00:00:00 2001 From: ialbert Date: Fri, 26 May 2023 20:23:45 +0300 Subject: [PATCH 23/35] registry creation for session registryCapacity --- .../ru/spcex/clearing/session/stage/impl/RegistryBuilder.java | 1 - 1 file changed, 1 deletion(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryBuilder.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryBuilder.java index bd3063509..4a3fac944 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryBuilder.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryBuilder.java @@ -86,7 +86,6 @@ public class RegistryBuilder { if (accountForStatement != null) { reg.setRegistryCapacity(accountForStatement.getClearingAccountType()); } - reg.setRegistryCapacity(account.getAccountType()); reg.setRegistryUnit(RegistryUnit.T.getKey()); reg.setRegistryCode(RegistryUtil.clearingCode(reg)); reg.setTradingClearingRegistryId(exec.getTradingClearingRegistryId()); From c922351170132c17961c507800e2b60b828ba290 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Fri, 26 May 2023 21:17:46 +0300 Subject: [PATCH 24/35] fix statementService when we should send command for continue session --- .../config/MarketCodesBySessionConfig.java | 21 +++++++------------ .../clearing/service/EventsReceiver.java | 7 +++++-- .../clearing/service/StatementService.java | 8 +++---- .../service/executors/Sdf01Executor.java | 5 ----- .../session/stage/AbstractSession.java | 2 +- 5 files changed, 18 insertions(+), 25 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/MarketCodesBySessionConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/MarketCodesBySessionConfig.java index 5e8dd6bce..bffcb2729 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/MarketCodesBySessionConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/MarketCodesBySessionConfig.java @@ -2,27 +2,22 @@ package ru.spcex.clearing.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import ru.clearing.classes.statics.data.misc.Market; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.platform.enumeration.MarketType; -import ru.spcex.platform.enumeration.Section; -import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; -import java.util.Collection; import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; @Configuration public class MarketCodesBySessionConfig { @Bean(name = "marketCodesForBn") public List marketCodesForBn(ImdgProvider imdgProvider) { - Imdg marketImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Market, Market.class); - Collection markets = marketImdg.getCollectionObjectsByFieldValues(Map.of( - "section", Section.FOND.getKey(), - "marketType", MarketType.PRMR.getKey())); - return markets.stream().map(Market::getCode).distinct().collect(Collectors.toList()); +// Imdg marketImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Market, Market.class); +// Collection markets = marketImdg.getCollectionObjectsByFieldValues(Map.of( +// "section", Section.FOND.getKey(), +// "marketType", MarketType.PRMR.getKey())); +// return markets.stream().map(Market::getCode).distinct().collect(Collectors.toList()); + return List.of("BMFC", "SMMC", "AEPC", "WBIC", "KBVC", "WBFC", "BMVC", "ABIC", + "AESC", "ABFC", "KBIC", "WBMC", "BMMC", "ABEC", "SMIC", "ABMC", "SMVC", "KBFC", "SKVC", "ABVC", "WEPC", + "KBMC", "SMFC", "BKVC", "WBVC", "BMIC", "WESC"); } } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/EventsReceiver.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/EventsReceiver.java index 05f9fe61e..e080ec3f7 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/EventsReceiver.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/EventsReceiver.java @@ -8,11 +8,14 @@ import ru.spcex.clearing.platform.messaging.domain.cud.clearing.CreateRegistryRe import ru.spcex.clearing.platform.messaging.domain.cud.clearing.Sdf04Request; import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonIdRequest; import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.utilities.STradesImportedRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; import ru.spcex.clearing.session.stage.PrimaryAuctionB0Session; import ru.spcex.clearing.session.stage.PrimaryAuctionBnSession; import ru.spcex.platform.enumeration.Task; +import static ru.spcex.clearing.platform.messaging.domain.Consts.S_TRADES_IMPORTED; + @Service public class EventsReceiver extends QueueConsumer implements InitializingBean { private final ClearingService clearingService; @@ -65,9 +68,9 @@ public class EventsReceiver extends QueueConsumer implements InitializingBean { .setConsumer(primaryAuctionBnSession::continueSession) .forDestination(Consts.CONTINUE_SESSION_BN_FIRST_PART, callbacks::put); - callback(Object.class) + callback(STradesImportedRequest.class) .setConsumer(event -> clearingService.executeSTrade()) - .forDestination(Task.getOfTrades.topic(), callbacks::put); + .forDestination(S_TRADES_IMPORTED, callbacks::put); callback(CreateRegistryRequest.class) .setConsumer(event -> registryService.createRegistry(event.getRequestPayload())) .forDestination(Consts.REGISTRY_NEW, callbacks::put); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/StatementService.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/StatementService.java index e2b076037..17a544792 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/StatementService.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/StatementService.java @@ -199,13 +199,13 @@ public class StatementService extends QueueConsumer implements InitializingBean Optional uncompletedPair = Optional.empty(); switch (sdfTable) { case SDF_01 -> - uncompletedPair = pairOfSdfRequest.entrySet().stream().filter(entry -> entry.getValue().getFirst() != null && entry.getValue().getSecond() == null).findFirst().map(Map.Entry::getKey); + uncompletedPair = pairOfSdfRequest.entrySet().stream().filter(entry -> entry.getValue().getFirst() == null && entry.getValue().getSecond() != null).findFirst().map(Map.Entry::getKey); case SDF_57 -> - uncompletedPair = pairOfSdfRequest.entrySet().stream().filter(entry -> entry.getValue().getFirst() == null && entry.getValue().getSecond() != null).findFirst().map(Map.Entry::getKey); - case SDF_04 -> uncompletedPair = pairOfSdfRequest.entrySet().stream().filter(entry -> entry.getValue().getFirst() != null && entry.getValue().getSecond() == null).findFirst().map(Map.Entry::getKey); - case SDF_13 -> + case SDF_04 -> uncompletedPair = pairOfSdfRequest.entrySet().stream().filter(entry -> entry.getValue().getFirst() == null && entry.getValue().getSecond() != null).findFirst().map(Map.Entry::getKey); + case SDF_13 -> + uncompletedPair = pairOfSdfRequest.entrySet().stream().filter(entry -> entry.getValue().getFirst() != null && entry.getValue().getSecond() == null).findFirst().map(Map.Entry::getKey); } return uncompletedPair; } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java index 1d8f4bda9..cbb9e0fb7 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java @@ -21,7 +21,6 @@ import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.account.sdf01.AccountSdfRequestPart; import ru.spcex.clearing.platform.messaging.domain.cud.balance.ExportToFileRequest; import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.clearing.ContinueSessionBnRequest; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; import ru.spcex.clearing.service.LoggingService; import ru.spcex.clearing.service.model.Result; @@ -95,10 +94,6 @@ public class Sdf01Executor extends AbstractExecutor { @Override public void sendCommand(KafkaSender kafkaSender, Result result) { - ContinueSessionBnRequest continueSessionBn = new ContinueSessionBnRequest(); - continueSessionBn.setGenerationId(result.getGenerationId()); - kafkaSender.sendRequestToQueue(Consts.CONTINUE_SESSION_BN_FIRST_PART, continueSessionBn); - ExportToFileRequest exportRequest = new ExportToFileRequest(); exportRequest.setSdfGroupId(result.getGenerationId()); exportRequest.setNameOfTable(exportTableName()); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/AbstractSession.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/AbstractSession.java index c159463d4..a6c172cf7 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/AbstractSession.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/AbstractSession.java @@ -61,7 +61,7 @@ public class AbstractSession { protected boolean checkStage(TaskType t) { synchronized (this.currStage) { - return this.currStage.get().equals(t); + return t.equals(this.currStage.get()); } } From 75968bba76afd0f9465ef43b68e902bd3dcfcdf0 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Fri, 26 May 2023 21:33:00 +0300 Subject: [PATCH 25/35] company-service account-srvice http://jira.mfd.msk:8088/browse/CLS-265 http://jira.mfd.msk:8088/browse/CLS-333 system new Info-account --- .../service/InformationAccountService.java | 95 ++++++++++++++++++- .../service/AccountNotificationHelper.java | 15 +++ .../company/service/CompanyService.java | 1 + .../platform/messaging/domain/Consts.java | 1 + 4 files changed, 111 insertions(+), 1 deletion(-) diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/InformationAccountService.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/InformationAccountService.java index c5b6dfcfe..afb85ec6f 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/InformationAccountService.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/InformationAccountService.java @@ -29,11 +29,13 @@ import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.imdg.api.ImdgTransaction; import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; +import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.enumeration.IMessageResolver; import ru.spcex.platform.utils.validation.IValidator; import java.time.Instant; import java.util.Collection; +import java.util.Map; import java.util.function.Function; @Service @@ -81,6 +83,9 @@ public class InformationAccountService extends QueueConsumer implements Initiali callback(InformationAccountNewRequest.class) .setFunction(this::informationAccountNew) .forDestination(Consts.DESTINATION_INFORMATION_ACCOUNT_NEW, callbacks::put); + callback(InformationAccountNewRequest.class) + .setFunction(this::informationAccountSystemNew) + .forDestination(Consts.INFORMATION_ACCOUNT_SYSTEM_NEW, callbacks::put); init(); } @@ -94,7 +99,7 @@ public class InformationAccountService extends QueueConsumer implements Initiali String accountValue = generateInfoAccount(newId); ImdgPredicateBuilder accountPredicateBuilder = accountImdg.predicateBuilder(); - ImdgPredicate companyIdPredicate = accountPredicateBuilder.equals("companyId", 1); + ImdgPredicate companyIdPredicate = accountPredicateBuilder.equals("companyId", 1L); ImdgPredicate accountTypePredicate = accountPredicateBuilder.equals("accountType", AccountType.Anlt.getKey()); ImdgPredicate andPredicate = accountPredicateBuilder.and(companyIdPredicate, accountTypePredicate); Collection accountsAnlt = accountImdg.getCollectionObjectsByPredicate(andPredicate); @@ -154,6 +159,94 @@ public class InformationAccountService extends QueueConsumer implements Initiali return null; } + + public RequestInfoUpdate informationAccountSystemNew(BaseRequest userRequest) { + log.debug("InformationAccountNewRequest received (system)"); + + RequestInfoUpdate requestInfoUpdate; +// RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, infoAccountNewRequestValidator); +// if (requestInfoUpdate != null) return requestInfoUpdate; + final Long forCompanyId = userRequest.getRequestPayload().getCompanyId(); + + ImdgPredicateBuilder pb = accountImdg.predicateBuilder(); + { // Проверка существования счёта + Collection accountsAnlt = accountImdg.getCollectionObjectsByFieldValues(Map.of( + "companyId", forCompanyId, + "accountType", AccountType.Info.getKey() + )); + if (!accountsAnlt.isEmpty()) { + String trueMessage = messageResolver.resolve(new EnumMessage(AccountError.InfoAccountAlreadyExist, forCompanyId)); + log.warn("{}", trueMessage); + return null; + } + } + + + // todo требуется последовательность n+1 + Long newId = informationAccountImdg.nextIDSequenceFor(); + String accountValue = generateInfoAccount(newId); + + ImdgPredicate andPredicate = pb.and( + pb.equals("companyId", 1L), + pb.equals("accountType", AccountType.Anlt.getKey()) + ); + Collection accountsAnlt = accountImdg.getCollectionObjectsByPredicate(andPredicate); + if (accountsAnlt.isEmpty()) { + return requestHelper.makeErrorResponse(userRequest, AccountError.WrongFieldValue, "clearingAccountId"); + } else if (accountsAnlt.size() > 1) { + log.warn("Account for companyId 1 and accountType=ANLT contains multiply elements, use first"); + } + Account anltAccount = accountsAnlt.iterator().next(); + + Instant now = Instant.now(); + Account account = new Account(); + account.setAccount(accountValue); + account.setAccountType(AccountType.Info.getKey()); + account.setStatus(ServiceStatus.Active.getKey()); + account.setCompanyId(forCompanyId); + account.setCreated(now); + account.setUpdated(now); + requestInfoUpdate = accountService.fillAccountFromRelation(account, userRequest.getId()); + if (requestInfoUpdate != null) return requestInfoUpdate; + + ImdgTransaction imdgTransaction = imdgProvider.newTransaction(); + imdgTransaction.beginTransaction(); + boolean txOk = false; + Long informationAccountId = -1L; + Long accountId = -1L; + InformationAccount informationAccount = null; + try { + accountId = accountImdg.insert(account); + + informationAccount = new InformationAccount(); + informationAccount.setId(newId); + informationAccount.setAccountId(accountId); + informationAccount.setClearingAccountId(anltAccount.getId()); + informationAccount.setCompanyId(userRequest.getRequestPayload().getCompanyId()); + informationAccountId = informationAccountImdg.insert(informationAccount); + txOk = true; + } finally { + if (txOk) { + imdgTransaction.commitTransaction(); + TradingClearingRegistryNewRequest request = new TradingClearingRegistryNewRequest(); + request.setMoneyAccountId(informationAccountId); + request.setCompanyId(informationAccount.getCompanyId()); + log.debug("Send message to kafka \"{}\": {}", Consts.DESTINATION_TRADING_CLEARING_REGISTRY_AUTO_NEW, LogFormatter.toStringWrapper(request)); + kafkaSender.sendRequestToQueue(Consts.DESTINATION_TRADING_CLEARING_REGISTRY_AUTO_NEW, request); + log.debug("successfully processed, new information account id {}, new account id {}", + informationAccountId, + accountId); + } else { + log.debug("failed insert, new information account id {}, new account id {} (if id = -1 then insert is failed)", + informationAccountId, + accountId); + imdgTransaction.rollbackTransaction(); + } + } + + return null; + } + public String generateInfoAccount(Long id) { return "%d%d%08d%d".formatted(39911, 810, id, 7000); } diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/AccountNotificationHelper.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/AccountNotificationHelper.java index 6dc4b46d8..029c5c890 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/AccountNotificationHelper.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/AccountNotificationHelper.java @@ -9,8 +9,12 @@ import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; import ru.spcex.clearing.company.error.CompanyErrors; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.account.AccountNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.account.InformationAccountNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.account.sdf01.AccountTerminationRequest; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; +import ru.spcex.platform.enumeration.AccountType; +import ru.spcex.platform.enumeration.WorkflowStatus; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; @@ -82,4 +86,15 @@ public class AccountNotificationHelper { // ответ должен послаться в DESTINATION_COMPANY_BLOCK = "company-block"; return null; } + + public void makeInfoAccount(Long companyId) { + InformationAccountNewRequest r = new InformationAccountNewRequest(); + r.setCompanyId(companyId); + // формат "39911"+ "810" +"000001"(счётчик)+"7000"; пример: "39911810000000017000" + + log.debug("Sending messages to account-service {} for company {}", + Consts.INFORMATION_ACCOUNT_SYSTEM_NEW, companyId); + Long reqId = kafkaSender.sendRequestToQueue(Consts.INFORMATION_ACCOUNT_SYSTEM_NEW, r); + log.debug("Send request id={}", reqId); + } } \ No newline at end of file diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyService.java index 72a2fc37d..855745cf9 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyService.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyService.java @@ -152,6 +152,7 @@ public class CompanyService extends QueueConsumer implements InitializingBean { else transaction.rollbackTransaction(); } + accountNotification.makeInfoAccount(company.getId()); return null; } 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 00a27f108..a1e3a87fa 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 @@ -66,6 +66,7 @@ public interface Consts { String DESTINATION_CLEARING_ACCOUNT_UPDATE = "clearing-account-update"; String DESTINATION_INFORMATION_ACCOUNT_NEW = "information-account-new"; + String INFORMATION_ACCOUNT_SYSTEM_NEW = "information-account-system-new"; String DESTINATION_CORRESPONDENT_ACCOUNT_NEW = "correspondent-account-new"; String DESTINATION_CORRESPONDENT_ACCOUNT_UPDATE = "correspondent-account-update"; From 64eb0bf654f5ba3459b1c0ae0c25663d972df8e5 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Fri, 26 May 2023 21:46:53 +0300 Subject: [PATCH 26/35] fix side --- .../java/ru/spcex/clearing/service/ExecutionFondComponent.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/ExecutionFondComponent.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/ExecutionFondComponent.java index c296c93dc..c5170df92 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/ExecutionFondComponent.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/ExecutionFondComponent.java @@ -24,7 +24,6 @@ import ru.spcex.clearing.platform.messaging.domain.cud.registry.ExecutionType; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; import ru.spcex.clearing.service.validation.ValidationStored; import ru.spcex.platform.enumeration.CurrencyCode; -import ru.spcex.platform.enumeration.MoneyFlowSide; import ru.spcex.platform.enumeration.Section; import ru.spcex.platform.enumeration.Side; import ru.spcex.platform.imdg.api.Imdg; @@ -110,7 +109,7 @@ public class ExecutionFondComponent { log.warn("cannot parse strade.tradeNum={} strade.operation {}", sTrd.getTradeNum(), sTrd.getOperation()); return true; } - MoneyFlowSide excDepSide = sTrdSide.equals(Side.BUY) ? MoneyFlowSide.BUY : MoneyFlowSide.SELL; + Side excDepSide = sTrdSide.equals(Side.BUY) ? Side.BUY : Side.SELL; return executionFondImdg.getSingleObjectByFieldValues( Map.of("tradingDate", sTrd.getTradeDate(), "exchangeExecutionId", sTrd.getTradeNum(), From 1e8ae0a47b7eacfe94b84af86982173d4c340a7d Mon Sep 17 00:00:00 2001 From: AKurakin Date: Sat, 27 May 2023 10:53:12 +0300 Subject: [PATCH 27/35] =?UTF-8?q?company-service=20account-srvice=20http:/?= =?UTF-8?q?/jira.mfd.msk:8088/browse/CLS-265=20http://jira.mfd.msk:8088/br?= =?UTF-8?q?owse/CLS-333=20Info-account=20-=20=D0=B4=D0=BE=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B0=D0=BB=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D1=8B=D0=B9=20=D0=B8=D0=BD=D0=BA=D1=80=D0=B5=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=20=D0=BD=D0=BE=D0=BC=D0=B5=D1=80=D0=B0=20=D1=81?= =?UTF-8?q?=D1=87=D1=91=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/InformationAccountService.java | 64 ++++++++++++++++++- .../InformationAccountServiceTest.java | 27 ++++++++ 2 files changed, 88 insertions(+), 3 deletions(-) diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/InformationAccountService.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/InformationAccountService.java index afb85ec6f..61d80a88d 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/InformationAccountService.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/InformationAccountService.java @@ -1,5 +1,6 @@ package ru.spcex.clearing.account.service; +import org.apache.commons.lang3.StringUtils; import org.apache.kafka.clients.consumer.Consumer; import org.apache.kafka.clients.producer.Producer; import org.slf4j.Logger; @@ -31,12 +32,16 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.enumeration.IMessageResolver; +import ru.spcex.platform.utils.log.ExceptionUtils; import ru.spcex.platform.utils.validation.IValidator; import java.time.Instant; import java.util.Collection; import java.util.Map; +import java.util.concurrent.atomic.AtomicLong; import java.util.function.Function; +import java.util.regex.Matcher; +import java.util.regex.Pattern; @Service public class InformationAccountService extends QueueConsumer implements InitializingBean { @@ -50,6 +55,11 @@ public class InformationAccountService extends QueueConsumer implements Initiali private final Function infoAccountNewRequestValidator; private final Imdg informationAccountImdg; private final Imdg accountImdg; + /** + * Кэш-счётчик сквозных номеров счетов. + * См. accountNextId() + */ + protected AtomicLong infoCounter; @Autowired public InformationAccountService(Consumer kafkaQueue, @@ -61,7 +71,7 @@ public class InformationAccountService extends QueueConsumer implements Initiali AccountService accountService, RequestHelper requestHelper, @Qualifier("informationAccountNewRequestValidator") - Function infoAccountNewRequestValidator) { + Function infoAccountNewRequestValidator) { super(kafkaQueue, kafkaResponseQueue); this.kafkaSender = kafkaSender; this.messageResolver = messageResolver; @@ -96,7 +106,9 @@ public class InformationAccountService extends QueueConsumer implements Initiali if (requestInfoUpdate != null) return requestInfoUpdate; Long newId = informationAccountImdg.nextIDSequenceFor(); - String accountValue = generateInfoAccount(newId); + Long infoSequenceId = accountNextId(); + String accountValue = generateInfoAccount(infoSequenceId); + log.trace("New info-account id={}, sequenceId={}, account={}", newId, infoSequenceId, accountValue); ImdgPredicateBuilder accountPredicateBuilder = accountImdg.predicateBuilder(); ImdgPredicate companyIdPredicate = accountPredicateBuilder.equals("companyId", 1L); @@ -184,7 +196,9 @@ public class InformationAccountService extends QueueConsumer implements Initiali // todo требуется последовательность n+1 Long newId = informationAccountImdg.nextIDSequenceFor(); - String accountValue = generateInfoAccount(newId); + Long infoSequenceId = accountNextId(); + String accountValue = generateInfoAccount(infoSequenceId); + log.trace("New info-account id={}, sequenceId={}, account={}", newId, infoSequenceId, accountValue); ImdgPredicate andPredicate = pb.and( pb.equals("companyId", 1L), @@ -251,4 +265,48 @@ public class InformationAccountService extends QueueConsumer implements Initiali return "%d%d%08d%d".formatted(39911, 810, id, 7000); } + + /** + * Сквозной номер инфо-счетов + * + * @return infoCounter++ + */ + protected Long accountNextId() { + if (infoCounter == null) synchronized (this) { + if (infoCounter == null) { + log.debug("Init account-information counter."); + Collection allInfoAcc = accountImdg.getCollectionObjectsByFieldValues(Map.of("accountType", AccountType.Info.getKey())); + if (allInfoAcc.isEmpty()) { + infoCounter = new AtomicLong(1); + log.debug("No account information on map. n={}", infoCounter.get()); + } else { + Pattern accPattern = Pattern.compile("39911810([0-9]{8})7000"); + int maxN = 1; + int parsedCount = 0; + for (Account acc : allInfoAcc) { + try { + String number = acc.getAccount(); + if (StringUtils.isEmpty(number)) continue; + Matcher m = accPattern.matcher(number); + if (m.find()) { + String seqNumber = m.group(1); + if (StringUtils.isNotEmpty(seqNumber)) { + int accN = Integer.parseInt(seqNumber); + if (accN > maxN) maxN = accN; + } + parsedCount++; + } + } catch (Exception errParse) { + log.warn("Error parse account {}: {}", acc.getId(), ExceptionUtils.getStackTrace(errParse)); + } + } + infoCounter = new AtomicLong(maxN); + log.debug("Parsed {} information accounts ({} pattern match) in map. n={}", + allInfoAcc.size(), parsedCount, infoCounter.get()); + } + } + } + return infoCounter.getAndIncrement(); + } + } diff --git a/clearing-parent/account-service/src/test/java/ru/spcex/clearing/account/service/InformationAccountServiceTest.java b/clearing-parent/account-service/src/test/java/ru/spcex/clearing/account/service/InformationAccountServiceTest.java index 1b52c1d3f..1c0202ca3 100644 --- a/clearing-parent/account-service/src/test/java/ru/spcex/clearing/account/service/InformationAccountServiceTest.java +++ b/clearing-parent/account-service/src/test/java/ru/spcex/clearing/account/service/InformationAccountServiceTest.java @@ -4,6 +4,7 @@ import org.apache.kafka.clients.consumer.MockConsumer; import org.apache.kafka.clients.producer.MockProducer; import org.apache.kafka.clients.producer.Producer; import org.apache.kafka.clients.producer.ProducerRecord; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; @@ -32,6 +33,7 @@ import ru.spcex.clearing.test.config.ImdgTestConfig; import ru.spcex.clearing.test.config.KafkaTestConfig; import ru.spcex.platform.enumeration.*; import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService; import javax.annotation.PostConstruct; @@ -179,4 +181,29 @@ class InformationAccountServiceTest { accountImdg.delete(resultAccountNew); } + @Autowired ImdgProvider imdgProvider; + @Test + void accountIncrementSequence() { + Imdg accountInfoImdg = hazelcastServiceTest.getImdg( IMDGDistributedNames.Map_InformationAccount, InformationAccount.class ); + + { + Account account = new Account(); + account.setId(120L); + account.setAccountType(AccountType.Info.getKey()); + account.setCompanyId(10L); + account.setAccount("39911810000000127000"); + accountImdg.insert(account); + InformationAccount accountInfo = new InformationAccount(); + accountInfo.setId(121L); + accountInfo.setAccountId(account.getId()); + accountInfo.setCompanyId(account.getCompanyId()); + accountInfoImdg.insert(accountInfo); + } + InformationAccountService infoAccSvc=new InformationAccountService(null,null,null, + null, imdgProvider, null, null, null, null); + Long n = infoAccSvc.accountNextId(); + Assertions.assertEquals(12L, n); + n = infoAccSvc.accountNextId(); + Assertions.assertEquals(13L, n); + } } \ No newline at end of file From 5144b26a855bde02850d3ba3a9ac1b70b4c374f9 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Sat, 27 May 2023 11:10:10 +0300 Subject: [PATCH 28/35] =?UTF-8?q?backend-api=20SecurityController=20=D0=BE?= =?UTF-8?q?=D1=82=D0=B4=D0=B0=D1=87=D0=B0=20=D0=B2=D1=81=D0=B5=D1=85=20Sec?= =?UTF-8?q?urity=20(3=20=D0=B2=D0=B8=D0=B4=D0=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../queue/securities/SecurityController.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/securities/SecurityController.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/securities/SecurityController.java index cc00f19eb..f3b7a523a 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/securities/SecurityController.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/securities/SecurityController.java @@ -8,11 +8,15 @@ import org.springframework.stereotype.Controller; 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.instrument.issue.EquitySecurity; +import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity; +import ru.clearing.classes.statics.data.security.MoneyMarketSecurity; import ru.clearing.classes.statics.data.security.Security; import ru.spcex.clearing.backendapi.controller.response.entity.CommonGetAllResponse; import ru.spcex.clearing.backendapi.service.IStateLoader; import ru.spcex.clearing.imdg.IMDGDistributedNames; +import java.util.ArrayList; import java.util.Collection; import java.util.Map; @@ -34,9 +38,16 @@ public class SecurityController { @RequestMapping(method = RequestMethod.GET) @ResponseBody public CommonGetAllResponse getAll() { - Collection> all = stateLoader.getAllMetaTransformSpecificClass( - IMDGDistributedNames.Map_MoneyMarketSecurity, - Security.class); + Collection> all = new ArrayList<>(); + all.addAll(stateLoader.getAllMetaTransformSpecificClass( + IMDGDistributedNames.Map_MoneyMarketSecurity, MoneyMarketSecurity.class + )); + all.addAll(stateLoader.getAllMetaTransformSpecificClass( + IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class + )); + all.addAll(stateLoader.getAllMetaTransformSpecificClass( + IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class + )); CommonGetAllResponse response = new CommonGetAllResponse(); response.fromEntity(all); return response; From 2c917e0ddf89d3323bd2bdf56b2d55ca987ee154 Mon Sep 17 00:00:00 2001 From: ialbert Date: Sat, 27 May 2023 11:32:32 +0300 Subject: [PATCH 29/35] SDF01 company check fix --- .../clearing/service/validation/Sdf01NewValidationRule.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf01NewValidationRule.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf01NewValidationRule.java index a431286dd..0d0e9a756 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf01NewValidationRule.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf01NewValidationRule.java @@ -31,7 +31,7 @@ public enum Sdf01NewValidationRule implements IValidationRule Date: Sat, 27 May 2023 11:46:41 +0300 Subject: [PATCH 30/35] SDF57 processing --- .../ru/spcex/clearing/service/executors/Sdf57Executor.java | 5 ++++- .../spcex/clearing/session/stage/impl/RegistryBuilder.java | 2 ++ .../stage/impl/RequirementsAndObligationCreation.java | 4 ++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java index 58489e65b..3efdc6c1e 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java @@ -239,6 +239,9 @@ public class Sdf57Executor extends AbstractExecutor { statement.setOperationStatus(OperationStatus.Pending.getKey()); statement.setInSDfId(sdf57.getId()); statement.setInOutSDfType(InOutSDfType.type57.getKey()); + + statement.setClearingDate(LocalDate.now()); + statement.setCreated(Instant.now()); return statement; } @@ -332,7 +335,7 @@ public class Sdf57Executor extends AbstractExecutor { return Optional.ofNullable(registryImdg.getSingleObjectByPredicate(rgstrPredicate)); } - DateTimeFormatter payDateFormatter = DateTimeFormatter.ofPattern("yy.MM.dd"); + DateTimeFormatter payDateFormatter = DateTimeFormatter.ofPattern("dd.MM.yy"); private LocalDate payDate(String payDate) { if (TextUtil.isEmpty(payDate)) { diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryBuilder.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryBuilder.java index 4a3fac944..18f16b394 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryBuilder.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryBuilder.java @@ -17,6 +17,7 @@ import ru.spcex.platform.enumeration.*; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; +import java.time.Instant; import java.time.LocalDate; import java.time.format.DateTimeFormatter; @@ -61,6 +62,7 @@ public class RegistryBuilder { ISide side = getSide(exec); Registry reg = new Registry(); reg.setCompanyId(exec.getCompanyId()); + reg.setCreated(Instant.now()); Company company = searchCompany(); reg.setTradingCode(company.getTradingCode()); reg.setClearingCode(company.getClearingCode()); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RequirementsAndObligationCreation.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RequirementsAndObligationCreation.java index f1c09034d..cefc2a58a 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RequirementsAndObligationCreation.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RequirementsAndObligationCreation.java @@ -78,14 +78,14 @@ public class RequirementsAndObligationCreation implements ISessionStage { regSearchMethod.get().apply(exec, regDsgn) .ifPresentOrElse(registry -> { RegistryUpdater.updater() - .exec(partyExec) + .exec(exec) .registry(registry) .update(); registryImdg.update(registry); }, () -> { Registry newRegister = RegistryBuilder.builder() .imdg(imdgProvider) - .exec(partyExec) + .exec(exec) .registryDesignation(regDsgn) .build(); registryImdg.insert(newRegister); From f04b094ac41588de6b920dd5cd9b286e01055c9d Mon Sep 17 00:00:00 2001 From: ialbert Date: Sat, 27 May 2023 11:49:12 +0300 Subject: [PATCH 31/35] SDF01 statement#clearingDate,securityId fix --- .../service/executors/Sdf01Executor.java | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java index cbb9e0fb7..47f3f1f9c 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java @@ -45,9 +45,7 @@ import java.time.format.DateTimeFormatter; import java.util.Collection; import java.util.Map; import java.util.Optional; -import java.util.function.Consumer; import java.util.function.Function; -import java.util.function.Supplier; @Service public class Sdf01Executor extends AbstractExecutor { @@ -136,15 +134,6 @@ public class Sdf01Executor extends AbstractExecutor { Optional err = validateActiveness(company, account); if (err.isEmpty()) { - Consumer update = rgs -> { - updateReg(stmt, rgs); - registryImdg.update(rgs); - }; - Supplier create = () -> { - Registry registry = createRegistryByStatement(stmt, company, account); - registryImdg.insert(registry); - return registry; - }; Optional reg = findReg(stmt); Registry rgs; if (reg.isPresent()) { @@ -185,6 +174,11 @@ public class Sdf01Executor extends AbstractExecutor { stmt.setOperationStatus(OperationStatus.Pending.getKey()); stmt.setInSDfId(sdf01.getId()); stmt.setInOutSDfType(InOutSDfType.type1.getKey()); + stmt.setClearingDate(LocalDate.now()); + Currency currency = currencyImdg.getSingleObjectByFieldValues(Map.of("currencyCode", CurrencyCode.RUB.getKey())); + if (currency != null) { + stmt.setSecurityId(currency.getId()); + } stmt.setCreated(Instant.now()); return stmt; } From bd33c77b474c2e47ad62b85f914e0eff3917c8e1 Mon Sep 17 00:00:00 2001 From: ialbert Date: Sat, 27 May 2023 12:17:52 +0300 Subject: [PATCH 32/35] SDF01 removed registry#balance update --- .../ru/spcex/clearing/service/executors/Sdf01Executor.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java index 47f3f1f9c..dfab75a03 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java @@ -33,7 +33,6 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; import ru.spcex.platform.utils.enumeration.EnumMessage; -import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.enumeration.IMessageResolver; import ru.spcex.platform.utils.number.BigDecimalUtil; import ru.spcex.platform.utils.validation.IValidator; @@ -296,11 +295,6 @@ public class Sdf01Executor extends AbstractExecutor { } private void updateReg(Statement s, Registry r) { - InOutDirection direction = IEnumKey.getEnumByKey(InOutDirection.class, s.getInOutDirection()); - switch (direction) { - case in -> r.setBalance(r.getBalance().add(s.getAmount())); - case out -> r.setBalance(r.getBalance().subtract(s.getAmount())); - } r.setCheckBalance(s.getAmount()); BigDecimal balance = BigDecimalUtil.safeBD(r.getBalance()); BigDecimal checkBalance = BigDecimalUtil.safeBD(r.getCheckBalance()); From 1f42a6badcd9d1070b0cfbaa8b83931d605b333d Mon Sep 17 00:00:00 2001 From: ialbert Date: Sat, 27 May 2023 12:25:02 +0300 Subject: [PATCH 33/35] BalanceRevise session step 0 send command to dbf-exporter SDF-56 --- .../ru/spcex/clearing/session/stage/impl/BalanceRevise.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/BalanceRevise.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/BalanceRevise.java index 4f606bb1e..8ffe640dd 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/BalanceRevise.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/BalanceRevise.java @@ -11,6 +11,8 @@ import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.classes.statics.data.sdf.SDf56; import ru.clearing.classes.statics.data.statement.Statement; import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.importexport.SwtExporterRequest; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; import ru.spcex.clearing.session.stage.ISessionStage; import ru.spcex.clearing.session.stage.StageResult; @@ -186,6 +188,9 @@ public class BalanceRevise implements ISessionStage { sDf56.setGenerationTime(now); sDf56.setGenerationId(idGenerator.nextId()); sDf56Imdg.insert(sDf56); + SwtExporterRequest requestForExporter = new SwtExporterRequest(); + requestForExporter.setType(SwtTable.SDF_56); + kafkaSender.sendRequestToQueue(Consts.SWT_EXPORTER, requestForExporter); log.debug("successfully processed, new id {}", sDf56.getId()); } } From 7d971cd054bb6ddd9073eabd8e8e3fe6cd39586d Mon Sep 17 00:00:00 2001 From: ialbert Date: Sat, 27 May 2023 12:53:32 +0300 Subject: [PATCH 34/35] DealRevise SDF56 command to kafka --- .../spcex/clearing/session/stage/impl/BalanceRevise.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/BalanceRevise.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/BalanceRevise.java index 8ffe640dd..bb6dae9ad 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/BalanceRevise.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/BalanceRevise.java @@ -12,7 +12,7 @@ import ru.clearing.classes.statics.data.sdf.SDf56; import ru.clearing.classes.statics.data.statement.Statement; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.Consts; -import ru.spcex.clearing.platform.messaging.domain.cud.importexport.SwtExporterRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.clearing.SdfClearingRequest; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; import ru.spcex.clearing.session.stage.ISessionStage; import ru.spcex.clearing.session.stage.StageResult; @@ -188,9 +188,9 @@ public class BalanceRevise implements ISessionStage { sDf56.setGenerationTime(now); sDf56.setGenerationId(idGenerator.nextId()); sDf56Imdg.insert(sDf56); - SwtExporterRequest requestForExporter = new SwtExporterRequest(); - requestForExporter.setType(SwtTable.SDF_56); - kafkaSender.sendRequestToQueue(Consts.SWT_EXPORTER, requestForExporter); + SdfClearingRequest requestForExporter = new SdfClearingRequest(); + requestForExporter.setGroupId(sDf56.getGenerationId()); + kafkaSender.sendRequestToQueue(Consts.SDF56_PROCESS, requestForExporter); log.debug("successfully processed, new id {}", sDf56.getId()); } } From 8ea3397e16495ae5af243911c230c9f09e87f33e Mon Sep 17 00:00:00 2001 From: AKurakin Date: Sat, 27 May 2023 12:59:58 +0300 Subject: [PATCH 35/35] =?UTF-8?q?lim-exporter=20swt-exporter=20http://jira?= =?UTF-8?q?.mfd.msk:8088/browse/CLS-262=20=D0=BF=D0=BE=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D0=BB=20=D0=B8=D0=BD=D0=B8=D1=86=D0=B8=D0=B0=D0=BB?= =?UTF-8?q?=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8E=20kafka?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../clearing/lim/exporter/config/KafkaConfig.java | 7 +++++++ .../src/main/resources/application.properties | 4 ---- .../exporter/services/AbstractExporterServiceTest.java | 10 ++++++++++ .../clearing/swt/exporter/config/KafkaConfig.java | 7 +++++++ platform-parent/platform-imdg-api/pom.xml | 5 +++++ 5 files changed, 29 insertions(+), 4 deletions(-) diff --git a/clearing-parent/lim-exporter/src/main/java/ru/spcex/clearing/lim/exporter/config/KafkaConfig.java b/clearing-parent/lim-exporter/src/main/java/ru/spcex/clearing/lim/exporter/config/KafkaConfig.java index 6721788f6..79c009425 100644 --- a/clearing-parent/lim-exporter/src/main/java/ru/spcex/clearing/lim/exporter/config/KafkaConfig.java +++ b/clearing-parent/lim-exporter/src/main/java/ru/spcex/clearing/lim/exporter/config/KafkaConfig.java @@ -13,6 +13,7 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.lim.exporter.config.settings.ExportLimServiceSettings; import ru.spcex.clearing.platform.messaging.config.KafkaConsumerFactory; import ru.spcex.clearing.platform.messaging.config.KafkaProducerFactory; +import ru.spcex.clearing.platform.messaging.config.element.KafkaProducerSettings; import ru.spcex.clearing.platform.messaging.service.RequestInfo; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; import ru.spcex.platform.imdg.api.Imdg; @@ -35,6 +36,12 @@ public class KafkaConfig { } @Bean + public ProducerFactory pf(ExportLimServiceSettings settings) { + KafkaProducerSettings kafkaSettings = settings.getKafkaProducer(); + return KafkaProducerFactory.producerFactory(kafkaSettings); // Использует специальный сериализатор в JSON + } + + @Bean("kafkaTemplate") public KafkaTemplate kafkaTemplate(ProducerFactory pf) { return new KafkaTemplate<>(pf); } diff --git a/clearing-parent/lim-exporter/src/main/resources/application.properties b/clearing-parent/lim-exporter/src/main/resources/application.properties index 114f0954c..2c595a4ac 100644 --- a/clearing-parent/lim-exporter/src/main/resources/application.properties +++ b/clearing-parent/lim-exporter/src/main/resources/application.properties @@ -13,10 +13,6 @@ export-lim-service.store.password=password export-lim-service.store.server-ip=10.230.238.53 export-lim-service.store.server-port=2222 -export-lim-service.hazelcast.cluster-members=127.0.0.1:5701 -export-lim-service.hazelcast.login=dev -export-lim-service.hazelcast.password=dev-pass - export-lim-service.kafka-consumer.bootstrap-servers=localhost:9092 export-lim-service.kafka-consumer.group-id=dev-group-balance-service export-lim-service.kafka-consumer.enable-auto-commit=false diff --git a/clearing-parent/lim-exporter/src/test/java/ru/spcex/clearing/lim/exporter/services/AbstractExporterServiceTest.java b/clearing-parent/lim-exporter/src/test/java/ru/spcex/clearing/lim/exporter/services/AbstractExporterServiceTest.java index d1a6bfa32..bc857354d 100644 --- a/clearing-parent/lim-exporter/src/test/java/ru/spcex/clearing/lim/exporter/services/AbstractExporterServiceTest.java +++ b/clearing-parent/lim-exporter/src/test/java/ru/spcex/clearing/lim/exporter/services/AbstractExporterServiceTest.java @@ -2,6 +2,10 @@ package ru.spcex.clearing.lim.exporter.services; import org.junit.jupiter.api.Test; import ru.spcex.clearing.lim.exporter.AbstractServiceTest; +import ru.spcex.clearing.lim.exporter.config.KafkaConfig; +import ru.spcex.clearing.lim.exporter.config.settings.ExportLimServiceSettings; +import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; +import ru.spcex.clearing.platform.messaging.service.sender.KafkaSenderBuilderImpl; import ru.spcex.clearing.test.TestUtils; import javax.annotation.PostConstruct; @@ -23,5 +27,11 @@ class AbstractExporterServiceTest extends AbstractServiceTest { String fileName = "limits_money_202305241832.lim"; moneyExporterService.sendLimExportedNotification(fileName); //TestUtils.waitingSendAndCheckRecord(null, mockProducer); + + /* + Для интеграционного теста см. + KafkaProducerSettings kafkaSettings = settings.getKafkaProducer(); + return KafkaProducerFactory.producerFactory(kafkaSettings); // Использует специальный сериализатор в JSON + */ } } \ No newline at end of file diff --git a/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/config/KafkaConfig.java b/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/config/KafkaConfig.java index 3ad111793..69df8cc0a 100644 --- a/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/config/KafkaConfig.java +++ b/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/config/KafkaConfig.java @@ -10,6 +10,7 @@ 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.element.KafkaProducerSettings; import ru.spcex.clearing.swt.exporter.config.settings.ExportSwtServiceSettings; import ru.spcex.clearing.platform.messaging.config.KafkaConsumerFactory; import ru.spcex.clearing.platform.messaging.config.KafkaProducerFactory; @@ -35,6 +36,12 @@ public class KafkaConfig { } @Bean + public ProducerFactory pf(ExportSwtServiceSettings settings) { + KafkaProducerSettings kafkaSettings = settings.getKafkaProducer(); + return KafkaProducerFactory.producerFactory(kafkaSettings); // Использует специальный сериализатор в JSON + } + + @Bean("kafkaTemplate") public KafkaTemplate kafkaTemplate(ProducerFactory pf) { return new KafkaTemplate<>(pf); } diff --git a/platform-parent/platform-imdg-api/pom.xml b/platform-parent/platform-imdg-api/pom.xml index 69d60ff13..3f2517bfa 100644 --- a/platform-parent/platform-imdg-api/pom.xml +++ b/platform-parent/platform-imdg-api/pom.xml @@ -39,6 +39,11 @@ junit-jupiter test + + org.junit.jupiter + junit-jupiter-api + test + org.assertj assertj-core