From 7f8e2dd027ae50ef98e738ea6e7cdbebd7655479 Mon Sep 17 00:00:00 2001 From: ialbert Date: Fri, 14 Jul 2023 18:11:28 +0300 Subject: [PATCH 1/3] http://jira.mfd.msk:8088/browse/CLS-422 --- .../company/service/MultiCompanyService.java | 33 ++++++++++++++++--- .../platform/enumeration/CompanySymbol.java | 1 + 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/MultiCompanyService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/MultiCompanyService.java index d6ecd0ac4..f96baeec1 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/MultiCompanyService.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/MultiCompanyService.java @@ -29,11 +29,12 @@ import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.utils.error.ValidationException; import ru.spcex.platform.utils.log.ExceptionUtils; +import ru.spcex.platform.utils.text.TextUtil; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; +import java.util.*; +import java.util.function.BiFunction; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * Обрабатывает MultiCompanyRequest и распределяет сложный объект по... @@ -119,6 +120,10 @@ public class MultiCompanyService boolean txOk = false; // todo IMDG transaction synchronized (companyService) { try { + //часть в companyService + req.setCompanySymbols( + Stream.concat(req.getCompanySymbols().stream(), additionalSymbols(req.getCompany())).collect(Collectors.toList()) + ); companyId = getCompanyIdForCompanySymbols(req.getUuid(), req.getCompany()); log.debug("For request {} (uuid {}) company {}.", baseRequest.getId(), req.getUuid(), companyId == null ? "not found" : ("found, id=" + companyId)); @@ -154,7 +159,7 @@ public class MultiCompanyService for (CompanySymbolNewRequest partRequest : req.getCompanySymbols()) { CompanySymbols existSymbol = findCompanySymbols(partRequest); if (existSymbol == null) { - log.trace("For company[{}] do new companySymbol", companyId); + log.trace("For company[{}] do new companySymbol", companyId); Long id = companySymbolService.create(partRequest); } else { log.trace("For company[{}] do update companySymbol[{}]", companyId, existSymbol.getId()); @@ -205,6 +210,24 @@ public class MultiCompanyService return null; } + private Stream additionalSymbols(CompanyNewRequest companyNewReq) { + BiFunction> symbolCreation = (companySymbol, companySymbolValue) -> { + if (companySymbolValue == null || TextUtil.isEmpty(companySymbolValue)) { + return Optional.empty(); + } + CompanySymbolNewRequest companySymbolNewRequest = new CompanySymbolNewRequest(); + companySymbolNewRequest.setCompanySymbol(companySymbol); + companySymbolNewRequest.setCompanySymbolValue(companySymbolValue); + return Optional.of(companySymbolNewRequest); + }; + return Stream.of(symbolCreation.apply(CompanySymbol.TRDC.getKey(), companyNewReq.getTradingCode()), + symbolCreation.apply(CompanySymbol.CLRC.getKey(), companyNewReq.getClearingCode()), + symbolCreation.apply(CompanySymbol.INTC.getKey(), companyNewReq.getInitiatorCode()), + symbolCreation.apply(CompanySymbol.RGRC.getKey(), companyNewReq.getRegistrationCode())) + .filter(Optional::isPresent) + .map(Optional::get); + } + void validateReply(Long companyId, String process, RequestInfoUpdate replyI) { if (replyI != null && replyI.getMessage() != null) { log.warn("Error process {} for companyId={}: {}", process, companyId, replyI.getMessage()); diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/CompanySymbol.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/CompanySymbol.java index e89c3179b..3e044cea7 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/CompanySymbol.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/CompanySymbol.java @@ -13,6 +13,7 @@ public enum CompanySymbol implements IEnumKey { UUID("UUID"), TRDC("TRDC"), CLRC("CLRC"), + INTC("INTC"), RGRC("RGRC"), LICB("LICB"), LICR("LICR"), From da566c4c8130c6bd855c7cfc4626f48f70dea09a Mon Sep 17 00:00:00 2001 From: ialbert Date: Fri, 14 Jul 2023 18:14:05 +0300 Subject: [PATCH 2/3] http://jira.mfd.msk:8088/browse/CLS-421 --- .../adapter/MoneyMarketSecurityRequestAdapter.java | 4 +++- .../service/adapter/SecurityRequestAdapter.java | 7 ++++++- .../securities/service/cud/GatewaySecurityService.java | 1 + .../securities/service/cud/ListingService.java | 10 +++++++--- .../domain/cud/securitites/ListingNewRequest.java | 10 ++++++++++ .../domain/cud/securitites/ListingUpdateRequest.java | 10 ++++++++++ 6 files changed, 37 insertions(+), 5 deletions(-) diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/adapter/MoneyMarketSecurityRequestAdapter.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/adapter/MoneyMarketSecurityRequestAdapter.java index 1c08dfa1c..385608c6c 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/adapter/MoneyMarketSecurityRequestAdapter.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/adapter/MoneyMarketSecurityRequestAdapter.java @@ -10,7 +10,9 @@ public class MoneyMarketSecurityRequestAdapter { public MoneyMarketSecurityNewRequest toMoneyMarketSecurityNewRequest(ExchangeInstrument exchangeInstrument) { MoneyMarketSecurityNewRequest moneyMarketSecurityNewRequest = new MoneyMarketSecurityNewRequest(); - moneyMarketSecurityNewRequest.setSecuritySymbol(exchangeInstrument.getCode().substring(0, 6)); + String code = exchangeInstrument.getCode(); + moneyMarketSecurityNewRequest.setSecuritySymbol(code.substring(0, 6)); + moneyMarketSecurityNewRequest.setConvention(code); moneyMarketSecurityNewRequest.setNominalCurrency(exchangeInstrument.getSettlementCurrencyLetterCode()); moneyMarketSecurityNewRequest.setInstrumentType(InstrumentType.RATE.getKey()); moneyMarketSecurityNewRequest.setShortName(exchangeInstrument.getName()); diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/adapter/SecurityRequestAdapter.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/adapter/SecurityRequestAdapter.java index 8e197ba44..4b924dcd5 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/adapter/SecurityRequestAdapter.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/adapter/SecurityRequestAdapter.java @@ -6,6 +6,7 @@ import ru.spcex.clearing.gatewayapi.controller.inbound.request.listing.fond.Fond import ru.spcex.clearing.gatewayapi.controller.inbound.request.listing.fond.IncomeListing; import ru.spcex.clearing.gatewayapi.controller.inbound.request.listing.fond.Nominal; import ru.spcex.clearing.platform.messaging.domain.cud.securitites.*; +import ru.spcex.platform.utils.text.TextUtil; @Service public class SecurityRequestAdapter { @@ -46,7 +47,11 @@ public class SecurityRequestAdapter { public ListingNewRequest toIncomeListing(IncomeListing incomeListing) { ListingNewRequest listingNewRequest = new ListingNewRequest(); - listingNewRequest.setMarket(incomeListing.getCode()); + String code = incomeListing.getCode(); + listingNewRequest.setMarket(code); + if (!TextUtil.isEmpty(code)) { + listingNewRequest.setSymbolCode(code.substring(0, Math.min(6, code.length()))); + } listingNewRequest.setLotSize(incomeListing.getLotSize()); listingNewRequest.setTradingCurrency(incomeListing.getTradingCurrency()); listingNewRequest.setWorkflowStatus(incomeListing.getWorkflowStatus()); diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/GatewaySecurityService.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/GatewaySecurityService.java index 9ea5dfa50..b4c7dcc11 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/GatewaySecurityService.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/GatewaySecurityService.java @@ -398,6 +398,7 @@ public class GatewaySecurityService extends QueueConsumer implements Initializin updateRequest.setLotSize(newRequest.getLotSize()); updateRequest.setTradingCurrency(newRequest.getTradingCurrency()); updateRequest.setWorkflowStatus(newRequest.getWorkflowStatus()); + updateRequest.setSymbolCode(newRequest.getSymbolCode()); return updateRequest; } diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/ListingService.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/ListingService.java index 41066cffb..6e79de2a7 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/ListingService.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/ListingService.java @@ -18,8 +18,8 @@ import ru.spcex.clearing.platform.messaging.domain.cud.securitites.ListingNewReq import ru.spcex.clearing.platform.messaging.domain.cud.securitites.ListingUpdateRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; -import ru.spcex.clearing.util.security.SecuritySelector; import ru.spcex.clearing.securities.validation.ListingValidationProvider; +import ru.spcex.clearing.util.security.SecuritySelector; import ru.spcex.clearing.util.security.UserRoleVerification; import ru.spcex.clearing.util.services.RequestHelper; import ru.spcex.clearing.validation.common.ValidationHelper; @@ -107,7 +107,11 @@ public class ListingService extends QueueConsumer implements InitializingBean { listing.setSecurityId(req.getSecurityId()); listing.setMarket(req.getMarket()); listing.setLotSize(req.getLotSize()); - listing.setSymbolCode(security.getSecuritySymbol()); // listing.setSymbolCode(req.getSymbolCode()); + if (req.getSymbolCode() != null) { + listing.setSymbolCode(req.getSymbolCode()); // listing.setSymbolCode(req.getSymbolCode()); + } else { + listing.setSymbolCode(security.getSecuritySymbol()); + } listing.setSymbolName(security.getFullName()); // req.getSymbolName listing.setTradingCurrency(req.getTradingCurrency()); if (StringUtils.isEmpty(req.getWorkflowStatus())) { @@ -147,7 +151,7 @@ public class ListingService extends QueueConsumer implements InitializingBean { listing.setUpdated(Instant.now()); listing.setLotSize(req.getLotSize()); - //if (req.getSymbolCode()!=null) listing.setSymbolCode(req.getSymbolCode()); + if (req.getSymbolCode()!=null) listing.setSymbolCode(req.getSymbolCode()); //if (req.getSymbolName!=null) listing.setSymbolName(req.getSymbolName); listing.setTradingCurrency(req.getTradingCurrency()); if (StringUtils.isNotEmpty(req.getWorkflowStatus())) { diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/ListingNewRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/ListingNewRequest.java index d5784e5c4..d0457f2a1 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/ListingNewRequest.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/ListingNewRequest.java @@ -15,6 +15,8 @@ public class ListingNewRequest { private String tradingCurrency; @JsonProperty private String workflowStatus; + @JsonProperty + private String symbolCode; public Long getSecurityId() { return securityId; @@ -55,4 +57,12 @@ public class ListingNewRequest { public void setWorkflowStatus(String workflowStatus) { this.workflowStatus = workflowStatus; } + + public String getSymbolCode() { + return symbolCode; + } + + public void setSymbolCode(String symbolCode) { + this.symbolCode = symbolCode; + } } diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/ListingUpdateRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/ListingUpdateRequest.java index 7cbcd28e7..d25e18d76 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/ListingUpdateRequest.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/ListingUpdateRequest.java @@ -18,6 +18,8 @@ public class ListingUpdateRequest implements WithId { private String tradingCurrency; @JsonProperty private String workflowStatus; + @JsonProperty + private String symbolCode; @Override public Long getId() { @@ -67,4 +69,12 @@ public class ListingUpdateRequest implements WithId { public void setWorkflowStatus(String workflowStatus) { this.workflowStatus = workflowStatus; } + + public String getSymbolCode() { + return symbolCode; + } + + public void setSymbolCode(String symbolCode) { + this.symbolCode = symbolCode; + } } From 60da507f7110acdbd6953f9f6af240d79e09f3e4 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Fri, 14 Jul 2023 18:17:51 +0300 Subject: [PATCH 3/3] http://jira.mfd.msk:8088/browse/CLS-420 --- .../service/cud/GatewaySecurityService.java | 37 ++++++++++--------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/GatewaySecurityService.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/GatewaySecurityService.java index b4c7dcc11..22ed3929e 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/GatewaySecurityService.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/GatewaySecurityService.java @@ -186,7 +186,7 @@ public class GatewaySecurityService extends QueueConsumer implements Initializin if (InstrumentType.BOND.equalsByKey(req.getSecurityType())) { FixedIncomeGatewayRequest fixedIncomeGatewayRequest = (FixedIncomeGatewayRequest) req; FixedIncomeSecurityNewRequest fixedIncomeRequest = fixedIncomeGatewayRequest.getSecurity(); - if (StringUtils.isEmpty(fixedIncomeRequest.getSecuritySymbol())){ + if (StringUtils.isEmpty(fixedIncomeRequest.getSecuritySymbol())) { log.warn("Skip creating eqtySecurtity without securityId: uuid: {}", req.getUuid()); return null; } @@ -206,7 +206,7 @@ public class GatewaySecurityService extends QueueConsumer implements Initializin if (InstrumentType.EQTY.equalsByKey(req.getSecurityType())) { EquitySecurityGatewayRequest equitySecurityGatewayRequest = (EquitySecurityGatewayRequest) req; EquitySecurityNewRequest equityRequest = equitySecurityGatewayRequest.getSecurity(); - if (StringUtils.isEmpty(equityRequest.getSecuritySymbol())){ + if (StringUtils.isEmpty(equityRequest.getSecuritySymbol())) { log.warn("Skip creating eqtySecurtity without securityId: uuid: {}", req.getUuid()); return null; } @@ -244,8 +244,8 @@ public class GatewaySecurityService extends QueueConsumer implements Initializin if (req.getFixedIncomesCashFlow() == null) req.setFixedIncomesCashFlow(new ArrayList<>()); - try { - for (Object partRequestO : req.getListing()) { + for (Object partRequestO : req.getListing()) { + try { ListingNewRequest partRequest = (ListingNewRequest) partRequestO; partRequest.setSecurityId(securityId); Listing existListing = findListing(partRequest); @@ -259,13 +259,15 @@ public class GatewaySecurityService extends QueueConsumer implements Initializin Listing listing = listingService.updateListing0(partUpdateRequest); log.debug("Has updated listing.id={}", listing.getId()); } + } catch (ValidationException expected) { + log.warn("Error create or update listing: {}", expected.toString()); + return requestHelper.makeErrorResponse(baseRequest, expected.getEnumMsg()); } - } catch (ValidationException expected) { - log.warn("Error create or update listing: {}", expected.toString()); - return requestHelper.makeErrorResponse(baseRequest, expected.getEnumMsg()); } - try { - for (CouponPeriodNewRequest partRequest : (List) req.getCouponPeriods()) { + + + for (CouponPeriodNewRequest partRequest : (List) req.getCouponPeriods()) { + try { partRequest.setSecurityId(securityId); CouponPeriod existCouponPeriod = findCouponPeriod(partRequest); if (existCouponPeriod == null) { @@ -278,13 +280,14 @@ public class GatewaySecurityService extends QueueConsumer implements Initializin CouponPeriod couponPeriod = couponPeriodService.updateCouponPeriod0(partUpdateRequest); log.debug("Has update couponPeriod.id={}", couponPeriod.getId()); } + } catch (ValidationException expected) { + log.warn("Error create or update couponPeriod: {}", expected.toString()); + return requestHelper.makeErrorResponse(baseRequest, expected.getEnumMsg()); } - } catch (ValidationException expected) { - log.warn("Error create or update couponPeriod: {}", expected.toString()); - return requestHelper.makeErrorResponse(baseRequest, expected.getEnumMsg()); } - try { - for (FixedIncomeCashFlowNewRequest partRequest : (List) req.getFixedIncomesCashFlow()) { + + for (FixedIncomeCashFlowNewRequest partRequest : (List) req.getFixedIncomesCashFlow()) { + try { partRequest.setSecuritySymbol(String.valueOf(securityId)); // не getSecuritySymbol FixedIncomeCashFlow existFixedIncomeCashFlow = findFixedIncomeCashFlow(partRequest); if (existFixedIncomeCashFlow == null) { @@ -297,10 +300,10 @@ public class GatewaySecurityService extends QueueConsumer implements Initializin FixedIncomeCashFlow fixedIncomeCashFlow = fixedIncomeCashFlowService.fixedIncomeCashFlowUpdate0(partUpdateRequest); log.debug("Has update fixedIncomeCashFlow.id={}", fixedIncomeCashFlow.getId()); } + } catch (ValidationException expected) { + log.warn("Error create or update fixedIncomeCashFlow: {}", expected.toString()); + return requestHelper.makeErrorResponse(baseRequest, expected.getEnumMsg()); } - } catch (ValidationException expected) { - log.warn("Error create or update fixedIncomeCashFlow: {}", expected.toString()); - return requestHelper.makeErrorResponse(baseRequest, expected.getEnumMsg()); } log.debug("successfully processed, request id {}", baseRequest.getId());