ValidateIssuerCompanies stage

This commit is contained in:
akulikov 2023-05-26 15:13:36 +03:00
parent 062f6682c2
commit fafa894df8
9 changed files with 136 additions and 11 deletions

View file

@ -15,8 +15,8 @@ public class PipelineConfiguration {
@Bean
public List<Stage<ListingsRequestParam>> listingsRequestPipeline(ImdgProvider imdgProvider) {
List<Stage<ListingsRequestParam>> pipeline = new ArrayList<>();
pipeline.add(new GroupingSecurityParts());
pipeline.add(new GroupingCompanyParts());
pipeline.add(new PrepareSecurities());
pipeline.add(new PrepareCompanies());
pipeline.add(new ValidateIncomeSecurities());
pipeline.add(new CheckSecurityExist(imdgProvider));
return pipeline;

View file

@ -62,8 +62,11 @@ public class CheckCompanyExist extends Stage<ListingsRequestParam> {
// Если по UUID не нашли, пытаемся найти по INN или CIO
List<IssuerCompanySymbols> companySymbolsListINNorCIO = companySymbolsList.stream()
.filter(issuerCompanySymbols ->
CompanySymbol.CIO.equalsByKey(issuerCompanySymbols.getCompanySymbol()) ||
CompanySymbol.INN.equalsByKey(issuerCompanySymbols.getCompanySymbol())
!issuerCompanySymbols.isInvalidData() &&
(
CompanySymbol.CIO.equalsByKey(issuerCompanySymbols.getCompanySymbol()) ||
CompanySymbol.INN.equalsByKey(issuerCompanySymbols.getCompanySymbol())
)
).collect(Collectors.toList());
// Для компании не найдены реквизиты, значит создаем новую компанию
@ -74,6 +77,8 @@ public class CheckCompanyExist extends Stage<ListingsRequestParam> {
// Реквизиты найдены, ищем по ним company.id
for (IssuerCompanySymbols companySymbols : companySymbolsListINNorCIO) {
if (companySymbols.isInvalidData()) continue;
companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues(
Map.of(
"companySymbol", companySymbols.getCompanySymbol(),
@ -158,6 +163,8 @@ public class CheckCompanyExist extends Stage<ListingsRequestParam> {
if (company.isAlreadyExist()) {
List<IssuerContact> contactList = company.getIssuerContactList();
for (IssuerContact contact : contactList) {
if (contact.isInvalidData()) continue;
Collection<Contact> contactsFromImdg = contactImdg.getCollectionObjectsByFieldValues(
Map.of("contactType", contact.getContactType())
);

View file

@ -81,6 +81,8 @@ public class CheckSecurityExist extends Stage<ListingsRequestParam> {
}
for (IncomeListing listing : incomeSecurity.getListingList()) {
if (listing.isInvalidData()) continue;
if (!incomeSecurity.isAlreadyExist()) {
listing.setAlreadyExist(false);
continue;
@ -108,6 +110,8 @@ public class CheckSecurityExist extends Stage<ListingsRequestParam> {
}
for (CouponSchedule couponSchedules : incomeSecurity.getCouponScheduleList()) {
if (couponSchedules.isInvalidData()) continue;
if (!incomeSecurity.isAlreadyExist()) {
couponSchedules.setAlreadyExist(false);
continue;
@ -137,6 +141,8 @@ public class CheckSecurityExist extends Stage<ListingsRequestParam> {
}
for (Nominal nominal : incomeSecurity.getNominalList()) {
if (nominal.isInvalidData()) continue;
if (incomeSecurity.isAlreadyExist()) {
Collection<FixedIncomeCashFlow> fixedIncomeCashFlowListFromImdg = fixedIncomeCashFlowImdg.getCollectionObjectsByFieldValues(
Map.of(
@ -162,6 +168,7 @@ public class CheckSecurityExist extends Stage<ListingsRequestParam> {
}
for (CouponSchedule couponSchedule : incomeSecurity.getCouponScheduleList()) {
if (couponSchedule.isInvalidData()) continue;
if (nominal.getDate().isBefore(couponSchedule.getPeriodStartDate()) || nominal.getDate().isAfter(couponSchedule.getPeriodEndDate()))
continue;
nominal.setAccruedCoupon(couponSchedule.getAccruedCoupon());

View file

@ -12,12 +12,13 @@ import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;
public class GroupingCompanyParts extends Stage<ListingsRequestParam> {
public class PrepareCompanies 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.containsKey(issuerCompany.getId())) {

View file

@ -12,7 +12,7 @@ import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;
public class GroupingSecurityParts extends Stage<ListingsRequestParam> {
public class PrepareSecurities extends Stage<ListingsRequestParam> {
private final Logger log = LoggerFactory.getLogger(getClass());
@Override

View file

@ -19,7 +19,6 @@ import java.util.stream.Collectors;
public class ValidateIncomeSecurities extends Stage<ListingsRequestParam> {
private final Logger log = LoggerFactory.getLogger(getClass());
// todo collect errors for response
@Override
public ProcessResult process(ListingsRequestParam param) {
List<IncomeSecurity> securities = param.getSecurities();
@ -95,7 +94,6 @@ public class ValidateIncomeSecurities extends Stage<ListingsRequestParam> {
param.setSecurities(filteredIncomeSecurities);
return null;
}
}

View file

@ -0,0 +1,101 @@
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.IssuerCompany;
import ru.spcex.clearing.gatewayapi.request.objects.IssuerCompanySymbols;
import ru.spcex.clearing.gatewayapi.request.objects.IssuerContact;
import ru.spcex.platform.enumeration.CompanySymbol;
import ru.spcex.platform.enumeration.ContactTypes;
import ru.spcex.platform.enumeration.WorkflowStatus;
import ru.spcex.platform.utils.enumeration.IEnumKey;
import java.util.Arrays;
import java.util.List;
public class ValidateIssuerCompanies extends Stage<ListingsRequestParam> {
private final Logger log = LoggerFactory.getLogger(getClass());
private final List<CompanySymbol> validCompanySymbols = Arrays.asList(
CompanySymbol.OCVD,
CompanySymbol.INN,
CompanySymbol.CPP,
CompanySymbol.OCPO,
CompanySymbol.BIC,
CompanySymbol.OGRN
);
private final List<ContactTypes> validContactTypes = Arrays.asList(
ContactTypes.adrs,
ContactTypes.cont,
ContactTypes.mail,
ContactTypes.gdir,
ContactTypes.trst,
ContactTypes.fax,
ContactTypes.info,
ContactTypes.web
);
@Override
public ProcessResult process(ListingsRequestParam param) {
List<IssuerCompany> companyList = param.getIssuerCompanyList();
for (IssuerCompany issuerCompany : companyList) {
if (issuerCompany.isInvalidData()) continue;
if (StringUtils.isEmpty(issuerCompany.getShortName())) {
log.warn("Empty or null shortName for company (UUID = {}), skipped", issuerCompany.getId());
issuerCompany.setInvalidData(true);
continue;
}
String workflowStatusStr = issuerCompany.getWorkflowStatus();
WorkflowStatus workflowStatus = IEnumKey.getEnumByKey(WorkflowStatus.class, workflowStatusStr);
if (workflowStatus == null) {
log.warn("Invalid workflowStatus {} for company (UUID = {}), skipped", workflowStatusStr, issuerCompany.getId());
issuerCompany.setInvalidData(true);
continue;
}
for (IssuerCompanySymbols companySymbols : issuerCompany.getIssuerCompanySymbolsList()) {
String companySymbolStr = companySymbols.getCompanySymbol();
CompanySymbol companySymbol = IEnumKey.getEnumByKey(CompanySymbol.class, companySymbolStr);
if (!validCompanySymbols.contains(companySymbol)) {
log.warn("Invalid companySymbol {} for company.UUID {}, skipped", companySymbolStr, issuerCompany.getId());
companySymbols.setInvalidData(true);
}
if (StringUtils.isEmpty(companySymbols.getCompanySymbolValue())) {
log.warn("Empty or null companySymbolValue for company.UUID {}, skipped", companySymbols.getCompanySymbolValue());
companySymbols.setInvalidData(true);
}
}
for (IssuerContact contact : issuerCompany.getIssuerContactList()) {
String contactTypeStr = contact.getContactType();
ContactTypes contactType = IEnumKey.getEnumByKey(ContactTypes.class, contactTypeStr);
if (!validContactTypes.contains(contactType)) {
log.warn("Invalid contactType {} for company.UUID {}, skipped", contactTypeStr, issuerCompany.getId());
contact.setInvalidData(true);
}
if (StringUtils.isEmpty(contact.getContactValue())) {
log.warn("Empty or null contactValue for contact {}, company.UUID {}", contactTypeStr, issuerCompany.getId());
contact.setInvalidData(true);
}
}
}
return null;
}
}

View file

@ -3,8 +3,17 @@ package ru.spcex.platform.enumeration;
import ru.spcex.platform.utils.enumeration.IEnumKey;
public enum CompanySymbol implements IEnumKey {
INN("INN"), BIC("BIC"), CIO("CIO"), UUID("UUID"),
TRDC("TRDC"), CLRC("CLRC"), RGRC("RGRC");
OCVD("OCVD"),
CPP("CPP"),
OCPO("OCPO"),
OGRN("OGRN"),
INN("INN"),
BIC("BIC"),
CIO("CIO"),
UUID("UUID"),
TRDC("TRDC"),
CLRC("CLRC"),
RGRC("RGRC");
private final String key;

View file

@ -15,7 +15,9 @@ public enum ContactTypes implements IEnumKey {
trst("TRST"), // Доверенное лицо
fax("FAX"), // Факс
info("INFO"), // Контактная информация
cmnt("CMNT"); // Примечание
cmnt("CMNT"), // Примечание
web("WEB"), // Веб-сайт
;
private final String key;