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.exception.InternalException; 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 InternalException("Failed to read cursor " + 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) { if (!fids.isEmpty()) { try (Cursor> cursor = mapperHolder.getIndicMapper().findAllByFidsFromBankruptcy(fids)) { tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap)); } catch (IOException e) { throw new InternalException("Failed to read cursor " + e); } } } } } }