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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.clearing.classes.statics.data.misc.Session;
import ru.spcex.platform.enumeration.ReportBuilderType;
import ru.spcex.platform.enumeration.ReportKeys;
import ru.spcex.platform.imdg.api.Imdg;
import java.io.File;
import java.io.FileWriter;
@ -19,10 +21,11 @@ import java.io.Writer;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Locale;
import java.util.*;
import java.util.stream.Collectors;
/**
* Класс для построения отчетов в формате CSV
@ -139,6 +142,16 @@ public abstract class CSVReportBuilder<P, R> {
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> {
@Override
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.execution.ExecutionFond;
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.reports.reports.CSVReportBuilder;
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> {
protected final DateTimeFormatter fileNameDateTimeFormatter = DateTimeFormatter.ofPattern("yyMMddHHmmssSSS");
protected final Imdg<ExecutionFond> executionFondImdg;
protected final Imdg<Session> sessionImdg;
private final Imdg<Company> companyImdg;
private final Imdg<STrades> sTradesImdg;
@ -32,6 +34,7 @@ public abstract class ExecutedDealReportBuilderCommon<P> extends CSVReportBuilde
public ExecutedDealReportBuilderCommon(ImdgProvider imdgProvider) {
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.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.util.Collection;
import java.util.List;
@Component
public class ExecutedDealReportBuilder_INFTYPE_1 extends ExecutedDealReportBuilderCommon<SessionIdParam> {
@ -30,9 +31,11 @@ public class ExecutedDealReportBuilder_INFTYPE_1 extends ExecutedDealReportBuild
@Override
protected Collection<ExecutionFond> getExecutionFondsForReport(SessionIdParam params) {
ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder();
List<Long> sessionIds = params.getSessionId();
if (sessionIds == null || sessionIds.isEmpty()) sessionIds = getSessionIdsForCurrentDate(sessionImdg);
return executionFondImdg.getCollectionObjectsByPredicate(
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.equals("settlementDate", LocalDate.now())
)

View file

@ -9,6 +9,7 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import java.time.LocalDate;
import java.util.Collection;
import java.util.List;
@Component
public class ExecutedDealReportBuilder_INFTYPE_2 extends ExecutedDealReportBuilderCommon<SessionIdParam> {
@ -30,9 +31,11 @@ public class ExecutedDealReportBuilder_INFTYPE_2 extends ExecutedDealReportBuild
@Override
protected Collection<ExecutionFond> getExecutionFondsForReport(SessionIdParam params) {
ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder();
List<Long> sessionIds = params.getSessionId();
if (sessionIds == null || sessionIds.isEmpty()) sessionIds = getSessionIdsForCurrentDate(sessionImdg);
return executionFondImdg.getCollectionObjectsByPredicate(
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("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.execution.ExecutionFond;
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.reports.reports.CSVReportBuilder;
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<Company> companyImdg;
private final Imdg<STrades> sTradesImdg;
private final Imdg<Session> sessionImdg;
public UnfulfilledDealReportBuilder(ImdgProvider imdgProvider) {
executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
sTradesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class);
sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
}
private List<UnfulfilledDealReport> rows = null;
@ -64,8 +67,10 @@ public class UnfulfilledDealReportBuilder extends CSVReportBuilder<SessionIdPara
@Override
protected void collect(SessionIdParam params) {
ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder();
List<Long> sessionIds = params.getSessionId();
if (sessionIds == null || sessionIds.isEmpty()) sessionIds = getSessionIdsForCurrentDate(sessionImdg);
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())
);
Collection<ExecutionFond> executionFonds = executionFondImdg.getCollectionObjectsByPredicate(predicate);

View file

@ -63,8 +63,10 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder<SessionIdParam
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
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(
pb.in("sessionId", params.getSessionId().toArray(new Long[0])),
pb.in("sessionId", sessionIds.toArray(new Long[0])),
pb.equals("clearingDate", nowDate),
pb.sql(sql),
pb.or(

View file

@ -62,9 +62,11 @@ public class KSRepDepoNettoReportBuilder extends CSVReportBuilder<SessionIdParam
LocalDate nowDate = LocalDate.now();
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();
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.sql(sql),
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 java.io.File;
import java.time.LocalDate;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -239,8 +238,6 @@ public class ReportService extends QueueConsumer implements InitializingBean {
List<Long> sessionIds = null;
if (userRequest.getRequestPayload().getSessionId() != null) {
sessionIds = List.of(userRequest.getRequestPayload().getSessionId());
} else {
sessionIds = getSessionIdsForDate(LocalDate.now());
}
Map<File, ReportInfo> outFiles = createReportsForTask(sessionIds, reportBuildersForGREP.values());
@ -261,8 +258,6 @@ public class ReportService extends QueueConsumer implements InitializingBean {
List<Long> sessionIds = null;
if (userRequest.getRequestPayload().getSessionId() != null) {
sessionIds = List.of(userRequest.getRequestPayload().getSessionId());
} else {
sessionIds = getSessionIdsForDate(LocalDate.now());
}
Map<File, ReportInfo> outFiles = createReportsForTask(sessionIds, reportBuildersForGRET.values());
@ -301,8 +296,6 @@ public class ReportService extends QueueConsumer implements InitializingBean {
List<Long> sessionIds = null;
if (userRequest.getRequestPayload().getSessionId() != null) {
sessionIds = List.of(userRequest.getRequestPayload().getSessionId());
} else {
sessionIds = getSessionIdsForDate(LocalDate.now());
}
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) {
for (File file : files) {
reportsSftpGateway.sendToSftp(file);