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
|
||||
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;
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
);
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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())) {
|
||||
|
|
@ -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
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue