Compare commits
1 commit
10_01_2024
...
gateway
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7156c57d98 |
4 changed files with 79 additions and 31 deletions
|
|
@ -8,6 +8,8 @@ import ru.clearing.classes.statics.data.company.Company;
|
|||
import ru.clearing.classes.statics.data.company.CompanySymbols;
|
||||
import ru.clearing.classes.statics.data.company.relation.Relation;
|
||||
import ru.clearing.classes.statics.data.execution.ExecutionDeposit;
|
||||
import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity;
|
||||
import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity;
|
||||
import ru.clearing.classes.statics.data.misc.STrades;
|
||||
import ru.clearing.classes.statics.data.misc.Session;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
|
|
@ -37,6 +39,9 @@ public class ValidationConfig {
|
|||
|
||||
Imdg<Relation> imdgRelation;
|
||||
Imdg<Company> imdgCompany;
|
||||
Imdg<FixedIncomeSecurity> fixedIncomeSecurityImdg;
|
||||
Imdg<EquitySecurity> equitySecurityImdg;
|
||||
|
||||
Imdg<CompanySymbols> imdgCompanySymbols;
|
||||
Imdg<Registry> imdgRegistry;
|
||||
Imdg<Account> imdgAccount;
|
||||
|
|
@ -60,6 +65,8 @@ public class ValidationConfig {
|
|||
this.imdgSession = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
|
||||
this.imdgSectionDictionary = imdgProvider.getImdg(IMDGDistributedNames.Map_SectionDictionary, SectionDictionary.class);
|
||||
this.imdgMoneyMarketSecurity = imdgProvider.getImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, MoneyMarketSecurity.class);
|
||||
this.fixedIncomeSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class);
|
||||
this.equitySecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class);
|
||||
this.imdgProvider = imdgProvider;
|
||||
}
|
||||
|
||||
|
|
@ -203,9 +210,11 @@ public class ValidationConfig {
|
|||
context.setValidatedObject(sDf08);
|
||||
context.addImdg(IMDGDistributedNames.Map_Account, imdgAccount);
|
||||
context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany);
|
||||
context.addImdg(IMDGDistributedNames.Map_EquitySecurity, equitySecurityImdg);
|
||||
context.addImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, fixedIncomeSecurityImdg);
|
||||
context.setLogPrefix(LogPrefixId.INSTANCE);
|
||||
return new ValidatorImpl<>(context,
|
||||
Sdf08NewValidationRule.AccountPresent
|
||||
Sdf08NewValidationRule.AccountPresent, Sdf08NewValidationRule.InstrumentPresent
|
||||
);
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -132,7 +132,7 @@ public class Sdf08Executor extends AbstractExecutor<SDf08> {
|
|||
} else if (ClearingErrorInternal.AccountNotPresent.equals(error.map(EnumMessage::getSubject).orElse(null))) {
|
||||
log.error("fatal error: resumed processing after generating accounts, but no account found for sdf01.id={}", sdf08.getId());
|
||||
}
|
||||
if (error.isPresent()) {
|
||||
if (error.isPresent() && !ClearingError.SecurityNotFound.equals(error.get().getSubject())) {
|
||||
log.error("sdf01.id={} error: {}", sdf08.getId(), messageResolver.resolve(error.get()));
|
||||
//fixme инициировать = команда для другого сервиса? sdf02Imdg.insert(createErrorSdf02(sdf01, error.get(), generationIdForGroup));
|
||||
// sdf02Imdg.insert(createErrorSdf02(sdf01, error.get(), generationIdForGroup));
|
||||
|
|
@ -146,8 +146,10 @@ public class Sdf08Executor extends AbstractExecutor<SDf08> {
|
|||
statementImdg.insert(stmt);
|
||||
|
||||
Company company = companyImdg.getSingleObjectByID(account.getCompanyId());
|
||||
Optional<EnumMessage> err = validateActiveness(company, account);
|
||||
if (err.isEmpty()) {
|
||||
if (error.isEmpty()) {
|
||||
error = validateActiveness(company, account);
|
||||
}
|
||||
if (error.isEmpty()) {
|
||||
Optional<Registry> reg = findReg(stmt);
|
||||
Registry rgs;
|
||||
if (reg.isPresent()) {
|
||||
|
|
@ -163,7 +165,7 @@ public class Sdf08Executor extends AbstractExecutor<SDf08> {
|
|||
stmt.setOperationStatus(OperationStatus.Executed.getKey());
|
||||
statementImdg.update(stmt);
|
||||
} else {
|
||||
stmt.setErrorCodeId(err.get().getSubject().getId()); // fixme ErrorText insert
|
||||
stmt.setErrorCodeId(error.get().getSubject().getId()); // fixme ErrorText insert
|
||||
stmt.setOperationStatus(OperationStatus.Rejected.getKey());
|
||||
statementImdg.update(stmt);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,10 @@ package ru.spcex.clearing.service.validation;
|
|||
|
||||
import ru.clearing.classes.statics.data.account.Account;
|
||||
import ru.clearing.classes.statics.data.company.Company;
|
||||
import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity;
|
||||
import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf08;
|
||||
import ru.clearing.classes.statics.data.security.Security;
|
||||
import ru.spcex.clearing.error.ClearingError;
|
||||
import ru.spcex.clearing.error.ClearingErrorInternal;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
|
|
@ -48,10 +51,26 @@ public enum Sdf08NewValidationRule implements IValidationRule<ImdgValidationCont
|
|||
context.storeObject(ValidationStored.Sdf08Account, acc);
|
||||
return empty();
|
||||
}
|
||||
}, InstrumentPresent() {
|
||||
@Override
|
||||
public Optional<EnumMessage> validate(ImdgValidationContext<SDf08> context) {
|
||||
SDf08 sdf08 = context.getValidatedObject();
|
||||
Imdg<FixedIncomeSecurity> fxIncmSecImdg = context.obtainMap(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class);
|
||||
Imdg<EquitySecurity> equityImdg = context.obtainMap(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class);
|
||||
|
||||
Security security = fxIncmSecImdg.getFirstObjectByFieldValues(Map.of("securitySymbol", sdf08.getSecurityCode()));
|
||||
if (security == null) {
|
||||
security = equityImdg.getFirstObjectByFieldValues(Map.of("securitySymbol", sdf08.getSecurityCode()));
|
||||
}
|
||||
if (security == null) {
|
||||
return of(ClearingError.SecurityNotFound, sdf08.getSecurityCode());
|
||||
}
|
||||
return empty();
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public String ruleName() {
|
||||
return "Sdf01NewValidationRule." + name();
|
||||
return "Sdf08NewValidationRule." + name();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,22 +9,24 @@ import ru.clearing.classes.statics.data.execution.ExecutionCommon;
|
|||
import ru.clearing.classes.statics.data.execution.ExecutionDeposit;
|
||||
import ru.clearing.classes.statics.data.misc.Session;
|
||||
import ru.clearing.classes.statics.data.payment.PaymentInstruction;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
||||
import ru.spcex.clearing.session.stage.impl.*;
|
||||
import ru.spcex.clearing.session.stage.task.*;
|
||||
import ru.spcex.platform.classes.base.interfaces.ExecutionType;
|
||||
import ru.spcex.platform.enumeration.RegistryStatus;
|
||||
import ru.spcex.platform.enumeration.Section;
|
||||
import ru.spcex.platform.enumeration.SessionStatus;
|
||||
import ru.spcex.platform.enumeration.SessionType;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
@Service
|
||||
|
|
@ -36,15 +38,18 @@ public class IntermediateMkrSession extends AbstractSession implements Initializ
|
|||
private final ObligationAdmission obligationsAdmission;
|
||||
|
||||
private final InclusionObligations inclusionObligations;
|
||||
private final InspectionObligationsDepositReturn inspectionObligationsReturn;
|
||||
private final InspectionObligations inspectionObligations;
|
||||
private final FormingRegistersOnOS formingRegistersOnOS;
|
||||
private final FormingPaymentInstruction formingPaymentInstruction;
|
||||
private final FormingPaymentInstructionReturnMkr formingPaymentInstructionReturn;
|
||||
private final FormingPaymentInstructionDealsFinalMkr formingPaymentInstructionDeals;
|
||||
private final UnlockResources unlockResources;
|
||||
private final FinishingSession finishingSession;
|
||||
private final EndStageNotification endStageNotification;
|
||||
|
||||
private final Imdg<ExecutionDeposit> executionDepositImdg;
|
||||
private final Supplier<List<String>> marketCodes;
|
||||
private final Imdg<Registry> registryImdg;
|
||||
|
||||
|
||||
public IntermediateMkrSession(
|
||||
|
|
@ -54,13 +59,13 @@ public class IntermediateMkrSession extends AbstractSession implements Initializ
|
|||
RequirementsAndObligationCreation requirementsAndObligationCreation,
|
||||
ObligationAdmission obligationsAdmission,
|
||||
InclusionObligations inclusionObligations,
|
||||
FormingRegistersOnOS formingRegistersOnOS,
|
||||
FormingPaymentInstruction formingPaymentInstruction,
|
||||
InspectionObligations inspectionObligations, FormingRegistersOnOS formingRegistersOnOS,
|
||||
FormingPaymentInstructionReturnMkr formingPaymentInstructionReturn, FormingPaymentInstructionDealsFinalMkr formingPaymentInstructionDeals,
|
||||
UnlockResources unlockResources,
|
||||
FinishingSession finishingSession,
|
||||
EndStageNotification endStageNotification,
|
||||
IMessageResolver messageResolver,
|
||||
InspectionObligations inspectionObligations,
|
||||
InspectionObligationsDepositReturn inspectionObligationsReturn,
|
||||
@Qualifier("marketCodesForBn") Supplier<List<String>> marketCodes) {
|
||||
super(imdgProvider, messageResolver);
|
||||
this.balanceRevise = balanceRevise;
|
||||
|
|
@ -68,22 +73,35 @@ public class IntermediateMkrSession extends AbstractSession implements Initializ
|
|||
this.requirementsAndObligationCreation = requirementsAndObligationCreation;
|
||||
this.obligationsAdmission = obligationsAdmission;
|
||||
this.inclusionObligations = inclusionObligations;
|
||||
this.inspectionObligations = inspectionObligations;
|
||||
this.formingRegistersOnOS = formingRegistersOnOS;
|
||||
this.formingPaymentInstruction = formingPaymentInstruction;
|
||||
this.formingPaymentInstructionReturn = formingPaymentInstructionReturn;
|
||||
this.formingPaymentInstructionDeals = formingPaymentInstructionDeals;
|
||||
this.unlockResources = unlockResources;
|
||||
this.finishingSession = finishingSession;
|
||||
this.endStageNotification = endStageNotification;
|
||||
this.executionDepositImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionDeposit, ExecutionDeposit.class);
|
||||
this.inspectionObligations = inspectionObligations;
|
||||
this.inspectionObligationsReturn = inspectionObligationsReturn;
|
||||
this.marketCodes = marketCodes;
|
||||
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
dealsPrepare.searchForExecutions(ExecutionType.ExecutionDeposit);
|
||||
// ImdgPredicateBuilder execFondPb = executionDepositImdg.predicateBuilder();
|
||||
// dealsPrepare.addExecutionDepositCondition(execFondPb.regex("firstLegSettlementCode", "(^T0.*$)|(B[^0]\\d*$)"));
|
||||
// dealsPrepare.addExecutionDepositCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0])));
|
||||
//fixme спросить у Кости нужны ли эти поправки
|
||||
ImdgPredicateBuilder rgsPrctBuilder = registryImdg.predicateBuilder();
|
||||
inclusionObligations.addRegistryCondition(
|
||||
rgsPrctBuilder.and(
|
||||
rgsPrctBuilder.or(
|
||||
rgsPrctBuilder.equals("registryStatus", RegistryStatus.PROC.getKey()),
|
||||
rgsPrctBuilder.equals("registryStatus", RegistryStatus.MNG.getKey())
|
||||
),
|
||||
rgsPrctBuilder.lessEqual("valueDate", LocalDate.now())
|
||||
)
|
||||
);
|
||||
inspectionObligationsReturn.setSessionType(sessionType());
|
||||
inspectionObligations.setSessionType(sessionType());
|
||||
imdgProvider.waitAvailable();
|
||||
initSessionIfPresent();
|
||||
}
|
||||
|
|
@ -127,18 +145,6 @@ public class IntermediateMkrSession extends AbstractSession implements Initializ
|
|||
DealsPreparePayload payload = new DealsPreparePayload();
|
||||
payload.setSessionId(currSession.getId());
|
||||
dealsPreparationResult = runStage(TaskType.DealsPrepare, payload, dealsPrepare);
|
||||
//Сначала обрабатываются записи, у которых settlementCode = значению, у которого первый символ ="T", второй =0,
|
||||
// а после settlementCode = значению, у которого первый символ ="B", второй ≠0, последующие =любые цифры
|
||||
dealsPreparationResult.getStageResult().sort((o1, o2) -> {
|
||||
String o1SettlementCode = ((ExecutionDeposit) o1).getFirstLegSettlementCode();
|
||||
String o2SettlementCode = ((ExecutionDeposit) o2).getSecondLegSettlementCode();
|
||||
Function<String, Integer> mapper = (settlementCode) -> {
|
||||
if (settlementCode.startsWith("T")) return -1;
|
||||
else if (settlementCode.startsWith("B")) return 1;
|
||||
else return 0;
|
||||
};
|
||||
return mapper.apply(o1SettlementCode).compareTo(mapper.apply(o2SettlementCode));
|
||||
});
|
||||
}
|
||||
//stage 2
|
||||
runStage(TaskType.RequirementsAndObligationsCreate, dealsPreparationResult.getStageResult(), requirementsAndObligationCreation);
|
||||
|
|
@ -155,20 +161,32 @@ public class IntermediateMkrSession extends AbstractSession implements Initializ
|
|||
{
|
||||
InspectionPoolPayload companyIdPayload = new InspectionPoolPayload();
|
||||
companyIdPayload.setProcessedCompanyId(currSession.getCompanyId());
|
||||
runStage(TaskType.InspectionObligations, companyIdPayload, inspectionObligationsReturn);
|
||||
runStage(TaskType.InspectionObligations, companyIdPayload, inspectionObligations);
|
||||
}
|
||||
//stage 6
|
||||
{
|
||||
FormingRegistersOnOSPayload payload = new FormingRegistersOnOSPayload();
|
||||
payload.setSessionId(currSession.getId());
|
||||
runStage(TaskType.FormingRegistersOnOS, payload, formingRegistersOnOS); //returns Collection<Registry>
|
||||
}
|
||||
//stage 7
|
||||
StageResult<Collection<PaymentInstruction>> paymentResult = null;
|
||||
|
||||
StageResult<Collection<PaymentInstruction>> returnsPayment = null;
|
||||
{
|
||||
FormingPaymentInstructionPayload payload = new FormingPaymentInstructionPayload();
|
||||
payload.setSessionId(currSession.getId());
|
||||
//stage 7
|
||||
paymentResult = runStage(TaskType.FormingPaymentInstruction, payload, formingPaymentInstruction);
|
||||
returnsPayment = runStage(TaskType.FormingPaymentInstruction, payload, formingPaymentInstructionReturn);
|
||||
}
|
||||
|
||||
StageResult<Collection<PaymentInstruction>> paymentResult = null;
|
||||
{
|
||||
FormingPaymentInstructionDealsMkrPayload payload = new FormingPaymentInstructionDealsMkrPayload();
|
||||
payload.setSessionId(currSession.getId());
|
||||
payload.setPaymentInstructionReturns(returnsPayment.getStageResult());
|
||||
//stage 7
|
||||
paymentResult = runStage(TaskType.FormingPaymentInstruction, payload, formingPaymentInstructionDeals);
|
||||
}
|
||||
if (paymentResult != null && paymentResult.getStageResult().isEmpty()) {
|
||||
runStage(TaskType.FormingPaymentInstruction, balanceRevise);
|
||||
|
|
@ -189,7 +207,7 @@ public class IntermediateMkrSession extends AbstractSession implements Initializ
|
|||
{
|
||||
FinishingSessionPayload payload = new FinishingSessionPayload();
|
||||
payload.setSessionId(currSession.getId());
|
||||
payload.setPr("4");
|
||||
payload.setPr("3");
|
||||
runStage(TaskType.FinishingSession, payload, finishingSession);
|
||||
}
|
||||
//stage 11
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue