ValidateIssuerCompanies stage
This commit is contained in:
parent
062f6682c2
commit
fafa894df8
9 changed files with 136 additions and 11 deletions
|
|
@ -15,8 +15,8 @@ public class PipelineConfiguration {
|
||||||
@Bean
|
@Bean
|
||||||
public List<Stage<ListingsRequestParam>> listingsRequestPipeline(ImdgProvider imdgProvider) {
|
public List<Stage<ListingsRequestParam>> listingsRequestPipeline(ImdgProvider imdgProvider) {
|
||||||
List<Stage<ListingsRequestParam>> pipeline = new ArrayList<>();
|
List<Stage<ListingsRequestParam>> pipeline = new ArrayList<>();
|
||||||
pipeline.add(new GroupingSecurityParts());
|
pipeline.add(new PrepareSecurities());
|
||||||
pipeline.add(new GroupingCompanyParts());
|
pipeline.add(new PrepareCompanies());
|
||||||
pipeline.add(new ValidateIncomeSecurities());
|
pipeline.add(new ValidateIncomeSecurities());
|
||||||
pipeline.add(new CheckSecurityExist(imdgProvider));
|
pipeline.add(new CheckSecurityExist(imdgProvider));
|
||||||
return pipeline;
|
return pipeline;
|
||||||
|
|
|
||||||
|
|
@ -62,8 +62,11 @@ public class CheckCompanyExist extends Stage<ListingsRequestParam> {
|
||||||
// Если по UUID не нашли, пытаемся найти по INN или CIO
|
// Если по UUID не нашли, пытаемся найти по INN или CIO
|
||||||
List<IssuerCompanySymbols> companySymbolsListINNorCIO = companySymbolsList.stream()
|
List<IssuerCompanySymbols> companySymbolsListINNorCIO = companySymbolsList.stream()
|
||||||
.filter(issuerCompanySymbols ->
|
.filter(issuerCompanySymbols ->
|
||||||
CompanySymbol.CIO.equalsByKey(issuerCompanySymbols.getCompanySymbol()) ||
|
!issuerCompanySymbols.isInvalidData() &&
|
||||||
CompanySymbol.INN.equalsByKey(issuerCompanySymbols.getCompanySymbol())
|
(
|
||||||
|
CompanySymbol.CIO.equalsByKey(issuerCompanySymbols.getCompanySymbol()) ||
|
||||||
|
CompanySymbol.INN.equalsByKey(issuerCompanySymbols.getCompanySymbol())
|
||||||
|
)
|
||||||
).collect(Collectors.toList());
|
).collect(Collectors.toList());
|
||||||
|
|
||||||
// Для компании не найдены реквизиты, значит создаем новую компанию
|
// Для компании не найдены реквизиты, значит создаем новую компанию
|
||||||
|
|
@ -74,6 +77,8 @@ public class CheckCompanyExist extends Stage<ListingsRequestParam> {
|
||||||
|
|
||||||
// Реквизиты найдены, ищем по ним company.id
|
// Реквизиты найдены, ищем по ним company.id
|
||||||
for (IssuerCompanySymbols companySymbols : companySymbolsListINNorCIO) {
|
for (IssuerCompanySymbols companySymbols : companySymbolsListINNorCIO) {
|
||||||
|
if (companySymbols.isInvalidData()) continue;
|
||||||
|
|
||||||
companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues(
|
companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues(
|
||||||
Map.of(
|
Map.of(
|
||||||
"companySymbol", companySymbols.getCompanySymbol(),
|
"companySymbol", companySymbols.getCompanySymbol(),
|
||||||
|
|
@ -158,6 +163,8 @@ public class CheckCompanyExist extends Stage<ListingsRequestParam> {
|
||||||
if (company.isAlreadyExist()) {
|
if (company.isAlreadyExist()) {
|
||||||
List<IssuerContact> contactList = company.getIssuerContactList();
|
List<IssuerContact> contactList = company.getIssuerContactList();
|
||||||
for (IssuerContact contact : contactList) {
|
for (IssuerContact contact : contactList) {
|
||||||
|
if (contact.isInvalidData()) continue;
|
||||||
|
|
||||||
Collection<Contact> contactsFromImdg = contactImdg.getCollectionObjectsByFieldValues(
|
Collection<Contact> contactsFromImdg = contactImdg.getCollectionObjectsByFieldValues(
|
||||||
Map.of("contactType", contact.getContactType())
|
Map.of("contactType", contact.getContactType())
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -81,6 +81,8 @@ public class CheckSecurityExist extends Stage<ListingsRequestParam> {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (IncomeListing listing : incomeSecurity.getListingList()) {
|
for (IncomeListing listing : incomeSecurity.getListingList()) {
|
||||||
|
if (listing.isInvalidData()) continue;
|
||||||
|
|
||||||
if (!incomeSecurity.isAlreadyExist()) {
|
if (!incomeSecurity.isAlreadyExist()) {
|
||||||
listing.setAlreadyExist(false);
|
listing.setAlreadyExist(false);
|
||||||
continue;
|
continue;
|
||||||
|
|
@ -108,6 +110,8 @@ public class CheckSecurityExist extends Stage<ListingsRequestParam> {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (CouponSchedule couponSchedules : incomeSecurity.getCouponScheduleList()) {
|
for (CouponSchedule couponSchedules : incomeSecurity.getCouponScheduleList()) {
|
||||||
|
if (couponSchedules.isInvalidData()) continue;
|
||||||
|
|
||||||
if (!incomeSecurity.isAlreadyExist()) {
|
if (!incomeSecurity.isAlreadyExist()) {
|
||||||
couponSchedules.setAlreadyExist(false);
|
couponSchedules.setAlreadyExist(false);
|
||||||
continue;
|
continue;
|
||||||
|
|
@ -137,6 +141,8 @@ public class CheckSecurityExist extends Stage<ListingsRequestParam> {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Nominal nominal : incomeSecurity.getNominalList()) {
|
for (Nominal nominal : incomeSecurity.getNominalList()) {
|
||||||
|
if (nominal.isInvalidData()) continue;
|
||||||
|
|
||||||
if (incomeSecurity.isAlreadyExist()) {
|
if (incomeSecurity.isAlreadyExist()) {
|
||||||
Collection<FixedIncomeCashFlow> fixedIncomeCashFlowListFromImdg = fixedIncomeCashFlowImdg.getCollectionObjectsByFieldValues(
|
Collection<FixedIncomeCashFlow> fixedIncomeCashFlowListFromImdg = fixedIncomeCashFlowImdg.getCollectionObjectsByFieldValues(
|
||||||
Map.of(
|
Map.of(
|
||||||
|
|
@ -162,6 +168,7 @@ public class CheckSecurityExist extends Stage<ListingsRequestParam> {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (CouponSchedule couponSchedule : incomeSecurity.getCouponScheduleList()) {
|
for (CouponSchedule couponSchedule : incomeSecurity.getCouponScheduleList()) {
|
||||||
|
if (couponSchedule.isInvalidData()) continue;
|
||||||
if (nominal.getDate().isBefore(couponSchedule.getPeriodStartDate()) || nominal.getDate().isAfter(couponSchedule.getPeriodEndDate()))
|
if (nominal.getDate().isBefore(couponSchedule.getPeriodStartDate()) || nominal.getDate().isAfter(couponSchedule.getPeriodEndDate()))
|
||||||
continue;
|
continue;
|
||||||
nominal.setAccruedCoupon(couponSchedule.getAccruedCoupon());
|
nominal.setAccruedCoupon(couponSchedule.getAccruedCoupon());
|
||||||
|
|
|
||||||
|
|
@ -12,12 +12,13 @@ import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class GroupingCompanyParts extends Stage<ListingsRequestParam> {
|
public class PrepareCompanies extends Stage<ListingsRequestParam> {
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ProcessResult process(ListingsRequestParam param) {
|
public ProcessResult process(ListingsRequestParam param) {
|
||||||
List<IssuerCompany> issuerCompanyList = param.getListingsRequest().getIssuerCompanyList();
|
List<IssuerCompany> issuerCompanyList = param.getListingsRequest().getIssuerCompanyList();
|
||||||
|
|
||||||
Map<UUID, IssuerCompany> issuerCompanyMap = new HashMap<>();
|
Map<UUID, IssuerCompany> issuerCompanyMap = new HashMap<>();
|
||||||
for (IssuerCompany issuerCompany : issuerCompanyList) {
|
for (IssuerCompany issuerCompany : issuerCompanyList) {
|
||||||
if (issuerCompanyMap.containsKey(issuerCompany.getId())) {
|
if (issuerCompanyMap.containsKey(issuerCompany.getId())) {
|
||||||
|
|
@ -12,7 +12,7 @@ import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class GroupingSecurityParts extends Stage<ListingsRequestParam> {
|
public class PrepareSecurities extends Stage<ListingsRequestParam> {
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -19,7 +19,6 @@ import java.util.stream.Collectors;
|
||||||
public class ValidateIncomeSecurities extends Stage<ListingsRequestParam> {
|
public class ValidateIncomeSecurities extends Stage<ListingsRequestParam> {
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
|
|
||||||
// todo collect errors for response
|
|
||||||
@Override
|
@Override
|
||||||
public ProcessResult process(ListingsRequestParam param) {
|
public ProcessResult process(ListingsRequestParam param) {
|
||||||
List<IncomeSecurity> securities = param.getSecurities();
|
List<IncomeSecurity> securities = param.getSecurities();
|
||||||
|
|
@ -95,7 +94,6 @@ public class ValidateIncomeSecurities extends Stage<ListingsRequestParam> {
|
||||||
|
|
||||||
param.setSecurities(filteredIncomeSecurities);
|
param.setSecurities(filteredIncomeSecurities);
|
||||||
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3,8 +3,17 @@ package ru.spcex.platform.enumeration;
|
||||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||||
|
|
||||||
public enum CompanySymbol implements IEnumKey {
|
public enum CompanySymbol implements IEnumKey {
|
||||||
INN("INN"), BIC("BIC"), CIO("CIO"), UUID("UUID"),
|
OCVD("OCVD"),
|
||||||
TRDC("TRDC"), CLRC("CLRC"), RGRC("RGRC");
|
CPP("CPP"),
|
||||||
|
OCPO("OCPO"),
|
||||||
|
OGRN("OGRN"),
|
||||||
|
INN("INN"),
|
||||||
|
BIC("BIC"),
|
||||||
|
CIO("CIO"),
|
||||||
|
UUID("UUID"),
|
||||||
|
TRDC("TRDC"),
|
||||||
|
CLRC("CLRC"),
|
||||||
|
RGRC("RGRC");
|
||||||
|
|
||||||
private final String key;
|
private final String key;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,9 @@ public enum ContactTypes implements IEnumKey {
|
||||||
trst("TRST"), // Доверенное лицо
|
trst("TRST"), // Доверенное лицо
|
||||||
fax("FAX"), // Факс
|
fax("FAX"), // Факс
|
||||||
info("INFO"), // Контактная информация
|
info("INFO"), // Контактная информация
|
||||||
cmnt("CMNT"); // Примечание
|
cmnt("CMNT"), // Примечание
|
||||||
|
web("WEB"), // Веб-сайт
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
private final String key;
|
private final String key;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue