diff --git a/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java b/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java index 8619bf56ff..9a357425f9 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java @@ -48,8 +48,6 @@ import io.dataease.system.dao.auto.entity.CoreSysSetting; import io.dataease.system.manage.CoreUserManage; import io.dataease.utils.*; import jakarta.annotation.Resource; -import jakarta.servlet.ServletOutputStream; -import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -57,7 +55,6 @@ import org.quartz.JobDataMap; import org.quartz.JobKey; import org.quartz.TriggerKey; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.io.ResourceLoader; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -67,8 +64,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.*; import java.lang.reflect.Method; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; + import java.util.*; import java.util.stream.Collectors; @@ -723,13 +719,6 @@ public class DatasourceServer implements DatasourceApi { datasourceRequest.setDatasource(datasourceDTO); if (coreDatasource.getType().contains(DatasourceConfiguration.DatasourceType.API.name())) { List datasetTableDTOS = (List) invokeMethod(coreDatasource.getType(), "getApiTables", DatasourceRequest.class, datasourceRequest); - datasetTableDTOS.forEach(datasetTableDTO1 -> { - CoreDatasourceTaskLog log = datasourceTaskServer.lastSyncLogForTable(datasetTableDTO.getDatasourceId(), datasetTableDTO1.getTableName()); - if (log != null) { - datasetTableDTO1.setLastUpdateTime(log.getStartTime()); - datasetTableDTO1.setStatus(log.getTaskStatus()); - } - }); return datasetTableDTOS; } if (coreDatasource.getType().contains("Excel")) { @@ -739,6 +728,33 @@ public class DatasourceServer implements DatasourceApi { return provider.getTables(datasourceRequest); } + @Override + public List getTableStatus(DatasetTableDTO datasetTableDTO) throws DEException { + CoreDatasource coreDatasource = dataSourceManage.getCoreDatasource(datasetTableDTO.getDatasourceId()); + if (coreDatasource == null) { + DEException.throwException("无效数据源!"); + } + List datasetTableDTOS = new ArrayList<>(); + DatasourceDTO datasourceDTO = new DatasourceDTO(); + BeanUtils.copyBean(datasourceDTO, coreDatasource); + DatasourceRequest datasourceRequest = new DatasourceRequest(); + datasourceRequest.setDatasource(datasourceDTO); + if (coreDatasource.getType().contains(DatasourceConfiguration.DatasourceType.API.name())) { + datasetTableDTOS = (List) invokeMethod(coreDatasource.getType(), "getApiTables", DatasourceRequest.class, datasourceRequest); + } + if (coreDatasource.getType().equalsIgnoreCase(DatasourceConfiguration.DatasourceType.ExcelRemote.name())) { + datasetTableDTOS = ExcelUtils.getTables(datasourceRequest); + } + datasetTableDTOS.forEach(datasetTableDTO1 -> { + CoreDatasourceTaskLog log = datasourceTaskServer.lastSyncLogForTable(datasetTableDTO.getDatasourceId(), datasetTableDTO1.getTableName()); + if (log != null) { + datasetTableDTO1.setLastUpdateTime(log.getStartTime()); + datasetTableDTO1.setStatus(log.getTaskStatus()); + } + }); + return datasetTableDTOS; + } + @Override public List getTableField(Map req) throws DEException { String tableName = req.get("tableName"); diff --git a/core/core-frontend/src/api/datasource.ts b/core/core-frontend/src/api/datasource.ts index a99c219a46..6c982e95a2 100644 --- a/core/core-frontend/src/api/datasource.ts +++ b/core/core-frontend/src/api/datasource.ts @@ -60,6 +60,12 @@ export const listDatasourceTables = async (data = {}): Promise => { }) } +export const getTableStatus = async (data = {}): Promise => { + return request.post({ url: '/datasource/getTableStatus', data }).then(res => { + return res + }) +} + export const getSchema = (data = {}) => { return request.post({ url: '/datasource/getSchema', data }) } diff --git a/core/core-frontend/src/views/visualized/data/datasource/index.vue b/core/core-frontend/src/views/visualized/data/datasource/index.vue index 42375c7a85..50eb6ff675 100644 --- a/core/core-frontend/src/views/visualized/data/datasource/index.vue +++ b/core/core-frontend/src/views/visualized/data/datasource/index.vue @@ -49,7 +49,8 @@ import { uploadFile, perDeleteDatasource, getSimpleDs, - supportSetKey + supportSetKey, + getTableStatus } from '@/api/datasource' import CreatDsGroup from './form/CreatDsGroup.vue' import type { Tree } from '../dataset/form/CreatDsGroup.vue' @@ -960,8 +961,29 @@ const handleClick = (tabName: TabPaneName) => { case 'table': tableData.value = [] listDatasourceTables({ datasourceId: nodeInfo.id }).then(res => { + console.log(nodeInfo) tableData.value = res.data initSearch() + if (nodeInfo.type.startsWith('API') || nodeInfo.type === 'ExcelRemote') { + getTableStatus({ datasourceId: nodeInfo.id }).then(res => { + for (let i = 0; i < state.filterTable.length; i++) { + for (let j = 0; j < res.data.length; j++) { + if (state.filterTable[i].tableName === res.data[j].tableName) { + state.filterTable[i].lastUpdateTime = res.data[j].lastUpdateTime + state.filterTable[i].status = res.data[j].status + } + } + } + for (let i = 0; i < tableData.value.length; i++) { + for (let j = 0; j < res.data.length; j++) { + if (tableData.value[i].tableName === res.data[j].tableName) { + tableData.value[i].lastUpdateTime = res.data[j].lastUpdateTime + tableData.value[i].status = res.data[j].status + } + } + } + }) + } }) break default: diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/ds/DatasourceApi.java b/sdk/api/api-base/src/main/java/io/dataease/api/ds/DatasourceApi.java index dd22ae2641..686c905c00 100644 --- a/sdk/api/api-base/src/main/java/io/dataease/api/ds/DatasourceApi.java +++ b/sdk/api/api-base/src/main/java/io/dataease/api/ds/DatasourceApi.java @@ -127,6 +127,11 @@ public interface DatasourceApi { @Operation(summary = "获取表") List getTables(@RequestBody DatasetTableDTO datasetTableDTO) throws DEException; + @DePermit({"#p0.datasourceId+':read'"}) + @PostMapping("getTableStatus") + @Operation(summary = "获取数据表更新状态") + List getTableStatus(@RequestBody DatasetTableDTO datasetTableDTO) throws DEException; + @PostMapping("/checkApiDatasource") @Operation(summary = "校验API数据源") ApiDefinition checkApiDatasource(@RequestBody Map data) throws DEException;