D**I
This commit is contained in:
parent
017f54a559
commit
0933657ea3
2 changed files with 46 additions and 6 deletions
|
|
@ -22,18 +22,23 @@ import ru.spcex.clearing.platform.messaging.domain.cud.clearing.AssetOperationRe
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.gateway.AssetOperationApprovalRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.gateway.AssetOperationApprovalRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.gateway.SingleAssetResponse;
|
import ru.spcex.clearing.platform.messaging.domain.cud.gateway.SingleAssetResponse;
|
||||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||||
|
import ru.spcex.clearing.service.registry.DmiService;
|
||||||
import ru.spcex.clearing.service.schedule.TradingTimeService;
|
import ru.spcex.clearing.service.schedule.TradingTimeService;
|
||||||
|
import ru.spcex.clearing.service.validation.Sdf06NewValidationRule;
|
||||||
import ru.spcex.clearing.service.validation.ValidationStored;
|
import ru.spcex.clearing.service.validation.ValidationStored;
|
||||||
|
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||||
import ru.spcex.platform.enumeration.*;
|
import ru.spcex.platform.enumeration.*;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.api.ImdgId;
|
import ru.spcex.platform.imdg.api.ImdgId;
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||||
|
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
||||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||||
import ru.spcex.platform.utils.number.BigDecimalUtil;
|
import ru.spcex.platform.utils.number.BigDecimalUtil;
|
||||||
import ru.spcex.platform.utils.text.TextUtil;
|
import ru.spcex.platform.utils.text.TextUtil;
|
||||||
import ru.spcex.platform.utils.validation.IValidator;
|
import ru.spcex.platform.utils.validation.IValidator;
|
||||||
|
import ru.spcex.platform.utils.validation.ValidatorImpl;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
|
@ -50,6 +55,8 @@ public class Sdf06Executor {
|
||||||
|
|
||||||
private final Imdg<Statement> statementImdg;
|
private final Imdg<Statement> statementImdg;
|
||||||
private final ImdgProvider imdgProvider;
|
private final ImdgProvider imdgProvider;
|
||||||
|
private final Imdg<Account> accImdg;
|
||||||
|
private final Imdg<TradingClearingRegistry> tcrImdg;
|
||||||
private final Imdg<SDf06> sdf06Imdg;
|
private final Imdg<SDf06> sdf06Imdg;
|
||||||
private final Imdg<SDf07> sdf07Imdg;
|
private final Imdg<SDf07> sdf07Imdg;
|
||||||
private final ImdgId idGenerator;
|
private final ImdgId idGenerator;
|
||||||
|
|
@ -58,6 +65,7 @@ public class Sdf06Executor {
|
||||||
private final TradingTimeService tradingTimeService;
|
private final TradingTimeService tradingTimeService;
|
||||||
private final KafkaSender kafkaSender;
|
private final KafkaSender kafkaSender;
|
||||||
private final FilenameObtainer filenameObtainer;
|
private final FilenameObtainer filenameObtainer;
|
||||||
|
private final DmiService dmiService;
|
||||||
|
|
||||||
private final static BigDecimal successResult = BigDecimal.ZERO;
|
private final static BigDecimal successResult = BigDecimal.ZERO;
|
||||||
//ошибка проверок
|
//ошибка проверок
|
||||||
|
|
@ -77,7 +85,7 @@ public class Sdf06Executor {
|
||||||
public Sdf06Executor(ImdgProvider imdgProvider,
|
public Sdf06Executor(ImdgProvider imdgProvider,
|
||||||
IMessageResolver messageResolver,
|
IMessageResolver messageResolver,
|
||||||
@Qualifier("sdf06ValidatorNew") Function<SDf06, IValidator> sDf06Validator,
|
@Qualifier("sdf06ValidatorNew") Function<SDf06, IValidator> sDf06Validator,
|
||||||
TradingTimeService tradingTimeService, KafkaSender kafkaSender, FilenameObtainer filenameObtainer) {
|
TradingTimeService tradingTimeService, KafkaSender kafkaSender, FilenameObtainer filenameObtainer, DmiService dmiService) {
|
||||||
this.imdgProvider = imdgProvider;
|
this.imdgProvider = imdgProvider;
|
||||||
this.statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class);
|
this.statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class);
|
||||||
this.tradingTimeService = tradingTimeService;
|
this.tradingTimeService = tradingTimeService;
|
||||||
|
|
@ -85,9 +93,12 @@ public class Sdf06Executor {
|
||||||
this.messageResolver = messageResolver;
|
this.messageResolver = messageResolver;
|
||||||
this.sDf06Validator = sDf06Validator;
|
this.sDf06Validator = sDf06Validator;
|
||||||
this.kafkaSender = kafkaSender;
|
this.kafkaSender = kafkaSender;
|
||||||
|
this.accImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class);
|
||||||
|
this.tcrImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
|
||||||
this.sdf06Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf06, SDf06.class);
|
this.sdf06Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf06, SDf06.class);
|
||||||
this.sdf07Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf07, SDf07.class);
|
this.sdf07Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf07, SDf07.class);
|
||||||
this.filenameObtainer = filenameObtainer;
|
this.filenameObtainer = filenameObtainer;
|
||||||
|
this.dmiService = dmiService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void execute(BaseRequest<StatementRequest> systemRequest) {
|
public void execute(BaseRequest<StatementRequest> systemRequest) {
|
||||||
|
|
@ -146,6 +157,11 @@ public class Sdf06Executor {
|
||||||
requests.add(requestFromStatement(stmt, company.getTradingCode(), tcr.getCode()));
|
requests.add(requestFromStatement(stmt, company.getTradingCode(), tcr.getCode()));
|
||||||
} else {
|
} else {
|
||||||
processedApproved(stmt, sDf06, now, sdf07GroupId);
|
processedApproved(stmt, sDf06, now, sdf07GroupId);
|
||||||
|
dmiService.setProc(stmt.getAccountId(),
|
||||||
|
company.getId(),
|
||||||
|
tcr.getId(),
|
||||||
|
CurrencyCode.RUB.getKey(),
|
||||||
|
stmt.getAmount());
|
||||||
sdf07WasCreated = true;
|
sdf07WasCreated = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -240,6 +256,12 @@ public class Sdf06Executor {
|
||||||
Instant updatedTime = Instant.now();
|
Instant updatedTime = Instant.now();
|
||||||
if (gatewayMsg.isApproved()) {
|
if (gatewayMsg.isApproved()) {
|
||||||
processedApproved(stmt, sdf06, updatedTime);
|
processedApproved(stmt, sdf06, updatedTime);
|
||||||
|
dmiService.setProc(stmt.getAccountId(),
|
||||||
|
stmt.getAddresseeId(),
|
||||||
|
searchTcrOnGatewayResponse(sdf06).map(SpcexObjectBase::getId).orElse(null),
|
||||||
|
CurrencyCode.RUB.getKey(),
|
||||||
|
stmt.getAmount()
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
log.trace("statement.id={}, sdf07.id={}, sdf06.id={} rejected (by gateway answer)",
|
log.trace("statement.id={}, sdf07.id={}, sdf06.id={} rejected (by gateway answer)",
|
||||||
statementId,
|
statementId,
|
||||||
|
|
@ -327,4 +349,18 @@ public class Sdf06Executor {
|
||||||
req.setDirection(stmt.getInOutDirection());
|
req.setDirection(stmt.getInOutDirection());
|
||||||
return req;
|
return req;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Optional<TradingClearingRegistry> searchTcrOnGatewayResponse(SDf06 sdf06) {
|
||||||
|
ImdgValidationContext<SDf06> ctx = new ImdgValidationContext<>();
|
||||||
|
ctx.addImdg(IMDGDistributedNames.Map_Account, accImdg);
|
||||||
|
ctx.addImdg(IMDGDistributedNames.Map_TradingClearingRegistry, tcrImdg);
|
||||||
|
ctx.setValidatedObject(sdf06);
|
||||||
|
ValidatorImpl<ImdgValidationContext<SDf06>> v = new ValidatorImpl<>(ctx,
|
||||||
|
Sdf06NewValidationRule.AccountPresent, Sdf06NewValidationRule.TcrPresent);
|
||||||
|
Optional<EnumMessage> err = v.tillFirstError();
|
||||||
|
if (err.isEmpty()) {
|
||||||
|
return Optional.ofNullable(v.getStored(ValidationStored.Sdf06Tcr));
|
||||||
|
}
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,13 +31,17 @@ public class DmiService {
|
||||||
this.rgsMng = rgsMng;
|
this.rgsMng = rgsMng;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setProc(Long accountId, Long companyId, Long tcrId, String securitySymbol) {
|
public void setProc(Long accountId,
|
||||||
|
Long companyId,
|
||||||
|
Long tcrId,
|
||||||
|
String securitySymbol,
|
||||||
|
BigDecimal balance) {
|
||||||
findDmi(companyId, accountId, securitySymbol).ifPresentOrElse(d__i -> {
|
findDmi(companyId, accountId, securitySymbol).ifPresentOrElse(d__i -> {
|
||||||
d__i.setRegistryStatus(RegistryStatus.PROC.getKey());
|
d__i.setRegistryStatus(RegistryStatus.PROC.getKey());
|
||||||
d__i.setUpdated(Instant.now());
|
d__i.setUpdated(Instant.now());
|
||||||
log.trace("updating D**I status to {}", d__i.getRegistryStatus());
|
log.trace("updating D**I status to {}", d__i.getRegistryStatus());
|
||||||
rgsImdg.update(d__i);
|
rgsImdg.update(d__i);
|
||||||
}, () -> createDmi(companyId, tcrId, securitySymbol, BigDecimal.ZERO, "outDocument"));
|
}, () -> createDmi(companyId, tcrId, securitySymbol, balance, "outDocument"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -70,16 +74,16 @@ public class DmiService {
|
||||||
BigDecimal summ,
|
BigDecimal summ,
|
||||||
String outDocument) {
|
String outDocument) {
|
||||||
RegistryTradingParams rgsCde = RegistryTradingParams.AM_T;
|
RegistryTradingParams rgsCde = RegistryTradingParams.AM_T;
|
||||||
Optional<Registry> a__t = rgsMng.findRelatedAsset(tcrId,
|
Optional<Registry> am_t = rgsMng.findRelatedAsset(tcrId,
|
||||||
companyId,
|
companyId,
|
||||||
securitySymbol,
|
securitySymbol,
|
||||||
rgsCde);
|
rgsCde);
|
||||||
if (a__t.isEmpty()) {
|
if (am_t.isEmpty()) {
|
||||||
log.error("{} not found for tcr.id={} company.id={} security.symbol={}",
|
log.error("{} not found for tcr.id={} company.id={} security.symbol={}",
|
||||||
rgsCde, tcrId, companyId, securitySymbol);
|
rgsCde, tcrId, companyId, securitySymbol);
|
||||||
return;// Optional.empty();
|
return;// Optional.empty();
|
||||||
}
|
}
|
||||||
Registry rgsD = a__t.get().clone();
|
Registry rgsD = am_t.get().clone();
|
||||||
rgsD.setRegistryDesignation(RegistryDesignation.D.getKey());
|
rgsD.setRegistryDesignation(RegistryDesignation.D.getKey());
|
||||||
rgsD.setRegistryUnit(RegistryUnit.I.getKey());
|
rgsD.setRegistryUnit(RegistryUnit.I.getKey());
|
||||||
rgsD.setRegistryCode(RegistryUtil.clearingCode(rgsD));
|
rgsD.setRegistryCode(RegistryUtil.clearingCode(rgsD));
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue