This commit is contained in:
akulikov 2023-11-16 16:16:35 +03:00
parent 4581592380
commit 939ea451a1
3 changed files with 50 additions and 42 deletions

View file

@ -93,6 +93,49 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams, KSRe
executions.addAll(executionDeposits); executions.addAll(executionDeposits);
executions.addAll(executionFonds); executions.addAll(executionFonds);
Map<ExecutionKey, String> statusForExecution = new HashMap<>();
executions.forEach(execution -> {
if (Set.of("S", "SELL").contains(execution.getSide())) {
String status = "";
if (execution.getCoverageStatus() != null) {
Long groupId = execution.getExchangeExecutionId();
String coverageStatus = execution.getCoverageStatus().toUpperCase();
CoverageStatus coverage = IEnumKey.getEnumByKey(CoverageStatus.class, coverageStatus);
// Есть 2 пары Execution, SELL и BUY, статус определяем заранее по SELL и проставляем в BUY
if (coverage == CoverageStatus.DEND) {
if (execution instanceof ExecutionFond) {
ImdgPredicateBuilder pbRegistry = registryImdg.predicateBuilder();
String registryPredicateStr = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams._S_T).build();
Collection<Registry> registryCollection = registryImdg.getCollectionObjectsByPredicate(
pbRegistry.and(
pbRegistry.equals("groupId", groupId),
pbRegistry.equals("companyId", execution.getCompanyId()),
pbRegistry.in("registryStatus",
RegistryStatus.NACC.getKey(),
RegistryStatus.NACK.getKey(),
RegistryStatus.FAIL.getKey(),
RegistryStatus.UNCV.getKey()),
pbRegistry.sql(registryPredicateStr)
)
);
if (registryCollection.isEmpty()) {
status = null;
} else {
Registry registry = registryCollection.iterator().next();
RegistryStatus registryStatus = IEnumKey.getEnumByKey(RegistryStatus.class, registry.getRegistryStatus());
if (registryStatus == RegistryStatus.NACK || registryStatus == RegistryStatus.UNCV) {
status = "3";
} else if (registryStatus == RegistryStatus.NACC || registryStatus == RegistryStatus.FAIL) {
status = "2";
}
}
}
statusForExecution.put(new ExecutionKey(groupId, execution.getSessionId()), status);
}
}
}
});
rows = new ArrayList<>(executions.size()); rows = new ArrayList<>(executions.size());
for (ExecutionCommon execution : executions) { for (ExecutionCommon execution : executions) {
try { try {
@ -226,37 +269,17 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams, KSRe
if (execution instanceof ExecutionDeposit) { if (execution instanceof ExecutionDeposit) {
status = "2"; status = "2";
} else { } else {
ImdgPredicateBuilder pbRegistry = registryImdg.predicateBuilder();
String registryPredicateStr = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams._S_T).build();
Long groupId = execution.getExchangeExecutionId(); Long groupId = execution.getExchangeExecutionId();
Collection<Registry> registryCollection = registryImdg.getCollectionObjectsByPredicate( status = statusForExecution.get(new ExecutionKey(groupId, execution.getSessionId()));
pbRegistry.and( if (status == null) {
pbRegistry.equals("groupId", groupId),
pbRegistry.equals("companyId", execution.getCompanyId()),
pbRegistry.in("registryStatus",
RegistryStatus.NACC.getKey(),
RegistryStatus.NACC.getKey(),
RegistryStatus.FAIL.getKey(),
RegistryStatus.UNCV.getKey()),
pbRegistry.sql(registryPredicateStr)
)
);
if (registryCollection.isEmpty()) {
log.warn( log.warn(
"Broken execution (empty registries). Registry for groupId = {}, companyId = {} not found. Execution (id = {}) skipped", "Broken execution (can't define status). Registry for groupId = {}, companyId = {} not found. Execution (id = {}) skipped",
groupId, groupId,
execution.getCompanyId(), execution.getCompanyId(),
execution.getId() execution.getId()
); );
continue; continue;
} }
Registry registry = registryCollection.iterator().next();
RegistryStatus registryStatus = IEnumKey.getEnumByKey(RegistryStatus.class, registry.getRegistryStatus());
if (registryStatus == RegistryStatus.NACK || registryStatus == RegistryStatus.UNCV) {
status = "3";
} else if (registryStatus == RegistryStatus.NACC || registryStatus == RegistryStatus.FAIL) {
status = "2";
}
} }
} }
} }
@ -272,21 +295,6 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams, KSRe
} }
} }
private boolean checkRegistryStatus(Collection<Registry> registries, Collection<RegistryStatus> registryStatuses) { private record ExecutionKey(Long groupId, Long sessionId) {
for (Registry registry : registries) {
RegistryStatus registryStatus = IEnumKey.getEnumByKey(RegistryStatus.class, registry.getRegistryStatus());
if (registryStatuses.contains(registryStatus)) continue;
return false;
}
return true;
}
private boolean checkRegistryInstrumentType(Collection<Registry> registries, Collection<RegistryInstrumentType> RegistryInstrumentTypes) {
for (Registry registry : registries) {
RegistryInstrumentType RegistryInstrumentType = IEnumKey.getEnumByKey(RegistryInstrumentType.class, registry.getRegistryInstrumentType());
if (RegistryInstrumentTypes.contains(RegistryInstrumentType)) continue;
return false;
}
return true;
} }
} }

View file

@ -642,7 +642,7 @@ public class ReportServiceTest_KS {
executionFond.setQuantity(BigDecimal.valueOf(123.456789)); executionFond.setQuantity(BigDecimal.valueOf(123.456789));
executionFond.setExchangeExecutionId(222L); executionFond.setExchangeExecutionId(222L);
executionFond.setExchangeExecutionTime(Instant.ofEpochMilli(LocalDateTime.of(2022, 1, 1, 1, 1, 1).toEpochSecond(ZoneOffset.UTC))); executionFond.setExchangeExecutionTime(Instant.ofEpochMilli(LocalDateTime.of(2022, 1, 1, 1, 1, 1).toEpochSecond(ZoneOffset.UTC)));
executionFond.setCoverageStatus(CoverageStatus.ALWD.getKey()); executionFond.setCoverageStatus(CoverageStatus.DEND.getKey());
executionFondImdg.insert(executionFond); executionFondImdg.insert(executionFond);
Market market = new Market(); Market market = new Market();
@ -655,7 +655,7 @@ public class ReportServiceTest_KS {
registry.setRegistryCode("_S_T"); registry.setRegistryCode("_S_T");
registry.setRegistryInstrumentType(RegistryInstrumentType.S.getKey()); registry.setRegistryInstrumentType(RegistryInstrumentType.S.getKey());
registry.setRegistryUnit(RegistryUnit.T.getKey()); registry.setRegistryUnit(RegistryUnit.T.getKey());
registry.setGroupId(Long.parseLong("%s%d%d".formatted(dateFormatter_yyyyMMdd.format(LocalDate.now()), 222, marketId))); registry.setGroupId(222L);
registry.setRegistryStatus(RegistryStatus.FAIL.getKey()); registry.setRegistryStatus(RegistryStatus.FAIL.getKey());
registry.setRegistryInstrumentType(RegistryInstrumentType.S.getKey()); registry.setRegistryInstrumentType(RegistryInstrumentType.S.getKey());
registryImdg.insert(registry); registryImdg.insert(registry);

View file

@ -2,4 +2,4 @@
"4","20.01.1970T07:09:07","222","CONTRACT","TRADING_CODE","TKR","","","8888.89","0","222","3333","20.01.1970T02:49:58","2" "4","20.01.1970T07:09:07","222","CONTRACT","TRADING_CODE","TKR","","","8888.89","0","222","3333","20.01.1970T02:49:58","2"
"3","20.01.1970T15:54:43","222","","TRADING_CODE","TKR","","","-8888.89","123","222","3333","20.01.1970T02:49:58","1" "3","20.01.1970T15:54:43","222","","TRADING_CODE","TKR","","","-8888.89","123","222","3333","20.01.1970T02:49:58","1"
"3","20.01.1970T15:54:43","222","","TRADING_CODE","TKR","","","-8888.89","123","222","3333","20.01.1970T02:49:58","2" "3","20.01.1970T15:54:43","222","","TRADING_CODE","TKR","","","-8888.89","123","222","3333","20.01.1970T02:49:58","2"
"3","20.01.1970T15:54:43","222","","TRADING_CODE","TKR","","","8888.89","-123","222","3333","20.01.1970T02:49:58","1" "3","20.01.1970T15:54:43","222","","TRADING_CODE","TKR","","","8888.89","-123","222","3333","20.01.1970T02:49:58","2"

1 SESSION_ID SESSION_DATE TR_ID AGREEMENT_NUMBER FIRM_ID TKR ACCOUNT DEPO_ACCOUNT CASH_LIABILITY DEPO_LIABILITY TRADE_NUM CLASS_CODE TRADE_DATE STATUS
2 4 20.01.1970T07:09:07 222 CONTRACT TRADING_CODE TKR 8888.89 0 222 3333 20.01.1970T02:49:58 2
3 3 20.01.1970T15:54:43 222 TRADING_CODE TKR -8888.89 123 222 3333 20.01.1970T02:49:58 1
4 3 20.01.1970T15:54:43 222 TRADING_CODE TKR -8888.89 123 222 3333 20.01.1970T02:49:58 2
5 3 20.01.1970T15:54:43 222 TRADING_CODE TKR 8888.89 -123 222 3333 20.01.1970T02:49:58 1 2