SDF20 поиск DS*T

This commit is contained in:
ialbert 2023-08-25 17:26:44 +03:00
parent adc20ee46b
commit 8b54b86ae9
2 changed files with 19 additions and 5 deletions

View file

@ -122,6 +122,9 @@ public class Sdf20Executor {
ds_t.setRegistryDesignation(RegistryDesignation.D.getKey());
ds_t.setRegistryCode(RegistryUtil.clearingCode(ds_t));
rgsImdg.insert(ds_t);
} else {
log.debug("DS*T.id={} found for sdf20.id={}", ds_t.getId(), sDf20.getId());
return;
}
Registry as_t = assets.a__t();

View file

@ -15,6 +15,9 @@ import ru.spcex.clearing.service.registry.RegistryManager;
import ru.spcex.platform.enumeration.AccountType;
import ru.spcex.platform.enumeration.OperationCode;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
import ru.spcex.platform.imdg.api.predicate.specific.SecuritySelector;
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
import ru.spcex.platform.utils.enumeration.EnumMessage;
@ -128,16 +131,24 @@ public enum Sdf20ValidationRule implements IValidationRule<ImdgValidationContext
@Override
public Optional<EnumMessage> validate(ImdgValidationContext<SDf20> context) {
SDf20 sDf20 = context.getValidatedObject();
String inDocument = sDf20.getInDocument();
String transactionNumber = sDf20.getTransactionNumber();
String security = sDf20.getSecurity();
Account acc = context.getStoredObject(ValidationStored.Sdf20Account);
if (TextUtil.isEmpty(inDocument) || TextUtil.isEmpty(security) || acc == null) {
if (TextUtil.isEmpty(transactionNumber) || TextUtil.isEmpty(security) || acc == null) {
return of(ClearingError.RecordNotFound, "DS*T");
}
Imdg<Registry> rgsImdg = context.obtainMap(IMDGDistributedNames.Map_Registry, Registry.class);
RegistryManager rgsMng = new RegistryManager(rgsImdg);
Optional<Registry> ds_t = rgsMng.searchByAccSecContract(acc.getId(), security, inDocument, DS_T);
ds_t.ifPresent(registry -> context.storeObject(ValidationStored.Sdf20Dst, registry));
ImdgPredicateBuilder pb = rgsImdg.predicateBuilder();
ImdgPredicate dstPrdct = pb.and(
pb.sql(RegistryCodeSqlBuilder.getInstance(DS_T).build()),
pb.equals("accountId", acc.getId()),
pb.equals("securitySymbol", security),
pb.equals("comment", transactionNumber)
);
Registry ds_t = rgsImdg.getFirstObjectByPredicate(dstPrdct);
if (ds_t != null) {
context.storeObject(ValidationStored.Sdf20Dst, ds_t);
}
return empty();
}
},