This commit is contained in:
parent
1e713c1292
commit
98335c8b2e
8 changed files with 38 additions and 24 deletions
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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())
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -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())
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
|
|
@ -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()),
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue