indic-search-service/src/main/java/ru/nbch/indicsearchservice/loader/RuApplicationTableLoader.java
2026-05-28 12:08:58 +03:00

96 lines
4.4 KiB
Java

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 RuApplicationTableLoader implements FirstLevelTableLoader, TableLoaderForId {
private final MapperHolder mapperHolder;
private final IndicSearchUtils indicSearchUtils;
public RuApplicationTableLoader(MapperHolder mapperHolder,
IndicSearchUtils indicSearchUtils) {
this.mapperHolder = mapperHolder;
this.indicSearchUtils = indicSearchUtils;
}
@Override
public String getTableName() {
return "RU_APPLICATION";
}
@Override
public Set<String> 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<String, Path> tableFileMap,
Map<String, TableMetaData> tableMetaDataMap) {
if (dataType == DataType.GUTDF || dataType == DataType.RUTDF) {
if (searchParameter == SearchParameter.APPLICATION_NUMBER || searchParameter == SearchParameter.OLD_APP_NUM) {
try (Cursor<LinkedHashMap<String, Object>> cursor = mapperHolder.getIndicMapper().findAllByMemberCodeFromRuApplication(memberCode)) {
tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap));
} catch (IOException e) {
throw new InternalException("Failed to read cursor " + e);
}
} else if (searchParameter == SearchParameter.FID) {
Set<Integer> fids = Set.of(Integer.parseInt(searchValue));
try (Cursor<LinkedHashMap<String, Object>> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuApplication(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<Integer> fids,
String memberCode,
Map<String, Path> tableFileMap,
Map<String, TableMetaData> tableMetaDataMap) {
if (dataType == DataType.GUTDF || dataType == DataType.RUTDF) {
if (searchParameter == SearchParameter.PASSPORT || searchParameter == SearchParameter.OGRN) {
try (Cursor<LinkedHashMap<String, Object>> cursor = mapperHolder.getIndicMapper().findAllByFidsFromRuApplication(fids)) {
tableFileMap.put(getTableName(), indicSearchUtils.writeRowsToFile(taskId, getTableName(), cursor, tableMetaDataMap));
} catch (IOException e) {
throw new InternalException("Failed to read cursor " + e);
}
}
}
}
}