diff --git a/backend/src/main/java/io/dataease/job/sechedule/strategy/TaskHandler.java b/backend/src/main/java/io/dataease/job/sechedule/strategy/TaskHandler.java index be507d3732..fead202746 100644 --- a/backend/src/main/java/io/dataease/job/sechedule/strategy/TaskHandler.java +++ b/backend/src/main/java/io/dataease/job/sechedule/strategy/TaskHandler.java @@ -21,6 +21,7 @@ public abstract class TaskHandler implements InitializingBean { if (CronUtils.taskExpire(endTime)) { // 过期了就删除任务 return; } + if (!taskEntity.getStatus()) return; JobKey jobKey = new JobKey(taskEntity.getTaskId().toString()); TriggerKey triggerKey = new TriggerKey(taskEntity.getTaskId().toString()); Date start = new Date(taskEntity.getStartTime()); diff --git a/backend/src/main/java/io/dataease/job/sechedule/strategy/impl/EmailTaskHandler.java b/backend/src/main/java/io/dataease/job/sechedule/strategy/impl/EmailTaskHandler.java index da97c6c019..2084079934 100644 --- a/backend/src/main/java/io/dataease/job/sechedule/strategy/impl/EmailTaskHandler.java +++ b/backend/src/main/java/io/dataease/job/sechedule/strategy/impl/EmailTaskHandler.java @@ -94,7 +94,7 @@ public class EmailTaskHandler extends TaskHandler implements Job { Boolean isTempTask = (Boolean) jobDataMap.getOrDefault(IS_TEMP_TASK, false); GlobalTaskEntity taskEntity = (GlobalTaskEntity) jobDataMap.get("taskEntity"); ScheduleManager scheduleManager = SpringContextUtil.getBean(ScheduleManager.class); - if (!isTempTask && CronUtils.taskExpire(taskEntity.getEndTime())) { + if (!isTempTask && (CronUtils.taskExpire(taskEntity.getEndTime()) || !taskEntity.getStatus())) { removeTask(scheduleManager, taskEntity); return; } @@ -167,7 +167,7 @@ public class EmailTaskHandler extends TaskHandler implements Job { try { XpackEmailTemplateDTO emailTemplateDTO = emailXpackService.emailTemplate(taskInstance.getTaskId()); XpackEmailTaskRequest taskForm = emailXpackService.taskForm(taskInstance.getTaskId()); - if (ObjectUtils.isEmpty(taskForm) || (!isTempTask && CronUtils.taskExpire(taskForm.getEndTime()))) { + if (ObjectUtils.isEmpty(taskForm) || (!isTempTask && (CronUtils.taskExpire(taskForm.getEndTime()) || !taskForm.getStatus()))) { removeInstance(taskInstance); return; } diff --git a/backend/src/main/java/io/dataease/plugins/server/XEmailTaskServer.java b/backend/src/main/java/io/dataease/plugins/server/XEmailTaskServer.java index 8fa6610dee..1e0ecb114f 100644 --- a/backend/src/main/java/io/dataease/plugins/server/XEmailTaskServer.java +++ b/backend/src/main/java/io/dataease/plugins/server/XEmailTaskServer.java @@ -80,7 +80,7 @@ public class XEmailTaskServer { List tasks = emailXpackService.taskGrid(request); if (CollectionUtils.isNotEmpty(tasks)) { tasks.forEach(item -> { - if (CronUtils.taskExpire(item.getEndTime())) { + if (CronUtils.taskExpire(item.getEndTime()) || !item.getStatus()) { item.setNextExecTime(null); } else { GlobalTaskEntity globalTaskEntity = new GlobalTaskEntity(); @@ -110,8 +110,16 @@ public class XEmailTaskServer { EmailXpackService emailXpackService = SpringContextUtil.getBean(EmailXpackService.class); XpackEmailTaskRequest request = emailXpackService.taskForm(taskId); GlobalTaskEntity globalTaskEntity = BeanUtils.copyBean(new GlobalTaskEntity(), request); + Boolean invalid = false; if (CronUtils.taskExpire(globalTaskEntity.getEndTime())) { globalTaskEntity.setEndTime(null); + invalid = true; + } + if (!globalTaskEntity.getStatus()) { + globalTaskEntity.setStatus(true); + invalid = true; + } + if (invalid) { scheduleService.addTempSchedule(globalTaskEntity); return; } @@ -270,6 +278,12 @@ public class XEmailTaskServer { emailXpackService.stop(taskId); } + @PostMapping("/start/{taskId}") + public Boolean start(@PathVariable Long taskId) throws Exception { + EmailXpackService emailXpackService = SpringContextUtil.getBean(EmailXpackService.class); + return emailXpackService.start(taskId); + } + @PostMapping("/queryInstancies/{goPage}/{pageSize}") public Pager> instancesGrid(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody XpackGridRequest request) { diff --git a/backend/src/main/resources/db/migration/V46__1.18.sql b/backend/src/main/resources/db/migration/V46__1.18.sql index fceebb2b25..e3ae313c56 100644 --- a/backend/src/main/resources/db/migration/V46__1.18.sql +++ b/backend/src/main/resources/db/migration/V46__1.18.sql @@ -4,3 +4,7 @@ ALTER TABLE `panel_app_template_log` UPDATE `panel_subject` SET `details` = '{\"width\":1600,\"height\":900,\"scale\":100,\"scaleWidth\":100,\"scaleHeight\":100,\"selfAdaption\":true,\"auxiliaryMatrix\":true,\"openCommonStyle\":true,\"panel\":{\"themeColor\":\"light\",\"color\":\"#F1F3F5\",\"imageUrl\":{},\"backgroundType\":\"color\",\"gap\":\"yes\",\"resultMode\":\"all\",\"resultCount\":1000},\"aidedDesign\":{\"showGrid\":false,\"matrixBase\":4},\"refreshViewLoading\":true,\"refreshUnit\":\"minute\",\"refreshTime\":5,\"themeId\":\"251a25d0-7ac5-11ed-9e50-5f9360ac1250\",\"chartInfo\":{\"chartTitle\":{\"show\":true,\"fontSize\":\"18\",\"color\":\"#000000\",\"hPosition\":\"left\",\"vPosition\":\"top\",\"isItalic\":false,\"isBolder\":true},\"chartColor\":{\"value\":\"default\",\"colors\":[\"#5470c6\",\"#91cc75\",\"#fac858\",\"#ee6666\",\"#73c0de\",\"#3ba272\",\"#fc8452\",\"#9a60b4\",\"#ea7ccc\"],\"alpha\":100,\"tableHeaderBgColor\":\"#6D9A49\",\"tableItemBgColor\":\"#FFFFFF\",\"tableFontColor\":\"#000000\",\"tableStripe\":true,\"dimensionColor\":\"#000000\",\"quotaColor\":\"#4E81BB\",\"tableBorderColor\":\"#E6E7E4\",\"seriesColors\":[],\"tableHeaderFontColor\":\"#000000\"},\"chartCommonStyle\":{\"backgroundColorSelect\":true,\"color\":\"#FFFFFF\",\"alpha\":100,\"borderRadius\":5,\"innerPadding\":0},\"filterStyle\":{\"horizontal\":\"left\",\"vertical\":\"top\",\"color\":\"#000000\",\"brColor\":\"#DCDFE6\",\"wordColor\":\"#606266\",\"innerBgColor\":\"#FFFFFF\"}}}' WHERE `id` = 'system_1'; + + +ALTER TABLE `sys_task` + ADD COLUMN `status` tinyint(1) NULL DEFAULT 1 COMMENT '运行状态' AFTER `create_time`; diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index ac436f358b..27708a6d37 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -2596,6 +2596,13 @@ export default { search_by_name: 'Search by name', exec_time: 'Execute time', status: 'Execute status', + task_status: 'Task status', + running: 'Running', + stopped: 'Stopped', + start: 'Start', + start_success: 'Start success', + start_success_but: ', But the task expired, please manually change the end time', + sure_batch_delete: 'Are you sure you want to delete tasks in bulk?', pixel_error: 'Pixel only support {800 - 10000} * {500 - 6250}', next_exec_time: 'Next execute time' diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index 04b53e0a1a..cc4a6bda24 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -2590,6 +2590,13 @@ export default { search_by_name: '根據名稱搜索', exec_time: '執行時間', status: '執行狀態', + task_status: '任務狀態', + running: '運行中', + stopped: '已停止', + start: '啟用', + start_success: '啟用成功', + start_success_but: ',但任務過期,請手動更改結束時間', + sure_batch_delete: '確定批量刪除任務嗎?', pixel_error: '分辨率支持{800 - 10000} * {500 - 6250}', next_exec_time: '下次執行時間' diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 343469f9ef..d4de2d534d 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -2590,6 +2590,13 @@ export default { search_by_name: '根据名称搜索', exec_time: '执行时间', status: '执行状态', + task_status: '任务状态', + running: '运行中', + stopped: '已停止', + start: '启用', + start_success: '启用成功', + start_success_but: ',但任务过期,请手动更改结束时间', + sure_batch_delete: '确定批量删除任务吗?', pixel_error: '分辨率支持{800 - 10000} * {500 - 6250}', next_exec_time: '下次执行时间'