From 0b2e5a13fb7bafba54387290a66838b8a853a748 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Fri, 30 Sep 2022 13:08:13 +0300 Subject: [PATCH] export by request --- .../exporter/logic/data/ResultContainer.java | 9 ++++++++ .../logic/stages/ExportFromHazelcast.java | 14 ++++++++---- .../dbf/exporter/services/CommandService.java | 22 +++++++++++++++++-- 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/ResultContainer.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/ResultContainer.java index 507a379e6..0ad0d79fd 100644 --- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/ResultContainer.java +++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/ResultContainer.java @@ -12,6 +12,7 @@ public class ResultContainer { private UUID uuid; private Table tableForExport; private File fileForExport; + private Long groupId; protected ResultContainer() {} @@ -45,4 +46,12 @@ public class ResultContainer { public void setUuid(UUID uuid) { this.uuid = uuid; } + + public Long getGroupId() { + return groupId; + } + + public void setGroupId(Long groupId) { + this.groupId = groupId; + } } diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/ExportFromHazelcast.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/ExportFromHazelcast.java index f6318249d..57899ab4a 100644 --- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/ExportFromHazelcast.java +++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/ExportFromHazelcast.java @@ -68,12 +68,18 @@ public class ExportFromHazelcast extends Stage implements InitializingBean { boolean emptyMap = true; try (DBFWriter dbfWriter = new DBFWriter(dbfFile, dbfCharset)) { dbfWriter.setFields(dbfFieldsForTable.get(table)); - Collection allValues = map.getAllValues(); - if (allValues.isEmpty()) { + Collection tableRows; + if (resultContainer.getGroupId() != null) { + Map queryParams = Map.of("generationId", resultContainer.getGroupId()); + tableRows = map.getCollectionObjectsByFieldValues(queryParams); + } else { + tableRows = map.getAllValues(); + } + if (tableRows.isEmpty()) { log.info("uuid {}. Map {} is empty.", resultContainer.getUuid(), resultContainer.getTableForExport().getHazelcastMapName()); return StageResult.COMPLETE; } - for (SpcexObjectBase value : allValues) { + for (SpcexObjectBase value : tableRows) { Object[] values; if (value instanceof SDf02 sDf02Value) values = s_df02_converter.toObjectArray(sDf02Value); else if (value instanceof SDf08 sDf08Value) values = s_df08_converter.toObjectArray(sDf08Value); @@ -84,7 +90,7 @@ public class ExportFromHazelcast extends Stage implements InitializingBean { dbfWriter.addRecord(values); } writeOk = true; - emptyMap = allValues.isEmpty(); + emptyMap = tableRows.isEmpty(); } catch (Exception e) { log.error(String.format("uuid %s. Can't export table %s to file %s. Table was skipped.", resultContainer.getUuid(), table, dbfFile), e); return StageResult.ERROR; diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/CommandService.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/CommandService.java index 87fdc1fa1..1f79f2ba0 100644 --- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/CommandService.java +++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/CommandService.java @@ -3,20 +3,30 @@ package ru.spcex.clearing.dbf.exporter.services; import org.apache.kafka.clients.consumer.Consumer; import org.springframework.beans.factory.InitializingBean; import org.springframework.stereotype.Service; +import ru.spcex.clearing.dbf.exporter.logic.data.ResultContainer; +import ru.spcex.clearing.dbf.exporter.logic.data.enums.Table; +import ru.spcex.clearing.dbf.exporter.logic.stages.Processor; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.balance.ExportToFileRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; import ru.spcex.platform.imdg.api.ImdgProvider; +import java.util.Arrays; +import java.util.Optional; + @Service public class CommandService extends QueueConsumer implements InitializingBean { private final ImdgProvider imdgProvider; + private final Processor processor; - public CommandService(Consumer kafkaQueue, ImdgProvider imdgProvider) { + public CommandService(Consumer kafkaQueue, + ImdgProvider imdgProvider, + Processor processor) { super(kafkaQueue); this.imdgProvider = imdgProvider; + this.processor = processor; } @Override @@ -28,6 +38,14 @@ public class CommandService extends QueueConsumer implements InitializingBean { } private void process(BaseRequest systemRequest) { - + ExportToFileRequest request = systemRequest.getRequestPayload(); + Optional tableForExport = Arrays.stream(Table.values()). + filter(table -> table.getFilePrefix().equalsIgnoreCase(request.getNameOfTable())).findFirst(); + if (tableForExport.isEmpty()) { + throw new IllegalStateException("Unsupported table prefix"); + } + ResultContainer resultContainer = ResultContainer.createNewTask(tableForExport.get()); + resultContainer.setGroupId(request.getSdfGroupId()); + processor.process(resultContainer); } }