some refactroing gateway
This commit is contained in:
parent
2d2a89264d
commit
c15f3fba9d
22 changed files with 279 additions and 866 deletions
|
|
@ -98,7 +98,7 @@ public class MultiCompanyService
|
||||||
public void afterPropertiesSet() {
|
public void afterPropertiesSet() {
|
||||||
callback(CompanyGatewayRequest.class)
|
callback(CompanyGatewayRequest.class)
|
||||||
.setFunction(request -> requestHelper.requestFunction(this::processMultiRequest, request))
|
.setFunction(request -> requestHelper.requestFunction(this::processMultiRequest, request))
|
||||||
.forDestination(Consts.DESTINATION_COMPANY_MULTIREQUEST, callbacks::put);
|
.forDestination(Consts.DESTINATION_COMPANY_GATEWAY_REQUEST, callbacks::put);
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import ru.spcex.clearing.gatewayapi.logic.Processor;
|
import ru.spcex.clearing.gatewayapi.logic.Processor;
|
||||||
import ru.spcex.clearing.gatewayapi.logic.Stage;
|
import ru.spcex.clearing.gatewayapi.logic.Stage;
|
||||||
import ru.spcex.clearing.gatewayapi.logic.listings_fond.*;
|
|
||||||
import ru.spcex.clearing.gatewayapi.logic.listings_mm.MMListingsRequestParam;
|
import ru.spcex.clearing.gatewayapi.logic.listings_mm.MMListingsRequestParam;
|
||||||
import ru.spcex.clearing.gatewayapi.logic.listings_mm.PrepareExchangeInstruments;
|
import ru.spcex.clearing.gatewayapi.logic.listings_mm.PrepareExchangeInstruments;
|
||||||
import ru.spcex.clearing.gatewayapi.logic.listings_mm.SendMessageToSecurityServiceWithMMSecurities;
|
import ru.spcex.clearing.gatewayapi.logic.listings_mm.SendMessageToSecurityServiceWithMMSecurities;
|
||||||
|
|
@ -18,18 +17,6 @@ import java.util.List;
|
||||||
@Configuration
|
@Configuration
|
||||||
public class ProcessorConfiguration {
|
public class ProcessorConfiguration {
|
||||||
|
|
||||||
@Qualifier("fondListingsRequestProcessor")
|
|
||||||
@Bean
|
|
||||||
public Processor<FondListingsRequestParam> fondListingsRequestProcessor(ImdgProvider imdgProvider, KafkaSender kafkaSender) {
|
|
||||||
Processor<FondListingsRequestParam> processor = new Processor<>();
|
|
||||||
List<Stage<FondListingsRequestParam>> pipeline = new ArrayList<>();
|
|
||||||
pipeline.add(new PrepareIncomeSecurities());
|
|
||||||
pipeline.add(new PrepareIssuerCompanies());
|
|
||||||
pipeline.add(new SendMessageToCompanyServiceWithIssuerCompanies(kafkaSender, imdgProvider));
|
|
||||||
pipeline.add(new SendMessageToSecurityServiceWithFondSecurities(kafkaSender, imdgProvider));
|
|
||||||
processor.setPipeline(pipeline);
|
|
||||||
return processor;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Qualifier("mmListingsRequestProcessor")
|
@Qualifier("mmListingsRequestProcessor")
|
||||||
@Bean
|
@Bean
|
||||||
|
|
|
||||||
|
|
@ -19,9 +19,9 @@ import ru.spcex.clearing.gatewayapi.controller.response.CommonResponse;
|
||||||
import ru.spcex.clearing.gatewayapi.exception.GatewayException;
|
import ru.spcex.clearing.gatewayapi.exception.GatewayException;
|
||||||
import ru.spcex.clearing.gatewayapi.logic.ProcessResult;
|
import ru.spcex.clearing.gatewayapi.logic.ProcessResult;
|
||||||
import ru.spcex.clearing.gatewayapi.logic.Processor;
|
import ru.spcex.clearing.gatewayapi.logic.Processor;
|
||||||
import ru.spcex.clearing.gatewayapi.logic.listings_fond.FondListingsRequestParam;
|
|
||||||
import ru.spcex.clearing.gatewayapi.logic.listings_mm.MMListingsRequestParam;
|
import ru.spcex.clearing.gatewayapi.logic.listings_mm.MMListingsRequestParam;
|
||||||
import ru.spcex.clearing.gatewayapi.service.CompanyProcessor;
|
import ru.spcex.clearing.gatewayapi.service.CompanyProcessor;
|
||||||
|
import ru.spcex.clearing.gatewayapi.service.ListingFondProcessor;
|
||||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||||
|
|
||||||
|
|
@ -37,22 +37,23 @@ public class GatewayController {
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
|
|
||||||
private final IMessageResolver messageResolver;
|
private final IMessageResolver messageResolver;
|
||||||
private final Processor<FondListingsRequestParam> fondListingsRequestProcessor;
|
|
||||||
private final Processor<MMListingsRequestParam> mmListingsRequestProcessor;
|
private final Processor<MMListingsRequestParam> mmListingsRequestProcessor;
|
||||||
private final CompanyProcessor companiesProcessor;
|
private final CompanyProcessor companiesProcessor;
|
||||||
|
private final ListingFondProcessor listingFondProcessor;
|
||||||
private final ExecutorService executor;
|
private final ExecutorService executor;
|
||||||
|
|
||||||
private List<String> validTypes = Arrays.asList("DAY_START", "ON_DEMAND");
|
private List<String> validTypes = Arrays.asList("DAY_START", "ON_DEMAND");
|
||||||
|
|
||||||
public GatewayController(
|
public GatewayController(
|
||||||
IMessageResolver messageResolver,
|
IMessageResolver messageResolver,
|
||||||
@Qualifier("fondListingsRequestProcessor") Processor<FondListingsRequestParam> fondListingsRequestProcessor,
|
|
||||||
@Qualifier("mmListingsRequestProcessor") Processor<MMListingsRequestParam> mmListingsRequestProcessor,
|
@Qualifier("mmListingsRequestProcessor") Processor<MMListingsRequestParam> mmListingsRequestProcessor,
|
||||||
CompanyProcessor companiesProcessor, @Qualifier("gatewayExecutor") ExecutorService executor) {
|
CompanyProcessor companiesProcessor,
|
||||||
|
ListingFondProcessor listingFondProcessor,
|
||||||
|
@Qualifier("gatewayExecutor") ExecutorService executor) {
|
||||||
this.messageResolver = messageResolver;
|
this.messageResolver = messageResolver;
|
||||||
this.fondListingsRequestProcessor = fondListingsRequestProcessor;
|
|
||||||
this.mmListingsRequestProcessor = mmListingsRequestProcessor;
|
this.mmListingsRequestProcessor = mmListingsRequestProcessor;
|
||||||
this.companiesProcessor = companiesProcessor;
|
this.companiesProcessor = companiesProcessor;
|
||||||
|
this.listingFondProcessor = listingFondProcessor;
|
||||||
this.executor = executor;
|
this.executor = executor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -71,14 +72,7 @@ public class GatewayController {
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public CommonResponse listingsFond(@RequestBody FondListingsRequest request) {
|
public CommonResponse listingsFond(@RequestBody FondListingsRequest request) {
|
||||||
// request.validate(validTypes, List.of(Section.FOND));
|
// request.validate(validTypes, List.of(Section.FOND));
|
||||||
FondListingsRequestParam requestParam = new FondListingsRequestParam(request);
|
executor.submit(() -> listingFondProcessor.process(request));
|
||||||
executor.submit(() -> {
|
|
||||||
ProcessResult processResult = fondListingsRequestProcessor.process(requestParam);
|
|
||||||
if (processResult.getError() != null) {
|
|
||||||
log.warn("Exception while process listingFind: {}", processResult.getError());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return createResponse(request, true);
|
return createResponse(request, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -124,9 +118,7 @@ public class GatewayController {
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public CommonResponse companies(@RequestBody CompaniesRequest request) {
|
public CommonResponse companies(@RequestBody CompaniesRequest request) {
|
||||||
// request.validate(validTypes, Collections.emptyList());
|
// request.validate(validTypes, Collections.emptyList());
|
||||||
executor.submit(() -> {
|
executor.submit(() -> companiesProcessor.process(request));
|
||||||
companiesProcessor.process(request);
|
|
||||||
});
|
|
||||||
return createResponse(request, true);
|
return createResponse(request, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
package ru.spcex.clearing.gatewayapi.controller.request;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public interface WithIssuerId {
|
||||||
|
UUID getIssuerId();
|
||||||
|
}
|
||||||
|
|
@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import ru.spcex.clearing.gatewayapi.config.deserializers.LocalDateDeserializer;
|
import ru.spcex.clearing.gatewayapi.config.deserializers.LocalDateDeserializer;
|
||||||
|
import ru.spcex.clearing.gatewayapi.controller.request.WithIssuerId;
|
||||||
import ru.spcex.clearing.gatewayapi.controller.request.WithMapId;
|
import ru.spcex.clearing.gatewayapi.controller.request.WithMapId;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
|
@ -13,7 +14,7 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class FondSecurity extends WithMapId {
|
public class FondSecurity extends WithMapId implements WithIssuerId {
|
||||||
@JsonProperty("id")
|
@JsonProperty("id")
|
||||||
@ApiModelProperty(
|
@ApiModelProperty(
|
||||||
value = "id (uuid)",
|
value = "id (uuid)",
|
||||||
|
|
@ -208,6 +209,7 @@ public class FondSecurity extends WithMapId {
|
||||||
this.instrumentType = instrumentType;
|
this.instrumentType = instrumentType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public UUID getIssuerId() {
|
public UUID getIssuerId() {
|
||||||
return issuerId;
|
return issuerId;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,43 +0,0 @@
|
||||||
package ru.spcex.clearing.gatewayapi.logic.listings_fond;
|
|
||||||
|
|
||||||
import ru.spcex.clearing.gatewayapi.controller.request.listing.fond.FondListingsRequest;
|
|
||||||
import ru.spcex.clearing.gatewayapi.controller.request.listing.fond.FondSecurity;
|
|
||||||
import ru.spcex.clearing.gatewayapi.controller.request.listing.fond.IssuerCompany;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class FondListingsRequestParam {
|
|
||||||
private FondListingsRequest fondListingsRequest;
|
|
||||||
private List<FondSecurity> securities = new ArrayList<>();
|
|
||||||
private List<IssuerCompany> issuerCompanyList = new ArrayList<>();
|
|
||||||
|
|
||||||
public FondListingsRequestParam(FondListingsRequest fondListingsRequest) {
|
|
||||||
this.fondListingsRequest = fondListingsRequest;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public FondListingsRequest getRequest() {
|
|
||||||
return fondListingsRequest;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<FondSecurity> getSecurities() {
|
|
||||||
return securities;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<IssuerCompany> getIssuerCompanyList() {
|
|
||||||
return issuerCompanyList;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setListingsRequest(FondListingsRequest fondListingsRequest) {
|
|
||||||
this.fondListingsRequest = fondListingsRequest;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSecurities(List<FondSecurity> securities) {
|
|
||||||
this.securities = securities;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setIssuerCompanyList(List<IssuerCompany> issuerCompanyList) {
|
|
||||||
this.issuerCompanyList = issuerCompanyList;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,84 +0,0 @@
|
||||||
package ru.spcex.clearing.gatewayapi.logic.listings_fond;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import ru.spcex.clearing.gatewayapi.controller.request.listing.fond.*;
|
|
||||||
import ru.spcex.clearing.gatewayapi.errors.GatewayError;
|
|
||||||
import ru.spcex.clearing.gatewayapi.logic.ProcessResult;
|
|
||||||
import ru.spcex.clearing.gatewayapi.logic.Stage;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
public class PrepareIncomeSecurities extends Stage<FondListingsRequestParam> {
|
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ProcessResult process(FondListingsRequestParam param) {
|
|
||||||
List<FondSecurity> securities = param.getRequest().getSecurities();
|
|
||||||
|
|
||||||
Map<UUID, FondSecurity> securityMap = new HashMap<>();
|
|
||||||
for (FondSecurity fondSecurity : securities) {
|
|
||||||
if (securityMap.containsKey(fondSecurity.getId())) {
|
|
||||||
log.warn("For security.id {} found > 1 element from request, use first", fondSecurity.getId());
|
|
||||||
fondSecurity.setInvalidData(true);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
securityMap.put(fondSecurity.getId(), fondSecurity);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<CouponSchedule> couponSchedules = param.getRequest().getCouponSchedules();
|
|
||||||
for (CouponSchedule couponSchedule : couponSchedules) {
|
|
||||||
UUID couponScheduleUUID = couponSchedule.getSecurityId();
|
|
||||||
FondSecurity fondSecurity = securityMap.get(couponScheduleUUID);
|
|
||||||
if (fondSecurity == null) {
|
|
||||||
log.warn("For coupon_schedule.security_id {} not found security, skipped", couponScheduleUUID);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
fondSecurity.getCouponScheduleList().add(couponSchedule);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<Currency> currencyList = param.getRequest().getCurrencies();
|
|
||||||
for (Currency currency : currencyList) {
|
|
||||||
UUID currencyUUID = currency.getId();
|
|
||||||
// todo сделать после выяснения
|
|
||||||
}
|
|
||||||
|
|
||||||
List<IncomeListing> listingList = param.getRequest().getListingList();
|
|
||||||
for (IncomeListing listing : listingList) {
|
|
||||||
UUID listingUUID = listing.getSecurityId();
|
|
||||||
FondSecurity fondSecurity = securityMap.get(listingUUID);
|
|
||||||
if (fondSecurity == null) {
|
|
||||||
log.warn("For listing.security_id {} not found security, skipped", listingUUID);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
fondSecurity.getListingList().add(listing);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<Nominal> nominalList = param.getRequest().getNominalList();
|
|
||||||
for (Nominal nominal : nominalList) {
|
|
||||||
UUID nominalUUID = nominal.getSecurityId();
|
|
||||||
FondSecurity fondSecurity = securityMap.get(nominalUUID);
|
|
||||||
if (fondSecurity == null) {
|
|
||||||
log.warn("For nominal.security_id {} not found security, skipped", nominalUUID);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
fondSecurity.getNominalList().add(nominal);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<FondSecurity> filteredIncomeSecurities = securities.stream()
|
|
||||||
.filter(incomeSecurity -> !incomeSecurity.isInvalidData())
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
|
|
||||||
if (filteredIncomeSecurities.isEmpty()) {
|
|
||||||
return new ProcessResult(GatewayError.SecurityNotFound, securities.stream().map(fondSecurity -> fondSecurity.getId().toString()).collect(Collectors.joining(", ")));
|
|
||||||
}
|
|
||||||
|
|
||||||
param.setSecurities(filteredIncomeSecurities);
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,99 +0,0 @@
|
||||||
package ru.spcex.clearing.gatewayapi.logic.listings_fond;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import ru.spcex.clearing.gatewayapi.controller.request.listing.fond.*;
|
|
||||||
import ru.spcex.clearing.gatewayapi.logic.ProcessResult;
|
|
||||||
import ru.spcex.clearing.gatewayapi.logic.Stage;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
public class PrepareIssuerCompanies extends Stage<FondListingsRequestParam> {
|
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ProcessResult process(FondListingsRequestParam param) {
|
|
||||||
List<IssuerCompany> issuerCompanyList = param.getRequest().getIssuerCompanyList();
|
|
||||||
|
|
||||||
Map<UUID, IssuerCompany> issuerCompanyMap = new HashMap<>();
|
|
||||||
for (IssuerCompany issuerCompany : issuerCompanyList) {
|
|
||||||
if (issuerCompanyMap.containsKey(issuerCompany.getId())) {
|
|
||||||
log.warn("For company.id {} found > 1 element from request, use first", issuerCompany.getId());
|
|
||||||
issuerCompany.setInvalidData(true);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
issuerCompanyMap.put(issuerCompany.getId(), issuerCompany);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (IssuerCompany issuerCompany : issuerCompanyList) {
|
|
||||||
if (issuerCompany.isInvalidData()) continue;
|
|
||||||
|
|
||||||
UUID issuerCompanyId = issuerCompany.getId();
|
|
||||||
boolean securityFoundForCompany = false;
|
|
||||||
for (FondSecurity fondSecurity : param.getSecurities()) {
|
|
||||||
if (fondSecurity.getIssuerId().equals(issuerCompanyId)) {
|
|
||||||
fondSecurity.setIssuerCompany(issuerCompany);
|
|
||||||
securityFoundForCompany = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!securityFoundForCompany) {
|
|
||||||
log.warn("For company.id {} not found security", issuerCompanyId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
List<IssuerCompanyInfo> issuerCompanyInfoList = param.getRequest().getIssuerCompanyInfoList();
|
|
||||||
for (IssuerCompanyInfo issuerCompanyInfo : issuerCompanyInfoList) {
|
|
||||||
UUID issuerCompanyInfoUUID = issuerCompanyInfo.getCompanyId();
|
|
||||||
IssuerCompany issuerCompany = issuerCompanyMap.get(issuerCompanyInfoUUID);
|
|
||||||
if (issuerCompany == null) {
|
|
||||||
log.warn("For company_info.company_id {} not found company, company_info skipped", issuerCompanyInfoUUID);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (issuerCompany.getIssuerCompanyInfo() != null) {
|
|
||||||
log.warn("For company.id {} found > 1 company_info, use first", issuerCompanyInfoUUID);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
issuerCompany.setIssuerCompanyInfo(issuerCompanyInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<IssuerCompanySymbols> issuerCompanySymbolsList = param.getRequest().getIssuerCompanySymbolsList();
|
|
||||||
for (IssuerCompanySymbols issuerCompanySymbols : issuerCompanySymbolsList) {
|
|
||||||
UUID issuerCompanySymbolsUUID = issuerCompanySymbols.getCompanyId();
|
|
||||||
IssuerCompany issuerCompany = issuerCompanyMap.get(issuerCompanySymbolsUUID);
|
|
||||||
if (issuerCompany == null) {
|
|
||||||
log.warn("For company_symbols ({} = {}) not found company, company_symbols skipped",
|
|
||||||
issuerCompanySymbols.getCompanySymbol(),
|
|
||||||
issuerCompanySymbols.getCompanySymbolValue());
|
|
||||||
issuerCompanySymbols.setInvalidData(true);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
issuerCompany.getIssuerCompanySymbolsList().add(issuerCompanySymbols);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<IssuerContact> issuerContactList = param.getRequest().getIssuerContactList();
|
|
||||||
for (IssuerContact issuerContact : issuerContactList) {
|
|
||||||
UUID issuerContactUUID = issuerContact.getCompanyId();
|
|
||||||
IssuerCompany issuerCompany = issuerCompanyMap.get(issuerContactUUID);
|
|
||||||
if (issuerCompany == null) {
|
|
||||||
log.warn("For contact ({} = {}) not found company, contact skipped",
|
|
||||||
issuerContact.getContactType(),
|
|
||||||
issuerContact.getContactValue());
|
|
||||||
issuerContact.setInvalidData(true);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
issuerCompany.getIssuerContactList().add(issuerContact);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<IssuerCompany> filteredIssuerCompany = issuerCompanyList.stream()
|
|
||||||
.filter(issuerCompany -> !issuerCompany.isInvalidData())
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
|
|
||||||
param.setIssuerCompanyList(filteredIssuerCompany);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,125 +0,0 @@
|
||||||
package ru.spcex.clearing.gatewayapi.logic.listings_fond;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import ru.clearing.classes.statics.data.company.Company;
|
|
||||||
import ru.spcex.clearing.gatewayapi.controller.request.listing.fond.IssuerCompany;
|
|
||||||
import ru.spcex.clearing.gatewayapi.controller.request.listing.fond.IssuerCompanyInfo;
|
|
||||||
import ru.spcex.clearing.gatewayapi.controller.request.listing.fond.IssuerCompanySymbols;
|
|
||||||
import ru.spcex.clearing.gatewayapi.controller.request.listing.fond.IssuerContact;
|
|
||||||
import ru.spcex.clearing.gatewayapi.logic.ProcessResult;
|
|
||||||
import ru.spcex.clearing.gatewayapi.logic.Stage;
|
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
|
||||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.company.*;
|
|
||||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
|
||||||
import ru.spcex.platform.enumeration.CompanySymbol;
|
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Отправка сообщения к company-service на создание/обновление company
|
|
||||||
* todo Пока убрал совсем не рабочую логику с sendToQueueWaitForAnswer
|
|
||||||
*/
|
|
||||||
public class SendMessageToCompanyServiceWithIssuerCompanies extends Stage<FondListingsRequestParam> {
|
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
|
||||||
|
|
||||||
private final KafkaSender kafkaSender;
|
|
||||||
private final Imdg<Company> companyImdg;
|
|
||||||
|
|
||||||
|
|
||||||
public SendMessageToCompanyServiceWithIssuerCompanies(KafkaSender kafkaSender, ImdgProvider imdgProvider) {
|
|
||||||
this.kafkaSender = kafkaSender;
|
|
||||||
this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ProcessResult process(FondListingsRequestParam param) {
|
|
||||||
List<IssuerCompany> companyList = param.getIssuerCompanyList();
|
|
||||||
for (IssuerCompany company : companyList) {
|
|
||||||
if (company.isInvalidData()) continue;
|
|
||||||
|
|
||||||
CompanyNewRequest companyNewRequest = new CompanyNewRequest();
|
|
||||||
if (company.isAlreadyExist()) companyNewRequest.setId(company.getMapId());
|
|
||||||
companyNewRequest.setShortName(company.getShortName());
|
|
||||||
companyNewRequest.setFullName(company.getFullName());
|
|
||||||
companyNewRequest.setWorkflowStatus(company.getWorkflowStatus());
|
|
||||||
companyNewRequest.setCompanySymbol(CompanySymbol.UUID.getKey());
|
|
||||||
companyNewRequest.setCompanySymbolValue(company.getId().toString());
|
|
||||||
|
|
||||||
IssuerCompanyInfo companyInfo = company.getIssuerCompanyInfo();
|
|
||||||
|
|
||||||
if (company.isAlreadyExist()) {
|
|
||||||
kafkaSender.sendRequestToQueue(Consts.DESTINATION_COMPANY_UPDATE, companyNewRequest);
|
|
||||||
} else {
|
|
||||||
kafkaSender.sendRequestToQueue(Consts.DESTINATION_COMPANY_NEW, companyNewRequest);
|
|
||||||
Company companyFromImdg = companyImdg.getSingleObjectByFieldValues(
|
|
||||||
Map.of(
|
|
||||||
"shortName", company.getShortName(),
|
|
||||||
"fullName", company.getFullName(),
|
|
||||||
"workflowStatus", company.getWorkflowStatus()
|
|
||||||
)
|
|
||||||
);
|
|
||||||
if (companyFromImdg == null) {
|
|
||||||
log.warn("Can't insert company (id {}), skipped", company.getId());
|
|
||||||
company.setInvalidData(true);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
company.setAlreadyExist(true);
|
|
||||||
company.setMapId(companyFromImdg.getId());
|
|
||||||
}
|
|
||||||
Long companyId = company.getMapId();
|
|
||||||
|
|
||||||
CompanyInfoUpdateRequest companyInfoUpdateRequest = new CompanyInfoUpdateRequest();
|
|
||||||
companyInfoUpdateRequest.setId(companyId);
|
|
||||||
if (companyInfo != null) {
|
|
||||||
companyInfoUpdateRequest.setCountryCode(companyInfo.getCountryCode());
|
|
||||||
companyInfoUpdateRequest.setLegalKind(companyInfo.getLegalKind());
|
|
||||||
companyInfoUpdateRequest.setOrganizationType(companyInfo.getOrganizationType());
|
|
||||||
companyInfoUpdateRequest.setResidence(companyInfo.getResidence());
|
|
||||||
companyInfoUpdateRequest.setShortNameEng(companyInfo.getShortNameEng());
|
|
||||||
companyInfoUpdateRequest.setFullNameEng(companyInfo.getFullNameEng());
|
|
||||||
}
|
|
||||||
kafkaSender.sendRequestToQueue(Consts.DESTINATION_COMPANY_INFO_UPDATE, companyInfoUpdateRequest);
|
|
||||||
|
|
||||||
for (IssuerCompanySymbols companySymbols : company.getIssuerCompanySymbolsList()) {
|
|
||||||
if (companySymbols.isInvalidData()) continue;
|
|
||||||
if (!company.isAlreadyExist() || !companySymbols.isAlreadyExist()) {
|
|
||||||
CompanySymbolNewRequest companySymbolNewRequest = new CompanySymbolNewRequest();
|
|
||||||
companySymbolNewRequest.setCompanyId(companyId);
|
|
||||||
companySymbolNewRequest.setCompanySymbol(companySymbols.getCompanySymbol());
|
|
||||||
companySymbolNewRequest.setCompanySymbolValue(companySymbols.getCompanySymbolValue());
|
|
||||||
kafkaSender.sendRequestToQueue(Consts.DESTINATION_COMPANY_SYMBOL_NEW, companySymbolNewRequest);
|
|
||||||
} else {
|
|
||||||
CompanySymbolUpdateRequest companySymbolUpdateRequest = new CompanySymbolUpdateRequest();
|
|
||||||
companySymbolUpdateRequest.setId(companySymbols.getMapId());
|
|
||||||
companySymbolUpdateRequest.setCompanyId(companyId);
|
|
||||||
companySymbolUpdateRequest.setCompanySymbolValue(companySymbols.getCompanySymbolValue());
|
|
||||||
kafkaSender.sendRequestToQueue(Consts.DESTINATION_COMPANY_SYMBOL_UPDATE, companySymbolUpdateRequest);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (IssuerContact contact : company.getIssuerContactList()) {
|
|
||||||
if (contact.isInvalidData()) continue;
|
|
||||||
if (!company.isAlreadyExist() || !contact.isAlreadyExist()) {
|
|
||||||
ContactNewRequest contactNewRequest = new ContactNewRequest();
|
|
||||||
contactNewRequest.setCompanyId(companyId);
|
|
||||||
contactNewRequest.setContactType(contact.getContactType());
|
|
||||||
contactNewRequest.setContactValue(contact.getContactValue());
|
|
||||||
kafkaSender.sendRequestToQueue(Consts.DESTINATION_CONTACT_NEW, contactNewRequest);
|
|
||||||
} else {
|
|
||||||
ContactUpdateRequest contactUpdateRequest = new ContactUpdateRequest();
|
|
||||||
contactUpdateRequest.setId(contact.getMapId());
|
|
||||||
contactUpdateRequest.setContactType(contact.getContactType());
|
|
||||||
contactUpdateRequest.setContactValue(contact.getContactValue());
|
|
||||||
kafkaSender.sendRequestToQueue(Consts.DESTINATION_CONTACT_UPDATE, contactUpdateRequest);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,244 +0,0 @@
|
||||||
package ru.spcex.clearing.gatewayapi.logic.listings_fond;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import ru.clearing.classes.statics.data.company.Company;
|
|
||||||
import ru.clearing.classes.statics.data.company.CompanySymbols;
|
|
||||||
import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity;
|
|
||||||
import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity;
|
|
||||||
import ru.spcex.clearing.gatewayapi.controller.request.listing.fond.CouponSchedule;
|
|
||||||
import ru.spcex.clearing.gatewayapi.controller.request.listing.fond.FondSecurity;
|
|
||||||
import ru.spcex.clearing.gatewayapi.controller.request.listing.fond.IncomeListing;
|
|
||||||
import ru.spcex.clearing.gatewayapi.controller.request.listing.fond.Nominal;
|
|
||||||
import ru.spcex.clearing.gatewayapi.logic.ProcessResult;
|
|
||||||
import ru.spcex.clearing.gatewayapi.logic.Stage;
|
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
|
||||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.*;
|
|
||||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
|
||||||
import ru.spcex.platform.enumeration.CompanySymbol;
|
|
||||||
import ru.spcex.platform.enumeration.InstrumentType;
|
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Отправка сообщения к security-service на создание/обновление security
|
|
||||||
* todo Пока убрал совсем не рабочую логику с sendToQueueWaitForAnswer
|
|
||||||
*/
|
|
||||||
public class SendMessageToSecurityServiceWithFondSecurities extends Stage<FondListingsRequestParam> {
|
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
|
||||||
|
|
||||||
private final KafkaSender kafkaSender;
|
|
||||||
private final Imdg<FixedIncomeSecurity> fixedIncomeSecurityImdg;
|
|
||||||
private final Imdg<EquitySecurity> equitySecurityImdg;
|
|
||||||
private final Imdg<CompanySymbols> companySymbolsImdg;
|
|
||||||
private final Imdg<Company> companyImdg;
|
|
||||||
|
|
||||||
|
|
||||||
public SendMessageToSecurityServiceWithFondSecurities(KafkaSender kafkaSender, ImdgProvider imdgProvider) {
|
|
||||||
this.kafkaSender = kafkaSender;
|
|
||||||
this.fixedIncomeSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class);
|
|
||||||
this.equitySecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class);
|
|
||||||
this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
|
||||||
this.companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ProcessResult process(FondListingsRequestParam param) {
|
|
||||||
List<FondSecurity> securityList = param.getSecurities();
|
|
||||||
for (FondSecurity security : securityList) {
|
|
||||||
if (security.isInvalidData()) continue;
|
|
||||||
Long companyId;
|
|
||||||
if (security.getIssuerCompany() == null || security.getIssuerCompany().getMapId() == null) {
|
|
||||||
// Пытаемся найти компанию по UUID
|
|
||||||
UUID companyUUID = security.getIssuerId();
|
|
||||||
Collection<CompanySymbols> companySymbols = companySymbolsImdg.getCollectionObjectsByFieldValues(
|
|
||||||
Map.of(
|
|
||||||
"companySymbol", CompanySymbol.UUID.getKey(),
|
|
||||||
"companySymbolValue", companyUUID.toString()
|
|
||||||
)
|
|
||||||
);
|
|
||||||
if (companySymbols.isEmpty()) {
|
|
||||||
log.warn("Can't insert security.id {}, company not found for parameter issuerId", security.getId());
|
|
||||||
security.setInvalidData(true);
|
|
||||||
continue;
|
|
||||||
} else if (companySymbols.size() > 1) {
|
|
||||||
log.warn("For {} = {} found > 1 company_symbol, use first", CompanySymbol.UUID.getKey(), companyUUID);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Проверяем, что в базе помимо реквизита есть компания
|
|
||||||
companyId = companySymbols.iterator().next().getCompanyId();
|
|
||||||
Company company = companyImdg.getSingleObjectByID(companyId);
|
|
||||||
if (company == null) {
|
|
||||||
log.warn("Can't insert security: not found company with id {}", companyId);
|
|
||||||
security.setInvalidData(true);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
companyId = security.getIssuerCompany().getMapId();
|
|
||||||
}
|
|
||||||
Long securityId;
|
|
||||||
if (InstrumentType.BOND.equalsByKey(security.getInstrumentType())) {
|
|
||||||
if (!security.isAlreadyExist()) {
|
|
||||||
FixedIncomeSecurityNewRequest fixedIncomeSecurityNewRequest = new FixedIncomeSecurityNewRequest();
|
|
||||||
fixedIncomeSecurityNewRequest.setSecuritySymbol(security.getSecuritySymbol());
|
|
||||||
fixedIncomeSecurityNewRequest.setShortName(security.getShortName());
|
|
||||||
fixedIncomeSecurityNewRequest.setFullName(security.getFullName());
|
|
||||||
fixedIncomeSecurityNewRequest.setIsin(security.getIsin());
|
|
||||||
fixedIncomeSecurityNewRequest.setBondType(security.getBondType());
|
|
||||||
fixedIncomeSecurityNewRequest.setNominalValue(security.getNominalValue());
|
|
||||||
fixedIncomeSecurityNewRequest.setNominalCurrency(security.getNominalCurrency());
|
|
||||||
fixedIncomeSecurityNewRequest.setMaturityDate(security.getMaturityDate());
|
|
||||||
fixedIncomeSecurityNewRequest.setCouponFrequency(security.getCouponFrequency().longValue());
|
|
||||||
fixedIncomeSecurityNewRequest.setIssuerId(companyId);
|
|
||||||
fixedIncomeSecurityNewRequest.setShortNameEng(security.getShortNameEng());
|
|
||||||
fixedIncomeSecurityNewRequest.setFullNameEng(security.getFullNameEng());
|
|
||||||
fixedIncomeSecurityNewRequest.setWorkflowStatus(security.getWorkflowStatus());
|
|
||||||
fixedIncomeSecurityNewRequest.setInstrumentType(security.getInstrumentType());
|
|
||||||
kafkaSender.sendRequestToQueue(Consts.DESTINATION_FIXED_INCOME_SECURITY_NEW, fixedIncomeSecurityNewRequest);
|
|
||||||
} else {
|
|
||||||
FixedIncomeSecurityUpdateRequest fixedIncomeSecurityUpdateRequest = new FixedIncomeSecurityUpdateRequest();
|
|
||||||
fixedIncomeSecurityUpdateRequest.setId(security.getMapId());
|
|
||||||
fixedIncomeSecurityUpdateRequest.setSecuritySymbol(security.getSecuritySymbol());
|
|
||||||
fixedIncomeSecurityUpdateRequest.setShortName(security.getShortName());
|
|
||||||
fixedIncomeSecurityUpdateRequest.setFullName(security.getFullName());
|
|
||||||
fixedIncomeSecurityUpdateRequest.setIsin(security.getIsin());
|
|
||||||
fixedIncomeSecurityUpdateRequest.setBondType(security.getBondType());
|
|
||||||
fixedIncomeSecurityUpdateRequest.setNominalValue(security.getNominalValue());
|
|
||||||
fixedIncomeSecurityUpdateRequest.setNominalCurrency(security.getNominalCurrency());
|
|
||||||
fixedIncomeSecurityUpdateRequest.setMaturityDate(security.getMaturityDate());
|
|
||||||
fixedIncomeSecurityUpdateRequest.setCouponFrequency(security.getCouponFrequency().longValue());
|
|
||||||
fixedIncomeSecurityUpdateRequest.setIssuerId(companyId);
|
|
||||||
fixedIncomeSecurityUpdateRequest.setShortNameEng(security.getShortNameEng());
|
|
||||||
fixedIncomeSecurityUpdateRequest.setFullNameEng(security.getFullNameEng());
|
|
||||||
fixedIncomeSecurityUpdateRequest.setWorkflowStatus(security.getWorkflowStatus());
|
|
||||||
fixedIncomeSecurityUpdateRequest.setInstrumentType(security.getInstrumentType());
|
|
||||||
kafkaSender.sendRequestToQueue(Consts.DESTINATION_FIXED_INCOME_SECURITY_UPDATE, fixedIncomeSecurityUpdateRequest);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (!security.isAlreadyExist()) {
|
|
||||||
EquitySecurityNewRequest equitySecurityNewRequest = new EquitySecurityNewRequest();
|
|
||||||
equitySecurityNewRequest.setSecuritySymbol(security.getSecuritySymbol());
|
|
||||||
equitySecurityNewRequest.setShortName(security.getShortName());
|
|
||||||
equitySecurityNewRequest.setFullName(security.getFullName());
|
|
||||||
equitySecurityNewRequest.setIsin(security.getIsin());
|
|
||||||
equitySecurityNewRequest.setShareType(security.getShareType());
|
|
||||||
equitySecurityNewRequest.setIssuerId(companyId);
|
|
||||||
equitySecurityNewRequest.setShortNameEng(security.getShortNameEng());
|
|
||||||
equitySecurityNewRequest.setFullNameEng(security.getFullNameEng());
|
|
||||||
equitySecurityNewRequest.setWorkflowStatus(security.getWorkflowStatus());
|
|
||||||
equitySecurityNewRequest.setInstrumentType(security.getInstrumentType());
|
|
||||||
kafkaSender.sendRequestToQueue(Consts.DESTINATION_EQUITY_SECURITY_NEW, equitySecurityNewRequest);
|
|
||||||
} else {
|
|
||||||
EquitySecurityUpdateRequest equitySecurityUpdateRequest = new EquitySecurityUpdateRequest();
|
|
||||||
equitySecurityUpdateRequest.setId(security.getMapId());
|
|
||||||
equitySecurityUpdateRequest.setSecuritySymbol(security.getSecuritySymbol());
|
|
||||||
equitySecurityUpdateRequest.setShortName(security.getShortName());
|
|
||||||
equitySecurityUpdateRequest.setFullName(security.getFullName());
|
|
||||||
equitySecurityUpdateRequest.setIsin(security.getIsin());
|
|
||||||
equitySecurityUpdateRequest.setShareType(security.getShareType());
|
|
||||||
equitySecurityUpdateRequest.setIssuerId(companyId);
|
|
||||||
equitySecurityUpdateRequest.setShortNameEng(security.getShortNameEng());
|
|
||||||
equitySecurityUpdateRequest.setFullNameEng(security.getFullNameEng());
|
|
||||||
equitySecurityUpdateRequest.setWorkflowStatus(security.getWorkflowStatus());
|
|
||||||
equitySecurityUpdateRequest.setInstrumentType(security.getInstrumentType());
|
|
||||||
kafkaSender.sendRequestToQueue(Consts.DESTINATION_EQUITY_SECURITY_UPDATE, equitySecurityUpdateRequest);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!security.isAlreadyExist()) {
|
|
||||||
Map<String, String> predicate = Map.of(
|
|
||||||
"instrumentType", security.getInstrumentType(),
|
|
||||||
"securitySymbol", security.getSecuritySymbol(),
|
|
||||||
"workflowStatus", security.getWorkflowStatus(),
|
|
||||||
"shortName", security.getShortName()
|
|
||||||
);
|
|
||||||
if (InstrumentType.BOND.equalsByKey(security.getInstrumentType())) {
|
|
||||||
FixedIncomeSecurity fixedIncomeSecurity = fixedIncomeSecurityImdg.getSingleObjectByFieldValues(predicate);
|
|
||||||
if (fixedIncomeSecurity != null) security.setMapId(fixedIncomeSecurity.getId());
|
|
||||||
} else {
|
|
||||||
EquitySecurity equitySecurity = equitySecurityImdg.getSingleObjectByFieldValues(predicate);
|
|
||||||
if (equitySecurity != null) security.setMapId(equitySecurity.getId());
|
|
||||||
}
|
|
||||||
if (security.getMapId() == null) {
|
|
||||||
log.warn("Can't insert security (id {}), skipped", security.getId());
|
|
||||||
security.setInvalidData(true);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
securityId = security.getMapId();
|
|
||||||
|
|
||||||
for (IncomeListing listing : security.getListingList()) {
|
|
||||||
if (listing.isInvalidData()) continue;
|
|
||||||
if (!security.isAlreadyExist() || !listing.isAlreadyExist()) {
|
|
||||||
ListingNewRequest listingNewRequest = new ListingNewRequest();
|
|
||||||
listingNewRequest.setSecurityId(securityId);
|
|
||||||
listingNewRequest.setMarket(listing.getCode());
|
|
||||||
listingNewRequest.setLotSize(listing.getLotSize());
|
|
||||||
listingNewRequest.setTradingCurrency(listing.getTradingCurrency());
|
|
||||||
listingNewRequest.setWorkflowStatus(listing.getWorkflowStatus());
|
|
||||||
kafkaSender.sendRequestToQueue(Consts.LISTING_NEW, listingNewRequest);
|
|
||||||
} else {
|
|
||||||
ListingUpdateRequest listingUpdateRequest = new ListingUpdateRequest();
|
|
||||||
listingUpdateRequest.setId(listing.getMapId());
|
|
||||||
listingUpdateRequest.setSecurityId(securityId);
|
|
||||||
listingUpdateRequest.setMarket(listing.getCode());
|
|
||||||
listingUpdateRequest.setLotSize(listing.getLotSize());
|
|
||||||
listingUpdateRequest.setTradingCurrency(listing.getTradingCurrency());
|
|
||||||
listingUpdateRequest.setWorkflowStatus(listing.getWorkflowStatus());
|
|
||||||
kafkaSender.sendRequestToQueue(Consts.LISTING_UPDATE, listingUpdateRequest);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (CouponSchedule couponSchedule : security.getCouponScheduleList()) {
|
|
||||||
if (couponSchedule.isInvalidData()) continue;
|
|
||||||
if (!security.isAlreadyExist() || !couponSchedule.isAlreadyExist()) {
|
|
||||||
CouponPeriodNewRequest couponPeriodNewRequest = new CouponPeriodNewRequest();
|
|
||||||
couponPeriodNewRequest.setSecurityId(securityId);
|
|
||||||
couponPeriodNewRequest.setCouponRate(couponSchedule.getCouponRate());
|
|
||||||
couponPeriodNewRequest.setNumber(couponSchedule.getCouponNumber());
|
|
||||||
couponPeriodNewRequest.setPeriodEndDate(couponSchedule.getPeriodEndDate());
|
|
||||||
couponPeriodNewRequest.setPeriodStartDate(couponSchedule.getPeriodStartDate());
|
|
||||||
kafkaSender.sendRequestToQueue(Consts.DESTINATION_COUPON_PERIOD_NEW, couponPeriodNewRequest);
|
|
||||||
} else {
|
|
||||||
CouponPeriodUpdateRequest couponPeriodUpdateRequest = new CouponPeriodUpdateRequest();
|
|
||||||
couponPeriodUpdateRequest.setId(couponSchedule.getMapId());
|
|
||||||
couponPeriodUpdateRequest.setSecurityId(securityId);
|
|
||||||
couponPeriodUpdateRequest.setCouponRate(couponSchedule.getCouponRate());
|
|
||||||
couponPeriodUpdateRequest.setNumber(couponSchedule.getCouponNumber());
|
|
||||||
couponPeriodUpdateRequest.setPeriodEndDate(couponSchedule.getPeriodEndDate());
|
|
||||||
couponPeriodUpdateRequest.setPeriodStartDate(couponSchedule.getPeriodStartDate());
|
|
||||||
kafkaSender.sendRequestToQueue(Consts.DESTINATION_COUPON_PERIOD_UPDATE, couponPeriodUpdateRequest);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Nominal nominal : security.getNominalList()) {
|
|
||||||
if (nominal.isInvalidData()) continue;
|
|
||||||
if (!security.isAlreadyExist() || !nominal.isAlreadyExist()) {
|
|
||||||
FixedIncomeCashFlowNewRequest fixedIncomeCashFlowNewRequest = new FixedIncomeCashFlowNewRequest();
|
|
||||||
fixedIncomeCashFlowNewRequest.setSecuritySymbol(security.getSecuritySymbol());
|
|
||||||
fixedIncomeCashFlowNewRequest.setAccruedCoupon(nominal.getAccruedCoupon());
|
|
||||||
fixedIncomeCashFlowNewRequest.setNominalValue(nominal.getNominal());
|
|
||||||
fixedIncomeCashFlowNewRequest.setNumber(nominal.getCouponNumber());
|
|
||||||
kafkaSender.sendRequestToQueue(Consts.DESTINATION_FIXED_INCOME_CASH_FLOW_NEW, fixedIncomeCashFlowNewRequest);
|
|
||||||
} else {
|
|
||||||
FixedIncomeCashFlowUpdateRequest fixedIncomeCashFlowUpdateRequest = new FixedIncomeCashFlowUpdateRequest();
|
|
||||||
fixedIncomeCashFlowUpdateRequest.setId(nominal.getMapId());
|
|
||||||
fixedIncomeCashFlowUpdateRequest.setSecuritySymbol(security.getSecuritySymbol());
|
|
||||||
fixedIncomeCashFlowUpdateRequest.setAccruedCoupon(nominal.getAccruedCoupon());
|
|
||||||
fixedIncomeCashFlowUpdateRequest.setNominalValue(nominal.getNominal());
|
|
||||||
fixedIncomeCashFlowUpdateRequest.setNumber(nominal.getCouponNumber());
|
|
||||||
kafkaSender.sendRequestToQueue(Consts.DESTINATION_FIXED_INCOME_CASH_FLOW_UPDATE, fixedIncomeCashFlowUpdateRequest);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -63,7 +63,7 @@ public class CompanyProcessor {
|
||||||
companyGatewayRequest.setProfileDocuments(profileDocumentNewRequests);
|
companyGatewayRequest.setProfileDocuments(profileDocumentNewRequests);
|
||||||
companyGatewayRequest.setClientCodes(clientCodeNewRequests);
|
companyGatewayRequest.setClientCodes(clientCodeNewRequests);
|
||||||
|
|
||||||
kafkaSender.sendRequestToQueue(Consts.DESTINATION_COMPANY_MULTIREQUEST, companyGatewayRequest);
|
kafkaSender.sendRequestToQueue(Consts.DESTINATION_COMPANY_GATEWAY_REQUEST, companyGatewayRequest);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,65 @@
|
||||||
|
package ru.spcex.clearing.gatewayapi.service;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import ru.spcex.clearing.gatewayapi.controller.request.WithCompanyId;
|
||||||
|
import ru.spcex.clearing.gatewayapi.controller.request.listing.fond.FondListingsRequest;
|
||||||
|
import ru.spcex.clearing.gatewayapi.controller.request.listing.fond.IssuerCompany;
|
||||||
|
import ru.spcex.clearing.gatewayapi.controller.request.listing.fond.IssuerCompanySymbols;
|
||||||
|
import ru.spcex.clearing.gatewayapi.controller.request.listing.fond.IssuerContact;
|
||||||
|
import ru.spcex.clearing.gatewayapi.service.adapter.SecurityMkrRequestAdapter;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanySymbolNewRequest;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.company.ContactNewRequest;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.company.SecurityMkrGatewayRequest;
|
||||||
|
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class IssueCompanyService {
|
||||||
|
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
|
|
||||||
|
private final SecurityMkrRequestAdapter securityMkrRequestAdapter;
|
||||||
|
private final KafkaSender kafkaSender;
|
||||||
|
|
||||||
|
public IssueCompanyService(SecurityMkrRequestAdapter securityMkrRequestAdapter,
|
||||||
|
KafkaSender kafkaSender) {
|
||||||
|
this.securityMkrRequestAdapter = securityMkrRequestAdapter;
|
||||||
|
this.kafkaSender = kafkaSender;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendRequest(FondListingsRequest request) {
|
||||||
|
List<IssuerCompany> issuerCompanyList = request.getIssuerCompanyList();
|
||||||
|
for (IssuerCompany issuerCompany : issuerCompanyList) {
|
||||||
|
UUID companyId = issuerCompany.getId();
|
||||||
|
log.debug("Grouping by companyId: {}", companyId);
|
||||||
|
List<IssuerCompanySymbols> issuerCompanySymbolsList = groupByCompanyId(request.getIssuerCompanySymbolsList(), companyId);
|
||||||
|
List<IssuerContact> issuerContactList = groupByCompanyId(request.getIssuerContactList(), companyId);
|
||||||
|
|
||||||
|
List<CompanySymbolNewRequest> companySymbolNewRequests = issuerCompanySymbolsList.stream().
|
||||||
|
map(securityMkrRequestAdapter::toCompanySymbolRequest).toList();
|
||||||
|
List<ContactNewRequest> contactNewRequests = issuerContactList.stream().
|
||||||
|
map(securityMkrRequestAdapter::toContactRequest).toList();
|
||||||
|
|
||||||
|
SecurityMkrGatewayRequest securityMkrGatewayRequest = new SecurityMkrGatewayRequest();
|
||||||
|
securityMkrGatewayRequest.setCompanyNewRequest(securityMkrRequestAdapter.toCompanyRequest(issuerCompany));
|
||||||
|
securityMkrGatewayRequest.setCompanySymbolNewRequests(companySymbolNewRequests);
|
||||||
|
securityMkrGatewayRequest.setContactNewRequests(contactNewRequests);
|
||||||
|
request.getIssuerCompanyInfoList()
|
||||||
|
.stream()
|
||||||
|
.filter(info -> info.getCompanyId().equals(companyId)).findFirst()
|
||||||
|
.map(securityMkrRequestAdapter::toCompanyInfoRequest)
|
||||||
|
.ifPresent(securityMkrGatewayRequest::setCompanyInfoUpdateRequest);
|
||||||
|
|
||||||
|
kafkaSender.sendRequestToQueue(Consts.DESTINATION_ISSUER_COMPANY_GATEWAY_REQUEST, securityMkrGatewayRequest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private <T extends WithCompanyId> List<T> groupByCompanyId(List<T> listToProcess, UUID companyId) {
|
||||||
|
return listToProcess.stream().filter(t -> t.getCompanyId().equals(companyId)).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,69 +1,20 @@
|
||||||
package ru.spcex.clearing.gatewayapi.service;
|
package ru.spcex.clearing.gatewayapi.service;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import ru.spcex.clearing.gatewayapi.controller.request.WithSecurityId;
|
import ru.spcex.clearing.gatewayapi.controller.request.listing.fond.FondListingsRequest;
|
||||||
import ru.spcex.clearing.gatewayapi.controller.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.EquitySecurityGatewayRequest;
|
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.company.FixedIncomeGatewayRequest;
|
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.company.SecurityGatewayRequest;
|
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.*;
|
|
||||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
|
||||||
import ru.spcex.platform.enumeration.InstrumentType;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class ListingFondProcessor {
|
public class ListingFondProcessor {
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
private final IssueCompanyService issueCompanyProcessor;
|
||||||
|
private final SecurityService securityService;
|
||||||
|
|
||||||
private final SecurityRequestAdapter securityRequestAdapter;
|
public ListingFondProcessor(IssueCompanyService issueCompanyProcessor, SecurityService securityService) {
|
||||||
private final KafkaSender kafkaSender;
|
this.issueCompanyProcessor = issueCompanyProcessor;
|
||||||
|
this.securityService = securityService;
|
||||||
public ListingFondProcessor(SecurityRequestAdapter securityRequestAdapter,
|
|
||||||
KafkaSender kafkaSender) {
|
|
||||||
this.securityRequestAdapter = securityRequestAdapter;
|
|
||||||
this.kafkaSender = kafkaSender;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void process(FondListingsRequest request) {
|
public void process(FondListingsRequest request) {
|
||||||
List<FondSecurity> securityList = request.getSecurities();
|
issueCompanyProcessor.sendRequest(request);
|
||||||
for (FondSecurity security : securityList) {
|
securityService.sendRequest(request);
|
||||||
UUID securityId = security.getId();
|
|
||||||
log.debug("Grouping by securityId: {}", securityId);
|
|
||||||
List<IncomeListing> incomeListings = groupByCompanyId(request.getListingList(), securityId);
|
|
||||||
List<CouponSchedule> couponSchedules = groupByCompanyId(request.getCouponSchedules(), securityId);
|
|
||||||
List<Nominal> nominals = groupByCompanyId(request.getNominalList(), securityId);
|
|
||||||
|
|
||||||
List<ListingNewRequest> listingRequests = incomeListings.stream().
|
|
||||||
map(securityRequestAdapter::toIncomeListing).toList();
|
|
||||||
List<CouponPeriodNewRequest> couponPeriodRequests = couponSchedules.stream().
|
|
||||||
map(securityRequestAdapter::toCouponPeriodRequest).toList();
|
|
||||||
List<FixedIncomeCashFlowNewRequest> cashFlowRequests = nominals.stream().
|
|
||||||
map(securityRequestAdapter::toFixedIncomeCashFlowRequest).toList();
|
|
||||||
|
|
||||||
SecurityGatewayRequest<?> securityGatewayRequest;
|
|
||||||
if (InstrumentType.BOND.equalsByKey(security.getInstrumentType())) {
|
|
||||||
FixedIncomeSecurityNewRequest fixedIncomeSecurityNewRequest = securityRequestAdapter.toFixedIncomeSecurityRequest(security);
|
|
||||||
securityGatewayRequest = new FixedIncomeGatewayRequest(fixedIncomeSecurityNewRequest);
|
|
||||||
} else {
|
|
||||||
EquitySecurityNewRequest equitySecurityNewRequest = securityRequestAdapter.toEquitySecurityNewRequest(security);
|
|
||||||
securityGatewayRequest = new EquitySecurityGatewayRequest(equitySecurityNewRequest);
|
|
||||||
}
|
|
||||||
securityGatewayRequest.setListing(listingRequests);
|
|
||||||
securityGatewayRequest.setCouponPeriods(couponPeriodRequests);
|
|
||||||
securityGatewayRequest.setFixedIncomesCashFlow(cashFlowRequests);
|
|
||||||
|
|
||||||
kafkaSender.sendRequestToQueue(Consts.DESTINATION_SECURITY_MULTIREQUEST, securityGatewayRequest);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private <T extends WithSecurityId> List<T> groupByCompanyId(List<T> listToProcess, UUID securityId) {
|
|
||||||
return listToProcess.stream().filter(t -> t.getSecurityId().equals(securityId)).collect(Collectors.toList());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,69 @@
|
||||||
|
package ru.spcex.clearing.gatewayapi.service;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import ru.spcex.clearing.gatewayapi.controller.request.WithSecurityId;
|
||||||
|
import ru.spcex.clearing.gatewayapi.controller.request.listing.fond.*;
|
||||||
|
import ru.spcex.clearing.gatewayapi.service.adapter.SecurityFondRequestAdapter;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||||
|
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.service.sender.KafkaSender;
|
||||||
|
import ru.spcex.platform.enumeration.InstrumentType;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class SecurityService {
|
||||||
|
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
|
|
||||||
|
private final SecurityFondRequestAdapter securityRequestAdapter;
|
||||||
|
private final KafkaSender kafkaSender;
|
||||||
|
|
||||||
|
public SecurityService(SecurityFondRequestAdapter securityRequestAdapter,
|
||||||
|
KafkaSender kafkaSender) {
|
||||||
|
this.securityRequestAdapter = securityRequestAdapter;
|
||||||
|
this.kafkaSender = kafkaSender;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendRequest(FondListingsRequest request) {
|
||||||
|
List<FondSecurity> securityList = request.getSecurities();
|
||||||
|
for (FondSecurity security : securityList) {
|
||||||
|
UUID securityId = security.getId();
|
||||||
|
log.debug("Grouping by securityId: {}", securityId);
|
||||||
|
List<IncomeListing> incomeListings = groupByCompanyId(request.getListingList(), securityId);
|
||||||
|
List<CouponSchedule> couponSchedules = groupByCompanyId(request.getCouponSchedules(), securityId);
|
||||||
|
List<Nominal> nominals = groupByCompanyId(request.getNominalList(), securityId);
|
||||||
|
|
||||||
|
List<ListingNewRequest> listingRequests = incomeListings.stream().
|
||||||
|
map(securityRequestAdapter::toIncomeListing).toList();
|
||||||
|
List<CouponPeriodNewRequest> couponPeriodRequests = couponSchedules.stream().
|
||||||
|
map(securityRequestAdapter::toCouponPeriodRequest).toList();
|
||||||
|
List<FixedIncomeCashFlowNewRequest> cashFlowRequests = nominals.stream().
|
||||||
|
map(securityRequestAdapter::toFixedIncomeCashFlowRequest).toList();
|
||||||
|
|
||||||
|
SecurityFondGatewayRequest<?> securityGatewayRequest;
|
||||||
|
if (InstrumentType.BOND.equalsByKey(security.getInstrumentType())) {
|
||||||
|
FixedIncomeSecurityNewRequest fixedIncomeSecurityNewRequest = securityRequestAdapter.toFixedIncomeSecurityRequest(security);
|
||||||
|
securityGatewayRequest = new FixedIncomeGatewayRequest(fixedIncomeSecurityNewRequest);
|
||||||
|
} else {
|
||||||
|
EquitySecurityNewRequest equitySecurityNewRequest = securityRequestAdapter.toEquitySecurityNewRequest(security);
|
||||||
|
securityGatewayRequest = new EquitySecurityGatewayRequest(equitySecurityNewRequest);
|
||||||
|
}
|
||||||
|
securityGatewayRequest.setListing(listingRequests);
|
||||||
|
securityGatewayRequest.setCouponPeriods(couponPeriodRequests);
|
||||||
|
securityGatewayRequest.setFixedIncomesCashFlow(cashFlowRequests);
|
||||||
|
|
||||||
|
kafkaSender.sendRequestToQueue(Consts.DESTINATION_SECURITY_MULTIREQUEST, securityGatewayRequest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private <T extends WithSecurityId> List<T> groupByCompanyId(List<T> listToProcess, UUID securityId) {
|
||||||
|
return listToProcess.stream().filter(t -> t.getSecurityId().equals(securityId)).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -8,7 +8,7 @@ import ru.spcex.clearing.gatewayapi.controller.request.listing.fond.Nominal;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.*;
|
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.*;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class SecurityRequestAdapter {
|
public class SecurityFondRequestAdapter {
|
||||||
|
|
||||||
public FixedIncomeSecurityNewRequest toFixedIncomeSecurityRequest(FondSecurity fondSecurity) {
|
public FixedIncomeSecurityNewRequest toFixedIncomeSecurityRequest(FondSecurity fondSecurity) {
|
||||||
FixedIncomeSecurityNewRequest fixedIncomeSecurityNewRequest = new FixedIncomeSecurityNewRequest();
|
FixedIncomeSecurityNewRequest fixedIncomeSecurityNewRequest = new FixedIncomeSecurityNewRequest();
|
||||||
|
|
@ -0,0 +1,52 @@
|
||||||
|
package ru.spcex.clearing.gatewayapi.service.adapter;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import ru.spcex.clearing.gatewayapi.controller.request.listing.fond.IssuerCompany;
|
||||||
|
import ru.spcex.clearing.gatewayapi.controller.request.listing.fond.IssuerCompanyInfo;
|
||||||
|
import ru.spcex.clearing.gatewayapi.controller.request.listing.fond.IssuerCompanySymbols;
|
||||||
|
import ru.spcex.clearing.gatewayapi.controller.request.listing.fond.IssuerContact;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyInfoUpdateRequest;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyNewRequest;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanySymbolNewRequest;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.company.ContactNewRequest;
|
||||||
|
import ru.spcex.platform.enumeration.CompanySymbol;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class SecurityMkrRequestAdapter {
|
||||||
|
|
||||||
|
public CompanyNewRequest toCompanyRequest(IssuerCompany issuerCompany) {
|
||||||
|
CompanyNewRequest companyNewRequest = new CompanyNewRequest();
|
||||||
|
companyNewRequest.setShortName(issuerCompany.getShortName());
|
||||||
|
companyNewRequest.setFullName(issuerCompany.getFullName());
|
||||||
|
companyNewRequest.setWorkflowStatus(issuerCompany.getWorkflowStatus());
|
||||||
|
companyNewRequest.setCompanySymbol(CompanySymbol.UUID.getKey());
|
||||||
|
companyNewRequest.setCompanySymbolValue(issuerCompany.getId().toString());
|
||||||
|
return companyNewRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CompanyInfoUpdateRequest toCompanyInfoRequest(IssuerCompanyInfo issuerCompanyInfo) {
|
||||||
|
CompanyInfoUpdateRequest companyInfoUpdateRequest = new CompanyInfoUpdateRequest();
|
||||||
|
companyInfoUpdateRequest.setCountryCode(issuerCompanyInfo.getCountryCode());
|
||||||
|
companyInfoUpdateRequest.setLegalKind(issuerCompanyInfo.getLegalKind());
|
||||||
|
companyInfoUpdateRequest.setOrganizationType(issuerCompanyInfo.getOrganizationType());
|
||||||
|
companyInfoUpdateRequest.setResidence(issuerCompanyInfo.getResidence());
|
||||||
|
companyInfoUpdateRequest.setShortNameEng(issuerCompanyInfo.getShortNameEng());
|
||||||
|
companyInfoUpdateRequest.setFullNameEng(issuerCompanyInfo.getFullNameEng());
|
||||||
|
return companyInfoUpdateRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CompanySymbolNewRequest toCompanySymbolRequest(IssuerCompanySymbols issuerCompanySymbols) {
|
||||||
|
CompanySymbolNewRequest companySymbolNewRequest = new CompanySymbolNewRequest();
|
||||||
|
companySymbolNewRequest.setCompanySymbol(issuerCompanySymbols.getCompanySymbol());
|
||||||
|
companySymbolNewRequest.setCompanySymbolValue(issuerCompanySymbols.getCompanySymbolValue());
|
||||||
|
return companySymbolNewRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ContactNewRequest toContactRequest(IssuerContact issuerContact) {
|
||||||
|
ContactNewRequest contactNewRequest = new ContactNewRequest();
|
||||||
|
contactNewRequest.setContactType(issuerContact.getContactType());
|
||||||
|
contactNewRequest.setContactValue(issuerContact.getContactValue());
|
||||||
|
return contactNewRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,176 +0,0 @@
|
||||||
package ru.spcex.clearing.gatewayapi.logic.listings_fond;
|
|
||||||
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
|
||||||
import org.mockito.Mockito;
|
|
||||||
import org.springframework.beans.factory.InitializingBean;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
|
||||||
import org.springframework.test.context.ContextConfiguration;
|
|
||||||
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
|
||||||
import ru.clearing.classes.statics.data.company.Company;
|
|
||||||
import ru.clearing.classes.statics.data.company.CompanySymbols;
|
|
||||||
import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity;
|
|
||||||
import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity;
|
|
||||||
import ru.spcex.clearing.gatewayapi.config.ProcessorConfiguration;
|
|
||||||
import ru.spcex.clearing.gatewayapi.config.TestConfiguration;
|
|
||||||
import ru.spcex.clearing.gatewayapi.logic.Processor;
|
|
||||||
import ru.spcex.clearing.gatewayapi.logic.Stage;
|
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyNewRequest;
|
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.EquitySecurityNewRequest;
|
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.FixedIncomeSecurityNewRequest;
|
|
||||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
|
||||||
import ru.spcex.clearing.test.config.ImdgTestConfig;
|
|
||||||
import ru.spcex.clearing.test.config.KafkaTestConfig;
|
|
||||||
import ru.spcex.platform.enumeration.CompanySymbol;
|
|
||||||
import ru.spcex.platform.enumeration.InstrumentType;
|
|
||||||
import ru.spcex.platform.enumeration.WorkflowStatus;
|
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
// Суть теста: прогоняем через pipeline запрос и в mockSender ловим переданные company и security сервисам запросы
|
|
||||||
@ExtendWith(SpringExtension.class)
|
|
||||||
@ContextConfiguration(classes = {
|
|
||||||
ProcessorConfiguration.class,
|
|
||||||
TestConfiguration.class,
|
|
||||||
ImdgTestConfig.class,
|
|
||||||
KafkaTestConfig.class})
|
|
||||||
class ListingFondRequestTest implements InitializingBean {
|
|
||||||
|
|
||||||
// В этот объект будут помещаться отправленные сообщения
|
|
||||||
final Map<String, List<Object>> sentMessages = new HashMap<>();
|
|
||||||
@Autowired
|
|
||||||
@Qualifier("testObjectMapper")
|
|
||||||
ObjectMapper objectMapper;
|
|
||||||
@Autowired
|
|
||||||
Processor<FondListingsRequestParam> processor;
|
|
||||||
@Autowired
|
|
||||||
ImdgProvider imdgProvider;
|
|
||||||
KafkaSender mockSender = Mockito.mock(KafkaSender.class);
|
|
||||||
Imdg<Company> companyImdg;
|
|
||||||
Imdg<CompanySymbols> companySymbolsImdg;
|
|
||||||
Imdg<FixedIncomeSecurity> fixedIncomeSecurityImdg;
|
|
||||||
Imdg<EquitySecurity> equitySecurityImdg;
|
|
||||||
|
|
||||||
// @Test
|
|
||||||
// public void test() throws IOException {
|
|
||||||
// File requestFile = new File(getClass().getClassLoader().getResource("requests/testFondSecuritiesRequest_1.json").getFile());
|
|
||||||
//
|
|
||||||
// FondListingsRequest fondListingsRequest = objectMapper.readValue(requestFile, FondListingsRequest.class);
|
|
||||||
// FondListingsRequestParam param = new FondListingsRequestParam(fondListingsRequest);
|
|
||||||
//
|
|
||||||
// ProcessResult result = processor.process(param);
|
|
||||||
//
|
|
||||||
// // Проверяем только количество запросов, поскольку выполнение этих запросов зависит от security и company модулей
|
|
||||||
// // todo upd: поскольку будет производиться переход к полностью асинхронному запросам, этот тест возможно стоит тоже поправить
|
|
||||||
// Assertions.assertNull(result.getError());
|
|
||||||
// Assertions.assertEquals(sentMessages.get(Consts.DESTINATION_COMPANY_NEW).size(), 1);
|
|
||||||
// Assertions.assertEquals(sentMessages.get(Consts.DESTINATION_COMPANY_INFO_UPDATE).size(), 2);
|
|
||||||
// Assertions.assertEquals(sentMessages.get(Consts.DESTINATION_COMPANY_UPDATE).size(), 1);
|
|
||||||
// Assertions.assertEquals(sentMessages.get(Consts.LISTING_NEW).size(), 4);
|
|
||||||
// Assertions.assertEquals(sentMessages.get(Consts.DESTINATION_COUPON_PERIOD_NEW).size(), 1);
|
|
||||||
// Assertions.assertEquals(sentMessages.get(Consts.DESTINATION_COMPANY_SYMBOL_NEW).size(), 2);
|
|
||||||
// Assertions.assertEquals(sentMessages.get(Consts.DESTINATION_COMPANY_SYMBOL_UPDATE).size(), 2);
|
|
||||||
// Assertions.assertEquals(sentMessages.get(Consts.DESTINATION_CONTACT_NEW).size(), 2);
|
|
||||||
// Assertions.assertEquals(sentMessages.get(Consts.DESTINATION_FIXED_INCOME_SECURITY_UPDATE).size(), 2);
|
|
||||||
// Assertions.assertEquals(sentMessages.get(Consts.DESTINATION_EQUITY_SECURITY_UPDATE).size(), 2);
|
|
||||||
// }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void afterPropertiesSet() throws Exception {
|
|
||||||
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
|
||||||
companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
|
|
||||||
fixedIncomeSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class);
|
|
||||||
equitySecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class);
|
|
||||||
|
|
||||||
Company existCompany1 = new Company();
|
|
||||||
CompanySymbols existCompany1Symbols = new CompanySymbols();
|
|
||||||
Long company1Id = companyImdg.insert(existCompany1);
|
|
||||||
existCompany1Symbols.setCompanySymbol(CompanySymbol.UUID.getKey());
|
|
||||||
existCompany1Symbols.setCompanySymbolValue("ef47f76c-bcea-11ed-afa1-0242ac120000");
|
|
||||||
existCompany1Symbols.setCompanyId(company1Id);
|
|
||||||
companySymbolsImdg.insert(existCompany1Symbols);
|
|
||||||
|
|
||||||
Company existCompany2 = new Company();
|
|
||||||
CompanySymbols existCompany2Symbols = new CompanySymbols();
|
|
||||||
Long company2Id = companyImdg.insert(existCompany2);
|
|
||||||
existCompany2Symbols.setCompanySymbol(CompanySymbol.UUID.getKey());
|
|
||||||
existCompany2Symbols.setCompanySymbolValue("ef47f76c-bcea-11ed-afa1-0242ac120001");
|
|
||||||
existCompany2Symbols.setCompanyId(company2Id);
|
|
||||||
companySymbolsImdg.insert(existCompany2Symbols);
|
|
||||||
|
|
||||||
FixedIncomeSecurity fixedIncomeSecurity_1 = new FixedIncomeSecurity();
|
|
||||||
fixedIncomeSecurity_1.setInstrumentType(InstrumentType.BOND.getKey());
|
|
||||||
fixedIncomeSecurity_1.setSecuritySymbol("VTB_001P-06 TEST 3");
|
|
||||||
fixedIncomeSecurity_1.setWorkflowStatus(WorkflowStatus.Active.getKey());
|
|
||||||
fixedIncomeSecurity_1.setShortName("Биржевые облигации ВТБ TEST 3");
|
|
||||||
fixedIncomeSecurityImdg.insert(fixedIncomeSecurity_1);
|
|
||||||
|
|
||||||
EquitySecurity equitySecurity_1 = new EquitySecurity();
|
|
||||||
equitySecurity_1.setInstrumentType(InstrumentType.EQTY.getKey());
|
|
||||||
equitySecurity_1.setSecuritySymbol("VTB_001P-06 TEST 4");
|
|
||||||
equitySecurity_1.setWorkflowStatus(WorkflowStatus.Active.getKey());
|
|
||||||
equitySecurity_1.setShortName("Биржевые облигации ВТБ TEST 4");
|
|
||||||
equitySecurityImdg.insert(equitySecurity_1);
|
|
||||||
|
|
||||||
// мок kafkaSender, чтобы он лишь сохранял в мапу переданные аргументы
|
|
||||||
Mockito
|
|
||||||
.when(mockSender.sendRequestToQueue(Mockito.any(), Mockito.any()))
|
|
||||||
.thenAnswer(
|
|
||||||
invocation -> {
|
|
||||||
String destination = invocation.getArgument(0);
|
|
||||||
Object invocationArgument = invocation.getArgument(1);
|
|
||||||
if (invocationArgument instanceof CompanyNewRequest newRequest) {
|
|
||||||
Company company = new Company();
|
|
||||||
company.setShortName(newRequest.getShortName());
|
|
||||||
company.setFullName(newRequest.getFullName());
|
|
||||||
company.setWorkflowStatus(newRequest.getWorkflowStatus());
|
|
||||||
companyImdg.insert(company);
|
|
||||||
}
|
|
||||||
if (invocationArgument instanceof FixedIncomeSecurityNewRequest newRequest) {
|
|
||||||
FixedIncomeSecurity fixedIncomeSecurity = new FixedIncomeSecurity();
|
|
||||||
fixedIncomeSecurity.setInstrumentType(newRequest.getInstrumentType());
|
|
||||||
fixedIncomeSecurity.setSecuritySymbol(newRequest.getSecuritySymbol());
|
|
||||||
fixedIncomeSecurity.setWorkflowStatus(newRequest.getWorkflowStatus());
|
|
||||||
fixedIncomeSecurity.setShortName(newRequest.getShortName());
|
|
||||||
fixedIncomeSecurityImdg.insert(fixedIncomeSecurity);
|
|
||||||
}
|
|
||||||
if (invocationArgument instanceof EquitySecurityNewRequest newRequest) {
|
|
||||||
EquitySecurity equitySecurity = new EquitySecurity();
|
|
||||||
equitySecurity.setInstrumentType(newRequest.getInstrumentType());
|
|
||||||
equitySecurity.setSecuritySymbol(newRequest.getSecuritySymbol());
|
|
||||||
equitySecurity.setWorkflowStatus(newRequest.getWorkflowStatus());
|
|
||||||
equitySecurity.setShortName(newRequest.getShortName());
|
|
||||||
equitySecurityImdg.insert(equitySecurity);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<Object> currentMessageList = sentMessages.computeIfAbsent(destination, k -> new ArrayList<>());
|
|
||||||
currentMessageList.add(invocationArgument);
|
|
||||||
|
|
||||||
return 0L;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
// в pipeline для processor заменяем стадии с отправкой сообщений
|
|
||||||
List<Stage<FondListingsRequestParam>> pipeline = processor.getPipeline();
|
|
||||||
for (Stage<FondListingsRequestParam> stage : pipeline) {
|
|
||||||
if (stage instanceof SendMessageToSecurityServiceWithFondSecurities) {
|
|
||||||
int index = pipeline.indexOf(stage);
|
|
||||||
Stage<FondListingsRequestParam> mockedStage = new SendMessageToSecurityServiceWithFondSecurities(mockSender, imdgProvider);
|
|
||||||
pipeline.set(index, mockedStage);
|
|
||||||
}
|
|
||||||
if (stage instanceof SendMessageToCompanyServiceWithIssuerCompanies) {
|
|
||||||
int index = pipeline.indexOf(stage);
|
|
||||||
Stage<FondListingsRequestParam> mockedStage = new SendMessageToCompanyServiceWithIssuerCompanies(mockSender, imdgProvider);
|
|
||||||
pipeline.set(index, mockedStage);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -43,7 +43,8 @@ public interface Consts {
|
||||||
String DESTINATION_PLANNER_UPDATE = "planner-update";
|
String DESTINATION_PLANNER_UPDATE = "planner-update";
|
||||||
String DESTINATION_PLANNER_DELETE = "planner-delete";
|
String DESTINATION_PLANNER_DELETE = "planner-delete";
|
||||||
|
|
||||||
String DESTINATION_COMPANY_MULTIREQUEST = "company-multirequest-new";
|
String DESTINATION_COMPANY_GATEWAY_REQUEST = "company-gateway-request";
|
||||||
|
String DESTINATION_ISSUER_COMPANY_GATEWAY_REQUEST = "company-issuer-company-gateway-request";
|
||||||
String DESTINATION_SECURITY_MULTIREQUEST = "company-multirequest-new";
|
String DESTINATION_SECURITY_MULTIREQUEST = "company-multirequest-new";
|
||||||
String DESTINATION_COMPANY_NEW = "company-new";
|
String DESTINATION_COMPANY_NEW = "company-new";
|
||||||
String DESTINATION_COMPANY_DELETE = "company-delete";
|
String DESTINATION_COMPANY_DELETE = "company-delete";
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ package ru.spcex.clearing.platform.messaging.domain.cud.company;
|
||||||
|
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.EquitySecurityNewRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.EquitySecurityNewRequest;
|
||||||
|
|
||||||
public class EquitySecurityGatewayRequest extends SecurityGatewayRequest<EquitySecurityNewRequest> {
|
public class EquitySecurityGatewayRequest extends SecurityFondGatewayRequest<EquitySecurityNewRequest> {
|
||||||
public EquitySecurityGatewayRequest(EquitySecurityNewRequest request) {
|
public EquitySecurityGatewayRequest(EquitySecurityNewRequest request) {
|
||||||
super(request);
|
super(request);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ package ru.spcex.clearing.platform.messaging.domain.cud.company;
|
||||||
|
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.FixedIncomeSecurityNewRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.FixedIncomeSecurityNewRequest;
|
||||||
|
|
||||||
public class FixedIncomeGatewayRequest extends SecurityGatewayRequest<FixedIncomeSecurityNewRequest> {
|
public class FixedIncomeGatewayRequest extends SecurityFondGatewayRequest<FixedIncomeSecurityNewRequest> {
|
||||||
public FixedIncomeGatewayRequest(FixedIncomeSecurityNewRequest request) {
|
public FixedIncomeGatewayRequest(FixedIncomeSecurityNewRequest request) {
|
||||||
super(request);
|
super(request);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ import ru.spcex.platform.classes.base.interfaces.WithSecuritySymbol;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public abstract class SecurityGatewayRequest<T extends WithSecuritySymbol & WithInstrumentType> {
|
public abstract class SecurityFondGatewayRequest<T extends WithSecuritySymbol & WithInstrumentType> {
|
||||||
@JsonProperty
|
@JsonProperty
|
||||||
private String uuid;
|
private String uuid;
|
||||||
|
|
||||||
|
|
@ -23,7 +23,7 @@ public abstract class SecurityGatewayRequest<T extends WithSecuritySymbol & With
|
||||||
@JsonProperty
|
@JsonProperty
|
||||||
private List<FixedIncomeCashFlowNewRequest> fixedIncomesCashFlow = new ArrayList<>();
|
private List<FixedIncomeCashFlowNewRequest> fixedIncomesCashFlow = new ArrayList<>();
|
||||||
|
|
||||||
public SecurityGatewayRequest(T security) {
|
public SecurityFondGatewayRequest(T security) {
|
||||||
this.security = security;
|
this.security = security;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
package ru.spcex.clearing.platform.messaging.domain.cud.company;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SecurityMkrGatewayRequest {
|
||||||
|
@JsonProperty
|
||||||
|
private String uuid;
|
||||||
|
@JsonProperty
|
||||||
|
private CompanyNewRequest companyNewRequest;
|
||||||
|
private CompanyInfoUpdateRequest companyInfoUpdateRequest;
|
||||||
|
@JsonProperty
|
||||||
|
private List<CompanySymbolNewRequest> companySymbolNewRequests = new ArrayList<>();
|
||||||
|
@JsonProperty
|
||||||
|
private List<ContactNewRequest> contactNewRequests = new ArrayList<>();
|
||||||
|
|
||||||
|
public String getUuid() {
|
||||||
|
return uuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUuid(String uuid) {
|
||||||
|
this.uuid = uuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CompanyNewRequest getCompanyNewRequest() {
|
||||||
|
return companyNewRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCompanyNewRequest(CompanyNewRequest companyNewRequest) {
|
||||||
|
this.companyNewRequest = companyNewRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CompanyInfoUpdateRequest getCompanyInfoUpdateRequest() {
|
||||||
|
return companyInfoUpdateRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCompanyInfoUpdateRequest(CompanyInfoUpdateRequest companyInfoUpdateRequest) {
|
||||||
|
this.companyInfoUpdateRequest = companyInfoUpdateRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<CompanySymbolNewRequest> getCompanySymbolNewRequests() {
|
||||||
|
return companySymbolNewRequests;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCompanySymbolNewRequests(List<CompanySymbolNewRequest> companySymbolNewRequests) {
|
||||||
|
this.companySymbolNewRequests = companySymbolNewRequests;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ContactNewRequest> getContactNewRequests() {
|
||||||
|
return contactNewRequests;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setContactNewRequests(List<ContactNewRequest> contactNewRequests) {
|
||||||
|
this.contactNewRequests = contactNewRequests;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue