This commit is contained in:
parent
ec9586eef5
commit
efe5744e16
3 changed files with 60 additions and 4 deletions
|
|
@ -22,7 +22,9 @@ 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.AssetTrio;
|
||||||
import ru.spcex.clearing.service.integration.GatewayRequestCreator;
|
import ru.spcex.clearing.service.integration.GatewayRequestCreator;
|
||||||
|
import ru.spcex.clearing.service.registry.AssetTBFProcessing;
|
||||||
import ru.spcex.clearing.service.registry.DmiService;
|
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.Sdf06NewValidationRule;
|
||||||
|
|
@ -66,6 +68,7 @@ public class Sdf06Executor {
|
||||||
private final KafkaSender kafkaSender;
|
private final KafkaSender kafkaSender;
|
||||||
private final FilenameObtainer filenameObtainer;
|
private final FilenameObtainer filenameObtainer;
|
||||||
private final DmiService dmiService;
|
private final DmiService dmiService;
|
||||||
|
private final AssetTBFProcessing assets;
|
||||||
|
|
||||||
private final static BigDecimal successResult = BigDecimal.ZERO;
|
private final static BigDecimal successResult = BigDecimal.ZERO;
|
||||||
//идет сессия (не возвращаем такую ошибку)
|
//идет сессия (не возвращаем такую ошибку)
|
||||||
|
|
@ -87,7 +90,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, DmiService dmiService) {
|
TradingTimeService tradingTimeService, KafkaSender kafkaSender, FilenameObtainer filenameObtainer, DmiService dmiService, AssetTBFProcessing assets) {
|
||||||
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;
|
||||||
|
|
@ -102,6 +105,7 @@ public class Sdf06Executor {
|
||||||
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;
|
this.dmiService = dmiService;
|
||||||
|
this.assets = assets;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void execute(BaseRequest<StatementRequest> systemRequest) {
|
public void execute(BaseRequest<StatementRequest> systemRequest) {
|
||||||
|
|
@ -160,6 +164,8 @@ public class Sdf06Executor {
|
||||||
CurrencyCode.RUB.getKey(),
|
CurrencyCode.RUB.getKey(),
|
||||||
safeBD(sDf06.getSum()),
|
safeBD(sDf06.getSum()),
|
||||||
sDf06.getNumber().toString());
|
sDf06.getNumber().toString());
|
||||||
|
Optional<AssetTrio> asts = assets.searchMoneyByAccAndCompany(company.getId(), tcr.getMoneyAccountId());
|
||||||
|
asts.ifPresent(ast -> assets.process(ast.a__b(), ast.a__t(), ast.a__f(), BigDecimal.ZERO));
|
||||||
}
|
}
|
||||||
sdf07WasCreated = true;
|
sdf07WasCreated = true;
|
||||||
}
|
}
|
||||||
|
|
@ -266,11 +272,16 @@ 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.setProcContract(searchTcrOnGatewayResponse(sdf06).map(SpcexObjectBase::getId).orElse(null),
|
Optional<TradingClearingRegistry> tcr = searchTcrOnGatewayResponse(sdf06);
|
||||||
|
dmiService.setProcContract(tcr.map(SpcexObjectBase::getId).orElse(null),
|
||||||
CurrencyCode.RUB.getKey(),
|
CurrencyCode.RUB.getKey(),
|
||||||
safeBD(sdf06.getSum()),
|
safeBD(sdf06.getSum()),
|
||||||
sdf06.getNumber().toString()
|
sdf06.getNumber().toString()
|
||||||
);
|
);
|
||||||
|
if (tcr.isPresent()) {
|
||||||
|
Optional<AssetTrio> asts = assets.searchMoneyByAccAndCompany(tcr.get().getCompanyId(), tcr.get().getMoneyAccountId());
|
||||||
|
asts.ifPresent(a -> assets.process(a.a__b(), a.a__t(), a.a__f(), BigDecimal.ZERO));
|
||||||
|
}
|
||||||
} 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,
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ import ru.spcex.clearing.platform.messaging.domain.cud.gateway.AssetOperationApp
|
||||||
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.domain.cud.importexport.SwtExporterRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.importexport.SwtExporterRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||||
|
import ru.spcex.clearing.service.registry.AssetTBFProcessing;
|
||||||
import ru.spcex.clearing.service.registry.RegistryManager;
|
import ru.spcex.clearing.service.registry.RegistryManager;
|
||||||
import ru.spcex.clearing.service.schedule.TradingTimeService;
|
import ru.spcex.clearing.service.schedule.TradingTimeService;
|
||||||
import ru.spcex.clearing.service.validation.ValidationStored;
|
import ru.spcex.clearing.service.validation.ValidationStored;
|
||||||
|
|
@ -68,6 +69,7 @@ public class Sdf10Executor {
|
||||||
private final TradingTimeService tradingTimeService;
|
private final TradingTimeService tradingTimeService;
|
||||||
private final KafkaSender kafkaSender;
|
private final KafkaSender kafkaSender;
|
||||||
private final SecuritySelector<Security> scrtSlct;
|
private final SecuritySelector<Security> scrtSlct;
|
||||||
|
private final AssetTBFProcessing assets;
|
||||||
|
|
||||||
private final static String OK = "OK";
|
private final static String OK = "OK";
|
||||||
private final static String SYNTAX_ERROR = "Синтаксическая ошибка (файл сформирован неверно)";
|
private final static String SYNTAX_ERROR = "Синтаксическая ошибка (файл сформирован неверно)";
|
||||||
|
|
@ -88,7 +90,7 @@ public class Sdf10Executor {
|
||||||
public Sdf10Executor(ImdgProvider imdgProvider,
|
public Sdf10Executor(ImdgProvider imdgProvider,
|
||||||
RegistryManager rgsMng, IMessageResolver messageResolver,
|
RegistryManager rgsMng, IMessageResolver messageResolver,
|
||||||
@Qualifier("sdf10Validator") Function<SDf10, IValidator> sDf10Validator,
|
@Qualifier("sdf10Validator") Function<SDf10, IValidator> sDf10Validator,
|
||||||
TradingTimeService tradingTimeService, KafkaSender kafkaSender) {
|
TradingTimeService tradingTimeService, KafkaSender kafkaSender, AssetTBFProcessing assets) {
|
||||||
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.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||||
|
|
@ -102,6 +104,7 @@ public class Sdf10Executor {
|
||||||
this.sdf11Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf11, SDf11.class);
|
this.sdf11Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf11, SDf11.class);
|
||||||
this.plannerAllTodayImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PlannerAllToday, PlannerAllToday.class);
|
this.plannerAllTodayImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PlannerAllToday, PlannerAllToday.class);
|
||||||
this.scrtSlct = new SecuritySelector<>(imdgProvider, Security.class);
|
this.scrtSlct = new SecuritySelector<>(imdgProvider, Security.class);
|
||||||
|
this.assets = assets;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void execute(BaseRequest<StatementRequest> systemRequest) {
|
public void execute(BaseRequest<StatementRequest> systemRequest) {
|
||||||
|
|
@ -166,7 +169,11 @@ public class Sdf10Executor {
|
||||||
SDf11 sDf11 = processedApproved(stmt, sDf10, now, sdf11GroupId);
|
SDf11 sDf11 = processedApproved(stmt, sDf10, now, sdf11GroupId);
|
||||||
BigDecimal amount = InOutDirection.in.equalsByKey(stmt.getInOutDirection()) ?
|
BigDecimal amount = InOutDirection.in.equalsByKey(stmt.getInOutDirection()) ?
|
||||||
stmt.getAmount() : safeBD(stmt.getAmount()).negate();
|
stmt.getAmount() : safeBD(stmt.getAmount()).negate();
|
||||||
createDs_iWithoutGateway(tcr.getId(), company.getId(), security.getSecuritySymbol(), amount, sDf10.getOutDocument());
|
createDs_iWithoutGateway(tcr.getId(),
|
||||||
|
company.getId(),
|
||||||
|
security.getSecuritySymbol(),
|
||||||
|
amount,
|
||||||
|
sDf10.getOutDocument());
|
||||||
sdf11WasCreated = true;
|
sdf11WasCreated = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -190,6 +197,7 @@ public class Sdf10Executor {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
createDs_i(as_t.get(), summ, outDocument);
|
createDs_i(as_t.get(), summ, outDocument);
|
||||||
|
assets.processByA__t(as_t.get(), BigDecimal.ZERO);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createDs_iWithoutGateway(Long tcrId, Long companyId, String securitySymobl, BigDecimal summ, String outDocument) {
|
private void createDs_iWithoutGateway(Long tcrId, Long companyId, String securitySymobl, BigDecimal summ, String outDocument) {
|
||||||
|
|
@ -203,6 +211,7 @@ public class Sdf10Executor {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
createDs_i(as_t.get(), summ, outDocument);
|
createDs_i(as_t.get(), summ, outDocument);
|
||||||
|
assets.processByA__t(as_t.get(), BigDecimal.ZERO);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createDs_i(Registry as_t, BigDecimal summ, String outDocument) {
|
private void createDs_i(Registry as_t, BigDecimal summ, String outDocument) {
|
||||||
|
|
|
||||||
|
|
@ -134,6 +134,25 @@ public class AssetTBFProcessing {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Optional<AssetTrio> processByA__t(Registry a__t, BigDecimal sum) {
|
||||||
|
Optional<Registry> a__b = rgsMng.findRegByUnit(a__t.getCompanyId(),
|
||||||
|
a__t.getAccountId(),
|
||||||
|
a__t.getContract(),
|
||||||
|
a__t,
|
||||||
|
RegistryUnit.B);
|
||||||
|
Optional<Registry> a__f = rgsMng.findRegByUnit(a__t.getCompanyId(),
|
||||||
|
a__t.getAccountId(),
|
||||||
|
a__t.getContract(),
|
||||||
|
a__t,
|
||||||
|
RegistryUnit.F);
|
||||||
|
if (a__b.isPresent() && a__f.isPresent()) {
|
||||||
|
process(a__b.get(), a__t, a__f.get(), sum);
|
||||||
|
return Optional.of(new AssetTrio(a__t, a__b.get(), a__f.get()));
|
||||||
|
} else {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public AssetTrio createSAssets(Account acc,
|
public AssetTrio createSAssets(Account acc,
|
||||||
String securitySymbol,
|
String securitySymbol,
|
||||||
Long securityId,
|
Long securityId,
|
||||||
|
|
@ -244,6 +263,23 @@ public class AssetTBFProcessing {
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Optional<AssetTrio> searchSecurityByAccAndCompany(Long companyId, Long accountId, String securitySymbol) {
|
||||||
|
ImdgPredicateBuilder pb = rgsImdg.predicateBuilder();
|
||||||
|
Function<RegistryTradingParams, ImdgPredicate> prdct = rgsCode -> pb.and(
|
||||||
|
pb.sql(RegistryCodeSqlBuilder.getInstance(rgsCode).build()),
|
||||||
|
pb.equals("companyId", companyId),
|
||||||
|
pb.equals("accountId", accountId),
|
||||||
|
pb.equals("securitySymbol", securitySymbol)
|
||||||
|
);
|
||||||
|
Registry amf = rgsImdg.getFirstObjectByPredicate(prdct.apply(AS_F));
|
||||||
|
Registry amb = rgsImdg.getFirstObjectByPredicate(prdct.apply(AS_B));
|
||||||
|
Registry amt = rgsImdg.getFirstObjectByPredicate(prdct.apply(AS_T));
|
||||||
|
if (amf != null && amb != null && amt != null) {
|
||||||
|
return Optional.of(new AssetTrio(amf, amb, amt));
|
||||||
|
}
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
public boolean insufficientBalance(Registry registry, BigDecimal amount) {
|
public boolean insufficientBalance(Registry registry, BigDecimal amount) {
|
||||||
return safeBD(registry.getBalance()).compareTo(safeBD(amount)) < 0;
|
return safeBD(registry.getBalance()).compareTo(safeBD(amount)) < 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue