gateway-api securities-service http://jira.mfd.msk:8088/browse/CLS-663 CURR(currency-pair)

This commit is contained in:
AKurakin 2024-04-27 17:01:22 +03:00
parent 0e5f2ed054
commit 53df6b6b62
9 changed files with 759 additions and 66 deletions

View file

@ -7,7 +7,6 @@ import ru.spcex.clearing.gatewayapi.controller.inbound.request.WithSecurityId;
import ru.spcex.clearing.gatewayapi.controller.inbound.request.listing.fond.*;
import ru.spcex.clearing.gatewayapi.service.adapter.SecurityRequestAdapter;
import ru.spcex.clearing.platform.messaging.domain.Consts;
import ru.spcex.clearing.platform.messaging.domain.cud.company.CurrencyPairSecurityGatewayRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.company.EquitySecurityGatewayRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.company.FixedIncomeGatewayRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.company.SecurityFondGatewayRequest;

View file

@ -15,17 +15,21 @@ public class CurrencyPairSecurityRequestAdapter {
CurrencyPairSecurityNewRequest securityNewRequest = new CurrencyPairSecurityNewRequest();
securityNewRequest.setInstrumentType(InstrumentType.CRNC.getKey());
securityNewRequest.setSecuritySymbol(currencyInstrument.getTicker());
securityNewRequest.setShortName(currencyInstrument.getTicker());
securityNewRequest.setFullName(currencyInstrument.getName());
securityNewRequest.setBaseUnitSize(currencyInstrument.getNumberOfLotCurrency());
securityNewRequest.setSettlementType(currencyInstrument.getSettleCode());
securityNewRequest.setClearingOrganization(currencyInstrument.getClearingOrganization());
securityNewRequest.setWorkflowStatus(currencyInstrument.getWorkflowStatus());
//to listing
securityNewRequest.setMinStep(currencyInstrument.getMinStep());
securityNewRequest.setPrecision(currencyInstrument.getPrecision());
securityNewRequest.setLotSize(currencyInstrument.getLotSize());
// для currencyPairId
req.setLotCurrencyLetterCode(currencyInstrument.getLotCurrencyLetterCode());
req.setMatchedCurrencyLetterCode(currencyInstrument.getMatchedCurrencyLetterCode());
req.setCurrencySecurityNewRequest(securityNewRequest);
// req.setUuid(currencyInstrument.getInitiatorId() != null ? currencyInstrument.getInitiatorId().toString() : null);
return req;

View file

@ -432,9 +432,12 @@ class GatewayControllerTest extends AbstractControllerTest{
]
}
""";
CurrListingsRequest cudReqObj = JsonUtil.readValue(CURR_REQ, CurrListingsRequest.class);
Assertions.assertEquals("CNY", cudReqObj.getCurrencyInstrumentList().get(0).getLotCurrencyLetterCode());
Assertions.assertEquals("RUB", cudReqObj.getCurrencyInstrumentList().get(0).getMatchedCurrencyLetterCode());
//ACT
MvcResult mvcResult = perform(MockMvcRequestBuilders.post(LISTING_FOND_URL)
MvcResult mvcResult = perform(MockMvcRequestBuilders.post(LISTING_CURR_URL)
.contentType(MediaType.APPLICATION_JSON)
.content(CURR_REQ))
.andDo(print())//output to the log request and response

View file

@ -0,0 +1,629 @@
{
"id": "5ae29407-834a-460d-bf1e-612dda694527",
"type": "DAY_START",
"section": "CURR",
"datetime": "26.04.2024 09:30:00:065",
"currency_specification": [
{
"id": "617f3172-20a9-4f83-b008-db4548a4de44",
"ticker": "CNYRUB_TOD_N",
"name": "Спот-инструмент китайский юань с расчетами сегодня без клиринга и расчетов в АО СПВБ",
"exchange_offexchange": "EXCHANGE",
"min_step": 1,
"precision": 4,
"settle_code": "T0",
"value_date": "TOD",
"symbol_trading_mode": "N",
"lot_currency_letter_code": "CNY",
"matched_currency_letter_code": "RUB",
"trading_mode": "NVAD",
"lot_size": 1,
"clearing_organization": "АО СПВБ",
"settlement_organization": "НКО АО ПРЦ",
"matched_settlement_organization": "НКО АО ПРЦ",
"number_of_lot_currency": 1,
"start_trading_date": "06.03.2024",
"specification_approval_date": "06.03.2024",
"specification_approval_number": "2",
"workflow_status": "ACTV"
},
{
"id": "3c0fb45e-2d6c-4ece-9444-13acd7426f5c",
"ticker": "ARSRUB_TOD_C",
"name": "тест",
"exchange_offexchange": "EXCHANGE",
"min_step": 1,
"precision": 2,
"settle_code": "T0",
"value_date": "TOD",
"symbol_trading_mode": "C",
"lot_currency_letter_code": "ARS",
"matched_currency_letter_code": "RUB",
"trading_mode": "UVAV",
"lot_size": 1000,
"clearing_organization": "1",
"settlement_organization": "1",
"matched_settlement_organization": "1",
"number_of_lot_currency": 1,
"start_trading_date": "14.03.2024",
"specification_approval_date": "13.03.2024",
"specification_approval_number": "123",
"workflow_status": "BLKD"
},
{
"id": "c019b97e-7480-4b8a-83b9-742afc0f8789",
"ticker": "ALLCVE_TOD_C",
"name": "а",
"exchange_offexchange": "EXCHANGE",
"min_step": 5,
"precision": 4,
"settle_code": "T0",
"value_date": "TOD",
"symbol_trading_mode": "C",
"lot_currency_letter_code": "ALL",
"matched_currency_letter_code": "CVE",
"trading_mode": "UVAV",
"lot_size": 2,
"clearing_organization": "в",
"settlement_organization": "а",
"matched_settlement_organization": "п",
"number_of_lot_currency": 2,
"start_trading_date": "14.03.2024",
"specification_approval_date": "14.03.2024",
"specification_approval_number": "4",
"workflow_status": "BLKD"
},
{
"id": "e3577cd1-4d36-4691-91ae-72536896fc64",
"ticker": "EURRUB_TOD_C",
"name": "Спот-инструмент казахстанский тенге с расчетами сегодня с клирингом в АО СПВБ",
"exchange_offexchange": "EXCHANGE",
"min_step": 1,
"precision": 4,
"settle_code": "T0",
"value_date": "TOD",
"symbol_trading_mode": "C",
"lot_currency_letter_code": "EUR",
"matched_currency_letter_code": "RUB",
"trading_mode": "UVAV",
"lot_size": 10000,
"clearing_organization": "НКО АО ПРЦ",
"settlement_organization": "НКО АО ПРЦ",
"matched_settlement_organization": "СПВБ",
"number_of_lot_currency": 1000,
"start_trading_date": "15.03.2024",
"specification_approval_date": "13.03.2024",
"specification_approval_number": "123",
"workflow_status": "ACTV"
},
{
"id": "45c8205e-14d9-4e0f-9a25-4f07702a8ae5",
"ticker": "KZTRUB_TOD_N",
"name": "Спот-инструмент казахстанский тенге с расчетами сегодня без клиринга и расчетов в АО СПВБ",
"exchange_offexchange": "EXCHANGE",
"min_step": 1,
"precision": 4,
"settle_code": "T0",
"value_date": "TOD",
"symbol_trading_mode": "N",
"lot_currency_letter_code": "KZT",
"matched_currency_letter_code": "RUB",
"trading_mode": "NVAD",
"lot_size": 10000,
"clearing_organization": "АО СПВБ",
"settlement_organization": "НКО АО ПРЦ",
"matched_settlement_organization": "НКО АО ПРЦ",
"number_of_lot_currency": 100,
"start_trading_date": "06.03.2024",
"specification_approval_date": "06.03.2024",
"specification_approval_number": "2",
"workflow_status": "ACTV"
},
{
"id": "3f30841f-b138-444d-bd5f-2bfc9cc3a6f7",
"ticker": "CADRUB_TOD_C",
"name": "Канадский доллар Рубль РФ",
"exchange_offexchange": "EXCHANGE",
"min_step": 1,
"precision": 4,
"settle_code": "T0",
"value_date": "TOD",
"symbol_trading_mode": "C",
"lot_currency_letter_code": "CAD",
"matched_currency_letter_code": "RUB",
"trading_mode": "UVAV",
"lot_size": 1000,
"clearing_organization": "АО СПВБ",
"settlement_organization": "НКО АО ПРЦ",
"matched_settlement_organization": "НКО АО ПРЦ",
"number_of_lot_currency": 100000,
"start_trading_date": "22.03.2024",
"specification_approval_date": "20.03.2024",
"specification_approval_number": "566",
"workflow_status": "ACTV"
},
{
"id": "31518ec5-244e-4082-9f9c-29a8e4b6d955",
"ticker": "KZTRUB_TOD_C",
"name": "Спот-инструмент казахстанский тенге с расчетами сегодня с клирингом в АО СПВБ",
"exchange_offexchange": "EXCHANGE",
"min_step": 25,
"precision": 4,
"settle_code": "T0",
"value_date": "TOD",
"symbol_trading_mode": "C",
"lot_currency_letter_code": "KZT",
"matched_currency_letter_code": "RUB",
"trading_mode": "UVAV",
"lot_size": 10000,
"clearing_organization": "АО СПВБ",
"settlement_organization": "НКО АО ПРЦ",
"matched_settlement_organization": "НКО АО ПРЦ",
"number_of_lot_currency": 100,
"start_trading_date": "06.03.2024",
"specification_approval_date": "06.03.2024",
"specification_approval_number": "2",
"workflow_status": "ACTV"
},
{
"id": "0742d050-96e7-444b-9e87-66eb875b5776",
"ticker": "EURRUB_TOD_N",
"name": "тестовый инструмент",
"exchange_offexchange": "EXCHANGE",
"min_step": 1,
"precision": 2,
"settle_code": "T0",
"value_date": "TOD",
"symbol_trading_mode": "N",
"lot_currency_letter_code": "EUR",
"matched_currency_letter_code": "RUB",
"trading_mode": "NVAD",
"lot_size": 1000,
"clearing_organization": "1",
"settlement_organization": "1",
"matched_settlement_organization": "1",
"number_of_lot_currency": 10,
"start_trading_date": "21.03.2024",
"specification_approval_date": "20.03.2024",
"specification_approval_number": "123",
"workflow_status": "ACTV"
},
{
"id": "115ece73-b658-4f7e-b608-d5f50005ccba",
"ticker": "CNYRUB_TOD_C",
"name": "Спот-инструмент китайский юань с расчетами сегодня с клирингом в АО СПВБ",
"exchange_offexchange": "EXCHANGE",
"min_step": 5,
"precision": 4,
"settle_code": "T0",
"value_date": "TOD",
"symbol_trading_mode": "C",
"lot_currency_letter_code": "CNY",
"matched_currency_letter_code": "RUB",
"trading_mode": "UVAV",
"lot_size": 1000,
"clearing_organization": "АО СПВБ",
"settlement_organization": "НКО АО ПРЦ",
"matched_settlement_organization": "НКО АО ПРЦ",
"number_of_lot_currency": 1,
"start_trading_date": "06.03.2024",
"specification_approval_date": "06.03.2024",
"specification_approval_number": "1",
"workflow_status": "ACTV"
},
{
"id": "c20c7b3d-750b-438c-b2c8-06bd49d02642",
"ticker": "EURUSD_TOD_C",
"name": "тест импорт",
"exchange_offexchange": "EXCHANGE",
"min_step": 1,
"precision": 4,
"settle_code": "T0",
"value_date": "TOD",
"symbol_trading_mode": "C",
"lot_currency_letter_code": "EUR",
"matched_currency_letter_code": "USD",
"trading_mode": "UVAV",
"lot_size": 1,
"clearing_organization": "1",
"settlement_organization": "1",
"matched_settlement_organization": "1",
"number_of_lot_currency": 1,
"start_trading_date": "12.03.2024",
"specification_approval_date": "11.03.2024",
"specification_approval_number": "123",
"workflow_status": "ACTV"
},
{
"id": "bf158264-7b03-40d2-a3fe-c404f8f87150",
"ticker": "ALLDZD_TOD_C",
"name": "аааааа",
"exchange_offexchange": "EXCHANGE",
"min_step": 1,
"precision": 4,
"settle_code": "B0",
"value_date": "TOD",
"symbol_trading_mode": "C",
"lot_currency_letter_code": "ALL",
"matched_currency_letter_code": "DZD",
"trading_mode": "UVAV",
"lot_size": 5,
"clearing_organization": "ррр",
"settlement_organization": "рррр",
"matched_settlement_organization": "рррр",
"number_of_lot_currency": 1111,
"start_trading_date": "08.04.2024",
"specification_approval_date": "03.04.2024",
"specification_approval_number": "аааа",
"workflow_status": "ACTV"
},
{
"id": "ff2c0881-220a-496e-b7f0-fa4487b9457f",
"ticker": "CNYRUB_TOD_R",
"name": "Спот-инструмент китайский юань с расчетами сегодня с клирингом в АО СПВБ",
"exchange_offexchange": "EXCHANGE",
"min_step": 1,
"precision": 4,
"settle_code": "T0",
"value_date": "TOD",
"symbol_trading_mode": "R",
"lot_currency_letter_code": "CNY",
"matched_currency_letter_code": "RUB",
"trading_mode": "NVAV",
"lot_size": 1,
"clearing_organization": "АО СПВБ",
"settlement_organization": "НКО АО ПРЦ",
"matched_settlement_organization": "НКО АО ПРЦ",
"number_of_lot_currency": 1,
"start_trading_date": "06.03.2024",
"specification_approval_date": "06.03.2024",
"specification_approval_number": "2",
"workflow_status": "ACTV"
},
{
"id": "4f41bcc3-d66a-4f56-94d8-4c7c2834a834",
"ticker": "ALLBND_TOD_R",
"name": "проверка",
"exchange_offexchange": "EXCHANGE",
"min_step": 1,
"precision": 4,
"settle_code": "T0",
"value_date": "TOD",
"symbol_trading_mode": "R",
"lot_currency_letter_code": "ALL",
"matched_currency_letter_code": "BND",
"trading_mode": "UVAV",
"lot_size": 1,
"clearing_organization": "a",
"settlement_organization": "b",
"matched_settlement_organization": "c",
"number_of_lot_currency": 1,
"start_trading_date": "31.03.2024",
"specification_approval_date": "07.03.2024",
"specification_approval_number": "1",
"workflow_status": "BLKD"
},
{
"id": "093de51b-5d80-4362-b942-ede93dca9cd7",
"ticker": "ALLDZD_TOD_R",
"name": "Тестовый инструмент АЛЛ-ДЗД",
"exchange_offexchange": "EXCHANGE",
"min_step": 1,
"precision": 2,
"settle_code": "T0",
"value_date": "TOD",
"symbol_trading_mode": "R",
"lot_currency_letter_code": "ALL",
"matched_currency_letter_code": "DZD",
"trading_mode": "UVAV",
"lot_size": 1000,
"clearing_organization": "1",
"settlement_organization": "1",
"matched_settlement_organization": "1",
"number_of_lot_currency": 1,
"start_trading_date": "14.03.2024",
"specification_approval_date": "13.03.2024",
"specification_approval_number": "12345",
"workflow_status": "BLKD"
},
{
"id": "a0be959e-f2f2-4c9e-9230-1a28167d20aa",
"ticker": "ALLBWP_TOD_C",
"name": "проверка",
"exchange_offexchange": "EXCHANGE",
"min_step": 1,
"precision": 4,
"settle_code": "T0",
"value_date": "TOD",
"symbol_trading_mode": "C",
"lot_currency_letter_code": "ALL",
"matched_currency_letter_code": "BWP",
"trading_mode": "UVAV",
"lot_size": 1,
"clearing_organization": "a",
"settlement_organization": "b",
"matched_settlement_organization": "c",
"number_of_lot_currency": 1,
"start_trading_date": "05.03.2024",
"specification_approval_date": "05.03.2024",
"specification_approval_number": "1",
"workflow_status": "BLKD"
},
{
"id": "d49ce1ea-52d7-49e2-a636-dc791270d32d",
"ticker": "DZDALL_TOD_C",
"name": "проверка удаления",
"exchange_offexchange": "EXCHANGE",
"min_step": 1,
"precision": 4,
"settle_code": "T0",
"value_date": "TOD",
"symbol_trading_mode": "C",
"lot_currency_letter_code": "DZD",
"matched_currency_letter_code": "ALL",
"trading_mode": "UVAV",
"lot_size": 1,
"clearing_organization": "1",
"settlement_organization": "1",
"matched_settlement_organization": "1",
"number_of_lot_currency": 1,
"start_trading_date": "14.03.2024",
"specification_approval_date": "14.03.2024",
"specification_approval_number": "1",
"workflow_status": "BLKD"
},
{
"id": "0417fd5d-080e-4135-8b26-5c0d61116fe0",
"ticker": "ALLALL_TOD_C",
"name": "тест создание",
"exchange_offexchange": "EXCHANGE",
"min_step": 1,
"precision": 2,
"settle_code": "T0",
"value_date": "TOD",
"symbol_trading_mode": "C",
"lot_currency_letter_code": "ALL",
"matched_currency_letter_code": "ALL",
"trading_mode": "UVAV",
"lot_size": 1000,
"clearing_organization": "1",
"settlement_organization": "1",
"matched_settlement_organization": "1",
"number_of_lot_currency": 1,
"start_trading_date": "14.03.2024",
"specification_approval_date": "13.03.2024",
"specification_approval_number": "123",
"workflow_status": "BLKD"
},
{
"id": "3fecd8e4-4f61-4ba4-8494-3c09b84386c4",
"ticker": "ALLCVE_TOD_C",
"name": "проверка ап",
"exchange_offexchange": "EXCHANGE",
"min_step": 1,
"precision": 4,
"settle_code": "T0",
"value_date": "TOD",
"symbol_trading_mode": "C",
"lot_currency_letter_code": "ALL",
"matched_currency_letter_code": "CVE",
"trading_mode": "UVAV",
"lot_size": 2,
"clearing_organization": "авы",
"settlement_organization": "ыва",
"matched_settlement_organization": "авы",
"number_of_lot_currency": 3,
"start_trading_date": "14.03.2024",
"specification_approval_date": "14.03.2024",
"specification_approval_number": "34",
"workflow_status": "BLKD"
},
{
"id": "b1f864a0-df55-4061-b1c1-3f569d4cea03",
"ticker": "ALLDZD_TOD_C",
"name": "проверка",
"exchange_offexchange": "EXCHANGE",
"min_step": 1,
"precision": 4,
"settle_code": "T0",
"value_date": "TOD",
"symbol_trading_mode": "C",
"lot_currency_letter_code": "ALL",
"matched_currency_letter_code": "DZD",
"trading_mode": "UVAV",
"lot_size": 1,
"clearing_organization": "ко",
"settlement_organization": "ро",
"matched_settlement_organization": "рос",
"number_of_lot_currency": 1,
"start_trading_date": "14.03.2024",
"specification_approval_date": "14.03.2024",
"specification_approval_number": "1",
"workflow_status": "BLKD"
},
{
"id": "53440d91-633b-4171-9820-a280a8f8cd32",
"ticker": "ALLKHR_TOD_C",
"name": "абвгд",
"exchange_offexchange": "EXCHANGE",
"min_step": 1,
"precision": 4,
"settle_code": "T0",
"value_date": "TOD",
"symbol_trading_mode": "C",
"lot_currency_letter_code": "ALL",
"matched_currency_letter_code": "KHR",
"trading_mode": "UVAV",
"lot_size": 1,
"clearing_organization": "цц",
"settlement_organization": "цц",
"matched_settlement_organization": "цц",
"number_of_lot_currency": 1,
"start_trading_date": "14.03.2024",
"specification_approval_date": "14.03.2024",
"specification_approval_number": "1",
"workflow_status": "BLKD"
},
{
"id": "515d5ae1-185d-4d04-b353-7fb6f119b2b8",
"ticker": "ALLBTN_TOD_C",
"name": "проверка",
"exchange_offexchange": "EXCHANGE",
"min_step": 1,
"precision": 4,
"settle_code": "T0",
"value_date": "TOD",
"symbol_trading_mode": "C",
"lot_currency_letter_code": "ALL",
"matched_currency_letter_code": "BTN",
"trading_mode": "UVAV",
"lot_size": 1,
"clearing_organization": "a",
"settlement_organization": "b",
"matched_settlement_organization": "c",
"number_of_lot_currency": 1,
"start_trading_date": "23.03.2024",
"specification_approval_date": "06.03.2024",
"specification_approval_number": "1",
"workflow_status": "BLKD"
},
{
"id": "f73d20ad-77a7-48f2-8a69-816d72755c55",
"ticker": "BSDARS_TOD_C",
"name": "проверка",
"exchange_offexchange": "EXCHANGE",
"min_step": 1,
"precision": 4,
"settle_code": "B0",
"value_date": "TOD",
"symbol_trading_mode": "C",
"lot_currency_letter_code": "BSD",
"matched_currency_letter_code": "ARS",
"trading_mode": "UVAV",
"lot_size": 1,
"clearing_organization": "a",
"settlement_organization": "b",
"matched_settlement_organization": "c",
"number_of_lot_currency": 1,
"start_trading_date": "30.03.2024",
"specification_approval_date": "06.03.2024",
"specification_approval_number": "2",
"workflow_status": "BLKD"
},
{
"id": "aa9c44e0-6808-4b75-883f-421243e1433f",
"ticker": "ALLARS_TOD_C",
"name": "абырвалг",
"exchange_offexchange": "EXCHANGE",
"min_step": 1,
"precision": 2,
"settle_code": "T0",
"value_date": "TOD",
"symbol_trading_mode": "C",
"lot_currency_letter_code": "ALL",
"matched_currency_letter_code": "ARS",
"trading_mode": "UVAV",
"lot_size": 1,
"clearing_organization": "1",
"settlement_organization": "1",
"matched_settlement_organization": "1",
"number_of_lot_currency": 123,
"start_trading_date": "14.03.2024",
"specification_approval_date": "13.03.2024",
"specification_approval_number": "123",
"workflow_status": "BLKD"
},
{
"id": "dce81fd0-7773-4e7e-bd1a-212bdfa1c9d1",
"ticker": "ALLAUD_TOD_C",
"name": "проверка пр",
"exchange_offexchange": "EXCHANGE",
"min_step": 1,
"precision": 4,
"settle_code": "T0",
"value_date": "TOD",
"symbol_trading_mode": "C",
"lot_currency_letter_code": "ALL",
"matched_currency_letter_code": "AUD",
"trading_mode": "UVAV",
"lot_size": 1,
"clearing_organization": "кк",
"settlement_organization": "уу",
"matched_settlement_organization": "тт",
"number_of_lot_currency": 1,
"start_trading_date": "14.03.2024",
"specification_approval_date": "14.03.2024",
"specification_approval_number": "3",
"workflow_status": "BLKD"
},
{
"id": "712a96d1-3076-4130-a0a1-31a500c13753",
"ticker": "KZTRUB_TOD_R",
"name": "Спот-инструмент казахстанский тенге с расчетами сегодня с клирингом в АО СПВБ",
"exchange_offexchange": "EXCHANGE",
"min_step": 1,
"precision": 4,
"settle_code": "T0",
"value_date": "TOD",
"symbol_trading_mode": "R",
"lot_currency_letter_code": "KZT",
"matched_currency_letter_code": "RUB",
"trading_mode": "NVAV",
"lot_size": 10000,
"clearing_organization": "АО СПВБ",
"settlement_organization": "НКО АО ПРЦ",
"matched_settlement_organization": "НКО АО ПРЦ",
"number_of_lot_currency": 100,
"start_trading_date": "06.03.2024",
"specification_approval_date": "06.03.2024",
"specification_approval_number": "2",
"workflow_status": "ACTV"
},
{
"id": "1faf9210-3d59-4686-9bc1-fd720e4cb240",
"ticker": "ALLARS_TOD_C",
"name": "абвгд",
"exchange_offexchange": "EXCHANGE",
"min_step": 1,
"precision": 4,
"settle_code": "T0",
"value_date": "TOD",
"symbol_trading_mode": "C",
"lot_currency_letter_code": "ALL",
"matched_currency_letter_code": "ARS",
"trading_mode": "UVAV",
"lot_size": 1,
"clearing_organization": "1",
"settlement_organization": "1",
"matched_settlement_organization": "1",
"number_of_lot_currency": 1,
"start_trading_date": "14.03.2024",
"specification_approval_date": "14.03.2024",
"specification_approval_number": "1",
"workflow_status": "BLKD"
},
{
"id": "3a32922a-ee15-47f3-b14c-539cb0ac410f",
"ticker": "ALLBBD_TOD_C",
"name": "проверка",
"exchange_offexchange": "EXCHANGE",
"min_step": 1,
"precision": 4,
"settle_code": "T0",
"value_date": "TOD",
"symbol_trading_mode": "C",
"lot_currency_letter_code": "ALL",
"matched_currency_letter_code": "BBD",
"trading_mode": "UVAV",
"lot_size": 2,
"clearing_organization": "а",
"settlement_organization": "б",
"matched_settlement_organization": "в",
"number_of_lot_currency": 1,
"start_trading_date": "08.03.2024",
"specification_approval_date": "06.03.2024",
"specification_approval_number": "1",
"workflow_status": "BLKD"
}
]
}

View file

@ -74,10 +74,6 @@ public class CurrencyPairSecurityService extends QueueConsumer implements Initia
callback(CommonDeleteRequest.class)
.setFunction(this::deleteCurrencyPairSecurity)
.forDestination(Consts.DESTINATION_CURRENCY_PAIR_SECURITIES_DELETE, callbacks::put);
//todo DESTINATION_GATEWAY_CURRENCY_PAIR_SECURITY see CLS-612, CLS-663
// callback(CurrencyPairSecurityNewGatewayRequest.class)
// .setFunction(this::newCurrencyPairSecurity)
// .forDestination(Consts.DESTINATION_GATEWAY_CURRENCY_PAIR_SECURITY, callbacks::put);
imdgProvider.waitAvailable();
init();
}
@ -113,6 +109,7 @@ public class CurrencyPairSecurityService extends QueueConsumer implements Initia
currencyPairSecurity.setBaseUnitSize(req.getBaseUnitSize());
currencyPairSecurity.setCurrencyPairId(req.getCurrencyPairId());
//todo currencyPairSecurity.setCode(req.getCode());
//req.getPrecision()
currencyPairSecurity.setSettlementType(req.getSettlementType());
currencyPairSecurity.setClearingOrganization(req.getClearingOrganization());
//todo currencyPairSecurity.setSettlementOrganization(req.getSettlementOrganization());

View file

@ -16,17 +16,20 @@ import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity;
import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeCashFlow;
import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity;
import ru.clearing.classes.statics.data.misc.Listing;
import ru.clearing.classes.statics.data.security.CurrencyPairSecurity;
import ru.clearing.classes.statics.data.security.MoneyMarketSecurity;
import ru.clearing.classes.statics.data.security.Security;
import ru.clearing.platform.dictionary.CurrencyPairDictionary;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
import ru.spcex.clearing.platform.messaging.domain.Consts;
import ru.spcex.clearing.platform.messaging.domain.cud.company.CurrencyPairSecurityGatewayRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.company.EquitySecurityGatewayRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.company.FixedIncomeGatewayRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.company.SecurityFondGatewayRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.*;
import ru.spcex.clearing.platform.messaging.domain.cud.security.CurrencyPairSecurityNewGatewayRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.security.CurrencyPairSecurityNewRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.security.CurrencyPairSecurityUpdateRequest;
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
import ru.spcex.clearing.securities.validation.ValidationProvider;
@ -53,11 +56,13 @@ public class GatewaySecurityService extends QueueConsumer implements Initializin
private final Imdg<FixedIncomeSecurity> fixedIncomeSecurityImdg;
private final Imdg<EquitySecurity> equitySecurityImdg;
private final Imdg<MoneyMarketSecurity> moneyMarketSecurityImdg;
private final Imdg<CurrencyPairSecurity> currencyPairSecurityImdg;
private final Imdg<Listing> listingImdg;
private final Imdg<CouponPeriod> couponPeriodImdg;
private final Imdg<FixedIncomeCashFlow> fixedIncomeCashFlowImdg;
private final Imdg<CompanySymbols> companySymbolsImdg;
private final Imdg<Company> companyImdg;
private final Imdg<CurrencyPairDictionary> currencyPairDictionaryImdg;
private final ImdgProvider imdgProvider;
private final ImdgId idGenerator;
@ -97,6 +102,8 @@ public class GatewaySecurityService extends QueueConsumer implements Initializin
this.fixedIncomeSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class);
this.equitySecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class);
this.moneyMarketSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, MoneyMarketSecurity.class);
this.currencyPairSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, CurrencyPairSecurity.class);
this.currencyPairDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyPairDictionary, CurrencyPairDictionary.class);
this.currencyPairSecurityService = currencyPairSecurityService;
this.listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class);
this.couponPeriodImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CouponPeriod, CouponPeriod.class);
@ -129,9 +136,9 @@ public class GatewaySecurityService extends QueueConsumer implements Initializin
callback(MoneyMarketSecurityNewGatewayRequest.class)
.setFunction(this::newMoneyMarketSecurity)
.forDestination(Consts.DESTINATION_GATEWAY_MONEY_MARKET_SECURITY, callbacks::put);
callback(CurrencyPairSecurityGatewayRequest.class)
.setFunction(this::newSecurities)
.forDestination(Consts.DESTINATION_SECURITY_CURRENCY_GATEWAY, callbacks::put);
callback(CurrencyPairSecurityNewGatewayRequest.class)
.setFunction(this::newSecuritiesCurrencyPair)
.forDestination(Consts.DESTINATION_GATEWAY_CURRENCY_PAIR_SECURITY, callbacks::put);
imdgProvider.waitAvailable();
init();
@ -183,6 +190,74 @@ public class GatewaySecurityService extends QueueConsumer implements Initializin
}
}
private RequestInfoUpdate newSecuritiesCurrencyPair(BaseRequest<?> baseRequest) {
log.debug("CurrencyPairSecurityGatewayRequest id={} received", baseRequest.getId());
CurrencyPairSecurityNewGatewayRequest req = (CurrencyPairSecurityNewGatewayRequest) baseRequest.getRequestPayload();
Security security = null;
try {
CurrencyPairSecurityNewRequest currencyPairRequest = req.getCurrencySecurityNewRequest();
if (currencyPairRequest != null) {
if (StringUtils.isEmpty(currencyPairRequest.getSecuritySymbol())) {
log.warn("Skip creating CurrencyPairSecurity without securityId");
return null;
}
log.debug("Processed request with securitySymbol: {}", currencyPairRequest.getSecuritySymbol());
if (req.getLotCurrencyLetterCode() == null || req.getMatchedCurrencyLetterCode() == null) {
log.warn("Required field was empty: LotCurrencyLetterCode={}, MatchedCurrencyLetterCode={}",
req.getLotCurrencyLetterCode(), req.getMatchedCurrencyLetterCode());
} else {
CurrencyPairDictionary currencyPairD = currencyPairDictionaryImdg.getFirstObjectByFieldValues(Map.of(
"baseCurrency", req.getLotCurrencyLetterCode(),
"quoteCurrency", req.getMatchedCurrencyLetterCode()
));
if (currencyPairD == null) {
log.warn("CurrencyPairDictionary not found by {}/{}",
req.getLotCurrencyLetterCode(), req.getMatchedCurrencyLetterCode());
} else {
log.trace("CurrencyPairId={} by {}/{}", currencyPairD.getId(),
req.getLotCurrencyLetterCode(), req.getMatchedCurrencyLetterCode());
currencyPairRequest.setCurrencyPairId(currencyPairD.getId());
}
}
String securitySymbol = currencyPairRequest.getSecuritySymbol();
security = findSecurityBySecuritySymbol(currencyPairSecurityImdg, securitySymbol);
if (security == null) {
security = currencyPairSecurityService.newCurrencyPairSecurity0(currencyPairRequest);
} else {
CurrencyPairSecurityUpdateRequest updateRequest = toUpdateRequest(security, currencyPairRequest);
security = currencyPairSecurityService.updateCurrencyPairSecurity0(updateRequest);
}
} else {
log.warn("currencyPairSecurityGatewayRequest is null");
}
} catch (ValidationException expected) {
if (security == null) {
log.error("Error create or update issue: {}", messageResolver.resolve(expected.getEnumMsg()));
return requestHelper.makeErrorResponse(baseRequest, expected.getEnumMsg());
} else {
log.warn("Error create or update issue: {}. But issue id={} found, try continue...",
messageResolver.resolve(expected.getEnumMsg()), security.getId());
}
}
Long securityId;
if (security == null) {
log.error("No new or update security.");
securityId = null;
} else {
securityId = security.getId();
log.debug("Use security {}.id={} ({} {})", security.getClass().getSimpleName(), securityId, security.getInstrumentType(), security.getShortName());
}
log.debug("successfully processed, request id {}, currencyPairId={}",
baseRequest.getId(), securityId);
return null; // default success
}
private RequestInfoUpdate newSecurities(BaseRequest<?> baseRequest) {
log.debug("SecurityFondGatewayRequest id={} received", baseRequest.getId());
SecurityFondGatewayRequest req = (SecurityFondGatewayRequest) baseRequest.getRequestPayload();
@ -237,26 +312,7 @@ public class GatewaySecurityService extends QueueConsumer implements Initializin
}
}
if (InstrumentType.CRNC.equalsByKey(req.getSecurityType())) {
// CurrencyPairSecurityGatewayRequest currencyPairSecurityGatewayRequest = (CurrencyPairSecurityGatewayRequest) req;
// CurrencyPairSecurityNewRequest currencyPairRequest = currencyPairSecurityGatewayRequest.getSecurity();
// if (StringUtils.isEmpty(currencyPairRequest.getSecuritySymbol())) {
// log.warn("Skip creating CurrencyPairSecurity without securityId: uuid: {}", req.getUuid());
// return null;
// }
// log.debug("Processed request with securitySymbol: {}", currencyPairRequest.getSecuritySymbol());
// currencyPairRequest.setIssuerId(companyId);
// log.trace("EquitySecurityNewRequest - FOND");
// String securitySymbol = currencyPairRequest.getSecuritySymbol();
// security = findSecurityBySecuritySymbol(currencyPairSecurityImdg, securitySymbol);
//
// if (security == null) {
// security = currencyPairSecurityService.newEquity0(currencyPairRequest);
// } else {
// EquitySecurityUpdateRequest updateRequest = toUpdateRequest(security, currencyPairRequest);
// security = currencyPairSecurityService.updateEquity0(updateRequest);
// }
// //fixme currencypair будет отдельная задача
throw new IllegalStateException("todo CRNC");
throw new IllegalStateException("CRNC support in other function"); // см. другой метод.
}
} catch (ValidationException expected) {
if (security == null) {
@ -536,4 +592,22 @@ public class GatewaySecurityService extends QueueConsumer implements Initializin
return updateRequest;
}
CurrencyPairSecurityUpdateRequest toUpdateRequest(Security currencyPairSecurity, CurrencyPairSecurityNewRequest newRequest) {
var updateRequest = new CurrencyPairSecurityUpdateRequest();
updateRequest.setId(currencyPairSecurity.getId());
updateRequest.setInstrumentType(newRequest.getInstrumentType());
updateRequest.setSecuritySymbol(newRequest.getSecuritySymbol());
updateRequest.setShortName(newRequest.getShortName());
updateRequest.setFullName(newRequest.getFullName());
updateRequest.setCurrencyPairId(newRequest.getCurrencyPairId());
updateRequest.setLotSize(newRequest.getLotSize());
updateRequest.setMinStep(newRequest.getMinStep());
// updateRequest.setPrecision(newRequest.getPrecision());
updateRequest.setBaseUnitSize(newRequest.getBaseUnitSize());
updateRequest.setSettlementType(newRequest.getSettlementType());
updateRequest.setWorkflowStatus(newRequest.getWorkflowStatus());
updateRequest.setClearingOrganization(newRequest.getClearingOrganization());
return updateRequest;
}
}

View file

@ -16,7 +16,7 @@ public interface Consts {
String DESTINATION_SECURITY_BOND_GATEWAY = "security-bond-gateway-request-new";
String DESTINATION_SECURITY_EQTY_GATEWAY = "security-eqty-gateway-request-new";
String DESTINATION_SECURITY_CURRENCY_GATEWAY = "security-currency-pair-gateway-request-new";
String DESTINATION_GATEWAY_CURRENCY_PAIR_SECURITY = "currency-pair-securities-gateway-new"; // "security-currency-pair-gateway-request-new"
String DESTINATION_FIXED_INCOME_CASH_FLOW_NEW = "fixed-income-cash-flow-new";
String DESTINATION_FIXED_INCOME_CASH_FLOW_UPDATE = "fixed-income-cash-flow-update";
@ -188,7 +188,6 @@ public interface Consts {
String DESTINATION_TRADING_CLEARING_REGISTRY_ON_TCRLIST_NEW = "registry-on-trading_clearing_registry_list-new";
String DESTINATION_GATEWAY_CURRENCY_PAIR_SECURITY = "currency-pair-securities-gateway-new";
String DESTINATION_CURRENCY_PAIR_SECURITIES_NEW = "currency-pair-securities-new";
String DESTINATION_CURRENCY_PAIR_SECURITIES_UPDATE = "currency-pair-securities-update";
String DESTINATION_CURRENCY_PAIR_SECURITIES_DELETE = "currency-pair-securities-delete";

View file

@ -1,24 +0,0 @@
package ru.spcex.clearing.platform.messaging.domain.cud.company;
import com.fasterxml.jackson.annotation.JsonProperty;
import ru.spcex.clearing.platform.messaging.domain.cud.security.CurrencyPairSecurityNewRequest;
public class CurrencyPairSecurityGatewayRequest extends SecurityFondGatewayRequest {
@JsonProperty
private CurrencyPairSecurityNewRequest security;
public CurrencyPairSecurityGatewayRequest() {
}
public CurrencyPairSecurityGatewayRequest(CurrencyPairSecurityNewRequest security) {
this.security = security;
}
public CurrencyPairSecurityNewRequest getSecurity() {
return security;
}
public void setSecurity(CurrencyPairSecurityNewRequest security) {
this.security = security;
}
}

View file

@ -3,18 +3,14 @@ package ru.spcex.clearing.platform.messaging.domain.cud.security;
import com.fasterxml.jackson.annotation.JsonProperty;
public class CurrencyPairSecurityNewGatewayRequest {
@JsonProperty
private String uuid;
@JsonProperty
private CurrencyPairSecurityNewRequest currencySecurityNewRequest;
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
// in currencySecurityNewRequest:
@JsonProperty
private String lotCurrencyLetterCode;
@JsonProperty
private String matchedCurrencyLetterCode;
public CurrencyPairSecurityNewRequest getCurrencySecurityNewRequest() {
return currencySecurityNewRequest;
@ -23,4 +19,20 @@ public class CurrencyPairSecurityNewGatewayRequest {
public void setCurrencySecurityNewRequest(CurrencyPairSecurityNewRequest currencySecurityNewRequest) {
this.currencySecurityNewRequest = currencySecurityNewRequest;
}
public String getLotCurrencyLetterCode() {
return lotCurrencyLetterCode;
}
public void setLotCurrencyLetterCode(String lotCurrencyLetterCode) {
this.lotCurrencyLetterCode = lotCurrencyLetterCode;
}
public String getMatchedCurrencyLetterCode() {
return matchedCurrencyLetterCode;
}
public void setMatchedCurrencyLetterCode(String matchedCurrencyLetterCode) {
this.matchedCurrencyLetterCode = matchedCurrencyLetterCode;
}
}