diff --git a/core/backend/src/main/java/io/dataease/ext/ExtDataSetTaskMapper.xml b/core/backend/src/main/java/io/dataease/ext/ExtDataSetTaskMapper.xml index 3accb94e70..57090a03ad 100644 --- a/core/backend/src/main/java/io/dataease/ext/ExtDataSetTaskMapper.xml +++ b/core/backend/src/main/java/io/dataease/ext/ExtDataSetTaskMapper.xml @@ -87,7 +87,7 @@ qrtz_triggers.NEXT_FIRE_TIME FROM dataset_table_task left join dataset_table on dataset_table.id=dataset_table_task.table_id - left join qrtz_triggers on dataset_table_task.id=qrtz_triggers.TRIGGER_NAME + left join qrtz_triggers on dataset_table_task.id=qrtz_triggers.TRIGGER_NAME and qrtz_triggers.TRIGGER_STATE != 'PAUSED' where 1=1 and dataset_table_task.rate in @@ -122,7 +122,18 @@ and dataset_table_task.name like concat('%', #{keyword}, '%') - order by dataset_table_task.create_time desc + + + order by + + ${item} + + + + order by dataset_table_task.create_time desc + + + diff --git a/core/backend/src/main/java/io/dataease/job/sechedule/ScheduleManager.java b/core/backend/src/main/java/io/dataease/job/sechedule/ScheduleManager.java index 0a8a24758a..66506835ed 100644 --- a/core/backend/src/main/java/io/dataease/job/sechedule/ScheduleManager.java +++ b/core/backend/src/main/java/io/dataease/job/sechedule/ScheduleManager.java @@ -425,4 +425,12 @@ public class ScheduleManager { scheduler.triggerJob(jobKey); } + public void pauseTrigger(TriggerKey triggerKey) throws SchedulerException { + scheduler.pauseTrigger(triggerKey); + } + + public void resumeTrigger(TriggerKey triggerKey) throws SchedulerException { + scheduler.resumeTrigger(triggerKey); + } + } diff --git a/core/backend/src/main/java/io/dataease/listener/AppStartListener.java b/core/backend/src/main/java/io/dataease/listener/AppStartListener.java index b064228641..bf37b7d11d 100644 --- a/core/backend/src/main/java/io/dataease/listener/AppStartListener.java +++ b/core/backend/src/main/java/io/dataease/listener/AppStartListener.java @@ -1,5 +1,6 @@ package io.dataease.listener; +import io.dataease.commons.constants.TaskStatus; import io.dataease.commons.utils.LogUtil; import io.dataease.dto.dataset.DataSetTaskDTO; import io.dataease.plugins.common.base.domain.DatasetTableTask; @@ -42,6 +43,9 @@ public class AppStartListener implements ApplicationListener xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view, PageInfo pageInfo) { + String limit = ((pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) ? " LIMIT " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + "," + pageInfo.getPageSize() : ""); if (isTable) { - return getSQLTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view); + return originalTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view, true) + limit; } else { - return getSQLAsTmpTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view); + return originalTableInfo("(" + sqlFix(sql) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view, true) + limit; } } - public String getResultCount(boolean isTable, String sql, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) { - return null; - } - @Override public String createRawQuerySQL(String table, List fields, Datasource ds) { String[] array = fields.stream().map(f -> { @@ -49,6 +46,6 @@ public class DorisQueryProvider extends MysqlQueryProvider { } public String getTotalCount(boolean isTable, String sql, Datasource ds) { - return null; + return null; } } diff --git a/core/backend/src/main/java/io/dataease/provider/query/impala/ImpalaQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/impala/ImpalaQueryProvider.java index a008acb38b..160220fcdb 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/impala/ImpalaQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/impala/ImpalaQueryProvider.java @@ -20,6 +20,7 @@ import io.dataease.plugins.common.request.chart.ChartExtFilterRequest; import io.dataease.plugins.common.request.permission.DataSetRowPermissionsTreeDTO; import io.dataease.plugins.common.request.permission.DatasetRowPermissionsTreeItem; import io.dataease.plugins.datasource.entity.Dateformat; +import io.dataease.plugins.datasource.entity.PageInfo; import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.Utils; import org.apache.commons.collections4.CollectionUtils; @@ -151,7 +152,7 @@ public class ImpalaQueryProvider extends QueryProvider { if (customWheres != null) wheres.add(customWheres); if (whereTrees != null) wheres.add(whereTrees); if (StringUtils.isNotBlank(keyword)) { - String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")"; + String keyWhere = "(" + transKeywordFilterList(tableObj, xFields, keyword) + ")"; wheres.add(keyWhere); } if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); @@ -412,6 +413,13 @@ public class ImpalaQueryProvider extends QueryProvider { // 外层再次套sql List orders = new ArrayList<>(); orders.addAll(xOrders); + if (CollectionUtils.isEmpty(xOrders)) { + orders.add(SQLObj.builder() + .orderField(String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, 0)) + .orderAlias(String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, 0)) + .orderDirection("ASC") + .build()); + } STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); ST st_sql = stg.getInstanceOf("previewSql"); @@ -432,6 +440,16 @@ public class ImpalaQueryProvider extends QueryProvider { return st.render(); } + @Override + public String getSQLWithPage(boolean isTable, String sql, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view, PageInfo pageInfo) { + String limit = ((pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) ? " LIMIT " + pageInfo.getPageSize() + " OFFSET " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() : ""); + if (isTable) { + return originalTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + limit; + } else { + return originalTableInfo("(" + sqlFix(sql) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + limit; + } + } + @Override public String getSQLTableInfo(String table, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) { return sqlLimit(originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view), view); @@ -1375,8 +1393,4 @@ public class ImpalaQueryProvider extends QueryProvider { "{\"dateformat\": \"yyyyMMdd HH:mm:ss\"}\n" + "]", Dateformat.class); } - - public String getResultCount(boolean isTable, String sql, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) { - return null; - } } diff --git a/core/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java index 3b5c414b6d..5d207eb45d 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java @@ -411,20 +411,20 @@ public class MysqlQueryProvider extends QueryProvider { @Override public String getSQLTableInfo(String table, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) { - return sqlLimit(originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view), view); + return sqlLimit(originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view, false), view); } @Override public String getSQLWithPage(boolean isTable, String table, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view, PageInfo pageInfo) { String limit = ((pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) ? " LIMIT " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + "," + pageInfo.getPageSize() : ""); if (isTable) { - return originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + limit; + return originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view, false) + limit; } else { - return originalTableInfo("(" + sqlFix(table) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + limit; + return originalTableInfo("(" + sqlFix(table) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view, false) + limit; } } - private String originalTableInfo(String table, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) { + public String originalTableInfo(String table, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view, boolean needOrder) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(MySQLConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -478,6 +478,13 @@ public class MysqlQueryProvider extends QueryProvider { // 外层再次套sql List orders = new ArrayList<>(); orders.addAll(xOrders); + if (needOrder && CollectionUtils.isEmpty(xOrders)) { + orders.add(SQLObj.builder() + .orderField(String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, 0)) + .orderAlias(String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, 0)) + .orderDirection("ASC") + .build()); + } STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); ST st_sql = stg.getInstanceOf("previewSql"); @@ -1210,7 +1217,7 @@ public class MysqlQueryProvider extends QueryProvider { return CollectionUtils.isNotEmpty(list) ? "(" + String.join(" AND ", strList) + ")" : null; } - private String sqlFix(String sql) { + public String sqlFix(String sql) { sql = sql.trim(); if (sql.lastIndexOf(";") == (sql.length() - 1)) { sql = sql.substring(0, sql.length() - 1); diff --git a/core/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java index d5efe0bdd4..70e238f52f 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java @@ -22,6 +22,7 @@ import io.dataease.plugins.common.request.permission.DataSetRowPermissionsTreeDT import io.dataease.plugins.common.request.permission.DatasetRowPermissionsTreeItem; import io.dataease.plugins.datasource.entity.Dateformat; import io.dataease.plugins.datasource.entity.JdbcConfiguration; +import io.dataease.plugins.datasource.entity.PageInfo; import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.Utils; import org.apache.commons.collections4.CollectionUtils; @@ -433,6 +434,10 @@ public class SqlserverQueryProvider extends QueryProvider { @Override public String getSQLTableInfo(String table, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) { + return originTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view, true); + } + + public String originTableInfo(String table, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view, boolean needOrder) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(SqlServerSQLConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -487,6 +492,13 @@ public class SqlserverQueryProvider extends QueryProvider { // 外层再次套sql List orders = new ArrayList<>(); orders.addAll(xOrders); + if (needOrder && CollectionUtils.isEmpty(xOrders)) { + orders.add(SQLObj.builder() + .orderField(String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, 0)) + .orderAlias(String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, 0)) + .orderDirection("ASC") + .build()); + } STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); ST st_sql = stg.getInstanceOf("previewSql"); @@ -511,6 +523,20 @@ public class SqlserverQueryProvider extends QueryProvider { return st.render(); } + public String originSQLAsTmpTableInfo(String sql, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view, boolean needOrder) { + return originTableInfo("(" + sqlFix(sql) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, null, view, needOrder); + } + + @Override + public String getSQLWithPage(boolean isTable, String sql, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view, PageInfo pageInfo) { + String limit = ((pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) ? " OFFSET " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + " ROW FETCH NEXT " + pageInfo.getPageSize() + " ROW ONLY " : ""); + if (isTable) { + return getSQLTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + limit; + } else { + return getSQLTableInfo("(" + sqlFix(sql) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + limit; + } + } + @Override public String getSQLAsTmpTableInfo(String sql, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) { return getSQLTableInfo("(" + sqlFix(sql) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, null, view); @@ -1515,7 +1541,12 @@ public class SqlserverQueryProvider extends QueryProvider { "]", Dateformat.class); } + @Override public String getResultCount(boolean isTable, String sql, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) { - return null; + if (isTable) { + return "SELECT COUNT(*) AS count from (" + originTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view, false) + ") COUNT_TEMP"; + } else { + return "SELECT COUNT(*) AS count from (" + originSQLAsTmpTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view, false) + ") COUNT_TEMP"; + } } } diff --git a/core/backend/src/main/java/io/dataease/service/ScheduleService.java b/core/backend/src/main/java/io/dataease/service/ScheduleService.java index d3ad79ede5..37aa95ed76 100644 --- a/core/backend/src/main/java/io/dataease/service/ScheduleService.java +++ b/core/backend/src/main/java/io/dataease/service/ScheduleService.java @@ -9,6 +9,7 @@ import io.dataease.plugins.common.base.domain.DatasetTableTask; import io.dataease.plugins.common.entity.GlobalTaskEntity; import org.apache.commons.lang3.StringUtils; import org.quartz.JobKey; +import org.quartz.SchedulerException; import org.quartz.TriggerKey; import org.springframework.stereotype.Service; @@ -83,5 +84,14 @@ public class ScheduleService { taskHandler.executeTask(scheduleManager, task); } + public void pauseTrigger(DatasetTableTask datasetTableTask) throws SchedulerException { + TriggerKey triggerKey = new TriggerKey(datasetTableTask.getId(), datasetTableTask.getTableId()); + scheduleManager.pauseTrigger(triggerKey); + } + + public void resumeTrigger(DatasetTableTask datasetTableTask) throws SchedulerException { + TriggerKey triggerKey = new TriggerKey(datasetTableTask.getId(), datasetTableTask.getTableId()); + scheduleManager.resumeTrigger(triggerKey); + } } diff --git a/core/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskService.java b/core/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskService.java index 19e1d3b818..9231546ab4 100644 --- a/core/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskService.java +++ b/core/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskService.java @@ -11,6 +11,7 @@ import io.dataease.dto.dataset.DataSetTaskDTO; import io.dataease.exception.DataEaseException; import io.dataease.ext.ExtDataSetTaskMapper; import io.dataease.i18n.Translator; +import io.dataease.job.sechedule.ScheduleManager; import io.dataease.plugins.common.base.domain.*; import io.dataease.plugins.common.base.mapper.DatasetTableMapper; import io.dataease.plugins.common.base.mapper.DatasetTableTaskMapper; @@ -265,6 +266,8 @@ public class DataSetTableTaskService { public List taskList4User(DatasetTaskGridRequest request) { request.setUserId(null); + request.getOrders().add(0, "dataset_table_task.status desc"); + request.getOrders().replaceAll(t -> t.replace("next_exec_time", "NEXT_FIRE_TIME")); if (AuthUtils.getUser().getIsAdmin()) { return extDataSetTaskMapper.taskList(request); } else { @@ -309,6 +312,13 @@ public class DataSetTableTaskService { DatasetTableTask record = new DatasetTableTask(); record.setStatus(datasetTableTask.getStatus()); datasetTableTaskMapper.updateByExampleSelective(record, datasetTableTaskExample); + + if(datasetTableTask.getStatus().equalsIgnoreCase(TaskStatus.Pending.name())){ + scheduleService.pauseTrigger(datasetTableTask); + } + if(datasetTableTask.getStatus().equalsIgnoreCase(TaskStatus.Underway.name())){ + scheduleService.resumeTrigger(datasetTableTask); + } } public void execTask(DatasetTableTask datasetTableTask) throws Exception { diff --git a/core/backend/src/main/resources/db/migration/V59__1.18.14.sql b/core/backend/src/main/resources/db/migration/V59__1.18.14.sql new file mode 100644 index 0000000000..226ae94e9b --- /dev/null +++ b/core/backend/src/main/resources/db/migration/V59__1.18.14.sql @@ -0,0 +1 @@ +UPDATE `sys_user` set `enabled` = 0 where `user_id` = 2; \ No newline at end of file diff --git a/core/frontend/src/components/canvas/components/editor/SettingMenu.vue b/core/frontend/src/components/canvas/components/editor/SettingMenu.vue index 2b7a96923f..38f3d5d792 100644 --- a/core/frontend/src/components/canvas/components/editor/SettingMenu.vue +++ b/core/frontend/src/components/canvas/components/editor/SettingMenu.vue @@ -240,6 +240,9 @@ export default { } }, methods: { + styleChange() { + this.$store.commit('canvasChange') + }, openCustomSort() { this.showCustomSort = true }, @@ -251,6 +254,7 @@ export default { this.$nextTick(() => { this.showCustomSort = false }) + this.styleChange() }, positionAdjust() { bus.$emit('change_panel_right_draw', true) diff --git a/core/frontend/src/components/widget/deWidget/TabStyle.vue b/core/frontend/src/components/widget/deWidget/TabStyle.vue index 730c9f8619..db1e25ce23 100644 --- a/core/frontend/src/components/widget/deWidget/TabStyle.vue +++ b/core/frontend/src/components/widget/deWidget/TabStyle.vue @@ -14,7 +14,7 @@ label="选项卡标题" prop="titleShow" > - 隐藏 + 隐藏