Merge branch 'gateway' into dev

This commit is contained in:
etreschenkov 2023-07-14 18:18:04 +03:00
commit 14b29edf84
8 changed files with 86 additions and 27 deletions

View file

@ -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<CompanySymbolNewRequest> additionalSymbols(CompanyNewRequest companyNewReq) {
BiFunction<String, String, Optional<CompanySymbolNewRequest>> 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());

View file

@ -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());

View file

@ -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());

View file

@ -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<CouponPeriodNewRequest>) req.getCouponPeriods()) {
for (CouponPeriodNewRequest partRequest : (List<CouponPeriodNewRequest>) 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<FixedIncomeCashFlowNewRequest>) req.getFixedIncomesCashFlow()) {
for (FixedIncomeCashFlowNewRequest partRequest : (List<FixedIncomeCashFlowNewRequest>) 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());
@ -398,6 +401,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;
}

View file

@ -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())) {

View file

@ -13,6 +13,7 @@ public enum CompanySymbol implements IEnumKey {
UUID("UUID"),
TRDC("TRDC"),
CLRC("CLRC"),
INTC("INTC"),
RGRC("RGRC"),
LICB("LICB"),
LICR("LICR"),

View file

@ -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;
}
}

View file

@ -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;
}
}