From 4d9cdf9c9f91f1936ea9c995de61a3fbd2fdc515 Mon Sep 17 00:00:00 2001 From: Ivan Nikolaev-Axenov Date: Wed, 27 May 2026 13:02:00 +0300 Subject: [PATCH] TUTDF processing added, localization added --- .../aggregator/FileAggregatorCommon.java | 143 +++++++++++- .../TutdfAccountFileAggregator.java | 53 +++++ .../TutdfFidPassportOgrnFileAggregator.java | 87 ++++++++ .../TutdfInformationFileAggregator.java | 75 +++++++ .../exporter/ExcelExporter.java | 41 +++- .../exporter/JsonExporter.java | 27 ++- .../filter/TableFilter.java | 5 - .../DefaultFirstLevelTableFilter.java | 50 ----- .../firstlevel/FirstLevelTableFilter.java | 10 - .../AccountSecondLevelTableFilter.java | 69 ------ .../RuUidSecondLevelTableFilter.java | 77 ------- .../secondlevel/SecondLevelTableFilter.java | 10 - .../BlocksThirdLevelTableFilter.java | 88 -------- .../thirdlevel/ThirdLevelTableFilter.java | 10 - .../loader/AccountTableLoader.java | 107 +++++++++ .../loader/BankruptcyTableLoader.java | 87 ++++++++ .../loader/ConsumerBankruptcyTableLoader.java | 87 ++++++++ .../loader/FirstLevelTableLoader.java | 7 +- .../loader/IdTableLoader.java | 65 +++++- .../loader/InformationTableLoader.java | 95 ++++++++ .../loader/LegalTableLoader.java | 87 ++++++++ .../loader/RuApplicationTableLoader.java | 37 +++- .../loader/RuBankruptcyTableLoader.java | 33 ++- .../loader/RuCapabilityTableLoader.java | 33 ++- .../loader/RuDebtBurdenInfoTableLoader.java | 33 ++- .../loader/RuObligPartTakeTableLoader.java | 33 ++- .../loader/RuOtherLegalTableLoader.java | 33 ++- .../loader/RuSettledTableLoader.java | 33 ++- .../loader/RuUidTableLoader.java | 46 +++- .../loader/TableLoaderForId.java | 9 +- .../subtable/AccountAmendTableLoader.java | 44 ++++ .../subtable/AccountSubTableLoader.java | 14 ++ .../subtable/BankGuaranteeTableLoader.java | 44 ++++ .../subtable/CollateralTableLoader.java | 44 ++++ .../loader/subtable/GuarantorTableLoader.java | 44 ++++ .../loader/subtable/PaymentTableLoader.java | 44 ++++ .../subtable/RuAccountAmtTableLoader.java | 8 +- .../RuAcquirerIndividTableLoader.java | 8 +- .../subtable/RuAcquirerLegalTableLoader.java | 8 +- .../subtable/RuAllArrearsTableLoader.java | 8 +- .../subtable/RuAmendmentTableLoader.java | 8 +- .../subtable/RuAmountInfoTableLoader.java | 8 +- .../loader/subtable/RuArrearTableLoader.java | 8 +- .../RuBankruptcyBlocksTableLoader.java | 8 +- .../subtable/RuCoborrowerTableLoader.java | 8 +- .../subtable/RuCollatInsuredTableLoader.java | 8 +- .../subtable/RuCollatRepayTableLoader.java | 8 +- .../RuCollateralBlocksTableLoader.java | 8 +- .../subtable/RuCollateralTableLoader.java | 8 +- .../RuContractTermsChangesTableLoader.java | 8 +- .../subtable/RuDueArrearTableLoader.java | 8 +- .../subtable/RuFundDateTableLoader.java | 8 +- .../subtable/RuGuaranteeRepayTableLoader.java | 8 +- .../subtable/RuGuarantorTableLoader.java | 8 +- .../subtable/RuIndepGuarantorTableLoader.java | 8 +- .../subtable/RuLegalRecordTableLoader.java | 8 +- .../subtable/RuMonthAverPaymtTableLoader.java | 8 +- .../subtable/RuObligAccountTableLoader.java | 8 +- .../RuObligTerminationTableLoader.java | 8 +- .../RuObligsRcBankruptTableLoader.java | 8 +- .../subtable/RuObligsRcLiquidTableLoader.java | 8 +- .../subtable/RuOverallvalTableLoader.java | 8 +- .../subtable/RuPastDueArrearTableLoader.java | 8 +- .../subtable/RuPaymtConditionTableLoader.java | 8 +- .../loader/subtable/RuPaymtTableLoader.java | 8 +- .../subtable/RuServiceCoTableLoader.java | 8 +- .../RuSourceNonMonetObligTableLoader.java | 8 +- .../RuSubjectNonMonetObligTableLoader.java | 8 +- .../subtable/RuSubmitHoldTableLoader.java | 8 +- .../loader/subtable/RuTradeTableLoader.java | 8 +- .../loader/subtable/RuUidSubTableLoader.java | 6 +- .../model/TableMetaData.java | 51 +++++ .../repository/bank/SettingsMapper.java | 4 + .../repository/indic/IndicMapper.java | 19 ++ .../service/IndicSearchService.java | 207 +++++++++++++++++- .../util/IndicSearchUtils.java | 83 +++++-- src/main/resources/application.properties | 3 +- .../bank/localization_object_mapper.xml | 1 + .../mappers/bank/settings_mapper.xml | 18 ++ .../resources/mappers/indic/indic_mapper.xml | 174 ++++++++++++++- 80 files changed, 2158 insertions(+), 484 deletions(-) create mode 100644 src/main/java/ru/nbch/indicsearchservice/aggregator/TutdfAccountFileAggregator.java create mode 100644 src/main/java/ru/nbch/indicsearchservice/aggregator/TutdfFidPassportOgrnFileAggregator.java create mode 100644 src/main/java/ru/nbch/indicsearchservice/aggregator/TutdfInformationFileAggregator.java delete mode 100644 src/main/java/ru/nbch/indicsearchservice/filter/TableFilter.java delete mode 100644 src/main/java/ru/nbch/indicsearchservice/filter/firstlevel/DefaultFirstLevelTableFilter.java delete mode 100644 src/main/java/ru/nbch/indicsearchservice/filter/firstlevel/FirstLevelTableFilter.java delete mode 100644 src/main/java/ru/nbch/indicsearchservice/filter/secondlevel/AccountSecondLevelTableFilter.java delete mode 100644 src/main/java/ru/nbch/indicsearchservice/filter/secondlevel/RuUidSecondLevelTableFilter.java delete mode 100644 src/main/java/ru/nbch/indicsearchservice/filter/secondlevel/SecondLevelTableFilter.java delete mode 100644 src/main/java/ru/nbch/indicsearchservice/filter/thirdlevel/BlocksThirdLevelTableFilter.java delete mode 100644 src/main/java/ru/nbch/indicsearchservice/filter/thirdlevel/ThirdLevelTableFilter.java create mode 100644 src/main/java/ru/nbch/indicsearchservice/loader/AccountTableLoader.java create mode 100644 src/main/java/ru/nbch/indicsearchservice/loader/BankruptcyTableLoader.java create mode 100644 src/main/java/ru/nbch/indicsearchservice/loader/ConsumerBankruptcyTableLoader.java create mode 100644 src/main/java/ru/nbch/indicsearchservice/loader/InformationTableLoader.java create mode 100644 src/main/java/ru/nbch/indicsearchservice/loader/LegalTableLoader.java create mode 100644 src/main/java/ru/nbch/indicsearchservice/loader/subtable/AccountAmendTableLoader.java create mode 100644 src/main/java/ru/nbch/indicsearchservice/loader/subtable/AccountSubTableLoader.java create mode 100644 src/main/java/ru/nbch/indicsearchservice/loader/subtable/BankGuaranteeTableLoader.java create mode 100644 src/main/java/ru/nbch/indicsearchservice/loader/subtable/CollateralTableLoader.java create mode 100644 src/main/java/ru/nbch/indicsearchservice/loader/subtable/GuarantorTableLoader.java create mode 100644 src/main/java/ru/nbch/indicsearchservice/loader/subtable/PaymentTableLoader.java create mode 100644 src/main/java/ru/nbch/indicsearchservice/model/TableMetaData.java diff --git a/src/main/java/ru/nbch/indicsearchservice/aggregator/FileAggregatorCommon.java b/src/main/java/ru/nbch/indicsearchservice/aggregator/FileAggregatorCommon.java index c33705a..ec93335 100644 --- a/src/main/java/ru/nbch/indicsearchservice/aggregator/FileAggregatorCommon.java +++ b/src/main/java/ru/nbch/indicsearchservice/aggregator/FileAggregatorCommon.java @@ -51,6 +51,13 @@ public class FileAggregatorCommon { "RU_CONTRACT_TERMS_CHANGES", "RU_ALL_ARREARS" ); + private static final List ACCOUNT_CHILD_TABLES = List.of( + "ACCOUNT_AMEND", + "PAYMENT", + "COLLATERAL", + "GUARANTOR", + "BANK_GUARANTEE" + ); void aggregateRuUidFiles(BufferedWriter aggregatedFileWriter, Map tableFileMap, @@ -117,7 +124,7 @@ public class FileAggregatorCommon { List childLineList = Arrays.asList(childLine.split("%%%")); Optional foundChildAccSerialNum = IndicSearchCommon.getRowValue(childLineList, "ACC_SERIAL_NUM"); if (foundChildAccSerialNum.isEmpty()) { - throw new RuntimeException("ACC_SERIAL_NUM was not found!"); + throw new RuntimeException("ACC_SERIAL_NUM was not found in table " + childTableName); } Long childAccSerialNum = Long.parseLong(foundChildAccSerialNum.get()); @@ -126,7 +133,7 @@ public class FileAggregatorCommon { childLineList = Arrays.asList(childLine.split("%%%")); foundChildAccSerialNum = IndicSearchCommon.getRowValue(childLineList, "ACC_SERIAL_NUM"); if (foundChildAccSerialNum.isEmpty()) { - throw new RuntimeException("ACC_SERIAL_NUM was not found!"); + throw new RuntimeException("ACC_SERIAL_NUM was not found in table " + childTableName); } childAccSerialNum = Long.parseLong(foundChildAccSerialNum.get()); @@ -157,7 +164,7 @@ public class FileAggregatorCommon { childLineList = Arrays.asList(childLine.split("%%%")); foundChildAccSerialNum = IndicSearchCommon.getRowValue(childLineList, "ACC_SERIAL_NUM"); if (foundChildAccSerialNum.isEmpty()) { - throw new RuntimeException("ACC_SERIAL_NUM was not found!"); + throw new RuntimeException("ACC_SERIAL_NUM was not found in table " + childTableName); } childAccSerialNum = Long.parseLong(foundChildAccSerialNum.get()); @@ -269,4 +276,134 @@ public class FileAggregatorCommon { throw new RuntimeException(e); } } + + void aggregateAccountFiles(BufferedWriter aggregatedFileWriter, + Map tableFileMap, + String memberCode, + String acctNum, + String uuid, + String serialNum, + MutableLong rowCounter) { + try (BufferedReader accountFileReader = Files.newBufferedReader(tableFileMap.get("ACCOUNT"))) { + Map childTablesReadersMap = new LinkedHashMap<>(); + for (String tableName : ACCOUNT_CHILD_TABLES) { + if (!tableFileMap.containsKey(tableName)) { + continue; + } + + MovableBufferedReader childTablesReader = new MovableBufferedReader(Files.newBufferedReader(tableFileMap.get(tableName))); + if (childTablesReader.getCurrentLine() != null) { + childTablesReadersMap.put(tableName, childTablesReader); + } + } + + String accountLine; + while ((accountLine = accountFileReader.readLine()) != null) { + List lineList = Arrays.asList(accountLine.split("%%%")); + Optional foundMemberCode = IndicSearchCommon.getRowValue(lineList, "MEMBER_CODE"); + + if (foundMemberCode.isPresent() && !foundMemberCode.get().startsWith(memberCode)) { + continue; + } + + if (acctNum != null) { + Optional foundAcctNum = IndicSearchCommon.getRowValue(lineList, "ACCT_NUM"); + + if (foundAcctNum.isPresent() && !foundAcctNum.get().equals(acctNum)) { + continue; + } + } + if (uuid != null) { + Optional foundUuid = IndicSearchCommon.getRowValue(lineList, "UUID"); + + if (foundUuid.isPresent() && !foundUuid.get().equals(uuid)) { + continue; + } + } + + Optional foundAccountSerialNum = IndicSearchCommon.getRowValue(lineList, "SERIAL_NUM"); + if (serialNum != null) { + if (foundAccountSerialNum.isPresent() && !foundAccountSerialNum.get().equals(serialNum)) { + continue; + } + } + + aggregatedFileWriter.write(accountLine); + aggregatedFileWriter.newLine(); + rowCounter.increment(); + + if (foundAccountSerialNum.isEmpty()) { + throw new RuntimeException("SERIAL_NUM was not found!"); + } + Long accountSerialNum = Long.parseLong(foundAccountSerialNum.get()); + + for (Map.Entry entry : childTablesReadersMap.entrySet()) { + String childTableName = entry.getKey(); + MovableBufferedReader childReader = entry.getValue(); + + String childLine = childReader.getCurrentLine(); + if (childLine == null) { + continue; + } + + List childLineList = Arrays.asList(childLine.split("%%%")); + Optional foundChildAccSerialNum = IndicSearchCommon.getRowValue(childLineList, "ACC_SERIAL_NUM"); + if (foundChildAccSerialNum.isEmpty()) { + throw new RuntimeException("ACC_SERIAL_NUM was not found in table " + childTableName); + } + Long childAccSerialNum = Long.parseLong(foundChildAccSerialNum.get()); + + if (accountSerialNum > childAccSerialNum) { + while ((childLine = childReader.nextLine()) != null) { + childLineList = Arrays.asList(childLine.split("%%%")); + foundChildAccSerialNum = IndicSearchCommon.getRowValue(childLineList, "ACC_SERIAL_NUM"); + if (foundChildAccSerialNum.isEmpty()) { + throw new RuntimeException("ACC_SERIAL_NUM was not found in table " + childTableName); + } + childAccSerialNum = Long.parseLong(foundChildAccSerialNum.get()); + + if (childAccSerialNum.equals(accountSerialNum)) { + aggregatedFileWriter.write(childLine); + aggregatedFileWriter.newLine(); + rowCounter.increment(); + } + + if (childAccSerialNum > accountSerialNum) { + break; + } + } + } else if (accountSerialNum.equals(childAccSerialNum)) { + aggregatedFileWriter.write(childLine); + aggregatedFileWriter.newLine(); + rowCounter.increment(); + + while ((childLine = childReader.nextLine()) != null) { + childLineList = Arrays.asList(childLine.split("%%%")); + foundChildAccSerialNum = IndicSearchCommon.getRowValue(childLineList, "ACC_SERIAL_NUM"); + if (foundChildAccSerialNum.isEmpty()) { + throw new RuntimeException("ACC_SERIAL_NUM was not found in table " + childTableName); + } + childAccSerialNum = Long.parseLong(foundChildAccSerialNum.get()); + + if (childAccSerialNum.equals(accountSerialNum)) { + aggregatedFileWriter.write(childLine); + aggregatedFileWriter.newLine(); + rowCounter.increment(); + } + + if (childAccSerialNum > accountSerialNum) { + break; + } + } + } + } + } + + for (MovableBufferedReader br : childTablesReadersMap.values()) { + br.getReader().close(); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } } diff --git a/src/main/java/ru/nbch/indicsearchservice/aggregator/TutdfAccountFileAggregator.java b/src/main/java/ru/nbch/indicsearchservice/aggregator/TutdfAccountFileAggregator.java new file mode 100644 index 0000000..6a5ec90 --- /dev/null +++ b/src/main/java/ru/nbch/indicsearchservice/aggregator/TutdfAccountFileAggregator.java @@ -0,0 +1,53 @@ +package ru.nbch.indicsearchservice.aggregator; + +import java.io.BufferedWriter; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardOpenOption; +import java.util.Map; +import java.util.UUID; +import org.apache.commons.lang3.mutable.MutableLong; +import org.springframework.stereotype.Component; +import ru.nbch.indicsearchservice.config.settings.ApplicationSettings; +import ru.nbch.indicsearchservice.model.enums.DataType; +import ru.nbch.indicsearchservice.model.enums.SearchParameter; + +@Component +public class TutdfAccountFileAggregator implements FileAggregator { + private final ApplicationSettings settings; + private final FileAggregatorCommon fileAggregatorCommon; + + public TutdfAccountFileAggregator(ApplicationSettings settings, + FileAggregatorCommon fileAggregatorCommon) { + this.settings = settings; + this.fileAggregatorCommon = fileAggregatorCommon; + } + + @Override + public Path aggregateFiles(UUID taskId, DataType dataType, SearchParameter searchParameter, String searchValue, String memberCode, Map tableFileMap, MutableLong rowCounter) { + if (dataType == DataType.TUTDF) { + if (searchParameter == SearchParameter.UUID || searchParameter == SearchParameter.ACCT_NUM || searchParameter == SearchParameter.SERIAL_NUM_ACCT) { + Path aggregatedFile = settings.getStorageDirectory().toPath().resolve("AGGREGATED-" + taskId + ".csv"); + + try (BufferedWriter aggregatedFileWriter = Files.newBufferedWriter(aggregatedFile, StandardOpenOption.CREATE, StandardOpenOption.APPEND)) { + if (searchParameter == SearchParameter.UUID) { + fileAggregatorCommon.aggregateAccountFiles(aggregatedFileWriter, tableFileMap, memberCode, null, searchValue, null, rowCounter); + } else if (searchParameter == SearchParameter.ACCT_NUM) { + fileAggregatorCommon.aggregateAccountFiles(aggregatedFileWriter, tableFileMap, memberCode, searchValue, null, null, rowCounter); + } else { + fileAggregatorCommon.aggregateAccountFiles(aggregatedFileWriter, tableFileMap, memberCode, null, null, searchValue, rowCounter); + } + + aggregatedFileWriter.write("EOF"); + } catch (IOException e) { + throw new RuntimeException(e); + } + + return aggregatedFile; + } + } + + return null; + } +} diff --git a/src/main/java/ru/nbch/indicsearchservice/aggregator/TutdfFidPassportOgrnFileAggregator.java b/src/main/java/ru/nbch/indicsearchservice/aggregator/TutdfFidPassportOgrnFileAggregator.java new file mode 100644 index 0000000..7b2f157 --- /dev/null +++ b/src/main/java/ru/nbch/indicsearchservice/aggregator/TutdfFidPassportOgrnFileAggregator.java @@ -0,0 +1,87 @@ +package ru.nbch.indicsearchservice.aggregator; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardOpenOption; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; +import org.apache.commons.lang3.mutable.MutableLong; +import org.springframework.stereotype.Component; +import ru.nbch.indicsearchservice.config.settings.ApplicationSettings; +import ru.nbch.indicsearchservice.model.enums.DataType; +import ru.nbch.indicsearchservice.model.enums.SearchParameter; +import ru.nbch.indicsearchservice.util.IndicSearchCommon; + +@Component +public class TutdfFidPassportOgrnFileAggregator implements FileAggregator { + private static final List REQUIRED_TABLES = List.of( + "ACCOUNT", + "INFORMATION", + "BANKRUPTCY", + "CONSUMER_BANKRUPTCY", + "LEGAL" + ); + + private final ApplicationSettings settings; + private final FileAggregatorCommon fileAggregatorCommon; + + public TutdfFidPassportOgrnFileAggregator(ApplicationSettings settings, + FileAggregatorCommon fileAggregatorCommon) { + this.settings = settings; + this.fileAggregatorCommon = fileAggregatorCommon; + } + + @Override + public Path aggregateFiles(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + String searchValue, + String memberCode, + Map tableFileMap, + MutableLong rowCounter) { + if (dataType == DataType.TUTDF) { + if (searchParameter == SearchParameter.FID || searchParameter == SearchParameter.OGRN || searchParameter == SearchParameter.PASSPORT) { + Path aggregatedFile = settings.getStorageDirectory().toPath().resolve("AGGREGATED-" + taskId + ".csv"); + + try (BufferedWriter aggregatedFileWriter = Files.newBufferedWriter(aggregatedFile, StandardOpenOption.CREATE, StandardOpenOption.APPEND)) { + for (String tableName : REQUIRED_TABLES) { + if (tableName.equals("ACCOUNT")) { + fileAggregatorCommon.aggregateAccountFiles(aggregatedFileWriter, tableFileMap, memberCode, null, null, null, rowCounter); + } else { + try (BufferedReader reader = Files.newBufferedReader(tableFileMap.get(tableName))) { + String line; + + while ((line = reader.readLine()) != null) { + Optional foundMemberCode = IndicSearchCommon.getRowValue(line, "MEMBER_CODE"); + + if (foundMemberCode.isPresent() && !foundMemberCode.get().startsWith(memberCode)) { + continue; + } + + aggregatedFileWriter.write(line); + aggregatedFileWriter.newLine(); + rowCounter.increment(); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + + aggregatedFileWriter.write("EOF"); + } catch (IOException e) { + throw new RuntimeException(e); + } + + return aggregatedFile; + } + } + + return null; + } +} diff --git a/src/main/java/ru/nbch/indicsearchservice/aggregator/TutdfInformationFileAggregator.java b/src/main/java/ru/nbch/indicsearchservice/aggregator/TutdfInformationFileAggregator.java new file mode 100644 index 0000000..2194d0f --- /dev/null +++ b/src/main/java/ru/nbch/indicsearchservice/aggregator/TutdfInformationFileAggregator.java @@ -0,0 +1,75 @@ +package ru.nbch.indicsearchservice.aggregator; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardOpenOption; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; +import org.apache.commons.lang3.mutable.MutableLong; +import org.springframework.stereotype.Component; +import ru.nbch.indicsearchservice.config.settings.ApplicationSettings; +import ru.nbch.indicsearchservice.model.enums.DataType; +import ru.nbch.indicsearchservice.model.enums.SearchParameter; +import ru.nbch.indicsearchservice.util.IndicSearchCommon; + +@Component +public class TutdfInformationFileAggregator implements FileAggregator { + private final ApplicationSettings settings; + + public TutdfInformationFileAggregator(ApplicationSettings settings) { + this.settings = settings; + } + + @Override + public Path aggregateFiles(UUID taskId, DataType dataType, SearchParameter searchParameter, String searchValue, String memberCode, Map tableFileMap, MutableLong rowCounter) { + if (dataType == DataType.TUTDF) { + if (searchParameter == SearchParameter.OLD_APP_NUM || searchParameter == SearchParameter.SERIAL_NUM_APP) { + Path aggregatedFile = settings.getStorageDirectory().toPath().resolve("AGGREGATED-" + taskId + ".csv"); + + try (BufferedWriter aggregatedFileWriter = Files.newBufferedWriter(aggregatedFile, StandardOpenOption.CREATE, StandardOpenOption.APPEND); + BufferedReader reader = Files.newBufferedReader(tableFileMap.get("INFORMATION"))) { + String line; + + while ((line = reader.readLine()) != null) { + Optional foundMemberCode = IndicSearchCommon.getRowValue(line, "MEMBER_CODE"); + + if (foundMemberCode.isPresent() && !foundMemberCode.get().startsWith(memberCode)) { + continue; + } + + if (searchParameter == SearchParameter.OLD_APP_NUM && searchValue != null) { + Optional foundOldAppNum = IndicSearchCommon.getRowValue(line, "APP_NUM"); + + if (foundOldAppNum.isPresent() && !foundOldAppNum.get().equals(searchValue)) { + continue; + } + } + if (searchParameter == SearchParameter.SERIAL_NUM_APP && searchValue != null) { + Optional foundSerialNum = IndicSearchCommon.getRowValue(line, "SERIAL_NUM"); + + if (foundSerialNum.isPresent() && !foundSerialNum.get().equals(searchValue)) { + continue; + } + } + + aggregatedFileWriter.write(line); + aggregatedFileWriter.newLine(); + rowCounter.increment(); + } + + aggregatedFileWriter.write("EOF"); + } catch (IOException e) { + throw new RuntimeException(e); + } + + return aggregatedFile; + } + } + + return null; + } +} diff --git a/src/main/java/ru/nbch/indicsearchservice/exporter/ExcelExporter.java b/src/main/java/ru/nbch/indicsearchservice/exporter/ExcelExporter.java index 563b00e..78875ba 100644 --- a/src/main/java/ru/nbch/indicsearchservice/exporter/ExcelExporter.java +++ b/src/main/java/ru/nbch/indicsearchservice/exporter/ExcelExporter.java @@ -8,13 +8,17 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Set; import java.util.UUID; +import java.util.stream.Collectors; import org.apache.commons.lang3.mutable.MutableLong; +import org.apache.commons.lang3.tuple.Pair; import org.apache.poi.ss.usermodel.BorderStyle; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; @@ -29,6 +33,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import ru.nbch.indicsearchservice.config.settings.ApplicationSettings; +import ru.nbch.indicsearchservice.model.TableMetaData; @Component public class ExcelExporter implements Exporter { @@ -41,7 +46,7 @@ public class ExcelExporter implements Exporter { this.settings = settings; } - public void writeExcelFile(@Nullable Path aggregatedFile, UUID taskId, Long totalRows) { + public void writeExcelFile(@Nullable Path aggregatedFile, UUID taskId, Long totalRows, Map tableMetaDataMap) { if (aggregatedFile == null) { return; } @@ -72,7 +77,7 @@ public class ExcelExporter implements Exporter { if (!isFirst && (FIRST_LEVEL_TABLES.contains(lineList.getFirst()) || line.equals("EOF"))) { lastTableName = rows.getFirst().split("%%%")[0]; - writeToExcel(workbook, rows, sheetRowCounter, sheetTableCounter, headerCellStyle, cellStyle); + writeToExcel(workbook, rows, sheetRowCounter, sheetTableCounter, headerCellStyle, cellStyle, tableMetaDataMap); if (lastTableName != null && !lastTableName.equals(lineList.getFirst())) { sheetRowCounter.setValue(0L); sheetTableCounter.setValue(1L); @@ -95,7 +100,8 @@ public class ExcelExporter implements Exporter { MutableLong sheetRowCounter, MutableLong sheetTableCounter, CellStyle headerCellStyle, - CellStyle cellStyle) { + CellStyle cellStyle, + Map tableMetaDataMap) { if (rows == null || rows.isEmpty()) { return; } @@ -115,30 +121,41 @@ public class ExcelExporter implements Exporter { List rowList = Arrays.asList(row.split("%%%", -1)); String tableName = rowList.getFirst(); + TableMetaData rowMetaData = tableMetaDataMap.get(tableName); + + Set allowedFields = new HashSet<>(); + if (rowMetaData != null && rowMetaData.getFieldMetaData() != null) { + allowedFields = rowMetaData.getFieldMetaData().keySet().stream() + .map(String::toUpperCase) + .collect(Collectors.toSet()); + } + List rowSublist = rowList.subList(1, rowList.size()); - Map rowValues = new LinkedHashMap<>(); + Map> rowValues = new LinkedHashMap<>(); for (int i = 0; i + 1 <= rowSublist.size(); i = i + 2) { - try { - rowValues.put(rowSublist.get(i), rowSublist.get(i + 1)); - } catch (Exception e) { - throw new RuntimeException(e); + String columnName = rowSublist.get(i); + String columnValue = rowSublist.get(i + 1); + + if (columnName != null && allowedFields.contains(columnName.toUpperCase())) { + rowValues.put(columnName, Pair.of(rowMetaData.getFieldMetaData().get(columnName).fieldLocalization(), columnValue)); } } createHeaderRow( - tableName, + rowMetaData != null ? rowMetaData.getTableNameLocalization() : tableName, tableSheet, sheetRowCounter, headerCellStyle ); - for (Map.Entry entry : rowValues.entrySet()) { + for (Map.Entry> entry : rowValues.entrySet()) { String columnName = entry.getKey(); - String columnValue = entry.getValue(); + String columnLocalization = entry.getValue().getLeft(); + String columnValue = entry.getValue().getRight(); writeFieldDataIntoSheetRow( columnName, - columnName, + columnLocalization, columnValue, tableSheet, sheetRowCounter, diff --git a/src/main/java/ru/nbch/indicsearchservice/exporter/JsonExporter.java b/src/main/java/ru/nbch/indicsearchservice/exporter/JsonExporter.java index 9b77759..3c0224b 100644 --- a/src/main/java/ru/nbch/indicsearchservice/exporter/JsonExporter.java +++ b/src/main/java/ru/nbch/indicsearchservice/exporter/JsonExporter.java @@ -7,14 +7,19 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.UUID; +import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import ru.nbch.indicsearchservice.config.settings.ApplicationSettings; import ru.nbch.indicsearchservice.model.TableData; +import ru.nbch.indicsearchservice.model.TableMetaData; import tools.jackson.core.JsonGenerator; import tools.jackson.databind.json.JsonMapper; @@ -31,7 +36,7 @@ public class JsonExporter implements Exporter { this.jsonMapper = jsonMapper; } - public void writeJsonFile(@Nullable Path aggregatedFile, UUID taskId) { + public void writeJsonFile(@Nullable Path aggregatedFile, UUID taskId, Map tableMetaDataMap) { if (aggregatedFile == null) { return; } @@ -57,7 +62,7 @@ public class JsonExporter implements Exporter { String tableName = lineList.getFirst(); if (!isFirst && (FIRST_LEVEL_TABLES.contains(tableName) || line.equals("EOF"))) { - TableData parentData = buildTableDataHierarchy(rows); + TableData parentData = buildTableDataHierarchy(rows, tableMetaDataMap); if (parentData != null) { jsonMapper.writeValue(jsonGenerator, parentData); } @@ -74,18 +79,18 @@ public class JsonExporter implements Exporter { } } - private TableData buildTableDataHierarchy(List rows) { + private TableData buildTableDataHierarchy(List rows, Map tableMetaDataMap) { if (rows == null || rows.isEmpty()) { return null; } - TableData parentTableData = parseSingleRow(rows.getFirst()); + TableData parentTableData = parseSingleRow(rows.getFirst(), tableMetaDataMap); if (parentTableData == null) { return null; } for (int i = 1; i < rows.size(); i++) { - TableData childTableData = parseSingleRow(rows.get(i)); + TableData childTableData = parseSingleRow(rows.get(i), tableMetaDataMap); if (childTableData != null) { parentTableData.getRelatedTableData().add(childTableData); } @@ -94,7 +99,7 @@ public class JsonExporter implements Exporter { return parentTableData; } - private TableData parseSingleRow(String row) { + private TableData parseSingleRow(String row, Map tableMetaDataMap) { String[] parts = row.split("%%%", -1); if (parts.length == 0 || parts[0].isEmpty()) { @@ -102,6 +107,12 @@ public class JsonExporter implements Exporter { } String tableName = parts[0]; + TableMetaData metaData = tableMetaDataMap.get(tableName); + + Set allowedFields = metaData != null ? + metaData.getFieldMetaData().keySet().stream().map(String::toUpperCase).collect(Collectors.toSet()) : + new HashSet<>(); + List fieldData = new ArrayList<>(); for (int i = 1; i + 1 < parts.length; i += 2) { @@ -109,7 +120,9 @@ public class JsonExporter implements Exporter { String columnValue = parts[i + 1]; if (columnName != null && !columnName.isEmpty()) { - fieldData.add(new TableData.FieldData(columnName, columnValue)); + if (allowedFields.contains(columnName.toUpperCase())) { + fieldData.add(new TableData.FieldData(columnName, columnValue)); + } } } diff --git a/src/main/java/ru/nbch/indicsearchservice/filter/TableFilter.java b/src/main/java/ru/nbch/indicsearchservice/filter/TableFilter.java deleted file mode 100644 index e4d3b02..0000000 --- a/src/main/java/ru/nbch/indicsearchservice/filter/TableFilter.java +++ /dev/null @@ -1,5 +0,0 @@ -package ru.nbch.indicsearchservice.filter; - -public interface TableFilter { - -} diff --git a/src/main/java/ru/nbch/indicsearchservice/filter/firstlevel/DefaultFirstLevelTableFilter.java b/src/main/java/ru/nbch/indicsearchservice/filter/firstlevel/DefaultFirstLevelTableFilter.java deleted file mode 100644 index 7e96838..0000000 --- a/src/main/java/ru/nbch/indicsearchservice/filter/firstlevel/DefaultFirstLevelTableFilter.java +++ /dev/null @@ -1,50 +0,0 @@ -package ru.nbch.indicsearchservice.filter.firstlevel; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; -import org.springframework.stereotype.Component; -import ru.nbch.indicsearchservice.model.TableData; - -@Component -public class DefaultFirstLevelTableFilter implements FirstLevelTableFilter { - private static final Set SUPPORTED_TABLE_NAMES = Set.of( - "RU_UID", - "RU_APPLICATION", - "RU_OBLIGPARTTAKE", - "RU_BANKRUPTCY", - "RU_SETTLED", - "RU_OTHERLEGAL", - "RU_CAPABILITY", - "RU_DEBT_BURDEN_INFO", - "ACCOUNT", - "INFORMATION", - "BANKRUPTCY", - "CONSUMER_BANKRUPTCY", - "LEGAL" - ); - - @Override - public List applyFilter(Map> tableDataMapByFid, String memberCode) { - List result = new ArrayList<>(); - - for (Map.Entry> entry : tableDataMapByFid.entrySet()) { - String tableName = entry.getKey(); - List tableRows = entry.getValue(); - - if (SUPPORTED_TABLE_NAMES.contains(tableName)) { - List tableRowsWithMatchingMemberCode = tableRows.stream() - .filter(row -> row.getFieldData().stream() - .anyMatch(field -> "MEMBER_CODE".equals(field.columnName()) && - field.columnValue() != null && - field.columnValue().toString().startsWith(memberCode))) - .toList(); - - result.addAll(tableRowsWithMatchingMemberCode); - } - } - - return result; - } -} diff --git a/src/main/java/ru/nbch/indicsearchservice/filter/firstlevel/FirstLevelTableFilter.java b/src/main/java/ru/nbch/indicsearchservice/filter/firstlevel/FirstLevelTableFilter.java deleted file mode 100644 index 663a7a9..0000000 --- a/src/main/java/ru/nbch/indicsearchservice/filter/firstlevel/FirstLevelTableFilter.java +++ /dev/null @@ -1,10 +0,0 @@ -package ru.nbch.indicsearchservice.filter.firstlevel; - -import java.util.List; -import java.util.Map; -import ru.nbch.indicsearchservice.filter.TableFilter; -import ru.nbch.indicsearchservice.model.TableData; - -public interface FirstLevelTableFilter extends TableFilter { - List applyFilter(Map> tableDataMapByFid, String memberCode); -} diff --git a/src/main/java/ru/nbch/indicsearchservice/filter/secondlevel/AccountSecondLevelTableFilter.java b/src/main/java/ru/nbch/indicsearchservice/filter/secondlevel/AccountSecondLevelTableFilter.java deleted file mode 100644 index b2a4f0f..0000000 --- a/src/main/java/ru/nbch/indicsearchservice/filter/secondlevel/AccountSecondLevelTableFilter.java +++ /dev/null @@ -1,69 +0,0 @@ -package ru.nbch.indicsearchservice.filter.secondlevel; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import org.springframework.stereotype.Component; -import ru.nbch.indicsearchservice.model.TableData; - -@Component -public class AccountSecondLevelTableFilter implements SecondLevelTableFilter { - private static final Set SUPPORTED_TABLE_NAMES = Set.of( - "ACCOUNT_AMEND", - "PAYMENT", - "COLLATERAL", - "GUARANTOR", - "BANK_GUARANTEE" - ); - - @Override - public void applyFilter(List firstLevelTableDataList, Map> tableDataMapByFid) { - if (firstLevelTableDataList == null || firstLevelTableDataList.isEmpty() || tableDataMapByFid == null) { - return; - } - - Map> relatedTablesByAccSerialNum = new HashMap<>(); - - for (String supportedTableName : SUPPORTED_TABLE_NAMES) { - List childTables = tableDataMapByFid.get(supportedTableName); - - if (childTables != null) { - for (TableData childTable : childTables) { - Object accSerialNum = getFieldValue(childTable, "ACC_SERIAL_NUM"); - if (accSerialNum != null) { - relatedTablesByAccSerialNum - .computeIfAbsent(accSerialNum, k -> new ArrayList<>()) - .add(childTable); - } - } - } - } - - for (TableData parentTable : firstLevelTableDataList) { - Object serialNum = getFieldValue(parentTable, "SERIAL_NUM"); - - if (serialNum != null) { - List matchedParentTables = relatedTablesByAccSerialNum.get(serialNum); - if (matchedParentTables != null) { - parentTable.getRelatedTableData().addAll(matchedParentTables); - } - } - } - } - - private Object getFieldValue(TableData tableData, String targetColumnName) { - if (tableData.getFieldData() == null) { - return null; - } - - for (TableData.FieldData field : tableData.getFieldData()) { - if (targetColumnName.equals(field.columnName())) { - return field.columnValue(); - } - } - - return null; - } -} diff --git a/src/main/java/ru/nbch/indicsearchservice/filter/secondlevel/RuUidSecondLevelTableFilter.java b/src/main/java/ru/nbch/indicsearchservice/filter/secondlevel/RuUidSecondLevelTableFilter.java deleted file mode 100644 index 4f351e9..0000000 --- a/src/main/java/ru/nbch/indicsearchservice/filter/secondlevel/RuUidSecondLevelTableFilter.java +++ /dev/null @@ -1,77 +0,0 @@ -package ru.nbch.indicsearchservice.filter.secondlevel; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import org.springframework.stereotype.Component; -import ru.nbch.indicsearchservice.model.TableData; - -@Component -public class RuUidSecondLevelTableFilter implements SecondLevelTableFilter { - private static final Set SUPPORTED_TABLE_NAMES = Set.of( - "RU_ACCOUNT_AMT", - "RU_AMENDMENT", - "RU_ARREAR", - "RU_COBORROWER", - "RU_DUEARREAR", - "RU_FUNDDATE", - "RU_MONTHAVERPAYMT", - "RU_OVERALLVAL", - "RU_PASTDUEARREAR", - "RU_PAYMT", - "RU_PAYMT_CONDITION", - "RU_SOURCENONMONETOBLIG", - "RU_TRADE" - ); - - @Override - public void applyFilter(List firstLevelTableDataList, Map> tableDataMapByFid) { - if (firstLevelTableDataList == null || firstLevelTableDataList.isEmpty() || tableDataMapByFid == null) { - return; - } - - Map> relatedTablesByAccSerialNum = new HashMap<>(); - - for (String supportedTableName : SUPPORTED_TABLE_NAMES) { - List childTables = tableDataMapByFid.get(supportedTableName); - - if (childTables != null) { - for (TableData childTable : childTables) { - Object accSerialNum = getFieldValue(childTable, "ACC_SERIAL_NUM"); - if (accSerialNum != null) { - relatedTablesByAccSerialNum - .computeIfAbsent(accSerialNum, k -> new ArrayList<>()) - .add(childTable); - } - } - } - } - - for (TableData parentTable : firstLevelTableDataList) { - Object serialNum = getFieldValue(parentTable, "SERIAL_NUM"); - - if (serialNum != null) { - List matchedParentTables = relatedTablesByAccSerialNum.get(serialNum); - if (matchedParentTables != null) { - parentTable.getRelatedTableData().addAll(matchedParentTables); - } - } - } - } - - private Object getFieldValue(TableData tableData, String targetColumnName) { - if (tableData.getFieldData() == null) { - return null; - } - - for (TableData.FieldData field : tableData.getFieldData()) { - if (targetColumnName.equals(field.columnName())) { - return field.columnValue(); - } - } - - return null; - } -} diff --git a/src/main/java/ru/nbch/indicsearchservice/filter/secondlevel/SecondLevelTableFilter.java b/src/main/java/ru/nbch/indicsearchservice/filter/secondlevel/SecondLevelTableFilter.java deleted file mode 100644 index a63173e..0000000 --- a/src/main/java/ru/nbch/indicsearchservice/filter/secondlevel/SecondLevelTableFilter.java +++ /dev/null @@ -1,10 +0,0 @@ -package ru.nbch.indicsearchservice.filter.secondlevel; - -import java.util.List; -import java.util.Map; -import ru.nbch.indicsearchservice.filter.TableFilter; -import ru.nbch.indicsearchservice.model.TableData; - -public interface SecondLevelTableFilter extends TableFilter { - void applyFilter(List firstLevelTableDataList, Map> tableDataMapByFid); -} diff --git a/src/main/java/ru/nbch/indicsearchservice/filter/thirdlevel/BlocksThirdLevelTableFilter.java b/src/main/java/ru/nbch/indicsearchservice/filter/thirdlevel/BlocksThirdLevelTableFilter.java deleted file mode 100644 index 5581bac..0000000 --- a/src/main/java/ru/nbch/indicsearchservice/filter/thirdlevel/BlocksThirdLevelTableFilter.java +++ /dev/null @@ -1,88 +0,0 @@ -package ru.nbch.indicsearchservice.filter.thirdlevel; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import org.springframework.stereotype.Component; -import ru.nbch.indicsearchservice.model.TableData; - -@Component -public class BlocksThirdLevelTableFilter implements ThirdLevelTableFilter { - private static final Set SUPPORTED_TABLE_NAMES = Set.of( - "RU_COLLATERAL_BLOCKS", - "RU_BANKRUPTCY_BLOCKS" - ); - - @Override - public void applyFilter(List firstLevelTableDataList, Map> tableDataMapByFid) { - if (firstLevelTableDataList == null || firstLevelTableDataList.isEmpty() || tableDataMapByFid == null) { - return; - } - - Map>> childTablesByParentAndSerial = new HashMap<>(); - - for (String tableName : SUPPORTED_TABLE_NAMES) { - String parentTableName = tableName.replace("_BLOCKS", ""); - String childTableName = tableName; - - List childTables = tableDataMapByFid.get(childTableName); - - if (childTables != null) { - Map> groupedChildTables = new HashMap<>(); - for (TableData childTable : childTables) { - Object parentSerialNum = getFieldValue(childTable, "PARENT_SERIAL_NUM"); - if (parentSerialNum != null) { - groupedChildTables - .computeIfAbsent(parentSerialNum, k -> new ArrayList<>()) - .add(childTable); - } - } - childTablesByParentAndSerial.put(parentTableName, groupedChildTables); - } - } - - for (TableData firstLevelTable : firstLevelTableDataList) { - if (firstLevelTable.getRelatedTableData() == null) { - continue; - } - - for (TableData secondLevelTable : firstLevelTable.getRelatedTableData()) { - String tableName = secondLevelTable.getTableName(); - - String parentTableName = tableName; - String childTableName = tableName + "_BLOCKS"; - - if (SUPPORTED_TABLE_NAMES.contains(childTableName)) { - Map> availableChildTables = childTablesByParentAndSerial.get(parentTableName); - - if (availableChildTables != null) { - Object serialNum = getFieldValue(secondLevelTable, "SERIAL_NUM"); - - if (serialNum != null) { - List matchingChildTables = availableChildTables.get(serialNum); - if (matchingChildTables != null) { - secondLevelTable.getRelatedTableData().addAll(matchingChildTables); - } - } - } - } - } - } - } - - private Object getFieldValue(TableData tableData, String targetColumnName) { - if (tableData.getFieldData() == null) { - return null; - } - - for (TableData.FieldData field : tableData.getFieldData()) { - if (targetColumnName.equals(field.columnName())) { - return field.columnValue(); - } - } - - return null; - } -} diff --git a/src/main/java/ru/nbch/indicsearchservice/filter/thirdlevel/ThirdLevelTableFilter.java b/src/main/java/ru/nbch/indicsearchservice/filter/thirdlevel/ThirdLevelTableFilter.java deleted file mode 100644 index 21ae05a..0000000 --- a/src/main/java/ru/nbch/indicsearchservice/filter/thirdlevel/ThirdLevelTableFilter.java +++ /dev/null @@ -1,10 +0,0 @@ -package ru.nbch.indicsearchservice.filter.thirdlevel; - -import java.util.List; -import java.util.Map; -import ru.nbch.indicsearchservice.filter.TableFilter; -import ru.nbch.indicsearchservice.model.TableData; - -public interface ThirdLevelTableFilter extends TableFilter { - void applyFilter(List firstLevelTableDataList, Map> tableDataMapByFid); -} diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/AccountTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/AccountTableLoader.java new file mode 100644 index 0000000..c4987f2 --- /dev/null +++ b/src/main/java/ru/nbch/indicsearchservice/loader/AccountTableLoader.java @@ -0,0 +1,107 @@ +package ru.nbch.indicsearchservice.loader; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import org.apache.ibatis.cursor.Cursor; +import org.springframework.stereotype.Component; +import ru.nbch.indicsearchservice.loader.subtable.AccountSubTableLoader; +import ru.nbch.indicsearchservice.model.TableMetaData; +import ru.nbch.indicsearchservice.model.enums.DataType; +import ru.nbch.indicsearchservice.model.enums.SearchParameter; +import ru.nbch.indicsearchservice.util.IndicSearchUtils; +import ru.nbch.indicsearchservice.util.MapperHolder; + +@Component +public class AccountTableLoader implements FirstLevelTableLoader, TableLoaderForId { + private final MapperHolder mapperHolder; + private final IndicSearchUtils indicSearchUtils; + private final List accountSubTableLoaders; + + public AccountTableLoader(MapperHolder mapperHolder, + IndicSearchUtils indicSearchUtils, + List accountSubTableLoaders) { + this.mapperHolder = mapperHolder; + this.indicSearchUtils = indicSearchUtils; + this.accountSubTableLoaders = accountSubTableLoaders; + } + + @Override + public String getTableName() { + return "ACCOUNT"; + } + + @Override + public Set getTableNamesIfSuitable(DataType dataType, SearchParameter searchParameter) { + if (dataType == DataType.TUTDF && + (searchParameter == SearchParameter.UUID || + searchParameter == SearchParameter.ACCT_NUM || + searchParameter == SearchParameter.SERIAL_NUM_ACCT || + searchParameter == SearchParameter.FID || + searchParameter == SearchParameter.PASSPORT || + searchParameter == SearchParameter.OGRN)) { + Set result = new HashSet<>(); + + result.add(getTableName()); + result.addAll(accountSubTableLoaders.stream().map(TableLoader::getTableName).toList()); + + return result; + } + + return Set.of(); + } + + @Override + public void searchBy(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + String searchValue, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap) { + if (dataType == DataType.TUTDF) { + if (searchParameter == SearchParameter.UUID || searchParameter == SearchParameter.ACCT_NUM || searchParameter == SearchParameter.SERIAL_NUM_ACCT) { + try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByMemberCodeFromAccount(memberCode)) { + Set foundFids = new HashSet<>(); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, foundFids, tableMetaDataMap)); + accountSubTableLoaders.parallelStream().forEach(tl -> tl.searchByAccountFid(taskId, foundFids, tableFileMap, tableMetaDataMap)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } else if (searchParameter == SearchParameter.FID) { + Set fids = Set.of(Integer.parseInt(searchValue)); + + try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromAccount(fids)) { + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); + accountSubTableLoaders.parallelStream().forEach(tl -> tl.searchByAccountFid(taskId, fids, tableFileMap, tableMetaDataMap)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + } + + @Override + public void searchById(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + Set fids, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap) { + if (dataType == DataType.TUTDF) { + if (searchParameter == SearchParameter.PASSPORT || searchParameter == SearchParameter.OGRN) { + try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromAccount(fids)) { + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + } +} diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/BankruptcyTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/BankruptcyTableLoader.java new file mode 100644 index 0000000..5e814cf --- /dev/null +++ b/src/main/java/ru/nbch/indicsearchservice/loader/BankruptcyTableLoader.java @@ -0,0 +1,87 @@ +package ru.nbch.indicsearchservice.loader; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import org.apache.ibatis.cursor.Cursor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; +import ru.nbch.indicsearchservice.model.enums.DataType; +import ru.nbch.indicsearchservice.model.enums.SearchParameter; +import ru.nbch.indicsearchservice.util.IndicSearchUtils; +import ru.nbch.indicsearchservice.util.MapperHolder; + +@Component +public class BankruptcyTableLoader implements FirstLevelTableLoader, TableLoaderForId { + private final MapperHolder mapperHolder; + private final IndicSearchUtils indicSearchUtils; + + public BankruptcyTableLoader(MapperHolder mapperHolder, + IndicSearchUtils indicSearchUtils) { + this.mapperHolder = mapperHolder; + this.indicSearchUtils = indicSearchUtils; + } + + @Override + public String getTableName() { + return "BANKRUPTCY"; + } + + @Override + public Set getTableNamesIfSuitable(DataType dataType, SearchParameter searchParameter) { + if (dataType == DataType.TUTDF && + (searchParameter == SearchParameter.FID || + searchParameter == SearchParameter.PASSPORT || + searchParameter == SearchParameter.OGRN)) { + return Set.of(getTableName()); + } + + return Set.of(); + } + + @Override + @Transactional(readOnly = true) + public void searchBy(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + String searchValue, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap) { + if (dataType == DataType.TUTDF) { + if (searchParameter == SearchParameter.FID) { + Set fids = Set.of(Integer.parseInt(searchValue)); + + try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromBankruptcy(fids)) { + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + } + + @Override + @Transactional(readOnly = true) + public void searchById(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + Set fids, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap) { + if (dataType == DataType.TUTDF) { + if (searchParameter == SearchParameter.PASSPORT || searchParameter == SearchParameter.OGRN) { + try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromBankruptcy(fids)) { + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + } +} diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/ConsumerBankruptcyTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/ConsumerBankruptcyTableLoader.java new file mode 100644 index 0000000..293b99b --- /dev/null +++ b/src/main/java/ru/nbch/indicsearchservice/loader/ConsumerBankruptcyTableLoader.java @@ -0,0 +1,87 @@ +package ru.nbch.indicsearchservice.loader; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import org.apache.ibatis.cursor.Cursor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; +import ru.nbch.indicsearchservice.model.enums.DataType; +import ru.nbch.indicsearchservice.model.enums.SearchParameter; +import ru.nbch.indicsearchservice.util.IndicSearchUtils; +import ru.nbch.indicsearchservice.util.MapperHolder; + +@Component +public class ConsumerBankruptcyTableLoader implements FirstLevelTableLoader, TableLoaderForId { + private final MapperHolder mapperHolder; + private final IndicSearchUtils indicSearchUtils; + + public ConsumerBankruptcyTableLoader(MapperHolder mapperHolder, + IndicSearchUtils indicSearchUtils) { + this.mapperHolder = mapperHolder; + this.indicSearchUtils = indicSearchUtils; + } + + @Override + public String getTableName() { + return "CONSUMER_BANKRUPTCY"; + } + + @Override + public Set getTableNamesIfSuitable(DataType dataType, SearchParameter searchParameter) { + if (dataType == DataType.TUTDF && + (searchParameter == SearchParameter.FID || + searchParameter == SearchParameter.PASSPORT || + searchParameter == SearchParameter.OGRN)) { + return Set.of(getTableName()); + } + + return Set.of(); + } + + @Override + @Transactional(readOnly = true) + public void searchBy(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + String searchValue, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap) { + if (dataType == DataType.TUTDF) { + if (searchParameter == SearchParameter.FID) { + Set fids = Set.of(Integer.parseInt(searchValue)); + + try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromConsumerBankruptcy(fids)) { + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + } + + @Override + @Transactional(readOnly = true) + public void searchById(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + Set fids, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap) { + if (dataType == DataType.TUTDF) { + if (searchParameter == SearchParameter.PASSPORT || searchParameter == SearchParameter.OGRN) { + try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromConsumerBankruptcy(fids)) { + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + } +} diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/FirstLevelTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/FirstLevelTableLoader.java index da9bb84..c138991 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/FirstLevelTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/FirstLevelTableLoader.java @@ -2,7 +2,9 @@ package ru.nbch.indicsearchservice.loader; import java.nio.file.Path; import java.util.Map; +import java.util.Set; import java.util.UUID; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.model.enums.DataType; import ru.nbch.indicsearchservice.model.enums.SearchParameter; @@ -12,5 +14,8 @@ public interface FirstLevelTableLoader extends TableLoader { SearchParameter searchParameter, String searchValue, String memberCode, - Map tableFileMap); + Map tableFileMap, + Map tableMetaDataMap); + + Set getTableNamesIfSuitable(DataType dataType, SearchParameter searchParameter); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/IdTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/IdTableLoader.java index c7f1361..8a5fae2 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/IdTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/IdTableLoader.java @@ -2,6 +2,7 @@ package ru.nbch.indicsearchservice.loader; import java.io.IOException; import java.nio.file.Path; +import java.util.Collection; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; @@ -11,6 +12,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.model.enums.DataType; import ru.nbch.indicsearchservice.model.enums.SearchParameter; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -31,9 +33,34 @@ public class IdTableLoader implements FirstLevelTableLoader { return "ID"; } + @Override + public Set getTableNamesIfSuitable(DataType dataType, SearchParameter searchParameter) { + if ((dataType == DataType.GUTDF || dataType == DataType.RUTDF || dataType == DataType.TUTDF) && + (searchParameter == SearchParameter.PASSPORT || + searchParameter == SearchParameter.OGRN)) { + Set result = new HashSet<>(); + + result.add(getTableName()); + result.addAll(tableLoaders.stream() + .map(l -> l.getTableNamesIfSuitable(dataType, searchParameter)) + .flatMap(Collection::stream) + .toList()); + + return result; + } + + return Set.of(); + } + @Override @Transactional(readOnly = true) - public void searchBy(UUID taskId, DataType dataType, SearchParameter searchParameter, String searchValue, String memberCode, Map tableFileMap) { + public void searchBy(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + String searchValue, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap) { if (dataType == DataType.GUTDF || dataType == DataType.RUTDF) { if (searchParameter == SearchParameter.OGRN || searchParameter == SearchParameter.PASSPORT) { Set foundFids = new HashSet<>(); @@ -63,7 +90,41 @@ public class IdTableLoader implements FirstLevelTableLoader { searchParameter, foundFids, memberCode, - tableFileMap + tableFileMap, + tableMetaDataMap + )); + } + } else if (dataType == DataType.TUTDF) { + if (searchParameter == SearchParameter.OGRN || searchParameter == SearchParameter.PASSPORT) { + Set foundFids = new HashSet<>(); + + try (Cursor> cursor = searchParameter == SearchParameter.OGRN ? + mapperHolder.getIndicMapper().findFidsByOgrnFromIdForTutdf(searchValue) : + mapperHolder.getIndicMapper().findFidsByPassportFromIdForTutdf(searchValue)) { + for (LinkedHashMap row : cursor) { + for (Map.Entry entry : row.entrySet()) { + String columnName = entry.getKey(); + Object columnValue = entry.getValue(); + + if (columnName != null && columnValue != null) { + if (columnName.equals("FID")) { + foundFids.add(Integer.parseInt(columnValue.toString())); + } + } + } + } + } catch (IOException e) { + throw new RuntimeException(e); + } + + tableLoaders.parallelStream().forEach(tl -> tl.searchById( + taskId, + dataType, + searchParameter, + foundFids, + memberCode, + tableFileMap, + tableMetaDataMap )); } } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/InformationTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/InformationTableLoader.java new file mode 100644 index 0000000..14e7955 --- /dev/null +++ b/src/main/java/ru/nbch/indicsearchservice/loader/InformationTableLoader.java @@ -0,0 +1,95 @@ +package ru.nbch.indicsearchservice.loader; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import org.apache.ibatis.cursor.Cursor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; +import ru.nbch.indicsearchservice.model.enums.DataType; +import ru.nbch.indicsearchservice.model.enums.SearchParameter; +import ru.nbch.indicsearchservice.util.IndicSearchUtils; +import ru.nbch.indicsearchservice.util.MapperHolder; + +@Component +public class InformationTableLoader implements FirstLevelTableLoader, TableLoaderForId { + private final MapperHolder mapperHolder; + private final IndicSearchUtils indicSearchUtils; + + public InformationTableLoader(MapperHolder mapperHolder, + IndicSearchUtils indicSearchUtils) { + this.mapperHolder = mapperHolder; + this.indicSearchUtils = indicSearchUtils; + } + + @Override + public String getTableName() { + return "INFORMATION"; + } + + @Override + public Set getTableNamesIfSuitable(DataType dataType, SearchParameter searchParameter) { + if (dataType == DataType.TUTDF && + (searchParameter == SearchParameter.OLD_APP_NUM || + searchParameter == SearchParameter.SERIAL_NUM_APP || + searchParameter == SearchParameter.FID || + searchParameter == SearchParameter.PASSPORT || + searchParameter == SearchParameter.OGRN)) { + return Set.of(getTableName()); + } + + return Set.of(); + } + + @Override + @Transactional(readOnly = true) + public void searchBy(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + String searchValue, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap) { + if (dataType == DataType.TUTDF) { + if (searchParameter == SearchParameter.OLD_APP_NUM || searchParameter == SearchParameter.SERIAL_NUM_APP) { + try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByMemberCodeFromInformation(memberCode)) { + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } else if (searchParameter == SearchParameter.FID) { + Set fids = Set.of(Integer.parseInt(searchValue)); + + try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromInformation(fids)) { + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + } + + @Override + @Transactional(readOnly = true) + public void searchById(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + Set fids, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap) { + if (dataType == DataType.TUTDF) { + if (searchParameter == SearchParameter.PASSPORT || searchParameter == SearchParameter.OGRN) { + try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromInformation(fids)) { + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + } +} diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/LegalTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/LegalTableLoader.java new file mode 100644 index 0000000..76ca382 --- /dev/null +++ b/src/main/java/ru/nbch/indicsearchservice/loader/LegalTableLoader.java @@ -0,0 +1,87 @@ +package ru.nbch.indicsearchservice.loader; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import org.apache.ibatis.cursor.Cursor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; +import ru.nbch.indicsearchservice.model.enums.DataType; +import ru.nbch.indicsearchservice.model.enums.SearchParameter; +import ru.nbch.indicsearchservice.util.IndicSearchUtils; +import ru.nbch.indicsearchservice.util.MapperHolder; + +@Component +public class LegalTableLoader implements FirstLevelTableLoader, TableLoaderForId { + private final MapperHolder mapperHolder; + private final IndicSearchUtils indicSearchUtils; + + public LegalTableLoader(MapperHolder mapperHolder, + IndicSearchUtils indicSearchUtils) { + this.mapperHolder = mapperHolder; + this.indicSearchUtils = indicSearchUtils; + } + + @Override + public String getTableName() { + return "LEGAL"; + } + + @Override + public Set getTableNamesIfSuitable(DataType dataType, SearchParameter searchParameter) { + if (dataType == DataType.TUTDF && + (searchParameter == SearchParameter.FID || + searchParameter == SearchParameter.PASSPORT || + searchParameter == SearchParameter.OGRN)) { + return Set.of(getTableName()); + } + + return Set.of(); + } + + @Override + @Transactional(readOnly = true) + public void searchBy(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + String searchValue, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap) { + if (dataType == DataType.TUTDF) { + if (searchParameter == SearchParameter.FID) { + Set fids = Set.of(Integer.parseInt(searchValue)); + + try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromLegal(fids)) { + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + } + + @Override + @Transactional(readOnly = true) + public void searchById(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + Set fids, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap) { + if (dataType == DataType.TUTDF) { + if (searchParameter == SearchParameter.PASSPORT || searchParameter == SearchParameter.OGRN) { + try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromLegal(fids)) { + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + } +} diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/RuApplicationTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/RuApplicationTableLoader.java index 6714caf..fa800df 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/RuApplicationTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/RuApplicationTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.model.enums.DataType; import ru.nbch.indicsearchservice.model.enums.SearchParameter; import ru.nbch.indicsearchservice.util.IndicSearchUtils; @@ -30,13 +31,33 @@ public class RuApplicationTableLoader implements FirstLevelTableLoader, TableLoa return "RU_APPLICATION"; } + @Override + public Set getTableNamesIfSuitable(DataType dataType, SearchParameter searchParameter) { + if ((dataType == DataType.GUTDF || dataType == DataType.RUTDF) && + (searchParameter == SearchParameter.APPLICATION_NUMBER || + searchParameter == SearchParameter.OLD_APP_NUM || + searchParameter == SearchParameter.FID || + searchParameter == SearchParameter.PASSPORT || + searchParameter == SearchParameter.OGRN)) { + return Set.of(getTableName()); + } + + return Set.of(); + } + @Override @Transactional(readOnly = true) - public void searchBy(UUID taskId, DataType dataType, SearchParameter searchParameter, String searchValue, String memberCode, Map tableFileMap) { + public void searchBy(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + String searchValue, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap) { if (dataType == DataType.GUTDF || dataType == DataType.RUTDF) { if (searchParameter == SearchParameter.APPLICATION_NUMBER || searchParameter == SearchParameter.OLD_APP_NUM) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByMemberCodeFromRuApplication(memberCode)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } @@ -44,7 +65,7 @@ public class RuApplicationTableLoader implements FirstLevelTableLoader, TableLoa Set fids = Set.of(Integer.parseInt(searchValue)); try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuApplication(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } @@ -54,11 +75,17 @@ public class RuApplicationTableLoader implements FirstLevelTableLoader, TableLoa @Override @Transactional(readOnly = true) - public void searchById(UUID taskId, DataType dataType, SearchParameter searchParameter, Set fids, String memberCode, Map tableFileMap) { + public void searchById(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + Set fids, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap) { if (dataType == DataType.GUTDF || dataType == DataType.RUTDF) { if (searchParameter == SearchParameter.PASSPORT || searchParameter == SearchParameter.OGRN) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuApplication(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/RuBankruptcyTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/RuBankruptcyTableLoader.java index da81d79..dfefecb 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/RuBankruptcyTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/RuBankruptcyTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.model.enums.DataType; import ru.nbch.indicsearchservice.model.enums.SearchParameter; import ru.nbch.indicsearchservice.util.IndicSearchUtils; @@ -30,15 +31,33 @@ public class RuBankruptcyTableLoader implements FirstLevelTableLoader, TableLoad return "RU_BANKRUPTCY"; } + @Override + public Set getTableNamesIfSuitable(DataType dataType, SearchParameter searchParameter) { + if ((dataType == DataType.GUTDF || dataType == DataType.RUTDF) && + (searchParameter == SearchParameter.FID || + searchParameter == SearchParameter.PASSPORT || + searchParameter == SearchParameter.OGRN)) { + return Set.of(getTableName()); + } + + return Set.of(); + } + @Override @Transactional(readOnly = true) - public void searchBy(UUID taskId, DataType dataType, SearchParameter searchParameter, String searchValue, String memberCode, Map tableFileMap) { + public void searchBy(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + String searchValue, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap) { if (dataType == DataType.GUTDF || dataType == DataType.RUTDF) { if (searchParameter == SearchParameter.FID) { Set fids = Set.of(Integer.parseInt(searchValue)); try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuBankruptcy(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } @@ -48,11 +67,17 @@ public class RuBankruptcyTableLoader implements FirstLevelTableLoader, TableLoad @Override @Transactional(readOnly = true) - public void searchById(UUID taskId, DataType dataType, SearchParameter searchParameter, Set fids, String memberCode, Map tableFileMap) { + public void searchById(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + Set fids, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap) { if (dataType == DataType.GUTDF || dataType == DataType.RUTDF) { if (searchParameter == SearchParameter.PASSPORT || searchParameter == SearchParameter.OGRN) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuBankruptcy(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/RuCapabilityTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/RuCapabilityTableLoader.java index 48773a3..b5d8d5c 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/RuCapabilityTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/RuCapabilityTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.model.enums.DataType; import ru.nbch.indicsearchservice.model.enums.SearchParameter; import ru.nbch.indicsearchservice.util.IndicSearchUtils; @@ -30,15 +31,33 @@ public class RuCapabilityTableLoader implements FirstLevelTableLoader, TableLoad return "RU_CAPABILITY"; } + @Override + public Set getTableNamesIfSuitable(DataType dataType, SearchParameter searchParameter) { + if ((dataType == DataType.GUTDF || dataType == DataType.RUTDF) && + (searchParameter == SearchParameter.FID || + searchParameter == SearchParameter.PASSPORT || + searchParameter == SearchParameter.OGRN)) { + return Set.of(getTableName()); + } + + return Set.of(); + } + @Override @Transactional(readOnly = true) - public void searchBy(UUID taskId, DataType dataType, SearchParameter searchParameter, String searchValue, String memberCode, Map tableFileMap) { + public void searchBy(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + String searchValue, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap) { if (dataType == DataType.GUTDF || dataType == DataType.RUTDF) { if (searchParameter == SearchParameter.FID) { Set fids = Set.of(Integer.parseInt(searchValue)); try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuCapability(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } @@ -48,11 +67,17 @@ public class RuCapabilityTableLoader implements FirstLevelTableLoader, TableLoad @Override @Transactional(readOnly = true) - public void searchById(UUID taskId, DataType dataType, SearchParameter searchParameter, Set fids, String memberCode, Map tableFileMap) { + public void searchById(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + Set fids, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap) { if (dataType == DataType.GUTDF || dataType == DataType.RUTDF) { if (searchParameter == SearchParameter.PASSPORT || searchParameter == SearchParameter.OGRN) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuCapability(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/RuDebtBurdenInfoTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/RuDebtBurdenInfoTableLoader.java index ab81bf2..17fb10b 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/RuDebtBurdenInfoTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/RuDebtBurdenInfoTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.model.enums.DataType; import ru.nbch.indicsearchservice.model.enums.SearchParameter; import ru.nbch.indicsearchservice.util.IndicSearchUtils; @@ -30,15 +31,33 @@ public class RuDebtBurdenInfoTableLoader implements FirstLevelTableLoader, Table return "RU_DEBT_BURDEN_INFO"; } + @Override + public Set getTableNamesIfSuitable(DataType dataType, SearchParameter searchParameter) { + if ((dataType == DataType.GUTDF || dataType == DataType.RUTDF) && + (searchParameter == SearchParameter.FID || + searchParameter == SearchParameter.PASSPORT || + searchParameter == SearchParameter.OGRN)) { + return Set.of(getTableName()); + } + + return Set.of(); + } + @Override @Transactional(readOnly = true) - public void searchBy(UUID taskId, DataType dataType, SearchParameter searchParameter, String searchValue, String memberCode, Map tableFileMap) { + public void searchBy(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + String searchValue, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap) { if (dataType == DataType.GUTDF || dataType == DataType.RUTDF) { if (searchParameter == SearchParameter.FID) { Set fids = Set.of(Integer.parseInt(searchValue)); try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuDebtBurdenInfo(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } @@ -48,11 +67,17 @@ public class RuDebtBurdenInfoTableLoader implements FirstLevelTableLoader, Table @Override @Transactional(readOnly = true) - public void searchById(UUID taskId, DataType dataType, SearchParameter searchParameter, Set fids, String memberCode, Map tableFileMap) { + public void searchById(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + Set fids, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap) { if (dataType == DataType.GUTDF || dataType == DataType.RUTDF) { if (searchParameter == SearchParameter.PASSPORT || searchParameter == SearchParameter.OGRN) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuDebtBurdenInfo(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/RuObligPartTakeTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/RuObligPartTakeTableLoader.java index 51419cf..5658969 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/RuObligPartTakeTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/RuObligPartTakeTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.model.enums.DataType; import ru.nbch.indicsearchservice.model.enums.SearchParameter; import ru.nbch.indicsearchservice.util.IndicSearchUtils; @@ -30,15 +31,33 @@ public class RuObligPartTakeTableLoader implements FirstLevelTableLoader, TableL return "RU_OBLIGPARTTAKE"; } + @Override + public Set getTableNamesIfSuitable(DataType dataType, SearchParameter searchParameter) { + if ((dataType == DataType.GUTDF || dataType == DataType.RUTDF) && + (searchParameter == SearchParameter.FID || + searchParameter == SearchParameter.PASSPORT || + searchParameter == SearchParameter.OGRN)) { + return Set.of(getTableName()); + } + + return Set.of(); + } + @Override @Transactional(readOnly = true) - public void searchBy(UUID taskId, DataType dataType, SearchParameter searchParameter, String searchValue, String memberCode, Map tableFileMap) { + public void searchBy(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + String searchValue, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap) { if (dataType == DataType.GUTDF || dataType == DataType.RUTDF) { if (searchParameter == SearchParameter.FID) { Set fids = Set.of(Integer.parseInt(searchValue)); try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuObligPartTake(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } @@ -48,11 +67,17 @@ public class RuObligPartTakeTableLoader implements FirstLevelTableLoader, TableL @Override @Transactional(readOnly = true) - public void searchById(UUID taskId, DataType dataType, SearchParameter searchParameter, Set fids, String memberCode, Map tableFileMap) { + public void searchById(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + Set fids, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap) { if (dataType == DataType.GUTDF || dataType == DataType.RUTDF) { if (searchParameter == SearchParameter.PASSPORT || searchParameter == SearchParameter.OGRN) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuObligPartTake(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/RuOtherLegalTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/RuOtherLegalTableLoader.java index 7853f28..ede3d00 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/RuOtherLegalTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/RuOtherLegalTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.model.enums.DataType; import ru.nbch.indicsearchservice.model.enums.SearchParameter; import ru.nbch.indicsearchservice.util.IndicSearchUtils; @@ -30,15 +31,33 @@ public class RuOtherLegalTableLoader implements FirstLevelTableLoader, TableLoad return "RU_OTHERLEGAL"; } + @Override + public Set getTableNamesIfSuitable(DataType dataType, SearchParameter searchParameter) { + if ((dataType == DataType.GUTDF || dataType == DataType.RUTDF) && + (searchParameter == SearchParameter.FID || + searchParameter == SearchParameter.PASSPORT || + searchParameter == SearchParameter.OGRN)) { + return Set.of(getTableName()); + } + + return Set.of(); + } + @Override @Transactional(readOnly = true) - public void searchBy(UUID taskId, DataType dataType, SearchParameter searchParameter, String searchValue, String memberCode, Map tableFileMap) { + public void searchBy(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + String searchValue, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap) { if (dataType == DataType.GUTDF || dataType == DataType.RUTDF) { if (searchParameter == SearchParameter.FID) { Set fids = Set.of(Integer.parseInt(searchValue)); try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuOtherLegal(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } @@ -48,11 +67,17 @@ public class RuOtherLegalTableLoader implements FirstLevelTableLoader, TableLoad @Override @Transactional(readOnly = true) - public void searchById(UUID taskId, DataType dataType, SearchParameter searchParameter, Set fids, String memberCode, Map tableFileMap) { + public void searchById(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + Set fids, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap) { if (dataType == DataType.GUTDF || dataType == DataType.RUTDF) { if (searchParameter == SearchParameter.PASSPORT || searchParameter == SearchParameter.OGRN) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuOtherLegal(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/RuSettledTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/RuSettledTableLoader.java index 04ae7de..916f400 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/RuSettledTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/RuSettledTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.model.enums.DataType; import ru.nbch.indicsearchservice.model.enums.SearchParameter; import ru.nbch.indicsearchservice.util.IndicSearchUtils; @@ -30,15 +31,33 @@ public class RuSettledTableLoader implements FirstLevelTableLoader, TableLoaderF return "RU_SETTLED"; } + @Override + public Set getTableNamesIfSuitable(DataType dataType, SearchParameter searchParameter) { + if ((dataType == DataType.GUTDF || dataType == DataType.RUTDF) && + (searchParameter == SearchParameter.FID || + searchParameter == SearchParameter.PASSPORT || + searchParameter == SearchParameter.OGRN)) { + return Set.of(getTableName()); + } + + return Set.of(); + } + @Override @Transactional(readOnly = true) - public void searchBy(UUID taskId, DataType dataType, SearchParameter searchParameter, String searchValue, String memberCode, Map tableFileMap) { + public void searchBy(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + String searchValue, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap) { if (dataType == DataType.GUTDF || dataType == DataType.RUTDF) { if (searchParameter == SearchParameter.FID) { Set fids = Set.of(Integer.parseInt(searchValue)); try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuSettled(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } @@ -48,11 +67,17 @@ public class RuSettledTableLoader implements FirstLevelTableLoader, TableLoaderF @Override @Transactional(readOnly = true) - public void searchById(UUID taskId, DataType dataType, SearchParameter searchParameter, Set fids, String memberCode, Map tableFileMap) { + public void searchById(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + Set fids, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap) { if (dataType == DataType.GUTDF || dataType == DataType.RUTDF) { if (searchParameter == SearchParameter.PASSPORT || searchParameter == SearchParameter.OGRN) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuSettled(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/RuUidTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/RuUidTableLoader.java index 1921722..acb0339 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/RuUidTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/RuUidTableLoader.java @@ -12,6 +12,7 @@ import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import ru.nbch.indicsearchservice.loader.subtable.RuUidSubTableLoader; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.model.enums.DataType; import ru.nbch.indicsearchservice.model.enums.SearchParameter; import ru.nbch.indicsearchservice.util.IndicSearchUtils; @@ -36,15 +37,40 @@ public class RuUidTableLoader implements FirstLevelTableLoader, TableLoaderForId return "RU_UID"; } + @Override + public Set getTableNamesIfSuitable(DataType dataType, SearchParameter searchParameter) { + if ((dataType == DataType.GUTDF || dataType == DataType.RUTDF) && + (searchParameter == SearchParameter.UUID || + searchParameter == SearchParameter.ACCT_NUM || + searchParameter == SearchParameter.FID || + searchParameter == SearchParameter.PASSPORT || + searchParameter == SearchParameter.OGRN)) { + Set result = new HashSet<>(); + + result.add(getTableName()); + result.addAll(ruUidSubTableLoaders.stream().map(TableLoader::getTableName).toList()); + + return result; + } + + return Set.of(); + } + @Override @Transactional(readOnly = true) - public void searchBy(UUID taskId, DataType dataType, SearchParameter searchParameter, String searchValue, String memberCode, Map tableFileMap) { + public void searchBy(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + String searchValue, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap) { if (dataType == DataType.GUTDF || dataType == DataType.RUTDF) { if (searchParameter == SearchParameter.UUID || searchParameter == SearchParameter.ACCT_NUM) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByMemberCodeFromRuUid(memberCode)) { Set foundFids = new HashSet<>(); - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, foundFids)); - ruUidSubTableLoaders.parallelStream().forEach(tl -> tl.searchByRuUidFid(taskId, foundFids, tableFileMap)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, foundFids, tableMetaDataMap)); + ruUidSubTableLoaders.parallelStream().forEach(tl -> tl.searchByRuUidFid(taskId, foundFids, tableFileMap, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } @@ -52,8 +78,8 @@ public class RuUidTableLoader implements FirstLevelTableLoader, TableLoaderForId Set fids = Set.of(Integer.parseInt(searchValue)); try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuUid(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); - ruUidSubTableLoaders.parallelStream().forEach(tl -> tl.searchByRuUidFid(taskId, fids, tableFileMap)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); + ruUidSubTableLoaders.parallelStream().forEach(tl -> tl.searchByRuUidFid(taskId, fids, tableFileMap, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } @@ -63,11 +89,17 @@ public class RuUidTableLoader implements FirstLevelTableLoader, TableLoaderForId @Override @Transactional(readOnly = true) - public void searchById(UUID taskId, DataType dataType, SearchParameter searchParameter, Set fids, String memberCode, Map tableFileMap) { + public void searchById(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + Set fids, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap) { if (dataType == DataType.GUTDF || dataType == DataType.RUTDF) { if (searchParameter == SearchParameter.PASSPORT || searchParameter == SearchParameter.OGRN) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuUid(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/TableLoaderForId.java b/src/main/java/ru/nbch/indicsearchservice/loader/TableLoaderForId.java index e49efca..4e573a0 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/TableLoaderForId.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/TableLoaderForId.java @@ -4,9 +4,16 @@ import java.nio.file.Path; import java.util.Map; import java.util.Set; import java.util.UUID; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.model.enums.DataType; import ru.nbch.indicsearchservice.model.enums.SearchParameter; public interface TableLoaderForId extends FirstLevelTableLoader { - void searchById(UUID taskId, DataType dataType, SearchParameter searchParameter, Set fids, String memberCode, Map tableFileMap); + void searchById(UUID taskId, + DataType dataType, + SearchParameter searchParameter, + Set fids, + String memberCode, + Map tableFileMap, + Map tableMetaDataMap); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/AccountAmendTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/AccountAmendTableLoader.java new file mode 100644 index 0000000..64265fc --- /dev/null +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/AccountAmendTableLoader.java @@ -0,0 +1,44 @@ +package ru.nbch.indicsearchservice.loader.subtable; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import org.apache.ibatis.cursor.Cursor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; +import ru.nbch.indicsearchservice.util.IndicSearchUtils; +import ru.nbch.indicsearchservice.util.MapperHolder; + +@Component +public class AccountAmendTableLoader implements AccountSubTableLoader { + private final MapperHolder mapperHolder; + private final IndicSearchUtils indicSearchUtils; + + public AccountAmendTableLoader(MapperHolder mapperHolder, + IndicSearchUtils indicSearchUtils) { + this.mapperHolder = mapperHolder; + this.indicSearchUtils = indicSearchUtils; + } + + @Override + public String getTableName() { + return "ACCOUNT_AMEND"; + } + + @Override + @Transactional(readOnly = true) + public void searchByAccountFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { + try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromAccountAmend(fids)) { + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/AccountSubTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/AccountSubTableLoader.java new file mode 100644 index 0000000..b059e7c --- /dev/null +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/AccountSubTableLoader.java @@ -0,0 +1,14 @@ +package ru.nbch.indicsearchservice.loader.subtable; + +import java.nio.file.Path; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import ru.nbch.indicsearchservice.model.TableMetaData; + +public interface AccountSubTableLoader extends SubTableLoader { + void searchByAccountFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap); +} diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/BankGuaranteeTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/BankGuaranteeTableLoader.java new file mode 100644 index 0000000..b32de5a --- /dev/null +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/BankGuaranteeTableLoader.java @@ -0,0 +1,44 @@ +package ru.nbch.indicsearchservice.loader.subtable; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import org.apache.ibatis.cursor.Cursor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; +import ru.nbch.indicsearchservice.util.IndicSearchUtils; +import ru.nbch.indicsearchservice.util.MapperHolder; + +@Component +public class BankGuaranteeTableLoader implements AccountSubTableLoader { + private final MapperHolder mapperHolder; + private final IndicSearchUtils indicSearchUtils; + + public BankGuaranteeTableLoader(MapperHolder mapperHolder, + IndicSearchUtils indicSearchUtils) { + this.mapperHolder = mapperHolder; + this.indicSearchUtils = indicSearchUtils; + } + + @Override + public String getTableName() { + return "BANK_GUARANTEE"; + } + + @Override + @Transactional(readOnly = true) + public void searchByAccountFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { + try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromBankGuarantee(fids)) { + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/CollateralTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/CollateralTableLoader.java new file mode 100644 index 0000000..3c21ce2 --- /dev/null +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/CollateralTableLoader.java @@ -0,0 +1,44 @@ +package ru.nbch.indicsearchservice.loader.subtable; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import org.apache.ibatis.cursor.Cursor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; +import ru.nbch.indicsearchservice.util.IndicSearchUtils; +import ru.nbch.indicsearchservice.util.MapperHolder; + +@Component +public class CollateralTableLoader implements AccountSubTableLoader { + private final MapperHolder mapperHolder; + private final IndicSearchUtils indicSearchUtils; + + public CollateralTableLoader(MapperHolder mapperHolder, + IndicSearchUtils indicSearchUtils) { + this.mapperHolder = mapperHolder; + this.indicSearchUtils = indicSearchUtils; + } + + @Override + public String getTableName() { + return "COLLATERAL"; + } + + @Override + @Transactional(readOnly = true) + public void searchByAccountFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { + try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromCollateral(fids)) { + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/GuarantorTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/GuarantorTableLoader.java new file mode 100644 index 0000000..40731e1 --- /dev/null +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/GuarantorTableLoader.java @@ -0,0 +1,44 @@ +package ru.nbch.indicsearchservice.loader.subtable; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import org.apache.ibatis.cursor.Cursor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; +import ru.nbch.indicsearchservice.util.IndicSearchUtils; +import ru.nbch.indicsearchservice.util.MapperHolder; + +@Component +public class GuarantorTableLoader implements AccountSubTableLoader { + private final MapperHolder mapperHolder; + private final IndicSearchUtils indicSearchUtils; + + public GuarantorTableLoader(MapperHolder mapperHolder, + IndicSearchUtils indicSearchUtils) { + this.mapperHolder = mapperHolder; + this.indicSearchUtils = indicSearchUtils; + } + + @Override + public String getTableName() { + return "GUARANTOR"; + } + + @Override + @Transactional(readOnly = true) + public void searchByAccountFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { + try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromGuarantor(fids)) { + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/PaymentTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/PaymentTableLoader.java new file mode 100644 index 0000000..58ec02b --- /dev/null +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/PaymentTableLoader.java @@ -0,0 +1,44 @@ +package ru.nbch.indicsearchservice.loader.subtable; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import org.apache.ibatis.cursor.Cursor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; +import ru.nbch.indicsearchservice.util.IndicSearchUtils; +import ru.nbch.indicsearchservice.util.MapperHolder; + +@Component +public class PaymentTableLoader implements AccountSubTableLoader { + private final MapperHolder mapperHolder; + private final IndicSearchUtils indicSearchUtils; + + public PaymentTableLoader(MapperHolder mapperHolder, + IndicSearchUtils indicSearchUtils) { + this.mapperHolder = mapperHolder; + this.indicSearchUtils = indicSearchUtils; + } + + @Override + public String getTableName() { + return "PAYMENT"; + } + + @Override + @Transactional(readOnly = true) + public void searchByAccountFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { + try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromPayment(fids)) { + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuAccountAmtTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuAccountAmtTableLoader.java index 148ae10..da199d4 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuAccountAmtTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuAccountAmtTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuAccountAmtTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuAccountAmt(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuAcquirerIndividTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuAcquirerIndividTableLoader.java index a4e4922..263439e 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuAcquirerIndividTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuAcquirerIndividTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuAcquirerIndividTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuAcquirerIndivid(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuAcquirerLegalTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuAcquirerLegalTableLoader.java index 74d0345..603fc32 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuAcquirerLegalTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuAcquirerLegalTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuAcquirerLegalTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuAcquirerLegal(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuAllArrearsTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuAllArrearsTableLoader.java index 226558d..a1fabb7 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuAllArrearsTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuAllArrearsTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuAllArrearsTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuAllArrears(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuAmendmentTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuAmendmentTableLoader.java index 3d476ab..786687e 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuAmendmentTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuAmendmentTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuAmendmentTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuAmendment(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuAmountInfoTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuAmountInfoTableLoader.java index 4db53f7..c3a27b9 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuAmountInfoTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuAmountInfoTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuAmountInfoTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuAmountInfo(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuArrearTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuArrearTableLoader.java index cfd0d1d..9eb350f 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuArrearTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuArrearTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuArrearTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuArrear(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuBankruptcyBlocksTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuBankruptcyBlocksTableLoader.java index 2b2c626..841e716 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuBankruptcyBlocksTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuBankruptcyBlocksTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuBankruptcyBlocksTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuBankruptcyBlocks(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuCoborrowerTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuCoborrowerTableLoader.java index 52a7e8d..c0f1fa3 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuCoborrowerTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuCoborrowerTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuCoborrowerTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuCoborrower(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuCollatInsuredTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuCollatInsuredTableLoader.java index faa5eab..7018afe 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuCollatInsuredTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuCollatInsuredTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuCollatInsuredTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuCollatInsured(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuCollatRepayTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuCollatRepayTableLoader.java index 8fa2c1c..e343703 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuCollatRepayTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuCollatRepayTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuCollatRepayTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuCollatRepay(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuCollateralBlocksTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuCollateralBlocksTableLoader.java index b51bc77..f57d6da 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuCollateralBlocksTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuCollateralBlocksTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuCollateralBlocksTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuCollateralBlocks(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuCollateralTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuCollateralTableLoader.java index 17342b5..f7c127d 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuCollateralTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuCollateralTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuCollateralTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuCollateral(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuContractTermsChangesTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuContractTermsChangesTableLoader.java index a599445..656bf4a 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuContractTermsChangesTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuContractTermsChangesTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuContractTermsChangesTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuContractTermsChanges(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuDueArrearTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuDueArrearTableLoader.java index 863e72c..d5ed694 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuDueArrearTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuDueArrearTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuDueArrearTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuDueArrear(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuFundDateTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuFundDateTableLoader.java index 38c825e..53fe9e3 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuFundDateTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuFundDateTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuFundDateTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuFundDate(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuGuaranteeRepayTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuGuaranteeRepayTableLoader.java index b5b6b13..b8b8319 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuGuaranteeRepayTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuGuaranteeRepayTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuGuaranteeRepayTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuGuaranteeRepay(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuGuarantorTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuGuarantorTableLoader.java index 6eb4963..c1fc7a9 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuGuarantorTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuGuarantorTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuGuarantorTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuGuarantor(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuIndepGuarantorTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuIndepGuarantorTableLoader.java index 475d7ed..31c1998 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuIndepGuarantorTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuIndepGuarantorTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuIndepGuarantorTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuIndepGuarantor(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuLegalRecordTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuLegalRecordTableLoader.java index 202c137..5e204ba 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuLegalRecordTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuLegalRecordTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuLegalRecordTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuLegalRecord(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuMonthAverPaymtTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuMonthAverPaymtTableLoader.java index 451ffa6..6e65bd9 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuMonthAverPaymtTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuMonthAverPaymtTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuMonthAverPaymtTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuMonthAverPaymt(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuObligAccountTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuObligAccountTableLoader.java index 8615a8a..38ab0c3 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuObligAccountTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuObligAccountTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuObligAccountTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuObligAccount(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuObligTerminationTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuObligTerminationTableLoader.java index 4fdc21a..75651f2 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuObligTerminationTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuObligTerminationTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuObligTerminationTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuObligTermination(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuObligsRcBankruptTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuObligsRcBankruptTableLoader.java index 3e7897e..602aabf 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuObligsRcBankruptTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuObligsRcBankruptTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuObligsRcBankruptTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuObligsRcBankrupt(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuObligsRcLiquidTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuObligsRcLiquidTableLoader.java index d9b33db..3ccf7ea 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuObligsRcLiquidTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuObligsRcLiquidTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuObligsRcLiquidTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuObligsRcLiquid(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuOverallvalTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuOverallvalTableLoader.java index c8d8b9b..6ae1233 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuOverallvalTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuOverallvalTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -31,9 +32,12 @@ public class RuOverallvalTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuOverallval(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuPastDueArrearTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuPastDueArrearTableLoader.java index f93dc8f..e6c3a6c 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuPastDueArrearTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuPastDueArrearTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuPastDueArrearTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuPastDueArrear(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuPaymtConditionTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuPaymtConditionTableLoader.java index 7b9068f..b274c39 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuPaymtConditionTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuPaymtConditionTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuPaymtConditionTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuPaymtCondition(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuPaymtTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuPaymtTableLoader.java index 1da1ef6..9393be1 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuPaymtTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuPaymtTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuPaymtTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuPaymt(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuServiceCoTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuServiceCoTableLoader.java index 17bd8ce..2deb558 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuServiceCoTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuServiceCoTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuServiceCoTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuServiceCo(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuSourceNonMonetObligTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuSourceNonMonetObligTableLoader.java index e6d6e4f..46a8d5c 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuSourceNonMonetObligTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuSourceNonMonetObligTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuSourceNonMonetObligTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuSourceNonMonetOblig(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuSubjectNonMonetObligTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuSubjectNonMonetObligTableLoader.java index 4fb2a41..2d265f6 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuSubjectNonMonetObligTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuSubjectNonMonetObligTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuSubjectNonMonetObligTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuSubjectNonMonetOblig(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuSubmitHoldTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuSubmitHoldTableLoader.java index 8263006..e915e5f 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuSubmitHoldTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuSubmitHoldTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuSubmitHoldTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuSubmitHold(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuTradeTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuTradeTableLoader.java index 3317df6..bccca37 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuTradeTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuTradeTableLoader.java @@ -9,6 +9,7 @@ import java.util.UUID; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import ru.nbch.indicsearchservice.model.TableMetaData; import ru.nbch.indicsearchservice.util.IndicSearchUtils; import ru.nbch.indicsearchservice.util.MapperHolder; @@ -30,9 +31,12 @@ public class RuTradeTableLoader implements RuUidSubTableLoader { @Override @Transactional(readOnly = true) - public void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap) { + public void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuTrade(fids)) { - tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor)); + tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuUidSubTableLoader.java b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuUidSubTableLoader.java index 8ef2f52..b8047a6 100644 --- a/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuUidSubTableLoader.java +++ b/src/main/java/ru/nbch/indicsearchservice/loader/subtable/RuUidSubTableLoader.java @@ -4,7 +4,11 @@ import java.nio.file.Path; import java.util.Map; import java.util.Set; import java.util.UUID; +import ru.nbch.indicsearchservice.model.TableMetaData; public interface RuUidSubTableLoader extends SubTableLoader { - void searchByRuUidFid(UUID taskId, Set fids, Map tableFileMap); + void searchByRuUidFid(UUID taskId, + Set fids, + Map tableFileMap, + Map tableMetaDataMap); } diff --git a/src/main/java/ru/nbch/indicsearchservice/model/TableMetaData.java b/src/main/java/ru/nbch/indicsearchservice/model/TableMetaData.java new file mode 100644 index 0000000..607fea4 --- /dev/null +++ b/src/main/java/ru/nbch/indicsearchservice/model/TableMetaData.java @@ -0,0 +1,51 @@ +package ru.nbch.indicsearchservice.model; + +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.Map; + +public class TableMetaData { + private final String tableName; + private String tableNameLocalization; + private final Map fieldMetaData = new LinkedHashMap<>(); + + public TableMetaData(String tableName) { + this.tableName = tableName; + } + + public String getTableName() { + return tableName; + } + + public String getTableNameLocalization() { + return tableNameLocalization; + } + + public void setTableNameLocalization(String tableNameLocalization) { + this.tableNameLocalization = tableNameLocalization; + } + + public Map getFieldMetaData() { + return Collections.unmodifiableMap(fieldMetaData); + } + + public boolean addField(String fieldName) { + if (fieldMetaData.containsKey(fieldName)) { + return false; + } + fieldMetaData.put(fieldName, new FieldMetaData(fieldName)); + return true; + } + + public void addLocalization(String fieldName, String fieldLocalization) { + fieldMetaData.compute(fieldName, (key, existingRecord) -> + new FieldMetaData(fieldName, fieldLocalization) + ); + } + + public record FieldMetaData(String fieldName, String fieldLocalization) { + public FieldMetaData(String fieldName) { + this(fieldName, null); + } + } +} diff --git a/src/main/java/ru/nbch/indicsearchservice/repository/bank/SettingsMapper.java b/src/main/java/ru/nbch/indicsearchservice/repository/bank/SettingsMapper.java index d77e5c3..e26a5d6 100644 --- a/src/main/java/ru/nbch/indicsearchservice/repository/bank/SettingsMapper.java +++ b/src/main/java/ru/nbch/indicsearchservice/repository/bank/SettingsMapper.java @@ -14,4 +14,8 @@ public interface SettingsMapper { List findAllByNames(@Param("names") List names); Collection findAll(); + + void insert(@Param("settings") Settings settings); + + void insertBatch(@Param("list") List list); } diff --git a/src/main/java/ru/nbch/indicsearchservice/repository/indic/IndicMapper.java b/src/main/java/ru/nbch/indicsearchservice/repository/indic/IndicMapper.java index f338180..27e822b 100644 --- a/src/main/java/ru/nbch/indicsearchservice/repository/indic/IndicMapper.java +++ b/src/main/java/ru/nbch/indicsearchservice/repository/indic/IndicMapper.java @@ -11,6 +11,7 @@ import ru.nbch.indicsearchservice.repository.MyBatisRepository; public interface IndicMapper extends MyBatisRepository { List> getTableColumnsByTableNames(List tables); + // GUTDF/RUTDF tables Cursor> findAllByFidsFromRuUid(Set fids); Cursor> findAllByFidsFromRuApplication(Set fids); Cursor> findAllByFidsFromRuObligPartTake(Set fids); @@ -59,4 +60,22 @@ public interface IndicMapper extends MyBatisRepository { Cursor> findAllByFidsFromRuSourceNonMonetOblig(Set fids); Cursor> findAllByFidsFromRuSubjectNonMonetOblig(Set fids); Cursor> findAllByFidsFromRuSubmitHold(Set fids); + + // TUTDF tables + Cursor> findAllByFidsFromAccount(Set fids); + Cursor> findAllByFidsFromInformation(Set fids); + Cursor> findAllByFidsFromBankruptcy(Set fids); + Cursor> findAllByFidsFromConsumerBankruptcy(Set fids); + Cursor> findAllByFidsFromLegal(Set fids); + + Cursor> findAllByMemberCodeFromAccount(String memberCode); + Cursor> findAllByMemberCodeFromInformation(String memberCode); + Cursor> findFidsByOgrnFromIdForTutdf(String idNorm); + Cursor> findFidsByPassportFromIdForTutdf(String idNorm); + + Cursor> findAllByFidsFromAccountAmend(Set fids); + Cursor> findAllByFidsFromPayment(Set fids); + Cursor> findAllByFidsFromCollateral(Set fids); + Cursor> findAllByFidsFromGuarantor(Set fids); + Cursor> findAllByFidsFromBankGuarantee(Set fids); } diff --git a/src/main/java/ru/nbch/indicsearchservice/service/IndicSearchService.java b/src/main/java/ru/nbch/indicsearchservice/service/IndicSearchService.java index dd1303f..5b82a5b 100644 --- a/src/main/java/ru/nbch/indicsearchservice/service/IndicSearchService.java +++ b/src/main/java/ru/nbch/indicsearchservice/service/IndicSearchService.java @@ -3,10 +3,18 @@ package ru.nbch.indicsearchservice.service; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Optional; +import java.util.Set; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.mutable.MutableLong; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -20,26 +28,50 @@ import ru.nbch.indicsearchservice.dto.response.JobStatusResponseDto; import ru.nbch.indicsearchservice.exporter.ExcelExporter; import ru.nbch.indicsearchservice.exporter.JsonExporter; import ru.nbch.indicsearchservice.loader.FirstLevelTableLoader; +import ru.nbch.indicsearchservice.model.LocalizationObject; +import ru.nbch.indicsearchservice.model.Settings; +import ru.nbch.indicsearchservice.model.TableMetaData; +import ru.nbch.indicsearchservice.model.enums.DataType; +import ru.nbch.indicsearchservice.model.enums.SearchParameter; +import ru.nbch.indicsearchservice.repository.bank.LocalizationObjectMapper; +import ru.nbch.indicsearchservice.repository.bank.SettingsMapper; +import ru.nbch.indicsearchservice.util.IndicSearchUtils; +import ru.nbch.indicsearchservice.util.MapperHolder; @Service public class IndicSearchService { private static final Logger log = LoggerFactory.getLogger(IndicSearchService.class); - private static final boolean IS_EXPORT_AS_EXCEL = false; + private static final boolean IS_EXPORT_AS_EXCEL = true; private final List tableLoaders; private final List fileAggregators; private final ExcelExporter excelExporter; private final JsonExporter jsonExporter; + private final SettingsService settingsService; + private final LocalizationObjectMapper localizationObjectMapper; + private final SettingsMapper settingsMapper; + private final MapperHolder mapperHolder; + private final IndicSearchUtils indicSearchUtils; public IndicSearchService(List tableLoaders, List fileAggregators, ExcelExporter excelExporter, - JsonExporter jsonExporter) { + JsonExporter jsonExporter, + SettingsService settingsService, + LocalizationObjectMapper localizationObjectMapper, + SettingsMapper settingsMapper, + MapperHolder mapperHolder, + IndicSearchUtils indicSearchUtils) { this.tableLoaders = tableLoaders; this.fileAggregators = fileAggregators; this.excelExporter = excelExporter; this.jsonExporter = jsonExporter; + this.settingsService = settingsService; + this.localizationObjectMapper = localizationObjectMapper; + this.settingsMapper = settingsMapper; + this.mapperHolder = mapperHolder; + this.indicSearchUtils = indicSearchUtils; } public AddSearchJobResponseDto addSearchJob(AddSearchJobRequestDto request) { @@ -47,6 +79,17 @@ public class IndicSearchService { StopWatch sw = new StopWatch(); + // Подготовительный этап. Получение мета данных из БД + log.info("Prep step started. Getting metadata from database"); + sw.start(); + + Map tableMetaDataMap = prepareTableMetaData(request.getDataType(), request.getSearchParameter()); + long rowLimit = Long.parseLong(settingsService.getSettingsValueByName("LimitDB")); + + sw.stop(); + log.info(sw.prettyPrint()); + sw = new StopWatch(); + // Первый этап. Получение данных из БД и заполнение файлов log.info("First step started. Getting data from database and filling csv files"); sw.start(); @@ -58,7 +101,8 @@ public class IndicSearchService { request.getSearchParameter(), request.getSearchValue(), request.getMemberCode().substring(0, 6), - tableFileMap + tableFileMap, + tableMetaDataMap )); sw.stop(); @@ -97,10 +141,11 @@ public class IndicSearchService { log.info("Third step started. Exporting aggregated file into JSON/XLSX."); sw.start(); - if (!IS_EXPORT_AS_EXCEL) { - jsonExporter.writeJsonFile(aggregatedFile, taskId); + if (rowCounter.longValue() < rowLimit && !IS_EXPORT_AS_EXCEL) { + jsonExporter.writeJsonFile(aggregatedFile, taskId, tableMetaDataMap); } else { - excelExporter.writeExcelFile(aggregatedFile, taskId, rowCounter.longValue()); + fillTableMetaDataWithLocalization(tableMetaDataMap); + excelExporter.writeExcelFile(aggregatedFile, taskId, rowCounter.longValue(), tableMetaDataMap); } sw.stop(); @@ -122,4 +167,154 @@ public class IndicSearchService { public ResponseEntity export(Long id, String exportType) { return null; } + + private Map prepareTableMetaData(DataType dataType, SearchParameter searchParameter) { + Map tableMetaDataMap = new ConcurrentHashMap<>(); + + // Получаем список таблиц + Set tableNames = tableLoaders.parallelStream() + .map(tl -> tl.getTableNamesIfSuitable(dataType, searchParameter)) + .flatMap(Set::stream) + .collect(Collectors.toSet()); + + if (tableNames.isEmpty()) { + return tableMetaDataMap; + } + + tableNames.forEach(name -> tableMetaDataMap.put(name, new TableMetaData(name))); + + // Составляем массив ключей из SETTINGS + Map keyToTable = new HashMap<>(); + List columnKeys = new ArrayList<>(); + for (String table : tableNames) { + String key = "db.table." + table.toUpperCase() + ".fields"; + columnKeys.add(key); + keyToTable.put(key, table); + } + + // Получаем данные из SETTINGS одним запросом + Map> settingsValues = settingsService.getSettingsValuesByNames(columnKeys); + Set missingTables = new HashSet<>(); + List batchInsertSettings = new ArrayList<>(); + + for (String key : columnKeys) { + String table = keyToTable.get(key); + Optional valueOpt = settingsValues.getOrDefault(key, Optional.empty()); + + if (valueOpt.isPresent() && StringUtils.isNotBlank(valueOpt.get())) { + String[] fields = valueOpt.get().split(";"); + for (String field : fields) { + tableMetaDataMap.get(table).addField(field.trim()); + } + } else { + missingTables.add(table); + } + } + + // Если найдены пропущенные значения, то добавляем их в БД + if (!missingTables.isEmpty()) { + List> rows = + mapperHolder.getIndicMapper().getTableColumnsByTableNames(new ArrayList<>(missingTables)); + + Map> tableToColumns = new HashMap<>(); + for (Map row : rows) { + tableToColumns.computeIfAbsent(row.get("TBNAME"), t -> new ArrayList<>()).add(row.get("NAME")); + } + + for (String table : missingTables) { + List columns = tableToColumns.getOrDefault(table, List.of()); + String key = "db.table." + table.toUpperCase() + ".fields"; + String value = String.join(";", columns); + + Settings newSettings = new Settings(); + newSettings.setName(key); + newSettings.setValue(value); + batchInsertSettings.add(newSettings); + + for (String column : columns) { + tableMetaDataMap.get(table).addField(column.trim()); + } + } + + if (!batchInsertSettings.isEmpty()) { + settingsMapper.insertBatch(batchInsertSettings); + } + } + + return tableMetaDataMap; + } + + private void fillTableMetaDataWithLocalization(Map tableMetaDataMap) { + if (tableMetaDataMap == null || tableMetaDataMap.isEmpty()) { + return; + } + + // Получаем все ключи для LOCALIZATION_OBJECT + Set localizationKeys = new HashSet<>(); + for (TableMetaData metaData : tableMetaDataMap.values()) { + String tableUpper = metaData.getTableName().toUpperCase(); + localizationKeys.add("db.viewer.table." + tableUpper); + + for (String field : metaData.getFieldMetaData().keySet()) { + String fieldUpper = field.toUpperCase(); + localizationKeys.add("db.viewer." + tableUpper + ".field." + fieldUpper); + localizationKeys.add("db.viewer.field." + fieldUpper); + } + } + + // Получаем данные из LOCALIZATION_OBJECT одним запросом + Map> localizationValues = indicSearchUtils.getOptionalLocalizationStrings(new ArrayList<>(localizationKeys)); + List toInsertLocalizations = new ArrayList<>(); + + // Вставляем локализацию в tableMetaDataMap + for (TableMetaData metaData : tableMetaDataMap.values()) { + String tableUpper = metaData.getTableName().toUpperCase(); + String tableKey = "db.viewer.table." + tableUpper; + + // Локализация для таблиц + Optional tableLoc = localizationValues.getOrDefault(tableKey, Optional.empty()); + if (tableLoc.isPresent() && StringUtils.isNotBlank(tableLoc.get())) { + metaData.setTableNameLocalization(tableLoc.get()); + } else { + String fallbackText = "Таблица " + tableUpper; + metaData.setTableNameLocalization(fallbackText); + + LocalizationObject newLocalizationObject = new LocalizationObject(); + newLocalizationObject.setCode(tableKey); + newLocalizationObject.setText(fallbackText); + toInsertLocalizations.add(newLocalizationObject); + } + + // Локализация для полей + for (String field : metaData.getFieldMetaData().keySet()) { + String fieldUpper = field.toUpperCase(); + String primaryKey = "db.viewer." + tableUpper + ".field." + fieldUpper; + String fallbackKey = "db.viewer.field." + fieldUpper; + + Optional primaryLoc = localizationValues.getOrDefault(primaryKey, Optional.empty()); + + if (primaryLoc.isPresent() && StringUtils.isNotBlank(primaryLoc.get())) { + metaData.addLocalization(field, primaryLoc.get()); + } else { + Optional fallbackLoc = localizationValues.getOrDefault(fallbackKey, Optional.empty()); + if (fallbackLoc.isPresent() && StringUtils.isNotBlank(fallbackLoc.get())) { + metaData.addLocalization(field, fallbackLoc.get()); + } else { + String fallbackText = "Поле " + fieldUpper; + metaData.addLocalization(field, fallbackText); + + LocalizationObject newLocalizationObject = new LocalizationObject(); + newLocalizationObject.setCode(primaryKey); + newLocalizationObject.setText(fallbackText); + toInsertLocalizations.add(newLocalizationObject); + } + } + } + } + + // Если найдены пропущенные значения, то добавляем их в БД + if (!toInsertLocalizations.isEmpty()) { + localizationObjectMapper.insertBatch(toInsertLocalizations); + } + } } diff --git a/src/main/java/ru/nbch/indicsearchservice/util/IndicSearchUtils.java b/src/main/java/ru/nbch/indicsearchservice/util/IndicSearchUtils.java index 6e6923d..42255d9 100644 --- a/src/main/java/ru/nbch/indicsearchservice/util/IndicSearchUtils.java +++ b/src/main/java/ru/nbch/indicsearchservice/util/IndicSearchUtils.java @@ -5,57 +5,91 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardOpenOption; +import java.util.HashSet; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.UUID; +import java.util.stream.Collectors; import org.apache.ibatis.cursor.Cursor; import org.springframework.stereotype.Component; import ru.nbch.indicsearchservice.config.settings.ApplicationSettings; +import ru.nbch.indicsearchservice.model.LocalizationObject; +import ru.nbch.indicsearchservice.model.TableMetaData; +import ru.nbch.indicsearchservice.repository.bank.LocalizationObjectMapper; @Component public class IndicSearchUtils { + private static final Set REQUIRED_FIELDS = Set.of( + "FID", + "SERIAL_NUM", + "ACC_SERIAL_NUM", + "PARENT_SERIAL_NUM" + ); + private final ApplicationSettings settings; + private final LocalizationObjectMapper localizationObjectMapper; - public IndicSearchUtils(ApplicationSettings settings) { + public IndicSearchUtils(ApplicationSettings settings, + LocalizationObjectMapper localizationObjectMapper) { this.settings = settings; - } - - public Path writeRowsToFile(UUID taskId, - String tableName, - Cursor> databaseCursor) { - return writeRowsToFile(taskId, tableName, databaseCursor, null); + this.localizationObjectMapper = localizationObjectMapper; } public Path writeRowsToFile(UUID taskId, String tableName, Cursor> databaseCursor, - Set foundFids) { + Map tableMetaDataMap) { + return writeRowsToFile(taskId, tableName, databaseCursor, null, tableMetaDataMap); + } + + public Path writeRowsToFile(UUID taskId, + String tableName, + Cursor> databaseCursor, + Set foundFids, + Map tableMetaDataMap) { + Path resultFile = settings.getStorageDirectory().toPath().resolve(tableName + "_" + taskId + ".csv"); + TableMetaData tableMetaData = tableMetaDataMap.get(tableName); + Set configuredFields = tableMetaData != null ? + tableMetaData.getFieldMetaData().keySet() : + new HashSet<>(); + try (BufferedWriter writer = Files.newBufferedWriter(resultFile, StandardOpenOption.CREATE, StandardOpenOption.APPEND)) { for (LinkedHashMap row : databaseCursor) { + if (foundFids != null) { + Object fidValue = row.get("FID"); + if (fidValue != null) { + foundFids.add(Integer.parseInt(fidValue.toString())); + } + } + StringBuilder sb = new StringBuilder(); sb.append(tableName).append("%%%"); for (Map.Entry entry : row.entrySet()) { String columnName = entry.getKey(); - Object columnValue = entry.getValue(); + String columnNameUpper = columnName.toUpperCase(); - sb.append(columnName.toUpperCase()).append("%%%"); + if (configuredFields.contains(columnName) || REQUIRED_FIELDS.contains(columnNameUpper)) { + sb.append(columnNameUpper).append("%%%"); - if (columnValue != null) { - if (foundFids != null && columnName.equals("FID")) { - foundFids.add(Integer.parseInt(columnValue.toString())); + Object columnValue = entry.getValue(); + if (columnValue != null) { + sb.append(columnValue).append("%%%"); + } else { + sb.append("%%%"); } - - sb.append(columnValue).append("%%%"); - } else { - sb.append("%%%"); } } - sb.deleteCharAt(sb.length() - 1); + if (sb.length() >= 3) { + sb.setLength(sb.length() - 3); + } + writer.write(sb.toString()); writer.newLine(); } @@ -65,4 +99,17 @@ public class IndicSearchUtils { return resultFile; } + + public Map> getOptionalLocalizationStrings(List localizationCodes) { + if (localizationCodes == null || localizationCodes.isEmpty()) { + return Map.of(); + } + + List foundValues = localizationObjectMapper.findAllByCodes(localizationCodes); + if (foundValues == null || foundValues.isEmpty()) { + return Map.of(); + } + + return foundValues.stream().collect(Collectors.toMap(LocalizationObject::getCode, s -> Optional.ofNullable(s.getText()))); + } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 5d15a42..8b1900f 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -14,4 +14,5 @@ app.data-source.max-pool-size=10 app.data-source.max-lifetime=1800000 app.data-source.keep-alive-time=120000 -app.storage-directory=C:\\Users\\inikolaev\\Desktop\\1 \ No newline at end of file +app.storage-directory=C:\\Users\\inikolaev\\Desktop\\1 +#app.storage-directory=C:\\Users\\ivan\\Desktop\\storage \ No newline at end of file diff --git a/src/main/resources/mappers/bank/localization_object_mapper.xml b/src/main/resources/mappers/bank/localization_object_mapper.xml index d5b808c..c4943f4 100644 --- a/src/main/resources/mappers/bank/localization_object_mapper.xml +++ b/src/main/resources/mappers/bank/localization_object_mapper.xml @@ -38,6 +38,7 @@ WHERE CODE IN #{code} + WITH UR diff --git a/src/main/resources/mappers/bank/settings_mapper.xml b/src/main/resources/mappers/bank/settings_mapper.xml index e9eb1d3..7bf0295 100644 --- a/src/main/resources/mappers/bank/settings_mapper.xml +++ b/src/main/resources/mappers/bank/settings_mapper.xml @@ -27,10 +27,28 @@ WHERE NAME IN #{name} + WITH UR + + + insert into SETTINGS (VERSION, + NAME, + "VALUE") + values (0, + #{settings.name}, + #{settings.value}) + + + + insert into SETTINGS (VERSION, NAME, "VALUE") + values + + (0, #{s.name}, #{s.value}) + + \ No newline at end of file diff --git a/src/main/resources/mappers/indic/indic_mapper.xml b/src/main/resources/mappers/indic/indic_mapper.xml index b5f1b02..72c8273 100644 --- a/src/main/resources/mappers/indic/indic_mapper.xml +++ b/src/main/resources/mappers/indic/indic_mapper.xml @@ -111,7 +111,8 @@ WITH UR - SELECT * FROM INDIC.RU_APPLICATION WHERE (MEMBER_CODE LIKE #{memberCode} || '%' @@ -161,7 +162,8 @@ WITH UR - SELECT * FROM INDIC.RU_ACQUIRERINDIVID WHERE FID IN @@ -227,7 +229,8 @@ WITH UR - SELECT * FROM INDIC.RU_BANKRUPTCY_BLOCKS WHERE FID IN @@ -260,7 +263,8 @@ WITH UR - SELECT * FROM INDIC.RU_COLLATERAL_BLOCKS WHERE FID IN @@ -293,7 +297,8 @@ WITH UR - SELECT * FROM INDIC.RU_CONTRACT_TERMS_CHANGES WHERE FID IN @@ -392,7 +397,8 @@ WITH UR - SELECT * FROM INDIC.RU_OBLIGSRCBANKRUPT WHERE FID IN @@ -414,7 +420,8 @@ WITH UR - SELECT * FROM INDIC.RU_OBLIGTERMINATION WHERE FID IN @@ -480,7 +487,8 @@ WITH UR - SELECT * FROM INDIC.RU_SOURCENONMONETOBLIG WHERE FID IN @@ -491,7 +499,8 @@ WITH UR - SELECT * FROM INDIC.RU_SUBJECTNONMONETOBLIG WHERE FID IN @@ -512,4 +521,151 @@ ORDER BY ACC_SERIAL_NUM, SERIAL_NUM WITH UR + + + + + + + + + + + + + + + + + + + + + + + + + + + +