This commit is contained in:
akulikov 2023-08-04 18:35:55 +03:00
parent 1e713c1292
commit 98335c8b2e
8 changed files with 38 additions and 24 deletions

View file

@ -9,8 +9,10 @@ import com.opencsv.exceptions.CsvFieldAssignmentException;
import com.opencsv.exceptions.CsvRequiredFieldEmptyException; import com.opencsv.exceptions.CsvRequiredFieldEmptyException;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import ru.clearing.classes.statics.data.misc.Session;
import ru.spcex.platform.enumeration.ReportBuilderType; import ru.spcex.platform.enumeration.ReportBuilderType;
import ru.spcex.platform.enumeration.ReportKeys; import ru.spcex.platform.enumeration.ReportKeys;
import ru.spcex.platform.imdg.api.Imdg;
import java.io.File; import java.io.File;
import java.io.FileWriter; import java.io.FileWriter;
@ -19,10 +21,11 @@ import java.io.Writer;
import java.lang.reflect.Constructor; import java.lang.reflect.Constructor;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.List; import java.util.*;
import java.util.Locale; import java.util.stream.Collectors;
/** /**
* Класс для построения отчетов в формате CSV * Класс для построения отчетов в формате CSV
@ -139,6 +142,16 @@ public abstract class CSVReportBuilder<P, R> {
return filename; return filename;
} }
protected List<Long> getSessionIdsForCurrentDate(Imdg<Session> sessionImdg) {
Collection<Session> sessionForCurrentDay = sessionImdg.getCollectionObjectsByFieldValues(
Map.of(
"clearingDate", LocalDate.now()
)
);
Set<Long> sessionIds = sessionForCurrentDay.stream().map(Session::getId).collect(Collectors.toSet());
return sessionIds.stream().toList();
}
static class CustomStrategy<T> extends ColumnPositionMappingStrategy<T> { static class CustomStrategy<T> extends ColumnPositionMappingStrategy<T> {
@Override @Override
public String[] generateHeader(T bean) throws CsvRequiredFieldEmptyException { public String[] generateHeader(T bean) throws CsvRequiredFieldEmptyException {

View file

@ -3,6 +3,7 @@ package ru.spcex.clearing.reports.reports.bp;
import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.execution.ExecutionFond; import ru.clearing.classes.statics.data.execution.ExecutionFond;
import ru.clearing.classes.statics.data.misc.STrades; import ru.clearing.classes.statics.data.misc.STrades;
import ru.clearing.classes.statics.data.misc.Session;
import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.CSVReportBuilder; import ru.spcex.clearing.reports.reports.CSVReportBuilder;
import ru.spcex.clearing.reports.reports.bean.ExecutedDealReport; import ru.spcex.clearing.reports.reports.bean.ExecutedDealReport;
@ -21,6 +22,7 @@ import java.util.Map;
public abstract class ExecutedDealReportBuilderCommon<P> extends CSVReportBuilder<P, ExecutedDealReport> { public abstract class ExecutedDealReportBuilderCommon<P> extends CSVReportBuilder<P, ExecutedDealReport> {
protected final DateTimeFormatter fileNameDateTimeFormatter = DateTimeFormatter.ofPattern("yyMMddHHmmssSSS"); protected final DateTimeFormatter fileNameDateTimeFormatter = DateTimeFormatter.ofPattern("yyMMddHHmmssSSS");
protected final Imdg<ExecutionFond> executionFondImdg; protected final Imdg<ExecutionFond> executionFondImdg;
protected final Imdg<Session> sessionImdg;
private final Imdg<Company> companyImdg; private final Imdg<Company> companyImdg;
private final Imdg<STrades> sTradesImdg; private final Imdg<STrades> sTradesImdg;
@ -32,6 +34,7 @@ public abstract class ExecutedDealReportBuilderCommon<P> extends CSVReportBuilde
public ExecutedDealReportBuilderCommon(ImdgProvider imdgProvider) { public ExecutedDealReportBuilderCommon(ImdgProvider imdgProvider) {
this.executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); this.executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
this.sTradesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class); this.sTradesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class);
} }

View file

@ -9,6 +9,7 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.Collection; import java.util.Collection;
import java.util.List;
@Component @Component
public class ExecutedDealReportBuilder_INFTYPE_1 extends ExecutedDealReportBuilderCommon<SessionIdParam> { public class ExecutedDealReportBuilder_INFTYPE_1 extends ExecutedDealReportBuilderCommon<SessionIdParam> {
@ -30,9 +31,11 @@ public class ExecutedDealReportBuilder_INFTYPE_1 extends ExecutedDealReportBuild
@Override @Override
protected Collection<ExecutionFond> getExecutionFondsForReport(SessionIdParam params) { protected Collection<ExecutionFond> getExecutionFondsForReport(SessionIdParam params) {
ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder();
List<Long> sessionIds = params.getSessionId();
if (sessionIds == null || sessionIds.isEmpty()) sessionIds = getSessionIdsForCurrentDate(sessionImdg);
return executionFondImdg.getCollectionObjectsByPredicate( return executionFondImdg.getCollectionObjectsByPredicate(
pb.and( pb.and(
pb.in("sessionId", params.getSessionId().toArray(new Long[0])), pb.in("sessionId", sessionIds.toArray(new Long[0])),
pb.less("tradingDate", LocalDate.now()), pb.less("tradingDate", LocalDate.now()),
pb.equals("settlementDate", LocalDate.now()) pb.equals("settlementDate", LocalDate.now())
) )

View file

@ -9,6 +9,7 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.Collection; import java.util.Collection;
import java.util.List;
@Component @Component
public class ExecutedDealReportBuilder_INFTYPE_2 extends ExecutedDealReportBuilderCommon<SessionIdParam> { public class ExecutedDealReportBuilder_INFTYPE_2 extends ExecutedDealReportBuilderCommon<SessionIdParam> {
@ -30,9 +31,11 @@ public class ExecutedDealReportBuilder_INFTYPE_2 extends ExecutedDealReportBuild
@Override @Override
protected Collection<ExecutionFond> getExecutionFondsForReport(SessionIdParam params) { protected Collection<ExecutionFond> getExecutionFondsForReport(SessionIdParam params) {
ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder();
List<Long> sessionIds = params.getSessionId();
if (sessionIds == null || sessionIds.isEmpty()) sessionIds = getSessionIdsForCurrentDate(sessionImdg);
return executionFondImdg.getCollectionObjectsByPredicate( return executionFondImdg.getCollectionObjectsByPredicate(
pb.and( pb.and(
pb.in("sessionId", params.getSessionId().toArray(new Long[0])), pb.in("sessionId",sessionIds.toArray(new Long[0])),
pb.equals("tradingDate", LocalDate.now()), pb.equals("tradingDate", LocalDate.now()),
pb.equals("settlementDate", LocalDate.now()) pb.equals("settlementDate", LocalDate.now())
) )

View file

@ -4,6 +4,7 @@ import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.execution.ExecutionFond; import ru.clearing.classes.statics.data.execution.ExecutionFond;
import ru.clearing.classes.statics.data.misc.STrades; import ru.clearing.classes.statics.data.misc.STrades;
import ru.clearing.classes.statics.data.misc.Session;
import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.CSVReportBuilder; import ru.spcex.clearing.reports.reports.CSVReportBuilder;
import ru.spcex.clearing.reports.reports.SessionIdParam; import ru.spcex.clearing.reports.reports.SessionIdParam;
@ -27,11 +28,13 @@ public class UnfulfilledDealReportBuilder extends CSVReportBuilder<SessionIdPara
private final Imdg<ExecutionFond> executionFondImdg; private final Imdg<ExecutionFond> executionFondImdg;
private final Imdg<Company> companyImdg; private final Imdg<Company> companyImdg;
private final Imdg<STrades> sTradesImdg; private final Imdg<STrades> sTradesImdg;
private final Imdg<Session> sessionImdg;
public UnfulfilledDealReportBuilder(ImdgProvider imdgProvider) { public UnfulfilledDealReportBuilder(ImdgProvider imdgProvider) {
executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
sTradesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class); sTradesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class);
sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
} }
private List<UnfulfilledDealReport> rows = null; private List<UnfulfilledDealReport> rows = null;
@ -64,8 +67,10 @@ public class UnfulfilledDealReportBuilder extends CSVReportBuilder<SessionIdPara
@Override @Override
protected void collect(SessionIdParam params) { protected void collect(SessionIdParam params) {
ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder();
List<Long> sessionIds = params.getSessionId();
if (sessionIds == null || sessionIds.isEmpty()) sessionIds = getSessionIdsForCurrentDate(sessionImdg);
ImdgPredicate predicate = pb.and( ImdgPredicate predicate = pb.and(
pb.in("sessionId", params.getSessionId().toArray(new Long[0])), pb.in("sessionId", sessionIds.toArray(new Long[0])),
pb.equals("coverageStatus", Allowed.DENIED.getKey()) pb.equals("coverageStatus", Allowed.DENIED.getKey())
); );
Collection<ExecutionFond> executionFonds = executionFondImdg.getCollectionObjectsByPredicate(predicate); Collection<ExecutionFond> executionFonds = executionFondImdg.getCollectionObjectsByPredicate(predicate);

View file

@ -63,8 +63,10 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder<SessionIdParam
ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.TM_T, RegistryTradingParams.OM_T).build(); String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.TM_T, RegistryTradingParams.OM_T).build();
List<Long> sessionIds = params.getSessionId();
if (sessionIds == null || sessionIds.isEmpty()) sessionIds = getSessionIdsForCurrentDate(sessionImdg);
ImdgPredicate finalPredicate = pb.and( ImdgPredicate finalPredicate = pb.and(
pb.in("sessionId", params.getSessionId().toArray(new Long[0])), pb.in("sessionId", sessionIds.toArray(new Long[0])),
pb.equals("clearingDate", nowDate), pb.equals("clearingDate", nowDate),
pb.sql(sql), pb.sql(sql),
pb.or( pb.or(

View file

@ -62,9 +62,11 @@ public class KSRepDepoNettoReportBuilder extends CSVReportBuilder<SessionIdParam
LocalDate nowDate = LocalDate.now(); LocalDate nowDate = LocalDate.now();
ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
List<Long> sessionIds = params.getSessionId();
if (sessionIds == null || sessionIds.isEmpty()) sessionIds = getSessionIdsForCurrentDate(sessionImdg);
String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.TS_T, RegistryTradingParams.OS_T).build(); String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.TS_T, RegistryTradingParams.OS_T).build();
ImdgPredicate finalPredicate = pb.and( ImdgPredicate finalPredicate = pb.and(
pb.in("sessionId", params.getSessionId().toArray(new Long[0])), pb.in("sessionId", sessionIds.toArray(new Long[0])),
pb.equals("clearingDate", nowDate), pb.equals("clearingDate", nowDate),
pb.sql(sql), pb.sql(sql),
pb.equals("accountType", AccountType.Depo.getKey()), pb.equals("accountType", AccountType.Depo.getKey()),

View file

@ -37,7 +37,6 @@ import ru.spcex.platform.utils.enumeration.IEnumKey;
import ru.spcex.platform.utils.validation.IValidator; import ru.spcex.platform.utils.validation.IValidator;
import java.io.File; import java.io.File;
import java.time.LocalDate;
import java.util.*; import java.util.*;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -239,8 +238,6 @@ public class ReportService extends QueueConsumer implements InitializingBean {
List<Long> sessionIds = null; List<Long> sessionIds = null;
if (userRequest.getRequestPayload().getSessionId() != null) { if (userRequest.getRequestPayload().getSessionId() != null) {
sessionIds = List.of(userRequest.getRequestPayload().getSessionId()); sessionIds = List.of(userRequest.getRequestPayload().getSessionId());
} else {
sessionIds = getSessionIdsForDate(LocalDate.now());
} }
Map<File, ReportInfo> outFiles = createReportsForTask(sessionIds, reportBuildersForGREP.values()); Map<File, ReportInfo> outFiles = createReportsForTask(sessionIds, reportBuildersForGREP.values());
@ -261,8 +258,6 @@ public class ReportService extends QueueConsumer implements InitializingBean {
List<Long> sessionIds = null; List<Long> sessionIds = null;
if (userRequest.getRequestPayload().getSessionId() != null) { if (userRequest.getRequestPayload().getSessionId() != null) {
sessionIds = List.of(userRequest.getRequestPayload().getSessionId()); sessionIds = List.of(userRequest.getRequestPayload().getSessionId());
} else {
sessionIds = getSessionIdsForDate(LocalDate.now());
} }
Map<File, ReportInfo> outFiles = createReportsForTask(sessionIds, reportBuildersForGRET.values()); Map<File, ReportInfo> outFiles = createReportsForTask(sessionIds, reportBuildersForGRET.values());
@ -301,8 +296,6 @@ public class ReportService extends QueueConsumer implements InitializingBean {
List<Long> sessionIds = null; List<Long> sessionIds = null;
if (userRequest.getRequestPayload().getSessionId() != null) { if (userRequest.getRequestPayload().getSessionId() != null) {
sessionIds = List.of(userRequest.getRequestPayload().getSessionId()); sessionIds = List.of(userRequest.getRequestPayload().getSessionId());
} else {
sessionIds = getSessionIdsForDate(LocalDate.now());
} }
Map<File, ReportInfo> outFiles = createReportsForTask(sessionIds, reportBuildersForGREF.values()); Map<File, ReportInfo> outFiles = createReportsForTask(sessionIds, reportBuildersForGREF.values());
@ -380,16 +373,6 @@ public class ReportService extends QueueConsumer implements InitializingBean {
} }
} }
private List<Long> getSessionIdsForDate(LocalDate date) {
Collection<Session> sessionForCurrentDay = sessionImdg.getCollectionObjectsByFieldValues(
Map.of(
"clearingDate", date
)
);
Set<Long> sessionIds = sessionForCurrentDay.stream().map(Session::getId).collect(Collectors.toSet());
return sessionIds.stream().toList();
}
private void sendFilesToSftp(Collection<File> files) { private void sendFilesToSftp(Collection<File> files) {
for (File file : files) { for (File file : files) {
reportsSftpGateway.sendToSftp(file); reportsSftpGateway.sendToSftp(file);