Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
ialbert 2024-06-20 19:22:49 +03:00
commit b901f4dcb0
10 changed files with 43 additions and 30 deletions

View file

@ -210,9 +210,19 @@ public class TradingClearingRegistryListValidationConfig {
// Проверка отсутствия других TradingClearingRegistryList с этими счетами
Imdg<TradingClearingRegistryList> tradingClearingRegistryListImdg = context.obtainMap(IMDGDistributedNames.Map_TradingClearingRegistryList, TradingClearingRegistryList.class);
Long tkrId = tkrIdGetter.apply(validatedObject);
ImdgPredicateBuilder pb = tradingClearingRegistryListImdg.predicateBuilder();
Collection<TradingClearingRegistryList> listWithAccountId = tradingClearingRegistryListImdg.getCollectionObjectsByPredicate(
pb.and(
pb.equals("accountId", accountId),
pb.equals("status", WorkflowStatus.Active.getKey())
));
if (!listWithAccountId.isEmpty()){
return of(AccountError.AccountForTradingClearingRegistryAlreadyUsed, byIdObject.getAccount(), fieldName); // (5023) «Данная счет %s уже используется»
}
Long tkrId = tkrIdGetter.apply(validatedObject);
ImdgPredicate query = pb.and(
pb.equals("tradingClearingRegistryId", tkrId),
pb.equals("status", WorkflowStatus.Active.getKey()),
pb.equals("currency", byIdObject.getCurrency()));
if (idGetter != null) {
@ -223,11 +233,11 @@ public class TradingClearingRegistryListValidationConfig {
}
Collection<TradingClearingRegistryList> inOtherLists = tradingClearingRegistryListImdg.getCollectionObjectsByPredicate(query);
if (!inOtherLists.isEmpty()) {
Collection<String> duplicateAccounts = inOtherLists.stream()
.map(tradingClearingRegistryList ->
accountImdg.getSingleObjectByID(tradingClearingRegistryList.getAccountId()).getAccount())
.collect(Collectors.toSet());
return of(AccountError.AccountForTradingClearingRegistryAlreadyUsed, duplicateAccounts, fieldName); // (5023) «Счет %s уже используется»
// Collection<String> duplicateAccounts = inOtherLists.stream()
// .map(tradingClearingRegistryList ->
// accountImdg.getSingleObjectByID(tradingClearingRegistryList.getAccountId()).getAccount())
// .collect(Collectors.toSet());
return of(AccountError.CurrencyForTradingClearingRegistryListAlreadyUsed, byIdObject.getCurrency(), fieldName); // (5023) «Данная валюта %s уже используется»
}
}
}

View file

@ -29,9 +29,7 @@ public enum AccountError implements IErrorEnumId {
TCR_NOT_FOUND_GTW(5028L),
ACCOUNT_NOT_FOUND_GTW(5029L),
COMPANY_NOT_FOUND_GTW(5030L),
TCR_ALREADY_EXIST_GTW(5031L),
DEPO_ACCOUNT_NOT_FOUND_GTW(5032L),
TCR_LIST_ALREADY_EXIST_GTW(5033L),
CurrencyForTradingClearingRegistryListAlreadyUsed(5031L),
TradingClearingRegistryNotFound(3022L),
CurrencyNotFound(1016L),
;

View file

@ -55,7 +55,7 @@ public enum BackendClientCodeValidationRule implements IValidationRule<ImdgValid
"status", Status.Active.getKey()
));
if (tcrByMoneyAccount != null) {
return of(AccountError.TCR_ALREADY_EXIST_GTW);
return of(AccountError.TradingClearingRegistryAlreadyExist);
}
for (Long id : currencyIds) {
@ -65,7 +65,7 @@ public enum BackendClientCodeValidationRule implements IValidationRule<ImdgValid
"status", Status.Active.getKey()
));
if (tcrList != null) {
return of(AccountError.TCR_LIST_ALREADY_EXIST_GTW);
return of(AccountError.AccountForTradingClearingRegistryAlreadyUsed);
}
}

View file

@ -99,7 +99,7 @@ public enum GatewayClientCodeValidationRule implements IValidationRule<ImdgValid
);
if (depoAccount == null) {
context.storeObject(ClientCodeStoreObjects.DEPO_ACCOUNT, Optional.empty());
return of(AccountError.DEPO_ACCOUNT_NOT_FOUND_GTW, "depo_account");
return of(AccountError.DepoAccountNotFound, "depo_account");
}
context.storeObject(ClientCodeStoreObjects.DEPO_ACCOUNT, depoAccount);
@ -124,7 +124,7 @@ public enum GatewayClientCodeValidationRule implements IValidationRule<ImdgValid
)
);
if (tcr != null) {
return of(AccountError.TCR_ALREADY_EXIST_GTW, tcr.getCode(), "code");
return of(AccountError.TradingClearingRegistryAlreadyExist, tcr.getCode(), "code");
}
return Optional.empty();
}
@ -149,7 +149,7 @@ public enum GatewayClientCodeValidationRule implements IValidationRule<ImdgValid
predicateBuilder.equals("status", Status.Active.getKey())
));
if (!tcrList.isEmpty()) {
return of(AccountError.TCR_ALREADY_EXIST_GTW, tcrList.iterator().next().getCurrency(), "currency");
return of(AccountError.TradingClearingRegistryAlreadyExist, tcrList.iterator().next().getCurrency(), "currency");
}
return Optional.empty();
}

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<meta version="3.12.0.91">
<meta version="3.12.0.92">
<enums>
<allowed id="1" code="ALWD" name="Разрешено"/>
<allowed id="2" code="DEND" name="Запрещено"/>
@ -9,7 +9,7 @@
<section id="1" code="MKR" name="Секция Денежного рынка МКР"/>
<section id="2" code="FOND" name="Фондовая секция"/>
<section id="3" code="CURR" name="Валютная секция"/>
<section id="4" code="MULT" name="Многосекционный клиринг"/>
<section id="4" code="MULT" name="Единая"/>
<userRole id="1" code="ADMN" name="Администратор Клиринга МКР"/>
<userRole id="2" code="SPVS" name="Супервайзер Клиринга МКР"/>
<userRole id="3" code="SCRT" name="Администратор безопасности Клиринга МКР"/>
@ -459,6 +459,7 @@
<errorCode id="5028" code="ACNT" name="Указанный ТКР не найден в клиринговой системе."/>
<errorCode id="5029" code="ACNT" name="Счет %s не найден в клиринговой системе."/>
<errorCode id="5030" code="ACNT" name="Компания %s не найдена в клиринговой системе."/>
<errorCode id="5031" code="ACNT" name="Для данной валюты в ТКР уже задан счет."/>
<!-- error code for balance-service -->
<errorCode id="5200" code="BLNC" name="Общая ошибка модуля balance-service."/>
<errorCode id="5210" code="BLNC" name="Клиринговая сессия неактивна."/>

View file

@ -1,6 +1,6 @@
{
"version": "3.12.0.93",
"version": "3.12.0.94",
"enums": {
@ -4607,7 +4607,7 @@
"destination": "registries/identificationFunds",
"confirmation": "balance,tradingClearingRegistryId",
"confirmation": "securitySymbol,balance,tradingClearingRegistryId",
"class": "ru.spcex.clearing.backendapi.controller.request.cud.registry.IdentificationFundsActionNew",

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--?xml-stylesheet type="text/xsl" href="\..\corp-reports\src\data\meta\meta.server.xslt"?-->
<meta version="3.12.0.93">
<meta version="3.12.0.94">
<!-- _xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" _xsi:noNamespaceSchemaLocation="file:///E:/d/projects/meta/from/meta.xsd" -->
<!--Здесь словари-->
<enums>
@ -1069,7 +1069,7 @@
<id type="1" name="Регистр требований" shortname="Регистр требований" required="true" enabled="false" visible="false"/>
<balance type="10" name="Сумма" shortname="Сумма" required="true"/>
</post>
<post name="Идентификация неразмеченных средств" destination="registries/identificationFunds" confirmation="balance,tradingClearingRegistryId" class="ru.spcex.clearing.backendapi.controller.request.cud.registry.IdentificationFundsActionNew">
<post name="Идентификация неразмеченных средств" destination="registries/identificationFunds" confirmation="securitySymbol,balance,tradingClearingRegistryId" class="ru.spcex.clearing.backendapi.controller.request.cud.registry.IdentificationFundsActionNew">
<id type="1" name="Идентификатор записи" shortname="ID" link="registry" linkCode="id" required="true"/>
<balance type="10" name="Сумма" shortname="Сумма" required="true"/>
<companyId type="1" name="Наименование компании" shortname="Компания" link="company" linkCode="shortName" required="true"/>

View file

@ -1,6 +1,6 @@
{
"version": "3.12.0.93",
"version": "3.12.0.94",
"enums": {
@ -4607,7 +4607,7 @@
"destination": "registries/identificationFunds",
"confirmation": "balance,tradingClearingRegistryId",
"confirmation": "securitySymbol,balance,tradingClearingRegistryId",
"class": "ru.spcex.clearing.backendapi.controller.request.cud.registry.IdentificationFundsActionNew",

View file

@ -31,7 +31,6 @@ import ru.spcex.clearing.session.stage.impl.compound.CompoundStageDealsPrepare;
import ru.spcex.clearing.session.stage.monitor.SessionMonitor;
import ru.spcex.clearing.session.stage.monitor.SessionMonitorFactory;
import ru.spcex.clearing.session.stage.task.DealsPreparePayload;
import ru.spcex.clearing.session.stage.task.EndStageNotificationPayload;
import ru.spcex.clearing.session.stage.task.FinishingSessionPayload;
import ru.spcex.clearing.session.stage.task.FormingPaymentInstructionPayload;
import ru.spcex.clearing.session.stage.task.FormingRegistersOnOSPayload;
@ -281,10 +280,13 @@ public class UnitedSession extends AbstractSession implements InitializingBean {
}
//stage 11
{
EndStageNotificationPayload payload = new EndStageNotificationPayload();
payload.setSection(currSession.getSection());
payload.setSessionId(currSession.getId());
runStage(TaskType.EndStageNotification, payload, endStageNotification);
//Убрал этот шаг по требованию Насти, 18.06.2024
//выпадало на строчке EndStageNotification:101
// throw new IllegalArgumentException("Unsupported section " + section);
// EndStageNotificationPayload payload = new EndStageNotificationPayload();
// payload.setSection(currSession.getSection());
// payload.setSessionId(currSession.getId());
// runStage(TaskType.EndStageNotification, payload, endStageNotification);
endSession();
}
} catch (StageException e) {

View file

@ -1,5 +1,5 @@
-- DB version: 3.12.0.91
-- DATA version: 3.12.0.91
-- DB version: 3.12
-- DATA version: 3.12.0.92
/* Dictionaries */
@ -20,7 +20,7 @@ INSERT INTO SECTION_DICTIONARY(ID, CODE, NAME) values (2, 'FOND', 'Фондов
INSERT INTO SECTION_DICTIONARY(ID, CODE, NAME) values (3, 'CURR', 'Валютная секция') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO SECTION_DICTIONARY(ID, CODE, NAME) values (4, 'MULT', 'Многосекционный клиринг') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO SECTION_DICTIONARY(ID, CODE, NAME) values (4, 'MULT', 'Единая') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO USER_ROLE_DICTIONARY(ID, CODE, NAME) values (1, 'ADMN', 'Администратор Клиринга МКР') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
@ -894,6 +894,8 @@ INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5029, 'ACNT', 'Сче
INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5030, 'ACNT', 'Компания %s не найдена в клиринговой системе.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5031, 'ACNT', 'Для данной валюты в ТКР уже задан счет.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5200, 'BLNC', 'Общая ошибка модуля balance-service.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5210, 'BLNC', 'Клиринговая сессия неактивна.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;