diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/ReportBuildersConfig.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/ReportBuildersConfig.java index 3ddea924f..d768be5a7 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/ReportBuildersConfig.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/ReportBuildersConfig.java @@ -24,7 +24,8 @@ public class ReportBuildersConfig { KSRepDepoRegistersReportBuilder ksRepDepoRegistersReportBuilder, KSRepDepoRegisterQuantitiesReportBuilder ksRepDepoRegisterQuantitiesReportBuilder, KSRepTradesReportBuilder ksRepTradesReportBuilder, - KSRepFirmDetailsReportBuilder ksRepFirmDetailsReportBuilder + KSRepFirmDetailsReportBuilder ksRepFirmDetailsReportBuilder, + KSSessionListReportBuilder ksSessionListReportBuilder ) { Map>> resultMap = new HashMap<>(); resultMap.put(ReportBuilderType.KS_REP_CASH_REGISTERS, List.of(ksRepCashRegistersReportBuilder)); @@ -33,6 +34,7 @@ public class ReportBuildersConfig { resultMap.put(ReportBuilderType.KS_REP_DEPO_REGISTER_QUANTITIES, List.of(ksRepDepoRegisterQuantitiesReportBuilder)); resultMap.put(ReportBuilderType.KS_REP_TRADES, List.of(ksRepTradesReportBuilder)); resultMap.put(ReportBuilderType.KS_REP_FIRM_DETAILS, List.of(ksRepFirmDetailsReportBuilder)); + resultMap.put(ReportBuilderType.KS_SESSION_LIST, List.of(ksSessionListReportBuilder)); return resultMap; } @@ -70,7 +72,8 @@ public class ReportBuildersConfig { KSRepTradesReportBuilder ksRepTradesReportBuilder, KSRepFirmDetailsReportBuilder ksRepFirmDetailsReportBuilder, KSRepCashNettoReportBuilder ksRepCashNettoReportBuilder, - KSRepDepoNettoReportBuilder ksRepDepoNettoReportBuilder + KSRepDepoNettoReportBuilder ksRepDepoNettoReportBuilder, + KSSessionListReportBuilder ksSessionListReportBuilder ) { Map>> resultMap = new HashMap<>(); resultMap.put(ReportBuilderType.KS_REP_CASH_REGISTERS, List.of(ksRepCashRegistersReportBuilder)); @@ -81,6 +84,7 @@ public class ReportBuildersConfig { resultMap.put(ReportBuilderType.KS_REP_FIRM_DETAILS, List.of(ksRepFirmDetailsReportBuilder)); resultMap.put(ReportBuilderType.KS_REP_CASH_NETTO, List.of(ksRepCashNettoReportBuilder)); resultMap.put(ReportBuilderType.KS_REP_DEPO_NETTO, List.of(ksRepDepoNettoReportBuilder)); + resultMap.put(ReportBuilderType.KS_SESSION_LIST, List.of(ksSessionListReportBuilder)); return resultMap; } @@ -93,7 +97,8 @@ public class ReportBuildersConfig { KSRepTradesReportBuilder ksRepTradesReportBuilder, KSRepFirmDetailsReportBuilder ksRepFirmDetailsReportBuilder, KSRepCashNettoReportBuilder ksRepCashNettoReportBuilder, - KSRepDepoNettoReportBuilder ksRepDepoNettoReportBuilder + KSRepDepoNettoReportBuilder ksRepDepoNettoReportBuilder, + KSSessionListReportBuilder ksSessionListReportBuilder ) { Map>> resultMap = new HashMap<>(); resultMap.put(ReportBuilderType.KS_REP_CASH_REGISTERS, List.of(ksRepCashRegistersReportBuilder)); @@ -104,6 +109,7 @@ public class ReportBuildersConfig { resultMap.put(ReportBuilderType.KS_REP_FIRM_DETAILS, List.of(ksRepFirmDetailsReportBuilder)); resultMap.put(ReportBuilderType.KS_REP_CASH_NETTO, List.of(ksRepCashNettoReportBuilder)); resultMap.put(ReportBuilderType.KS_REP_DEPO_NETTO, List.of(ksRepDepoNettoReportBuilder)); + resultMap.put(ReportBuilderType.KS_SESSION_LIST, List.of(ksSessionListReportBuilder)); return resultMap; } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/validation/ValidationConfig.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/validation/ValidationConfig.java index ed1c129c4..d505ac135 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/validation/ValidationConfig.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/validation/ValidationConfig.java @@ -61,7 +61,8 @@ public class ValidationConfig { ReportBuilderType.KS_REP_DEPO_REGISTERS, ReportBuilderType.KS_REP_DEPO_REGISTER_QUANTITIES, ReportBuilderType.KS_REP_TRADES, - ReportBuilderType.KS_REP_FIRM_DETAILS + ReportBuilderType.KS_REP_FIRM_DETAILS, + ReportBuilderType.KS_SESSION_LIST }, ReportError.WrongFieldValue, ReportError.RequiredFieldEmpty) diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder.java index 019c72974..e35889902 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder.java @@ -33,7 +33,7 @@ public abstract class CSVReportBuilder { protected static final Logger log = LoggerFactory.getLogger(CSVReportBuilder.class); protected DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy'T'HH:mm:ss"); protected DateTimeFormatter dateTimeFormatter_YYMMDDHHmmssSSS = DateTimeFormatter.ofPattern("yyMMddHHmmssSSS"); - protected DateTimeFormatter dateFormatter_yyMMdd = DateTimeFormatter.ofPattern("yyMMdd"); + protected DateTimeFormatter dateFormatter_yyyyMMdd = DateTimeFormatter.ofPattern("yyyyMMdd"); /** * Возвращает списком значения CSV отчета. Каждый элемент списка - строка, элемент массива внутри списка - столбец. diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/SessionIdParam.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/SessionIdParam.java index e2a529e6b..716071a2e 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/SessionIdParam.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/SessionIdParam.java @@ -1,16 +1,18 @@ package ru.spcex.clearing.reports.reports; +import java.util.List; + /** * Параметры для формирования отчета по SessionId */ public class SessionIdParam { - private Long sessionId; + private List sessionId; - public Long getSessionId() { + public List getSessionId() { return sessionId; } - public void setSessionId(Long sessionId) { + public void setSessionId(List sessionId) { this.sessionId = sessionId; } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSSessionListReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSSessionListReport.java new file mode 100644 index 000000000..fd5babde3 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSSessionListReport.java @@ -0,0 +1,83 @@ +package ru.spcex.clearing.reports.reports.bean; + +import com.opencsv.bean.CsvBindByName; +import com.opencsv.bean.CsvBindByPosition; +import com.opencsv.bean.CsvDate; + +import java.time.Instant; + +public class KSSessionListReport { + @CsvBindByName(column = "ID") + @CsvBindByPosition(position = 0) + private Long id; + + @CsvBindByName(column = "CREATED_AT") + @CsvBindByPosition(position = 1) + @CsvDate(value = "dd.MM.yyyy'T'HH:mm:ss") + private Instant createdAt; + + @CsvBindByName(column = "UPDATED_AT") + @CsvBindByPosition(position = 2) + @CsvDate(value = "dd.MM.yyyy'T'HH:mm:ss") + private Instant updatedAt; + + @CsvBindByName(column = "SESSION_DATE") + @CsvBindByPosition(position = 3) + private String section; + + @CsvBindByName(column = "SESSION_TYPE") + @CsvBindByPosition(position = 4) + private String sessionType; + + @CsvBindByName(column = "WORKFLOW_STATUS") + @CsvBindByPosition(position = 5) + private String workflowStatus; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Instant getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Instant createdAt) { + this.createdAt = createdAt; + } + + public Instant getUpdatedAt() { + return updatedAt; + } + + public void setUpdatedAt(Instant updatedAt) { + this.updatedAt = updatedAt; + } + + public String getSection() { + return section; + } + + public void setSection(String section) { + this.section = section; + } + + public String getSessionType() { + return sessionType; + } + + public void setSessionType(String sessionType) { + this.sessionType = sessionType; + } + + public String getWorkflowStatus() { + return workflowStatus; + } + + public void setWorkflowStatus(String workflowStatus) { + this.workflowStatus = workflowStatus; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_1.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_1.java index ca7ebb1b3..625915547 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_1.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_1.java @@ -1,7 +1,5 @@ package ru.spcex.clearing.reports.reports.bp; -import org.springframework.beans.factory.config.ConfigurableBeanFactory; -import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.execution.ExecutionFond; import ru.spcex.clearing.reports.reports.SessionIdParam; @@ -13,7 +11,6 @@ import java.time.LocalDate; import java.util.Collection; @Component -@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) public class ExecutedDealReportBuilder_INFTYPE_1 extends ExecutedDealReportBuilderCommon { public ExecutedDealReportBuilder_INFTYPE_1(ImdgProvider imdgProvider) { @@ -35,7 +32,7 @@ public class ExecutedDealReportBuilder_INFTYPE_1 extends ExecutedDealReportBuild ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); return executionFondImdg.getCollectionObjectsByPredicate( pb.and( - pb.equals("sessionId", params.getSessionId()), + pb.in("sessionId", params.getSessionId().toArray(new Long[0])), pb.less("tradingDate", LocalDate.now()), pb.equals("settlementDate", LocalDate.now()) ) diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_2.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_2.java index f0b349ccd..176120811 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_2.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_2.java @@ -1,7 +1,5 @@ package ru.spcex.clearing.reports.reports.bp; -import org.springframework.beans.factory.config.ConfigurableBeanFactory; -import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.execution.ExecutionFond; import ru.spcex.clearing.reports.reports.SessionIdParam; @@ -13,7 +11,6 @@ import java.time.LocalDate; import java.util.Collection; @Component -@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) public class ExecutedDealReportBuilder_INFTYPE_2 extends ExecutedDealReportBuilderCommon { public ExecutedDealReportBuilder_INFTYPE_2(ImdgProvider imdgProvider) { @@ -35,7 +32,7 @@ public class ExecutedDealReportBuilder_INFTYPE_2 extends ExecutedDealReportBuild ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); return executionFondImdg.getCollectionObjectsByPredicate( pb.and( - pb.equals("sessionId", params.getSessionId()), + pb.in("sessionId", params.getSessionId().toArray(new Long[0])), pb.equals("tradingDate", LocalDate.now()), pb.equals("settlementDate", LocalDate.now()) ) diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_3.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_3.java index 819c1526d..a4dd63137 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_3.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_3.java @@ -1,7 +1,5 @@ package ru.spcex.clearing.reports.reports.bp; -import org.springframework.beans.factory.config.ConfigurableBeanFactory; -import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.execution.ExecutionFond; import ru.spcex.clearing.reports.reports.SessionIdParam; @@ -13,7 +11,6 @@ import java.time.LocalDate; import java.util.Collection; @Component -@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) public class ExecutedDealReportBuilder_INFTYPE_3 extends ExecutedDealReportBuilderCommon { public ExecutedDealReportBuilder_INFTYPE_3(ImdgProvider imdgProvider) { diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_4.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_4.java index 67f36cc29..e5f58fee1 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_4.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_4.java @@ -1,7 +1,5 @@ package ru.spcex.clearing.reports.reports.bp; -import org.springframework.beans.factory.config.ConfigurableBeanFactory; -import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.execution.ExecutionFond; import ru.spcex.clearing.reports.reports.SessionIdParam; @@ -14,7 +12,6 @@ import java.time.LocalDate; import java.util.Collection; @Component -@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) public class ExecutedDealReportBuilder_INFTYPE_4 extends ExecutedDealReportBuilderCommon { public ExecutedDealReportBuilder_INFTYPE_4(ImdgProvider imdgProvider) { diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReportBuilder.java index 3f7aaf4c8..754c4e56d 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReportBuilder.java @@ -1,7 +1,5 @@ package ru.spcex.clearing.reports.reports.bp; -import org.springframework.beans.factory.config.ConfigurableBeanFactory; -import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.execution.ExecutionFond; @@ -25,7 +23,6 @@ import java.util.List; import java.util.Map; @Component -@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) public class UnfulfilledDealReportBuilder extends CSVReportBuilder { private final Imdg executionFondImdg; private final Imdg companyImdg; @@ -68,7 +65,7 @@ public class UnfulfilledDealReportBuilder extends CSVReportBuilder executionFonds = executionFondImdg.getCollectionObjectsByPredicate(predicate); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashNettoReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashNettoReportBuilder.java index d819fb40a..10a50bf48 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashNettoReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashNettoReportBuilder.java @@ -1,7 +1,5 @@ package ru.spcex.clearing.reports.reports.ks; -import org.springframework.beans.factory.config.ConfigurableBeanFactory; -import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.misc.Session; import ru.clearing.classes.statics.data.registry.Registry; @@ -23,7 +21,6 @@ import java.util.*; import java.util.stream.Collectors; @Component -@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) public class KSRepCashNettoReportBuilder extends CSVReportBuilder { private final Imdg registryImdg; private final Imdg sessionImdg; @@ -67,7 +64,7 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder { private final Imdg registryImdg; private final Imdg companyImdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashRegistersReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashRegistersReportBuilder.java index 4c2405137..3f40c5a71 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashRegistersReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashRegistersReportBuilder.java @@ -1,7 +1,5 @@ package ru.spcex.clearing.reports.reports.ks; -import org.springframework.beans.factory.config.ConfigurableBeanFactory; -import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.registry.Registry; @@ -26,7 +24,6 @@ import java.util.List; import java.util.Map; @Component -@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) public class KSRepCashRegistersReportBuilder extends CSVReportBuilder { private final Imdg registryImdg; private final Imdg companyImdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepDepoNettoReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepDepoNettoReportBuilder.java index 0a512da06..2cb1b6803 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepDepoNettoReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepDepoNettoReportBuilder.java @@ -1,7 +1,5 @@ package ru.spcex.clearing.reports.reports.ks; -import org.springframework.beans.factory.config.ConfigurableBeanFactory; -import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.misc.Session; import ru.clearing.classes.statics.data.registry.Registry; @@ -23,7 +21,6 @@ import java.util.*; import java.util.stream.Collectors; @Component -@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) public class KSRepDepoNettoReportBuilder extends CSVReportBuilder { private final Imdg registryImdg; private final Imdg sessionImdg; @@ -67,7 +64,7 @@ public class KSRepDepoNettoReportBuilder extends CSVReportBuilder groupedRegistry = entry.getValue(); try { if (groupedRegistry.size() != 2) { - log.warn("Invalid OM_T and TM_T registries for GroupId = {} and SettlementDate = {}. Registries with id = [{}] was skipped", + log.warn("Invalid OS_T and TS_T registries for GroupId = {} and SettlementDate = {}. Registries with id = [{}] was skipped", pairRegistryId.getGroupId(), pairRegistryId.getSettlementDate(), groupedRegistry.stream().map(r -> String.valueOf(r.getId())).collect(Collectors.joining(", ")) @@ -99,7 +96,7 @@ public class KSRepDepoNettoReportBuilder extends CSVReportBuilder { private final Imdg registryImdg; private final Imdg companyImdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepDepoRegistersReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepDepoRegistersReportBuilder.java index af361854e..cba01bc6a 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepDepoRegistersReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepDepoRegistersReportBuilder.java @@ -1,7 +1,5 @@ package ru.spcex.clearing.reports.reports.ks; -import org.springframework.beans.factory.config.ConfigurableBeanFactory; -import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.registry.Registry; @@ -26,7 +24,6 @@ import java.util.List; import java.util.Map; @Component -@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) public class KSRepDepoRegistersReportBuilder extends CSVReportBuilder { private final Imdg registryImdg; private final Imdg companyImdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepFirmDetailsReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepFirmDetailsReportBuilder.java index 8f650c31b..db55c5854 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepFirmDetailsReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepFirmDetailsReportBuilder.java @@ -1,7 +1,5 @@ package ru.spcex.clearing.reports.reports.ks; -import org.springframework.beans.factory.config.ConfigurableBeanFactory; -import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.company.CompanySymbols; @@ -20,7 +18,6 @@ import java.util.List; import java.util.Map; @Component -@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) public class KSRepFirmDetailsReportBuilder extends CSVReportBuilder { private final Imdg companyImdg; private final Imdg companySymbolsImdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepTradesReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepTradesReportBuilder.java index 353bd0887..eb64ecb38 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepTradesReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepTradesReportBuilder.java @@ -1,12 +1,11 @@ package ru.spcex.clearing.reports.reports.ks; -import org.springframework.beans.factory.config.ConfigurableBeanFactory; -import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.execution.ExecutionCommon; import ru.clearing.classes.statics.data.execution.ExecutionDeposit; import ru.clearing.classes.statics.data.execution.ExecutionFond; +import ru.clearing.classes.statics.data.misc.Market; import ru.clearing.classes.statics.data.misc.Session; import ru.clearing.classes.statics.data.registry.Registry; import ru.spcex.clearing.imdg.IMDGDistributedNames; @@ -24,15 +23,16 @@ import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; @Component -@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) public class KSRepTradesReportBuilder extends CSVReportBuilder { private final Imdg executionDepositImdg; private final Imdg executionFondImdg; private final Imdg sessionImdg; private final Imdg registryImdg; + private final Imdg marketImdg; private final Imdg companyImdg; private List rows = null; @@ -43,6 +43,7 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder registries, Collection registryStatuses) { + for (Registry registry : registries) { + RegistryStatus registryStatus = IEnumKey.getEnumByKey(RegistryStatus.class, registry.getRegistryStatus()); + if (registryStatuses.contains(registryStatus)) continue; + return false; + } + return true; + } + + private boolean checkRegistryInstrumentType(Collection registries, Collection RegistryInstrumentTypes) { + for (Registry registry : registries) { + RegistryInstrumentType RegistryInstrumentType = IEnumKey.getEnumByKey(RegistryInstrumentType.class, registry.getRegistryInstrumentType()); + if (RegistryInstrumentTypes.contains(RegistryInstrumentType)) continue; + return false; + } + return true; + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSSessionListReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSSessionListReportBuilder.java new file mode 100644 index 000000000..0cdd2ee04 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSSessionListReportBuilder.java @@ -0,0 +1,75 @@ +package ru.spcex.clearing.reports.reports.ks; + +import org.springframework.stereotype.Component; +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.EmptyParams; +import ru.spcex.clearing.reports.reports.bean.KSSessionListReport; +import ru.spcex.platform.enumeration.ReportBuilderType; +import ru.spcex.platform.enumeration.ReportKeys; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +@Component +public class KSSessionListReportBuilder extends CSVReportBuilder { + private final Imdg sessionImdg; + + private List rows = null; + + public KSSessionListReportBuilder(ImdgProvider imdgProvider) { + sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); + } + + @Override + protected List getRows() { + return rows; + } + + @Override + public ReportBuilderType getReportType() { + return ReportBuilderType.KS_REP_FIRM_DETAILS; + } + + @Override + public ReportKeys getReportKey() { + return ReportKeys.KS_SESSION_LIST; + } + + @Override + public Class getParamsClass() { + return EmptyParams.class; + } + + @Override + public Class getReportClass() { + return KSSessionListReport.class; + } + + @Override + protected void collect(EmptyParams params) { + Collection sessions = sessionImdg.getCollectionObjectsByFieldValues(Map.of("clearingDate", LocalDate.now())); + rows = new ArrayList<>(sessions.size()); + for (Session session : sessions) { + try { + KSSessionListReport ksSessionListReport = new KSSessionListReport(); + ksSessionListReport.setId(session.getId()); + ksSessionListReport.setCreatedAt(session.getCreated()); + ksSessionListReport.setUpdatedAt(session.getUpdated()); + ksSessionListReport.setSection(session.getSection()); + ksSessionListReport.setSessionType(session.getSessionType()); + ksSessionListReport.setWorkflowStatus(session.getWorkflowStatus()); + + rows.add(ksSessionListReport); + } catch (Throwable e) { + log.error("Can't create report row for session (id = %d), skipped".formatted(session.getId()), e); + } + } + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java index 887fd7fc5..01373dc96 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java @@ -7,6 +7,8 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.misc.Session; +import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.gateway.ReportPart; @@ -27,12 +29,16 @@ import ru.spcex.platform.enumeration.ReportBuilderType; import ru.spcex.platform.enumeration.ReportKeys; import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.enumeration.Task; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; 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; @Service public class ReportService extends QueueConsumer implements InitializingBean { @@ -53,6 +59,8 @@ public class ReportService extends QueueConsumer implements InitializingBean { private final Map>> reportBuildersForGREF; private final Map>> reportBuildersForGRET; + private final Imdg sessionImdg; + private final File outFolder; public ReportService(Consumer kafkaQueue, @@ -84,7 +92,9 @@ public class ReportService extends QueueConsumer implements InitializingBean { @Qualifier("reportRequestGRETValidator") Function reportRequestGRETValidator, @Qualifier("reportRequestGREFValidator") - Function reportRequestGREFValidator + Function reportRequestGREFValidator, + + ImdgProvider imdgProvider ) { super(kafkaQueue, kafkaResponseQueue); @@ -102,6 +112,7 @@ public class ReportService extends QueueConsumer implements InitializingBean { this.reportBuildersForGREP = reportBuildersForGREP; this.reportBuildersForGREF = reportBuildersForGREF; this.reportBuildersForGRET = reportBuildersForGRET; + this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); assert outFolder.isDirectory(); } @@ -180,7 +191,7 @@ public class ReportService extends QueueConsumer implements InitializingBean { List outFilenames = new ArrayList<>(); for (CSVReportBuilder builder : builders) { SessionIdParam sessionIdParam = new SessionIdParam(); - sessionIdParam.setSessionId(req.getSessionId()); + sessionIdParam.setSessionId(List.of(req.getSessionId())); File outFile = builder.createReport(sessionIdParam, outFolder); if (outFile == null) continue; outFilenames.add(outFile.getAbsolutePath()); @@ -206,10 +217,15 @@ public class ReportService extends QueueConsumer implements InitializingBean { if (requestInfoUpdate != null) return null; logUnknownProperties(userRequest); - Long sessionId = userRequest.getRequestPayload().getSessionId(); - Map outFilenames = createReportsForTask(sessionId, reportBuildersForGREP.values()); + List sessionIds = null; + if (userRequest.getRequestPayload().getSessionId() != null) { + sessionIds = List.of(userRequest.getRequestPayload().getSessionId()); + } else { + sessionIds = getSessionIdsForDate(LocalDate.now()); + } + Map outFilenames = createReportsForTask(sessionIds, reportBuildersForGREP.values()); - sendReportsToGateway(sessionId, outFilenames, ReportType.REPORT_KS_TMP.getKey()); + sendReportsToGateway(sessionIds, outFilenames, ReportType.REPORT_KS_TMP.getKey()); return null; } @@ -222,10 +238,15 @@ public class ReportService extends QueueConsumer implements InitializingBean { if (requestInfoUpdate != null) return null; logUnknownProperties(userRequest); - Long sessionId = userRequest.getRequestPayload().getSessionId(); - Map outFilenames = createReportsForTask(sessionId, reportBuildersForGRET.values()); + List sessionIds = null; + if (userRequest.getRequestPayload().getSessionId() != null) { + sessionIds = List.of(userRequest.getRequestPayload().getSessionId()); + } else { + sessionIds = getSessionIdsForDate(LocalDate.now()); + } + Map outFilenames = createReportsForTask(sessionIds, reportBuildersForGRET.values()); - sendReportsToGateway(sessionId, outFilenames, null); + sendReportsToGateway(sessionIds, outFilenames, null); return null; } @@ -238,14 +259,19 @@ public class ReportService extends QueueConsumer implements InitializingBean { if (requestInfoUpdate != null) return null; logUnknownProperties(userRequest); - Long sessionId = userRequest.getRequestPayload().getSessionId(); - Map outFilenames = createReportsForTask(sessionId, reportBuildersForGREF.values()); + List sessionIds = null; + if (userRequest.getRequestPayload().getSessionId() != null) { + sessionIds = List.of(userRequest.getRequestPayload().getSessionId()); + } else { + sessionIds = getSessionIdsForDate(LocalDate.now()); + } + Map outFilenames = createReportsForTask(sessionIds, reportBuildersForGREF.values()); - sendReportsToGateway(sessionId, outFilenames, ReportType.REPORT_KS_FINAL.getKey()); + sendReportsToGateway(sessionIds, outFilenames, ReportType.REPORT_KS_FINAL.getKey()); return null; } - private Map createReportsForTask(Long sessionId, Collection>> buildersForTask) { + private Map createReportsForTask(List sessionIds, Collection>> buildersForTask) { Map outFilenames = new HashMap<>(); int cntErrors = 0; for (List> builders : buildersForTask) { @@ -258,9 +284,9 @@ public class ReportService extends QueueConsumer implements InitializingBean { continue; } outFilenames.put(outFile.getName(), builder.getReportKey()); - } else if (builder.getParamsClass() == SessionIdParam.class && sessionId != null) { + } else if (builder.getParamsClass() == SessionIdParam.class) { SessionIdParam sessionIdParam = new SessionIdParam(); - sessionIdParam.setSessionId(sessionId); + sessionIdParam.setSessionId(sessionIds); File outFile = ((CSVReportBuilder) builder).createReport(sessionIdParam, outFolder); if (outFile == null) { log.warn("Something wrong, report type: {}", builder.getReportType().getKey()); @@ -277,9 +303,9 @@ public class ReportService extends QueueConsumer implements InitializingBean { return outFilenames; } - private void sendReportsToGateway(Long sessionId, Map reportsWithReportType, String type) { + private void sendReportsToGateway(List sessionIds, Map reportsWithReportType, String type) { SendReportRequest sendReportRequest = new SendReportRequest(); - sendReportRequest.setSessionId(sessionId); + sendReportRequest.setSessionId(sessionIds); sendReportRequest.setType(type); List reports = new ArrayList<>(reportsWithReportType.size()); for (Map.Entry entry : reportsWithReportType.entrySet()) { @@ -299,4 +325,14 @@ public class ReportService extends QueueConsumer implements InitializingBean { } } + private List getSessionIdsForDate(LocalDate date) { + Collection sessionForCurrentDay = sessionImdg.getCollectionObjectsByFieldValues( + Map.of( + "clearingDate", date + ) + ); + Set sessionIds = sessionForCurrentDay.stream().map(Session::getId).collect(Collectors.toSet()); + return sessionIds.stream().toList(); + } + } diff --git a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java index 5d859c6ba..8782c42d0 100644 --- a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java +++ b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java @@ -18,6 +18,7 @@ import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.company.CompanySymbols; import ru.clearing.classes.statics.data.execution.ExecutionDeposit; import ru.clearing.classes.statics.data.execution.ExecutionFond; +import ru.clearing.classes.statics.data.misc.Market; import ru.clearing.classes.statics.data.misc.Session; import ru.clearing.classes.statics.data.profile.ProfileDocument; import ru.clearing.classes.statics.data.registry.Registry; @@ -63,13 +64,14 @@ import static org.junit.jupiter.api.Assertions.assertEquals; }) @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class ReportServiceTest_KS { - protected DateTimeFormatter dateFormatter_yyMMdd = DateTimeFormatter.ofPattern("yyMMdd"); + protected DateTimeFormatter dateFormatter_yyyyMMdd = DateTimeFormatter.ofPattern("yyyyMMdd"); private static File outFolder; private static int reportRequestCnt = 0; private static int reportRequestWithSessionIdCnt = 0; private static int reportRequestWithSessionIdListCnt = 0; private static int reportRequestWithPeriodCnt = 0; private Imdg registryImdg; + private Imdg marketImdg; private Imdg companyImdg; private Imdg registryCodeDictionaryImdg; private Imdg executionDepositImdg; @@ -303,19 +305,23 @@ public class ReportServiceTest_KS { executionFond.setCoverageStatus(CoverageStatus.ALWD.getKey()); executionFondImdg.insert(executionFond); + Market market = new Market(); + market.setCode("3333"); + Long marketId = marketImdg.insert(market); + Registry registry = new Registry(); registry.setSessionId(sessionId_2); registry.setRegistryCode("OM_T"); registry.setRegistryDesignation(RegistryDesignation.O.getKey()); registry.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); registry.setRegistryUnit(RegistryUnit.T.getKey()); - registry.setGroupId(Long.parseLong("%s%d%s".formatted(dateFormatter_yyMMdd.format(LocalDate.now()), 222, "333"))); + registry.setGroupId(Long.parseLong("%s%d%d".formatted(dateFormatter_yyyyMMdd.format(LocalDate.now()), 222, marketId))); registry.setRegistryStatus(RegistryStatus.FAIL.getKey()); registry.setRegistryInstrumentType(RegistryInstrumentType.S.getKey()); registryImdg.insert(registry); ExecutionDeposit executionDeposit = new ExecutionDeposit(); - executionDeposit.setMarket("333"); + executionDeposit.setMarket("3333"); executionDeposit.setCompanyId(COMPANY_ID); executionDeposit.setTradingDate(LocalDate.now()); executionDeposit.setSessionId(sessionId_2); @@ -540,6 +546,52 @@ public class ReportServiceTest_KS { } + @Test + @Order(9) + public void createReportTest_KSListSessionReport() throws IOException, CsvValidationException { + clearTestDir(); + + Session session_1 = new Session(); + session_1.setCreated(Instant.ofEpochSecond(1777777777L)); + session_1.setUpdated(Instant.ofEpochSecond(2777777777L)); + session_1.setSection(Section.MKR.getKey()); + session_1.setSessionType(SessionType.FINL.getKey()); + session_1.setWorkflowStatus(WorkflowStatus.Active.getKey()); + session_1.setClearingDate(LocalDate.now()); + sessionImdg.insert(session_1); + + Session session_2 = new Session(); + session_2.setCreated(Instant.ofEpochSecond(3777777777L)); + session_2.setUpdated(Instant.ofEpochSecond(4777777777L)); + session_2.setSection(Section.FOND.getKey()); + session_2.setSessionType(SessionType.IPO0.getKey()); + session_2.setWorkflowStatus(WorkflowStatus.Blocked.getKey()); + session_2.setClearingDate(LocalDate.now()); + sessionImdg.insert(session_2); + + ReportRequest reportRequest = new ReportRequest(); + reportRequest.setReportId(ReportBuilderType.KS_SESSION_LIST.getKey()); + + String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); + + TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), + Consts.CREATE_REPORT, + reportRequestCnt++, + 0, + jsonString); + + TestUtils.waitingSendAndCheckRecord(0L, producer); + + File outFile = outFolder.listFiles()[0]; + File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/ks/KS_SESSION_LIST_expected.csv").getFile()); + compareCSVFiles(expectedFile, outFile, List.of("ID")); + + sessionImdg.delete(session_1); + sessionImdg.delete(session_2); + + } + + private void compareCSVFiles(File expectedFile, File actualFile, List columnsForSkip) throws IOException, CsvValidationException { if (columnsForSkip == null) columnsForSkip = Collections.emptyList(); CSVParser csvParser = new CSVParserBuilder().withSeparator(',').withQuoteChar('\"').build(); @@ -599,6 +651,7 @@ public class ReportServiceTest_KS { sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); profileDocumentImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ProfileDocument, ProfileDocument.class); + marketImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Market, Market.class); } private void clearTestDir() throws IOException { diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_SESSION_LIST_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_SESSION_LIST_expected.csv new file mode 100644 index 000000000..374a8343d --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_SESSION_LIST_expected.csv @@ -0,0 +1,3 @@ +"ID","CREATED_AT","UPDATED_AT","SESSION_DATE","SESSION_TYPE","WORKFLOW_STATUS" +"2","03.05.2026T03:09:37","09.01.2058T04:56:17","MKR","FINL","ACTV" +"3","17.09.2089T06:42:57","27.05.2121T08:29:37","FOND","IPO0","BLKD" diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportBuilderType.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportBuilderType.java index 66ba08544..b3ec76fa4 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportBuilderType.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportBuilderType.java @@ -17,6 +17,7 @@ public enum ReportBuilderType implements IEnumKey { KS_REP_CASH_NETTO("ks_rep_cash_netto"), KS_REP_DEPO_NETTO("ks_rep_depo_netto"), KS_REP_FIRM_DETAILS("ks_rep_firm_details"), + KS_SESSION_LIST("ks_session_list"), ; private final String key; diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportKeys.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportKeys.java index 188602013..9d94028a4 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportKeys.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportKeys.java @@ -17,6 +17,7 @@ public enum ReportKeys implements IEnumKey { KS_REP_CASH_NETTO("KS_REP_CASH_NETTO"), KS_REP_DEPO_NETTO("KS_REP_DEPO_NETTO"), KS_REP_FIRM_DETAILS("KS_REP_FIRM_DETAILS"), + KS_SESSION_LIST("KS_SESSION_LIST"), ; private final String key; diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/gateway/SendReportRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/gateway/SendReportRequest.java index 6494cfe71..6952a6c4a 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/gateway/SendReportRequest.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/gateway/SendReportRequest.java @@ -6,7 +6,7 @@ import java.util.List; public class SendReportRequest { @JsonProperty - private Long sessionId; + private List sessionId; @JsonProperty private String type; @@ -14,11 +14,11 @@ public class SendReportRequest { @JsonProperty private List reports; - public Long getSessionId() { + public List getSessionId() { return sessionId; } - public void setSessionId(Long sessionId) { + public void setSessionId(List sessionId) { this.sessionId = sessionId; }