DM*I поиск по TCR#id
This commit is contained in:
parent
2f0d91574c
commit
d41edf57ff
5 changed files with 57 additions and 42 deletions
|
|
@ -268,6 +268,7 @@ public class ValidationConfig {
|
||||||
Sdf06NewValidationRule.Fields,
|
Sdf06NewValidationRule.Fields,
|
||||||
Sdf06NewValidationRule.CompanySymbolAndCompanyPresent,
|
Sdf06NewValidationRule.CompanySymbolAndCompanyPresent,
|
||||||
Sdf06NewValidationRule.AccountPresent,
|
Sdf06NewValidationRule.AccountPresent,
|
||||||
|
Sdf06NewValidationRule.CompanyAndAccountMatch,
|
||||||
Sdf06NewValidationRule.Session,
|
Sdf06NewValidationRule.Session,
|
||||||
Sdf06NewValidationRule.Balance,
|
Sdf06NewValidationRule.Balance,
|
||||||
Sdf06NewValidationRule.TcrPresent
|
Sdf06NewValidationRule.TcrPresent
|
||||||
|
|
|
||||||
|
|
@ -161,9 +161,7 @@ public class Sdf06Executor {
|
||||||
requests.add(GatewayRequestCreator.gatewayRequestPart(stmt, company.getTradingCode(), tcr.getCode()));
|
requests.add(GatewayRequestCreator.gatewayRequestPart(stmt, company.getTradingCode(), tcr.getCode()));
|
||||||
} else {
|
} else {
|
||||||
processedApproved(stmt, sDf06, now, sdf07GroupId);
|
processedApproved(stmt, sDf06, now, sdf07GroupId);
|
||||||
dmiService.setProc(stmt.getAccountId(),
|
dmiService.setProc(tcr.getId(),
|
||||||
company.getId(),
|
|
||||||
tcr.getId(),
|
|
||||||
CurrencyCode.RUB.getKey(),
|
CurrencyCode.RUB.getKey(),
|
||||||
safeBD(sDf06.getSum()),
|
safeBD(sDf06.getSum()),
|
||||||
sDf06.getNumber());
|
sDf06.getNumber());
|
||||||
|
|
@ -261,9 +259,7 @@ 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(),
|
dmiService.setProc(searchTcrOnGatewayResponse(sdf06).map(SpcexObjectBase::getId).orElse(null),
|
||||||
stmt.getAddresseeId(),
|
|
||||||
searchTcrOnGatewayResponse(sdf06).map(SpcexObjectBase::getId).orElse(null),
|
|
||||||
CurrencyCode.RUB.getKey(),
|
CurrencyCode.RUB.getKey(),
|
||||||
safeBD(sdf06.getSum()),
|
safeBD(sdf06.getSum()),
|
||||||
sdf06.getNumber()
|
sdf06.getNumber()
|
||||||
|
|
|
||||||
|
|
@ -189,7 +189,7 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
|
||||||
statementDeb.map(SpcexObjectBase::getId).orElse(null),
|
statementDeb.map(SpcexObjectBase::getId).orElse(null),
|
||||||
statementCred.map(SpcexObjectBase::getId).orElse(null));
|
statementCred.map(SpcexObjectBase::getId).orElse(null));
|
||||||
|
|
||||||
Consumer<StmtCmpAcc> createRegistryIfNeeded = stmtCmpAcc -> {
|
Function<StmtCmpAcc, Optional<Long>> createRegistryIfNeeded = stmtCmpAcc -> {
|
||||||
Statement stmt = stmtCmpAcc.statement();
|
Statement stmt = stmtCmpAcc.statement();
|
||||||
Company company = stmtCmpAcc.company();
|
Company company = stmtCmpAcc.company();
|
||||||
Account account = stmtCmpAcc.account();
|
Account account = stmtCmpAcc.account();
|
||||||
|
|
@ -327,18 +327,20 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
|
||||||
amtCached.get().getTradingClearingRegistry()));
|
amtCached.get().getTradingClearingRegistry()));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
return Optional.ofNullable(amtCached.get().getTradingClearingRegistryId());
|
||||||
} else {
|
} else {
|
||||||
log.debug("statement.id={} activness validation failed {}", stmt.getId(), messageResolver.resolve(err.get()));
|
log.debug("statement.id={} activness validation failed {}", stmt.getId(), messageResolver.resolve(err.get()));
|
||||||
stmt.setErrorCodeId(err.get().getSubject().getId()); // fixme ErrorText insert
|
stmt.setErrorCodeId(err.get().getSubject().getId()); // fixme ErrorText insert
|
||||||
stmt.setOperationStatus(OperationStatus.Rejected.getKey());
|
stmt.setOperationStatus(OperationStatus.Rejected.getKey());
|
||||||
statementImdg.update(stmt);
|
statementImdg.update(stmt);
|
||||||
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Consumer<StmtCmpAcc> registersUpdate = stmtCmpAcc -> {
|
Consumer<StmtCmpAcc> registersUpdate = stmtCmpAcc -> {
|
||||||
Statement stmt = stmtCmpAcc.statement();
|
Statement stmt = stmtCmpAcc.statement();
|
||||||
Company cmp = stmtCmpAcc.company();
|
Company cmp = stmtCmpAcc.company();
|
||||||
Account acc = stmtCmpAcc.account();
|
Account acc = stmtCmpAcc.account();
|
||||||
createRegistryIfNeeded.accept(stmtCmpAcc);
|
Optional<Long> tcrId = createRegistryIfNeeded.apply(stmtCmpAcc);
|
||||||
if (accountIsAnlt(acc)) {
|
if (accountIsAnlt(acc)) {
|
||||||
AnltSearcher.AnltSearch searchResult = anltSearcher.loadByAnlt(stmt.getComment());
|
AnltSearcher.AnltSearch searchResult = anltSearcher.loadByAnlt(stmt.getComment());
|
||||||
if (searchResult.isFound()) {
|
if (searchResult.isFound()) {
|
||||||
|
|
@ -347,11 +349,12 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
|
||||||
stmt.getComment(),
|
stmt.getComment(),
|
||||||
searchResult.getAccount().getId(),
|
searchResult.getAccount().getId(),
|
||||||
searchResult.getCompany().getId());
|
searchResult.getCompany().getId());
|
||||||
createRegistryIfNeeded.accept(new StmtCmpAcc(stmt, searchResult.getCompany(), searchResult.getAccount()));
|
createRegistryIfNeeded.apply(new StmtCmpAcc(stmt, searchResult.getCompany(), searchResult.getAccount()));
|
||||||
dmiService.setOk(searchResult.getAccount().getId(),
|
if (OperationStatus.Executed.equalsByKey(stmt.getOperationStatus())) {
|
||||||
searchResult.getCompany().getId(),
|
dmiService.setOk(searchResult.getTcr().getId(),
|
||||||
CurrencyCode.RUB.getKey(),
|
CurrencyCode.RUB.getKey(),
|
||||||
sdf57.getDbfId().toString());
|
sdf57.getDbfId().toString());
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
log.debug("stmt.id={} comment='{}' error: {}. Operating through DMAU registry",
|
log.debug("stmt.id={} comment='{}' error: {}. Operating through DMAU registry",
|
||||||
stmt.getId(),
|
stmt.getId(),
|
||||||
|
|
@ -382,11 +385,16 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
|
||||||
});
|
});
|
||||||
//DMAU подразумевает увеличение остатка поля balance и credit registry.code=DMAU
|
//DMAU подразумевает увеличение остатка поля balance и credit registry.code=DMAU
|
||||||
}
|
}
|
||||||
} else {
|
} else if (OperationStatus.Executed.equalsByKey(stmt.getOperationStatus())) {
|
||||||
dmiService.setOk(acc.getId(),
|
if (tcrId.isPresent()) {
|
||||||
cmp.getId(),
|
dmiService.setOk(tcrId.get(),
|
||||||
CurrencyCode.RUB.getKey(),
|
CurrencyCode.RUB.getKey(),
|
||||||
sdf57.getDbfId().toString());
|
sdf57.getDbfId().toString());
|
||||||
|
} else {
|
||||||
|
log.error("stmt.id={} operationStatus={} but couldn't extract TCR.id for DM*I update",
|
||||||
|
stmt.getId(),
|
||||||
|
stmt.getOperationStatus());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
statementDeb.map(stmt -> new StmtCmpAcc(stmt, companyDeb, accountDeb)).ifPresent(registersUpdate);
|
statementDeb.map(stmt -> new StmtCmpAcc(stmt, companyDeb, accountDeb)).ifPresent(registersUpdate);
|
||||||
|
|
|
||||||
|
|
@ -31,43 +31,39 @@ public class DmiService {
|
||||||
this.rgsMng = rgsMng;
|
this.rgsMng = rgsMng;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setProc(Long accountId,
|
public void setProc(Long tcrId,
|
||||||
Long companyId,
|
|
||||||
Long tcrId,
|
|
||||||
String securitySymbol,
|
String securitySymbol,
|
||||||
BigDecimal balance,
|
BigDecimal balance,
|
||||||
BigDecimal contract) {
|
BigDecimal contract) {
|
||||||
findDmi(companyId, accountId, securitySymbol, contract.toString()).ifPresentOrElse(d__i -> {
|
findDmi(tcrId, securitySymbol, contract.toString()).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, balance, contract.toString()));
|
}, () -> createDmi(tcrId, securitySymbol, balance, contract.toString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void setOk(Long accountId,
|
public void setOk(Long tcrId,
|
||||||
Long companyId,
|
|
||||||
String securitySymbol,
|
String securitySymbol,
|
||||||
String contract) {
|
String contract) {
|
||||||
findDmi(companyId, accountId, securitySymbol, contract).ifPresentOrElse(d__i -> {
|
findDmi(tcrId, securitySymbol, contract).ifPresentOrElse(d__i -> {
|
||||||
d__i.setRegistryStatus(RegistryStatus.OK.getKey());
|
d__i.setRegistryStatus(RegistryStatus.OK.getKey());
|
||||||
d__i.setUpdated(Instant.now());
|
d__i.setUpdated(Instant.now());
|
||||||
log.trace("updating {} status to {}", d__i.getRegistryCode(), d__i.getRegistryStatus());
|
log.trace("updating {} status to {}", d__i.getRegistryCode(), d__i.getRegistryStatus());
|
||||||
rgsImdg.update(d__i);
|
rgsImdg.update(d__i);
|
||||||
}, () -> {
|
}, () -> {
|
||||||
log.trace("didn't find DM*I by companyId={} accountId={} securitySymbol={} contract={}",
|
log.trace("didn't find DM*I by tcr.id={} securitySymbol={} contract={}",
|
||||||
companyId, accountId, securitySymbol, contract);
|
tcrId, securitySymbol, contract);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private Optional<Registry> findDmi(Long companyId, Long accountId, String securitySymbol, String contract) {
|
private Optional<Registry> findDmi(Long tcrId, String securitySymbol, String contract) {
|
||||||
ImdgPredicateBuilder pb = rgsImdg.predicateBuilder();
|
ImdgPredicateBuilder pb = rgsImdg.predicateBuilder();
|
||||||
RegistryTradingParams rgsCde = RegistryTradingParams.D__I;
|
RegistryTradingParams rgsCde = RegistryTradingParams.D__I;
|
||||||
ImdgPredicate prdct = pb.and(
|
ImdgPredicate prdct = pb.and(
|
||||||
pb.sql(RegistryCodeSqlBuilder.getInstance(rgsCde).build()),
|
pb.sql(RegistryCodeSqlBuilder.getInstance(rgsCde).build()),
|
||||||
pb.equals("companyId", companyId),
|
pb.equals("tradingClearingRegistryId", tcrId),
|
||||||
pb.equals("accountId", accountId),
|
|
||||||
pb.equals("securitySymbol", securitySymbol),
|
pb.equals("securitySymbol", securitySymbol),
|
||||||
pb.equals("contract", contract)
|
pb.equals("contract", contract)
|
||||||
);
|
);
|
||||||
|
|
@ -76,22 +72,24 @@ public class DmiService {
|
||||||
return Optional.ofNullable(d__i);
|
return Optional.ofNullable(d__i);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createDmi(Long companyId,
|
private void createDmi(Long tcrId,
|
||||||
Long tcrId,
|
|
||||||
String securitySymbol,
|
String securitySymbol,
|
||||||
BigDecimal summ,
|
BigDecimal summ,
|
||||||
String outDocument) {
|
String outDocument) {
|
||||||
RegistryTradingParams rgsCde = RegistryTradingParams.AM_T;
|
RegistryTradingParams rgsCde = RegistryTradingParams.AM_T;
|
||||||
Optional<Registry> am_t = rgsMng.findRelatedAsset(tcrId,
|
ImdgPredicateBuilder pb = rgsImdg.predicateBuilder();
|
||||||
companyId,
|
ImdgPredicate prdct = pb.and(
|
||||||
securitySymbol,
|
pb.equals("tradingClearingRegistryId", tcrId),
|
||||||
rgsCde);
|
pb.equals("securitySymbol", securitySymbol),
|
||||||
if (am_t.isEmpty()) {
|
pb.sql(RegistryCodeSqlBuilder.getInstance(rgsCde).build())
|
||||||
log.error("AM*T not found for tcr.id={} company.id={} security.symbol={}",
|
);
|
||||||
tcrId, companyId, securitySymbol);
|
Registry am_t = rgsImdg.getSingleObjectByPredicate(prdct);
|
||||||
return;// Optional.empty();
|
if (am_t == null) {
|
||||||
|
log.error("AM*T not found for tcr.id={} security.symbol={}",
|
||||||
|
tcrId, securitySymbol);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
Registry rgsD = am_t.get().clone();
|
Registry rgsD = am_t.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));
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ import ru.spcex.platform.utils.validation.IValidationRule;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
|
@ -84,6 +85,17 @@ public enum Sdf06NewValidationRule implements IValidationRule<ImdgValidationCont
|
||||||
return empty();
|
return empty();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
CompanyAndAccountMatch() {
|
||||||
|
@Override
|
||||||
|
public Optional<EnumMessage> validate(ImdgValidationContext<SDf06> context) {
|
||||||
|
Company company = context.getStoredObject(ValidationStored.Sdf06Company);
|
||||||
|
Account account = context.getStoredObject(ValidationStored.Sdf06Account);
|
||||||
|
if (!Objects.equals(account.getCompanyId(), company.getId())) {
|
||||||
|
return of(ClearingError.WrongField, "account/tradingCode");
|
||||||
|
}
|
||||||
|
return empty();
|
||||||
|
}
|
||||||
|
},
|
||||||
Session() {
|
Session() {
|
||||||
@Override
|
@Override
|
||||||
public Optional<EnumMessage> validate(ImdgValidationContext<SDf06> context) {
|
public Optional<EnumMessage> validate(ImdgValidationContext<SDf06> context) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue