first version
This commit is contained in:
parent
32c4836c7c
commit
190b4e0f4b
6 changed files with 209 additions and 0 deletions
|
|
@ -1,14 +1,40 @@
|
||||||
package ru.nbch.indicsearchservice.service;
|
package ru.nbch.indicsearchservice.service;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import ru.nbch.indicsearchservice.dto.request.AddSearchJobRequestDto;
|
import ru.nbch.indicsearchservice.dto.request.AddSearchJobRequestDto;
|
||||||
import ru.nbch.indicsearchservice.dto.response.AddSearchJobResponseDto;
|
import ru.nbch.indicsearchservice.dto.response.AddSearchJobResponseDto;
|
||||||
import ru.nbch.indicsearchservice.dto.response.JobStatusResponseDto;
|
import ru.nbch.indicsearchservice.dto.response.JobStatusResponseDto;
|
||||||
|
import ru.nbch.indicsearchservice.service.tableloader.AbstractTableLoader;
|
||||||
|
import ru.nbch.indicsearchservice.service.tableloader.TableLoaderName;
|
||||||
|
import ru.nbch.indicsearchservice.util.TableData;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class IndicSearchService {
|
public class IndicSearchService {
|
||||||
|
private final List<AbstractTableLoader> tableLoaders;
|
||||||
|
|
||||||
|
public IndicSearchService(List<AbstractTableLoader> tableLoaders) {
|
||||||
|
this.tableLoaders = tableLoaders;
|
||||||
|
}
|
||||||
|
|
||||||
public AddSearchJobResponseDto addSearchJob(AddSearchJobRequestDto request) {
|
public AddSearchJobResponseDto addSearchJob(AddSearchJobRequestDto request) {
|
||||||
|
List<TableLoaderName> foundTableLoaderNames = TableLoaderName
|
||||||
|
.getTableLoaderNamesByDataTypeAndSearchParameter(request.getDataType(), request.getSearchParameter());
|
||||||
|
|
||||||
|
List<AbstractTableLoader> suitableTableLoaders = tableLoaders.stream()
|
||||||
|
.filter(tl -> foundTableLoaderNames.contains(tl.getTableLoaderName()) || foundTableLoaderNames.contains(tl.getChildLoaders()))
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
List<TableData> result = new ArrayList<>();
|
||||||
|
for (AbstractTableLoader tableLoader : suitableTableLoaders) {
|
||||||
|
TableData tableData = tableLoader.fetchData(Map.of());
|
||||||
|
tableLoader.fetchChildLoaders(tableData);
|
||||||
|
result.add(tableData);
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
package ru.nbch.indicsearchservice.service.tableloader;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import ru.nbch.indicsearchservice.util.TableData;
|
||||||
|
|
||||||
|
public abstract class AbstractTableLoader {
|
||||||
|
public abstract TableLoaderName getTableLoaderName();
|
||||||
|
|
||||||
|
public abstract List<TableLoaderName> getChildLoaders();
|
||||||
|
|
||||||
|
public abstract TableData fetchData(Map<String, Object> inputData);
|
||||||
|
|
||||||
|
public abstract void fetchChildLoaders(TableData tableData);
|
||||||
|
|
||||||
|
public abstract Long countData(Map<String, Object> inputData);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
package ru.nbch.indicsearchservice.service.tableloader;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import ru.nbch.indicsearchservice.util.TableData;
|
||||||
|
|
||||||
|
public class RuTradeTableLoader extends AbstractTableLoader {
|
||||||
|
@Override
|
||||||
|
public TableLoaderName getTableLoaderName() {
|
||||||
|
return TableLoaderName.RU_TRADE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<TableLoaderName> getChildLoaders() {
|
||||||
|
return List.of();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TableData fetchData(Map<String, Object> inputData) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Long countData(Map<String, Object> inputData) {
|
||||||
|
return 0L;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
package ru.nbch.indicsearchservice.service.tableloader;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import ru.nbch.indicsearchservice.util.TableData;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class RuUidTableLoader extends AbstractTableLoader {
|
||||||
|
@Override
|
||||||
|
public TableLoaderName getTableLoaderName() {
|
||||||
|
return TableLoaderName.RU_UID;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<TableLoaderName> getChildLoaders() {
|
||||||
|
return List.of(TableLoaderName.RU_TRADE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TableData fetchData(Map<String, Object> inputData) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void fetchChildLoaders(TableData tableData) {
|
||||||
|
Object val = tableData.getFieldData().stream().anyMatch(fieldDataDto -> fieldDataDto.key().equals("serialNumber"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Long countData(Map<String, Object> inputData) {
|
||||||
|
return 0L;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void collector(List<Map<String, Object>> mapperQueryResult, Subject subject) {
|
||||||
|
subject.addResultByTable()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
package ru.nbch.indicsearchservice.service.tableloader;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import ru.nbch.indicsearchservice.model.enums.DataType;
|
||||||
|
import ru.nbch.indicsearchservice.model.enums.SearchParameter;
|
||||||
|
|
||||||
|
public enum TableLoaderName {
|
||||||
|
RU_UID( // 1st level table
|
||||||
|
List.of(DataType.GUTDF, DataType.RUTDF, DataType.TUTDF),
|
||||||
|
List.of(SearchParameter.FID)
|
||||||
|
),
|
||||||
|
RU_TRADE(List.of(), List.of()), // 2nd level table
|
||||||
|
;
|
||||||
|
|
||||||
|
private final List<DataType> suitableForDataType;
|
||||||
|
private final List<SearchParameter> suitableForSearchParameter;
|
||||||
|
|
||||||
|
TableLoaderName(List<DataType> suitableForDataType, List<SearchParameter> suitableForSearchParameter) {
|
||||||
|
this.suitableForDataType = suitableForDataType;
|
||||||
|
this.suitableForSearchParameter = suitableForSearchParameter;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<DataType> getSuitableForDataType() {
|
||||||
|
return suitableForDataType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<SearchParameter> getSuitableForSearchParameter() {
|
||||||
|
return suitableForSearchParameter;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<TableLoaderName> getTableLoaderNamesByDataTypeAndSearchParameter(DataType dataType, SearchParameter searchParameter) {
|
||||||
|
List<TableLoaderName> result = new ArrayList<>();
|
||||||
|
|
||||||
|
for (TableLoaderName tableLoaderName : TableLoaderName.values()) {
|
||||||
|
if (tableLoaderName.getSuitableForDataType().contains(dataType) &&
|
||||||
|
tableLoaderName.getSuitableForSearchParameter().contains(searchParameter)) {
|
||||||
|
result.add(tableLoaderName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
57
src/main/java/ru/nbch/indicsearchservice/util/TableData.java
Normal file
57
src/main/java/ru/nbch/indicsearchservice/util/TableData.java
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
package ru.nbch.indicsearchservice.util;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public class TableData {
|
||||||
|
private String tableName;
|
||||||
|
private List<FieldDataDto> fieldData = new ArrayList<>();
|
||||||
|
private List<TableData> relatedData = new ArrayList<>();
|
||||||
|
|
||||||
|
public TableData() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public TableData(String tableName, List<FieldDataDto> fieldData, List<TableData> relatedData) {
|
||||||
|
this.tableName = tableName;
|
||||||
|
this.fieldData = fieldData;
|
||||||
|
this.relatedData = relatedData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTableName() {
|
||||||
|
return tableName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<FieldDataDto> getFieldData() {
|
||||||
|
return fieldData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<TableData> getRelatedData() {
|
||||||
|
return relatedData;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
TableData tableData = (TableData) o;
|
||||||
|
return Objects.equals(tableName, tableData.tableName) && Objects.equals(fieldData, tableData.fieldData) && Objects.equals(relatedData, tableData.relatedData);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(tableName, fieldData, relatedData);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "TableData{" +
|
||||||
|
"tableName='" + tableName + '\'' +
|
||||||
|
", fieldData=" + fieldData +
|
||||||
|
", relatedData=" + relatedData +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
|
||||||
|
public record FieldDataDto(String key,
|
||||||
|
Object value) {
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue