fix logs for stages

This commit is contained in:
akulikov 2023-05-26 14:45:25 +03:00
parent 94ed38e0de
commit 062f6682c2
11 changed files with 414 additions and 62 deletions

View file

@ -0,0 +1,191 @@
package ru.spcex.clearing.gatewayapi.logic.listings;
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.profile.Contact;
import ru.spcex.clearing.gatewayapi.logic.ProcessResult;
import ru.spcex.clearing.gatewayapi.logic.Stage;
import ru.spcex.clearing.gatewayapi.request.objects.IssuerCompany;
import ru.spcex.clearing.gatewayapi.request.objects.IssuerCompanySymbols;
import ru.spcex.clearing.gatewayapi.request.objects.IssuerContact;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.platform.enumeration.CompanySymbol;
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.Objects;
import java.util.stream.Collectors;
public class CheckCompanyExist extends Stage<ListingsRequestParam> {
private final Logger log = LoggerFactory.getLogger(getClass());
private final Imdg<Company> companyImdg;
private final Imdg<CompanySymbols> companySymbolsImdg;
private final Imdg<Contact> contactImdg;
public CheckCompanyExist(ImdgProvider imdgProvider) {
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
contactImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Contact, Contact.class);
}
@Override
public ProcessResult process(ListingsRequestParam param) {
List<IssuerCompany> companyList = param.getIssuerCompanyList();
for (IssuerCompany company : companyList) {
boolean companyFound = false;
List<IssuerCompanySymbols> companySymbolsList = company.getIssuerCompanySymbolsList();
// Пытаемся найти компанию по UUID
Collection<CompanySymbols> companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues(
Map.of(
"companySymbol", "UUID",
"companySymbolValue", company.getId()
)
);
if (!companySymbolsFromImdg.isEmpty()) {
CompanySymbols companySymbolFromImdg = companySymbolsFromImdg.iterator().next();
if (companySymbolsFromImdg.size() > 1) {
log.warn("For UUID found > 1 company_symbols, update first (id = {})", companySymbolFromImdg.getId());
}
companyFound = true;
company.setAlreadyExist(true);
company.setMapId(companySymbolFromImdg.getId());
}
// Если по UUID не нашли, пытаемся найти по INN или CIO
List<IssuerCompanySymbols> companySymbolsListINNorCIO = companySymbolsList.stream()
.filter(issuerCompanySymbols ->
CompanySymbol.CIO.equalsByKey(issuerCompanySymbols.getCompanySymbol()) ||
CompanySymbol.INN.equalsByKey(issuerCompanySymbols.getCompanySymbol())
).collect(Collectors.toList());
// Для компании не найдены реквизиты, значит создаем новую компанию
if (companySymbolsListINNorCIO.isEmpty()) {
company.setAlreadyExist(false);
continue;
}
// Реквизиты найдены, ищем по ним company.id
for (IssuerCompanySymbols companySymbols : companySymbolsListINNorCIO) {
companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues(
Map.of(
"companySymbol", companySymbols.getCompanySymbol(),
"companySymbolValue", companySymbols.getCompanySymbolValue()
)
);
if (companySymbolsFromImdg.isEmpty()) {
companySymbols.setAlreadyExist(false);
} else {
if (companySymbolsFromImdg.size() > 1)
log.warn("For {} found > 1 company_symbols, use first", companySymbols.getCompanySymbol());
CompanySymbols companySymbolFromImdg = companySymbolsFromImdg.iterator().next();
Company companyFromImdg = companyImdg.getSingleObjectByID(companySymbolFromImdg.getCompanyId());
if (companyFromImdg == null) {
// Случай, когда реквизиты есть, а компании нет (по сути данных ошибка в мапе)
log.warn("For own company_symbols (id = {}) company not found", companySymbolFromImdg.getId());
companySymbols.setAlreadyExist(false);
continue;
} else if (companyFound) {
// Случай, когда по переданным реквизитам найдено несколько компании
if (!Objects.equals(company.getMapId(), companyFromImdg.getId())) {
log.warn("For company_symbols (company.UUID = {}, {} = {}) found > 1 company (company.id = {}), " +
"company_symbols skipped",
company.getId(),
companySymbols.getCompanySymbol(),
companySymbols.getCompanySymbolValue(),
companyFromImdg.getId());
companySymbols.setInvalidData(true);
continue;
}
} else {
// Самый вероятный случай: компания найдена по реквизитам
companyFound = true;
company.setAlreadyExist(true);
company.setMapId(companyFromImdg.getId());
}
companySymbols.setAlreadyExist(true);
companySymbols.setMapId(companySymbolsFromImdg.iterator().next().getId());
}
}
// Если компания реквизиты есть, а компании нет. Маловероятный кейс
if (!companyFound) {
company.setAlreadyExist(false);
continue;
}
// Проверяем оставшиеся реквизиты на необходимость обновления
for (IssuerCompanySymbols companySymbols : companySymbolsList) {
if (companySymbols.isInvalidData() || companySymbols.getMapId() != null) continue;
companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues(
Map.of(
"companySymbol", companySymbols.getCompanySymbol(),
"companySymbolValue", companySymbols.getCompanySymbolValue()
)
);
if (companySymbolsFromImdg.isEmpty()) {
companySymbols.setAlreadyExist(false);
} else {
CompanySymbols companySymbolFromImdg = companySymbolsFromImdg.iterator().next();
if (companySymbolsFromImdg.size() > 1) {
log.warn("For company_symbols ({}={}) found > 1 own company_symbols, " +
"update first (company_symbols.id = {})",
companySymbols.getCompanySymbol(),
companySymbols.getCompanySymbolValue(),
companySymbolFromImdg.getId());
}
companySymbols.setAlreadyExist(true);
companySymbols.setMapId(companySymbolFromImdg.getId());
}
}
// Проверяем контакты на необходимость обновления
if (company.isAlreadyExist()) {
List<IssuerContact> contactList = company.getIssuerContactList();
for (IssuerContact contact : contactList) {
Collection<Contact> contactsFromImdg = contactImdg.getCollectionObjectsByFieldValues(
Map.of("contactType", contact.getContactType())
);
if (contactsFromImdg.isEmpty()) {
contact.setAlreadyExist(false);
} else {
Contact contactFromImdg = contactsFromImdg.iterator().next();
if (contactsFromImdg.size() > 1) {
log.warn("Found contact > 1 for contactType {}, update first (id = {})",
contactFromImdg.getContactType(),
contactFromImdg.getId());
}
contact.setAlreadyExist(true);
contact.setMapId(contactFromImdg.getId());
}
}
}
}
List<IssuerCompany> filteredIssuerCompany = companyList.stream()
.filter(issuerCompany -> !issuerCompany.isInvalidData())
.collect(Collectors.toList());
// todo check list is empty
param.setIssuerCompanyList(filteredIssuerCompany);
return null;
}
}

View file

@ -1,5 +1,7 @@
package ru.spcex.clearing.gatewayapi.logic.listings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.clearing.classes.statics.data.instrument.issue.CouponPeriod;
import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity;
import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeCashFlow;
@ -21,6 +23,8 @@ import java.util.List;
import java.util.Map;
public class CheckSecurityExist extends Stage<ListingsRequestParam> {
private final Logger log = LoggerFactory.getLogger(getClass());
private final Imdg<EquitySecurity> equitySecurityImdg;
private final Imdg<FixedIncomeSecurity> fixedIncomeSecurityImdg;
private final Imdg<Listing> listingImdg;
@ -38,28 +42,39 @@ public class CheckSecurityExist extends Stage<ListingsRequestParam> {
@Override
public ProcessResult process(ListingsRequestParam param) {
List<IncomeSecurity> securities = param.getSecurities();
for (IncomeSecurity incomeSecurity : securities) {
String instrumentType = incomeSecurity.getInstrumentType();
String securitySymbol = incomeSecurity.getSecuritySymbol();
if (InstrumentType.BOND.equalsByKey(instrumentType)) {
Collection<FixedIncomeSecurity> fixedIncomeSecurity = fixedIncomeSecurityImdg.getCollectionObjectsByFieldValues(
Collection<FixedIncomeSecurity> fixedIncomeSecurities = fixedIncomeSecurityImdg.getCollectionObjectsByFieldValues(
Map.of("securitySymbol", securitySymbol)
);
if (!fixedIncomeSecurity.isEmpty()) {
// todo log for multiply elements
if (!fixedIncomeSecurities.isEmpty()) {
FixedIncomeSecurity fixedIncomeSecurity = fixedIncomeSecurities.iterator().next();
if (fixedIncomeSecurities.size() > 1) {
log.warn("For security_symbol = {} found > 1 fixed_income_security, update first (id = {})",
securitySymbol,
fixedIncomeSecurity.getId());
}
incomeSecurity.setAlreadyExist(true);
incomeSecurity.setMapId(fixedIncomeSecurity.iterator().next().getId());
incomeSecurity.setMapId(fixedIncomeSecurity.getId());
} else {
incomeSecurity.setAlreadyExist(false);
}
} else if (InstrumentType.EQTY.equalsByKey(instrumentType)) {
Collection<EquitySecurity> equitySecurity = equitySecurityImdg.getCollectionObjectsByFieldValues(
Collection<EquitySecurity> equitySecurities = equitySecurityImdg.getCollectionObjectsByFieldValues(
Map.of("securitySymbol", securitySymbol)
);
if (!equitySecurity.isEmpty()) {
// todo log for multiply elements
if (!equitySecurities.isEmpty()) {
EquitySecurity equitySecurity = equitySecurities.iterator().next();
if (equitySecurities.size() > 1) {
log.warn("For security_symbol = {} found > 1 equity_security, update first (id = {})",
securitySymbol,
equitySecurity.getId());
}
incomeSecurity.setAlreadyExist(true);
incomeSecurity.setMapId(equitySecurity.iterator().next().getId());
incomeSecurity.setMapId(equitySecurity.getId());
} else {
incomeSecurity.setAlreadyExist(false);
}
@ -70,56 +85,77 @@ public class CheckSecurityExist extends Stage<ListingsRequestParam> {
listing.setAlreadyExist(false);
continue;
}
Collection<Listing> listingFromImdg = listingImdg.getCollectionObjectsByFieldValues(
Collection<Listing> listingsFromImdg = listingImdg.getCollectionObjectsByFieldValues(
Map.of(
"securityId", incomeSecurity.getMapId(),
"market", listing.getCode()
)
);
if (listingFromImdg.isEmpty()) {
if (listingsFromImdg.isEmpty()) {
listing.setAlreadyExist(false);
} else {
// todo log for multiply elements
Listing listingFromImdg = listingsFromImdg.iterator().next();
if (listingsFromImdg.size() > 1) {
log.warn("For security_id {} and market {} found > 1 listing, update first (id = {})",
incomeSecurity.getMapId(),
listing.getCode(),
listingFromImdg.getId());
}
listing.setAlreadyExist(true);
listing.setMapId(listingFromImdg.iterator().next().getId());
listing.setMapId(listingFromImdg.getId());
}
}
for (CouponSchedule couponSchedule : incomeSecurity.getCouponScheduleList()) {
for (CouponSchedule couponSchedules : incomeSecurity.getCouponScheduleList()) {
if (!incomeSecurity.isAlreadyExist()) {
couponSchedule.setAlreadyExist(false);
couponSchedules.setAlreadyExist(false);
continue;
}
Collection<CouponPeriod> couponPeriodFromImdg = couponPeriodImdg.getCollectionObjectsByFieldValues(
Collection<CouponPeriod> couponPeriodListFromImdg = couponPeriodImdg.getCollectionObjectsByFieldValues(
Map.of(
"securityId", incomeSecurity.getMapId(),
"periodStartDate", couponSchedule.getPeriodStartDate(),
"periodEndDate", couponSchedule.getPeriodEndDate()
"periodStartDate", couponSchedules.getPeriodStartDate(),
"periodEndDate", couponSchedules.getPeriodEndDate()
)
);
if (couponPeriodFromImdg.isEmpty()) {
couponSchedule.setAlreadyExist(false);
if (couponPeriodListFromImdg.isEmpty()) {
couponSchedules.setAlreadyExist(false);
} else {
// todo log for multiply elements
couponSchedule.setAlreadyExist(true);
couponSchedule.setMapId(couponPeriodFromImdg.iterator().next().getId());
CouponPeriod couponPeriod = couponPeriodListFromImdg.iterator().next();
if (couponPeriodListFromImdg.size() > 1) {
log.warn("For securityId {}, periodStartDate {}, periodEndDate {} found > 1 couponPeriod, " +
"update first (id = {})",
incomeSecurity.getMapId(),
couponSchedules.getPeriodStartDate(),
couponSchedules.getPeriodEndDate(),
couponPeriod.getId());
}
couponSchedules.setAlreadyExist(true);
couponSchedules.setMapId(couponPeriod.getId());
}
}
for (Nominal nominal : incomeSecurity.getNominalList()) {
if (incomeSecurity.isAlreadyExist()) {
Collection<FixedIncomeCashFlow> fixedIncomeCashFlowFromImdg = fixedIncomeCashFlowImdg.getCollectionObjectsByFieldValues(
Collection<FixedIncomeCashFlow> fixedIncomeCashFlowListFromImdg = fixedIncomeCashFlowImdg.getCollectionObjectsByFieldValues(
Map.of(
"securityId", incomeSecurity.getMapId(),
"valueDate", nominal.getDate()
)
);
if (fixedIncomeCashFlowFromImdg.isEmpty()) {
if (fixedIncomeCashFlowListFromImdg.isEmpty()) {
nominal.setAlreadyExist(false);
} else {
// todo log for multiply elements
FixedIncomeCashFlow fixedIncomeCashFlow = fixedIncomeCashFlowListFromImdg.iterator().next();
if (fixedIncomeCashFlowListFromImdg.size() > 1) {
log.warn("For securityId {}, valueDate {} found > 1 fixedIncomeCashFlow, update first (id = {})",
incomeSecurity.getMapId(),
nominal.getDate(),
fixedIncomeCashFlow.getId());
}
nominal.setAlreadyExist(true);
nominal.setMapId(fixedIncomeCashFlowFromImdg.iterator().next().getId());
nominal.setMapId(fixedIncomeCashFlow.getId());
}
} else {
nominal.setAlreadyExist(false);

View file

@ -1,5 +1,7 @@
package ru.spcex.clearing.gatewayapi.logic.listings;
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.*;
@ -8,19 +10,27 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;
public class GroupingCompanyParts extends Stage<ListingsRequestParam> {
private final Logger log = LoggerFactory.getLogger(getClass());
@Override
public ProcessResult process(ListingsRequestParam param) {
List<IssuerCompany> issuerCompanyList = param.getListingsRequest().getIssuerCompanyList();
Map<UUID, IssuerCompany> issuerCompanyMap = new HashMap<>();
for (IssuerCompany issuerCompany : issuerCompanyList) {
if (issuerCompanyMap.put(issuerCompany.getId(), issuerCompany) != null) {
throw new IllegalStateException("Duplicate key");
if (issuerCompanyMap.containsKey(issuerCompany.getId())) {
log.warn("For company.UUID {} 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 (IncomeSecurity incomeSecurity : param.getSecurities()) {
@ -31,7 +41,8 @@ public class GroupingCompanyParts extends Stage<ListingsRequestParam> {
}
}
if (!securityFoundForCompany) {
// todo error: company without security
log.warn("For company.UUID {} not found security, company skipped", issuerCompanyId);
issuerCompany.setInvalidData(true);
}
}
@ -40,10 +51,14 @@ public class GroupingCompanyParts extends Stage<ListingsRequestParam> {
UUID issuerCompanyInfoUUID = issuerCompanyInfo.getCompanyId();
IssuerCompany issuerCompany = issuerCompanyMap.get(issuerCompanyInfoUUID);
if (issuerCompany == null) {
// todo error
log.warn("For companyInfo.UUID {} not found company, companyInfo skipped", issuerCompanyInfoUUID);
continue;
}
issuerCompany.getIssuerCompanyInfoList().add(issuerCompanyInfo);
if (issuerCompany.getIssuerCompanyInfo() != null) {
log.warn("For company.UUID {} found > 1 companyInfo, use first", issuerCompanyInfoUUID);
continue;
}
issuerCompany.setIssuerCompanyInfo(issuerCompanyInfo);
}
List<IssuerCompanySymbols> issuerCompanySymbolsList = param.getListingsRequest().getIssuerCompanySymbolsList();
@ -51,7 +66,10 @@ public class GroupingCompanyParts extends Stage<ListingsRequestParam> {
UUID issuerCompanySymbolsUUID = issuerCompanySymbols.getCompanyId();
IssuerCompany issuerCompany = issuerCompanyMap.get(issuerCompanySymbolsUUID);
if (issuerCompany == null) {
// todo error
log.warn("For companySymbols ({} = {}) not found company, companySymbols skipped",
issuerCompanySymbols.getCompanySymbol(),
issuerCompanySymbols.getCompanySymbolValue());
issuerCompanySymbols.setInvalidData(true);
continue;
}
issuerCompany.getIssuerCompanySymbolsList().add(issuerCompanySymbols);
@ -62,13 +80,22 @@ public class GroupingCompanyParts extends Stage<ListingsRequestParam> {
UUID issuerContactUUID = issuerContact.getCompanyId();
IssuerCompany issuerCompany = issuerCompanyMap.get(issuerContactUUID);
if (issuerCompany == null) {
// todo error
log.warn("For contact ({} = {}) not found company, contact skipped",
issuerContact.getContactType(),
issuerContact.getContactValue());
issuerContact.setInvalidData(true);
continue;
}
issuerCompany.getIssuerContactList().add(issuerContact);
}
param.getIssuerCompanyList().addAll(issuerCompanyList);
List<IssuerCompany> filteredIssuerCompany = issuerCompanyList.stream()
.filter(issuerCompany -> !issuerCompany.isInvalidData())
.collect(Collectors.toList());
// todo check list is empty
param.setIssuerCompanyList(filteredIssuerCompany);
return null;
}
}

View file

@ -1,5 +1,7 @@
package ru.spcex.clearing.gatewayapi.logic.listings;
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.*;
@ -8,17 +10,23 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;
public class GroupingSecurityParts extends Stage<ListingsRequestParam> {
private final Logger log = LoggerFactory.getLogger(getClass());
@Override
public ProcessResult process(ListingsRequestParam param) {
List<IncomeSecurity> securities = param.getListingsRequest().getSecurities();
Map<UUID, IncomeSecurity> securityMap = new HashMap<>();
for (IncomeSecurity incomeSecurity : securities) {
if (securityMap.put(incomeSecurity.getId(), incomeSecurity) != null) {
// todo error
throw new IllegalStateException("Duplicate key");
if (securityMap.containsKey(incomeSecurity.getId())) {
log.warn("For security.UUID {} found > 1 element from request, use first", incomeSecurity.getId());
incomeSecurity.setInvalidData(true);
continue;
}
securityMap.put(incomeSecurity.getId(), incomeSecurity);
}
List<CouponSchedule> couponSchedules = param.getListingsRequest().getCouponSchedules();
@ -26,7 +34,7 @@ public class GroupingSecurityParts extends Stage<ListingsRequestParam> {
UUID couponScheduleUUID = couponSchedule.getSecurityId();
IncomeSecurity incomeSecurity = securityMap.get(couponScheduleUUID);
if (incomeSecurity == null) {
// todo error
log.warn("For couponSchedule.securityId {} not found security, skipped", couponScheduleUUID);
continue;
}
incomeSecurity.getCouponScheduleList().add(couponSchedule);
@ -43,7 +51,7 @@ public class GroupingSecurityParts extends Stage<ListingsRequestParam> {
UUID listingUUID = listing.getSecurityId();
IncomeSecurity incomeSecurity = securityMap.get(listingUUID);
if (incomeSecurity == null) {
// todo error
log.warn("For listing.securityId {} not found security, skipped", listingUUID);
continue;
}
incomeSecurity.getListingList().add(listing);
@ -54,13 +62,20 @@ public class GroupingSecurityParts extends Stage<ListingsRequestParam> {
UUID nominalUUID = nominal.getSecurityId();
IncomeSecurity incomeSecurity = securityMap.get(nominalUUID);
if (incomeSecurity == null) {
// todo error
log.warn("For nominal.securityId {} not found security, skipped", nominalUUID);
continue;
}
incomeSecurity.getNominalList().add(nominal);
}
param.getSecurities().addAll(securities);
List<IncomeSecurity> filteredIncomeSecurities = securities.stream()
.filter(incomeSecurity -> !incomeSecurity.isInvalidData())
.collect(Collectors.toList());
// todo check list is empty
param.setSecurities(filteredIncomeSecurities);
return null;
}
}

View file

@ -8,9 +8,9 @@ import java.util.ArrayList;
import java.util.List;
public class ListingsRequestParam {
private final ListingsRequest listingsRequest;
private final List<IncomeSecurity> securities = new ArrayList<>();
private final List<IssuerCompany> issuerCompanyList = new ArrayList<>();
private ListingsRequest listingsRequest;
private List<IncomeSecurity> securities = new ArrayList<>();
private List<IssuerCompany> issuerCompanyList = new ArrayList<>();
public ListingsRequestParam(ListingsRequest listingsRequest) {
this.listingsRequest = listingsRequest;
@ -28,4 +28,16 @@ public class ListingsRequestParam {
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,17 +1,23 @@
package ru.spcex.clearing.gatewayapi.logic.listings;
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.IncomeListing;
import ru.spcex.clearing.gatewayapi.request.objects.IncomeSecurity;
import ru.spcex.platform.enumeration.BondType;
import ru.spcex.platform.enumeration.InstrumentType;
import ru.spcex.platform.enumeration.ShareType;
import ru.spcex.platform.enumeration.WorkflowStatus;
import ru.spcex.platform.utils.enumeration.IEnumKey;
import java.util.List;
import java.util.stream.Collectors;
public class ValidateIncomeSecurities extends Stage<ListingsRequestParam> {
private final Logger log = LoggerFactory.getLogger(getClass());
// todo collect errors for response
@Override
@ -19,27 +25,49 @@ public class ValidateIncomeSecurities extends Stage<ListingsRequestParam> {
List<IncomeSecurity> securities = param.getSecurities();
for (IncomeSecurity incomeSecurity : securities) {
if (incomeSecurity.isInvalidData()) continue;
String instrumentTypeStr = incomeSecurity.getInstrumentType();
InstrumentType instrumentType = IEnumKey.getEnumByKey(InstrumentType.class, instrumentTypeStr);
if (instrumentType != InstrumentType.BOND && instrumentType != InstrumentType.EQTY) {
// todo collect error
log.warn("Invalid instrumentType {} for security.UUID {}, skipped", instrumentTypeStr, incomeSecurity.getId());
incomeSecurity.setInvalidData(true);
continue;
}
String workflowStatusStr = incomeSecurity.getWorkflowStatus();
WorkflowStatus workflowStatus = IEnumKey.getEnumByKey(WorkflowStatus.class, workflowStatusStr);
if (workflowStatus == null) {
// todo collect error
log.warn("Invalid workflowStatus {} for security.UUID {}, skipped", workflowStatusStr, incomeSecurity.getId());
incomeSecurity.setInvalidData(true);
continue;
}
// todo check share_type
String shareTypeStr = incomeSecurity.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);
continue;
}
String bondTypeStr = incomeSecurity.getBondType();
BondType bondType = IEnumKey.getEnumByKey(BondType.class, bondTypeStr);
if (bondType == null) {
// todo collect error
log.warn("Invalid bondType {} for security.UUID {}, skipped", bondTypeStr, incomeSecurity.getId());
incomeSecurity.setInvalidData(true);
continue;
}
if (StringUtils.isEmpty(incomeSecurity.getSecuritySymbol())) {
log.warn("Empty or null securitySymbol for security.UUID {}, skipped", incomeSecurity.getId());
incomeSecurity.setInvalidData(true);
continue;
}
if (StringUtils.isEmpty(incomeSecurity.getShortName())) {
log.warn("Empty or null shortName for security.UUID {}, skipped", incomeSecurity.getShortName());
incomeSecurity.setInvalidData(true);
continue;
}
@ -49,13 +77,25 @@ public class ValidateIncomeSecurities extends Stage<ListingsRequestParam> {
workflowStatusStr = listing.getWorkflowStatus();
workflowStatus = IEnumKey.getEnumByKey(WorkflowStatus.class, workflowStatusStr);
if (workflowStatus == null) {
// todo collect error
log.warn("Invalid workflowStatus {} for listing from security.UUID {}", workflowStatusStr, incomeSecurity.getId());
listing.setInvalidData(true);
continue;
}
// todo add validation after create new listing request
}
}
List<IncomeSecurity> filteredIncomeSecurities = securities.stream()
.filter(incomeSecurity -> !incomeSecurity.isInvalidData())
.collect(Collectors.toList());
// todo check list is empty
param.setSecurities(filteredIncomeSecurities);
return null;
}
}

View file

@ -10,7 +10,7 @@ import java.util.List;
import java.util.UUID;
@ApiModel("Компания эмитент")
public class IssuerCompany {
public class IssuerCompany extends WithMapId {
@JsonProperty("id")
@ApiModelProperty(
value = "Идентификатор Эмитента в Модуле регистрации биржевых инструментов",
@ -43,7 +43,7 @@ public class IssuerCompany {
private String workflowStatus;
@JsonIgnore
private List<IssuerCompanyInfo> issuerCompanyInfoList = new ArrayList<>();
private IssuerCompanyInfo issuerCompanyInfo;
@JsonIgnore
private List<IssuerCompanySymbols> issuerCompanySymbolsList = new ArrayList<>();
@ -83,14 +83,6 @@ public class IssuerCompany {
this.workflowStatus = workflowStatus;
}
public List<IssuerCompanyInfo> getIssuerCompanyInfoList() {
return issuerCompanyInfoList;
}
public void setIssuerCompanyInfoList(List<IssuerCompanyInfo> issuerCompanyInfoList) {
this.issuerCompanyInfoList = issuerCompanyInfoList;
}
public List<IssuerCompanySymbols> getIssuerCompanySymbolsList() {
return issuerCompanySymbolsList;
}
@ -106,4 +98,12 @@ public class IssuerCompany {
public void setIssuerContactList(List<IssuerContact> issuerContactList) {
this.issuerContactList = issuerContactList;
}
public IssuerCompanyInfo getIssuerCompanyInfo() {
return issuerCompanyInfo;
}
public void setIssuerCompanyInfo(IssuerCompanyInfo issuerCompanyInfo) {
this.issuerCompanyInfo = issuerCompanyInfo;
}
}

View file

@ -7,7 +7,7 @@ import io.swagger.annotations.ApiModelProperty;
import java.util.UUID;
@ApiModel("Реквизиты компании эмитента")
public class IssuerCompanySymbols {
public class IssuerCompanySymbols extends WithMapId {
@JsonProperty("company_id")
@ApiModelProperty(
value = "Ссылка на company",

View file

@ -7,7 +7,7 @@ import io.swagger.annotations.ApiModelProperty;
import java.util.UUID;
@ApiModel("Контакты компании эмитента")
public class IssuerContact {
public class IssuerContact extends WithMapId {
@JsonProperty("company_id")
@ApiModelProperty(
value = "Ссылка на company",

View file

@ -4,11 +4,14 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
public abstract class WithMapId {
@JsonIgnore
protected Long mapId;
protected Long mapId = null;
@JsonIgnore
protected boolean alreadyExist = false;
@JsonIgnore
protected boolean invalidData = false;
public Long getMapId() {
return mapId;
}
@ -24,4 +27,12 @@ public abstract class WithMapId {
public void setAlreadyExist(boolean alreadyExist) {
this.alreadyExist = alreadyExist;
}
public boolean isInvalidData() {
return invalidData;
}
public void setInvalidData(boolean invalidData) {
this.invalidData = invalidData;
}
}

View file

@ -0,0 +1,20 @@
package ru.spcex.platform.enumeration;
import ru.spcex.platform.utils.enumeration.IEnumKey;
public enum ShareType implements IEnumKey {
S("S"), // Обыкновенная акция
P("P"), // Привилегированная акция
;
private final String key;
ShareType(String key) {
this.key = key;
}
@Override
public String getKey() {
return key;
}
}