feat(数据集): 新增数据集交互优化接口

This commit is contained in:
junjun 2022-09-15 17:45:47 +08:00
parent efac2b381a
commit d50c0a1d8f
3 changed files with 119 additions and 18 deletions

View File

@ -70,11 +70,11 @@ public class DataSetTableController {
@ApiOperation("修改")
@PostMapping("alter")
@DeLog(
operatetype = SysLogConstants.OPERATE_TYPE.MODIFY,
sourcetype = SysLogConstants.SOURCE_TYPE.DATASET,
value = "id",
positionIndex = 0,
positionKey = "sceneId"
operatetype = SysLogConstants.OPERATE_TYPE.MODIFY,
sourcetype = SysLogConstants.SOURCE_TYPE.DATASET,
value = "id",
positionIndex = 0,
positionKey = "sceneId"
)
public void alter(@RequestBody DataSetTableRequest request) throws Exception {
dataSetTableService.alter(request);
@ -135,6 +135,16 @@ public class DataSetTableController {
return dataSetTableService.getPreviewData(dataSetTableRequest, page, pageSize, null);
}
@ApiOperation("db数据库表预览数据")
@PostMapping("dbPreview")
@DePermissions(value = {
@DePermission(type = DePermissionType.DATASET, value = "id", level = ResourceAuthLevel.DATASET_LEVEL_USE),
@DePermission(type = DePermissionType.DATASOURCE, value = "dataSourceId", level = ResourceAuthLevel.DATASOURCE_LEVEL_USE)
}, logical = Logical.AND)
public Map<String, Object> getDBPreview(@RequestBody DataSetTableRequest dataSetTableRequest) throws Exception {
return dataSetTableService.getDBPreview(dataSetTableRequest);
}
@ApiOperation("根据sql查询预览数据")
@PostMapping("sqlPreview")
@DePermissions(value = {
@ -212,7 +222,13 @@ public class DataSetTableController {
@ApiOperation("根据仪表板视图ID查询数据集变量")
@PostMapping("/paramsWithIds/{type}")
List<SqlVariableDetails> paramsWithIds(@PathVariable String type, @RequestBody List<String> viewIds){
List<SqlVariableDetails> paramsWithIds(@PathVariable String type, @RequestBody List<String> viewIds) {
return dataSetTableService.paramsWithIds(type, viewIds);
};
}
@ApiOperation("根据数据集文件夹ID查询数据集名称")
@PostMapping("/getDatasetNameFromGroup/{sceneId}")
public List<String> getDatasetNameFromGroup(@PathVariable String sceneId) {
return dataSetTableService.getDatasetNameFromGroup(sceneId);
}
}

View File

@ -4,7 +4,6 @@ import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import io.dataease.auth.annotation.DePermission;
import io.dataease.plugins.common.base.domain.DatasetTableTask;
import io.dataease.commons.constants.DePermissionType;
import io.dataease.commons.constants.ResourceAuthLevel;
import io.dataease.commons.utils.PageUtils;
@ -12,6 +11,7 @@ import io.dataease.commons.utils.Pager;
import io.dataease.controller.request.dataset.DataSetTaskRequest;
import io.dataease.controller.sys.base.BaseGridRequest;
import io.dataease.dto.dataset.DataSetTaskDTO;
import io.dataease.plugins.common.base.domain.DatasetTableTask;
import io.dataease.service.dataset.DataSetTableTaskLogService;
import io.dataease.service.dataset.DataSetTableTaskService;
import io.swagger.annotations.Api;
@ -62,6 +62,14 @@ public class DataSetTableTaskController {
return dataSetTableTaskService.list(datasetTableTask);
}
@DePermission(type = DePermissionType.DATASET, value = "tableId", level = ResourceAuthLevel.DATASET_LEVEL_MANAGE)
@ApiOperation("分页查询")
@PostMapping("list/{goPage}/{pageSize}")
public Pager<List<DatasetTableTask>> list(@RequestBody DatasetTableTask datasetTableTask, @PathVariable int goPage, @PathVariable int pageSize) {
Page<Object> page = PageHelper.startPage(goPage, pageSize, true);
return PageUtils.setPageInfo(page, dataSetTableTaskService.list(datasetTableTask));
}
@ApiOperation("分页查询")
@PostMapping("/pageList/{goPage}/{pageSize}")
public Pager<List<DataSetTaskDTO>> taskList(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody BaseGridRequest request) {

View File

@ -153,6 +153,8 @@ public class DataSetTableService {
@DeCleaner(value = DePermissionType.DATASET, key = "sceneId")
public void batchInsert(List<DataSetTableRequest> datasetTable) throws Exception {
// 保存之前校验table名称
checkNames(datasetTable);
for (DataSetTableRequest table : datasetTable) {
save(table);
// 清理权限缓存
@ -382,6 +384,13 @@ public class DataSetTableService {
}
}
public List<String> getDatasetNameFromGroup(String sceneId) {
DatasetTableExample example = new DatasetTableExample();
example.createCriteria().andSceneIdEqualTo(sceneId);
List<DatasetTable> datasetTables = datasetTableMapper.selectByExample(example);
return datasetTables.stream().map(DatasetTable::getName).collect(Collectors.toList());
}
public List<DataSetTableDTO> list(DataSetTableRequest dataSetTableRequest) {
dataSetTableRequest.setUserId(String.valueOf(AuthUtils.getUser().getUserId()));
dataSetTableRequest.setTypeFilter(dataSetTableRequest.getTypeFilter());
@ -936,7 +945,7 @@ public class DataSetTableService {
return new ArrayList<>();
}
if(!Arrays.asList("DATE", "TEXT", "NUM").contains(type)){
if (!Arrays.asList("DATE", "TEXT", "NUM").contains(type)) {
return new ArrayList<>();
}
ChartViewExample chartViewExample = new ChartViewExample();
@ -965,24 +974,28 @@ public class DataSetTableService {
}
}
}
switch (type){
switch (type) {
case "DATE":
sqlVariableDetails = sqlVariableDetails.stream().filter(item -> item.getType().get(0).contains("DATETIME")).collect(Collectors.toList());
sqlVariableDetails = sqlVariableDetails.stream().filter(item -> item.getType().get(0).contains("DATETIME")).collect(Collectors.toList());
sqlVariableDetails.forEach(item -> {
if(item.getType().size()> 1){
if (item.getType().size() > 1) {
item.setAlias(item.getVariableName() + "[" + item.getType().get(1) + "]");
}else {
} else {
item.setAlias(item.getVariableName());
}
});
break;
case "TEXT":
sqlVariableDetails = sqlVariableDetails.stream().filter(item -> item.getType().get(0).contains("TEXT")).collect(Collectors.toList());
sqlVariableDetails.forEach(item -> {item.setAlias(item.getVariableName());});
sqlVariableDetails = sqlVariableDetails.stream().filter(item -> item.getType().get(0).contains("TEXT")).collect(Collectors.toList());
sqlVariableDetails.forEach(item -> {
item.setAlias(item.getVariableName());
});
break;
case "NUM":
sqlVariableDetails = sqlVariableDetails.stream().filter(item -> item.getType().get(0).contains("LONG") || item.getType().get(0).contains("DOUBLE")).collect(Collectors.toList());
sqlVariableDetails.forEach(item -> {item.setAlias(item.getVariableName());});
sqlVariableDetails = sqlVariableDetails.stream().filter(item -> item.getType().get(0).contains("LONG") || item.getType().get(0).contains("DOUBLE")).collect(Collectors.toList());
sqlVariableDetails.forEach(item -> {
item.setAlias(item.getVariableName());
});
break;
}
return sqlVariableDetails;
@ -1072,7 +1085,7 @@ public class DataSetTableService {
return handleWith(plainSelect, select);
}
private String handleWith(PlainSelect plainSelect, Select select)throws Exception{
private String handleWith(PlainSelect plainSelect, Select select) throws Exception {
StringBuilder builder = new StringBuilder();
if (CollectionUtils.isNotEmpty(select.getWithItemsList())) {
builder.append("WITH");
@ -1089,6 +1102,45 @@ public class DataSetTableService {
builder.append(" " + plainSelect);
return builder.toString();
}
public Map<String, Object> getDBPreview(DataSetTableRequest dataSetTableRequest) throws Exception {
Datasource ds = datasourceMapper.selectByPrimaryKey(dataSetTableRequest.getDataSourceId());
if (ds == null) {
throw new Exception(Translator.get("i18n_invalid_ds"));
}
Provider datasourceProvider = ProviderFactory.getProvider(ds.getType());
DatasourceRequest datasourceRequest = new DatasourceRequest();
datasourceRequest.setDatasource(ds);
DataTableInfoDTO dataTableInfo = new Gson().fromJson(dataSetTableRequest.getInfo(), DataTableInfoDTO.class);
String sql = "SELECT * FROM " + dataTableInfo.getTable();
QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType());
String sqlAsTable = qp.createSQLPreview(sql, null);
datasourceRequest.setQuery(sqlAsTable);
Map<String, List> result = datasourceProvider.fetchResultAndField(datasourceRequest);
List<String[]> data = result.get("dataList");
List<TableField> fields = result.get("fieldList");
String[] fieldArray = fields.stream().map(TableField::getFieldName).toArray(String[]::new);
if (checkIsRepeat(fieldArray)) {
DataEaseException.throwException(Translator.get("i18n_excel_field_repeat"));
}
List<Map<String, Object>> jsonArray = new ArrayList<>();
if (CollectionUtils.isNotEmpty(data)) {
jsonArray = data.stream().map(ele -> {
Map<String, Object> map = new HashMap<>();
for (int i = 0; i < ele.length; i++) {
map.put(fieldArray[i], ele[i]);
}
return map;
}).collect(Collectors.toList());
}
Map<String, Object> map = new HashMap<>();
map.put("fields", fields);
map.put("data", jsonArray);
return map;
}
public Map<String, Object> getSQLPreview(DataSetTableRequest dataSetTableRequest) throws Exception {
Datasource ds = datasourceMapper.selectByPrimaryKey(dataSetTableRequest.getDataSourceId());
if (ds == null) {
@ -2090,6 +2142,31 @@ public class DataSetTableService {
}
}
private void checkNames(List<DataSetTableRequest> datasetTable) {
if (CollectionUtils.isEmpty(datasetTable)) {
return;
}
Set<String> nameSet = new HashSet<>();
for (DataSetTableRequest table : datasetTable) {
nameSet.add(table.getName());
}
if (nameSet.size() != datasetTable.size()) {
throw new RuntimeException(Translator.get("i18n_name_cant_repeat_same_group"));
}
DatasetTableExample datasetTableExample = new DatasetTableExample();
DatasetTableExample.Criteria criteria = datasetTableExample.createCriteria();
if (StringUtils.isNotEmpty(datasetTable.get(0).getSceneId())) {
criteria.andSceneIdEqualTo(datasetTable.get(0).getSceneId());
}
if (CollectionUtils.isNotEmpty(nameSet)) {
criteria.andNameIn(new ArrayList<>(nameSet));
}
List<DatasetTable> list = datasetTableMapper.selectByExample(datasetTableExample);
if (list.size() > 0) {
throw new RuntimeException(Translator.get("i18n_name_cant_repeat_same_group"));
}
}
public DataSetDetail getDatasetDetail(String id) {
DataSetDetail dataSetDetail = new DataSetDetail();
DatasetTable table = datasetTableMapper.selectByPrimaryKey(id);