fix: 修复系统变量显示问题

This commit is contained in:
taojinlong 2024-06-03 19:24:31 +08:00
parent 16d59975f9
commit ca3e8aaea7
14 changed files with 140 additions and 18 deletions

View File

@ -117,9 +117,9 @@ public class CalciteProvider {
tableDesc.setDatasourceId(datasourceRequest.getDatasource().getId()); tableDesc.setDatasourceId(datasourceRequest.getDatasource().getId());
tableDesc.setType("db"); tableDesc.setType("db");
tableDesc.setTableName(resultSet.getString(1)); tableDesc.setTableName(resultSet.getString(1));
if(resultSet.getMetaData().getColumnCount() > 1){ if (resultSet.getMetaData().getColumnCount() > 1) {
tableDesc.setName(resultSet.getString(2)); tableDesc.setName(resultSet.getString(2));
}else { } else {
tableDesc.setName(resultSet.getString(1)); tableDesc.setName(resultSet.getString(1));
} }
return tableDesc; return tableDesc;
@ -316,10 +316,40 @@ public class CalciteProvider {
return list; return list;
} }
public void hidePW(DatasourceDTO datasourceDTO) {
DatasourceConfiguration configuration = null;
DatasourceType datasourceType = DatasourceType.valueOf(datasourceDTO.getType());
switch (datasourceType) {
case mysql:
case mongo:
case mariadb:
case TiDB:
case StarRocks:
case doris:
configuration = JsonUtil.parseObject(datasourceDTO.getConfiguration(), Mysql.class);
if (StringUtils.isNotEmpty(configuration.getUrlType()) && configuration.getUrlType().equalsIgnoreCase("jdbcUrl")) {
if (configuration.getJdbcUrl().contains("password=")) {
String[] params = configuration.getJdbcUrl().split("\\?")[1].split("&");
String pd = "";
for (int i = 0; i < params.length; i++) {
if (params[i].contains("password=")) {
pd = params[i];
}
}
configuration.setJdbcUrl(configuration.getJdbcUrl().replace(pd, "password=******"));
datasourceDTO.setConfiguration(JsonUtil.toJSONString(configuration).toString());
}
}
break;
default:
break;
}
}
private String getTableFiledSql(DatasourceRequest datasourceRequest) { private String getTableFiledSql(DatasourceRequest datasourceRequest) {
String sql = ""; String sql = "";
DatasourceConfiguration configuration = null; DatasourceConfiguration configuration = null;
String database=""; String database = "";
DatasourceType datasourceType = DatasourceType.valueOf(datasourceRequest.getDatasource().getType()); DatasourceType datasourceType = DatasourceType.valueOf(datasourceRequest.getDatasource().getType());
switch (datasourceType) { switch (datasourceType) {
case mysql: case mysql:
@ -440,7 +470,8 @@ public class CalciteProvider {
return sql; return sql;
} }
private TableField getTableFieldDesc(DatasourceRequest datasourceRequest, ResultSet resultSet) throws SQLException { private TableField getTableFieldDesc(DatasourceRequest datasourceRequest, ResultSet resultSet) throws
SQLException {
TableField tableField = new TableField(); TableField tableField = new TableField();
tableField.setOriginName(resultSet.getString(1)); tableField.setOriginName(resultSet.getString(1));
tableField.setType(resultSet.getString(2).toUpperCase()); tableField.setType(resultSet.getString(2).toUpperCase());
@ -809,7 +840,7 @@ public class CalciteProvider {
" AND ep.class = 1 \n" + " AND ep.class = 1 \n" +
" AND ep.name = 'MS_Description'\n" + " AND ep.name = 'MS_Description'\n" +
"where sc.name ='DS_SCHEMA'" "where sc.name ='DS_SCHEMA'"
.replace("DS_SCHEMA", configuration.getSchema())); .replace("DS_SCHEMA", configuration.getSchema()));
tableSqls.add("SELECT \n" + tableSqls.add("SELECT \n" +
" t.name AS TableName, \n" + " t.name AS TableName, \n" +
" ep.value AS TableDescription \n" + " ep.value AS TableDescription \n" +

View File

@ -488,12 +488,20 @@ public class DatasourceServer implements DatasourceApi {
return calciteProvider.getSchema(datasourceRequest); return calciteProvider.getSchema(datasourceRequest);
} }
@Override
public DatasourceDTO hidePw(Long datasourceId) throws DEException {
return getDatasourceDTOById(datasourceId, true);
}
@Override @Override
public DatasourceDTO get(Long datasourceId) throws DEException { public DatasourceDTO get(Long datasourceId) throws DEException {
return getDatasourceDTOById(datasourceId, false);
}
private DatasourceDTO getDatasourceDTOById(Long datasourceId, boolean hidePw) throws DEException {
DatasourceDTO datasourceDTO = new DatasourceDTO(); DatasourceDTO datasourceDTO = new DatasourceDTO();
CoreDatasource datasource = datasourceMapper.selectById(datasourceId); CoreDatasource datasource = datasourceMapper.selectById(datasourceId);
if(datasource == null){ if (datasource == null) {
DEException.throwException("不存在的数据源!"); DEException.throwException("不存在的数据源!");
} }
BeanUtils.copyBean(datasourceDTO, datasource); BeanUtils.copyBean(datasourceDTO, datasource);
@ -547,15 +555,18 @@ public class DatasourceServer implements DatasourceApi {
if (task != null) { if (task != null) {
datasourceDTO.setLastSyncTime(task.getStartTime()); datasourceDTO.setLastSyncTime(task.getStartTime());
} }
} else {
if (hidePw) {
calciteProvider.hidePW(datasourceDTO);
}
} }
if (datasourceDTO.getType().equalsIgnoreCase(DatasourceConfiguration.DatasourceType.Excel.toString())) { if (datasourceDTO.getType().equalsIgnoreCase(DatasourceConfiguration.DatasourceType.Excel.toString())) {
datasourceDTO.setFileName(ExcelUtils.getFileName(datasource)); datasourceDTO.setFileName(ExcelUtils.getFileName(datasource));
datasourceDTO.setSize(ExcelUtils.getSize(datasource)); datasourceDTO.setSize(ExcelUtils.getSize(datasource));
} }
datasourceDTO.setConfiguration(new String(Base64.getEncoder().encode(datasourceDTO.getConfiguration().getBytes()))); datasourceDTO.setConfiguration(new String(Base64.getEncoder().encode(datasourceDTO.getConfiguration().getBytes())));
datasourceDTO.setCreator(coreUserManage.getUserName(Long.valueOf(datasourceDTO.getCreateBy()))); datasourceDTO.setCreator(coreUserManage.getUserName(Long.valueOf(datasourceDTO.getCreateBy())));
return datasourceDTO; return datasourceDTO;
} }
@ -750,7 +761,7 @@ public class DatasourceServer implements DatasourceApi {
datasourceRequest.setDsList(Map.of(datasourceSchemaDTO.getId(), datasourceSchemaDTO)); datasourceRequest.setDsList(Map.of(datasourceSchemaDTO.getId(), datasourceSchemaDTO));
datasourceRequest.setQuery(TableUtils.tableName2Sql(datasourceSchemaDTO, tableName) + " LIMIT 0 OFFSET 0"); datasourceRequest.setQuery(TableUtils.tableName2Sql(datasourceSchemaDTO, tableName) + " LIMIT 0 OFFSET 0");
datasourceRequest.setTable(tableName); datasourceRequest.setTable(tableName);
List<TableField> tableFields = (List<TableField>) calciteProvider.fetchTableField(datasourceRequest) ; List<TableField> tableFields = (List<TableField>) calciteProvider.fetchTableField(datasourceRequest);
return tableFields.stream().filter(tableField -> { return tableFields.stream().filter(tableField -> {
return !tableField.getOriginName().equalsIgnoreCase("dataease_uuid"); return !tableField.getOriginName().equalsIgnoreCase("dataease_uuid");
}).collect(Collectors.toList()); }).collect(Collectors.toList());

View File

@ -183,12 +183,21 @@ public class ExportCenterManage {
if (status.equalsIgnoreCase(exportTaskDTO.getExportStatus())) { if (status.equalsIgnoreCase(exportTaskDTO.getExportStatus())) {
setExportFromAbsName(exportTaskDTO); setExportFromAbsName(exportTaskDTO);
} }
if (status.equalsIgnoreCase(exportTaskDTO.getExportStatus())) {
setOrgName(exportTaskDTO);
}
result.add(exportTaskDTO); result.add(exportTaskDTO);
}); });
return result; return result;
} }
private void setOrgName(ExportTaskDTO exportTaskDTO) {
if (exportTaskDTO.getExportFromType().equalsIgnoreCase("chart")) {
exportTaskDTO.setOrgName(dataVisualizationServer.getAbsPath(exportTaskDTO.getExportFrom()));
}
}
private void setExportFromAbsName(ExportTaskDTO exportTaskDTO) { private void setExportFromAbsName(ExportTaskDTO exportTaskDTO) {
if (exportTaskDTO.getExportFromType().equalsIgnoreCase("chart")) { if (exportTaskDTO.getExportFromType().equalsIgnoreCase("chart")) {
exportTaskDTO.setExportFromName(dataVisualizationServer.getAbsPath(exportTaskDTO.getExportFrom())); exportTaskDTO.setExportFromName(dataVisualizationServer.getAbsPath(exportTaskDTO.getExportFrom()));

View File

@ -10,9 +10,9 @@ import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; import org.quartz.JobExecutionException;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@Component @Component
public class CheckDsStatusJob implements Job { public class CheckDsStatusJob implements Job {
@Resource @Resource
private DatasourceServer datasourceServer; private DatasourceServer datasourceServer;

View File

@ -13,3 +13,24 @@ CREATE TABLE `core_sys_startup_job`
BEGIN; BEGIN;
INSERT INTO `core_sys_startup_job` VALUES ('chartFilterMerge', 'chartFilterMerge', 'ready'); INSERT INTO `core_sys_startup_job` VALUES ('chartFilterMerge', 'chartFilterMerge', 'ready');
COMMIT; COMMIT;
DROP TABLE IF EXISTS "core_export_task";
CREATE TABLE "core_export_task"
(
"id" VARCHAR(255) NOT NULL,
"user_id" BIGINT(20) NOT NULL,
"file_name" VARCHAR(2048) DEFAULT NULL,
"file_size" DOUBLE DEFAULT NULL,
"file_size_unit" VARCHAR(255) DEFAULT NULL,
"export_from" VARCHAR(255) DEFAULT NULL,
"export_status" VARCHAR(255) DEFAULT NULL,
"export_from_type" VARCHAR(255) DEFAULT NULL,
"export_time" BIGINT(20) DEFAULT NULL,
"export_progress" VARCHAR(255) DEFAULT NULL,
"export_machine_name" VARCHAR(512) DEFAULT NULL,
"params" CLOB NOT NULL COMMENT '过滤参数',
PRIMARY KEY ("id")
) COMMENT='导出任务表';
UPDATE `QRTZ_JOB_DETAILS` SET `JOB_CLASS_NAME` = 'io.dataease.job.schedule.CheckDsStatusJob' WHERE (`SCHED_NAME` = 'deSyncJob') and (`JOB_NAME` = 'Datasource') and (`JOB_GROUP` = 'check_status');

View File

@ -52,3 +52,6 @@ CREATE TABLE `xpack_platform_token`
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
); );
UPDATE `QRTZ_JOB_DETAILS` SET `JOB_CLASS_NAME` = 'io.dataease.job.schedule.CheckDsStatusJob' WHERE (`SCHED_NAME` = 'deSyncJob') and (`JOB_NAME` = 'Datasource') and (`JOB_GROUP` = 'check_status');

View File

@ -147,6 +147,8 @@ export const deleteById = (id: number) => request.get({ url: '/datasource/delete
export const getById = (id: number) => request.get({ url: '/datasource/get/' + id }) export const getById = (id: number) => request.get({ url: '/datasource/get/' + id })
export const getHidePwById = (id: number) => request.get({ url: '/datasource/hidePw/' + id })
export const uploadFile = async (data): Promise<IResponse> => { export const uploadFile = async (data): Promise<IResponse> => {
return request return request
.post({ .post({

View File

@ -204,8 +204,8 @@ const downloadViewDetails = () => {
exportLoading.value = true exportLoading.value = true
exportExcelDownload(chart, () => { exportExcelDownload(chart, () => {
openMessageLoading(exportData) openMessageLoading(exportData)
exportLoading.value = false
}) })
exportLoading.value = false
} }
const exportData = () => { const exportData = () => {

View File

@ -475,7 +475,6 @@ export const exportExcelDownload = (chart, callBack?) => {
document.body.appendChild(link) document.body.appendChild(link)
link.click() link.click()
document.body.removeChild(link) document.body.removeChild(link)
callBack('success')
} else { } else {
callBack && callBack(res) callBack && callBack(res)
} }

View File

@ -65,8 +65,6 @@ const handleClick = tab => {
} else { } else {
description.value = t('data_export.no_task') description.value = t('data_export.no_task')
} }
tableData.value = []
drawerLoading.value = true drawerLoading.value = true
exportTasks(activeName.value) exportTasks(activeName.value)
.then(res => { .then(res => {
@ -192,6 +190,7 @@ const callbackExport = () => {
const downLoadAll = () => { const downLoadAll = () => {
if (multipleSelection.value.length === 0) { if (multipleSelection.value.length === 0) {
tableData.value.forEach(item => { tableData.value.forEach(item => {
console.log(item.id)
downloadFile(item.id) downloadFile(item.id)
.then(res => { .then(res => {
const blob = new Blob([res], { type: 'application/vnd.ms-excel' }) const blob = new Blob([res], { type: 'application/vnd.ms-excel' })

View File

@ -8,7 +8,7 @@ import ArrowSide from '@/views/common/DeResourceArrow.vue'
import { HandleMore } from '@/components/handle-more' import { HandleMore } from '@/components/handle-more'
import { Icon } from '@/components/icon-custom' import { Icon } from '@/components/icon-custom'
import { fieldType } from '@/utils/attr' import { fieldType } from '@/utils/attr'
import { listSyncRecord, uploadFile } from '@/api/datasource' import { getHidePwById, listSyncRecord, uploadFile } from '@/api/datasource'
import CreatDsGroup from './form/CreatDsGroup.vue' import CreatDsGroup from './form/CreatDsGroup.vue'
import type { Tree } from '../dataset/form/CreatDsGroup.vue' import type { Tree } from '../dataset/form/CreatDsGroup.vue'
import { previewData, getById } from '@/api/datasource' import { previewData, getById } from '@/api/datasource'
@ -455,7 +455,7 @@ const handleNodeClick = data => {
dsListTree.value.setCurrentKey(null) dsListTree.value.setCurrentKey(null)
return return
} }
return getById(data.id).then(res => { return getHidePwById(data.id).then(res => {
let { let {
name, name,
createBy, createBy,
@ -571,7 +571,48 @@ const editDatasource = (editType?: number) => {
if (nodeInfo.type === 'Excel') { if (nodeInfo.type === 'Excel') {
nodeInfo.editType = editType nodeInfo.editType = editType
} }
datasourceEditor.value.init(nodeInfo) return getById(nodeInfo.id).then(res => {
let {
name,
createBy,
id,
createTime,
creator,
type,
pid,
configuration,
syncSetting,
apiConfigurationStr,
fileName,
size,
description,
lastSyncTime
} = res.data
if (configuration) {
configuration = JSON.parse(Base64.decode(configuration))
}
if (apiConfigurationStr) {
apiConfigurationStr = JSON.parse(Base64.decode(apiConfigurationStr))
}
let datasource = reactive<Node>(cloneDeep(defaultInfo))
Object.assign(datasource, {
name,
pid,
description,
fileName,
size,
createTime,
creator,
createBy,
id,
type,
configuration,
syncSetting,
apiConfiguration: apiConfigurationStr,
lastSyncTime
})
datasourceEditor.value.init(datasource)
})
} }
const handleEdit = async data => { const handleEdit = async data => {

View File

@ -71,6 +71,11 @@ public interface DatasourceApi {
@GetMapping("/get/{datasourceId}") @GetMapping("/get/{datasourceId}")
DatasourceDTO get(@PathVariable("datasourceId") Long datasourceId) throws DEException; DatasourceDTO get(@PathVariable("datasourceId") Long datasourceId) throws DEException;
@DePermit({"#p0+':read'"})
@GetMapping("/hidePw/{datasourceId}")
DatasourceDTO hidePw(@PathVariable("datasourceId") Long datasourceId) throws DEException;
@PostMapping("/getTableField") @PostMapping("/getTableField")
List<TableField> getTableField(@RequestBody Map<String, String> req) throws DEException; List<TableField> getTableField(@RequestBody Map<String, String> req) throws DEException;

View File

@ -30,4 +30,6 @@ public class ExportTaskDTO {
private String exportMachineName; private String exportMachineName;
private String exportFromName; private String exportFromName;
private String orgName;
} }

View File

@ -8,7 +8,6 @@ import java.util.List;
@Data @Data
public class SysVariableValueItem { public class SysVariableValueItem {
@JsonSerialize(using = ToStringSerializer.class)
private String variableValue; private String variableValue;
@JsonSerialize(using = ToStringSerializer.class) @JsonSerialize(using = ToStringSerializer.class)
private String variableValue2; private String variableValue2;