rename and new stages for companies request

This commit is contained in:
akulikov 2023-05-27 10:33:18 +03:00
parent d0409a243e
commit 53fab62830
17 changed files with 222 additions and 175 deletions

View file

@ -3,7 +3,7 @@ package ru.spcex.clearing.gatewayapi.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import ru.spcex.clearing.gatewayapi.logic.Stage;
import ru.spcex.clearing.gatewayapi.logic.listings.*;
import ru.spcex.clearing.gatewayapi.logic.listings_fond.*;
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
import ru.spcex.platform.imdg.api.ImdgProvider;
@ -14,8 +14,8 @@ import java.util.List;
public class PipelineConfiguration {
@Bean
public List<Stage<ListingsRequestParam>> listingsRequestPipeline(ImdgProvider imdgProvider, KafkaSender kafkaSender) {
List<Stage<ListingsRequestParam>> pipeline = new ArrayList<>();
public List<Stage<FondListingsRequestParam>> listingsRequestPipeline(ImdgProvider imdgProvider, KafkaSender kafkaSender) {
List<Stage<FondListingsRequestParam>> pipeline = new ArrayList<>();
pipeline.add(new PrepareSecurities());
pipeline.add(new PrepareIssuerCompanies());
pipeline.add(new ValidateIncomeSecurities());

View file

@ -12,7 +12,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import ru.spcex.clearing.gatewayapi.request.CompaniesRequest;
import ru.spcex.clearing.gatewayapi.request.ListingsRequest;
import ru.spcex.clearing.gatewayapi.request.FondListingsRequest;
import ru.spcex.clearing.gatewayapi.response.CommonResponse;
@Controller
@ -26,13 +26,13 @@ public class GatewayController {
@ApiResponse(code = 400, message = "Ошибка валидации", response = CommonResponse.class)
})
@RequestMapping(
path = "/listings",
path = "/listing_fond",
method = RequestMethod.POST,
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE
)
@ResponseBody
public CommonResponse listings(@RequestBody ListingsRequest request) {
public CommonResponse listings(@RequestBody FondListingsRequest request) {
// todo pack it to abstract class
CommonResponse commonResponse = new CommonResponse();
commonResponse.setId(request.getId());

View file

@ -8,7 +8,7 @@ import java.util.List;
public class CompaniesRequestParam {
private final CompaniesRequest companiesRequest;
private final List<MemberCompany> memberCompanyList = new ArrayList<>();
private List<MemberCompany> memberCompanyList = new ArrayList<>();
public CompaniesRequestParam(CompaniesRequest companiesRequest) {
this.companiesRequest = companiesRequest;
@ -21,4 +21,8 @@ public class CompaniesRequestParam {
public List<MemberCompany> getMemberCompanyList() {
return memberCompanyList;
}
public void setMemberCompanyList(List<MemberCompany> memberCompanyList) {
this.memberCompanyList = memberCompanyList;
}
}

View file

@ -11,6 +11,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;
public class PrepareMemberCompanies extends Stage<CompaniesRequestParam> {
private final Logger log = LoggerFactory.getLogger(getClass());
@ -105,6 +106,14 @@ public class PrepareMemberCompanies extends Stage<CompaniesRequestParam> {
memberCompany.getClientList().add(client);
}
List<MemberCompany> filteredIssuerCompany = companyList.stream()
.filter(memberCompany -> !memberCompany.isInvalidData())
.collect(Collectors.toList());
// todo check list is empty
param.setMemberCompanyList(filteredIssuerCompany);
return null;
}

View file

@ -0,0 +1,34 @@
package ru.spcex.clearing.gatewayapi.logic.companies;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.spcex.clearing.gatewayapi.logic.ProcessResult;
import ru.spcex.clearing.gatewayapi.logic.Stage;
import ru.spcex.clearing.gatewayapi.request.objects.MemberCompany;
import java.util.List;
public class ValidateMemberCompanies extends Stage<CompaniesRequestParam> {
private final Logger log = LoggerFactory.getLogger(getClass());
@Override
public ProcessResult process(CompaniesRequestParam param) {
List<MemberCompany> memberCompanyList = param.getMemberCompanyList();
for (MemberCompany company : memberCompanyList) {
if (company.isInvalidData()) continue;
if (StringUtils.isEmpty(company.getShortName())) {
log.warn("Empty or null shortName for company (UUID = {}), skipped", company.getId());
company.setInvalidData(true);
continue;
}
// todo in progress...
}
return null;
}
}

View file

@ -1,43 +0,0 @@
package ru.spcex.clearing.gatewayapi.logic.listings;
import ru.spcex.clearing.gatewayapi.request.ListingsRequest;
import ru.spcex.clearing.gatewayapi.request.objects.IncomeSecurity;
import ru.spcex.clearing.gatewayapi.request.objects.IssuerCompany;
import java.util.ArrayList;
import java.util.List;
public class ListingsRequestParam {
private ListingsRequest listingsRequest;
private List<IncomeSecurity> securities = new ArrayList<>();
private List<IssuerCompany> issuerCompanyList = new ArrayList<>();
public ListingsRequestParam(ListingsRequest listingsRequest) {
this.listingsRequest = listingsRequest;
}
public ListingsRequest getListingsRequest() {
return listingsRequest;
}
public List<IncomeSecurity> getSecurities() {
return securities;
}
public List<IssuerCompany> getIssuerCompanyList() {
return issuerCompanyList;
}
public void setListingsRequest(ListingsRequest listingsRequest) {
this.listingsRequest = listingsRequest;
}
public void setSecurities(List<IncomeSecurity> securities) {
this.securities = securities;
}
public void setIssuerCompanyList(List<IssuerCompany> issuerCompanyList) {
this.issuerCompanyList = issuerCompanyList;
}
}

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.gatewayapi.logic.listings;
package ru.spcex.clearing.gatewayapi.logic.listings_fond;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -21,7 +21,7 @@ import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
public class CheckCompanyExist extends Stage<ListingsRequestParam> {
public class CheckCompanyExist extends Stage<FondListingsRequestParam> {
private final Logger log = LoggerFactory.getLogger(getClass());
private final Imdg<Company> companyImdg;
@ -35,7 +35,7 @@ public class CheckCompanyExist extends Stage<ListingsRequestParam> {
}
@Override
public ProcessResult process(ListingsRequestParam param) {
public ProcessResult process(FondListingsRequestParam param) {
List<IssuerCompany> companyList = param.getIssuerCompanyList();
for (IssuerCompany company : companyList) {

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.gatewayapi.logic.listings;
package ru.spcex.clearing.gatewayapi.logic.listings_fond;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -10,8 +10,8 @@ import ru.clearing.classes.statics.data.misc.Listing;
import ru.spcex.clearing.gatewayapi.logic.ProcessResult;
import ru.spcex.clearing.gatewayapi.logic.Stage;
import ru.spcex.clearing.gatewayapi.request.objects.CouponSchedule;
import ru.spcex.clearing.gatewayapi.request.objects.FondSecurity;
import ru.spcex.clearing.gatewayapi.request.objects.IncomeListing;
import ru.spcex.clearing.gatewayapi.request.objects.IncomeSecurity;
import ru.spcex.clearing.gatewayapi.request.objects.Nominal;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.platform.enumeration.InstrumentType;
@ -22,7 +22,7 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
public class CheckSecurityExist extends Stage<ListingsRequestParam> {
public class CheckSecurityExist extends Stage<FondListingsRequestParam> {
private final Logger log = LoggerFactory.getLogger(getClass());
private final Imdg<EquitySecurity> equitySecurityImdg;
@ -40,12 +40,12 @@ public class CheckSecurityExist extends Stage<ListingsRequestParam> {
}
@Override
public ProcessResult process(ListingsRequestParam param) {
List<IncomeSecurity> securities = param.getSecurities();
public ProcessResult process(FondListingsRequestParam param) {
List<FondSecurity> securities = param.getSecurities();
for (IncomeSecurity incomeSecurity : securities) {
String instrumentType = incomeSecurity.getInstrumentType();
String securitySymbol = incomeSecurity.getSecuritySymbol();
for (FondSecurity fondSecurity : securities) {
String instrumentType = fondSecurity.getInstrumentType();
String securitySymbol = fondSecurity.getSecuritySymbol();
if (InstrumentType.BOND.equalsByKey(instrumentType)) {
Collection<FixedIncomeSecurity> fixedIncomeSecurities = fixedIncomeSecurityImdg.getCollectionObjectsByFieldValues(
Map.of("securitySymbol", securitySymbol)
@ -57,10 +57,10 @@ public class CheckSecurityExist extends Stage<ListingsRequestParam> {
securitySymbol,
fixedIncomeSecurity.getId());
}
incomeSecurity.setAlreadyExist(true);
incomeSecurity.setMapId(fixedIncomeSecurity.getId());
fondSecurity.setAlreadyExist(true);
fondSecurity.setMapId(fixedIncomeSecurity.getId());
} else {
incomeSecurity.setAlreadyExist(false);
fondSecurity.setAlreadyExist(false);
}
} else if (InstrumentType.EQTY.equalsByKey(instrumentType)) {
Collection<EquitySecurity> equitySecurities = equitySecurityImdg.getCollectionObjectsByFieldValues(
@ -73,23 +73,23 @@ public class CheckSecurityExist extends Stage<ListingsRequestParam> {
securitySymbol,
equitySecurity.getId());
}
incomeSecurity.setAlreadyExist(true);
incomeSecurity.setMapId(equitySecurity.getId());
fondSecurity.setAlreadyExist(true);
fondSecurity.setMapId(equitySecurity.getId());
} else {
incomeSecurity.setAlreadyExist(false);
fondSecurity.setAlreadyExist(false);
}
}
for (IncomeListing listing : incomeSecurity.getListingList()) {
for (IncomeListing listing : fondSecurity.getListingList()) {
if (listing.isInvalidData()) continue;
if (!incomeSecurity.isAlreadyExist()) {
if (!fondSecurity.isAlreadyExist()) {
listing.setAlreadyExist(false);
continue;
}
Collection<Listing> listingsFromImdg = listingImdg.getCollectionObjectsByFieldValues(
Map.of(
"securityId", incomeSecurity.getMapId(),
"securityId", fondSecurity.getMapId(),
"market", listing.getCode()
)
);
@ -99,7 +99,7 @@ public class CheckSecurityExist extends Stage<ListingsRequestParam> {
Listing listingFromImdg = listingsFromImdg.iterator().next();
if (listingsFromImdg.size() > 1) {
log.warn("For security_id {} and market {} found > 1 listing, update first (id = {})",
incomeSecurity.getMapId(),
fondSecurity.getMapId(),
listing.getCode(),
listingFromImdg.getId());
@ -109,16 +109,16 @@ public class CheckSecurityExist extends Stage<ListingsRequestParam> {
}
}
for (CouponSchedule couponSchedules : incomeSecurity.getCouponScheduleList()) {
for (CouponSchedule couponSchedules : fondSecurity.getCouponScheduleList()) {
if (couponSchedules.isInvalidData()) continue;
if (!incomeSecurity.isAlreadyExist()) {
if (!fondSecurity.isAlreadyExist()) {
couponSchedules.setAlreadyExist(false);
continue;
}
Collection<CouponPeriod> couponPeriodListFromImdg = couponPeriodImdg.getCollectionObjectsByFieldValues(
Map.of(
"securityId", incomeSecurity.getMapId(),
"securityId", fondSecurity.getMapId(),
"periodStartDate", couponSchedules.getPeriodStartDate(),
"periodEndDate", couponSchedules.getPeriodEndDate()
)
@ -130,7 +130,7 @@ public class CheckSecurityExist extends Stage<ListingsRequestParam> {
if (couponPeriodListFromImdg.size() > 1) {
log.warn("For securityId {}, periodStartDate {}, periodEndDate {} found > 1 couponPeriod, " +
"update first (id = {})",
incomeSecurity.getMapId(),
fondSecurity.getMapId(),
couponSchedules.getPeriodStartDate(),
couponSchedules.getPeriodEndDate(),
couponPeriod.getId());
@ -140,13 +140,13 @@ public class CheckSecurityExist extends Stage<ListingsRequestParam> {
}
}
for (Nominal nominal : incomeSecurity.getNominalList()) {
for (Nominal nominal : fondSecurity.getNominalList()) {
if (nominal.isInvalidData()) continue;
if (incomeSecurity.isAlreadyExist()) {
if (fondSecurity.isAlreadyExist()) {
Collection<FixedIncomeCashFlow> fixedIncomeCashFlowListFromImdg = fixedIncomeCashFlowImdg.getCollectionObjectsByFieldValues(
Map.of(
"securityId", incomeSecurity.getMapId(),
"securityId", fondSecurity.getMapId(),
"valueDate", nominal.getDate()
)
);
@ -156,7 +156,7 @@ public class CheckSecurityExist extends Stage<ListingsRequestParam> {
FixedIncomeCashFlow fixedIncomeCashFlow = fixedIncomeCashFlowListFromImdg.iterator().next();
if (fixedIncomeCashFlowListFromImdg.size() > 1) {
log.warn("For securityId {}, valueDate {} found > 1 fixedIncomeCashFlow, update first (id = {})",
incomeSecurity.getMapId(),
fondSecurity.getMapId(),
nominal.getDate(),
fixedIncomeCashFlow.getId());
}
@ -167,7 +167,7 @@ public class CheckSecurityExist extends Stage<ListingsRequestParam> {
nominal.setAlreadyExist(false);
}
for (CouponSchedule couponSchedule : incomeSecurity.getCouponScheduleList()) {
for (CouponSchedule couponSchedule : fondSecurity.getCouponScheduleList()) {
if (couponSchedule.isInvalidData()) continue;
if (nominal.getDate().isBefore(couponSchedule.getPeriodStartDate()) || nominal.getDate().isAfter(couponSchedule.getPeriodEndDate()))
continue;
@ -175,7 +175,7 @@ public class CheckSecurityExist extends Stage<ListingsRequestParam> {
nominal.setCouponNumber(couponSchedule.getCouponNumber());
}
if (nominal.getAccruedCoupon() == null || nominal.getCouponNumber() == null) {
log.warn("Can't find accrued_coupon OR coupon_number for nominal, security.UUID {}", incomeSecurity.getId());
log.warn("Can't find accrued_coupon OR coupon_number for nominal, security.UUID {}", fondSecurity.getId());
nominal.setInvalidData(true);
}
}

View file

@ -0,0 +1,43 @@
package ru.spcex.clearing.gatewayapi.logic.listings_fond;
import ru.spcex.clearing.gatewayapi.request.FondListingsRequest;
import ru.spcex.clearing.gatewayapi.request.objects.FondSecurity;
import ru.spcex.clearing.gatewayapi.request.objects.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;
}
}

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.gatewayapi.logic.listings;
package ru.spcex.clearing.gatewayapi.logic.listings_fond;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -12,12 +12,12 @@ import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;
public class PrepareIssuerCompanies extends Stage<ListingsRequestParam> {
public class PrepareIssuerCompanies extends Stage<FondListingsRequestParam> {
private final Logger log = LoggerFactory.getLogger(getClass());
@Override
public ProcessResult process(ListingsRequestParam param) {
List<IssuerCompany> issuerCompanyList = param.getListingsRequest().getIssuerCompanyList();
public ProcessResult process(FondListingsRequestParam param) {
List<IssuerCompany> issuerCompanyList = param.getRequest().getIssuerCompanyList();
Map<UUID, IssuerCompany> issuerCompanyMap = new HashMap<>();
for (IssuerCompany issuerCompany : issuerCompanyList) {
@ -34,9 +34,9 @@ public class PrepareIssuerCompanies extends Stage<ListingsRequestParam> {
UUID issuerCompanyId = issuerCompany.getId();
boolean securityFoundForCompany = false;
for (IncomeSecurity incomeSecurity : param.getSecurities()) {
if (incomeSecurity.getIssuerId().equals(issuerCompanyId)) {
incomeSecurity.setIssuerCompany(issuerCompany);
for (FondSecurity fondSecurity : param.getSecurities()) {
if (fondSecurity.getIssuerId().equals(issuerCompanyId)) {
fondSecurity.setIssuerCompany(issuerCompany);
securityFoundForCompany = true;
break;
}
@ -46,7 +46,7 @@ public class PrepareIssuerCompanies extends Stage<ListingsRequestParam> {
}
}
List<IssuerCompanyInfo> issuerCompanyInfoList = param.getListingsRequest().getIssuerCompanyInfoList();
List<IssuerCompanyInfo> issuerCompanyInfoList = param.getRequest().getIssuerCompanyInfoList();
for (IssuerCompanyInfo issuerCompanyInfo : issuerCompanyInfoList) {
UUID issuerCompanyInfoUUID = issuerCompanyInfo.getCompanyId();
IssuerCompany issuerCompany = issuerCompanyMap.get(issuerCompanyInfoUUID);
@ -61,7 +61,7 @@ public class PrepareIssuerCompanies extends Stage<ListingsRequestParam> {
issuerCompany.setIssuerCompanyInfo(issuerCompanyInfo);
}
List<IssuerCompanySymbols> issuerCompanySymbolsList = param.getListingsRequest().getIssuerCompanySymbolsList();
List<IssuerCompanySymbols> issuerCompanySymbolsList = param.getRequest().getIssuerCompanySymbolsList();
for (IssuerCompanySymbols issuerCompanySymbols : issuerCompanySymbolsList) {
UUID issuerCompanySymbolsUUID = issuerCompanySymbols.getCompanyId();
IssuerCompany issuerCompany = issuerCompanyMap.get(issuerCompanySymbolsUUID);
@ -75,7 +75,7 @@ public class PrepareIssuerCompanies extends Stage<ListingsRequestParam> {
issuerCompany.getIssuerCompanySymbolsList().add(issuerCompanySymbols);
}
List<IssuerContact> issuerContactList = param.getListingsRequest().getIssuerContactList();
List<IssuerContact> issuerContactList = param.getRequest().getIssuerContactList();
for (IssuerContact issuerContact : issuerContactList) {
UUID issuerContactUUID = issuerContact.getCompanyId();
IssuerCompany issuerCompany = issuerCompanyMap.get(issuerContactUUID);

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.gatewayapi.logic.listings;
package ru.spcex.clearing.gatewayapi.logic.listings_fond;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -12,63 +12,63 @@ import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;
public class PrepareSecurities extends Stage<ListingsRequestParam> {
public class PrepareSecurities extends Stage<FondListingsRequestParam> {
private final Logger log = LoggerFactory.getLogger(getClass());
@Override
public ProcessResult process(ListingsRequestParam param) {
List<IncomeSecurity> securities = param.getListingsRequest().getSecurities();
public ProcessResult process(FondListingsRequestParam param) {
List<FondSecurity> securities = param.getRequest().getSecurities();
Map<UUID, IncomeSecurity> securityMap = new HashMap<>();
for (IncomeSecurity incomeSecurity : securities) {
if (securityMap.containsKey(incomeSecurity.getId())) {
log.warn("For security.UUID {} found > 1 element from request, use first", incomeSecurity.getId());
incomeSecurity.setInvalidData(true);
Map<UUID, FondSecurity> securityMap = new HashMap<>();
for (FondSecurity fondSecurity : securities) {
if (securityMap.containsKey(fondSecurity.getId())) {
log.warn("For security.UUID {} found > 1 element from request, use first", fondSecurity.getId());
fondSecurity.setInvalidData(true);
continue;
}
securityMap.put(incomeSecurity.getId(), incomeSecurity);
securityMap.put(fondSecurity.getId(), fondSecurity);
}
List<CouponSchedule> couponSchedules = param.getListingsRequest().getCouponSchedules();
List<CouponSchedule> couponSchedules = param.getRequest().getCouponSchedules();
for (CouponSchedule couponSchedule : couponSchedules) {
UUID couponScheduleUUID = couponSchedule.getSecurityId();
IncomeSecurity incomeSecurity = securityMap.get(couponScheduleUUID);
if (incomeSecurity == null) {
FondSecurity fondSecurity = securityMap.get(couponScheduleUUID);
if (fondSecurity == null) {
log.warn("For couponSchedule.securityId {} not found security, skipped", couponScheduleUUID);
continue;
}
incomeSecurity.getCouponScheduleList().add(couponSchedule);
fondSecurity.getCouponScheduleList().add(couponSchedule);
}
List<Currency> currencyList = param.getListingsRequest().getCurrencies();
List<Currency> currencyList = param.getRequest().getCurrencies();
for (Currency currency : currencyList) {
UUID currencyUUID = currency.getId();
// todo сделать после выяснения
}
List<IncomeListing> listingList = param.getListingsRequest().getListingList();
List<IncomeListing> listingList = param.getRequest().getListingList();
for (IncomeListing listing : listingList) {
UUID listingUUID = listing.getSecurityId();
IncomeSecurity incomeSecurity = securityMap.get(listingUUID);
if (incomeSecurity == null) {
FondSecurity fondSecurity = securityMap.get(listingUUID);
if (fondSecurity == null) {
log.warn("For listing.securityId {} not found security, skipped", listingUUID);
continue;
}
incomeSecurity.getListingList().add(listing);
fondSecurity.getListingList().add(listing);
}
List<Nominal> nominalList = param.getListingsRequest().getNominalList();
List<Nominal> nominalList = param.getRequest().getNominalList();
for (Nominal nominal : nominalList) {
UUID nominalUUID = nominal.getSecurityId();
IncomeSecurity incomeSecurity = securityMap.get(nominalUUID);
if (incomeSecurity == null) {
FondSecurity fondSecurity = securityMap.get(nominalUUID);
if (fondSecurity == null) {
log.warn("For nominal.securityId {} not found security, skipped", nominalUUID);
continue;
}
incomeSecurity.getNominalList().add(nominal);
fondSecurity.getNominalList().add(nominal);
}
List<IncomeSecurity> filteredIncomeSecurities = securities.stream()
List<FondSecurity> filteredIncomeSecurities = securities.stream()
.filter(incomeSecurity -> !incomeSecurity.isInvalidData())
.collect(Collectors.toList());

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.gatewayapi.logic.listings;
package ru.spcex.clearing.gatewayapi.logic.listings_fond;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -20,7 +20,7 @@ import ru.spcex.platform.imdg.api.ImdgProvider;
import java.util.List;
import java.util.Map;
public class SendMessageToCompanyService extends Stage<ListingsRequestParam> {
public class SendMessageToCompanyService extends Stage<FondListingsRequestParam> {
private final Logger log = LoggerFactory.getLogger(getClass());
private final KafkaSender kafkaSender;
@ -33,7 +33,7 @@ public class SendMessageToCompanyService extends Stage<ListingsRequestParam> {
}
@Override
public ProcessResult process(ListingsRequestParam param) {
public ProcessResult process(FondListingsRequestParam param) {
List<IssuerCompany> companyList = param.getIssuerCompanyList();
for (IssuerCompany company : companyList) {
if (company.isInvalidData()) continue;

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.gatewayapi.logic.listings;
package ru.spcex.clearing.gatewayapi.logic.listings_fond;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -7,8 +7,8 @@ import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity;
import ru.spcex.clearing.gatewayapi.logic.ProcessResult;
import ru.spcex.clearing.gatewayapi.logic.Stage;
import ru.spcex.clearing.gatewayapi.request.objects.CouponSchedule;
import ru.spcex.clearing.gatewayapi.request.objects.FondSecurity;
import ru.spcex.clearing.gatewayapi.request.objects.IncomeListing;
import ru.spcex.clearing.gatewayapi.request.objects.IncomeSecurity;
import ru.spcex.clearing.gatewayapi.request.objects.Nominal;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.Consts;
@ -21,7 +21,7 @@ import ru.spcex.platform.imdg.api.ImdgProvider;
import java.util.List;
import java.util.Map;
public class SendMessageToSecurityService extends Stage<ListingsRequestParam> {
public class SendMessageToSecurityService extends Stage<FondListingsRequestParam> {
private final Logger log = LoggerFactory.getLogger(getClass());
private final KafkaSender kafkaSender;
@ -36,9 +36,9 @@ public class SendMessageToSecurityService extends Stage<ListingsRequestParam> {
}
@Override
public ProcessResult process(ListingsRequestParam param) {
List<IncomeSecurity> securityList = param.getSecurities();
for (IncomeSecurity security : securityList) {
public ProcessResult process(FondListingsRequestParam param) {
List<FondSecurity> securityList = param.getSecurities();
for (FondSecurity security : securityList) {
if (security.isInvalidData()) continue;
if (security.getIssuerCompany() == null || security.getIssuerCompany().getMapId() == null) {
log.warn("Can't insert security.UUID {}, company not found for parameter issuerId", security.getId());

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.gatewayapi.logic.listings;
package ru.spcex.clearing.gatewayapi.logic.listings_fond;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
@ -6,8 +6,8 @@ import org.slf4j.LoggerFactory;
import ru.spcex.clearing.gatewayapi.logic.ProcessResult;
import ru.spcex.clearing.gatewayapi.logic.Stage;
import ru.spcex.clearing.gatewayapi.request.objects.CouponSchedule;
import ru.spcex.clearing.gatewayapi.request.objects.FondSecurity;
import ru.spcex.clearing.gatewayapi.request.objects.IncomeListing;
import ru.spcex.clearing.gatewayapi.request.objects.IncomeSecurity;
import ru.spcex.clearing.gatewayapi.request.objects.Nominal;
import ru.spcex.platform.enumeration.BondType;
import ru.spcex.platform.enumeration.InstrumentType;
@ -18,102 +18,102 @@ import ru.spcex.platform.utils.enumeration.IEnumKey;
import java.util.List;
import java.util.stream.Collectors;
public class ValidateIncomeSecurities extends Stage<ListingsRequestParam> {
public class ValidateIncomeSecurities extends Stage<FondListingsRequestParam> {
private final Logger log = LoggerFactory.getLogger(getClass());
@Override
public ProcessResult process(ListingsRequestParam param) {
List<IncomeSecurity> securities = param.getSecurities();
public ProcessResult process(FondListingsRequestParam param) {
List<FondSecurity> securities = param.getSecurities();
for (IncomeSecurity incomeSecurity : securities) {
if (incomeSecurity.isInvalidData()) continue;
for (FondSecurity fondSecurity : securities) {
if (fondSecurity.isInvalidData()) continue;
if (incomeSecurity.getIssuerCompany() == null) {
log.warn("For security.UUID {} not found company, skipped", incomeSecurity.getId());
incomeSecurity.setInvalidData(true);
if (fondSecurity.getIssuerCompany() == null) {
log.warn("For security.UUID {} not found company, skipped", fondSecurity.getId());
fondSecurity.setInvalidData(true);
continue;
}
String instrumentTypeStr = incomeSecurity.getInstrumentType();
String instrumentTypeStr = fondSecurity.getInstrumentType();
InstrumentType instrumentType = IEnumKey.getEnumByKey(InstrumentType.class, instrumentTypeStr);
if (instrumentType != InstrumentType.BOND && instrumentType != InstrumentType.EQTY) {
log.warn("Invalid instrumentType {} for security.UUID {}, skipped", instrumentTypeStr, incomeSecurity.getId());
incomeSecurity.setInvalidData(true);
log.warn("Invalid instrumentType {} for security.UUID {}, skipped", instrumentTypeStr, fondSecurity.getId());
fondSecurity.setInvalidData(true);
continue;
}
String workflowStatusStr = incomeSecurity.getWorkflowStatus();
String workflowStatusStr = fondSecurity.getWorkflowStatus();
WorkflowStatus workflowStatus = IEnumKey.getEnumByKey(WorkflowStatus.class, workflowStatusStr);
if (workflowStatus == null) {
log.warn("Invalid workflowStatus {} for security.UUID {}, skipped", workflowStatusStr, incomeSecurity.getId());
incomeSecurity.setInvalidData(true);
log.warn("Invalid workflowStatus {} for security.UUID {}, skipped", workflowStatusStr, fondSecurity.getId());
fondSecurity.setInvalidData(true);
continue;
}
String shareTypeStr = incomeSecurity.getShareType();
String shareTypeStr = fondSecurity.getShareType();
ShareType shareType = IEnumKey.getEnumByKey(ShareType.class, shareTypeStr);
if (instrumentType == InstrumentType.EQTY && shareType == null) {
log.warn("Invalid shareType {} for security.UUID {}, skipped", shareTypeStr, incomeSecurity.getId());
incomeSecurity.setInvalidData(true);
log.warn("Invalid shareType {} for security.UUID {}, skipped", shareTypeStr, fondSecurity.getId());
fondSecurity.setInvalidData(true);
continue;
}
String bondTypeStr = incomeSecurity.getBondType();
String bondTypeStr = fondSecurity.getBondType();
BondType bondType = IEnumKey.getEnumByKey(BondType.class, bondTypeStr);
if (bondType == null) {
log.warn("Invalid bondType {} for security.UUID {}, skipped", bondTypeStr, incomeSecurity.getId());
incomeSecurity.setInvalidData(true);
log.warn("Invalid bondType {} for security.UUID {}, skipped", bondTypeStr, fondSecurity.getId());
fondSecurity.setInvalidData(true);
continue;
}
if (StringUtils.isEmpty(incomeSecurity.getSecuritySymbol())) {
log.warn("Empty or null securitySymbol for security.UUID {}, skipped", incomeSecurity.getId());
incomeSecurity.setInvalidData(true);
if (StringUtils.isEmpty(fondSecurity.getSecuritySymbol())) {
log.warn("Empty or null securitySymbol for security.UUID {}, skipped", fondSecurity.getId());
fondSecurity.setInvalidData(true);
continue;
}
if (StringUtils.isEmpty(incomeSecurity.getShortName())) {
log.warn("Empty or null shortName for security.UUID {}, skipped", incomeSecurity.getShortName());
incomeSecurity.setInvalidData(true);
if (StringUtils.isEmpty(fondSecurity.getShortName())) {
log.warn("Empty or null shortName for security.UUID {}, skipped", fondSecurity.getShortName());
fondSecurity.setInvalidData(true);
continue;
}
List<IncomeListing> listingList = incomeSecurity.getListingList();
List<IncomeListing> listingList = fondSecurity.getListingList();
for (IncomeListing listing : listingList) {
if (StringUtils.isEmpty(listing.getCode())) {
log.warn("Empty or null code (market) for listing from security.UUID {}", incomeSecurity.getId());
log.warn("Empty or null code (market) for listing from security.UUID {}", fondSecurity.getId());
listing.setInvalidData(true);
}
if (listing.getLotSize() == null) {
log.warn("lotSize is null for listing from security.UUID {}", incomeSecurity.getId());
log.warn("lotSize is null for listing from security.UUID {}", fondSecurity.getId());
listing.setInvalidData(true);
}
if (StringUtils.isEmpty(listing.getTradingCurrency())) {
log.warn("Empty or null tradingCurrency for listing from security.UUID {}", incomeSecurity.getId());
log.warn("Empty or null tradingCurrency for listing from security.UUID {}", fondSecurity.getId());
listing.setInvalidData(true);
}
workflowStatusStr = listing.getWorkflowStatus();
workflowStatus = IEnumKey.getEnumByKey(WorkflowStatus.class, workflowStatusStr);
if (workflowStatus == null) {
log.warn("Invalid workflowStatus {} for listing from security.UUID {}", workflowStatusStr, incomeSecurity.getId());
log.warn("Invalid workflowStatus {} for listing from security.UUID {}", workflowStatusStr, fondSecurity.getId());
listing.setInvalidData(true);
}
}
incomeSecurity.setListingList(
fondSecurity.setListingList(
listingList.stream()
.filter(incomeListing -> !incomeListing.isInvalidData())
.collect(Collectors.toList())
);
for (CouponSchedule couponSchedule : incomeSecurity.getCouponScheduleList()) {
for (CouponSchedule couponSchedule : fondSecurity.getCouponScheduleList()) {
if (
couponSchedule.getPeriodStartDate() == null ||
couponSchedule.getPeriodEndDate() == null ||
@ -122,41 +122,41 @@ public class ValidateIncomeSecurities extends Stage<ListingsRequestParam> {
log.warn("Invalid periodStartDate {} or periodEndDate {} for couponSchedule, security.UUID {}, skipped",
couponSchedule.getPeriodStartDate(),
couponSchedule.getPeriodEndDate(),
incomeSecurity.getId());
fondSecurity.getId());
couponSchedule.setInvalidData(true);
}
if (couponSchedule.getCouponNumber() == null) {
log.warn("couponNumber is null for couponSchedule, security.UUID {}, skipped", incomeSecurity.getId());
log.warn("couponNumber is null for couponSchedule, security.UUID {}, skipped", fondSecurity.getId());
couponSchedule.setInvalidData(true);
}
if (couponSchedule.getCouponRate() == null) {
log.warn("couponRate is null for couponSchedule, security.UUID {}, skipped", incomeSecurity.getId());
log.warn("couponRate is null for couponSchedule, security.UUID {}, skipped", fondSecurity.getId());
couponSchedule.setInvalidData(true);
}
if (couponSchedule.getAccruedCoupon() == null) {
log.warn("accruedCoupon is null for couponSchedule, security.UUID {}, skipped", incomeSecurity.getId());
log.warn("accruedCoupon is null for couponSchedule, security.UUID {}, skipped", fondSecurity.getId());
couponSchedule.setInvalidData(true);
}
}
for (Nominal nominal : incomeSecurity.getNominalList()) {
for (Nominal nominal : fondSecurity.getNominalList()) {
if (nominal.getNominal() == null) {
log.warn("nominal (value) is null for nominal, security.UUID {}, skipped", incomeSecurity.getId());
log.warn("nominal (value) is null for nominal, security.UUID {}, skipped", fondSecurity.getId());
nominal.setInvalidData(true);
}
if (nominal.getDate() == null) {
log.warn("date is null for nominal, security.UUID {}, skipped", incomeSecurity.getId());
log.warn("date is null for nominal, security.UUID {}, skipped", fondSecurity.getId());
nominal.setInvalidData(true);
}
}
}
List<IncomeSecurity> filteredIncomeSecurities = securities.stream()
List<FondSecurity> filteredIncomeSecurities = securities.stream()
.filter(incomeSecurity -> !incomeSecurity.isInvalidData())
.collect(Collectors.toList());

View file

@ -1,4 +1,4 @@
package ru.spcex.clearing.gatewayapi.logic.listings;
package ru.spcex.clearing.gatewayapi.logic.listings_fond;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
@ -16,7 +16,7 @@ import ru.spcex.platform.utils.enumeration.IEnumKey;
import java.util.Arrays;
import java.util.List;
public class ValidateIssuerCompanies extends Stage<ListingsRequestParam> {
public class ValidateIssuerCompanies extends Stage<FondListingsRequestParam> {
private final Logger log = LoggerFactory.getLogger(getClass());
private final List<CompanySymbol> validCompanySymbols = Arrays.asList(
@ -39,7 +39,7 @@ public class ValidateIssuerCompanies extends Stage<ListingsRequestParam> {
);
@Override
public ProcessResult process(ListingsRequestParam param) {
public ProcessResult process(FondListingsRequestParam param) {
List<IssuerCompany> companyList = param.getIssuerCompanyList();
for (IssuerCompany issuerCompany : companyList) {

View file

@ -6,10 +6,10 @@ import ru.spcex.clearing.gatewayapi.request.objects.*;
import java.util.List;
public class ListingsRequest extends BaseRequest {
public class FondListingsRequest extends BaseRequest {
@JsonProperty("security")
@ApiModelProperty(value = "Список security")
private List<IncomeSecurity> securities;
private List<FondSecurity> securities;
@JsonProperty("coupon_schedule")
@ApiModelProperty(value = "Список coupon_schedule")
@ -43,11 +43,11 @@ public class ListingsRequest extends BaseRequest {
@ApiModelProperty(value = "Список контактов компаний эмитентов")
private List<IssuerContact> issuerContactList;
public List<IncomeSecurity> getSecurities() {
public List<FondSecurity> getSecurities() {
return securities;
}
public void setSecurities(List<IncomeSecurity> securities) {
public void setSecurities(List<FondSecurity> securities) {
this.securities = securities;
}

View file

@ -12,7 +12,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class IncomeSecurity extends WithMapId {
public class FondSecurity extends WithMapId {
@JsonProperty("id")
@ApiModelProperty(
value = "id (uuid)",