akulikov 2023-07-17 14:45:34 +03:00
parent 07293ff3eb
commit 95ff52de20
12 changed files with 224 additions and 104 deletions

View file

@ -2,6 +2,7 @@ package ru.spcex.clearing.reports.reports.bean;
import com.opencsv.bean.CsvBindByName;
import com.opencsv.bean.CsvBindByPosition;
import com.opencsv.bean.CsvDate;
import com.opencsv.bean.CsvNumber;
import java.math.BigDecimal;
@ -28,10 +29,12 @@ public class KSRepCashRegisterSumsReport {
@CsvBindByName(column = "ADD_TIME")
@CsvBindByPosition(position = 4)
@CsvDate(value = "HH:mm:ss")
private LocalTime addTime;
@CsvBindByName(column = "ADD_DATE")
@CsvBindByPosition(position = 5)
@CsvDate(value = "dd.MM.yyyy")
private LocalDate addDate;

View file

@ -33,6 +33,7 @@ public class KSRepDepoRegisterQuantitiesReport {
@CsvBindByName(column = "ADD_TIME")
@CsvBindByPosition(position = 5)
@CsvDate(value = "HH:mm:ss")
private LocalTime addTime;
@CsvBindByName(column = "ADD_DATE")

View file

@ -3,6 +3,7 @@ package ru.spcex.clearing.reports.reports.ks;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.statement.Statement;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
import ru.spcex.clearing.reports.reports.EmptyParams;
@ -12,10 +13,12 @@ import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
import ru.spcex.platform.utils.enumeration.IEnumKey;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Collection;
@ -23,14 +26,16 @@ import java.util.List;
@Component
public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder<EmptyParams, KSRepCashRegisterSumsReport> {
private final Imdg<Statement> statementImdg;
private final Imdg<Registry> registryImdg;
private final Imdg<Company> companyImdg;
private List<KSRepCashRegisterSumsReport> rows = null;
public KSRepCashRegisterSumsReportBuilder(ImdgProvider imdgProvider) {
registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class);
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
}
@Override
@ -63,48 +68,65 @@ public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder<EmptyPa
LocalDate nowDate = LocalDate.now();
Instant instantNow = Instant.now();
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.AM__).build();
ImdgPredicateBuilder pb = statementImdg.predicateBuilder();
ImdgPredicate finalPredicate = pb.and(
pb.sql(sql),
pb.greatEqual("updated", instantNow.truncatedTo(ChronoUnit.DAYS)),
pb.less("updated", instantNow.plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS)),
pb.or(
pb.equals("accountType", AccountType.Clrn.getKey()),
pb.equals("accountType", AccountType.Info.getKey())
)
pb.equals("inOutSDfType", InOutSDfType.type6.getKey()),
pb.equals("operationStatus", OperationStatus.Executed.getKey()),
pb.notNull("amount")
);
Collection<Registry> registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate);
rows = new ArrayList<>(registries.size());
for (Registry registry : registries) {
Collection<Statement> statements = statementImdg.getCollectionObjectsByPredicate(finalPredicate);
rows = new ArrayList<>(statements.size());
for (Statement statement : statements) {
try {
Company company = companyImdg.getSingleObjectByID(registry.getCompanyId());
Company company = companyImdg.getSingleObjectByID(statement.getAddresseeId());
if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue;
// Если есть одновременно registry.credit и registry.debit, записываем две записи по одному registry
if (registry.getCredit() != null) {
KSRepCashRegisterSumsReport ksRepCashRegisterSumsReport = new KSRepCashRegisterSumsReport();
ksRepCashRegisterSumsReport.setFirmId(registry.getTradingCode());
ksRepCashRegisterSumsReport.setAccount(registry.getAccount());
ksRepCashRegisterSumsReport.setRegisterCode(registry.getRegistryCode());
ksRepCashRegisterSumsReport.setAddDate(nowDate);
ksRepCashRegisterSumsReport.setAddTime(null);
ksRepCashRegisterSumsReport.setAddSum(registry.getCredit());
rows.add(ksRepCashRegisterSumsReport);
}
if (registry.getDebit() != null) {
KSRepCashRegisterSumsReport ksRepCashRegisterSumsReport = new KSRepCashRegisterSumsReport();
ksRepCashRegisterSumsReport.setFirmId(registry.getTradingCode());
ksRepCashRegisterSumsReport.setAccount(registry.getAccount());
ksRepCashRegisterSumsReport.setRegisterCode(registry.getRegistryCode());
ksRepCashRegisterSumsReport.setAddDate(nowDate);
ksRepCashRegisterSumsReport.setAddTime(null);
ksRepCashRegisterSumsReport.setAddSum(registry.getDebit().negate());
rows.add(ksRepCashRegisterSumsReport);
ImdgPredicateBuilder pbRegistry = registryImdg.predicateBuilder();
Registry registry = registryImdg.getSingleObjectByPredicate(
pbRegistry.and(
pbRegistry.equals("companyId", statement.getAddresseeId()),
pbRegistry.equals("account", statement.getAccount()),
pbRegistry.in("accountType", AccountType.Clrn.getKey(), AccountType.Info.getKey()),
pbRegistry.notNull("registryCode")
)
);
if (registry == null) {
log.warn(
"Can't find registry for companyId = {} and account = {}. Statement id = {} skipped",
statement.getAddresseeId(),
statement.getAccount(),
statement.getId()
);
continue;
}
KSRepCashRegisterSumsReport ksRepCashRegisterSumsReport = new KSRepCashRegisterSumsReport();
ksRepCashRegisterSumsReport.setFirmId(String.valueOf(statement.getAddresseeId()));
ksRepCashRegisterSumsReport.setAccount(statement.getAccount());
ksRepCashRegisterSumsReport.setRegisterCode(registry.getRegistryCode());
ksRepCashRegisterSumsReport.setAddDate(nowDate);
ksRepCashRegisterSumsReport.setAddTime(LocalTime.ofInstant(statement.getUpdated(), ZoneId.systemDefault()));
InOutDirection inOutDirection = IEnumKey.getEnumByKey(InOutDirection.class, statement.getInOutDirection());
if (inOutDirection == InOutDirection.in) {
ksRepCashRegisterSumsReport.setAddSum(statement.getAmount());
} else if (inOutDirection == InOutDirection.out) {
ksRepCashRegisterSumsReport.setAddSum(statement.getAmount().negate());
} else {
log.warn(
"Invalid statement.in_out_direction ({}). Statement id = {} skipped",
statement.getInOutDirection(),
statement.getId()
);
continue;
}
rows.add(ksRepCashRegisterSumsReport);
} catch (Throwable e) {
log.error("Can't create report row for registry (id = %d), skipped".formatted(registry.getId()), e);
log.error("Can't create report row for registry (id = %d), skipped".formatted(statement.getId()), e);
}
}
}

View file

@ -2,7 +2,12 @@ package ru.spcex.clearing.reports.reports.ks;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity;
import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.security.MoneyMarketSecurity;
import ru.clearing.classes.statics.data.security.Security;
import ru.clearing.classes.statics.data.statement.Statement;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
import ru.spcex.clearing.reports.reports.EmptyParams;
@ -12,10 +17,12 @@ import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
import ru.spcex.platform.utils.enumeration.IEnumKey;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Collection;
@ -23,14 +30,22 @@ import java.util.List;
@Component
public class KSRepDepoRegisterQuantitiesReportBuilder extends CSVReportBuilder<EmptyParams, KSRepDepoRegisterQuantitiesReport> {
private final Imdg<Statement> statementImdg;
private final Imdg<Registry> registryImdg;
private final Imdg<Company> companyImdg;
private final Imdg<FixedIncomeSecurity> fixedIncomeSecurityImdg;
private final Imdg<EquitySecurity> equitySecurityImdg;
private final Imdg<MoneyMarketSecurity> moneyMarketSecurityImdg;
private List<KSRepDepoRegisterQuantitiesReport> rows = null;
public KSRepDepoRegisterQuantitiesReportBuilder(ImdgProvider imdgProvider) {
statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class);
registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
fixedIncomeSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class);
equitySecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class);
moneyMarketSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, MoneyMarketSecurity.class);
}
@Override
@ -63,49 +78,102 @@ public class KSRepDepoRegisterQuantitiesReportBuilder extends CSVReportBuilder<E
LocalDate nowDate = LocalDate.now();
Instant instantNow = Instant.now();
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.AS__).build();
ImdgPredicateBuilder pb = statementImdg.predicateBuilder();
ImdgPredicate finalPredicate = pb.and(
pb.sql(sql),
pb.greatEqual("updated", instantNow.truncatedTo(ChronoUnit.DAYS)),
pb.less("updated", instantNow.plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS)),
pb.equals("accountType", AccountType.Depo.getKey())
pb.equals("inOutSDfType", InOutSDfType.type10.getKey()),
pb.equals("operationStatus", OperationStatus.Executed.getKey())
);
Collection<Registry> registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate);
Collection<Statement> statements = statementImdg.getCollectionObjectsByPredicate(finalPredicate);
rows = new ArrayList<>(registries.size());
for (Registry registry : registries) {
rows = new ArrayList<>(statements.size());
for (Statement statement : statements) {
try {
Company company = companyImdg.getSingleObjectByID(registry.getCompanyId());
Company company = companyImdg.getSingleObjectByID(statement.getAddresseeId());
if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue;
// Если есть одновременно registry.credit и registry.debit, записываем две записи по одному registry
if (registry.getCredit() != null) {
KSRepDepoRegisterQuantitiesReport ksRepDepoRegisterQuantitiesReport = new KSRepDepoRegisterQuantitiesReport();
ksRepDepoRegisterQuantitiesReport.setFirmId(registry.getTradingCode());
ksRepDepoRegisterQuantitiesReport.setAccount(registry.getAccount());
ksRepDepoRegisterQuantitiesReport.setSecurityId(registry.getSecuritySymbol());
ksRepDepoRegisterQuantitiesReport.setRegisterCode(registry.getRegistryCode());
ksRepDepoRegisterQuantitiesReport.setAddTime(null);
ksRepDepoRegisterQuantitiesReport.setAddDate(nowDate);
ksRepDepoRegisterQuantitiesReport.setAddQuantity(registry.getCredit());
rows.add(ksRepDepoRegisterQuantitiesReport);
}
if (registry.getDebit() != null) {
KSRepDepoRegisterQuantitiesReport ksRepDepoRegisterQuantitiesReport = new KSRepDepoRegisterQuantitiesReport();
ksRepDepoRegisterQuantitiesReport.setFirmId(registry.getTradingCode());
ksRepDepoRegisterQuantitiesReport.setAccount(registry.getAccount());
ksRepDepoRegisterQuantitiesReport.setSecurityId(registry.getSecuritySymbol());
ksRepDepoRegisterQuantitiesReport.setRegisterCode(registry.getRegistryCode());
ksRepDepoRegisterQuantitiesReport.setAddTime(null);
ksRepDepoRegisterQuantitiesReport.setAddDate(nowDate);
ksRepDepoRegisterQuantitiesReport.setAddQuantity(registry.getDebit().negate());
rows.add(ksRepDepoRegisterQuantitiesReport);
ImdgPredicateBuilder pbRegistry = registryImdg.predicateBuilder();
Registry registry = registryImdg.getSingleObjectByPredicate(
pbRegistry.and(
pbRegistry.equals("companyId", statement.getAddresseeId()),
pbRegistry.equals("account", statement.getAccount()),
pbRegistry.equals("accountType", AccountType.Depo.getKey()),
pbRegistry.notNull("registryCode")
)
);
if (registry == null) {
log.warn(
"Can't find registry for companyId = {} and account: {}. Statement id = {} skipped",
statement.getAddresseeId(),
statement.getAccount(),
statement.getId()
);
continue;
}
Security security = getSecurityWithSecuritySymbolForId(statement.getSecurityId());
if (security == null) {
log.warn(
"Can't find security for securityId = {}. Statement id = {} skipped",
statement.getSecurityId(),
statement.getId()
);
continue;
}
KSRepDepoRegisterQuantitiesReport ksRepDepoRegisterQuantitiesReport = new KSRepDepoRegisterQuantitiesReport();
ksRepDepoRegisterQuantitiesReport.setFirmId(String.valueOf(statement.getAddresseeId()));
ksRepDepoRegisterQuantitiesReport.setAccount(statement.getAccount());
ksRepDepoRegisterQuantitiesReport.setSecurityId(security.getSecuritySymbol());
ksRepDepoRegisterQuantitiesReport.setRegisterCode(registry.getRegistryCode());
ksRepDepoRegisterQuantitiesReport.setAddDate(nowDate);
ksRepDepoRegisterQuantitiesReport.setAddTime(LocalTime.ofInstant(statement.getUpdated(), ZoneId.systemDefault()));
InOutDirection inOutDirection = IEnumKey.getEnumByKey(InOutDirection.class, statement.getInOutDirection());
if (inOutDirection == InOutDirection.in) {
ksRepDepoRegisterQuantitiesReport.setAddQuantity(statement.getAmount());
} else if (inOutDirection == InOutDirection.out) {
ksRepDepoRegisterQuantitiesReport.setAddQuantity(statement.getAmount().negate());
} else {
log.warn(
"Invalid statement.in_out_direction ({}). Statement id = {} skipped",
statement.getInOutDirection(),
statement.getId()
);
continue;
}
rows.add(ksRepDepoRegisterQuantitiesReport);
} catch (Throwable e) {
log.error("Can't create report row for registry (id = %d), skipped".formatted(registry.getId()), e);
log.error("Can't create report row for registry (id = %d), skipped".formatted(statement.getId()), e);
}
}
}
private Security getSecurityWithSecuritySymbolForId(Long securityId) {
Security security;
security = equitySecurityImdg.getFirstObjectByPredicate(
equitySecurityImdg.predicateBuilder().and(
equitySecurityImdg.predicateBuilder().equals("securityId", securityId),
equitySecurityImdg.predicateBuilder().notNull("securitySymbol")
)
);
if (security == null) {
security = fixedIncomeSecurityImdg.getFirstObjectByPredicate(
fixedIncomeSecurityImdg.predicateBuilder().and(
fixedIncomeSecurityImdg.predicateBuilder().equals("securityId", securityId),
fixedIncomeSecurityImdg.predicateBuilder().notNull("securitySymbol")
)
);
}
if (security == null)
security = moneyMarketSecurityImdg.getFirstObjectByPredicate(
moneyMarketSecurityImdg.predicateBuilder().and(
moneyMarketSecurityImdg.predicateBuilder().equals("securityId", securityId),
moneyMarketSecurityImdg.predicateBuilder().notNull("securitySymbol")
)
);
return security;
}
}

View file

@ -123,11 +123,7 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams, KSRe
} else if (coverage == CoverageStatus.DNED) {
String marketCode = execution.getMarket();
Market market = marketImdg.getSingleObjectByFieldValues(Map.of(
"code",
marketCode
)
);
Market market = marketImdg.getFirstObjectByFieldValues(Map.of("code", marketCode));
if (market == null) {
log.warn(
"Broken execution (can't find market for market.code = {}). Execution (id = {}) skipped",

View file

@ -18,10 +18,12 @@ import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.company.CompanySymbols;
import ru.clearing.classes.statics.data.execution.ExecutionDeposit;
import ru.clearing.classes.statics.data.execution.ExecutionFond;
import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity;
import ru.clearing.classes.statics.data.misc.Market;
import ru.clearing.classes.statics.data.misc.Session;
import ru.clearing.classes.statics.data.profile.ProfileDocument;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.statement.Statement;
import ru.clearing.platform.dictionary.RegistryCodeDictionary;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.Consts;
@ -70,6 +72,7 @@ public class ReportServiceTest_KS {
private static int reportRequestWithSessionIdCnt = 0;
private static int reportRequestWithSessionIdListCnt = 0;
private static int reportRequestWithPeriodCnt = 0;
private Imdg<Statement> statementImdg;
private Imdg<Registry> registryImdg;
private Imdg<Market> marketImdg;
private Imdg<Company> companyImdg;
@ -79,6 +82,7 @@ public class ReportServiceTest_KS {
private Imdg<Session> sessionImdg;
private Imdg<CompanySymbols> companySymbolsImdg;
private Imdg<ProfileDocument> profileDocumentImdg;
private Imdg<EquitySecurity> equitySecurityImdg;
private Long COMPANY_ID;
@Autowired
@ -161,17 +165,21 @@ public class ReportServiceTest_KS {
Registry registry_1 = new Registry();
registry_1.setCompanyId(COMPANY_ID);
registry_1.setRegistryCode("AM__");
registry_1.setRegistryDesignation(RegistryDesignation.A.getKey());
registry_1.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
registry_1.setUpdated(Instant.now());
registry_1.setTradingCode("TRADING_CODE");
registry_1.setAccount("ACCOUNT");
registry_1.setAccountType(AccountType.Clrn.getKey());
registry_1.setDebit(BigDecimal.valueOf(22.2222222));
registry_1.setCredit(BigDecimal.valueOf(44.4444444));
registry_1.setRegistryCode(RegistryCode.T.getKey());
registryImdg.insert(registry_1);
Statement statement_1 = new Statement();
statement_1.setAddresseeId(COMPANY_ID);
statement_1.setAccount("ACCOUNT");
statement_1.setInOutDirection(InOutDirection.in.getKey());
statement_1.setInOutSDfType(InOutSDfType.type6.getKey());
statement_1.setOperationStatus(OperationStatus.Executed.getKey());
statement_1.setAmount(BigDecimal.valueOf(7777.777777777));
statement_1.setUpdated(Instant.now());
statementImdg.insert(statement_1);
String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L);
TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(),
@ -184,9 +192,10 @@ public class ReportServiceTest_KS {
File outFile = outFolder.listFiles()[0];
File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/ks/KS_REP_CASH_REGISTER_SUMS_expected.csv").getFile());
compareCSVFiles(expectedFile, outFile, Arrays.asList("ADD_DATE"));
compareCSVFiles(expectedFile, outFile, Arrays.asList("FIRMID", "ADD_DATE", "ADD_TIME"));
registryImdg.delete(registry_1);
statementImdg.delete(statement_1);
}
@Test
@ -248,18 +257,27 @@ public class ReportServiceTest_KS {
Registry registry_1 = new Registry();
registry_1.setCompanyId(COMPANY_ID);
registry_1.setRegistryCode("AS__");
registry_1.setRegistryDesignation(RegistryDesignation.A.getKey());
registry_1.setRegistryInstrumentType(RegistryInstrumentType.S.getKey());
registry_1.setSecuritySymbol("SECURITY_SYMBOL");
registry_1.setUpdated(Instant.now());
registry_1.setTradingCode("TRADING_CODE");
registry_1.setAccount("ACCOUNT");
registry_1.setAccountType(AccountType.Depo.getKey());
registry_1.setDebit(BigDecimal.valueOf(22.2222222));
registry_1.setCredit(BigDecimal.valueOf(44.4444444));
registry_1.setRegistryCode(RegistryCode.T.getKey());
registryImdg.insert(registry_1);
EquitySecurity equitySecurity = new EquitySecurity();
equitySecurity.setSecuritySymbol("value");
equitySecurity.setSecurityId(777L);
equitySecurityImdg.insert(equitySecurity);
Statement statement_1 = new Statement();
statement_1.setAddresseeId(COMPANY_ID);
statement_1.setAccount("ACCOUNT");
statement_1.setInOutDirection(InOutDirection.in.getKey());
statement_1.setInOutSDfType(InOutSDfType.type10.getKey());
statement_1.setOperationStatus(OperationStatus.Executed.getKey());
statement_1.setAmount(BigDecimal.valueOf(7777.777777777));
statement_1.setUpdated(Instant.now());
statement_1.setSecurityId(777L);
statementImdg.insert(statement_1);
String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L);
TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(),
@ -272,9 +290,11 @@ public class ReportServiceTest_KS {
File outFile = outFolder.listFiles()[0];
File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/ks/KS_REP_DEPO_REGISTER_QUANTITIES_expected.csv").getFile());
compareCSVFiles(expectedFile, outFile, Arrays.asList("ADD_DATE"));
compareCSVFiles(expectedFile, outFile, Arrays.asList("FIRMID", "ADD_DATE", "ADD_TIME"));
registryImdg.delete(registry_1);
equitySecurityImdg.delete(equitySecurity);
statementImdg.delete(statement_1);
}
@Test
@ -560,15 +580,6 @@ public class ReportServiceTest_KS {
session_1.setClearingDate(LocalDate.now());
sessionImdg.insert(session_1);
Session session_2 = new Session();
session_2.setCreated(Instant.ofEpochSecond(3777777777L));
session_2.setUpdated(Instant.ofEpochSecond(4777777777L));
session_2.setSection(Section.FOND.getKey());
session_2.setSessionType(SessionType.IPO0.getKey());
session_2.setWorkflowStatus(WorkflowStatus.Blocked.getKey());
session_2.setClearingDate(LocalDate.now());
sessionImdg.insert(session_2);
ReportRequest reportRequest = new ReportRequest();
reportRequest.setReportId(ReportBuilderType.KS_SESSION_LIST.getKey());
@ -587,7 +598,6 @@ public class ReportServiceTest_KS {
compareCSVFiles(expectedFile, outFile, List.of("ID"));
sessionImdg.delete(session_1);
sessionImdg.delete(session_2);
}
@ -652,6 +662,8 @@ public class ReportServiceTest_KS {
companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
profileDocumentImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ProfileDocument, ProfileDocument.class);
marketImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Market, Market.class);
statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class);
equitySecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class);
}
private void clearTestDir() throws IOException {

View file

@ -1,3 +1,2 @@
"FIRMID","ACCOUNT","REGISTER_CODE","ADD_SUM","ADD_TIME","ADD_DATE"
"TRADING_CODE","ACCOUNT","AM__","44.44","","2023-07-07"
"TRADING_CODE","ACCOUNT","AM__","-22.22","","2023-07-07"
"1","ACCOUNT","T","7777.78","17:00:50","17.07.2023"

1 FIRMID ACCOUNT REGISTER_CODE ADD_SUM ADD_TIME ADD_DATE
2 TRADING_CODE 1 ACCOUNT AM__ T 44.44 7777.78 17:00:50 2023-07-07 17.07.2023
TRADING_CODE ACCOUNT AM__ -22.22 2023-07-07

View file

@ -1,3 +1,2 @@
"FIRMID","ACCOUNT","SECURITYID","REGISTER_CODE","ADD_QUANTITY","ADD_TIME","ADD_DATE"
"TRADING_CODE","ACCOUNT","SECURITY_SYMBOL","AS__","44.44","","07.07.2023"
"TRADING_CODE","ACCOUNT","SECURITY_SYMBOL","AS__","-22.22","","07.07.2023"
"1","ACCOUNT","value","T","7777.78","18:39:59","17.07.2023"

1 FIRMID ACCOUNT SECURITYID REGISTER_CODE ADD_QUANTITY ADD_TIME ADD_DATE
2 TRADING_CODE 1 ACCOUNT SECURITY_SYMBOL value AS__ T 44.44 7777.78 18:39:59 07.07.2023 17.07.2023
TRADING_CODE ACCOUNT SECURITY_SYMBOL AS__ -22.22 07.07.2023

View file

@ -1,3 +1,2 @@
"ID","CREATED_AT","UPDATED_AT","SESSION_DATE","SESSION_TYPE","WORKFLOW_STATUS"
"2","03.05.2026T03:09:37","09.01.2058T04:56:17","MKR","FINL","ACTV"
"3","17.09.2089T06:42:57","27.05.2121T08:29:37","FOND","IPO0","BLKD"

1 ID CREATED_AT UPDATED_AT SESSION_DATE SESSION_TYPE WORKFLOW_STATUS
2 2 03.05.2026T03:09:37 09.01.2058T04:56:17 MKR FINL ACTV
3 17.09.2089T06:42:57 27.05.2121T08:29:37 FOND IPO0 BLKD

View file

@ -3,7 +3,14 @@ package ru.spcex.platform.enumeration;
import ru.spcex.platform.utils.enumeration.IEnumKey;
public enum InOutSDfType implements IEnumKey {
type1("0102"), type6("0607"), type16("1617"), type9("0910"), type57("57"), type08("0809");
type1("0102"),
type6("0607"),
type16("1617"),
type9("0910"),
type57("57"),
type08("0809"),
type10("1011"),
;
private final String key;

View file

@ -296,6 +296,15 @@ public class ImdgHazelcast<T extends SpcexObjectBase> implements Imdg<T> {
return els.size() == 1 ? els.iterator().next() : null;
}
@Override
public T getFirstObjectByPredicate(ImdgPredicate predicate) {
Collection<T> els = getCollectionObjectsByPredicate(predicate);
Iterator<T> iterator = els.iterator();
if (iterator.hasNext()) {
return iterator.next();
} else return null;
}
@Override
public ImdgPredicateBuilder predicateBuilder() {
return ImdgPredicateBuilderHazelcast.instance();

View file

@ -114,6 +114,11 @@ public interface Imdg<T extends SpcexObjectBase> {
throw new UnsupportedOperationException("not implemented getSingleObjectByPredicate");
}
// Predicate API
default T getFirstObjectByPredicate(ImdgPredicate predicate) {
throw new UnsupportedOperationException("not implemented getFirstObjectByPredicate");
}
default ImdgPredicateBuilder predicateBuilder() {
throw new UnsupportedOperationException("not implemented predicateBuilder API");
}