etreschenkov 2024-08-20 18:48:27 +03:00
parent 8ead0d74b5
commit a30cb92e47
2 changed files with 25 additions and 6 deletions

View file

@ -561,6 +561,7 @@ public class ValidationConfig {
ctx.addImdg(IMDGDistributedNames.Map_SDf54, sDf54Imdg);
ctx.addImdg(IMDGDistributedNames.Map_PaymentInstruction, pmtImdg);
ctx.addImdg(IMDGDistributedNames.Map_TradingClearingRegistry, imdgTradingClearingRegistry);
ctx.addImdg(IMDGDistributedNames.Map_TradingClearingRegistryList, imdgTradingClearingRegistryList);
return new ValidatorImpl<>(ctx,
Sdf55ValidationRule.Fields,
Sdf55ValidationRule.GenerationIdFound,

View file

@ -7,6 +7,7 @@ import ru.clearing.classes.statics.data.account.Account;
import ru.clearing.classes.statics.data.payment.PaymentInstruction;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
import ru.clearing.classes.statics.data.registry.TradingClearingRegistryList;
import ru.clearing.classes.statics.data.sdf.SDf54;
import ru.clearing.classes.statics.data.sdf.SDf55;
import ru.spcex.clearing.error.ClearingError;
@ -14,6 +15,7 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest;
import ru.spcex.clearing.service.AssetTrio;
import ru.spcex.clearing.service.registry.AssetTBFProcessing;
import ru.spcex.platform.enumeration.CurrencyCode;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
import ru.spcex.platform.utils.enumeration.EnumMessage;
@ -73,20 +75,36 @@ public enum Sdf55ValidationRule implements IValidationRule<ImdgValidationContext
TcrPresent() {
@Override
public Optional<EnumMessage> validate(ImdgValidationContext<StatementRequest> context) {
Imdg<TradingClearingRegistryList> tcrListImdg = context.obtainMap(IMDGDistributedNames.Map_TradingClearingRegistryList, TradingClearingRegistryList.class);
Imdg<TradingClearingRegistry> tcrImdg = context.obtainMap(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
PaymentInstruction pmt = context.getStoredObject(ValidationStored.Sdf55PaymentInstruction);
Long accCredId = pmt.getCreditLeg_accountId();
String creditCurrency = pmt.getCreditLeg_currencyCode();
Long addresseeId = pmt.getSenderId();
if (accCredId == null || addresseeId == null) {
return of(ClearingError.RecordNotFound, "TCR - no PI(id=%d)#CreditLeg_accountId/SenderId"
.formatted(pmt.getId()));
.formatted(pmt.getId()));
}
TradingClearingRegistry tcr = tcrImdg.getFirstObjectBySQL(
"moneyAccountId = '%d' and companyId = %d".formatted(accCredId, addresseeId)
);
TradingClearingRegistry tcr = null;
TradingClearingRegistryList tcrList;
String errMsg;
if (CurrencyCode.RUB.equalsByKey(creditCurrency)) {
errMsg = "TCR moneyAccountId = '%d' and companyId = %d".formatted(accCredId, addresseeId);
tcr = tcrImdg.getFirstObjectBySQL(
"moneyAccountId = '%d' and companyId = %d".formatted(accCredId, addresseeId));
} else {
errMsg = "TCR_LIST accountId = '%d' and companyId = %d".formatted(accCredId, addresseeId);
tcrList = tcrListImdg.getFirstObjectBySQL(
"accountId = '%d'".formatted(accCredId)
);
if (tcrList != null) {
tcr = tcrImdg.getFirstObjectBySQL(
"id = '%d' and companyId = %d".formatted(tcrList.getTradingClearingRegistryId(), addresseeId));
}
}
if (tcr == null) {
return of(ClearingError.RecordNotFound, "TCR moneyAccountId = '%d' and companyId = %d"
.formatted(accCredId, addresseeId));
return of(ClearingError.RecordNotFound, errMsg);
}
context.storeObject(ValidationStored.Sdf55Tcr, tcr);
return empty();