From 4ec04eda71cb735b517aac50c3362eb3cf104c82 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Thu, 12 Aug 2021 16:29:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=9C=A8=E7=BA=BF=E7=94=9F=E6=88=90cron=E8=A1=A8?= =?UTF-8?q?=E8=BE=BE=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/static/css/zen-checkbox.css | 149 +++ .../main/resources/static/fonts/zenicon.woff | Bin 0 -> 84992 bytes .../src/main/resources/static/js/cron.js | 926 +++++++++++++ .../core/controller/BaseController.java | 8 + .../quartz/controller/SysJobController.java | 28 + .../java/com/ruoyi/quartz/util/CronUtils.java | 31 + .../resources/templates/monitor/job/cron.html | 1172 +++++++++++++++++ .../resources/templates/monitor/job/job.html | 16 + 8 files changed, 2330 insertions(+) create mode 100644 ruoyi-admin/src/main/resources/static/css/zen-checkbox.css create mode 100644 ruoyi-admin/src/main/resources/static/fonts/zenicon.woff create mode 100644 ruoyi-admin/src/main/resources/static/js/cron.js create mode 100644 ruoyi-quartz/src/main/resources/templates/monitor/job/cron.html diff --git a/ruoyi-admin/src/main/resources/static/css/zen-checkbox.css b/ruoyi-admin/src/main/resources/static/css/zen-checkbox.css new file mode 100644 index 00000000..c8186e9b --- /dev/null +++ b/ruoyi-admin/src/main/resources/static/css/zen-checkbox.css @@ -0,0 +1,149 @@ +@font-face { + font-family:ZenIcon;src:url(../fonts/zenicon.woff?v=2.2.0) format('woff') +} + +.checkbox-primary,.radio-primary { + position: relative; + display: block +} + +.checkbox-primary>input,.radio-primary>input { + position: absolute; + top: 0; + left: 0; + z-index: 3; + width: 100%; + width: 20px; + height: 100%; + margin: 0; + opacity: 0 +} + +.checkbox-primary>label,.radio-primary>label { + padding-left: 25px; + font-weight: 400; + cursor: pointer +} + +.checkbox-primary>label:after,.checkbox-primary>label:before,.radio-primary>label:after,.radio-primary>label:before { + position: absolute; + top: 2px; + right: 0; + left: 0; + display: block; + width: 16px; + height: 16px; + line-height: 16px; + text-align: center; + content: ' '; + border-radius: 2px +} + +.checkbox-primary>label:after,.radio-primary>label:after { + z-index: 1; + border: 1px solid gray; + -webkit-transition: .4s cubic-bezier(.175,.885,.32,1); + -o-transition: .4s cubic-bezier(.175,.885,.32,1); + transition: .4s cubic-bezier(.175,.885,.32,1); + -webkit-transition-property: border,background-color; + -o-transition-property: border,background-color; + transition-property: border,background-color +} + +.checkbox-primary>label:before,.radio-primary>label:before { + top: 3px; + z-index: 2; + font-family: ZenIcon; + font-size: 14px; + font-style: normal; + font-weight: 400; + font-variant: normal; + line-height: 1; + text-transform: none; + content: '\e60d'; + opacity: 0; + -webkit-transition: .2s cubic-bezier(.175,.885,.32,1); + -o-transition: .2s cubic-bezier(.175,.885,.32,1); + transition: .2s cubic-bezier(.175,.885,.32,1); + -webkit-transition-property: opacity,-webkit-transform; + -o-transition-property: opacity,-o-transform; + transition-property: opacity,-webkit-transform; + transition-property: opacity,transform; + transition-property: opacity,transform,-webkit-transform,-o-transform; + -webkit-transform: scale(0); + -ms-transform: scale(0); + -o-transform: scale(0); + transform: scale(0); + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale +} + +.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after { + background-color: #3280fc; + border-color: #3280fc; + border-width: 4px +} + +.checkbox-primary.checked>label:before,.checkbox-primary>input:checked+label:before,.radio-primary.checked>label:before,.radio-primary>input:checked+label:before { + color: #fff; + opacity: 1; + -webkit-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1) +} + +.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after { + border-color: #3280fc; + -webkit-box-shadow: 0 0 8px #3280fc; + box-shadow: 0 0 8px #3280fc +} + +.checkbox-primary input:disabled+label:after,.checkbox-primary.disabled>label:after,.radio-primary input:disabled+label:after,.radio-primary.disabled>label:after { + background-color: #e5e5e5; + border-color: #bbb +} + +.checkbox-primary input:disabled:checked+label:after,.checkbox-primary.checked.disabled>label:after,.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after { + background-color: #bbb +} + +.radio-primary>label:after { + border-radius: 50% +} + +.radio-primary>label:before { + top: 7px; + left: 5px; + width: 6px; + height: 6px; + content: ' '; + border: 0; + border-radius: 50% +} + +.radio-primary.checked>label:after,.radio-primary>input:checked+label:after { + background-color: transparent; + border-color: #3280fc; + border-width: 2px +} + +.radio-primary.checked>label:before,.radio-primary>input:checked+label:before { + background-color: #3280fc +} + +.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after { + background-color: transparent; + border-color: #bbb +} + +.radio-primary input:disabled:checked+label:before,.radio-primary.checked.disabled>label:before { + background-color: #bbb +} + +.tab-cron .tab-pane .tabsecondchk .checkbox-primary,.tab-qqskey .tab-pane .tabsecondchk .checkbox-primary { + width: 50px; + display: inline-block; + margin-bottom: 10px +} \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/static/fonts/zenicon.woff b/ruoyi-admin/src/main/resources/static/fonts/zenicon.woff new file mode 100644 index 0000000000000000000000000000000000000000..8dd67e0ed7f873f265ca580c5187fa974fda8f8c GIT binary patch literal 84992 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 59) { + v2 = 59; + $("#sec_circle2").val(v2); + } + if (v1 > 59) { + v1 = 59; + $("#sec_circle1").val(v1); + } + if (v1 >= v2) { + v1 = v2 - 1; + $("#sec_circle1").val(v1); + } + if (v1 > 60 || v2 > 60) { + return; + } + if (v1 > v2) { + return; + } + $("#v_second").val(v1 + "-" + v2); + gen_cron(); +} + +function change_sec_per() { + var v1 = $("#sec_per1").val(); + var v2 = $("#sec_per2").val(); + if (v1 == null || v1 == '' || v2 == null || v2 == '') { + return; + } + if (v1 < 0) { + v1 = 0; + $("#sec_per1").val(v1); + } + if (v1 > 59) { + v1 = 59; + $("#sec_per1").val(v1); + } + if (v2 < 1) { + v2 = 1; + $("#sec_per2").val(v2); + } + if (v2 > 59) { + v2 = 59; + $("#sec_per2").val(v2); + } + $("#v_second").val(v1 + "/" + v2); + gen_cron() +} + +function change_min_assign() { + var sec_array = new Array(); + $("input[name='zd_minute']:checked").each(function () { + sec_array[sec_array.length] = $(this).val(); + }); + sec_array = sec_array.join(","); + if (sec_array == null || sec_array == '') { + $("#v_min").val("*"); + } else { + $("#v_min").val(sec_array); + } + gen_cron(); +} + +function change_min_circle() { + var v1 = $("#min_circle1").val(); + var v2 = $("#min_circle2").val(); + if (v1 == null || v1 == '' || v2 == null || v2 == '') { + return; + } + if (v1 < 1) { + v1 = 1; + $("#min_circle1").val(v1); + } + if (v2 < 2) { + v2 = 2; + $("#min_circle2").val(v2); + } + if (v2 > 59) { + v2 = 59; + $("#min_circle2").val(v2); + } + if (v1 > 59) { + v1 = 59; + $("#min_circle1").val(v1); + } + if (v1 >= v2) { + v1 = v2 - 1; + $("#min_circle1").val(v1); + } + if (v1 > 60 || v2 > 60) { + return; + } + if (v1 > v2) { + return; + } + $("#v_min").val(v1 + "-" + v2); + gen_cron(); +} + +function change_min_per() { + var v1 = $("#min_per1").val(); + var v2 = $("#min_per2").val(); + if (v1 == null || v1 == '' || v2 == null || v2 == '') { + return; + } + if (v1 < 0) { + v1 = 0; + $("#min_per1").val(v1); + } + if (v1 > 59) { + v1 = 59; + $("#min_per1").val(v1); + } + if (v2 < 1) { + v2 = 1; + $("#min_per2").val(v2); + } + if (v2 > 59) { + v2 = 59; + $("#min_per2").val(v2); + } + + $("#v_min").val(v1 + "/" + v2); + gen_cron() +} + +function change_hour_assign() { + var sec_array = new Array(); + $("input[name='zd_hour']:checked").each(function () { + sec_array[sec_array.length] = $(this).val(); + }); + sec_array = sec_array.join(","); + if (sec_array == null || sec_array == '') { + $("#v_hour").val("*"); + } else { + $("#v_hour").val(sec_array); + } + gen_cron(); +} + +function change_hour_circle() { + var v1 = $("#hour_circle1").val(); + var v2 = $("#hour_circle2").val(); + if (v1 == null || v1 == '' || v2 == null || v2 == '') { + return; + } + if (v1 < 1) { + v1 = 1; + $("#hour_circle1").val(v1); + } + if (v2 < 2) { + v2 = 2; + $("#hour_circle2").val(v2); + } + if (v2 > 23) { + v2 = 23; + $("#hour_circle2").val(v2); + } + if (v1 > 23) { + v1 = 23; + $("#hour_circle1").val(v1); + } + if (v1 >= v2) { + v1 = v2 - 1; + $("#hour_circle1").val(v1); + } + if (v1 > 23 || v2 > 23) { + return; + } + if (v1 > v2) { + return; + } + $("#v_hour").val(v1 + "-" + v2); + gen_cron(); +} + +function change_hour_per() { + var v1 = $("#hour_per1").val(); + var v2 = $("#hour_per2").val(); + if (v1 == null || v1 == '' || v2 == null || v2 == '') { + return; + } + if (v1 < 0) { + v1 = 0; + $("#hour_per1").val(v1); + } + if (v1 > 23) { + v1 = 23; + $("#hour_per1").val(v1); + } + if (v2 < 1) { + v2 = 1; + $("#hour_per2").val(v2); + } + if (v2 > 23) { + v2 = 23; + $("#hour_per2").val(v2); + } + + $("#v_hour").val(v1 + "/" + v2); + gen_cron() +} + +function change_day_assign() { + var sec_array = new Array(); + $("input[name='zd_day']:checked").each(function () { + sec_array[sec_array.length] = $(this).val(); + }); + sec_array = sec_array.join(","); + if (sec_array == null || sec_array == '') { + $("#v_day").val("*"); + } else { + $("#v_day").val(sec_array); + } + gen_cron(); +} + +function change_day_circle() { + var v1 = $("#day_circle1").val(); + var v2 = $("#day_circle2").val(); + if (v1 == null || v1 == '' || v2 == null || v2 == '') { + return; + } + if (v1 < 1) { + v1 = 1; + $("#day_circle1").val(v1); + } + if (v2 < 2) { + v2 = 2; + $("#day_circle2").val(v2); + } + if (v2 > 31) { + v2 = 31; + $("#day_circle2").val(v2); + } + if (v1 > 31) { + v1 = 31; + $("#day_circle1").val(v1); + } + if (v1 >= v2) { + v1 = v2 - 1; + $("#day_circle1").val(v1); + } + if (v1 > 31 || v2 > 31) { + return; + } + if (v1 > v2) { + return; + } + $("#v_day").val(v1 + "-" + v2); + gen_cron(); +} + +function change_day_per() { + var v1 = $("#day_per1").val(); + var v2 = $("#day_per2").val(); + if (v1 == null || v1 == '' || v2 == null || v2 == '') { + return; + } + if (v1 < 1) { + v1 = 1; + $("#day_per1").val(v1); + } + if (v1 > 31) { + v1 = 31; + $("#day_per1").val(v1); + } + if (v2 < 1) { + v2 = 1; + $("#day_per2").val(v2); + } + if (v2 > 31) { + v2 = 31; + $("#day_per2").val(v2); + } + + $("#v_day").val(v1 + "/" + v2); + gen_cron() +} + +function change_day_work() { + var v1 = $("#day_work1").val(); + + if (v1 == null || v1 == '') { + return; + } + if (v1 < 1) { + v1 = 1; + $("#day_work1").val(v1); + } + if (v1 > 31) { + v1 = 31; + $("#day_work1").val(v1); + } + $("#v_day").val(v1 + "W"); + gen_cron() +} + +function change_month_assign() { + var sec_array = new Array(); + $("input[name='zd_month']:checked").each(function () { + sec_array[sec_array.length] = $(this).val(); + }); + sec_array = sec_array.join(","); + if (sec_array == null || sec_array == '') { + $("#v_month").val("*"); + } else { + $("#v_month").val(sec_array); + } + gen_cron(); +} + +function change_month_circle() { + var v1 = $("#month_circle1").val(); + var v2 = $("#month_circle2").val(); + if (v1 == null || v1 == '' || v2 == null || v2 == '') { + return; + } + if (v1 < 1) { + v1 = 1; + $("#month_circle1").val(v1); + } + if (v2 < 2) { + v2 = 2; + $("#month_circle2").val(v2); + } + if (v2 > 12) { + v2 = 12; + $("#month_circle2").val(v2); + } + if (v1 > 12) { + v1 = 12; + $("#month_circle1").val(v1); + } + if (v1 >= v2) { + v1 = v2 - 1; + $("#month_circle1").val(v1); + } + if (v1 > 12 || v2 > 12) { + return; + } + if (v1 > v2) { + return; + } + $("#v_month").val(v1 + "-" + v2); + gen_cron(); +} + +function change_month_per() { + var v1 = $("#month_per1").val(); + var v2 = $("#month_per2").val(); + if (v1 == null || v1 == '' || v2 == null || v2 == '') { + return; + } + if (v1 < 1) { + v1 = 1; + $("#month_per1").val(v1); + } + if (v1 > 12) { + v1 = 12; + $("#month_per1").val(v1); + } + if (v2 < 1) { + v2 = 1; + $("#month_per2").val(v2); + } + if (v2 > 12) { + v2 = 12; + $("#month_per2").val(v2); + } + + $("#v_month").val(v1 + "/" + v2); + gen_cron() +} + +function change_week_assign() { + var sec_array = new Array(); + $("input[name='zd_week']:checked").each(function () { + sec_array[sec_array.length] = $(this).val(); + }); + sec_array = sec_array.join(","); + if (sec_array == null || sec_array == '') { + $("#v_week").val("*"); + } else { + $("#v_week").val(sec_array); + } + gen_cron(); +} + +function change_week_circle() { + var v1 = $("#week_circle1").val(); + var v2 = $("#week_circle2").val(); + if (v1 == null || v1 == '' || v2 == null || v2 == '') { + return; + } + if (v1 < 1) { + v1 = 1; + $("#week_circle1").val(v1); + } + if (v2 < 2) { + v2 = 2; + $("#week_circle2").val(v2); + } + if (v2 > 7) { + v2 = 7; + $("#week_circle2").val(v2); + } + if (v1 > 7) { + v1 = 7; + $("#week_circle1").val(v1); + } + if (v1 >= v2) { + v1 = v2 - 1; + $("#week_circle1").val(v1); + } + if (v1 > 7 || v2 > 7) { + return; + } + if (v1 > v2) { + return; + } + $("#v_week").val(v1 + "-" + v2); + gen_cron(); +} + +function change_week_last() { + var v1 = $("#week_last1").val(); + + if (v1 == null || v1 == '') { + return; + } + if (v1 < 1) { + v1 = 1; + $("#week_last1").val(v1); + } + if (v1 > 7) { + v1 = 7; + $("#week_last1").val(v1); + } + $("#v_week").val(v1 + "L"); + gen_cron() +} + +function change_week_num() { + var v1 = $("#week_num1").val(); + var v2 = $("#week_num2").val(); + if (v1 == null || v1 == '' || v2 == null || v2 == '') { + return; + } + if (v1 < 1) { + v1 = 1; + $("#week_num1").val(v1); + } + if (v2 < 1) { + v2 = 1; + $("#week_num2").val(v2); + } + if (v2 > 7) { + v2 = 7; + $("#week_num2").val(v2); + } + if (v1 > 4) { + v1 = 4; + $("#week_num1").val(v1); + } + + $("#v_week").val(v1 + "#" + v2); + gen_cron(); +} + +function change_year_circle() { + var v1 = $("#year_circle1").val(); + var v2 = $("#year_circle2").val(); + if (v1 == null || v1 == '' || v2 == null || v2 == '') { + return; + } + if (v1 < 2000) { + v1 = 2000; + $("#year_circle1").val(v1); + } + if (v2 < 2000) { + v2 = 2000; + $("#year_circle2").val(v2); + } + if (v2 > 3000) { + v2 = 3000; + $("#year_circle2").val(v2); + } + if (v1 > 3000) { + v1 = 3000; + $("#year_circle1").val(v1); + } + if (v1 >= v2) { + v1 = v2 - 1; + $("#year_circle1").val(v1); + } + if (v1 > 3000 || v2 > 3000) { + return; + } + if (v1 > v2) { + return; + } + $("#v_year").val(v1 + "-" + v2); + gen_cron(); +} + +function gen_cron() { + var str = $("#v_second").val() + " " + + $("#v_min").val() + " " + + $("#v_hour").val() + " " + + $("#v_day").val() + " " + + $("#v_month").val() + " " + + $("#v_week").val() + " " + + $("#v_year").val(); + $("#cron").val(str); +} \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java index 469faf7d..6ce2fa3a 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java @@ -161,6 +161,14 @@ public class BaseController return AjaxResult.success(message); } + /** + * 返回成功数据 + */ + public static AjaxResult success(Object data) + { + return AjaxResult.success("操作成功", data); + } + /** * 返回失败消息 */ diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java index 84354e3f..b7cc8b6b 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java @@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.constant.Constants; @@ -189,4 +190,31 @@ public class SysJobController extends BaseController { return jobService.checkCronExpressionIsValid(job.getCronExpression()); } + + /** + * Cron表达式在线生成 + */ + @GetMapping("/cron") + public String cron() + { + return prefix + "/cron"; + } + + /** + * 查询cron表达式近5次的执行时间 + */ + @GetMapping("/queryCronExpression") + @ResponseBody + public AjaxResult queryCronExpression(@RequestParam(value = "cronExpression", required = false) String cronExpression) + { + if (jobService.checkCronExpressionIsValid(cronExpression)) + { + List dateList = CronUtils.getRecentTriggerTime(cronExpression); + return success(dateList); + } + else + { + return error("表达式无效"); + } + } } diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/CronUtils.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/CronUtils.java index dd538397..01a84cbc 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/CronUtils.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/CronUtils.java @@ -1,8 +1,13 @@ package com.ruoyi.quartz.util; import java.text.ParseException; +import java.util.ArrayList; import java.util.Date; +import java.util.List; import org.quartz.CronExpression; +import org.quartz.TriggerUtils; +import org.quartz.impl.triggers.CronTriggerImpl; +import com.ruoyi.common.utils.DateUtils; /** * cron表达式工具类 @@ -60,4 +65,30 @@ public class CronUtils throw new IllegalArgumentException(e.getMessage()); } } + + /** + * 通过表达式获取近10次的执行时间 + * + * @param cron 表达式 + * @return 时间列表 + */ + public static List getRecentTriggerTime(String cron) + { + List list = new ArrayList(); + try + { + CronTriggerImpl cronTriggerImpl = new CronTriggerImpl(); + cronTriggerImpl.setCronExpression(cron); + List dates = TriggerUtils.computeFireTimes(cronTriggerImpl, null, 10); + for (Date date : dates) + { + list.add(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, date)); + } + } + catch (ParseException e) + { + return null; + } + return list; + } } diff --git a/ruoyi-quartz/src/main/resources/templates/monitor/job/cron.html b/ruoyi-quartz/src/main/resources/templates/monitor/job/cron.html new file mode 100644 index 00000000..1676a6b4 --- /dev/null +++ b/ruoyi-quartz/src/main/resources/templates/monitor/job/cron.html @@ -0,0 +1,1172 @@ + + + + + + Cron表达式在线生成 + + + + +
+
+ +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+

表达式

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
分钟小时星期
表达式字段
Cron 表达式
+
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/ruoyi-quartz/src/main/resources/templates/monitor/job/job.html b/ruoyi-quartz/src/main/resources/templates/monitor/job/job.html index 45086b08..190183ed 100644 --- a/ruoyi-quartz/src/main/resources/templates/monitor/job/job.html +++ b/ruoyi-quartz/src/main/resources/templates/monitor/job/job.html @@ -47,6 +47,9 @@ 导出 + + 生成表达式 + 日志 @@ -176,6 +179,19 @@ } $.modal.openTab("调度日志", url); } + + /* cron表达式生成 */ + function cron() { + var url = prefix + '/cron'; + var height = $(window).height() - 50; + top.layer.open({ + title: "Cron表达式生成器", + type: 2, + area: ['800px', height + "px" ], //宽高 + shadeClose: true, + content: url + }); + } \ No newline at end of file