This commit is contained in:
akulikov 2023-01-10 17:36:57 +03:00
parent a966d80995
commit 5851f2e11e
6 changed files with 65 additions and 120 deletions

View file

@ -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);
}

View file

@ -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<Row> rows;
private final List<Info_INACCNT> 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<Row> getRows() {
public List<Info_INACCNT> getRows() {
return rows;
}
public void setRows(List<Row> 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) {
}
}

View file

@ -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)
);
}
}

View file

@ -0,0 +1,10 @@
package ru.spcex.clearing.reports.services;
import ru.spcex.clearing.reports.reports.AbstractReport;
public abstract class ReportForClearingCodeCollector<T extends AbstractReport> extends AbstractReportCollector<T> {
/**
* Подготовка отчета по clearingCode
*/
abstract public T collectReportForClearingCode(String clearingCode);
}

View file

@ -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<ReportINACCNT> {
public class ReportINACCNT_Collector extends ReportForClearingCodeCollector<ReportINACCNT> {
private final Imdg<AccountBalance> accountBalanceImdg;
private final Imdg<Company> companyImdg;
@ -30,23 +34,41 @@ public class ReportINACCNT_Collector extends ReportWithPeriodCollector<ReportINA
}
@Override
public ReportINACCNT collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
String companyClearingCode;
validateDateRange(startDate, endDate);
public ReportINACCNT collectReportForClearingCode(String clearingCode) {
ImdgPredicateBuilder builder = new ImdgPredicateBuilderHazelcast();
ImdgPredicate clearingCodePredicate = builder.equals("clearingCode", clearingCode);
Collection<Company> companies = companyImdg.getCollectionObjectsByPredicate(clearingCodePredicate);
Set<Long> 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<AccountBalance> 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<AccountBalance> 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

View file

@ -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;