diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportsServiceApplication.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportsServiceApplication.java index 38cb8d576..cf7a5911a 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportsServiceApplication.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportsServiceApplication.java @@ -9,13 +9,11 @@ import org.slf4j.LoggerFactory; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.context.ConfigurableApplicationContext; -import ru.spcex.clearing.reports.reports.bt_12_2.ReportPA_IV; +import ru.spcex.clearing.reports.reports.bt_16_5.ReportINACCNT; import ru.spcex.clearing.reports.services.ReportsServiceCommand; -import ru.spcex.clearing.reports.services.collector.ReportPA_IV_Collector; +import ru.spcex.clearing.reports.services.collector.ReportINACCNT_Collector; import ru.spcex.platform.imdg.api.ImdgProvider; -import java.time.LocalDate; - @SpringBootApplication public class ReportsServiceApplication { public static void main(String[] args) { @@ -43,10 +41,10 @@ public class ReportsServiceApplication { public static void test(ConfigurableApplicationContext context) { ImdgProvider imdg = context.getBean(ImdgProvider.class); - ReportPA_IV_Collector collector = new ReportPA_IV_Collector(imdg); - ReportPA_IV report = collector.collectReportWithPeriod(LocalDate.of(2020, 1, 1), LocalDate.now()); + ReportINACCNT_Collector collector = new ReportINACCNT_Collector(imdg); + ReportINACCNT report = collector.collectReportForClearingCode("test_clearing_code"); XStream xStream = new XStream(new XppDriver(new NoNameCoder())); - xStream.processAnnotations(ReportPA_IV.class); + xStream.processAnnotations(ReportINACCNT.class); String out = xStream.toXML(report); System.out.println(out); } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportINACCNT.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_16_5/ReportINACCNT.java similarity index 60% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportINACCNT.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_16_5/ReportINACCNT.java index 3c32daac7..3b1221020 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportINACCNT.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_16_5/ReportINACCNT.java @@ -1,14 +1,17 @@ -package ru.spcex.clearing.reports.reports; +package ru.spcex.clearing.reports.reports.bt_16_5; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import com.thoughtworks.xstream.annotations.XStreamConverter; +import ru.spcex.clearing.reports.reports.AbstractReport; +import ru.spcex.clearing.reports.reports.ReportId; import ru.spcex.clearing.reports.xml_test.FormattedLocalDateConverter; import ru.spcex.clearing.reports.xml_test.FormattedLocalTimeConverter; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; +import java.util.ArrayList; import java.util.List; @XStreamAlias("accountBalanceInfo") @@ -34,7 +37,7 @@ public class ReportINACCNT extends AbstractReport { private final LocalTime time; @XStreamAlias("rows") - private List rows; + private final List rows = new ArrayList<>(); public ReportINACCNT(String companyClearingCode, LocalDate date, LocalTime time) { super(ReportId.BT16_5, @@ -54,23 +57,18 @@ public class ReportINACCNT extends AbstractReport { ); } - public List getRows() { + public List getRows() { return rows; } - public void setRows(List rows) { - this.rows = rows; - } - @XStreamAlias("row") - public record Row(@XStreamAsAttribute @XStreamAlias("id") Long id, - @XStreamAsAttribute @XStreamAlias("clearingHouse") String clearingHouse, - @XStreamAsAttribute @XStreamAlias("company_clearingCode") String companyClearingCode, - @XStreamAsAttribute @XStreamAlias("company_fullName") String companyFullName, - @XStreamAsAttribute @XStreamAlias("accountBalance_account") String accountBalanceAccount, - @XStreamAsAttribute @XStreamAlias("accountBalance_openAccount") String accountBalanceOpenAccount, - @XStreamAsAttribute @XStreamAlias("accountBalance_debitAccount") String accountBalanceDebitAccount, - @XStreamAsAttribute @XStreamAlias("accountBalance_creditAccount") String accountBalanceCreditAccount, - @XStreamAsAttribute @XStreamAlias("accountBalance_closeAccount") String accountBalanceCloseAccount) { + public record Info_INACCNT(@XStreamAsAttribute @XStreamAlias("id") String id, + @XStreamAsAttribute @XStreamAlias("company_fullName") String companyFullName, + @XStreamAsAttribute @XStreamAlias("company_clearingCode") String companyClearingCode, + @XStreamAsAttribute @XStreamAlias("accountBalance_account") String accountBalanceAccount, + @XStreamAsAttribute @XStreamAlias("accountBalance_openAccount") String accountBalanceOpenAccount, + @XStreamAsAttribute @XStreamAlias("accountBalance_debitAccount") String accountBalanceDebitAccount, + @XStreamAsAttribute @XStreamAlias("accountBalance_creditAccount") String accountBalanceCreditAccount, + @XStreamAsAttribute @XStreamAlias("accountBalance_closeAccount") String accountBalanceCloseAccount) { } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_16_5/Report_BT16_5.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_16_5/Report_BT16_5.java deleted file mode 100644 index dd6729682..000000000 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_16_5/Report_BT16_5.java +++ /dev/null @@ -1,83 +0,0 @@ -package ru.spcex.clearing.reports.reports.bt_16_5; - -import com.thoughtworks.xstream.annotations.XStreamAlias; -import com.thoughtworks.xstream.annotations.XStreamAsAttribute; -import ru.spcex.clearing.reports.reports.AbstractReport; -import ru.spcex.clearing.reports.reports.ReportId; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; - -@XStreamAlias("accountBalanceInfo") -public class Report_BT16_5 extends AbstractReport { - @XStreamAsAttribute - @XStreamAlias("date") - private LocalDate date; - - @XStreamAsAttribute - @XStreamAlias("time") - private LocalTime time; - - @XStreamAlias("id") - private String id; - - @XStreamAlias("clearingHouse") - private String clearingHouse; - - @XStreamAlias("company_clearingCode") - private String companyClearingCode; - - @XStreamAlias("company_fullName") - private String companyFullName; - - @XStreamAlias("accountBalance_account") - private String accountBalanceAccount; - - @XStreamAlias("accountBalance_openAmount") - private String accountBalanceOpenAmount; - - @XStreamAlias("accountBalance_debitAmount") - private String accountBalanceDebitAmount; - - @XStreamAlias("accountBalance_creditAmount") - private String accountBalanceCreditAmount; - - @XStreamAlias("accountBalance_closeAmount") - private String accountBalanceCloseAmount; - - - public Report_BT16_5(LocalDate date, - LocalTime time, - String clearingHouse, - String companyClearingCode, - String companyFullName, - String accountBalanceAccount, - String accountBalanceOpenAmount, - String accountBalanceDebitAmount, - String accountBalanceCreditAmount, - String accountBalanceCloseAmount) { - super(ReportId.BT16_5, - "0.0.1", - "BT 16.5", - "Отчет о денежных средствах на счете внутреннего учета (клиринговом регистре) Участника клиринга"); - this.date = date; - this.time = time; - this.clearingHouse = clearingHouse; - this.companyClearingCode = companyClearingCode; - this.companyFullName = companyFullName; - this.accountBalanceAccount = accountBalanceAccount; - this.accountBalanceOpenAmount = accountBalanceOpenAmount; - this.accountBalanceDebitAmount = accountBalanceDebitAmount; - this.accountBalanceCreditAmount = accountBalanceCreditAmount; - this.accountBalanceCloseAmount = accountBalanceCloseAmount; - } - - @Override - public String getReportName(LocalDateTime reportDateTime) { - return "INACCNT.%s.%s".formatted( - companyClearingCode, - DATE_TIME_FORMATTER.format(reportDateTime) - ); - } -} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportForClearingCodeCollector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportForClearingCodeCollector.java new file mode 100644 index 000000000..6926ce635 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportForClearingCodeCollector.java @@ -0,0 +1,10 @@ +package ru.spcex.clearing.reports.services; + +import ru.spcex.clearing.reports.reports.AbstractReport; + +public abstract class ReportForClearingCodeCollector extends AbstractReportCollector { + /** + * Подготовка отчета по clearingCode + */ + abstract public T collectReportForClearingCode(String clearingCode); +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportINACCNT_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportINACCNT_Collector.java index aacdfad88..24d7d1c40 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportINACCNT_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportINACCNT_Collector.java @@ -3,8 +3,9 @@ package ru.spcex.clearing.reports.services.collector; import ru.clearing.classes.statics.data.account.AccountBalance; import ru.clearing.classes.statics.data.company.Company; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.reports.ReportINACCNT; -import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; +import ru.spcex.clearing.reports.reports.bt_16_5.ReportINACCNT; +import ru.spcex.clearing.reports.services.ReportForClearingCodeCollector; +import ru.spcex.platform.enumeration.AccountType; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; @@ -12,9 +13,12 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import ru.spcex.platform.imdg.iml.hazelcast.adapter.predicate.ImdgPredicateBuilderHazelcast; import java.time.LocalDate; +import java.time.LocalTime; import java.util.Collection; +import java.util.Set; +import java.util.stream.Collectors; -public class ReportINACCNT_Collector extends ReportWithPeriodCollector { +public class ReportINACCNT_Collector extends ReportForClearingCodeCollector { private final Imdg accountBalanceImdg; private final Imdg companyImdg; @@ -30,23 +34,41 @@ public class ReportINACCNT_Collector extends ReportWithPeriodCollector companies = companyImdg.getCollectionObjectsByPredicate(clearingCodePredicate); + Set companyIds = companies.stream() + .map(Company::getId) + .collect(Collectors.toSet()); ImdgPredicate accountTypePredicate = builder.or( - builder.equals("accountType", "CLRN"), - builder.equals("accountType", "INFO") + builder.equals("accountType", AccountType.Clrn.getKey()), + builder.equals("accountType", AccountType.Info.getKey()) ); - Collection accountBalances = accountBalanceImdg.getCollectionObjectsByPredicate(accountTypePredicate); + ImdgPredicate companyIdPredicates = builder.equals("companyId", -1); + for (Long companyId : companyIds) { + companyIdPredicates = builder.or(companyIdPredicates, builder.equals("companyId", companyId)); + } + ImdgPredicate finalPredicate = builder.and(accountTypePredicate, companyIdPredicates); + Collection accountBalances = accountBalanceImdg.getCollectionObjectsByPredicate(finalPredicate); + ReportINACCNT reportINACCNT = new ReportINACCNT(clearingCode, LocalDate.now(), LocalTime.now()); + for (AccountBalance accountBalance : accountBalances) { + ReportINACCNT.Info_INACCNT infoReport = new ReportINACCNT.Info_INACCNT( + toString(accountBalance.getId()), + toString(accountBalance.getFullName()), + toString(clearingCode), + toString(accountBalance.getAccount()), + toString(accountBalance.getOpenBalanceAmount()), + toString(accountBalance.getDebitAmount()), + toString(accountBalance.getCreditAmount()), + toString(accountBalance.getCloseBalanceAmount())); + reportINACCNT.getRows().add(infoReport); + } - - return null; + return reportINACCNT; } @Override diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/AccountType.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/AccountType.java index bf0f5f50b..fa04d58a6 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/AccountType.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/AccountType.java @@ -3,7 +3,7 @@ package ru.spcex.platform.enumeration; import ru.spcex.platform.utils.enumeration.IEnumKey; public enum AccountType implements IEnumKey { - Clrn("CLRN"), Bank("BANK"); + Clrn("CLRN"), Bank("BANK"), Info("INFO"); private final String key;