diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepCashRegistersReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepCashRegistersReportBuilder.java index 51f814557..0d2457b09 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepCashRegistersReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepCashRegistersReportBuilder.java @@ -2,6 +2,7 @@ package ru.spcex.clearing.reports.builders.ks; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.misc.Session; import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.platform.dictionary.RegistryCodeDictionary; import ru.spcex.clearing.imdg.IMDGDistributedNames; @@ -29,6 +30,7 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder registryImdg; private final Imdg companyImdg; private final Imdg registryCodeDictionaryImdg; + private final Imdg sessionImdg; private List rows = null; @@ -37,6 +39,7 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder sessionsForDay = sessionImdg.getCollectionObjectsByFieldValues(Map.of("clearingDate", LocalDate.now())); + Long[] sessionIds = sessionsForDay.stream().map(Session::getId).toArray(Long[]::new); + ImdgPredicate cmtPredicate = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.CM_T).buildPredicate(pb); + Collection cmtRegistries = registryImdg.getCollectionObjectsByPredicate( + pb.and( + cmtPredicate, + pb.in("sessionId", sessionIds), + pb.equals("tradingCode", registry.getTradingCode()), + pb.equals("companyId", registry.getCompanyId()), + pb.equals("account", registry.getAccount()), + pb.equals("registryStatus", RegistryStatus.CLRD.getKey()) + ) + ); + ImdgPredicate lmtPredicate = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.LM_T).buildPredicate(pb); + Collection lmtRegistries = registryImdg.getCollectionObjectsByPredicate( + pb.and( + lmtPredicate, + pb.in("sessionId", sessionIds), + pb.equals("tradingCode", registry.getTradingCode()), + pb.equals("companyId", registry.getCompanyId()), + pb.equals("account", registry.getAccount()), + pb.equals("registryStatus", RegistryStatus.CLRD.getKey()) + ) + ); + BigDecimal cmtBalanceSum = cmtRegistries.stream().map(Registry::getBalance).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal lmtBalanceSum = lmtRegistries.stream().map(Registry::getBalance).reduce(BigDecimal.ZERO, BigDecimal::add); + ksRepCashRegistersReport.setChangeBalance(cmtBalanceSum.subtract(lmtBalanceSum)); + registryPredicate = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.DM_I).buildPredicate(pb); Collection registriesForAddWithdraw = registryImdg.getCollectionObjectsByPredicate( diff --git a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java index 63697af8e..4bd54ee56 100644 --- a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java +++ b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java @@ -150,6 +150,89 @@ public class ReportServiceTest_KS { registry.setCloseBalance(BigDecimal.valueOf(11.11111111)); registryImdg.insert(registry); + Session sessionForDay = new Session(); + sessionForDay.setClearingDate(LocalDate.now()); + Long SESSION_ID_FOR_DAY = sessionImdg.insert(sessionForDay); + + Registry cmtRegistry_1 = new Registry(); + cmtRegistry_1.setRegistryCode("CM_T"); + cmtRegistry_1.setRegistryDesignation(RegistryDesignation.C.getKey()); + cmtRegistry_1.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); + cmtRegistry_1.setRegistryUnit(RegistryUnit.T.getKey()); + cmtRegistry_1.setSessionId(SESSION_ID_FOR_DAY); + cmtRegistry_1.setTradingCode("TRADING_CODE"); + cmtRegistry_1.setCompanyId(COMPANY_ID); + cmtRegistry_1.setAccount("ACCOUNT"); + cmtRegistry_1.setRegistryStatus(RegistryStatus.CLRD.getKey()); + cmtRegistry_1.setBalance(BigDecimal.valueOf(111L)); + registryImdg.insert(cmtRegistry_1); + + Registry cmtRegistry_2 = new Registry(); + cmtRegistry_2.setRegistryCode("CM_T"); + cmtRegistry_2.setRegistryDesignation(RegistryDesignation.C.getKey()); + cmtRegistry_2.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); + cmtRegistry_2.setRegistryUnit(RegistryUnit.T.getKey()); + cmtRegistry_2.setSessionId(SESSION_ID_FOR_DAY); + cmtRegistry_2.setTradingCode("TRADING_CODE"); + cmtRegistry_2.setCompanyId(COMPANY_ID); + cmtRegistry_2.setAccount("ACCOUNT"); + cmtRegistry_2.setRegistryStatus(RegistryStatus.CLRD.getKey()); + cmtRegistry_2.setBalance(BigDecimal.valueOf(111L)); + registryImdg.insert(cmtRegistry_2); + + Registry cmtRegistry_3 = new Registry(); + cmtRegistry_3.setRegistryCode("CM_T"); + cmtRegistry_3.setRegistryDesignation(RegistryDesignation.C.getKey()); + cmtRegistry_3.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); + cmtRegistry_3.setRegistryUnit(RegistryUnit.T.getKey()); + cmtRegistry_3.setSessionId(SESSION_ID_FOR_DAY); + cmtRegistry_3.setTradingCode("TRADING_CODE"); + cmtRegistry_3.setCompanyId(COMPANY_ID); + cmtRegistry_3.setAccount("ACCOUNT"); + cmtRegistry_3.setRegistryStatus(RegistryStatus.CLRD.getKey()); + cmtRegistry_3.setBalance(BigDecimal.valueOf(111L)); + registryImdg.insert(cmtRegistry_3); + + Registry lmtRegistry_1 = new Registry(); + lmtRegistry_1.setRegistryCode("LM_T"); + lmtRegistry_1.setRegistryDesignation(RegistryDesignation.L.getKey()); + lmtRegistry_1.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); + lmtRegistry_1.setRegistryUnit(RegistryUnit.T.getKey()); + lmtRegistry_1.setSessionId(SESSION_ID_FOR_DAY); + lmtRegistry_1.setTradingCode("TRADING_CODE"); + lmtRegistry_1.setCompanyId(COMPANY_ID); + lmtRegistry_1.setAccount("ACCOUNT"); + lmtRegistry_1.setRegistryStatus(RegistryStatus.CLRD.getKey()); + lmtRegistry_1.setBalance(BigDecimal.valueOf(11L)); + registryImdg.insert(lmtRegistry_1); + + Registry lmtRegistry_2 = new Registry(); + lmtRegistry_2.setRegistryCode("LM_T"); + lmtRegistry_2.setRegistryDesignation(RegistryDesignation.L.getKey()); + lmtRegistry_2.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); + lmtRegistry_2.setRegistryUnit(RegistryUnit.T.getKey()); + lmtRegistry_2.setSessionId(SESSION_ID_FOR_DAY); + lmtRegistry_2.setTradingCode("TRADING_CODE"); + lmtRegistry_2.setCompanyId(COMPANY_ID); + lmtRegistry_2.setAccount("ACCOUNT"); + lmtRegistry_2.setRegistryStatus(RegistryStatus.CLRD.getKey()); + lmtRegistry_2.setBalance(BigDecimal.valueOf(11L)); + registryImdg.insert(lmtRegistry_2); + + Registry lmtRegistry_3 = new Registry(); + lmtRegistry_3.setRegistryCode("LM_T"); + lmtRegistry_3.setRegistryDesignation(RegistryDesignation.L.getKey()); + lmtRegistry_3.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); + lmtRegistry_3.setRegistryUnit(RegistryUnit.T.getKey()); + lmtRegistry_3.setSessionId(SESSION_ID_FOR_DAY); + lmtRegistry_3.setTradingCode("TRADING_CODE"); + lmtRegistry_3.setCompanyId(COMPANY_ID); + lmtRegistry_3.setAccount("ACCOUNT"); + lmtRegistry_3.setRegistryStatus(RegistryStatus.CLRD.getKey()); + lmtRegistry_3.setBalance(BigDecimal.valueOf(11L)); + registryImdg.insert(lmtRegistry_3); + + Registry addWithdrawRegistry_1 = new Registry(); addWithdrawRegistry_1.setCompanyId(COMPANY_ID); addWithdrawRegistry_1.setSecurityId(777L); @@ -208,6 +291,13 @@ public class ReportServiceTest_KS { registryImdg.delete(addWithdrawRegistry_1); registryImdg.delete(addWithdrawRegistry_2); registryImdg.delete(addWithdrawRegistry_3); + registryImdg.delete(cmtRegistry_1); + registryImdg.delete(cmtRegistry_2); + registryImdg.delete(cmtRegistry_3); + registryImdg.delete(lmtRegistry_1); + registryImdg.delete(lmtRegistry_2); + registryImdg.delete(lmtRegistry_3); + sessionImdg.delete(sessionForDay); } @Test diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTERS_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTERS_expected.csv index 679b960c6..c9956a7d5 100644 --- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTERS_expected.csv +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTERS_expected.csv @@ -1,2 +1,2 @@ "FIRMID","ACCOUNT","TKR","DATE","REGISTER_CODE","REGISTER_NAME","OPEN_BALANCE","CHANGE_BALANCE","ADD_WITHDRAW","CLOSE_BALANCE","REMARKS","TRADE_NUM" -"TRADING_CODE","ACCOUNT","TRADING_CLEARING_REGISTRY","02.10.2023","AM_T","AM_T_NAME","77.78","66.67","111.00","255.44","","" +"TRADING_CODE","ACCOUNT","TRADING_CLEARING_REGISTRY","31.10.2023","AM_T","AM_T_NAME","77.78","300.00","111.00","488.78","",""