This commit is contained in:
parent
cc2f20de3c
commit
8079ec1fb3
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.SingleAssetResponse;
|
||||
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.registry.AssetTBFProcessing;
|
||||
import ru.spcex.clearing.service.registry.DmiService;
|
||||
import ru.spcex.clearing.service.schedule.TradingTimeService;
|
||||
import ru.spcex.clearing.service.validation.Sdf06NewValidationRule;
|
||||
|
|
@ -66,6 +68,7 @@ public class Sdf06Executor {
|
|||
private final KafkaSender kafkaSender;
|
||||
private final FilenameObtainer filenameObtainer;
|
||||
private final DmiService dmiService;
|
||||
private final AssetTBFProcessing assets;
|
||||
|
||||
private final static BigDecimal successResult = BigDecimal.ZERO;
|
||||
//идет сессия (не возвращаем такую ошибку)
|
||||
|
|
@ -87,7 +90,7 @@ public class Sdf06Executor {
|
|||
public Sdf06Executor(ImdgProvider imdgProvider,
|
||||
IMessageResolver messageResolver,
|
||||
@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.statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class);
|
||||
this.tradingTimeService = tradingTimeService;
|
||||
|
|
@ -102,6 +105,7 @@ public class Sdf06Executor {
|
|||
this.sdf07Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf07, SDf07.class);
|
||||
this.filenameObtainer = filenameObtainer;
|
||||
this.dmiService = dmiService;
|
||||
this.assets = assets;
|
||||
}
|
||||
|
||||
public void execute(BaseRequest<StatementRequest> systemRequest) {
|
||||
|
|
@ -160,6 +164,8 @@ public class Sdf06Executor {
|
|||
CurrencyCode.RUB.getKey(),
|
||||
safeBD(sDf06.getSum()),
|
||||
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;
|
||||
}
|
||||
|
|
@ -266,11 +272,16 @@ public class Sdf06Executor {
|
|||
Instant updatedTime = Instant.now();
|
||||
if (gatewayMsg.isApproved()) {
|
||||
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(),
|
||||
safeBD(sdf06.getSum()),
|
||||
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 {
|
||||
log.trace("statement.id={}, sdf07.id={}, sdf06.id={} rejected (by gateway answer)",
|
||||
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.importexport.SwtExporterRequest;
|
||||
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.schedule.TradingTimeService;
|
||||
import ru.spcex.clearing.service.validation.ValidationStored;
|
||||
|
|
@ -68,6 +69,7 @@ public class Sdf10Executor {
|
|||
private final TradingTimeService tradingTimeService;
|
||||
private final KafkaSender kafkaSender;
|
||||
private final SecuritySelector<Security> scrtSlct;
|
||||
private final AssetTBFProcessing assets;
|
||||
|
||||
private final static String OK = "OK";
|
||||
private final static String SYNTAX_ERROR = "Синтаксическая ошибка (файл сформирован неверно)";
|
||||
|
|
@ -88,7 +90,7 @@ public class Sdf10Executor {
|
|||
public Sdf10Executor(ImdgProvider imdgProvider,
|
||||
RegistryManager rgsMng, IMessageResolver messageResolver,
|
||||
@Qualifier("sdf10Validator") Function<SDf10, IValidator> sDf10Validator,
|
||||
TradingTimeService tradingTimeService, KafkaSender kafkaSender) {
|
||||
TradingTimeService tradingTimeService, KafkaSender kafkaSender, AssetTBFProcessing assets) {
|
||||
this.imdgProvider = imdgProvider;
|
||||
this.statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.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.plannerAllTodayImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PlannerAllToday, PlannerAllToday.class);
|
||||
this.scrtSlct = new SecuritySelector<>(imdgProvider, Security.class);
|
||||
this.assets = assets;
|
||||
}
|
||||
|
||||
public void execute(BaseRequest<StatementRequest> systemRequest) {
|
||||
|
|
@ -166,7 +169,11 @@ public class Sdf10Executor {
|
|||
SDf11 sDf11 = processedApproved(stmt, sDf10, now, sdf11GroupId);
|
||||
BigDecimal amount = InOutDirection.in.equalsByKey(stmt.getInOutDirection()) ?
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
@ -190,6 +197,7 @@ public class Sdf10Executor {
|
|||
return;
|
||||
}
|
||||
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) {
|
||||
|
|
@ -203,6 +211,7 @@ public class Sdf10Executor {
|
|||
return;
|
||||
}
|
||||
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) {
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
String securitySymbol,
|
||||
Long securityId,
|
||||
|
|
@ -244,6 +263,23 @@ public class AssetTBFProcessing {
|
|||
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) {
|
||||
return safeBD(registry.getBalance()).compareTo(safeBD(amount)) < 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue