From 3707ca5adb6bf68c2c9d521b5a94d5f0cac424a9 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Thu, 8 Jul 2021 09:14:55 +0800 Subject: [PATCH 1/8] =?UTF-8?q?feat(=E5=9B=BD=E9=99=85=E5=8C=96):=20?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/domain/DatasetTableTask.java | 6 + .../base/domain/DatasetTableTaskExample.java | 200 ++++++++++++++++++ .../base/domain/DatasetTableTaskLog.java | 2 + .../domain/DatasetTableTaskLogExample.java | 70 ++++++ .../base/mapper/DatasetTableTaskLogMapper.xml | 29 ++- .../base/mapper/DatasetTableTaskMapper.xml | 58 ++++- .../base/mapper/ext/ExtDataSetTableMapper.xml | 3 + .../base/mapper/ext/ExtDataSetTaskMapper.java | 6 +- .../base/mapper/ext/ExtDataSetTaskMapper.xml | 37 +++- .../commons/constants/ScheduleType.java | 2 +- .../dataset/DataSetTableTaskController.java | 35 +++ .../DataSetTableTaskLogController.java | 3 +- .../job/sechedule/ScheduleManager.java | 6 + .../dataease/listener/AppStartListener.java | 6 +- .../io/dataease/service/ScheduleService.java | 7 +- .../service/dataset/DataSetTableService.java | 7 +- .../dataset/DataSetTableTaskLogService.java | 40 +++- .../dataset/DataSetTableTaskService.java | 102 +++++++-- .../service/dataset/ExtractDataService.java | 39 ++-- .../src/main/resources/generatorConfig.xml | 2 +- frontend/src/api/dataset/dataset.js | 17 ++ frontend/src/lang/zh.js | 18 +- frontend/src/utils/webMsg.js | 3 - frontend/src/views/chart/group/Group.vue | 44 ---- .../src/views/chart/view/TableSelector.vue | 20 +- .../common/DatasetGroupSelectorTree.vue | 26 +-- .../src/views/dataset/data/UpdateInfo.vue | 4 +- frontend/src/views/system/user/index.vue | 1 - 28 files changed, 655 insertions(+), 138 deletions(-) diff --git a/backend/src/main/java/io/dataease/base/domain/DatasetTableTask.java b/backend/src/main/java/io/dataease/base/domain/DatasetTableTask.java index c6171d0de6..46da2b5eeb 100644 --- a/backend/src/main/java/io/dataease/base/domain/DatasetTableTask.java +++ b/backend/src/main/java/io/dataease/base/domain/DatasetTableTask.java @@ -25,5 +25,11 @@ public class DatasetTableTask implements Serializable { private Long createTime; + private Long lastExecTime; + + private String status; + + private String lastExecStatus; + private static final long serialVersionUID = 1L; } \ No newline at end of file diff --git a/backend/src/main/java/io/dataease/base/domain/DatasetTableTaskExample.java b/backend/src/main/java/io/dataease/base/domain/DatasetTableTaskExample.java index 531cdce844..801373393a 100644 --- a/backend/src/main/java/io/dataease/base/domain/DatasetTableTaskExample.java +++ b/backend/src/main/java/io/dataease/base/domain/DatasetTableTaskExample.java @@ -773,6 +773,206 @@ public class DatasetTableTaskExample { addCriterion("create_time not between", value1, value2, "createTime"); return (Criteria) this; } + + public Criteria andLastExecTimeIsNull() { + addCriterion("last_exec_time is null"); + return (Criteria) this; + } + + public Criteria andLastExecTimeIsNotNull() { + addCriterion("last_exec_time is not null"); + return (Criteria) this; + } + + public Criteria andLastExecTimeEqualTo(Long value) { + addCriterion("last_exec_time =", value, "lastExecTime"); + return (Criteria) this; + } + + public Criteria andLastExecTimeNotEqualTo(Long value) { + addCriterion("last_exec_time <>", value, "lastExecTime"); + return (Criteria) this; + } + + public Criteria andLastExecTimeGreaterThan(Long value) { + addCriterion("last_exec_time >", value, "lastExecTime"); + return (Criteria) this; + } + + public Criteria andLastExecTimeGreaterThanOrEqualTo(Long value) { + addCriterion("last_exec_time >=", value, "lastExecTime"); + return (Criteria) this; + } + + public Criteria andLastExecTimeLessThan(Long value) { + addCriterion("last_exec_time <", value, "lastExecTime"); + return (Criteria) this; + } + + public Criteria andLastExecTimeLessThanOrEqualTo(Long value) { + addCriterion("last_exec_time <=", value, "lastExecTime"); + return (Criteria) this; + } + + public Criteria andLastExecTimeIn(List values) { + addCriterion("last_exec_time in", values, "lastExecTime"); + return (Criteria) this; + } + + public Criteria andLastExecTimeNotIn(List values) { + addCriterion("last_exec_time not in", values, "lastExecTime"); + return (Criteria) this; + } + + public Criteria andLastExecTimeBetween(Long value1, Long value2) { + addCriterion("last_exec_time between", value1, value2, "lastExecTime"); + return (Criteria) this; + } + + public Criteria andLastExecTimeNotBetween(Long value1, Long value2) { + addCriterion("last_exec_time not between", value1, value2, "lastExecTime"); + return (Criteria) this; + } + + public Criteria andStatusIsNull() { + addCriterion("`status` is null"); + return (Criteria) this; + } + + public Criteria andStatusIsNotNull() { + addCriterion("`status` is not null"); + return (Criteria) this; + } + + public Criteria andStatusEqualTo(String value) { + addCriterion("`status` =", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotEqualTo(String value) { + addCriterion("`status` <>", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusGreaterThan(String value) { + addCriterion("`status` >", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusGreaterThanOrEqualTo(String value) { + addCriterion("`status` >=", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusLessThan(String value) { + addCriterion("`status` <", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusLessThanOrEqualTo(String value) { + addCriterion("`status` <=", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusLike(String value) { + addCriterion("`status` like", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotLike(String value) { + addCriterion("`status` not like", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusIn(List values) { + addCriterion("`status` in", values, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotIn(List values) { + addCriterion("`status` not in", values, "status"); + return (Criteria) this; + } + + public Criteria andStatusBetween(String value1, String value2) { + addCriterion("`status` between", value1, value2, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotBetween(String value1, String value2) { + addCriterion("`status` not between", value1, value2, "status"); + return (Criteria) this; + } + + public Criteria andLastExecStatusIsNull() { + addCriterion("last_exec_status is null"); + return (Criteria) this; + } + + public Criteria andLastExecStatusIsNotNull() { + addCriterion("last_exec_status is not null"); + return (Criteria) this; + } + + public Criteria andLastExecStatusEqualTo(String value) { + addCriterion("last_exec_status =", value, "lastExecStatus"); + return (Criteria) this; + } + + public Criteria andLastExecStatusNotEqualTo(String value) { + addCriterion("last_exec_status <>", value, "lastExecStatus"); + return (Criteria) this; + } + + public Criteria andLastExecStatusGreaterThan(String value) { + addCriterion("last_exec_status >", value, "lastExecStatus"); + return (Criteria) this; + } + + public Criteria andLastExecStatusGreaterThanOrEqualTo(String value) { + addCriterion("last_exec_status >=", value, "lastExecStatus"); + return (Criteria) this; + } + + public Criteria andLastExecStatusLessThan(String value) { + addCriterion("last_exec_status <", value, "lastExecStatus"); + return (Criteria) this; + } + + public Criteria andLastExecStatusLessThanOrEqualTo(String value) { + addCriterion("last_exec_status <=", value, "lastExecStatus"); + return (Criteria) this; + } + + public Criteria andLastExecStatusLike(String value) { + addCriterion("last_exec_status like", value, "lastExecStatus"); + return (Criteria) this; + } + + public Criteria andLastExecStatusNotLike(String value) { + addCriterion("last_exec_status not like", value, "lastExecStatus"); + return (Criteria) this; + } + + public Criteria andLastExecStatusIn(List values) { + addCriterion("last_exec_status in", values, "lastExecStatus"); + return (Criteria) this; + } + + public Criteria andLastExecStatusNotIn(List values) { + addCriterion("last_exec_status not in", values, "lastExecStatus"); + return (Criteria) this; + } + + public Criteria andLastExecStatusBetween(String value1, String value2) { + addCriterion("last_exec_status between", value1, value2, "lastExecStatus"); + return (Criteria) this; + } + + public Criteria andLastExecStatusNotBetween(String value1, String value2) { + addCriterion("last_exec_status not between", value1, value2, "lastExecStatus"); + return (Criteria) this; + } } public static class Criteria extends GeneratedCriteria { diff --git a/backend/src/main/java/io/dataease/base/domain/DatasetTableTaskLog.java b/backend/src/main/java/io/dataease/base/domain/DatasetTableTaskLog.java index 3419163d1b..3c5040feac 100644 --- a/backend/src/main/java/io/dataease/base/domain/DatasetTableTaskLog.java +++ b/backend/src/main/java/io/dataease/base/domain/DatasetTableTaskLog.java @@ -19,6 +19,8 @@ public class DatasetTableTaskLog implements Serializable { private Long createTime; + private String triggerType; + private String info; private static final long serialVersionUID = 1L; diff --git a/backend/src/main/java/io/dataease/base/domain/DatasetTableTaskLogExample.java b/backend/src/main/java/io/dataease/base/domain/DatasetTableTaskLogExample.java index ed3337762d..82ca70c6ab 100644 --- a/backend/src/main/java/io/dataease/base/domain/DatasetTableTaskLogExample.java +++ b/backend/src/main/java/io/dataease/base/domain/DatasetTableTaskLogExample.java @@ -563,6 +563,76 @@ public class DatasetTableTaskLogExample { addCriterion("create_time not between", value1, value2, "createTime"); return (Criteria) this; } + + public Criteria andTriggerTypeIsNull() { + addCriterion("trigger_type is null"); + return (Criteria) this; + } + + public Criteria andTriggerTypeIsNotNull() { + addCriterion("trigger_type is not null"); + return (Criteria) this; + } + + public Criteria andTriggerTypeEqualTo(String value) { + addCriterion("trigger_type =", value, "triggerType"); + return (Criteria) this; + } + + public Criteria andTriggerTypeNotEqualTo(String value) { + addCriterion("trigger_type <>", value, "triggerType"); + return (Criteria) this; + } + + public Criteria andTriggerTypeGreaterThan(String value) { + addCriterion("trigger_type >", value, "triggerType"); + return (Criteria) this; + } + + public Criteria andTriggerTypeGreaterThanOrEqualTo(String value) { + addCriterion("trigger_type >=", value, "triggerType"); + return (Criteria) this; + } + + public Criteria andTriggerTypeLessThan(String value) { + addCriterion("trigger_type <", value, "triggerType"); + return (Criteria) this; + } + + public Criteria andTriggerTypeLessThanOrEqualTo(String value) { + addCriterion("trigger_type <=", value, "triggerType"); + return (Criteria) this; + } + + public Criteria andTriggerTypeLike(String value) { + addCriterion("trigger_type like", value, "triggerType"); + return (Criteria) this; + } + + public Criteria andTriggerTypeNotLike(String value) { + addCriterion("trigger_type not like", value, "triggerType"); + return (Criteria) this; + } + + public Criteria andTriggerTypeIn(List values) { + addCriterion("trigger_type in", values, "triggerType"); + return (Criteria) this; + } + + public Criteria andTriggerTypeNotIn(List values) { + addCriterion("trigger_type not in", values, "triggerType"); + return (Criteria) this; + } + + public Criteria andTriggerTypeBetween(String value1, String value2) { + addCriterion("trigger_type between", value1, value2, "triggerType"); + return (Criteria) this; + } + + public Criteria andTriggerTypeNotBetween(String value1, String value2) { + addCriterion("trigger_type not between", value1, value2, "triggerType"); + return (Criteria) this; + } } public static class Criteria extends GeneratedCriteria { diff --git a/backend/src/main/java/io/dataease/base/mapper/DatasetTableTaskLogMapper.xml b/backend/src/main/java/io/dataease/base/mapper/DatasetTableTaskLogMapper.xml index d1bf30905e..3903dd301a 100644 --- a/backend/src/main/java/io/dataease/base/mapper/DatasetTableTaskLogMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/DatasetTableTaskLogMapper.xml @@ -9,6 +9,7 @@ + @@ -72,7 +73,7 @@ - id, table_id, task_id, start_time, end_time, `status`, create_time + id, table_id, task_id, start_time, end_time, `status`, create_time, trigger_type info @@ -128,10 +129,12 @@ insert into dataset_table_task_log (id, table_id, task_id, start_time, end_time, `status`, - create_time, info) + create_time, trigger_type, info + ) values (#{id,jdbcType=VARCHAR}, #{tableId,jdbcType=VARCHAR}, #{taskId,jdbcType=VARCHAR}, #{startTime,jdbcType=BIGINT}, #{endTime,jdbcType=BIGINT}, #{status,jdbcType=VARCHAR}, - #{createTime,jdbcType=BIGINT}, #{info,jdbcType=LONGVARCHAR}) + #{createTime,jdbcType=BIGINT}, #{triggerType,jdbcType=VARCHAR}, #{info,jdbcType=LONGVARCHAR} + ) insert into dataset_table_task_log @@ -157,6 +160,9 @@ create_time, + + trigger_type, + info, @@ -183,6 +189,9 @@ #{createTime,jdbcType=BIGINT}, + + #{triggerType,jdbcType=VARCHAR}, + #{info,jdbcType=LONGVARCHAR}, @@ -218,6 +227,9 @@ create_time = #{record.createTime,jdbcType=BIGINT}, + + trigger_type = #{record.triggerType,jdbcType=VARCHAR}, + info = #{record.info,jdbcType=LONGVARCHAR}, @@ -235,6 +247,7 @@ end_time = #{record.endTime,jdbcType=BIGINT}, `status` = #{record.status,jdbcType=VARCHAR}, create_time = #{record.createTime,jdbcType=BIGINT}, + trigger_type = #{record.triggerType,jdbcType=VARCHAR}, info = #{record.info,jdbcType=LONGVARCHAR} @@ -248,7 +261,8 @@ start_time = #{record.startTime,jdbcType=BIGINT}, end_time = #{record.endTime,jdbcType=BIGINT}, `status` = #{record.status,jdbcType=VARCHAR}, - create_time = #{record.createTime,jdbcType=BIGINT} + create_time = #{record.createTime,jdbcType=BIGINT}, + trigger_type = #{record.triggerType,jdbcType=VARCHAR} @@ -274,6 +288,9 @@ create_time = #{createTime,jdbcType=BIGINT}, + + trigger_type = #{triggerType,jdbcType=VARCHAR}, + info = #{info,jdbcType=LONGVARCHAR}, @@ -288,6 +305,7 @@ end_time = #{endTime,jdbcType=BIGINT}, `status` = #{status,jdbcType=VARCHAR}, create_time = #{createTime,jdbcType=BIGINT}, + trigger_type = #{triggerType,jdbcType=VARCHAR}, info = #{info,jdbcType=LONGVARCHAR} where id = #{id,jdbcType=VARCHAR} @@ -298,7 +316,8 @@ start_time = #{startTime,jdbcType=BIGINT}, end_time = #{endTime,jdbcType=BIGINT}, `status` = #{status,jdbcType=VARCHAR}, - create_time = #{createTime,jdbcType=BIGINT} + create_time = #{createTime,jdbcType=BIGINT}, + trigger_type = #{triggerType,jdbcType=VARCHAR} where id = #{id,jdbcType=VARCHAR} \ No newline at end of file diff --git a/backend/src/main/java/io/dataease/base/mapper/DatasetTableTaskMapper.xml b/backend/src/main/java/io/dataease/base/mapper/DatasetTableTaskMapper.xml index 5a6c1055e6..3ebbb5442c 100644 --- a/backend/src/main/java/io/dataease/base/mapper/DatasetTableTaskMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/DatasetTableTaskMapper.xml @@ -12,6 +12,9 @@ + + + @@ -72,7 +75,8 @@ - id, table_id, `name`, `type`, start_time, rate, cron, `end`, end_time, create_time + id, table_id, `name`, `type`, start_time, rate, cron, `end`, end_time, create_time, + last_exec_time, `status`, last_exec_status @@ -220,6 +244,15 @@ create_time = #{record.createTime,jdbcType=BIGINT}, + + last_exec_time = #{record.lastExecTime,jdbcType=BIGINT}, + + + `status` = #{record.status,jdbcType=VARCHAR}, + + + last_exec_status = #{record.lastExecStatus,jdbcType=VARCHAR}, + @@ -236,7 +269,10 @@ cron = #{record.cron,jdbcType=VARCHAR}, `end` = #{record.end,jdbcType=VARCHAR}, end_time = #{record.endTime,jdbcType=BIGINT}, - create_time = #{record.createTime,jdbcType=BIGINT} + create_time = #{record.createTime,jdbcType=BIGINT}, + last_exec_time = #{record.lastExecTime,jdbcType=BIGINT}, + `status` = #{record.status,jdbcType=VARCHAR}, + last_exec_status = #{record.lastExecStatus,jdbcType=VARCHAR} @@ -271,6 +307,15 @@ create_time = #{createTime,jdbcType=BIGINT}, + + last_exec_time = #{lastExecTime,jdbcType=BIGINT}, + + + `status` = #{status,jdbcType=VARCHAR}, + + + last_exec_status = #{lastExecStatus,jdbcType=VARCHAR}, + where id = #{id,jdbcType=VARCHAR} @@ -284,7 +329,10 @@ cron = #{cron,jdbcType=VARCHAR}, `end` = #{end,jdbcType=VARCHAR}, end_time = #{endTime,jdbcType=BIGINT}, - create_time = #{createTime,jdbcType=BIGINT} + create_time = #{createTime,jdbcType=BIGINT}, + last_exec_time = #{lastExecTime,jdbcType=BIGINT}, + `status` = #{status,jdbcType=VARCHAR}, + last_exec_status = #{lastExecStatus,jdbcType=VARCHAR} where id = #{id,jdbcType=VARCHAR} \ No newline at end of file diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetTableMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetTableMapper.xml index 1f1d6ad214..b0fdba70dc 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetTableMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetTableMapper.xml @@ -21,6 +21,9 @@ and mode = #{mode,jdbcType=INTEGER} + + and type = #{type,jdbcType=VARCHAR} + and type in diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetTaskMapper.java b/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetTaskMapper.java index 16356e5c1c..423b23201d 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetTaskMapper.java +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetTaskMapper.java @@ -1,6 +1,8 @@ package io.dataease.base.mapper.ext; import io.dataease.base.domain.DatasetTableTaskLog; +import io.dataease.base.mapper.ext.query.GridExample; +import io.dataease.dto.dataset.DataSetTaskDTO; import io.dataease.dto.dataset.DataSetTaskLogDTO; import org.apache.ibatis.annotations.Mapper; @@ -12,5 +14,7 @@ import java.util.List; */ @Mapper public interface ExtDataSetTaskMapper { - List list(DatasetTableTaskLog request); + List list(GridExample example); + + List taskList(GridExample example); } diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetTaskMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetTaskMapper.xml index 6262852381..16ce894c3e 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetTaskMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetTaskMapper.xml @@ -7,13 +7,42 @@ + + + + + + + + + diff --git a/backend/src/main/java/io/dataease/commons/constants/ScheduleType.java b/backend/src/main/java/io/dataease/commons/constants/ScheduleType.java index 18aeb65588..98b4fde4dd 100644 --- a/backend/src/main/java/io/dataease/commons/constants/ScheduleType.java +++ b/backend/src/main/java/io/dataease/commons/constants/ScheduleType.java @@ -1,5 +1,5 @@ package io.dataease.commons.constants; public enum ScheduleType { - CRON, SIMPLE, SIMPLE_COMPLETE + CRON, SIMPLE } diff --git a/backend/src/main/java/io/dataease/controller/dataset/DataSetTableTaskController.java b/backend/src/main/java/io/dataease/controller/dataset/DataSetTableTaskController.java index 7edb03030e..391dc78a2e 100644 --- a/backend/src/main/java/io/dataease/controller/dataset/DataSetTableTaskController.java +++ b/backend/src/main/java/io/dataease/controller/dataset/DataSetTableTaskController.java @@ -1,8 +1,17 @@ package io.dataease.controller.dataset; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; import io.dataease.base.domain.DatasetTableTask; +import io.dataease.commons.utils.PageUtils; +import io.dataease.commons.utils.Pager; import io.dataease.controller.request.dataset.DataSetTaskRequest; +import io.dataease.controller.sys.base.BaseGridRequest; +import io.dataease.controller.sys.response.SysUserGridResponse; +import io.dataease.dto.dataset.DataSetTaskDTO; +import io.dataease.service.dataset.DataSetTableTaskLogService; import io.dataease.service.dataset.DataSetTableTaskService; +import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -17,6 +26,8 @@ import java.util.List; public class DataSetTableTaskController { @Resource private DataSetTableTaskService dataSetTableTaskService; + @Resource + private DataSetTableTaskLogService dataSetTableTaskLogService; @PostMapping("save") public DatasetTableTask save(@RequestBody DataSetTaskRequest dataSetTaskRequest) throws Exception { @@ -32,4 +43,28 @@ public class DataSetTableTaskController { public List list(@RequestBody DatasetTableTask datasetTableTask) { return dataSetTableTaskService.list(datasetTableTask); } + + @ApiOperation("查看数据集任务") + @PostMapping("/pageList/{goPage}/{pageSize}") + public Pager> taskList(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody BaseGridRequest request) { + Page page = PageHelper.startPage(goPage, pageSize, true); + + return PageUtils.setPageInfo(page, dataSetTableTaskService.taskList(request)); + } + + @PostMapping("/lastExecStatus") + public DataSetTaskDTO lastExecStatus(@RequestBody DataSetTaskDTO datasetTableTask) { + return dataSetTableTaskLogService.lastExecStatus(datasetTableTask); + } + + @PostMapping("/updateStatus") + public void updateStatus(@RequestBody DatasetTableTask datasetTableTask) { + dataSetTableTaskService.updateDatasetTableTaskStatus(datasetTableTask); + } + + @PostMapping("/execTask") + public void execTask(@RequestBody DatasetTableTask datasetTableTask) throws Exception{ + dataSetTableTaskService.execTask(datasetTableTask); + } + } diff --git a/backend/src/main/java/io/dataease/controller/dataset/DataSetTableTaskLogController.java b/backend/src/main/java/io/dataease/controller/dataset/DataSetTableTaskLogController.java index 3269b3eb8b..4b0123fe3c 100644 --- a/backend/src/main/java/io/dataease/controller/dataset/DataSetTableTaskLogController.java +++ b/backend/src/main/java/io/dataease/controller/dataset/DataSetTableTaskLogController.java @@ -5,6 +5,7 @@ import com.github.pagehelper.PageHelper; import io.dataease.base.domain.DatasetTableTaskLog; import io.dataease.commons.utils.PageUtils; import io.dataease.commons.utils.Pager; +import io.dataease.controller.sys.base.BaseGridRequest; import io.dataease.dto.dataset.DataSetTaskLogDTO; import io.dataease.service.dataset.DataSetTableTaskLogService; import org.springframework.web.bind.annotation.*; @@ -33,7 +34,7 @@ public class DataSetTableTaskLogController { } @PostMapping("list/{goPage}/{pageSize}") - public Pager> list(@RequestBody DatasetTableTaskLog request, @PathVariable int goPage, @PathVariable int pageSize) { + public Pager> list(@RequestBody BaseGridRequest request, @PathVariable int goPage, @PathVariable int pageSize) { Page page = PageHelper.startPage(goPage, pageSize, true); return PageUtils.setPageInfo(page, dataSetTableTaskLogService.list(request)); } diff --git a/backend/src/main/java/io/dataease/job/sechedule/ScheduleManager.java b/backend/src/main/java/io/dataease/job/sechedule/ScheduleManager.java index 14c8b9600b..c8597498a5 100644 --- a/backend/src/main/java/io/dataease/job/sechedule/ScheduleManager.java +++ b/backend/src/main/java/io/dataease/job/sechedule/ScheduleManager.java @@ -430,4 +430,10 @@ public class ScheduleManager { } return trigger.getFireTimeAfter(start); } + + public void fireNow(String jobName, String jobGroup) throws SchedulerException { + JobKey jobKey = new JobKey(jobName, jobGroup); + scheduler.triggerJob(jobKey); + } + } diff --git a/backend/src/main/java/io/dataease/listener/AppStartListener.java b/backend/src/main/java/io/dataease/listener/AppStartListener.java index 7acbdb007d..5d5aa70e6b 100644 --- a/backend/src/main/java/io/dataease/listener/AppStartListener.java +++ b/backend/src/main/java/io/dataease/listener/AppStartListener.java @@ -1,7 +1,9 @@ package io.dataease.listener; import io.dataease.base.domain.DatasetTableTask; +import io.dataease.commons.constants.NoticeConstants; import io.dataease.commons.constants.ScheduleType; +import io.dataease.commons.constants.TaskStatus; import io.dataease.service.ScheduleService; import io.dataease.service.dataset.DataSetTableTaskService; import org.apache.commons.lang3.StringUtils; @@ -41,7 +43,9 @@ public class AppStartListener implements ApplicationListener taskIds = datasetTableTaskLogMapper.selectByExample(datasetTableTaskLogExample).stream().map(DatasetTableTaskLog::getTaskId).collect(Collectors.toList()); datasetTableTaskLogMapper.updateByExampleSelective(datasetTableTaskLog, datasetTableTaskLogExample); + + DatasetTableTask datasetTableTask = new DatasetTableTask(); + datasetTableTask.setLastExecStatus(JobStatus.Error.name()); + dataSetTableTaskService.update(taskIds, datasetTableTask); + for (DatasetTable jobStoppeddDatasetTable : jobStoppeddDatasetTables) { extractDataService.deleteFile("all_scope", jobStoppeddDatasetTable.getId()); extractDataService.deleteFile("incremental_add", jobStoppeddDatasetTable.getId()); extractDataService.deleteFile("incremental_delete", jobStoppeddDatasetTable.getId()); - } } diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskLogService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskLogService.java index 286cae3cc5..c785cc3828 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskLogService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskLogService.java @@ -1,10 +1,16 @@ package io.dataease.service.dataset; +import io.dataease.base.domain.DatasetTableTask; import io.dataease.base.domain.DatasetTableTaskLog; import io.dataease.base.domain.DatasetTableTaskLogExample; import io.dataease.base.mapper.DatasetTableTaskLogMapper; +import io.dataease.base.mapper.DatasetTableTaskMapper; import io.dataease.base.mapper.ext.ExtDataSetTaskMapper; +import io.dataease.base.mapper.ext.query.GridExample; +import io.dataease.controller.sys.base.BaseGridRequest; +import io.dataease.dto.dataset.DataSetTaskDTO; import io.dataease.dto.dataset.DataSetTaskLogDTO; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -38,8 +44,9 @@ public class DataSetTableTaskLogService { datasetTableTaskLogMapper.deleteByPrimaryKey(id); } - public List list(DatasetTableTaskLog request) { - return extDataSetTaskMapper.list(request); + public List list(BaseGridRequest request) { + GridExample gridExample = request.convertExample(); + return extDataSetTaskMapper.list(gridExample); } public void deleteByTaskId(String taskId){ @@ -57,6 +64,30 @@ public class DataSetTableTaskLogService { } public List select(DatasetTableTaskLog datasetTableTaskLog){ + DatasetTableTaskLogExample example = getDatasetTableTaskLogExample(datasetTableTaskLog); + example.setOrderByClause("create_time desc"); + return datasetTableTaskLogMapper.selectByExampleWithBLOBs(example); + } + + public DataSetTaskDTO lastExecStatus(DataSetTaskDTO dataSetTaskDTO){ + DatasetTableTaskLogExample example = new DatasetTableTaskLogExample(); + DatasetTableTaskLogExample.Criteria criteria = example.createCriteria(); + if(StringUtils.isNotEmpty(dataSetTaskDTO.getTableId())){ + criteria.andTableIdEqualTo(dataSetTaskDTO.getTableId()); + } + if(StringUtils.isNotEmpty(dataSetTaskDTO.getId())){ + criteria.andTaskIdEqualTo(dataSetTaskDTO.getId()); + } + example.setOrderByClause("create_time desc limit 1"); + List datasetTableTaskLogs = datasetTableTaskLogMapper.selectByExampleWithBLOBs(example); + if(CollectionUtils.isNotEmpty(datasetTableTaskLogs)){ + dataSetTaskDTO.setLastExecStatus(datasetTableTaskLogs.get(0).getStatus()); + dataSetTaskDTO.setLastExecTime(datasetTableTaskLogs.get(0).getCreateTime()); + } + return dataSetTaskDTO; + } + + private DatasetTableTaskLogExample getDatasetTableTaskLogExample(DatasetTableTaskLog datasetTableTaskLog) { DatasetTableTaskLogExample example = new DatasetTableTaskLogExample(); DatasetTableTaskLogExample.Criteria criteria = example.createCriteria(); if(StringUtils.isNotEmpty(datasetTableTaskLog.getStatus())){ @@ -68,7 +99,8 @@ public class DataSetTableTaskLogService { if(StringUtils.isNotEmpty(datasetTableTaskLog.getTaskId())){ criteria.andTaskIdEqualTo(datasetTableTaskLog.getTaskId()); } - example.setOrderByClause("create_time desc"); - return datasetTableTaskLogMapper.selectByExampleWithBLOBs(example); + return example; } + + } diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskService.java index 55097ece70..0f3e5e5839 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskService.java @@ -1,16 +1,26 @@ package io.dataease.service.dataset; +import com.google.gson.Gson; import io.dataease.base.domain.DatasetTable; import io.dataease.base.domain.DatasetTableTask; import io.dataease.base.domain.DatasetTableTaskExample; import io.dataease.base.domain.DatasetTableTaskLog; import io.dataease.base.mapper.DatasetTableTaskMapper; +import io.dataease.base.mapper.ext.ExtDataSetTaskMapper; +import io.dataease.base.mapper.ext.query.GridExample; import io.dataease.commons.constants.JobStatus; import io.dataease.commons.constants.ScheduleType; +import io.dataease.commons.constants.TaskStatus; +import io.dataease.commons.constants.TriggerType; import io.dataease.controller.request.dataset.DataSetTaskRequest; +import io.dataease.controller.sys.base.BaseGridRequest; +import io.dataease.controller.sys.response.SysUserGridResponse; +import io.dataease.controller.sys.response.SysUserRole; +import io.dataease.dto.dataset.DataSetTaskDTO; import io.dataease.exception.DataEaseException; import io.dataease.i18n.Translator; import io.dataease.service.ScheduleService; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.quartz.CronExpression; @@ -21,6 +31,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.List; import java.util.UUID; +import java.util.stream.Collectors; /** * @Author gin @@ -40,12 +51,15 @@ public class DataSetTableTaskService { private DataSetTableService dataSetTableService; @Resource private ExtractDataService extractDataService; + @Resource + private ExtDataSetTaskMapper extDataSetTaskMapper; public DatasetTableTask save(DataSetTaskRequest dataSetTaskRequest) throws Exception { checkName(dataSetTaskRequest); DatasetTableTask datasetTableTask = dataSetTaskRequest.getDatasetTableTask(); - dataSetTableService.saveIncrementalConfig(dataSetTaskRequest.getDatasetTableIncrementalConfig()); - + if(!datasetTableTask.getType().equalsIgnoreCase("all_scope")){ + dataSetTableService.saveIncrementalConfig(dataSetTaskRequest.getDatasetTableIncrementalConfig()); + } // check if (StringUtils.equalsIgnoreCase(datasetTableTask.getRate(),"CRON")){ if (StringUtils.isNotEmpty(datasetTableTask.getCron())) { @@ -67,25 +81,9 @@ public class DataSetTableTaskService { if (StringUtils.isEmpty(datasetTableTask.getId())) { datasetTableTask.setId(UUID.randomUUID().toString()); datasetTableTask.setCreateTime(System.currentTimeMillis()); - // SIMPLE 类型,提前占位 - if (datasetTableTask.getRate().equalsIgnoreCase(ScheduleType.SIMPLE.toString())) { - if (datasetTableTask.getType().equalsIgnoreCase("add_scope")) { - DatasetTable datasetTable = dataSetTableService.get(datasetTableTask.getTableId()); - if (datasetTable.getLastUpdateTime() == 0 || datasetTable.getLastUpdateTime() == null) { - DataEaseException.throwException(Translator.get("i18n_not_exec_add_sync")); - } - } - if (extractDataService.updateSyncStatusIsNone(dataSetTableService.get(datasetTableTask.getTableId()))) { - DataEaseException.throwException(Translator.get("i18n_sync_job_exists")); - } else { - //write log - DatasetTableTaskLog datasetTableTaskLog = new DatasetTableTaskLog(); - datasetTableTaskLog.setTableId(datasetTableTask.getTableId()); - datasetTableTaskLog.setTaskId(datasetTableTask.getId()); - datasetTableTaskLog.setStatus(JobStatus.Underway.name()); - datasetTableTaskLog.setStartTime(System.currentTimeMillis()); - dataSetTableTaskLogService.save(datasetTableTaskLog); - } + datasetTableTask.setStatus(TaskStatus.Underway.name()); + if (datasetTableTask.getRate().equalsIgnoreCase(ScheduleType.SIMPLE.toString())) { // SIMPLE 类型,提前占位 + execNow(datasetTableTask); } datasetTableTaskMapper.insert(datasetTableTask); } else { @@ -95,6 +93,26 @@ public class DataSetTableTaskService { return datasetTableTask; } + private void execNow(DatasetTableTask datasetTableTask) { + if (datasetTableTask.getType().equalsIgnoreCase("add_scope")) { + DatasetTable datasetTable = dataSetTableService.get(datasetTableTask.getTableId()); + if (datasetTable.getLastUpdateTime() == null || datasetTable.getLastUpdateTime() == 0) { + DataEaseException.throwException(Translator.get("i18n_not_exec_add_sync")); + } + } + if (extractDataService.updateSyncStatusIsNone(dataSetTableService.get(datasetTableTask.getTableId()))) { + DataEaseException.throwException(Translator.get("i18n_sync_job_exists")); + } else { //write log + DatasetTableTaskLog datasetTableTaskLog = new DatasetTableTaskLog(); + datasetTableTaskLog.setTableId(datasetTableTask.getTableId()); + datasetTableTaskLog.setTaskId(datasetTableTask.getId()); + datasetTableTaskLog.setStatus(JobStatus.Underway.name()); + datasetTableTaskLog.setStartTime(System.currentTimeMillis()); + datasetTableTaskLog.setTriggerType(TriggerType.Custom.name()); + dataSetTableTaskLogService.save(datasetTableTaskLog); + } + } + public void delete(String id) { DatasetTableTask datasetTableTask = datasetTableTaskMapper.selectByPrimaryKey(id); datasetTableTaskMapper.deleteByPrimaryKey(id); @@ -121,19 +139,34 @@ public class DataSetTableTaskService { } public void update(DatasetTableTask datasetTableTask) { - datasetTableTaskMapper.updateByPrimaryKey(datasetTableTask); + datasetTableTaskMapper.updateByPrimaryKeySelective(datasetTableTask); + } + + public void update(List taskIds, DatasetTableTask datasetTableTask) { + if (CollectionUtils.isEmpty(taskIds)){ + return; + } + DatasetTableTaskExample example = new DatasetTableTaskExample(); + example.createCriteria().andIdIn(taskIds); + datasetTableTaskMapper.updateByExampleSelective(datasetTableTask, example); } public List list(DatasetTableTask datasetTableTask) { DatasetTableTaskExample datasetTableTaskExample = new DatasetTableTaskExample(); DatasetTableTaskExample.Criteria criteria = datasetTableTaskExample.createCriteria(); - if (StringUtils.isNotEmpty(datasetTableTask.getTableId())) { + if (datasetTableTask != null && StringUtils.isNotEmpty(datasetTableTask.getTableId())) { criteria.andTableIdEqualTo(datasetTableTask.getTableId()); } datasetTableTaskExample.setOrderByClause("create_time desc,name asc"); return datasetTableTaskMapper.selectByExample(datasetTableTaskExample); } + public List taskList(BaseGridRequest request) { + GridExample gridExample = request.convertExample(); + List dataSetTaskDTOS = extDataSetTaskMapper.taskList(gridExample); + return dataSetTaskDTOS; + } + private void checkName(DataSetTaskRequest dataSetTaskRequest) { DatasetTableTaskExample datasetTableTaskExample = new DatasetTableTaskExample(); DatasetTableTaskExample.Criteria criteria = datasetTableTaskExample.createCriteria(); @@ -151,4 +184,27 @@ public class DataSetTableTaskService { throw new RuntimeException(Translator.get("i18n_task_name_repeat")); } } + + public void updateDatasetTableTaskStatus(DatasetTableTask datasetTableTask){ + DatasetTableTaskExample datasetTableTaskExample = new DatasetTableTaskExample(); + DatasetTableTaskExample.Criteria criteria = datasetTableTaskExample.createCriteria(); + criteria.andIdEqualTo(datasetTableTask.getId()); + DatasetTableTask record = new DatasetTableTask(); + record.setStatus(datasetTableTask.getStatus()); + datasetTableTaskMapper.updateByExampleSelective(record, datasetTableTaskExample); + } + + public void execTask(DatasetTableTask datasetTableTask) throws Exception{ + if(datasetTableTask.getRate().equalsIgnoreCase(ScheduleType.CRON.toString())){ + scheduleService.fireNow(datasetTableTask); + } + if(datasetTableTask.getRate().equalsIgnoreCase(ScheduleType.SIMPLE.toString())){ + execNow(datasetTableTask); + datasetTableTask.setStatus(TaskStatus.Underway.name()); + datasetTableTask.setLastExecStatus(JobStatus.Underway.name()); + update(datasetTableTask); + scheduleService.addSchedule(datasetTableTask); + } + + } } diff --git a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java index 9e262a7022..bbd3771d5c 100644 --- a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java +++ b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java @@ -6,10 +6,7 @@ import io.dataease.base.mapper.DatasetTableMapper; import io.dataease.base.mapper.DatasetTableTaskMapper; import io.dataease.base.mapper.DatasourceMapper; import io.dataease.base.mapper.ext.ExtChartViewMapper; -import io.dataease.commons.constants.JdbcConstants; -import io.dataease.commons.constants.JobStatus; -import io.dataease.commons.constants.ScheduleType; -import io.dataease.commons.constants.UpdateType; +import io.dataease.commons.constants.*; import io.dataease.commons.model.AuthURD; import io.dataease.commons.utils.*; import io.dataease.datasource.constants.DatasourceTypes; @@ -136,10 +133,8 @@ public class ExtractDataService { public synchronized boolean updateSyncStatusIsNone(DatasetTable datasetTable ){ datasetTable.setSyncStatus(JobStatus.Underway.name()); + DatasetTableExample example = new DatasetTableExample(); - example.createCriteria().andIdEqualTo(datasetTable.getId()); - datasetTableMapper.selectByExample(example); - example.clear(); example.createCriteria().andIdEqualTo(datasetTable.getId()).andSyncStatusNotEqualTo(JobStatus.Underway.name()); example.or(example.createCriteria().andIdEqualTo(datasetTable.getId()).andSyncStatusIsNull()); return datasetTableMapper.updateByExampleSelective(datasetTable, example) == 0; @@ -156,6 +151,10 @@ public class ExtractDataService { LogUtil.info("Skip synchronization task for table : " + datasetTableId); return; } + datasetTableTask.setLastExecTime(System.currentTimeMillis()); + datasetTableTask.setLastExecStatus(JobStatus.Underway.name()); + dataSetTableTaskService.update(datasetTableTask); + DatasetTableTaskLog datasetTableTaskLog = new DatasetTableTaskLog(); UpdateType updateType = UpdateType.valueOf(type); if(context != null){ @@ -207,18 +206,23 @@ public class ExtractDataService { sendWebMsg(datasetTable, taskId,true); -// deleteFile("all_scope", datasetTableId); + deleteFile("all_scope", datasetTableId); updateTableStatus(datasetTableId, datasetTable, JobStatus.Completed, execTime); + + datasetTableTask.setLastExecStatus(JobStatus.Completed.name()); + dataSetTableTaskService.update(datasetTableTask); }catch (Exception e){ saveErrorLog(datasetTableId, taskId, e); + datasetTableTask.setLastExecStatus(JobStatus.Error.name()); + dataSetTableTaskService.update(datasetTableTask); sendWebMsg(datasetTable, taskId,false); updateTableStatus(datasetTableId, datasetTable, JobStatus.Error, null); dropDorisTable(DorisTableUtils.dorisTmpName(DorisTableUtils.dorisName(datasetTableId))); -// deleteFile("all_scope", datasetTableId); + deleteFile("all_scope", datasetTableId); }finally { if (datasetTableTask != null && datasetTableTask.getRate().equalsIgnoreCase(ScheduleType.SIMPLE.toString())) { - datasetTableTask.setRate(ScheduleType.SIMPLE_COMPLETE.toString()); + datasetTableTask.setStatus(TaskStatus.Stopped.name()); dataSetTableTaskService.update(datasetTableTask); } } @@ -274,20 +278,24 @@ public class ExtractDataService { sendWebMsg(datasetTable, taskId,true); -// deleteFile("incremental_add", datasetTableId); -// deleteFile("incremental_delete", datasetTableId); + deleteFile("incremental_add", datasetTableId); + deleteFile("incremental_delete", datasetTableId); updateTableStatus(datasetTableId, datasetTable, JobStatus.Completed, execTime); + datasetTableTask.setLastExecStatus(JobStatus.Completed.name()); + dataSetTableTaskService.update(datasetTableTask); } }catch (Exception e){ saveErrorLog(datasetTableId, taskId, e); sendWebMsg(datasetTable, taskId,false); updateTableStatus(datasetTableId, datasetTable, JobStatus.Error, null); -// deleteFile("incremental_add", datasetTableId); -// deleteFile("incremental_delete", datasetTableId); + datasetTableTask.setLastExecStatus(JobStatus.Error.name()); + dataSetTableTaskService.update(datasetTableTask); + deleteFile("incremental_add", datasetTableId); + deleteFile("incremental_delete", datasetTableId); }finally { if (datasetTableTask != null && datasetTableTask.getRate().equalsIgnoreCase(ScheduleType.SIMPLE.toString())) { - datasetTableTask.setRate(ScheduleType.SIMPLE_COMPLETE.toString()); + datasetTableTask.setStatus(TaskStatus.Stopped.name()); dataSetTableTaskService.update(datasetTableTask); } } @@ -435,6 +443,7 @@ public class ExtractDataService { datasetTableTaskLog.setTableId(datasetTableId); datasetTableTaskLog.setTaskId(taskId); datasetTableTaskLog.setStatus(JobStatus.Underway.name()); + datasetTableTaskLog.setTriggerType(TriggerType.Cron.name()); List datasetTableTaskLogs = dataSetTableTaskLogService.select(datasetTableTaskLog); if(CollectionUtils.isEmpty(datasetTableTaskLogs)){ datasetTableTaskLog.setStartTime(System.currentTimeMillis()); diff --git a/backend/src/main/resources/generatorConfig.xml b/backend/src/main/resources/generatorConfig.xml index 6175f7e18b..6b2c37cdd2 100644 --- a/backend/src/main/resources/generatorConfig.xml +++ b/backend/src/main/resources/generatorConfig.xml @@ -74,7 +74,7 @@ - +
diff --git a/frontend/src/api/dataset/dataset.js b/frontend/src/api/dataset/dataset.js index 7045b0b9da..f5100ed445 100644 --- a/frontend/src/api/dataset/dataset.js +++ b/frontend/src/api/dataset/dataset.js @@ -128,4 +128,21 @@ export function isKettleRunning(showLoading = true) { }) } +export function taskList(spage, size, data) { + return request({ + url: '/dataset/group/isKettleRunning', + method: 'post', + loading: showLoading + }) +} + +export function datasetTaskList(page, size, data) { + return request({ + url: '/dataset/task/pageList/' + page + '/' + size, + method: 'post', + data, + loading: true + }) +} + export default { loadTable, getScene, addGroup, delGroup, addTable, delTable, groupTree } diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 8ac6f042ea..8109f5cbea 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -913,7 +913,23 @@ export default { m2: ' 移动到', char_can_not_more_50: '数据集名称不能超过50个字符', task_add_title: '添加任务', - task_edit_title: '编辑任务' + task_edit_title: '编辑任务', + task: { + list: '任务列表', + record: '执行记录', + create: '新建任务', + name: '任务名称', + last_exec_time: '上次执行时间', + next_exec_time: '下次执行时间', + last_exec_status: '上次执行结果', + task_status: '任务状态', + dataset: '数据集', + search_by_name: '根据名称搜索', + underway: '运行中', + stopped: '停止', + exec: '执行', + confirm_exec: '手动触发执行?' + } }, datasource: { datasource: '数据源', diff --git a/frontend/src/utils/webMsg.js b/frontend/src/utils/webMsg.js index 0f57d12276..b251540641 100644 --- a/frontend/src/utils/webMsg.js +++ b/frontend/src/utils/webMsg.js @@ -1,7 +1,4 @@ export const msgTypes = [ - // { value: -1, label: '全部类型' }, - // { value: 0, label: '仪表板分享' }, - // { value: 1, label: '数据集同步' } { value: -1, label: 'webmsg.all_type' }, { value: 0, label: 'webmsg.panel_type' }, { value: 1, label: 'webmsg.dataset_type' } diff --git a/frontend/src/views/chart/group/Group.vue b/frontend/src/views/chart/group/Group.vue index d87212a8c7..770a1d0e77 100644 --- a/frontend/src/views/chart/group/Group.vue +++ b/frontend/src/views/chart/group/Group.vue @@ -7,20 +7,9 @@ {{ $t('chart.datalist') }} - - - - - - - - - - - @@ -53,14 +42,6 @@ > - - - - - - - - @@ -80,9 +61,6 @@ {{ $t('chart.group') }} - - - {{ $t('chart.add_chart') }} @@ -660,25 +638,10 @@ export default { if (data.type !== 'group') { this.$emit('switchComponent', { name: 'ChartEdit', param: { 'id': data.id }}) } - // if (data.type === 'scene') { - // this.sceneMode = true - // this.currGroup = data - // this.$store.dispatch('chart/setSceneId', this.currGroup.id) - // this.chartTree() - // } - // if (node.expanded) { - // this.expandedArray.push(data.id) - // } else { - // const index = this.expandedArray.indexOf(data.id) - // if (index > -1) { - // this.expandedArray.splice(index, 1) - // } - // } }, back() { this.sceneMode = false - // this.$router.push('/chart/home') this.$emit('switchComponent', { name: '' }) }, @@ -687,13 +650,9 @@ export default { 'type': type } }, - sceneClick(data, node) { - // this.$store.dispatch('chart/setViewId', null) - // this.$store.dispatch('chart/setViewId', data.id) this.$emit('switchComponent', { name: 'ChartEdit', param: { 'id': data.id }}) }, - reviewChartList() { if (this.$store.state.chart.chartSceneData) { const that = this @@ -759,10 +718,7 @@ export default { this.closeCreateChart() this.$store.dispatch('chart/setTableId', null) this.$store.dispatch('chart/setTableId', this.table.id) - // this.$router.push('/chart/chart-edit') this.$emit('switchComponent', { name: 'ChartEdit', param: { 'id': response.data.id }}) - // this.$store.dispatch('chart/setViewId', response.data.id) - // this.chartTree() this.refreshNodeBy(view.sceneId) }) }, diff --git a/frontend/src/views/chart/view/TableSelector.vue b/frontend/src/views/chart/view/TableSelector.vue index 23ea6955b2..7660de1a46 100644 --- a/frontend/src/views/chart/view/TableSelector.vue +++ b/frontend/src/views/chart/view/TableSelector.vue @@ -1,7 +1,7 @@ @@ -521,7 +527,7 @@ export default { } }, getRefLineParams(params) { - // console.log(params) + // console.log(JSON.stringify(params)) const { vLine, hLine } = params this.vLine = vLine this.hLine = hLine From acaf405131386eb5f64b0884b59a6154cf64e5f3 Mon Sep 17 00:00:00 2001 From: junjie Date: Thu, 8 Jul 2021 13:50:22 +0800 Subject: [PATCH 5/8] =?UTF-8?q?feat:=20=E6=95=B0=E6=8D=AE=E9=9B=86?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E5=AD=97=E6=AE=B5=EF=BC=8C=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E7=BB=B4=E5=BA=A6=E6=8C=87=E6=A0=87=E9=80=89=E9=A1=B9=EF=BC=8C?= =?UTF-8?q?=E8=80=8C=E9=9D=9E=E8=80=81=E7=89=88=E6=9C=AC=E4=B8=AD=E9=80=9A?= =?UTF-8?q?=E8=BF=87=E5=AD=97=E6=AE=B5=E7=B1=BB=E5=9E=8B=E5=88=A4=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/domain/DatasetTableField.java | 6 + .../base/domain/DatasetTableFieldExample.java | 190 ++++++++++++++++++ .../base/mapper/DatasetTableFieldMapper.xml | 59 +++++- .../service/dataset/DataSetTableService.java | 6 +- .../V12__alter_updata_ds_table_field.sql | 7 + .../src/main/resources/generatorConfig.xml | 2 +- frontend/src/icons/svg/field_location.svg | 1 + frontend/src/lang/en.js | 4 +- frontend/src/lang/tw.js | 4 +- frontend/src/lang/zh.js | 4 +- frontend/src/styles/index.scss | 6 +- .../components/drag-item/DimensionItem.vue | 13 +- .../chart/components/drag-item/QuotaItem.vue | 26 ++- .../components/filter/ResultFilterEditor.vue | 1 + frontend/src/views/chart/view/ChartEdit.vue | 8 +- .../dataset/common/DatasetCustomField.vue | 3 + .../views/dataset/common/DatasetTableData.vue | 1 + frontend/src/views/dataset/data/FieldEdit.vue | 35 +++- .../src/views/dataset/data/TabDataPreview.vue | 1 + frontend/src/views/dataset/data/UnionView.vue | 6 + 20 files changed, 356 insertions(+), 27 deletions(-) create mode 100644 backend/src/main/resources/db/migration/V12__alter_updata_ds_table_field.sql create mode 100644 frontend/src/icons/svg/field_location.svg diff --git a/backend/src/main/java/io/dataease/base/domain/DatasetTableField.java b/backend/src/main/java/io/dataease/base/domain/DatasetTableField.java index e0f7a118e9..07a400d6d1 100644 --- a/backend/src/main/java/io/dataease/base/domain/DatasetTableField.java +++ b/backend/src/main/java/io/dataease/base/domain/DatasetTableField.java @@ -18,14 +18,20 @@ public class DatasetTableField implements Serializable { private String dataeaseName; + private String groupType; + private String type; private Integer size; private Integer deType; + private Integer deTypeFormat; + private Integer deExtractType; + private Integer extField; + private Boolean checked; private Integer columnIndex; diff --git a/backend/src/main/java/io/dataease/base/domain/DatasetTableFieldExample.java b/backend/src/main/java/io/dataease/base/domain/DatasetTableFieldExample.java index 9d5214f0ec..60eb7802b8 100644 --- a/backend/src/main/java/io/dataease/base/domain/DatasetTableFieldExample.java +++ b/backend/src/main/java/io/dataease/base/domain/DatasetTableFieldExample.java @@ -454,6 +454,76 @@ public class DatasetTableFieldExample { return (Criteria) this; } + public Criteria andGroupTypeIsNull() { + addCriterion("group_type is null"); + return (Criteria) this; + } + + public Criteria andGroupTypeIsNotNull() { + addCriterion("group_type is not null"); + return (Criteria) this; + } + + public Criteria andGroupTypeEqualTo(String value) { + addCriterion("group_type =", value, "groupType"); + return (Criteria) this; + } + + public Criteria andGroupTypeNotEqualTo(String value) { + addCriterion("group_type <>", value, "groupType"); + return (Criteria) this; + } + + public Criteria andGroupTypeGreaterThan(String value) { + addCriterion("group_type >", value, "groupType"); + return (Criteria) this; + } + + public Criteria andGroupTypeGreaterThanOrEqualTo(String value) { + addCriterion("group_type >=", value, "groupType"); + return (Criteria) this; + } + + public Criteria andGroupTypeLessThan(String value) { + addCriterion("group_type <", value, "groupType"); + return (Criteria) this; + } + + public Criteria andGroupTypeLessThanOrEqualTo(String value) { + addCriterion("group_type <=", value, "groupType"); + return (Criteria) this; + } + + public Criteria andGroupTypeLike(String value) { + addCriterion("group_type like", value, "groupType"); + return (Criteria) this; + } + + public Criteria andGroupTypeNotLike(String value) { + addCriterion("group_type not like", value, "groupType"); + return (Criteria) this; + } + + public Criteria andGroupTypeIn(List values) { + addCriterion("group_type in", values, "groupType"); + return (Criteria) this; + } + + public Criteria andGroupTypeNotIn(List values) { + addCriterion("group_type not in", values, "groupType"); + return (Criteria) this; + } + + public Criteria andGroupTypeBetween(String value1, String value2) { + addCriterion("group_type between", value1, value2, "groupType"); + return (Criteria) this; + } + + public Criteria andGroupTypeNotBetween(String value1, String value2) { + addCriterion("group_type not between", value1, value2, "groupType"); + return (Criteria) this; + } + public Criteria andTypeIsNull() { addCriterion("`type` is null"); return (Criteria) this; @@ -644,6 +714,66 @@ public class DatasetTableFieldExample { return (Criteria) this; } + public Criteria andDeTypeFormatIsNull() { + addCriterion("de_type_format is null"); + return (Criteria) this; + } + + public Criteria andDeTypeFormatIsNotNull() { + addCriterion("de_type_format is not null"); + return (Criteria) this; + } + + public Criteria andDeTypeFormatEqualTo(Integer value) { + addCriterion("de_type_format =", value, "deTypeFormat"); + return (Criteria) this; + } + + public Criteria andDeTypeFormatNotEqualTo(Integer value) { + addCriterion("de_type_format <>", value, "deTypeFormat"); + return (Criteria) this; + } + + public Criteria andDeTypeFormatGreaterThan(Integer value) { + addCriterion("de_type_format >", value, "deTypeFormat"); + return (Criteria) this; + } + + public Criteria andDeTypeFormatGreaterThanOrEqualTo(Integer value) { + addCriterion("de_type_format >=", value, "deTypeFormat"); + return (Criteria) this; + } + + public Criteria andDeTypeFormatLessThan(Integer value) { + addCriterion("de_type_format <", value, "deTypeFormat"); + return (Criteria) this; + } + + public Criteria andDeTypeFormatLessThanOrEqualTo(Integer value) { + addCriterion("de_type_format <=", value, "deTypeFormat"); + return (Criteria) this; + } + + public Criteria andDeTypeFormatIn(List values) { + addCriterion("de_type_format in", values, "deTypeFormat"); + return (Criteria) this; + } + + public Criteria andDeTypeFormatNotIn(List values) { + addCriterion("de_type_format not in", values, "deTypeFormat"); + return (Criteria) this; + } + + public Criteria andDeTypeFormatBetween(Integer value1, Integer value2) { + addCriterion("de_type_format between", value1, value2, "deTypeFormat"); + return (Criteria) this; + } + + public Criteria andDeTypeFormatNotBetween(Integer value1, Integer value2) { + addCriterion("de_type_format not between", value1, value2, "deTypeFormat"); + return (Criteria) this; + } + public Criteria andDeExtractTypeIsNull() { addCriterion("de_extract_type is null"); return (Criteria) this; @@ -704,6 +834,66 @@ public class DatasetTableFieldExample { return (Criteria) this; } + public Criteria andExtFieldIsNull() { + addCriterion("ext_field is null"); + return (Criteria) this; + } + + public Criteria andExtFieldIsNotNull() { + addCriterion("ext_field is not null"); + return (Criteria) this; + } + + public Criteria andExtFieldEqualTo(Integer value) { + addCriterion("ext_field =", value, "extField"); + return (Criteria) this; + } + + public Criteria andExtFieldNotEqualTo(Integer value) { + addCriterion("ext_field <>", value, "extField"); + return (Criteria) this; + } + + public Criteria andExtFieldGreaterThan(Integer value) { + addCriterion("ext_field >", value, "extField"); + return (Criteria) this; + } + + public Criteria andExtFieldGreaterThanOrEqualTo(Integer value) { + addCriterion("ext_field >=", value, "extField"); + return (Criteria) this; + } + + public Criteria andExtFieldLessThan(Integer value) { + addCriterion("ext_field <", value, "extField"); + return (Criteria) this; + } + + public Criteria andExtFieldLessThanOrEqualTo(Integer value) { + addCriterion("ext_field <=", value, "extField"); + return (Criteria) this; + } + + public Criteria andExtFieldIn(List values) { + addCriterion("ext_field in", values, "extField"); + return (Criteria) this; + } + + public Criteria andExtFieldNotIn(List values) { + addCriterion("ext_field not in", values, "extField"); + return (Criteria) this; + } + + public Criteria andExtFieldBetween(Integer value1, Integer value2) { + addCriterion("ext_field between", value1, value2, "extField"); + return (Criteria) this; + } + + public Criteria andExtFieldNotBetween(Integer value1, Integer value2) { + addCriterion("ext_field not between", value1, value2, "extField"); + return (Criteria) this; + } + public Criteria andCheckedIsNull() { addCriterion("`checked` is null"); return (Criteria) this; diff --git a/backend/src/main/java/io/dataease/base/mapper/DatasetTableFieldMapper.xml b/backend/src/main/java/io/dataease/base/mapper/DatasetTableFieldMapper.xml index cc2d33244a..1b3a36b2c8 100644 --- a/backend/src/main/java/io/dataease/base/mapper/DatasetTableFieldMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/DatasetTableFieldMapper.xml @@ -7,10 +7,13 @@ + + + @@ -74,8 +77,8 @@ - id, table_id, origin_name, `name`, dataease_name, `type`, `size`, de_type, de_extract_type, - `checked`, column_index, last_sync_time + id, table_id, origin_name, `name`, dataease_name, group_type, `type`, `size`, de_type, + de_type_format, de_extract_type, ext_field, `checked`, column_index, last_sync_time
+
diff --git a/frontend/src/icons/svg/field_location.svg b/frontend/src/icons/svg/field_location.svg new file mode 100644 index 0000000000..7def81f700 --- /dev/null +++ b/frontend/src/icons/svg/field_location.svg @@ -0,0 +1 @@ + diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index 7eb5e4372c..83a21e830d 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -920,7 +920,9 @@ export default { m2: ' To', char_can_not_more_50: 'Dataset name can not more 50', task_add_title: 'Add Task', - task_edit_title: 'Edit Task' + task_edit_title: 'Edit Task', + field_group_type: 'Type', + location: 'Location' }, datasource: { datasource: 'Data Source', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index 5175cd8c92..2dee452ab8 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -920,7 +920,9 @@ export default { m2: ' 移動到', char_can_not_more_50: '數據集名稱不能超過50個字符', task_add_title: '添加任務', - task_edit_title: '編輯任務' + task_edit_title: '編輯任務', + field_group_type: '分類', + location: '地理位置' }, datasource: { datasource: '數據源', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 2ada5f399e..8aec5c620a 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -920,7 +920,9 @@ export default { m2: ' 移动到', char_can_not_more_50: '数据集名称不能超过50个字符', task_add_title: '添加任务', - task_edit_title: '编辑任务' + task_edit_title: '编辑任务', + field_group_type: '分类', + location: '地理位置' }, datasource: { datasource: '数据源', diff --git a/frontend/src/styles/index.scss b/frontend/src/styles/index.scss index 93ee1c8c13..a93b6726da 100644 --- a/frontend/src/styles/index.scss +++ b/frontend/src/styles/index.scss @@ -195,7 +195,7 @@ div:focus { .el-table__row { :hover { cursor: pointer; - } + } } td { padding: 3px 0 !important; @@ -235,6 +235,10 @@ div:focus { @extend %field-icon; color: #37b4aa; } +.field-icon-location{ + @extend %field-icon; + color: #F56C6C; +} .ds-icon-scene{ width: 13px; height: 13px; diff --git a/frontend/src/views/chart/components/drag-item/DimensionItem.vue b/frontend/src/views/chart/components/drag-item/DimensionItem.vue index a8f032f17e..b160a32e56 100644 --- a/frontend/src/views/chart/components/drag-item/DimensionItem.vue +++ b/frontend/src/views/chart/components/drag-item/DimensionItem.vue @@ -1,12 +1,23 @@ - + @@ -70,7 +79,21 @@ - + + + + + + diff --git a/frontend/src/views/dataset/data/UnionView.vue b/frontend/src/views/dataset/data/UnionView.vue index c31b8ac35e..f238094cc8 100644 --- a/frontend/src/views/dataset/data/UnionView.vue +++ b/frontend/src/views/dataset/data/UnionView.vue @@ -69,6 +69,9 @@ + + + {{ item.name }} @@ -115,6 +118,9 @@ + + + {{ item.name }} From 3af3e5798c1319645429a7518dfa377d277e7bb1 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Thu, 8 Jul 2021 14:00:06 +0800 Subject: [PATCH 6/8] =?UTF-8?q?feat:=20=E4=BB=BB=E5=8A=A1=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../commons/constants/TaskStatus.java | 5 + .../commons/constants/TriggerType.java | 5 + .../dataease/dto/dataset/DataSetTaskDTO.java | 18 + .../dataset/DataSetTableTaskService.java | 48 +- .../service/dataset/ExtractDataService.java | 52 +- .../db/migration/V11__system_task.sql | 14 + frontend/src/icons/svg/task.svg | 1 + frontend/src/lang/en.js | 19 +- frontend/src/lang/tw.js | 19 +- frontend/src/lang/zh.js | 3 +- .../src/views/system/task/DatasetTaskList.vue | 558 ++++++++++++++++++ frontend/src/views/system/task/TaskRecord.vue | 181 ++++++ frontend/src/views/system/task/dataset.vue | 65 ++ frontend/src/views/system/task/index.vue | 21 + 14 files changed, 974 insertions(+), 35 deletions(-) create mode 100644 backend/src/main/java/io/dataease/commons/constants/TaskStatus.java create mode 100644 backend/src/main/java/io/dataease/commons/constants/TriggerType.java create mode 100644 backend/src/main/java/io/dataease/dto/dataset/DataSetTaskDTO.java create mode 100644 backend/src/main/resources/db/migration/V11__system_task.sql create mode 100644 frontend/src/icons/svg/task.svg create mode 100644 frontend/src/views/system/task/DatasetTaskList.vue create mode 100644 frontend/src/views/system/task/TaskRecord.vue create mode 100644 frontend/src/views/system/task/dataset.vue create mode 100644 frontend/src/views/system/task/index.vue diff --git a/backend/src/main/java/io/dataease/commons/constants/TaskStatus.java b/backend/src/main/java/io/dataease/commons/constants/TaskStatus.java new file mode 100644 index 0000000000..148426c085 --- /dev/null +++ b/backend/src/main/java/io/dataease/commons/constants/TaskStatus.java @@ -0,0 +1,5 @@ +package io.dataease.commons.constants; + +public enum TaskStatus { + Underway, Stopped +} diff --git a/backend/src/main/java/io/dataease/commons/constants/TriggerType.java b/backend/src/main/java/io/dataease/commons/constants/TriggerType.java new file mode 100644 index 0000000000..ce33114a8b --- /dev/null +++ b/backend/src/main/java/io/dataease/commons/constants/TriggerType.java @@ -0,0 +1,5 @@ +package io.dataease.commons.constants; + +public enum TriggerType { + Cron, Custom +} diff --git a/backend/src/main/java/io/dataease/dto/dataset/DataSetTaskDTO.java b/backend/src/main/java/io/dataease/dto/dataset/DataSetTaskDTO.java new file mode 100644 index 0000000000..da22ebfbbe --- /dev/null +++ b/backend/src/main/java/io/dataease/dto/dataset/DataSetTaskDTO.java @@ -0,0 +1,18 @@ +package io.dataease.dto.dataset; + +import io.dataease.base.domain.DatasetTableTask; +import io.dataease.base.domain.DatasetTableTaskLog; +import lombok.Getter; +import lombok.Setter; + +/** + * @Author gin + * @Date 2021/3/9 3:19 下午 + */ +@Getter +@Setter +public class DataSetTaskDTO extends DatasetTableTask { + private String datasetName; + private Long nextExecTime; + private String taskStatus; +} diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskService.java index 0f3e5e5839..391a92ac69 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskService.java @@ -57,7 +57,7 @@ public class DataSetTableTaskService { public DatasetTableTask save(DataSetTaskRequest dataSetTaskRequest) throws Exception { checkName(dataSetTaskRequest); DatasetTableTask datasetTableTask = dataSetTaskRequest.getDatasetTableTask(); - if(!datasetTableTask.getType().equalsIgnoreCase("all_scope")){ + if(!datasetTableTask.getType().equalsIgnoreCase("add_scope")){ dataSetTableService.saveIncrementalConfig(dataSetTaskRequest.getDatasetTableIncrementalConfig()); } // check @@ -82,14 +82,24 @@ public class DataSetTableTaskService { datasetTableTask.setId(UUID.randomUUID().toString()); datasetTableTask.setCreateTime(System.currentTimeMillis()); datasetTableTask.setStatus(TaskStatus.Underway.name()); - if (datasetTableTask.getRate().equalsIgnoreCase(ScheduleType.SIMPLE.toString())) { // SIMPLE 类型,提前占位 - execNow(datasetTableTask); - } datasetTableTaskMapper.insert(datasetTableTask); } else { datasetTableTaskMapper.updateByPrimaryKeySelective(datasetTableTask); } - scheduleService.addSchedule(datasetTableTask); + if (datasetTableTask.getRate().equalsIgnoreCase(ScheduleType.SIMPLE.toString()) && datasetTableTask.getStatus().equalsIgnoreCase(TaskStatus.Underway.name())) { // SIMPLE 类型,提前占位 + execNow(datasetTableTask); + datasetTableTask.setLastExecStatus(JobStatus.Underway.name()); + datasetTableTask.setLastExecTime(System.currentTimeMillis()); + update(datasetTableTask); + } + if(!datasetTableTask.getRate().equalsIgnoreCase(ScheduleType.SIMPLE.name())){ + scheduleService.addSchedule(datasetTableTask); + }else { + if(datasetTableTask.getStatus().equalsIgnoreCase(JobStatus.Underway.name())){ + scheduleService.addSchedule(datasetTableTask); + } + } + return datasetTableTask; } @@ -100,17 +110,17 @@ public class DataSetTableTaskService { DataEaseException.throwException(Translator.get("i18n_not_exec_add_sync")); } } - if (extractDataService.updateSyncStatusIsNone(dataSetTableService.get(datasetTableTask.getTableId()))) { + if (extractDataService.existSyncTask(dataSetTableService.get(datasetTableTask.getTableId()), null)) { DataEaseException.throwException(Translator.get("i18n_sync_job_exists")); - } else { //write log - DatasetTableTaskLog datasetTableTaskLog = new DatasetTableTaskLog(); - datasetTableTaskLog.setTableId(datasetTableTask.getTableId()); - datasetTableTaskLog.setTaskId(datasetTableTask.getId()); - datasetTableTaskLog.setStatus(JobStatus.Underway.name()); - datasetTableTaskLog.setStartTime(System.currentTimeMillis()); - datasetTableTaskLog.setTriggerType(TriggerType.Custom.name()); - dataSetTableTaskLogService.save(datasetTableTaskLog); } + //write log + DatasetTableTaskLog datasetTableTaskLog = new DatasetTableTaskLog(); + datasetTableTaskLog.setTableId(datasetTableTask.getTableId()); + datasetTableTaskLog.setTaskId(datasetTableTask.getId()); + datasetTableTaskLog.setStatus(JobStatus.Underway.name()); + datasetTableTaskLog.setStartTime(System.currentTimeMillis()); + datasetTableTaskLog.setTriggerType(TriggerType.Custom.name()); + dataSetTableTaskLogService.save(datasetTableTaskLog); } public void delete(String id) { @@ -195,14 +205,16 @@ public class DataSetTableTaskService { } public void execTask(DatasetTableTask datasetTableTask) throws Exception{ + execNow(datasetTableTask); +// datasetTableTask.setStatus(TaskStatus.Underway.name()); + datasetTableTask.setLastExecStatus(JobStatus.Underway.name()); + datasetTableTask.setLastExecTime(System.currentTimeMillis()); + update(datasetTableTask); + if(datasetTableTask.getRate().equalsIgnoreCase(ScheduleType.CRON.toString())){ scheduleService.fireNow(datasetTableTask); } if(datasetTableTask.getRate().equalsIgnoreCase(ScheduleType.SIMPLE.toString())){ - execNow(datasetTableTask); - datasetTableTask.setStatus(TaskStatus.Underway.name()); - datasetTableTask.setLastExecStatus(JobStatus.Underway.name()); - update(datasetTableTask); scheduleService.addSchedule(datasetTableTask); } diff --git a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java index bbd3771d5c..008f2309bd 100644 --- a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java +++ b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java @@ -131,24 +131,42 @@ public class ExtractDataService { "fi\n" + "rm -rf %s\n"; - public synchronized boolean updateSyncStatusIsNone(DatasetTable datasetTable ){ + public synchronized boolean existSyncTask(DatasetTable datasetTable, DatasetTableTask datasetTableTask){ datasetTable.setSyncStatus(JobStatus.Underway.name()); - DatasetTableExample example = new DatasetTableExample(); example.createCriteria().andIdEqualTo(datasetTable.getId()).andSyncStatusNotEqualTo(JobStatus.Underway.name()); example.or(example.createCriteria().andIdEqualTo(datasetTable.getId()).andSyncStatusIsNull()); - return datasetTableMapper.updateByExampleSelective(datasetTable, example) == 0; + Boolean existSyncTask = datasetTableMapper.updateByExampleSelective(datasetTable, example) == 0; + if(existSyncTask){ + if(datasetTableTask != null){ + DatasetTableTaskLog datasetTableTaskLog = new DatasetTableTaskLog(); + datasetTableTaskLog.setTaskId(datasetTableTask.getId()); + datasetTableTaskLog.setTableId(datasetTable.getId()); + datasetTableTaskLog.setStatus(JobStatus.Underway.name()); + List datasetTableTaskLogs = dataSetTableTaskLogService.select(datasetTableTaskLog); + if(CollectionUtils.isNotEmpty(datasetTableTaskLogs) && datasetTableTaskLogs.get(0).getTriggerType().equalsIgnoreCase(TriggerType.Custom.name())){ + return false; + } + } + return true; + }else { + return false; + } } public void extractData(String datasetTableId, String taskId, String type, JobExecutionContext context) { DatasetTable datasetTable = getDatasetTable(datasetTableId); if(datasetTable == null){ LogUtil.error("Can not find DatasetTable: " + datasetTableId); + return; } DatasetTableTask datasetTableTask = datasetTableTaskMapper.selectByPrimaryKey(taskId); - boolean isCronJob = (datasetTableTask != null && datasetTableTask.getRate().equalsIgnoreCase(ScheduleType.CRON.toString())); - if(updateSyncStatusIsNone(datasetTable) && isCronJob){ - LogUtil.info("Skip synchronization task for table : " + datasetTableId); + if(datasetTableTask.getStatus().equalsIgnoreCase(TaskStatus.Stopped.name()) && !datasetTableTask.getRate().equalsIgnoreCase(ScheduleType.SIMPLE.name())){ + LogUtil.info("Skip synchronization task, task ID : " + datasetTableTask.getId()); + return; + } + if(existSyncTask(datasetTable, datasetTableTask)){ + LogUtil.info("Skip synchronization task for dataset, dataset ID : " + datasetTableId); return; } datasetTableTask.setLastExecTime(System.currentTimeMillis()); @@ -210,21 +228,25 @@ public class ExtractDataService { updateTableStatus(datasetTableId, datasetTable, JobStatus.Completed, execTime); +// if (datasetTableTask.getRate().equalsIgnoreCase(ScheduleType.SIMPLE.toString())) { +// datasetTableTask.setStatus(TaskStatus.Stopped.name()); +// } datasetTableTask.setLastExecStatus(JobStatus.Completed.name()); dataSetTableTaskService.update(datasetTableTask); + }catch (Exception e){ saveErrorLog(datasetTableId, taskId, e); datasetTableTask.setLastExecStatus(JobStatus.Error.name()); +// if (datasetTableTask.getRate().equalsIgnoreCase(ScheduleType.SIMPLE.toString())) { +// datasetTableTask.setStatus(TaskStatus.Stopped.name()); +// } dataSetTableTaskService.update(datasetTableTask); + sendWebMsg(datasetTable, taskId,false); updateTableStatus(datasetTableId, datasetTable, JobStatus.Error, null); dropDorisTable(DorisTableUtils.dorisTmpName(DorisTableUtils.dorisName(datasetTableId))); deleteFile("all_scope", datasetTableId); }finally { - if (datasetTableTask != null && datasetTableTask.getRate().equalsIgnoreCase(ScheduleType.SIMPLE.toString())) { - datasetTableTask.setStatus(TaskStatus.Stopped.name()); - dataSetTableTaskService.update(datasetTableTask); - } } break; @@ -283,6 +305,9 @@ public class ExtractDataService { updateTableStatus(datasetTableId, datasetTable, JobStatus.Completed, execTime); datasetTableTask.setLastExecStatus(JobStatus.Completed.name()); +// if (datasetTableTask.getRate().equalsIgnoreCase(ScheduleType.SIMPLE.toString())) { +// datasetTableTask.setStatus(TaskStatus.Stopped.name()); +// } dataSetTableTaskService.update(datasetTableTask); } }catch (Exception e){ @@ -290,14 +315,13 @@ public class ExtractDataService { sendWebMsg(datasetTable, taskId,false); updateTableStatus(datasetTableId, datasetTable, JobStatus.Error, null); datasetTableTask.setLastExecStatus(JobStatus.Error.name()); +// if (datasetTableTask.getRate().equalsIgnoreCase(ScheduleType.SIMPLE.toString())) { +// datasetTableTask.setStatus(TaskStatus.Stopped.name()); +// } dataSetTableTaskService.update(datasetTableTask); deleteFile("incremental_add", datasetTableId); deleteFile("incremental_delete", datasetTableId); }finally { - if (datasetTableTask != null && datasetTableTask.getRate().equalsIgnoreCase(ScheduleType.SIMPLE.toString())) { - datasetTableTask.setStatus(TaskStatus.Stopped.name()); - dataSetTableTaskService.update(datasetTableTask); - } } break; } diff --git a/backend/src/main/resources/db/migration/V11__system_task.sql b/backend/src/main/resources/db/migration/V11__system_task.sql new file mode 100644 index 0000000000..fdd213b273 --- /dev/null +++ b/backend/src/main/resources/db/migration/V11__system_task.sql @@ -0,0 +1,14 @@ +INSERT INTO `sys_menu` VALUES (57, 1, 3, 1, '任务管理', 'sys-task', 'system/task/index', 2000, 'task', 'system-task', b'0', b'0', b'0', NULL, NULL, NULL, NULL, NULL); +INSERT INTO `sys_menu` VALUES (58, 57, 0, 1, '数据集任务', 'sys-task-dataset', 'system/task/dataset', 1, 'task', 'dataset', b'0', b'0', b'0', NULL, NULL, NULL, NULL, NULL); +ALTER TABLE `dataset_table_task` + ADD COLUMN `last_exec_time` BIGINT(13) NULL DEFAULT NULL COMMENT '上次执行时间' AFTER `create_time`, + ADD COLUMN `status` VARCHAR(50) NULL DEFAULT NULL COMMENT '任务状态' AFTER `last_exec_time`, + ADD COLUMN `last_exec_status` VARCHAR(50) NULL DEFAULT NULL COMMENT '上次执行结果' AFTER `last_exec_time`; + +update dataset_table_task set status='Underway' where rate='CRON'; +update dataset_table_task set status='Stopped' where rate='SIMPLE_COMPLETE'; + + +ALTER TABLE `dataset_table_task_log` ADD COLUMN `trigger_type` VARCHAR(45) NULL AFTER `create_time`; + + diff --git a/frontend/src/icons/svg/task.svg b/frontend/src/icons/svg/task.svg new file mode 100644 index 0000000000..e5847ca8fc --- /dev/null +++ b/frontend/src/icons/svg/task.svg @@ -0,0 +1 @@ + diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index 7005db5a13..44c2078337 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -913,7 +913,24 @@ export default { m2: ' To', char_can_not_more_50: 'Dataset name can not more 50', task_add_title: 'Add Task', - task_edit_title: 'Edit Task' + task_edit_title: 'Edit Task', + task: { + list: 'Task list', + record: 'Execution record', + create: 'New task', + name: 'Task name', + last_exec_time: 'Last execution time', + next_exec_time: 'Next execution time', + last_exec_status: 'Last execution result', + task_status: 'Task status', + dataset: 'Data set', + search_by_name: 'Search by name', + underway: 'Running', + stopped: 'Stopped', + exec: 'Execute', + confirm_exec: 'Manual trigger execution?', + change_success: 'State switch successful' + } }, datasource: { datasource: 'Data Source', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index a710479e05..4113890173 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -913,7 +913,24 @@ export default { m2: ' 移動到', char_can_not_more_50: '數據集名稱不能超過50個字符', task_add_title: '添加任務', - task_edit_title: '編輯任務' + task_edit_title: '編輯任務', + task: { + list: '任務列表', + record: '執行紀錄', + create: '新建任務', + name: '任務名稱', + last_exec_time: '上次執行時間', + next_exec_time: '下次執行時間', + last_exec_status: '上次執行結果', + task_status: '任務狀態', + dataset: '數據集', + search_by_name: '根據名稱搜索', + underway: '運行中', + stopped: '停止', + exec: '執行', + confirm_exec: '手動觸發執行?', + change_success: '狀態切換成功' + } }, datasource: { datasource: '數據源', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 8109f5cbea..a2d1745262 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -928,7 +928,8 @@ export default { underway: '运行中', stopped: '停止', exec: '执行', - confirm_exec: '手动触发执行?' + confirm_exec: '手动触发执行?', + change_success: '状态切换成功' } }, datasource: { diff --git a/frontend/src/views/system/task/DatasetTaskList.vue b/frontend/src/views/system/task/DatasetTaskList.vue new file mode 100644 index 0000000000..c938a3119a --- /dev/null +++ b/frontend/src/views/system/task/DatasetTaskList.vue @@ -0,0 +1,558 @@ + + + + + diff --git a/frontend/src/views/system/task/TaskRecord.vue b/frontend/src/views/system/task/TaskRecord.vue new file mode 100644 index 0000000000..a9f3056c4f --- /dev/null +++ b/frontend/src/views/system/task/TaskRecord.vue @@ -0,0 +1,181 @@ + + + + + diff --git a/frontend/src/views/system/task/dataset.vue b/frontend/src/views/system/task/dataset.vue new file mode 100644 index 0000000000..fcdacfa1d9 --- /dev/null +++ b/frontend/src/views/system/task/dataset.vue @@ -0,0 +1,65 @@ + + + + + diff --git a/frontend/src/views/system/task/index.vue b/frontend/src/views/system/task/index.vue new file mode 100644 index 0000000000..0d8026c857 --- /dev/null +++ b/frontend/src/views/system/task/index.vue @@ -0,0 +1,21 @@ + + + + From 4ee8896a4fd44533a876bc8f1dba3522b136b822 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Thu, 8 Jul 2021 14:12:30 +0800 Subject: [PATCH 7/8] =?UTF-8?q?feat:=20=E4=BB=BB=E5=8A=A1=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/dataease/listener/AppStartListener.java | 4 ---- .../src/main/resources/db/migration/V12__system_task.sql | 6 +++--- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/backend/src/main/java/io/dataease/listener/AppStartListener.java b/backend/src/main/java/io/dataease/listener/AppStartListener.java index 5d5aa70e6b..ffd313c23a 100644 --- a/backend/src/main/java/io/dataease/listener/AppStartListener.java +++ b/backend/src/main/java/io/dataease/listener/AppStartListener.java @@ -42,10 +42,6 @@ public class AppStartListener implements ApplicationListener Date: Thu, 8 Jul 2021 14:27:34 +0800 Subject: [PATCH 8/8] =?UTF-8?q?feat:=20=E8=A7=86=E5=9B=BE=E8=BF=94?= =?UTF-8?q?=E5=9B=9Esql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/dataease/dto/chart/ChartViewDTO.java | 1 + .../service/chart/ChartViewService.java | 51 ++++++++++--------- ...__system_task.sql => V13__system_task.sql} | 0 3 files changed, 27 insertions(+), 25 deletions(-) rename backend/src/main/resources/db/migration/{V12__system_task.sql => V13__system_task.sql} (100%) diff --git a/backend/src/main/java/io/dataease/dto/chart/ChartViewDTO.java b/backend/src/main/java/io/dataease/dto/chart/ChartViewDTO.java index 2adf9f6453..2a48769ef6 100644 --- a/backend/src/main/java/io/dataease/dto/chart/ChartViewDTO.java +++ b/backend/src/main/java/io/dataease/dto/chart/ChartViewDTO.java @@ -19,4 +19,5 @@ public class ChartViewDTO extends ChartViewWithBLOBs { private Boolean isLeaf; private String pid; + private String sql; } diff --git a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java index 2d5d9cc40f..b6d6fe8e9a 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -173,6 +173,7 @@ public class ChartViewService { throw new RuntimeException(Translator.get("i18n_dataset_delete")); } // 判断连接方式,直连或者定时抽取 table.mode + DatasourceRequest datasourceRequest = new DatasourceRequest(); List data = new ArrayList<>(); if (table.getMode() == 0) {// 直连 Datasource ds = datasourceService.get(table.getDataSourceId()); @@ -180,7 +181,6 @@ public class ChartViewService { throw new RuntimeException(Translator.get("i18n_datasource_delete")); } DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType()); - DatasourceRequest datasourceRequest = new DatasourceRequest(); datasourceRequest.setDatasource(ds); DataTableInfoDTO dataTableInfoDTO = new Gson().fromJson(table.getInfo(), DataTableInfoDTO.class); QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); @@ -201,20 +201,19 @@ public class ChartViewService { data = datasourceProvider.getData(datasourceRequest); /** * 直连不实用缓存 - String key = "provider_sql_"+datasourceRequest.getDatasource().getId() + "_" + datasourceRequest.getTable() + "_" +datasourceRequest.getQuery(); - Object cache; - if ((cache = CacheUtils.get(JdbcConstants.JDBC_PROVIDER_KEY, key)) == null) { - data = datasourceProvider.getData(datasourceRequest); - CacheUtils.put(JdbcConstants.JDBC_PROVIDER_KEY,key ,data, null, null); - }else { - data = (List) cache; - } + String key = "provider_sql_"+datasourceRequest.getDatasource().getId() + "_" + datasourceRequest.getTable() + "_" +datasourceRequest.getQuery(); + Object cache; + if ((cache = CacheUtils.get(JdbcConstants.JDBC_PROVIDER_KEY, key)) == null) { + data = datasourceProvider.getData(datasourceRequest); + CacheUtils.put(JdbcConstants.JDBC_PROVIDER_KEY,key ,data, null, null); + }else { + data = (List) cache; + } */ } else if (table.getMode() == 1) {// 抽取 // 连接doris,构建doris数据源查询 Datasource ds = (Datasource) CommonBeanFactory.getBean("DorisDatasource"); DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType()); - DatasourceRequest datasourceRequest = new DatasourceRequest(); datasourceRequest.setDatasource(ds); String tableName = "ds_" + table.getId().replaceAll("-", "_"); datasourceRequest.setTable(tableName); @@ -243,12 +242,12 @@ public class ChartViewService { // 仪表板有参数不实用缓存 if (CollectionUtils.isNotEmpty(requestList.getFilter())) { data = datasourceProvider.getData(datasourceRequest); - }else { - try{ + } else { + try { data = cacheViewData(datasourceProvider, datasourceRequest, id); - }catch (Exception e) { + } catch (Exception e) { LogUtil.error(e); - }finally { + } finally { // 如果当前对象被锁 且 当前线程冲入次数 > 0 则释放锁 if (lock.isLocked() && lock.getHoldCount() > 0) { lock.unlock(); @@ -320,40 +319,42 @@ public class ChartViewService { ChartViewDTO dto = new ChartViewDTO(); BeanUtils.copyBean(dto, view); dto.setData(map); + dto.setSql(datasourceRequest.getQuery()); return dto; } /** * 避免缓存击穿 * 虽然流量不一定能够达到击穿的水平 + * * @param datasourceProvider * @param datasourceRequest * @param viewId * @return * @throws Exception */ - public List cacheViewData(DatasourceProvider datasourceProvider, DatasourceRequest datasourceRequest, String viewId) throws Exception{ - List result ; + public List cacheViewData(DatasourceProvider datasourceProvider, DatasourceRequest datasourceRequest, String viewId) throws Exception { + List result; Object cache = CacheUtils.get(JdbcConstants.VIEW_CACHE_KEY, viewId); if (cache == null) { if (lock.tryLock()) {// 获取锁成功 - try{ + try { result = datasourceProvider.getData(datasourceRequest); if (result != null) { CacheUtils.put(JdbcConstants.VIEW_CACHE_KEY, viewId, result, null, null); } - }catch (Exception e) { + } catch (Exception e) { LogUtil.error(e); throw e; - }finally { + } finally { lock.unlock(); } - }else {//获取锁失败 + } else {//获取锁失败 Thread.sleep(100);//避免CAS自旋频率过大 占用cpu资源过高 result = cacheViewData(datasourceProvider, datasourceRequest, viewId); } - }else { - result = (List)cache; + } else { + result = (List) cache; } return result; } @@ -402,11 +403,11 @@ public class ChartViewService { public String chartCopy(String id) { String newChartId = UUID.randomUUID().toString(); - extChartViewMapper.chartCopy(newChartId,id); + extChartViewMapper.chartCopy(newChartId, id); return newChartId; } - public String searchAdviceSceneId(String panelId){ - return extChartViewMapper.searchAdviceSceneId(AuthUtils.getUser().getUserId().toString(),panelId); + public String searchAdviceSceneId(String panelId) { + return extChartViewMapper.searchAdviceSceneId(AuthUtils.getUser().getUserId().toString(), panelId); } } diff --git a/backend/src/main/resources/db/migration/V12__system_task.sql b/backend/src/main/resources/db/migration/V13__system_task.sql similarity index 100% rename from backend/src/main/resources/db/migration/V12__system_task.sql rename to backend/src/main/resources/db/migration/V13__system_task.sql