diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d5ed41ad5..3d3ae8284 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -17,7 +17,7 @@ preflight: stage: preflight script: - pwd - - git clone "http://gitlab-ci-token:$ACCESS_TOKEN@git.mfd.msk/mfd/clearing_test.git" + - git clone -b xml-files "http://gitlab-ci-token:$ACCESS_TOKEN@git.mfd.msk/mfd/clearing_test.git" - find /builds/mfd/clearing/clearing_test -name ".gitkeep" -type f -delete artifacts: name: "$CI_COMMIT_REF_NAME" 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 ec7bc9cc8..3cb9ecd93 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.23.295.169", + "version": "3.23.295.170", "enums": { @@ -11064,31 +11064,31 @@ } , {"code": "currencyPair", - "name": "Код валютной пары","shortname": "Код валютной пары","type": 2,"length": 12 + "name": "Код валютной пары","shortname": "Код валютной пары","type": 2,"length": 12,"visible": true } , {"code": "currencyPairId", - "name": "Идентификатор валютной пары","shortname": "Валютная пара","type": 1 + "name": "Идентификатор валютной пары","shortname": "Валютная пара","type": 1,"visible": true } , {"code": "settlementType", - "name": "Код расчета","shortname": "Код расчета","type": 2,"length": 4 + "name": "Код расчета","shortname": "Код расчета","type": 2,"length": 4,"visible": true } , {"code": "value", - "name": "Ставка","shortname": "Ставка","type": 10 + "name": "Ставка","shortname": "Ставка","type": 10,"visible": true } , {"code": "penaltyValue", - "name": "Ставка переноса при нехватке валюты","shortname": "Ставка переноса при нехватке валюты","type": 10 + "name": "Ставка переноса при нехватке валюты","shortname": "Ставка переноса при нехватке валюты","type": 10,"visible": true } , {"code": "quoteValue", - "name": "Ставка переноса при нехватке рублей","shortname": "Ставка переноса при нехватке рублей","type": 10 + "name": "Ставка переноса при нехватке рублей","shortname": "Ставка переноса при нехватке рублей","type": 10,"visible": true } , {"code": "workflowStatus", - "name": "Статус","shortname": "Статус","type": 2,"length": 4,"link": "workflowStatus" + "name": "Статус","shortname": "Статус","type": 2,"length": 4,"link": "workflowStatus","visible": true } ] ,"actions":[ @@ -11176,23 +11176,23 @@ } , {"code": "currencyId", - "name": "Идентификатор валюты","shortname": "Валюта","type": 1 + "name": "Идентификатор валюты","shortname": "Валюта","type": 1,"visible": true } , {"code": "currency", - "name": "Код валюты","shortname": "Код валюты","type": 2,"length": 4 + "name": "Код валюты","shortname": "Код валюты","type": 2,"length": 4,"visible": true } , {"code": "valueDate", - "name": "Дата, на которую расчетный курс","shortname": "Дата","type": 6 + "name": "Дата, на которую расчетный курс","shortname": "Дата","type": 6,"visible": true } , {"code": "value", - "name": "Расчетный курс","shortname": "Расчетный курс","type": 10 + "name": "Расчетный курс","shortname": "Расчетный курс","type": 10,"visible": true } , {"code": "workflowStatus", - "name": "Статус","shortname": "Статус","type": 2,"length": 4,"link": "workflowStatus" + "name": "Статус","shortname": "Статус","type": 2,"length": 4,"link": "workflowStatus","visible": true } ] ,"actions":[ 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 1742d743f..14dce0b3e 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 @@ - + @@ -2564,13 +2564,13 @@ - - - - - - - + + + + + + + @@ -2591,11 +2591,11 @@ - - - - - + + + + + diff --git a/clearing-parent/db-scripts/src/main/resources/db/DICTIONARIES.sql b/clearing-parent/db-scripts/src/main/resources/db/DICTIONARIES.sql index f3bbda9b0..68479fc09 100644 --- a/clearing-parent/db-scripts/src/main/resources/db/DICTIONARIES.sql +++ b/clearing-parent/db-scripts/src/main/resources/db/DICTIONARIES.sql @@ -1337,6 +1337,8 @@ INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (11003, 'DFLT', 'Доб INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (11004, 'DFLT', 'Изменение ДУК возможно только для балансирующих сделок ПЛ') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (11005, 'DFLT', 'Неверное значение параметра %s') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (11006, 'DFLT', 'Запись с кодом %s в справочнике %s не найдена.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (11007, 'DFLT', 'Не заданы обязательные поля.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (11008, 'DFLT', 'Недопустимая операция.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; INSERT INTO RESIDENCE_DICTIONARY(ID, CODE, NAME) values (1, 'RUS', 'Резидент РФ') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; INSERT INTO RESIDENCE_DICTIONARY(ID, CODE, NAME) values (2, 'XTRN', 'Нерезидент РФ') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/listener/TaskListener.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/listener/TaskListener.java index 91590fd68..0a8e64a71 100644 --- a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/listener/TaskListener.java +++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/listener/TaskListener.java @@ -6,6 +6,7 @@ import java.math.RoundingMode; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; +import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @@ -40,6 +41,7 @@ import ru.spcex.clearing.platform.messaging.service.QueueConsumer; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; import ru.spcex.platform.enumeration.CurrencyCode; import ru.spcex.platform.enumeration.ObjectType; +import ru.spcex.platform.enumeration.OrderStatus; import ru.spcex.platform.enumeration.OvernightType; import ru.spcex.platform.enumeration.Priority; import ru.spcex.platform.enumeration.Task; @@ -53,6 +55,7 @@ public class TaskListener extends QueueConsumer implements InitializingBean { protected final Logger log = LoggerFactory.getLogger(getClass()); private final ImdgQueryService imdgQueryService; private final Imdg registryImdg; + private final Imdg orderCurrencyImdg; private final SwapOvernightOrderService swapOvernightOrderService; private final SpotOvernightOrderService spotOvernightOrderService; private final OrderCurrencyTriExportService orderCurrencyTriExportService; @@ -74,6 +77,7 @@ public class TaskListener extends QueueConsumer implements InitializingBean { super(kafkaQueue, kafkaProducer); this.imdgQueryService = imdgQueryService; this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); + this.orderCurrencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OrderCurrency, OrderCurrency.class); this.swapOvernightOrderService = swapOvernightOrderService; this.spotOvernightOrderService = spotOvernightOrderService; this.orderCurrencyTriExportService = orderCurrencyTriExportService; @@ -96,6 +100,14 @@ public class TaskListener extends QueueConsumer implements InitializingBean { private void createOrder(BaseRequest newReq) { log.info("CROR createOrder started, request={}", newReq); + Collection cretOrderIds = imdgQueryService.getCretOrderCurrency(); + for (Long cretOrderId : cretOrderIds) { + OrderCurrency orderCurrency = orderCurrencyImdg.getSingleObjectByID(cretOrderId); + orderCurrency.setStatus(OrderStatus.REJECTED.getKey()); + orderCurrency.setUpdated(Instant.now()); + orderCurrencyImdg.update(orderCurrency); + } + Collection registryIds = imdgQueryService.getCurrencyRegistry(); //todo очередность создания if (registryIds == null || registryIds.isEmpty()) { diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/ImdgQueryService.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/ImdgQueryService.java index e400d01ea..329fed658 100644 --- a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/ImdgQueryService.java +++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/ImdgQueryService.java @@ -77,6 +77,13 @@ public class ImdgQueryService { return registryImdg.getCollectionIdsByPredicate(registryPredicate); } + public Collection getCretOrderCurrency() { + ImdgPredicateBuilder builder = orderCurrencyImdg.predicateBuilder(); + return orderCurrencyImdg.getCollectionIdsByPredicate( + builder.equals("status", OrderStatus.CREATED.getKey()) + ); + } + public Collection getClccOrderCurrencyIds() { ImdgPredicateBuilder builder = orderCurrencyImdg.predicateBuilder(); CompanyRoleSet companyRoleSet = companyRoleSetImdg.getFirstObjectByPredicate( diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderCalculationService.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderCalculationService.java index e121a51c7..4066f2f0e 100644 --- a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderCalculationService.java +++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderCalculationService.java @@ -133,11 +133,10 @@ public class OrderCalculationService { private BigDecimal swapPriceCalc(String baseCurrency, BigDecimal s, BigDecimal n, int precision) { Rates rate = imdgQueryService.getRate(baseCurrency, LocalDate.now()); - BigDecimal p = BigDecimal.ONE.divide(n, MC); - log.info("Calculation swap price: {}*{}*{}", s, n, p); + BigDecimal p = n.divide(BigDecimal.valueOf(365), MC); + log.info("Calculation swap price: {}*{}*{}", rate.getValue(), s, p); return rate.getValue() .multiply(s, MC) - .multiply(n, MC) .multiply(p, MC) .setScale(precision, RoundingMode.HALF_UP); } diff --git a/clr_test/clearing-all/clearing_testing_utils/clearing-checker/dbf-swt-checker.jar b/clr_test/clearing-all/clearing_testing_utils/clearing-checker/dbf-swt-checker.jar index 7a7a64060..61da34e50 100644 Binary files a/clr_test/clearing-all/clearing_testing_utils/clearing-checker/dbf-swt-checker.jar and b/clr_test/clearing-all/clearing_testing_utils/clearing-checker/dbf-swt-checker.jar differ diff --git a/clr_test/clearing-all/clearing_testing_utils/clearing-converter/swt-dbf-converter.jar b/clr_test/clearing-all/clearing_testing_utils/clearing-converter/swt-dbf-converter.jar index 1eb659e34..f5654e744 100644 Binary files a/clr_test/clearing-all/clearing_testing_utils/clearing-converter/swt-dbf-converter.jar and b/clr_test/clearing-all/clearing_testing_utils/clearing-converter/swt-dbf-converter.jar differ diff --git a/clr_test/clearing-all/clearing_testing_utils/clearing-tester/clearing-tester.jar b/clr_test/clearing-all/clearing_testing_utils/clearing-tester/clearing-tester.jar index 525503fbd..75cfd536c 100644 Binary files a/clr_test/clearing-all/clearing_testing_utils/clearing-tester/clearing-tester.jar and b/clr_test/clearing-all/clearing_testing_utils/clearing-tester/clearing-tester.jar differ diff --git a/clr_test/clearing-all/kill_all.sh b/clr_test/clearing-all/kill_all.sh index fbe1df543..d1e4609d2 100644 --- a/clr_test/clearing-all/kill_all.sh +++ b/clr_test/clearing-all/kill_all.sh @@ -7,8 +7,10 @@ kill -9 $(ps -ef | grep java | grep company-service.jar | awk '{print $2}') kill -9 $(ps -ef | grep java | grep clearing-service.jar | awk '{print $2}') kill -9 $(ps -ef | grep java | grep dbf-exporter.jar | awk '{print $2}') kill -9 $(ps -ef | grep java | grep lim-exporter.jar | awk '{print $2}') +kill -9 $(ps -ef | grep java | grep xml-exporter.jar | awk '{print $2}') kill -9 $(ps -ef | grep java | grep swt-exporter.jar | awk '{print $2}') kill -9 $(ps -ef | grep java | grep dbf-importer.jar | awk '{print $2}') +kill -9 $(ps -ef | grep java | grep xml-importer.jar | awk '{print $2}') kill -9 $(ps -ef | grep java | grep trade-importer.jar | awk '{print $2}') kill -9 $(ps -ef | grep java | grep imdg.jar | awk '{print $2}') kill -9 $(ps -ef | grep java | grep securities-service.jar | awk '{print $2}') diff --git a/clr_test/clearing-all/launch_all.sh b/clr_test/clearing-all/launch_all.sh index b6ec0f048..04075d010 100644 --- a/clr_test/clearing-all/launch_all.sh +++ b/clr_test/clearing-all/launch_all.sh @@ -15,10 +15,13 @@ java -jar $CLEARING_HOME/bin/account-service.jar --spring.config.location=$CLEAR java -jar $CLEARING_HOME/bin/clearing-service.jar --spring.config.location=$CLEARING_HOME/settings/clearing-service/ & java -jar $CLEARING_HOME/bin/scheduler-service.jar --spring.config.location=$CLEARING_HOME/settings/scheduler-service/ & -java -jar $CLEARING_HOME/bin/dbf-exporter.jar --spring.config.location=$CLEARING_HOME/settings/dbf-exporter/ & -java -jar $CLEARING_HOME/bin/dbf-importer.jar --spring.config.location=$CLEARING_HOME/settings/dbf-importer/ & +#java -jar $CLEARING_HOME/bin/dbf-exporter.jar --spring.config.location=$CLEARING_HOME/settings/dbf-exporter/ & +#java -jar $CLEARING_HOME/bin/dbf-importer.jar --spring.config.location=$CLEARING_HOME/settings/dbf-importer/ & java -jar $CLEARING_HOME/bin/swt-exporter.jar --spring.config.location=$CLEARING_HOME/settings/swt-exporter/ & java -jar $CLEARING_HOME/bin/swt-importer.jar --spring.config.location=$CLEARING_HOME/settings/swt-importer/ & +java -jar $CLEARING_HOME/bin/xml-exporter.jar --spring.config.location=$CLEARING_HOME/settings/xml-exporter/ & +java -jar $CLEARING_HOME/bin/xml-importer.jar --spring.config.location=$CLEARING_HOME/settings/xml-importer/ & + echo all services launched starting. $? diff --git a/clr_test/clearing-all/settings/xml-exporter/application.properties b/clr_test/clearing-all/settings/xml-exporter/application.properties new file mode 100644 index 000000000..97507d811 --- /dev/null +++ b/clr_test/clearing-all/settings/xml-exporter/application.properties @@ -0,0 +1,38 @@ +spring.main.web-application-type=none + +export-xml-service.hazelcast.cluster-members=localhost:5701 +export-xml-service.hazelcast.login=dev +export-xml-service.hazelcast.password=dev-pass + +export-xml-service.common.encoding=cp866 +export-xml-service.common.threads-count=10 + +export-xml-service.store.local-temp-dir=/opt/clearing/files/xml/exporter/ + +export-xml-service.store.out-pay-val-dir.RUB=/out/prc/ +export-xml-service.store.out-pay-val-dir.EUR=/out/prc/ +export-xml-service.store.out-pay-val-dir.CNY=/out/prc/ + +export-xml-service.store.user=user +export-xml-service.store.password=Aa111111 +export-xml-service.store.server-ip=sftp +export-xml-service.store.server-port=22 + +export-xml-service.kafka-consumer.bootstrap-servers=kafka:9092 +export-xml-service.kafka-consumer.group-id=dev-group-balance-service +export-xml-service.kafka-consumer.enable-auto-commit=false +export-xml-service.kafka-consumer.session-timeout-ms=30000 +export-xml-service.kafka-consumer.auto-offset-reset=latest +export-xml-service.kafka-consumer.linger-ms=1 +export-xml-service.kafka-consumer.buffer-memory=33554432 + +export-xml-service.kafka-producer.bootstrap-servers=kafka:9092 +export-xml-service.kafka-producer.acks=all +export-xml-service.kafka-producer.retries=0 +export-xml-service.kafka-producer.batch-size=16384 +export-xml-service.kafka-producer.linger-ms=1 +export-xml-service.kafka-producer.buffer-memory=33554432 + +export-xml-service.section=S +export-xml-service.sender=LCC +export-xml-service.receiver=\u0422\u0435\u0441\u0442 diff --git a/clr_test/clearing-all/settings/xml-importer/application.properties b/clr_test/clearing-all/settings/xml-importer/application.properties new file mode 100644 index 000000000..869450ee5 --- /dev/null +++ b/clr_test/clearing-all/settings/xml-importer/application.properties @@ -0,0 +1,44 @@ +spring.main.web-application-type=none + +import-xml-service.process-files=true +import-xml-service.process-lks-files=false + +import-xml-service.scheduler.check-src-dir-cron=*/3 * * * * * + +import-xml-service.store.delete-src-files=false +import-xml-service.store.src-dir=/opt/clearing/files/xml/importer/in +import-xml-service.store.out-dir=/opt/clearing/files/xml/importer/out/ +import-xml-service.store.out-dir-error=/opt/clearing/files/xml/importer/error/ + +import-xml-service.common.encoding-source=cp866 +import-xml-service.common.insert-batch-size=100 +import-xml-service.common.threads-count=10 + +#sftpSrcDir +import-xml-service.store.sftp-in.sftp-src-dir=/in/prc/ +import-xml-service.store.sftp-in.sftp-src-pay-val-dir.rub=/in/prc/ +import-xml-service.store.sftp-in.sftp-src-pay-val-dir.eur=/in/prc/ + +import-xml-service.store.sftp-in.user=user +import-xml-service.store.sftp-in.password=Aa111111 +import-xml-service.store.sftp-in.server-ip=sftp +import-xml-service.store.sftp-in.server-port=22 + +import-xml-service.hazelcast.cluster-members=localhost:5701 +import-xml-service.hazelcast.login=dev +import-xml-service.hazelcast.password=dev-pass + +import-xml-service.kafka-producer.bootstrap-servers=kafka:9092 +import-xml-service.kafka-producer.acks=all +import-xml-service.kafka-producer.retries=0 +import-xml-service.kafka-producer.batch-size=16384 +import-xml-service.kafka-producer.linger-ms=1 +import-xml-service.kafka-producer.buffer-memory=33554432 + +import-xml-service.kafka-consumer.bootstrap-servers=kafka:9092 +import-xml-service.kafka-consumer.group-id=dev-group-clearing-service +import-xml-service.kafka-consumer.enable-auto-commit=false +import-xml-service.kafka-consumer.session-timeout-ms=30000 +import-xml-service.kafka-consumer.auto-offset-reset=latest +import-xml-service.kafka-consumer.linger-ms=1 +import-xml-service.kafka-consumer.buffer-memory=33554432 \ No newline at end of file diff --git a/clr_test/run_test_docker_containers.py b/clr_test/run_test_docker_containers.py index 94477239c..b9f203eeb 100644 --- a/clr_test/run_test_docker_containers.py +++ b/clr_test/run_test_docker_containers.py @@ -10,7 +10,7 @@ logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(me DATA_ROOT_DIR = os.environ['CLEARING_TEST_DIR'] CLR_TEST_DIR = os.environ['CLR_TEST_DIR'] RESULT_FILES_DIR = os.environ['RESULT_FILES_DIR'] -DDL_VERSION_FROM = (3, 18, 0) +DDL_VERSION_FROM = (3, 23, 0) def run_docker(folder_name: str) -> int: @@ -103,7 +103,7 @@ def apply_test_case(folder: str) -> None: copy_directory(f"{DATA_ROOT_DIR}/{folder}/data", f"{CLR_TEST_DIR}/db/data") - remove_files_with_extensions(".xml") + # remove_files_with_extensions(".xml") # change_date(folder) exit_code = run_docker(folder) append_to_log_file(folder, exit_code)