some refactroing gateway

This commit is contained in:
etreschenkov 2023-06-16 16:21:52 +03:00
parent 9e095a1825
commit 2d2a89264d
14 changed files with 275 additions and 83 deletions

View file

@ -0,0 +1,7 @@
package ru.spcex.clearing.gatewayapi.controller.request;
import java.util.UUID;
public interface WithSecurityId {
UUID getSecurityId();
}

View file

@ -1,12 +1,9 @@
package ru.spcex.clearing.gatewayapi.controller.request.company;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;
import ru.spcex.clearing.gatewayapi.controller.request.WithMapId;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
@ -62,32 +59,6 @@ public class Company extends WithMapId {
)
private String initiatorCode;
@ApiModelProperty(hidden = true)
@JsonIgnore
private CompanyInfo companyInfo;
@ApiModelProperty(hidden = true)
@JsonIgnore
private List<CompanyClearingCategory> companyClearingCategoryList = new ArrayList<>();
@ApiModelProperty(hidden = true)
@JsonIgnore
private List<CompanySymbols> memberCompanySymbolsList = new ArrayList<>();
@ApiModelProperty(hidden = true)
@JsonIgnore
private List<Contact> contactList = new ArrayList<>();
@ApiModelProperty(hidden = true)
@JsonIgnore
private List<ProfileDocument> memberProfileDocumentList = new ArrayList<>();
@ApiModelProperty(hidden = true)
@JsonIgnore
private List<Client> memberClientList = new ArrayList<>();
public UUID getId() {
return id;
}
@ -144,51 +115,4 @@ public class Company extends WithMapId {
this.initiatorCode = initiatorCode;
}
public CompanyInfo getCompanyInfo() {
return companyInfo;
}
public void setCompanyInfo(CompanyInfo companyInfo) {
this.companyInfo = companyInfo;
}
public List<CompanyClearingCategory> getCompanyClearingCategoryList() {
return companyClearingCategoryList;
}
public void setCompanyClearingCategoryList(List<CompanyClearingCategory> companyClearingCategoryList) {
this.companyClearingCategoryList = companyClearingCategoryList;
}
public List<CompanySymbols> getMemberCompanySymbolsList() {
return memberCompanySymbolsList;
}
public void setMemberCompanySymbolsList(List<CompanySymbols> memberCompanySymbolsList) {
this.memberCompanySymbolsList = memberCompanySymbolsList;
}
public List<Contact> getContactList() {
return contactList;
}
public void setContactList(List<Contact> contactList) {
this.contactList = contactList;
}
public List<ProfileDocument> getProfileDocumentList() {
return memberProfileDocumentList;
}
public void setProfileDocumentList(List<ProfileDocument> memberProfileDocumentList) {
this.memberProfileDocumentList = memberProfileDocumentList;
}
public List<Client> getClientList() {
return memberClientList;
}
public void setClientList(List<Client> memberClientList) {
this.memberClientList = memberClientList;
}
}

View file

@ -5,12 +5,13 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import io.swagger.annotations.ApiModelProperty;
import ru.spcex.clearing.gatewayapi.config.deserializers.LocalDateDeserializer;
import ru.spcex.clearing.gatewayapi.controller.request.WithMapId;
import ru.spcex.clearing.gatewayapi.controller.request.WithSecurityId;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.UUID;
public class CouponSchedule extends WithMapId {
public class CouponSchedule extends WithMapId implements WithSecurityId {
@JsonProperty("security_id")
@ApiModelProperty(
value = "Ссылка на security",
@ -73,6 +74,7 @@ public class CouponSchedule extends WithMapId {
private Boolean isDeleted;
@Override
public UUID getSecurityId() {
return securityId;
}

View file

@ -5,12 +5,13 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import io.swagger.annotations.ApiModelProperty;
import ru.spcex.clearing.gatewayapi.config.deserializers.LocalDateDeserializer;
import ru.spcex.clearing.gatewayapi.controller.request.WithMapId;
import ru.spcex.clearing.gatewayapi.controller.request.WithSecurityId;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.UUID;
public class IncomeListing extends WithMapId {
public class IncomeListing extends WithMapId implements WithSecurityId {
@JsonProperty("security_id")
@ApiModelProperty(
value = "Ссылка на security",
@ -121,6 +122,7 @@ public class IncomeListing extends WithMapId {
)
private LocalDate endDate;
@Override
public UUID getSecurityId() {
return securityId;
}

View file

@ -3,12 +3,13 @@ package ru.spcex.clearing.gatewayapi.controller.request.listing.fond;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import ru.spcex.clearing.gatewayapi.controller.request.WithCompanyId;
import java.util.UUID;
@ApiModel("Профиль компании эмитента")
public class IssuerCompanyInfo {
public class IssuerCompanyInfo implements WithCompanyId {
@JsonProperty("company_id")
@ApiModelProperty(
value = "Ссылка на company",
@ -55,7 +56,7 @@ public class IssuerCompanyInfo {
)
private String fullNameEng;
@Override
public UUID getCompanyId() {
return companyId;
}

View file

@ -3,12 +3,13 @@ package ru.spcex.clearing.gatewayapi.controller.request.listing.fond;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import ru.spcex.clearing.gatewayapi.controller.request.WithCompanyId;
import ru.spcex.clearing.gatewayapi.controller.request.WithMapId;
import java.util.UUID;
@ApiModel("Реквизиты компании эмитента")
public class IssuerCompanySymbols extends WithMapId {
public class IssuerCompanySymbols extends WithMapId implements WithCompanyId {
@JsonProperty("company_id")
@ApiModelProperty(
value = "Ссылка на company",
@ -49,6 +50,7 @@ public class IssuerCompanySymbols extends WithMapId {
private String companySymbolValue;
@Override
public UUID getCompanyId() {
return companyId;
}

View file

@ -3,12 +3,13 @@ package ru.spcex.clearing.gatewayapi.controller.request.listing.fond;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import ru.spcex.clearing.gatewayapi.controller.request.WithCompanyId;
import ru.spcex.clearing.gatewayapi.controller.request.WithMapId;
import java.util.UUID;
@ApiModel("Контакты компании эмитента")
public class IssuerContact extends WithMapId {
public class IssuerContact extends WithMapId implements WithCompanyId {
@JsonProperty("company_id")
@ApiModelProperty(
value = "Ссылка на company",
@ -53,6 +54,7 @@ public class IssuerContact extends WithMapId {
private String contactValue;
@Override
public UUID getCompanyId() {
return companyId;
}

View file

@ -6,12 +6,13 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import io.swagger.annotations.ApiModelProperty;
import ru.spcex.clearing.gatewayapi.config.deserializers.LocalDateDeserializer;
import ru.spcex.clearing.gatewayapi.controller.request.WithMapId;
import ru.spcex.clearing.gatewayapi.controller.request.WithSecurityId;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.UUID;
public class Nominal extends WithMapId {
public class Nominal extends WithMapId implements WithSecurityId {
@JsonProperty("security_id")
@ApiModelProperty(
value = "Ссылка на security",
@ -51,6 +52,7 @@ public class Nominal extends WithMapId {
private BigDecimal accruedCoupon;
@Override
public UUID getSecurityId() {
return securityId;
}

View file

@ -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.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
public class ListingFondProcessor {
private final Logger log = LoggerFactory.getLogger(getClass());
private final SecurityRequestAdapter securityRequestAdapter;
private final KafkaSender kafkaSender;
public ListingFondProcessor(SecurityRequestAdapter securityRequestAdapter,
KafkaSender kafkaSender) {
this.securityRequestAdapter = securityRequestAdapter;
this.kafkaSender = kafkaSender;
}
public void process(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();
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());
}
}

View file

@ -0,0 +1,70 @@
package ru.spcex.clearing.gatewayapi.service.adapter;
import org.springframework.stereotype.Service;
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.platform.messaging.domain.cud.securitites.*;
@Service
public class SecurityRequestAdapter {
public FixedIncomeSecurityNewRequest toFixedIncomeSecurityRequest(FondSecurity fondSecurity) {
FixedIncomeSecurityNewRequest fixedIncomeSecurityNewRequest = new FixedIncomeSecurityNewRequest();
fixedIncomeSecurityNewRequest.setSecuritySymbol(fondSecurity.getSecuritySymbol());
fixedIncomeSecurityNewRequest.setShortName(fondSecurity.getShortName());
fixedIncomeSecurityNewRequest.setFullName(fondSecurity.getFullName());
fixedIncomeSecurityNewRequest.setIsin(fondSecurity.getIsin());
fixedIncomeSecurityNewRequest.setBondType(fondSecurity.getBondType());
fixedIncomeSecurityNewRequest.setNominalValue(fondSecurity.getNominalValue());
fixedIncomeSecurityNewRequest.setNominalCurrency(fondSecurity.getNominalCurrency());
fixedIncomeSecurityNewRequest.setMaturityDate(fondSecurity.getMaturityDate());
fixedIncomeSecurityNewRequest.setCouponFrequency(fondSecurity.getCouponFrequency().longValue());
fixedIncomeSecurityNewRequest.setShortNameEng(fondSecurity.getShortNameEng());
fixedIncomeSecurityNewRequest.setFullNameEng(fondSecurity.getFullNameEng());
fixedIncomeSecurityNewRequest.setWorkflowStatus(fondSecurity.getWorkflowStatus());
fixedIncomeSecurityNewRequest.setInstrumentType(fondSecurity.getInstrumentType());
return fixedIncomeSecurityNewRequest;
}
public EquitySecurityNewRequest toEquitySecurityNewRequest(FondSecurity fondSecurity) {
EquitySecurityNewRequest equitySecurityNewRequest = new EquitySecurityNewRequest();
equitySecurityNewRequest.setSecuritySymbol(fondSecurity.getSecuritySymbol());
equitySecurityNewRequest.setShortName(fondSecurity.getShortName());
equitySecurityNewRequest.setFullName(fondSecurity.getFullName());
equitySecurityNewRequest.setIsin(fondSecurity.getIsin());
equitySecurityNewRequest.setShareType(fondSecurity.getShareType());
equitySecurityNewRequest.setShortNameEng(fondSecurity.getShortNameEng());
equitySecurityNewRequest.setFullNameEng(fondSecurity.getFullNameEng());
equitySecurityNewRequest.setWorkflowStatus(fondSecurity.getWorkflowStatus());
equitySecurityNewRequest.setInstrumentType(fondSecurity.getInstrumentType());
return equitySecurityNewRequest;
}
public ListingNewRequest toIncomeListing(IncomeListing incomeListing) {
ListingNewRequest listingNewRequest = new ListingNewRequest();
listingNewRequest.setMarket(incomeListing.getCode());
listingNewRequest.setLotSize(incomeListing.getLotSize());
listingNewRequest.setTradingCurrency(incomeListing.getTradingCurrency());
listingNewRequest.setWorkflowStatus(incomeListing.getWorkflowStatus());
return listingNewRequest;
}
public CouponPeriodNewRequest toCouponPeriodRequest(CouponSchedule couponSchedule) {
CouponPeriodNewRequest couponPeriodNewRequest = new CouponPeriodNewRequest();
couponPeriodNewRequest.setCouponRate(couponSchedule.getCouponRate());
couponPeriodNewRequest.setNumber(couponSchedule.getCouponNumber());
couponPeriodNewRequest.setPeriodEndDate(couponSchedule.getPeriodEndDate());
couponPeriodNewRequest.setPeriodStartDate(couponSchedule.getPeriodStartDate());
return couponPeriodNewRequest;
}
public FixedIncomeCashFlowNewRequest toFixedIncomeCashFlowRequest(Nominal nominal) {
FixedIncomeCashFlowNewRequest fixedIncomeCashFlowNewRequest = new FixedIncomeCashFlowNewRequest();
fixedIncomeCashFlowNewRequest.setAccruedCoupon(nominal.getAccruedCoupon());
fixedIncomeCashFlowNewRequest.setNominalValue(nominal.getNominal());
fixedIncomeCashFlowNewRequest.setNumber(nominal.getCouponNumber());
return fixedIncomeCashFlowNewRequest;
}
}

View file

@ -44,6 +44,7 @@ public interface Consts {
String DESTINATION_PLANNER_DELETE = "planner-delete";
String DESTINATION_COMPANY_MULTIREQUEST = "company-multirequest-new";
String DESTINATION_SECURITY_MULTIREQUEST = "company-multirequest-new";
String DESTINATION_COMPANY_NEW = "company-new";
String DESTINATION_COMPANY_DELETE = "company-delete";
String DESTINATION_COMPANY_UPDATE = "company-update";

View file

@ -0,0 +1,19 @@
package ru.spcex.clearing.platform.messaging.domain.cud.company;
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.EquitySecurityNewRequest;
public class EquitySecurityGatewayRequest extends SecurityGatewayRequest<EquitySecurityNewRequest> {
public EquitySecurityGatewayRequest(EquitySecurityNewRequest request) {
super(request);
}
@Override
public EquitySecurityNewRequest getSecurity() {
return super.getSecurity();
}
@Override
public void setSecurity(EquitySecurityNewRequest security) {
super.setSecurity(security);
}
}

View file

@ -0,0 +1,19 @@
package ru.spcex.clearing.platform.messaging.domain.cud.company;
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.FixedIncomeSecurityNewRequest;
public class FixedIncomeGatewayRequest extends SecurityGatewayRequest<FixedIncomeSecurityNewRequest> {
public FixedIncomeGatewayRequest(FixedIncomeSecurityNewRequest request) {
super(request);
}
@Override
public FixedIncomeSecurityNewRequest getSecurity() {
return super.getSecurity();
}
@Override
public void setSecurity(FixedIncomeSecurityNewRequest security) {
super.setSecurity(security);
}
}

View file

@ -0,0 +1,72 @@
package ru.spcex.clearing.platform.messaging.domain.cud.company;
import com.fasterxml.jackson.annotation.JsonProperty;
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.CouponPeriodNewRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.FixedIncomeCashFlowNewRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.ListingNewRequest;
import ru.spcex.platform.classes.base.interfaces.WithInstrumentType;
import ru.spcex.platform.classes.base.interfaces.WithSecuritySymbol;
import java.util.ArrayList;
import java.util.List;
public abstract class SecurityGatewayRequest<T extends WithSecuritySymbol & WithInstrumentType> {
@JsonProperty
private String uuid;
@JsonProperty
protected T security;
@JsonProperty
private List<ListingNewRequest> listing = new ArrayList<>();
@JsonProperty
private List<CouponPeriodNewRequest> couponPeriods = new ArrayList<>();
@JsonProperty
private List<FixedIncomeCashFlowNewRequest> fixedIncomesCashFlow = new ArrayList<>();
public SecurityGatewayRequest(T security) {
this.security = security;
}
@JsonProperty
private String securityType;
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
public T getSecurity() {
return security;
}
public void setSecurity(T security) {
this.security = security;
}
public List<ListingNewRequest> getListing() {
return listing;
}
public void setListing(List<ListingNewRequest> listing) {
this.listing = listing;
}
public List<CouponPeriodNewRequest> getCouponPeriods() {
return couponPeriods;
}
public void setCouponPeriods(List<CouponPeriodNewRequest> couponPeriods) {
this.couponPeriods = couponPeriods;
}
public List<FixedIncomeCashFlowNewRequest> getFixedIncomesCashFlow() {
return fixedIncomesCashFlow;
}
public void setFixedIncomesCashFlow(List<FixedIncomeCashFlowNewRequest> fixedIncomesCashFlow) {
this.fixedIncomesCashFlow = fixedIncomesCashFlow;
}
}