akulikov 2023-12-29 11:40:11 +03:00
parent fd2ba48189
commit 9b81ee6b35
3 changed files with 53 additions and 3 deletions

View file

@ -2,6 +2,7 @@ package ru.spcex.clearing.reports.builders.ks;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.account.Account;
import ru.clearing.classes.statics.data.company.ClearingMemberCategory;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.misc.Session;
import ru.clearing.classes.statics.data.registry.Registry;
@ -31,6 +32,7 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder<EmptyParam
private final Imdg<RegistryCodeDictionary> registryCodeDictionaryImdg;
private final Imdg<Session> sessionImdg;
private final Imdg<Account> accountImdg;
private final Imdg<ClearingMemberCategory> clearingMemberCategoryImdg;
private List<KSRepCashRegistersReport> rows = null;
@ -41,6 +43,7 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder<EmptyParam
registryCodeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_RegistryCodeDictionary, RegistryCodeDictionary.class);
sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
accountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class);
clearingMemberCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
}
@Override
@ -153,6 +156,20 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder<EmptyParam
Set<String> contracts = new HashSet<>();
BigDecimal cmtBalanceSum = BigDecimal.ZERO;
for (Registry cmtRegistry : cmtRegistries) {
Long counterPartyId = cmtRegistry.getCounterPartyId();
if (counterPartyId != null) {
Collection<ClearingMemberCategory> clearingMemberCategory = clearingMemberCategoryImdg.getCollectionObjectsByFieldValues(
Map.of("companyId", counterPartyId)
);
if (!clearingMemberCategory.isEmpty()) {
ClearingMemberCategory next = clearingMemberCategory.iterator().next();
ClearingCategory category = IEnumKey.getEnumByKey(ClearingCategory.class, next.getClearingMemberCategory());
SessionType sessionType = IEnumKey.getEnumByKey(SessionType.class, cmtRegistry.getSessionType());
if (category == ClearingCategory.I && sessionType == SessionType.XDEP) {
continue;
}
}
}
BigDecimal balance = cmtRegistry.getBalance();
cmtBalanceSum = cmtBalanceSum.add(balance);
contracts.add(cmtRegistry.getContract());
@ -169,7 +186,24 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder<EmptyParam
)
);
BigDecimal dmxBalanceSum = dmxRegistries.stream().map(Registry::getBalance).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal lmtBalanceSum = lmtRegistries.stream().map(Registry::getBalance).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal lmtBalanceSum = lmtRegistries.stream()
.filter(reg -> {
Long counterPartyId = reg.getCounterPartyId();
if (counterPartyId != null) {
Collection<ClearingMemberCategory> clearingMemberCategory = clearingMemberCategoryImdg.getCollectionObjectsByFieldValues(
Map.of("companyId", counterPartyId)
);
if (!clearingMemberCategory.isEmpty()) {
ClearingMemberCategory next = clearingMemberCategory.iterator().next();
ClearingCategory category = IEnumKey.getEnumByKey(ClearingCategory.class, next.getClearingMemberCategory());
SessionType sessionType = IEnumKey.getEnumByKey(SessionType.class, reg.getSessionType());
return category != ClearingCategory.I || sessionType != SessionType.XDEP;
}
}
return true;
})
.map(Registry::getBalance)
.reduce(BigDecimal.ZERO, BigDecimal::add);
ksRepCashRegistersReport.setChangeBalance(cmtBalanceSum.subtract(lmtBalanceSum).subtract(dmxBalanceSum));

View file

@ -16,6 +16,7 @@ import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import ru.clearing.classes.statics.data.account.Account;
import ru.clearing.classes.statics.data.account.AccountSymbols;
import ru.clearing.classes.statics.data.company.ClearingMemberCategory;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.company.CompanySymbols;
import ru.clearing.classes.statics.data.execution.ExecutionDeposit;
@ -93,6 +94,7 @@ public class ReportServiceTest_KS {
private Imdg<TradingClearingRegistry> tradingClearingRegistryImdg;
private Imdg<STrades> sTradesImdg;
private Imdg<AccountSymbols> accountSymbolsImdg;
private Imdg<ClearingMemberCategory> clearingMemberCategoryImdg;
private Long COMPANY_ID;
@Autowired
@ -200,6 +202,14 @@ public class ReportServiceTest_KS {
cmtRegistry_2.setRegistryDesignation(RegistryDesignation.C.getKey());
cmtRegistry_2.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
cmtRegistry_2.setRegistryUnit(RegistryUnit.T.getKey());
ClearingMemberCategory clearingMemberCategory = new ClearingMemberCategory();
clearingMemberCategory.setCompanyId(COMPANY_ID);
clearingMemberCategory.setClearingMemberCategory(ClearingCategory.I.getKey());
clearingMemberCategoryImdg.insert(clearingMemberCategory);
cmtRegistry_2.setSessionType(SessionType.XDEP.getKey());
cmtRegistry_2.setCounterPartyId(COMPANY_ID);
cmtRegistry_2.setSessionId(SESSION_ID_FOR_DAY);
cmtRegistry_2.setTradingCode("TRADING_CODE");
cmtRegistry_2.setCompanyId(COMPANY_ID);
@ -240,6 +250,10 @@ public class ReportServiceTest_KS {
lmtRegistry_2.setRegistryDesignation(RegistryDesignation.L.getKey());
lmtRegistry_2.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
lmtRegistry_2.setRegistryUnit(RegistryUnit.T.getKey());
lmtRegistry_2.setSessionType(SessionType.XDEP.getKey());
lmtRegistry_2.setCounterPartyId(COMPANY_ID);
lmtRegistry_2.setSessionId(SESSION_ID_FOR_DAY);
lmtRegistry_2.setTradingCode("TRADING_CODE");
lmtRegistry_2.setCompanyId(COMPANY_ID);
@ -359,6 +373,7 @@ public class ReportServiceTest_KS {
registryImdg.delete(dmxRegistry_2);
sessionImdg.delete(sessionForDay);
accountImdg.delete(account);
clearingMemberCategoryImdg.delete(clearingMemberCategory);
}
@Test
@ -1242,6 +1257,7 @@ public class ReportServiceTest_KS {
accountSymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_AccountSymbols, AccountSymbols.class);
sTradesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class);
accountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class);
clearingMemberCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
}
private void clearTestDir() throws IOException {

View file

@ -1,3 +1,3 @@
"FIRMID","ACCOUNT","TKR","DATE","REGISTER_CODE","REGISTER_NAME","OPEN_BALANCE","CHANGE_BALANCE","ADD_WITHDRAW","CLOSE_BALANCE","REMARKS","TRADE_NUM"
"TRADING_CODE","ACCOUNT_FROM_ACCOUNT","TRADING_CLEARING_REGISTRY","01.11.2023","AM_T","AM_T_NAME","77.78",278.00,"111.00","466.78","",""
"TRADING_CODE","ACCOUNT","TRADING_CLEARING_REGISTRY","01.11.2023","AM_T","AM_T_NAME","77.78",278.00,"111.00",466.78,"",""
"TRADING_CODE","ACCOUNT_FROM_ACCOUNT","TRADING_CLEARING_REGISTRY","29.12.2023","AM_T","AM_T_NAME","77.78","189.00","111.00","377.78",,
"TRADING_CODE","ACCOUNT","TRADING_CLEARING_REGISTRY","29.12.2023","AM_T","AM_T_NAME","77.78","189.00","111.00","377.78",,

1 FIRMID ACCOUNT TKR DATE REGISTER_CODE REGISTER_NAME OPEN_BALANCE CHANGE_BALANCE ADD_WITHDRAW CLOSE_BALANCE REMARKS TRADE_NUM
2 TRADING_CODE ACCOUNT_FROM_ACCOUNT TRADING_CLEARING_REGISTRY 01.11.2023 29.12.2023 AM_T AM_T_NAME 77.78 278.00 189.00 111.00 466.78 377.78
3 TRADING_CODE ACCOUNT TRADING_CLEARING_REGISTRY 01.11.2023 29.12.2023 AM_T AM_T_NAME 77.78 278.00 189.00 111.00 466.78 377.78