Commit f60855faa03ef21a49bb3532337e0b4d4d004405

Authored by YunaiV
1 parent bc1504d9

1. 完成 Job 的 CRUD 功能

Showing 27 changed files with 1274 additions and 1371 deletions
ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java renamed to ruoyi-common/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java
1   -package com.ruoyi.quartz.config;
2   -
3   -import org.springframework.context.annotation.Bean;
4   -import org.springframework.context.annotation.Configuration;
5   -import org.springframework.scheduling.quartz.SchedulerFactoryBean;
6   -
7   -import javax.sql.DataSource;
8   -import java.util.Properties;
9   -
10   -/**
11   - * 定时任务配置
12   - *
13   - * @author ruoyi
14   - */
15   -@Configuration
16   -public class ScheduleConfig {
17   -
18   - @Bean
19   - public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) {
20   - SchedulerFactoryBean factory = new SchedulerFactoryBean();
21   - factory.setDataSource(dataSource);
22   -
23   - // quartz参数
24   - Properties prop = new Properties();
25   - prop.put("org.quartz.scheduler.instanceName", "RuoyiScheduler");
26   - prop.put("org.quartz.scheduler.instanceId", "AUTO");
27   - // 集群配置
28   - prop.put("org.quartz.jobStore.clusterCheckinInterval", "15000");
29   - prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "1");
30   - prop.put("org.quartz.jobStore.txIsolationLevelSerializable", "true");
31   -
32   - // sqlserver 启用
33   - // prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?");
34   - prop.put("org.quartz.jobStore.misfireThreshold", "12000");
35   - factory.setQuartzProperties(prop);
36   -
37   - factory.setSchedulerName("RuoyiScheduler");
38   - // 延时启动
39   - factory.setStartupDelay(1);
40   - factory.setApplicationContextSchedulerContextKey("applicationContextKey");
41   - // 可选,QuartzScheduler
42   - // 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了
43   - factory.setOverwriteExistingJobs(true);
44   -
45   -
46   - return factory;
47   - }
48   -}
  1 +package com.ruoyi.quartz.config;
  2 +
  3 +import org.springframework.context.annotation.Bean;
  4 +import org.springframework.context.annotation.Configuration;
  5 +import org.springframework.scheduling.quartz.SchedulerFactoryBean;
  6 +
  7 +import javax.sql.DataSource;
  8 +import java.util.Properties;
  9 +
  10 +/**
  11 + * 定时任务配置
  12 + *
  13 + * @author ruoyi
  14 + */
  15 +@Configuration
  16 +public class ScheduleConfig {
  17 +
  18 + @Bean
  19 + public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) {
  20 + SchedulerFactoryBean factory = new SchedulerFactoryBean();
  21 + factory.setDataSource(dataSource);
  22 +
  23 + // quartz参数
  24 + Properties prop = new Properties();
  25 + prop.put("org.quartz.scheduler.instanceName", "RuoyiScheduler");
  26 + prop.put("org.quartz.scheduler.instanceId", "AUTO");
  27 + // 集群配置
  28 + prop.put("org.quartz.jobStore.clusterCheckinInterval", "15000");
  29 + prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "1");
  30 + prop.put("org.quartz.jobStore.txIsolationLevelSerializable", "true");
  31 +
  32 + // sqlserver 启用
  33 + // prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?");
  34 + prop.put("org.quartz.jobStore.misfireThreshold", "12000");
  35 + factory.setQuartzProperties(prop);
  36 +
  37 + factory.setSchedulerName("RuoyiScheduler");
  38 + // 延时启动
  39 + factory.setStartupDelay(1);
  40 + factory.setApplicationContextSchedulerContextKey("applicationContextKey");
  41 + // 可选,QuartzScheduler
  42 + // 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了
  43 + factory.setOverwriteExistingJobs(true);
  44 +
  45 +
  46 + return factory;
  47 + }
  48 +}
... ...
ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobLogController.java renamed to ruoyi-common/src/main/java/com/ruoyi/quartz/controller/SysJobLogController.java
1   -package com.ruoyi.quartz.controller;
2   -
3   -import java.util.List;
4   -
5   -import org.springframework.beans.factory.annotation.Autowired;
6   -import org.springframework.security.access.prepost.PreAuthorize;
7   -import org.springframework.web.bind.annotation.DeleteMapping;
8   -import org.springframework.web.bind.annotation.GetMapping;
9   -import org.springframework.web.bind.annotation.PathVariable;
10   -import org.springframework.web.bind.annotation.RequestMapping;
11   -import org.springframework.web.bind.annotation.RestController;
12   -import com.ruoyi.common.annotation.Log;
13   -import com.ruoyi.common.core.controller.BaseController;
14   -import com.ruoyi.common.core.domain.AjaxResult;
15   -import com.ruoyi.common.core.page.TableDataInfo;
16   -import com.ruoyi.common.enums.BusinessType;
17   -import com.ruoyi.common.utils.poi.ExcelUtil;
18   -import com.ruoyi.quartz.domain.SysJobLog;
19   -import com.ruoyi.quartz.service.ISysJobLogService;
20   -
21   -/**
22   - * 调度日志操作处理
23   - *
24   - * @author ruoyi
25   - */
26   -@RestController
27   -@RequestMapping("/monitor/jobLog")
28   -public class SysJobLogController extends BaseController {
29   - @Autowired
30   - private ISysJobLogService jobLogService;
31   -
32   - /**
33   - * 查询定时任务调度日志列表
34   - */
35   - @PreAuthorize("@ss.hasPermi('monitor:job:list')")
36   - @GetMapping("/list")
37   - public TableDataInfo list(SysJobLog sysJobLog) {
38   - startPage();
39   - List<SysJobLog> list = jobLogService.selectJobLogList(sysJobLog);
40   - return getDataTable(list);
41   - }
42   -
43   - /**
44   - * 导出定时任务调度日志列表
45   - */
46   - @PreAuthorize("@ss.hasPermi('monitor:job:export')")
47   - @Log(title = "任务调度日志", businessType = BusinessType.EXPORT)
48   - @GetMapping("/export")
49   - public AjaxResult export(SysJobLog sysJobLog) {
50   - List<SysJobLog> list = jobLogService.selectJobLogList(sysJobLog);
51   - ExcelUtil<SysJobLog> util = new ExcelUtil<SysJobLog>(SysJobLog.class);
52   - return util.exportExcel(list, "调度日志");
53   - }
54   -
55   - /**
56   - * 根据调度编号获取详细信息
57   - */
58   - @PreAuthorize("@ss.hasPermi('monitor:job:query')")
59   - @GetMapping(value = "/{configId}")
60   - public AjaxResult getInfo(@PathVariable Long jobLogId) {
61   - return AjaxResult.success(jobLogService.selectJobLogById(jobLogId));
62   - }
63   -
64   -
65   - /**
66   - * 删除定时任务调度日志
67   - */
68   - @PreAuthorize("@ss.hasPermi('monitor:job:remove')")
69   - @Log(title = "定时任务调度日志", businessType = BusinessType.DELETE)
70   - @DeleteMapping("/{jobLogIds}")
71   - public AjaxResult remove(@PathVariable Long[] jobLogIds) {
72   - return toAjax(jobLogService.deleteJobLogByIds(jobLogIds));
73   - }
74   -
75   - /**
76   - * 清空定时任务调度日志
77   - */
78   - @PreAuthorize("@ss.hasPermi('monitor:job:remove')")
79   - @Log(title = "调度日志", businessType = BusinessType.CLEAN)
80   - @DeleteMapping("/clean")
81   - public AjaxResult clean() {
82   - jobLogService.cleanJobLog();
83   - return AjaxResult.success();
84   - }
85   -}
  1 +package com.ruoyi.quartz.controller;
  2 +
  3 +import java.util.List;
  4 +
  5 +import org.springframework.beans.factory.annotation.Autowired;
  6 +import org.springframework.security.access.prepost.PreAuthorize;
  7 +import org.springframework.web.bind.annotation.DeleteMapping;
  8 +import org.springframework.web.bind.annotation.GetMapping;
  9 +import org.springframework.web.bind.annotation.PathVariable;
  10 +import org.springframework.web.bind.annotation.RequestMapping;
  11 +import org.springframework.web.bind.annotation.RestController;
  12 +import com.ruoyi.common.annotation.Log;
  13 +import com.ruoyi.common.core.controller.BaseController;
  14 +import com.ruoyi.common.core.domain.AjaxResult;
  15 +import com.ruoyi.common.core.page.TableDataInfo;
  16 +import com.ruoyi.common.enums.BusinessType;
  17 +import com.ruoyi.common.utils.poi.ExcelUtil;
  18 +import com.ruoyi.quartz.domain.SysJobLog;
  19 +import com.ruoyi.quartz.service.ISysJobLogService;
  20 +
  21 +/**
  22 + * 调度日志操作处理
  23 + *
  24 + * @author ruoyi
  25 + */
  26 +@RestController
  27 +@RequestMapping("/monitor/jobLog")
  28 +public class SysJobLogController extends BaseController {
  29 + @Autowired
  30 + private ISysJobLogService jobLogService;
  31 +
  32 + /**
  33 + * 查询定时任务调度日志列表
  34 + */
  35 + @PreAuthorize("@ss.hasPermi('monitor:job:list')")
  36 + @GetMapping("/list")
  37 + public TableDataInfo list(SysJobLog sysJobLog) {
  38 + startPage();
  39 + List<SysJobLog> list = jobLogService.selectJobLogList(sysJobLog);
  40 + return getDataTable(list);
  41 + }
  42 +
  43 + /**
  44 + * 导出定时任务调度日志列表
  45 + */
  46 + @PreAuthorize("@ss.hasPermi('monitor:job:export')")
  47 + @Log(title = "任务调度日志", businessType = BusinessType.EXPORT)
  48 + @GetMapping("/export")
  49 + public AjaxResult export(SysJobLog sysJobLog) {
  50 + List<SysJobLog> list = jobLogService.selectJobLogList(sysJobLog);
  51 + ExcelUtil<SysJobLog> util = new ExcelUtil<SysJobLog>(SysJobLog.class);
  52 + return util.exportExcel(list, "调度日志");
  53 + }
  54 +
  55 + /**
  56 + * 根据调度编号获取详细信息
  57 + */
  58 + @PreAuthorize("@ss.hasPermi('monitor:job:query')")
  59 + @GetMapping(value = "/{configId}")
  60 + public AjaxResult getInfo(@PathVariable Long jobLogId) {
  61 + return AjaxResult.success(jobLogService.selectJobLogById(jobLogId));
  62 + }
  63 +
  64 +}
... ...
ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java renamed to ruoyi-common/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java
1   -package com.ruoyi.quartz.service.impl;
2   -
3   -import java.util.List;
4   -
5   -import org.springframework.beans.factory.annotation.Autowired;
6   -import org.springframework.stereotype.Service;
7   -import com.ruoyi.quartz.domain.SysJobLog;
8   -import com.ruoyi.quartz.mapper.SysJobLogMapper;
9   -import com.ruoyi.quartz.service.ISysJobLogService;
10   -
11   -/**
12   - * 定时任务调度日志信息 服务层
13   - *
14   - * @author ruoyi
15   - */
16   -@Service
17   -public class SysJobLogServiceImpl implements ISysJobLogService {
18   - @Autowired
19   - private SysJobLogMapper jobLogMapper;
20   -
21   - /**
22   - * 获取quartz调度器日志的计划任务
23   - *
24   - * @param jobLog 调度日志信息
25   - * @return 调度任务日志集合
26   - */
27   - @Override
28   - public List<SysJobLog> selectJobLogList(SysJobLog jobLog) {
29   - return jobLogMapper.selectJobLogList(jobLog);
30   - }
31   -
32   - /**
33   - * 通过调度任务日志ID查询调度信息
34   - *
35   - * @param jobLogId 调度任务日志ID
36   - * @return 调度任务日志对象信息
37   - */
38   - @Override
39   - public SysJobLog selectJobLogById(Long jobLogId) {
40   - return jobLogMapper.selectJobLogById(jobLogId);
41   - }
42   -
43   - /**
44   - * 新增任务日志
45   - *
46   - * @param jobLog 调度日志信息
47   - */
48   - @Override
49   - public void addJobLog(SysJobLog jobLog) {
50   - jobLogMapper.insertJobLog(jobLog);
51   - }
52   -
53   - /**
54   - * 批量删除调度日志信息
55   - *
56   - * @param logIds 需要删除的数据ID
57   - * @return 结果
58   - */
59   - @Override
60   - public int deleteJobLogByIds(Long[] logIds) {
61   - return jobLogMapper.deleteJobLogByIds(logIds);
62   - }
63   -
64   - /**
65   - * 删除任务日志
66   - *
67   - * @param jobId 调度日志ID
68   - */
69   - @Override
70   - public int deleteJobLogById(Long jobId) {
71   - return jobLogMapper.deleteJobLogById(jobId);
72   - }
73   -
74   - /**
75   - * 清空任务日志
76   - */
77   - @Override
78   - public void cleanJobLog() {
79   - jobLogMapper.cleanJobLog();
80   - }
81   -}
  1 +package com.ruoyi.quartz.service.impl;
  2 +
  3 +import java.util.List;
  4 +
  5 +import org.springframework.beans.factory.annotation.Autowired;
  6 +import org.springframework.stereotype.Service;
  7 +import com.ruoyi.quartz.domain.SysJobLog;
  8 +import com.ruoyi.quartz.mapper.SysJobLogMapper;
  9 +import com.ruoyi.quartz.service.ISysJobLogService;
  10 +
  11 +/**
  12 + * 定时任务调度日志信息 服务层
  13 + *
  14 + * @author ruoyi
  15 + */
  16 +@Service
  17 +public class SysJobLogServiceImpl implements ISysJobLogService {
  18 +
  19 + @Autowired
  20 + private SysJobLogMapper jobLogMapper;
  21 +
  22 + /**
  23 + * 获取quartz调度器日志的计划任务
  24 + *
  25 + * @param jobLog 调度日志信息
  26 + * @return 调度任务日志集合
  27 + */
  28 + @Override
  29 + public List<SysJobLog> selectJobLogList(SysJobLog jobLog) {
  30 + return jobLogMapper.selectJobLogList(jobLog);
  31 + }
  32 +
  33 + /**
  34 + * 通过调度任务日志ID查询调度信息
  35 + *
  36 + * @param jobLogId 调度任务日志ID
  37 + * @return 调度任务日志对象信息
  38 + */
  39 + @Override
  40 + public SysJobLog selectJobLogById(Long jobLogId) {
  41 + return jobLogMapper.selectJobLogById(jobLogId);
  42 + }
  43 +
  44 + /**
  45 + * 新增任务日志
  46 + *
  47 + * @param jobLog 调度日志信息
  48 + */
  49 + @Override
  50 + public void addJobLog(SysJobLog jobLog) {
  51 + jobLogMapper.insertJobLog(jobLog);
  52 + }
  53 +
  54 +}
... ...
ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/AbstractQuartzJob.java renamed to ruoyi-common/src/main/java/com/ruoyi/quartz/util/AbstractQuartzJob.java
1   -package com.ruoyi.quartz.util;
2   -
3   -import java.util.Date;
4   -
5   -import org.quartz.Job;
6   -import org.quartz.JobExecutionContext;
7   -import org.quartz.JobExecutionException;
8   -import org.slf4j.Logger;
9   -import org.slf4j.LoggerFactory;
10   -import com.ruoyi.common.constant.Constants;
11   -import com.ruoyi.common.constant.ScheduleConstants;
12   -import com.ruoyi.common.utils.ExceptionUtil;
13   -import com.ruoyi.common.utils.StringUtils;
14   -import com.ruoyi.common.utils.bean.BeanUtils;
15   -import com.ruoyi.common.utils.spring.SpringUtils;
16   -import com.ruoyi.quartz.domain.SysJob;
17   -import com.ruoyi.quartz.domain.SysJobLog;
18   -import com.ruoyi.quartz.service.ISysJobLogService;
19   -
20   -/**
21   - * 抽象quartz调用
22   - *
23   - * @author ruoyi
24   - */
25   -public abstract class AbstractQuartzJob implements Job {
26   - private static final Logger log = LoggerFactory.getLogger(AbstractQuartzJob.class);
27   -
28   - /**
29   - * 线程本地变量
30   - */
31   - private static ThreadLocal<Date> threadLocal = new ThreadLocal<>();
32   -
33   - @Override
34   - public void execute(JobExecutionContext context) throws JobExecutionException {
35   - SysJob sysJob = new SysJob();
36   - BeanUtils.copyBeanProp(sysJob, context.getMergedJobDataMap().get(ScheduleConstants.TASK_PROPERTIES));
37   - try {
38   - before(context, sysJob);
39   - if (sysJob != null) {
40   - doExecute(context, sysJob);
41   - }
42   - after(context, sysJob, null);
43   - } catch (Exception e) {
44   - log.error("任务执行异常 - :", e);
45   - after(context, sysJob, e);
46   - }
47   - }
48   -
49   - /**
50   - * 执行前
51   - *
52   - * @param context 工作执行上下文对象
53   - * @param sysJob 系统计划任务
54   - */
55   - protected void before(JobExecutionContext context, SysJob sysJob) {
56   - threadLocal.set(new Date());
57   - }
58   -
59   - /**
60   - * 执行后
61   - *
62   - * @param context 工作执行上下文对象
63   - * @param sysJob 系统计划任务
64   - */
65   - protected void after(JobExecutionContext context, SysJob sysJob, Exception e) {
66   - Date startTime = threadLocal.get();
67   - threadLocal.remove();
68   -
69   - final SysJobLog sysJobLog = new SysJobLog();
70   - sysJobLog.setJobName(sysJob.getJobName());
71   - sysJobLog.setJobGroup(sysJob.getJobGroup());
72   - sysJobLog.setInvokeTarget(sysJob.getInvokeTarget());
73   - sysJobLog.setStartTime(startTime);
74   - sysJobLog.setStopTime(new Date());
75   - long runMs = sysJobLog.getStopTime().getTime() - sysJobLog.getStartTime().getTime();
76   - sysJobLog.setJobMessage(sysJobLog.getJobName() + " 总共耗时:" + runMs + "毫秒");
77   - if (e != null) {
78   - sysJobLog.setStatus(Constants.FAIL);
79   - String errorMsg = StringUtils.substring(ExceptionUtil.getExceptionMessage(e), 0, 2000);
80   - sysJobLog.setExceptionInfo(errorMsg);
81   - } else {
82   - sysJobLog.setStatus(Constants.SUCCESS);
83   - }
84   -
85   - // 写入数据库当中
86   - SpringUtils.getBean(ISysJobLogService.class).addJobLog(sysJobLog);
87   - }
88   -
89   - /**
90   - * 执行方法,由子类重载
91   - *
92   - * @param context 工作执行上下文对象
93   - * @param sysJob 系统计划任务
94   - * @throws Exception 执行过程中的异常
95   - */
96   - protected abstract void doExecute(JobExecutionContext context, SysJob sysJob) throws Exception;
97   -}
  1 +package com.ruoyi.quartz.util;
  2 +
  3 +import java.util.Date;
  4 +
  5 +import org.quartz.Job;
  6 +import org.quartz.JobExecutionContext;
  7 +import org.quartz.JobExecutionException;
  8 +import org.slf4j.Logger;
  9 +import org.slf4j.LoggerFactory;
  10 +import com.ruoyi.common.constant.Constants;
  11 +import com.ruoyi.common.constant.ScheduleConstants;
  12 +import com.ruoyi.common.utils.ExceptionUtil;
  13 +import com.ruoyi.common.utils.StringUtils;
  14 +import com.ruoyi.common.utils.bean.BeanUtils;
  15 +import com.ruoyi.common.utils.spring.SpringUtils;
  16 +import com.ruoyi.quartz.domain.SysJob;
  17 +import com.ruoyi.quartz.domain.SysJobLog;
  18 +import com.ruoyi.quartz.service.ISysJobLogService;
  19 +
  20 +/**
  21 + * 抽象quartz调用
  22 + *
  23 + * @author ruoyi
  24 + */
  25 +public abstract class AbstractQuartzJob implements Job {
  26 + private static final Logger log = LoggerFactory.getLogger(AbstractQuartzJob.class);
  27 +
  28 + /**
  29 + * 线程本地变量
  30 + */
  31 + private static ThreadLocal<Date> threadLocal = new ThreadLocal<>();
  32 +
  33 + @Override
  34 + public void execute(JobExecutionContext context) throws JobExecutionException {
  35 + SysJob sysJob = new SysJob();
  36 + BeanUtils.copyBeanProp(sysJob, context.getMergedJobDataMap().get(ScheduleConstants.TASK_PROPERTIES));
  37 + try {
  38 + before(context, sysJob);
  39 + if (sysJob != null) {
  40 + doExecute(context, sysJob);
  41 + }
  42 + after(context, sysJob, null);
  43 + } catch (Exception e) {
  44 + log.error("任务执行异常 - :", e);
  45 + after(context, sysJob, e);
  46 + }
  47 + }
  48 +
  49 + /**
  50 + * 执行前
  51 + *
  52 + * @param context 工作执行上下文对象
  53 + * @param sysJob 系统计划任务
  54 + */
  55 + protected void before(JobExecutionContext context, SysJob sysJob) {
  56 + threadLocal.set(new Date());
  57 + }
  58 +
  59 + /**
  60 + * 执行后
  61 + *
  62 + * @param context 工作执行上下文对象
  63 + * @param sysJob 系统计划任务
  64 + */
  65 + protected void after(JobExecutionContext context, SysJob sysJob, Exception e) {
  66 + Date startTime = threadLocal.get();
  67 + threadLocal.remove();
  68 +
  69 + final SysJobLog sysJobLog = new SysJobLog();
  70 + sysJobLog.setJobName(sysJob.getJobName());
  71 + sysJobLog.setJobGroup(sysJob.getJobGroup());
  72 + sysJobLog.setInvokeTarget(sysJob.getInvokeTarget());
  73 + sysJobLog.setStartTime(startTime);
  74 + sysJobLog.setStopTime(new Date());
  75 + long runMs = sysJobLog.getStopTime().getTime() - sysJobLog.getStartTime().getTime();
  76 + sysJobLog.setJobMessage(sysJobLog.getJobName() + " 总共耗时:" + runMs + "毫秒");
  77 + if (e != null) {
  78 + sysJobLog.setStatus(Constants.FAIL);
  79 + String errorMsg = StringUtils.substring(ExceptionUtil.getExceptionMessage(e), 0, 2000);
  80 + sysJobLog.setExceptionInfo(errorMsg);
  81 + } else {
  82 + sysJobLog.setStatus(Constants.SUCCESS);
  83 + }
  84 +
  85 + // 写入数据库当中
  86 + SpringUtils.getBean(ISysJobLogService.class).addJobLog(sysJobLog);
  87 + }
  88 +
  89 + /**
  90 + * 执行方法,由子类重载
  91 + *
  92 + * @param context 工作执行上下文对象
  93 + * @param sysJob 系统计划任务
  94 + * @throws Exception 执行过程中的异常
  95 + */
  96 + protected abstract void doExecute(JobExecutionContext context, SysJob sysJob) throws Exception;
  97 +}
... ...
ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java renamed to ruoyi-common/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java
1   -package com.ruoyi.quartz.util;
2   -
3   -import org.quartz.CronScheduleBuilder;
4   -import org.quartz.CronTrigger;
5   -import org.quartz.Job;
6   -import org.quartz.JobBuilder;
7   -import org.quartz.JobDetail;
8   -import org.quartz.JobKey;
9   -import org.quartz.Scheduler;
10   -import org.quartz.SchedulerException;
11   -import org.quartz.TriggerBuilder;
12   -import org.quartz.TriggerKey;
13   -import com.ruoyi.common.constant.ScheduleConstants;
14   -import com.ruoyi.common.exception.job.TaskException;
15   -import com.ruoyi.common.exception.job.TaskException.Code;
16   -import com.ruoyi.quartz.domain.SysJob;
17   -
18   -/**
19   - * 定时任务工具类
20   - *
21   - * @author ruoyi
22   - */
23   -public class ScheduleUtils {
24   -
25   - /**
26   - * 设置定时任务策略
27   - */
28   - public static CronScheduleBuilder handleCronScheduleMisfirePolicy(SysJob job, CronScheduleBuilder cb)
29   - throws TaskException {
30   - switch (job.getMisfirePolicy()) {
31   - case ScheduleConstants.MISFIRE_DEFAULT:
32   - return cb;
33   - case ScheduleConstants.MISFIRE_IGNORE_MISFIRES:
34   - return cb.withMisfireHandlingInstructionIgnoreMisfires();
35   - case ScheduleConstants.MISFIRE_FIRE_AND_PROCEED:
36   - return cb.withMisfireHandlingInstructionFireAndProceed();
37   - case ScheduleConstants.MISFIRE_DO_NOTHING:
38   - return cb.withMisfireHandlingInstructionDoNothing();
39   - default:
40   - throw new TaskException("The task misfire policy '" + job.getMisfirePolicy()
41   - + "' cannot be used in cron schedule tasks", Code.CONFIG_ERROR);
42   - }
43   - }
44   -}
  1 +package com.ruoyi.quartz.util;
  2 +
  3 +import org.quartz.CronScheduleBuilder;
  4 +import org.quartz.CronTrigger;
  5 +import org.quartz.Job;
  6 +import org.quartz.JobBuilder;
  7 +import org.quartz.JobDetail;
  8 +import org.quartz.JobKey;
  9 +import org.quartz.Scheduler;
  10 +import org.quartz.SchedulerException;
  11 +import org.quartz.TriggerBuilder;
  12 +import org.quartz.TriggerKey;
  13 +import com.ruoyi.common.constant.ScheduleConstants;
  14 +import com.ruoyi.common.exception.job.TaskException;
  15 +import com.ruoyi.common.exception.job.TaskException.Code;
  16 +import com.ruoyi.quartz.domain.SysJob;
  17 +
  18 +/**
  19 + * 定时任务工具类
  20 + *
  21 + * @author ruoyi
  22 + */
  23 +public class ScheduleUtils {
  24 +
  25 + /**
  26 + * 设置定时任务策略
  27 + */
  28 + public static CronScheduleBuilder handleCronScheduleMisfirePolicy(SysJob job, CronScheduleBuilder cb)
  29 + throws TaskException {
  30 + switch (job.getMisfirePolicy()) {
  31 + case ScheduleConstants.MISFIRE_DEFAULT:
  32 + return cb;
  33 + case ScheduleConstants.MISFIRE_IGNORE_MISFIRES:
  34 + return cb.withMisfireHandlingInstructionIgnoreMisfires();
  35 + case ScheduleConstants.MISFIRE_FIRE_AND_PROCEED:
  36 + return cb.withMisfireHandlingInstructionFireAndProceed();
  37 + case ScheduleConstants.MISFIRE_DO_NOTHING:
  38 + return cb.withMisfireHandlingInstructionDoNothing();
  39 + default:
  40 + throw new TaskException("The task misfire policy '" + job.getMisfirePolicy()
  41 + + "' cannot be used in cron schedule tasks", Code.CONFIG_ERROR);
  42 + }
  43 + }
  44 +}
... ...
ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java deleted
1   -package com.ruoyi.quartz.controller;
2   -
3   -import java.util.List;
4   -
5   -import org.quartz.SchedulerException;
6   -import org.springframework.beans.factory.annotation.Autowired;
7   -import org.springframework.security.access.prepost.PreAuthorize;
8   -import org.springframework.web.bind.annotation.DeleteMapping;
9   -import org.springframework.web.bind.annotation.GetMapping;
10   -import org.springframework.web.bind.annotation.PathVariable;
11   -import org.springframework.web.bind.annotation.PostMapping;
12   -import org.springframework.web.bind.annotation.PutMapping;
13   -import org.springframework.web.bind.annotation.RequestBody;
14   -import org.springframework.web.bind.annotation.RequestMapping;
15   -import org.springframework.web.bind.annotation.RestController;
16   -import com.ruoyi.common.annotation.Log;
17   -import com.ruoyi.common.core.controller.BaseController;
18   -import com.ruoyi.common.core.domain.AjaxResult;
19   -import com.ruoyi.common.core.page.TableDataInfo;
20   -import com.ruoyi.common.enums.BusinessType;
21   -import com.ruoyi.common.exception.job.TaskException;
22   -import com.ruoyi.common.utils.SecurityUtils;
23   -import com.ruoyi.common.utils.poi.ExcelUtil;
24   -import com.ruoyi.quartz.domain.SysJob;
25   -import com.ruoyi.quartz.service.ISysJobService;
26   -import com.ruoyi.quartz.util.CronUtils;
27   -
28   -/**
29   - * 调度任务信息操作处理
30   - *
31   - * @author ruoyi
32   - */
33   -@RestController
34   -@RequestMapping("/monitor/job")
35   -public class SysJobController extends BaseController {
36   - @Autowired
37   - private ISysJobService jobService;
38   -
39   - /**
40   - * 查询定时任务列表
41   - */
42   - @PreAuthorize("@ss.hasPermi('monitor:job:list')")
43   - @GetMapping("/list")
44   - public TableDataInfo list(SysJob sysJob) {
45   - startPage();
46   - List<SysJob> list = jobService.selectJobList(sysJob);
47   - return getDataTable(list);
48   - }
49   -
50   - /**
51   - * 导出定时任务列表
52   - */
53   - @PreAuthorize("@ss.hasPermi('monitor:job:export')")
54   - @Log(title = "定时任务", businessType = BusinessType.EXPORT)
55   - @GetMapping("/export")
56   - public AjaxResult export(SysJob sysJob) {
57   - List<SysJob> list = jobService.selectJobList(sysJob);
58   - ExcelUtil<SysJob> util = new ExcelUtil<SysJob>(SysJob.class);
59   - return util.exportExcel(list, "定时任务");
60   - }
61   -
62   - /**
63   - * 获取定时任务详细信息
64   - */
65   - @PreAuthorize("@ss.hasPermi('monitor:job:query')")
66   - @GetMapping(value = "/{jobId}")
67   - public AjaxResult getInfo(@PathVariable("jobId") Long jobId) {
68   - return AjaxResult.success(jobService.selectJobById(jobId));
69   - }
70   -
71   - /**
72   - * 新增定时任务
73   - */
74   - @PreAuthorize("@ss.hasPermi('monitor:job:add')")
75   - @Log(title = "定时任务", businessType = BusinessType.INSERT)
76   - @PostMapping
77   - public AjaxResult add(@RequestBody SysJob sysJob) throws SchedulerException, TaskException {
78   - if (!CronUtils.isValid(sysJob.getCronExpression())) {
79   - return AjaxResult.error("cron表达式不正确");
80   - }
81   - sysJob.setCreateBy(SecurityUtils.getUsername());
82   - return toAjax(jobService.insertJob(sysJob));
83   - }
84   -
85   - /**
86   - * 修改定时任务
87   - */
88   - @PreAuthorize("@ss.hasPermi('monitor:job:edit')")
89   - @Log(title = "定时任务", businessType = BusinessType.UPDATE)
90   - @PutMapping
91   - public AjaxResult edit(@RequestBody SysJob sysJob) throws SchedulerException, TaskException {
92   - if (!CronUtils.isValid(sysJob.getCronExpression())) {
93   - return AjaxResult.error("cron表达式不正确");
94   - }
95   - sysJob.setUpdateBy(SecurityUtils.getUsername());
96   - return toAjax(jobService.updateJob(sysJob));
97   - }
98   -
99   - /**
100   - * 定时任务状态修改
101   - */
102   - @PreAuthorize("@ss.hasPermi('monitor:job:changeStatus')")
103   - @Log(title = "定时任务", businessType = BusinessType.UPDATE)
104   - @PutMapping("/changeStatus")
105   - public AjaxResult changeStatus(@RequestBody SysJob job) throws SchedulerException {
106   - SysJob newJob = jobService.selectJobById(job.getJobId());
107   - newJob.setStatus(job.getStatus());
108   - return toAjax(jobService.changeStatus(newJob));
109   - }
110   -
111   - /**
112   - * 定时任务立即执行一次
113   - */
114   - @PreAuthorize("@ss.hasPermi('monitor:job:changeStatus')")
115   - @Log(title = "定时任务", businessType = BusinessType.UPDATE)
116   - @PutMapping("/run")
117   - public AjaxResult run(@RequestBody SysJob job) throws SchedulerException {
118   - jobService.run(job);
119   - return AjaxResult.success();
120   - }
121   -
122   - /**
123   - * 删除定时任务
124   - */
125   - @PreAuthorize("@ss.hasPermi('monitor:job:remove')")
126   - @Log(title = "定时任务", businessType = BusinessType.DELETE)
127   - @DeleteMapping("/{jobIds}")
128   - public AjaxResult remove(@PathVariable Long[] jobIds) throws SchedulerException, TaskException {
129   - jobService.deleteJobByIds(jobIds);
130   - return AjaxResult.success();
131   - }
132   -}
ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java deleted
1   -package com.ruoyi.quartz.service.impl;
2   -
3   -import java.util.List;
4   -import javax.annotation.PostConstruct;
5   -
6   -import org.quartz.JobDataMap;
7   -import org.quartz.JobKey;
8   -import org.quartz.Scheduler;
9   -import org.quartz.SchedulerException;
10   -import org.springframework.beans.factory.annotation.Autowired;
11   -import org.springframework.stereotype.Service;
12   -import org.springframework.transaction.annotation.Transactional;
13   -import com.ruoyi.common.constant.ScheduleConstants;
14   -import com.ruoyi.common.exception.job.TaskException;
15   -import com.ruoyi.quartz.domain.SysJob;
16   -import com.ruoyi.quartz.mapper.SysJobMapper;
17   -import com.ruoyi.quartz.service.ISysJobService;
18   -import com.ruoyi.quartz.util.CronUtils;
19   -import com.ruoyi.quartz.util.ScheduleUtils;
20   -
21   -/**
22   - * 定时任务调度信息 服务层
23   - *
24   - * @author ruoyi
25   - */
26   -@Service
27   -public class SysJobServiceImpl implements ISysJobService {
28   - @Autowired
29   - private Scheduler scheduler;
30   -
31   - @Autowired
32   - private SysJobMapper jobMapper;
33   -
34   - /**
35   - * 获取quartz调度器的计划任务列表
36   - *
37   - * @param job 调度信息
38   - * @return
39   - */
40   - @Override
41   - public List<SysJob> selectJobList(SysJob job) {
42   - return jobMapper.selectJobList(job);
43   - }
44   -
45   - /**
46   - * 通过调度任务ID查询调度信息
47   - *
48   - * @param jobId 调度任务ID
49   - * @return 调度任务对象信息
50   - */
51   - @Override
52   - public SysJob selectJobById(Long jobId) {
53   - return jobMapper.selectJobById(jobId);
54   - }
55   -
56   - /**
57   - * 暂停任务
58   - *
59   - * @param job 调度信息
60   - */
61   - @Override
62   - @Transactional
63   - public int pauseJob(SysJob job) throws SchedulerException {
64   - Long jobId = job.getJobId();
65   - String jobGroup = job.getJobGroup();
66   - job.setStatus(ScheduleConstants.Status.PAUSE.getValue());
67   - int rows = jobMapper.updateJob(job);
68   - if (rows > 0) {
69   - scheduler.pauseJob(ScheduleUtils.getJobKey(jobId, jobGroup));
70   - }
71   - return rows;
72   - }
73   -
74   - /**
75   - * 恢复任务
76   - *
77   - * @param job 调度信息
78   - */
79   - @Override
80   - @Transactional
81   - public int resumeJob(SysJob job) throws SchedulerException {
82   - Long jobId = job.getJobId();
83   - String jobGroup = job.getJobGroup();
84   - job.setStatus(ScheduleConstants.Status.NORMAL.getValue());
85   - int rows = jobMapper.updateJob(job);
86   - if (rows > 0) {
87   - scheduler.resumeJob(ScheduleUtils.getJobKey(jobId, jobGroup));
88   - }
89   - return rows;
90   - }
91   -
92   - /**
93   - * 删除任务后,所对应的trigger也将被删除
94   - *
95   - * @param job 调度信息
96   - */
97   - @Override
98   - @Transactional
99   - public int deleteJob(SysJob job) throws SchedulerException {
100   - Long jobId = job.getJobId();
101   - String jobGroup = job.getJobGroup();
102   - int rows = jobMapper.deleteJobById(jobId);
103   - if (rows > 0) {
104   - scheduler.deleteJob(ScheduleUtils.getJobKey(jobId, jobGroup));
105   - }
106   - return rows;
107   - }
108   -
109   - /**
110   - * 批量删除调度信息
111   - *
112   - * @param jobIds 需要删除的任务ID
113   - * @return 结果
114   - */
115   - @Override
116   - @Transactional
117   - public void deleteJobByIds(Long[] jobIds) throws SchedulerException {
118   - for (Long jobId : jobIds) {
119   - SysJob job = jobMapper.selectJobById(jobId);
120   - deleteJob(job);
121   - }
122   - }
123   -
124   - /**
125   - * 任务调度状态修改
126   - *
127   - * @param job 调度信息
128   - */
129   - @Override
130   - @Transactional
131   - public int changeStatus(SysJob job) throws SchedulerException {
132   - int rows = 0;
133   - String status = job.getStatus();
134   - if (ScheduleConstants.Status.NORMAL.getValue().equals(status)) {
135   - rows = resumeJob(job);
136   - } else if (ScheduleConstants.Status.PAUSE.getValue().equals(status)) {
137   - rows = pauseJob(job);
138   - }
139   - return rows;
140   - }
141   -
142   - /**
143   - * 立即运行任务
144   - *
145   - * @param job 调度信息
146   - */
147   - @Override
148   - @Transactional
149   - public void run(SysJob job) throws SchedulerException {
150   - Long jobId = job.getJobId();
151   - String jobGroup = job.getJobGroup();
152   - SysJob properties = selectJobById(job.getJobId());
153   - // 参数
154   - JobDataMap dataMap = new JobDataMap();
155   - dataMap.put(ScheduleConstants.TASK_PROPERTIES, properties);
156   - scheduler.triggerJob(ScheduleUtils.getJobKey(jobId, jobGroup), dataMap);
157   - }
158   -
159   - /**
160   - * 新增任务
161   - *
162   - * @param job 调度信息 调度信息
163   - */
164   - @Override
165   - @Transactional
166   - public int insertJob(SysJob job) throws SchedulerException, TaskException {
167   - job.setStatus(ScheduleConstants.Status.PAUSE.getValue());
168   - int rows = jobMapper.insertJob(job);
169   - if (rows > 0) {
170   - ScheduleUtils.createScheduleJob(scheduler, job);
171   - }
172   - return rows;
173   - }
174   -
175   - /**
176   - * 更新任务的时间表达式
177   - *
178   - * @param job 调度信息
179   - */
180   - @Override
181   - @Transactional
182   - public int updateJob(SysJob job) throws SchedulerException, TaskException {
183   - SysJob properties = selectJobById(job.getJobId());
184   - int rows = jobMapper.updateJob(job);
185   - if (rows > 0) {
186   - updateSchedulerJob(job, properties.getJobGroup());
187   - }
188   - return rows;
189   - }
190   -
191   - /**
192   - * 更新任务
193   - *
194   - * @param job 任务对象
195   - * @param jobGroup 任务组名
196   - */
197   - public void updateSchedulerJob(SysJob job, String jobGroup) throws SchedulerException, TaskException {
198   - Long jobId = job.getJobId();
199   - // 判断是否存在
200   - JobKey jobKey = ScheduleUtils.getJobKey(jobId, jobGroup);
201   - if (scheduler.checkExists(jobKey)) {
202   - // 防止创建时存在数据问题 先移除,然后在执行创建操作
203   - scheduler.deleteJob(jobKey);
204   - }
205   - ScheduleUtils.createScheduleJob(scheduler, job);
206   - }
207   -
208   - /**
209   - * 校验cron表达式是否有效
210   - *
211   - * @param cronExpression 表达式
212   - * @return 结果
213   - */
214   - @Override
215   - public boolean checkCronExpressionIsValid(String cronExpression) {
216   - return CronUtils.isValid(cronExpression);
217   - }
218   -}
ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/CronUtils.java deleted
1   -package com.ruoyi.quartz.util;
2   -
3   -import java.text.ParseException;
4   -import java.util.Date;
5   -
6   -import org.quartz.CronExpression;
7   -
8   -/**
9   - * cron表达式工具类
10   - *
11   - * @author ruoyi
12   - */
13   -public class CronUtils {
14   - /**
15   - * 返回一个布尔值代表一个给定的Cron表达式的有效性
16   - *
17   - * @param cronExpression Cron表达式
18   - * @return boolean 表达式是否有效
19   - */
20   - public static boolean isValid(String cronExpression) {
21   - return CronExpression.isValidExpression(cronExpression);
22   - }
23   -
24   - /**
25   - * 返回一个字符串值,表示该消息无效Cron表达式给出有效性
26   - *
27   - * @param cronExpression Cron表达式
28   - * @return String 无效时返回表达式错误描述,如果有效返回null
29   - */
30   - public static String getInvalidMessage(String cronExpression) {
31   - try {
32   - new CronExpression(cronExpression);
33   - return null;
34   - } catch (ParseException pe) {
35   - return pe.getMessage();
36   - }
37   - }
38   -
39   - /**
40   - * 返回下一个执行时间根据给定的Cron表达式
41   - *
42   - * @param cronExpression Cron表达式
43   - * @return Date 下次Cron表达式执行时间
44   - */
45   - public static Date getNextExecution(String cronExpression) {
46   - try {
47   - CronExpression cron = new CronExpression(cronExpression);
48   - return cron.getNextValidTimeAfter(new Date(System.currentTimeMillis()));
49   - } catch (ParseException e) {
50   - throw new IllegalArgumentException(e.getMessage());
51   - }
52   - }
53   -}
ruoyi-ui/src/api/monitor/job.js renamed to ruoyi-ui/src/api/infra/job.js
... ... @@ -46,35 +46,30 @@ export function delJob(jobId) {
46 46 // 导出定时任务调度
47 47 export function exportJob(query) {
48 48 return request({
49   - url: '/infra/job/export',
  49 + url: '/infra/job/export-excel',
50 50 method: 'get',
51   - params: query
  51 + params: query,
  52 + responseType: 'blob'
52 53 })
53 54 }
54 55  
55 56 // 任务状态修改
56   -export function changeJobStatus(jobId, status) {
57   - const data = {
58   - jobId,
59   - status
60   - }
  57 +export function updateJobStatus(jobId, status) {
61 58 return request({
62   - url: '/monitor/job/changeStatus',
  59 + url: '/infra/job/update-status',
63 60 method: 'put',
64   - data: data
  61 + headers:{
  62 + 'Content-type': 'application/x-www-form-urlencoded'
  63 + },
  64 + data: 'id=' + jobId + "&status=" + status,
65 65 })
66 66 }
67 67  
68 68  
69 69 // 定时任务立即执行一次
70   -export function runJob(jobId, jobGroup) {
71   - const data = {
72   - jobId,
73   - jobGroup
74   - }
  70 +export function runJob(jobId) {
75 71 return request({
76   - url: '/monitor/job/run',
77   - method: 'put',
78   - data: data
  72 + url: '/infra/job/trigger?id=' + jobId,
  73 + method: 'put'
79 74 })
80 75 }
... ...
ruoyi-ui/src/router/index.js
... ... @@ -100,7 +100,7 @@ export const constantRoutes = [
100 100 children: [
101 101 {
102 102 path: 'log',
103   - component: (resolve) => require(['@/views/monitor/job/log'], resolve),
  103 + component: (resolve) => require(['@/views/infra/job/log'], resolve),
104 104 name: 'JobLog',
105 105 meta: { title: '调度日志' }
106 106 }
... ...
ruoyi-ui/src/utils/constants.js
... ... @@ -48,3 +48,13 @@ export const ToolCodegenTemplateTypeEnum = {
48 48 TREE: 2, // 树形 CRUD
49 49 SUB: 3, // 主子表 CRUD
50 50 }
  51 +
  52 +/**
  53 + * 任务状态的枚举
  54 + */
  55 +export const InfJobStatusEnum = {
  56 + INIT: 0, // 初始化中
  57 + NORMAL: 1, // 开启运行
  58 + EXCEPTION: 2, // 异常运行
  59 + STOP: 3, // 暂停运行
  60 +}
... ...
ruoyi-ui/src/views/monitor/druid/index.vue renamed to ruoyi-ui/src/views/infra/druid/index.vue
1   -<template>
2   - <div v-loading="loading" :style="'height:'+ height">
3   - <iframe :src="src" frameborder="no" style="width: 100%;height: 100%" scrolling="auto" />
4   - </div>
5   -</template>
6   -<script>
7   -export default {
8   - name: "Druid",
9   - data() {
10   - return {
11   - src: process.env.VUE_APP_BASE_API + "/druid/index.html",
12   - height: document.documentElement.clientHeight - 94.5 + "px;",
13   - loading: true
14   - };
15   - },
16   - mounted: function() {
17   - setTimeout(() => {
18   - this.loading = false;
19   - }, 230);
20   - const that = this;
21   - window.onresize = function temp() {
22   - that.height = document.documentElement.clientHeight - 94.5 + "px;";
23   - };
24   - }
25   -};
26   -</script>
  1 +<template>
  2 + <div v-loading="loading" :style="'height:'+ height">
  3 + <iframe :src="src" frameborder="no" style="width: 100%;height: 100%" scrolling="auto" />
  4 + </div>
  5 +</template>
  6 +<script>
  7 +export default {
  8 + name: "Druid",
  9 + data() {
  10 + return {
  11 + src: process.env.VUE_APP_BASE_API + "/druid/index.html",
  12 + height: document.documentElement.clientHeight - 94.5 + "px;",
  13 + loading: true
  14 + };
  15 + },
  16 + mounted: function() {
  17 + setTimeout(() => {
  18 + this.loading = false;
  19 + }, 230);
  20 + const that = this;
  21 + window.onresize = function temp() {
  22 + that.height = document.documentElement.clientHeight - 94.5 + "px;";
  23 + };
  24 + }
  25 +};
  26 +</script>
... ...
ruoyi-ui/src/views/monitor/job/index.vue renamed to ruoyi-ui/src/views/infra/job/index.vue
1   -<template>
2   - <div class="app-container">
3   - <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px">
4   - <el-form-item label="任务名称" prop="name">
5   - <el-input v-model="queryParams.name" placeholder="请输入任务名称" clearable size="small" @keyup.enter.native="handleQuery"/>
6   - </el-form-item>
7   - <el-form-item label="任务状态" prop="status">
8   - <el-select v-model="queryParams.status" placeholder="请选择任务状态" clearable size="small">
9   - <el-option v-for="dict in this.getDictDatas(DICT_TYPE.INF_JOB_STATUS)"
10   - :key="dict.value" :label="dict.label" :value="dict.value"/>
11   - </el-select>
12   - </el-form-item>
13   - <el-form-item label="处理器的名字" prop="handlerName">
14   - <el-input v-model="queryParams.handlerName" placeholder="请输入处理器的名字" clearable size="small" @keyup.enter.native="handleQuery"/>
15   - </el-form-item>
16   - <el-form-item>
17   - <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
18   - <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
19   - </el-form-item>
20   - </el-form>
21   -
22   - <el-row :gutter="10" class="mb8">
23   - <el-col :span="1.5">
24   - <el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd"
25   - v-hasPermi="['monitor:job:add']">新增</el-button>
26   - </el-col>
27   - <el-col :span="1.5">
28   - <el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport"
29   - v-hasPermi="['monitor:job:export']">导出</el-button>
30   - </el-col>
31   - <el-col :span="1.5">
32   - <el-button type="info" icon="el-icon-s-operation" size="mini" @click="handleJobLog"
33   - v-hasPermi="['monitor:job:query']">日志</el-button>
34   - </el-col>
35   - <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
36   - </el-row>
37   -
38   - <el-table v-loading="loading" :data="jobList">
39   - <el-table-column label="任务编号" align="center" prop="id" />
40   - <el-table-column label="任务名称" align="center" prop="name" />
41   - <el-table-column label="任务状态" align="center" prop="status">
42   - <template slot-scope="scope">
43   - <span>{{ getDictDataLabel(DICT_TYPE.INF_JOB_STATUS, scope.row.status) }}</span>
44   - </template>
45   - </el-table-column>>
46   - <el-table-column label="处理器的名字" align="center" prop="handlerName" />
47   - <el-table-column label="处理器的参数" align="center" prop="handlerParam" />
48   - <el-table-column label="CRON 表达式" align="center" prop="cronExpression" />
49   - <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
50   - <template slot-scope="scope">
51   - <el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)"
52   - v-hasPermi="['monitor:job:query']">详细</el-button>
53   - <el-button size="mini" type="text" icon="el-icon-view" @click="handleUpdate(scope.row)"
54   - v-hasPermi="['monitor:job:query']">修改</el-button>
55   - <el-button
56   - size="mini"
57   - type="text"
58   - icon="el-icon-caret-right"
59   - @click="handleRun(scope.row)"
60   - v-hasPermi="['monitor:job:changeStatus']"
61   - >执行一次</el-button>
62   - </template>
63   - </el-table-column>
64   - </el-table>
65   - <!-- 分页组件 -->
66   - <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
67   - @pagination="getList"/>
68   -
69   - <!-- 添加或修改定时任务对话框 -->
70   - <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
71   - <el-form ref="form" :model="form" :rules="rules" label-width="120px">
72   - <el-form-item label="任务名称" prop="name">
73   - <el-input v-model="form.name" placeholder="请输入任务名称" />
74   - </el-form-item>
75   - <el-form-item label="处理器的名字" prop="handlerName">
76   - <el-input v-model="form.handlerName" placeholder="请输入处理器的名字" v-bind:readonly="form.id !== undefined" />
77   - </el-form-item>
78   - <el-form-item label="处理器的参数" prop="handlerParam">
79   - <el-input v-model="form.handlerParam" placeholder="请输入处理器的参数" />
80   - </el-form-item>
81   - <el-form-item label="CRON 表达式" prop="cronExpression">
82   - <el-input v-model="form.cronExpression" placeholder="请输入CRON 表达式" />
83   - </el-form-item>
84   - <el-form-item label="监控超时时间" prop="monitorTimeout">
85   - <el-input v-model="form.monitorTimeout" placeholder="请输入监控超时时间,单位:毫秒" />
86   - </el-form-item>
87   - </el-form>
88   - <div slot="footer" class="dialog-footer">
89   - <el-button type="primary" @click="submitForm">确 定</el-button>
90   - <el-button @click="cancel">取 消</el-button>
91   - </div>
92   - </el-dialog>
93   -
94   - <!-- 任务日志详细 -->
95   - <el-dialog title="任务详细" :visible.sync="openView" width="700px" append-to-body>
96   - <el-form ref="form" :model="form" label-width="200px" size="mini">
97   - <el-row>
98   - <el-col :span="24">
99   - <el-form-item label="任务编号:">{{ form.id }}</el-form-item>
100   - <el-form-item label="任务名称:">{{ form.name }}</el-form-item>
101   - <el-form-item label="任务名称:">{{ getDictDataLabel(DICT_TYPE.INF_JOB_STATUS, form.status) }}</el-form-item>
102   - <el-form-item label="处理器的名字:">{{ form.handlerName }}</el-form-item>
103   - <el-form-item label="处理器的参数:">{{ form.handlerParam }}</el-form-item>
104   - <el-form-item label="cron表达式:">{{ form.cronExpression }}</el-form-item>
105   - <el-form-item label="最后一次执行的开始时间:">{{ parseTime(form.executeBeginTime) }}</el-form-item>
106   - <el-form-item label="最后一次执行的开始时间:">{{ parseTime(form.executeEndTime) }}</el-form-item>
107   - <el-form-item label="上一次触发时间:">{{ parseTime(form.firePrevTime) }}</el-form-item>
108   - <el-form-item label="下一次触发时间:">{{ parseTime(form.fireNextTime) }}</el-form-item>
109   - <el-form-item label="监控超时时间:">{{ form.monitorTimeout > 0 ? form.monitorTimeout + " 毫秒" : "未开启" }}</el-form-item>
110   - </el-col>
111   - </el-row>
112   - </el-form>
113   - <div slot="footer" class="dialog-footer">
114   - <el-button @click="openView = false">关 闭</el-button>
115   - </div>
116   - </el-dialog>
117   -
118   - </div>
119   -</template>
120   -
121   -<script>
122   -import { listJob, getJob, delJob, addJob, updateJob, exportJob, runJob, changeJobStatus } from "@/api/monitor/job";
123   -
124   -export default {
125   - name: "Job",
126   - data() {
127   - return {
128   - // 遮罩层
129   - loading: true,
130   - // 显示搜索条件
131   - showSearch: true,
132   - // 总条数
133   - total: 0,
134   - // 定时任务表格数据
135   - jobList: [],
136   - // 弹出层标题
137   - title: "",
138   - // 是否显示弹出层
139   - open: false,
140   - // 是否显示详细弹出层
141   - openView: false,
142   - // 状态字典
143   - statusOptions: [],
144   - // 查询参数
145   - queryParams: {
146   - pageNo: 1,
147   - pageSize: 10,
148   - name: undefined,
149   - status: undefined,
150   - handlerName: undefined
151   - },
152   - // 表单参数
153   - form: {},
154   - // 表单校验
155   - rules: {
156   - name: [{ required: true, message: "任务名称不能为空", trigger: "blur" }],
157   - handlerName: [{ required: true, message: "处理器的名字不能为空", trigger: "blur" }],
158   - cronExpression: [{ required: true, message: "CRON 表达式不能为空", trigger: "blur" }],
159   - }
160   - };
161   - },
162   - created() {
163   - this.getList();
164   - },
165   - methods: {
166   - /** 查询定时任务列表 */
167   - getList() {
168   - this.loading = true;
169   - listJob(this.queryParams).then(response => {
170   - this.jobList = response.data.list;
171   - this.total = response.data.total;
172   - this.loading = false;
173   - });
174   - },
175   - /** 取消按钮 */
176   - cancel() {
177   - this.open = false;
178   - this.reset();
179   - },
180   - /** 表单重置 */
181   - reset() {
182   - this.form = {
183   - id: undefined,
184   - name: undefined,
185   - handlerName: undefined,
186   - handlerParam: undefined,
187   - cronExpression: undefined,
188   - monitorTimeout: undefined,
189   - };
190   - this.resetForm("form");
191   - },
192   - /** 搜索按钮操作 */
193   - handleQuery() {
194   - this.queryParams.pageNo = 1;
195   - this.getList();
196   - },
197   - /** 重置按钮操作 */
198   - resetQuery() {
199   - this.resetForm("queryForm");
200   - this.handleQuery();
201   - },
202   - // 任务状态修改
203   - handleStatusChange(row) {
204   - let text = row.status === "0" ? "启用" : "停用";
205   - this.$confirm('确认要"' + text + '""' + row.name + '"任务吗?', "警告", {
206   - confirmButtonText: "确定",
207   - cancelButtonText: "取消",
208   - type: "warning"
209   - }).then(function() {
210   - return changeJobStatus(row.id, row.status);
211   - }).then(() => {
212   - this.msgSuccess(text + "成功");
213   - }).catch(function() {
214   - row.status = row.status === "0" ? "1" : "0";
215   - });
216   - },
217   - /* 立即执行一次 */
218   - handleRun(row) {
219   - this.$confirm('确认要立即执行一次"' + row.name + '"任务吗?', "警告", {
220   - confirmButtonText: "确定",
221   - cancelButtonText: "取消",
222   - type: "warning"
223   - }).then(function() {
224   - return runJob(row.id, row.jobGroup);
225   - }).then(() => {
226   - this.msgSuccess("执行成功");
227   - })
228   - },
229   - /** 任务详细信息 */
230   - handleView(row) {
231   - getJob(row.id).then(response => {
232   - this.form = response.data;
233   - this.openView = true;
234   - });
235   - },
236   - /** 任务日志列表查询 */
237   - handleJobLog() {
238   - this.$router.push("/job/log");
239   - },
240   - /** 新增按钮操作 */
241   - handleAdd() {
242   - this.reset();
243   - this.open = true;
244   - this.title = "添加任务";
245   - },
246   - /** 修改按钮操作 */
247   - handleUpdate(row) {
248   - this.reset();
249   - const id = row.id;
250   - getJob(id).then(response => {
251   - this.form = response.data;
252   - this.open = true;
253   - this.title = "修改任务";
254   - });
255   - },
256   - /** 提交按钮 */
257   - submitForm: function() {
258   - this.$refs["form"].validate(valid => {
259   - if (valid) {
260   - if (this.form.id !== undefined) {
261   - updateJob(this.form).then(response => {
262   - this.msgSuccess("修改成功");
263   - this.open = false;
264   - this.getList();
265   - });
266   - } else {
267   - addJob(this.form).then(response => {
268   - this.msgSuccess("新增成功");
269   - this.open = false;
270   - this.getList();
271   - });
272   - }
273   - }
274   - });
275   - },
276   - /** 删除按钮操作 */
277   - handleDelete(row) {
278   - const ids = row.id || this.ids;
279   - this.$confirm('是否确认删除定时任务编号为"' + ids + '"的数据项?', "警告", {
280   - confirmButtonText: "确定",
281   - cancelButtonText: "取消",
282   - type: "warning"
283   - }).then(function() {
284   - return delJob(ids);
285   - }).then(() => {
286   - this.getList();
287   - this.msgSuccess("删除成功");
288   - })
289   - },
290   - /** 导出按钮操作 */
291   - handleExport() {
292   - const queryParams = this.queryParams;
293   - this.$confirm("是否确认导出所有定时任务数据项?", "警告", {
294   - confirmButtonText: "确定",
295   - cancelButtonText: "取消",
296   - type: "warning"
297   - }).then(function() {
298   - return exportJob(queryParams);
299   - }).then(response => {
300   - this.download(response.msg);
301   - })
302   - }
303   - }
304   -};
305   -</script>
  1 +<template>
  2 + <div class="app-container">
  3 + <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px">
  4 + <el-form-item label="任务名称" prop="name">
  5 + <el-input v-model="queryParams.name" placeholder="请输入任务名称" clearable size="small" @keyup.enter.native="handleQuery"/>
  6 + </el-form-item>
  7 + <el-form-item label="任务状态" prop="status">
  8 + <el-select v-model="queryParams.status" placeholder="请选择任务状态" clearable size="small">
  9 + <el-option v-for="dict in this.getDictDatas(DICT_TYPE.INF_JOB_STATUS)"
  10 + :key="dict.value" :label="dict.label" :value="dict.value"/>
  11 + </el-select>
  12 + </el-form-item>
  13 + <el-form-item label="处理器的名字" prop="handlerName">
  14 + <el-input v-model="queryParams.handlerName" placeholder="请输入处理器的名字" clearable size="small" @keyup.enter.native="handleQuery"/>
  15 + </el-form-item>
  16 + <el-form-item>
  17 + <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  18 + <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  19 + </el-form-item>
  20 + </el-form>
  21 +
  22 + <el-row :gutter="10" class="mb8">
  23 + <el-col :span="1.5">
  24 + <el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd"
  25 + v-hasPermi="['infra:job:create']">新增</el-button>
  26 + </el-col>
  27 + <el-col :span="1.5">
  28 + <el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport"
  29 + v-hasPermi="['infra:job:export']">导出</el-button>
  30 + </el-col>
  31 + <el-col :span="1.5">
  32 + <el-button type="info" icon="el-icon-s-operation" size="mini" @click="handleJobLog"
  33 + v-hasPermi="['monitor:job:query']">日志</el-button>
  34 + </el-col>
  35 + <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  36 + </el-row>
  37 +
  38 + <el-table v-loading="loading" :data="jobList">
  39 + <el-table-column label="任务编号" align="center" prop="id" />
  40 + <el-table-column label="任务名称" align="center" prop="name" />
  41 + <el-table-column label="任务状态" align="center" prop="status">
  42 + <template slot-scope="scope">
  43 + <span>{{ getDictDataLabel(DICT_TYPE.INF_JOB_STATUS, scope.row.status) }}</span>
  44 + </template>
  45 + </el-table-column>>
  46 + <el-table-column label="处理器的名字" align="center" prop="handlerName" />
  47 + <el-table-column label="处理器的参数" align="center" prop="handlerParam" />
  48 + <el-table-column label="CRON 表达式" align="center" prop="cronExpression" />
  49 + <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  50 + <template slot-scope="scope">
  51 + <el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)"
  52 + v-hasPermi="['infra:job:query']">详细</el-button>
  53 + <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
  54 + v-hasPermi="['infra:job:update']">修改</el-button>
  55 + <el-button size="mini" type="text" icon="el-icon-check" @click="handleChangeStatus(scope.row, true)"
  56 + v-hasPermi="['infra:job:update']">开启</el-button>
  57 + <el-button size="mini" type="text" icon="el-icon-close" @click="handleChangeStatus(scope.row, false)"
  58 + v-hasPermi="['infra:job:update']">暂停</el-button>
  59 + <el-button size="mini" type="text" icon="el-icon-caret-right" @click="handleRun(scope.row)"
  60 + v-hasPermi="['infra:job:trigger']">执行一次</el-button>
  61 + <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
  62 + v-hasPermi="['infra:job:delete']">删除</el-button>
  63 + </template>
  64 + </el-table-column>
  65 + </el-table>
  66 + <!-- 分页组件 -->
  67 + <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
  68 + @pagination="getList"/>
  69 +
  70 + <!-- 添加或修改定时任务对话框 -->
  71 + <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
  72 + <el-form ref="form" :model="form" :rules="rules" label-width="120px">
  73 + <el-form-item label="任务名称" prop="name">
  74 + <el-input v-model="form.name" placeholder="请输入任务名称" />
  75 + </el-form-item>
  76 + <el-form-item label="处理器的名字" prop="handlerName">
  77 + <el-input v-model="form.handlerName" placeholder="请输入处理器的名字" v-bind:readonly="form.id !== undefined" />
  78 + </el-form-item>
  79 + <el-form-item label="处理器的参数" prop="handlerParam">
  80 + <el-input v-model="form.handlerParam" placeholder="请输入处理器的参数" />
  81 + </el-form-item>
  82 + <el-form-item label="CRON 表达式" prop="cronExpression">
  83 + <el-input v-model="form.cronExpression" placeholder="请输入CRON 表达式" />
  84 + </el-form-item>
  85 + <el-form-item label="监控超时时间" prop="monitorTimeout">
  86 + <el-input v-model="form.monitorTimeout" placeholder="请输入监控超时时间,单位:毫秒" />
  87 + </el-form-item>
  88 + </el-form>
  89 + <div slot="footer" class="dialog-footer">
  90 + <el-button type="primary" @click="submitForm">确 定</el-button>
  91 + <el-button @click="cancel">取 消</el-button>
  92 + </div>
  93 + </el-dialog>
  94 +
  95 + <!-- 任务日志详细 -->
  96 + <el-dialog title="任务详细" :visible.sync="openView" width="700px" append-to-body>
  97 + <el-form ref="form" :model="form" label-width="200px" size="mini">
  98 + <el-row>
  99 + <el-col :span="24">
  100 + <el-form-item label="任务编号:">{{ form.id }}</el-form-item>
  101 + <el-form-item label="任务名称:">{{ form.name }}</el-form-item>
  102 + <el-form-item label="任务名称:">{{ getDictDataLabel(DICT_TYPE.INF_JOB_STATUS, form.status) }}</el-form-item>
  103 + <el-form-item label="处理器的名字:">{{ form.handlerName }}</el-form-item>
  104 + <el-form-item label="处理器的参数:">{{ form.handlerParam }}</el-form-item>
  105 + <el-form-item label="cron表达式:">{{ form.cronExpression }}</el-form-item>
  106 + <el-form-item label="最后一次执行的开始时间:">{{ parseTime(form.executeBeginTime) }}</el-form-item>
  107 + <el-form-item label="最后一次执行的开始时间:">{{ parseTime(form.executeEndTime) }}</el-form-item>
  108 + <el-form-item label="上一次触发时间:">{{ parseTime(form.firePrevTime) }}</el-form-item>
  109 + <el-form-item label="下一次触发时间:">{{ parseTime(form.fireNextTime) }}</el-form-item>
  110 + <el-form-item label="监控超时时间:">{{ form.monitorTimeout > 0 ? form.monitorTimeout + " 毫秒" : "未开启" }}</el-form-item>
  111 + </el-col>
  112 + </el-row>
  113 + </el-form>
  114 + <div slot="footer" class="dialog-footer">
  115 + <el-button @click="openView = false">关 闭</el-button>
  116 + </div>
  117 + </el-dialog>
  118 +
  119 + </div>
  120 +</template>
  121 +
  122 +<script>
  123 +import { listJob, getJob, delJob, addJob, updateJob, exportJob, runJob, updateJobStatus } from "@/api/infra/job";
  124 +import { InfJobStatusEnum } from "@/utils/constants";
  125 +
  126 +export default {
  127 + name: "Job",
  128 + data() {
  129 + return {
  130 + // 遮罩层
  131 + loading: true,
  132 + // 显示搜索条件
  133 + showSearch: true,
  134 + // 总条数
  135 + total: 0,
  136 + // 定时任务表格数据
  137 + jobList: [],
  138 + // 弹出层标题
  139 + title: "",
  140 + // 是否显示弹出层
  141 + open: false,
  142 + // 是否显示详细弹出层
  143 + openView: false,
  144 + // 状态字典
  145 + statusOptions: [],
  146 + // 查询参数
  147 + queryParams: {
  148 + pageNo: 1,
  149 + pageSize: 10,
  150 + name: undefined,
  151 + status: undefined,
  152 + handlerName: undefined
  153 + },
  154 + // 表单参数
  155 + form: {},
  156 + // 表单校验
  157 + rules: {
  158 + name: [{ required: true, message: "任务名称不能为空", trigger: "blur" }],
  159 + handlerName: [{ required: true, message: "处理器的名字不能为空", trigger: "blur" }],
  160 + cronExpression: [{ required: true, message: "CRON 表达式不能为空", trigger: "blur" }],
  161 + }
  162 + };
  163 + },
  164 + created() {
  165 + this.getList();
  166 + },
  167 + methods: {
  168 + /** 查询定时任务列表 */
  169 + getList() {
  170 + this.loading = true;
  171 + listJob(this.queryParams).then(response => {
  172 + this.jobList = response.data.list;
  173 + this.total = response.data.total;
  174 + this.loading = false;
  175 + });
  176 + },
  177 + /** 取消按钮 */
  178 + cancel() {
  179 + this.open = false;
  180 + this.reset();
  181 + },
  182 + /** 表单重置 */
  183 + reset() {
  184 + this.form = {
  185 + id: undefined,
  186 + name: undefined,
  187 + handlerName: undefined,
  188 + handlerParam: undefined,
  189 + cronExpression: undefined,
  190 + monitorTimeout: undefined,
  191 + };
  192 + this.resetForm("form");
  193 + },
  194 + /** 搜索按钮操作 */
  195 + handleQuery() {
  196 + this.queryParams.pageNo = 1;
  197 + this.getList();
  198 + },
  199 + /** 重置按钮操作 */
  200 + resetQuery() {
  201 + this.resetForm("queryForm");
  202 + this.handleQuery();
  203 + },
  204 + /** 立即执行一次 **/
  205 + handleRun(row) {
  206 + this.$confirm('确认要立即执行一次"' + row.name + '"任务吗?', "警告", {
  207 + confirmButtonText: "确定",
  208 + cancelButtonText: "取消",
  209 + type: "warning"
  210 + }).then(function() {
  211 + return runJob(row.id);
  212 + }).then(() => {
  213 + this.msgSuccess("执行成功");
  214 + })
  215 + },
  216 + /** 任务详细信息 */
  217 + handleView(row) {
  218 + getJob(row.id).then(response => {
  219 + this.form = response.data;
  220 + this.openView = true;
  221 + });
  222 + },
  223 + /** 任务日志列表查询 */
  224 + handleJobLog() {
  225 + this.$router.push("/job/log");
  226 + },
  227 + /** 新增按钮操作 */
  228 + handleAdd() {
  229 + this.reset();
  230 + this.open = true;
  231 + this.title = "添加任务";
  232 + },
  233 + /** 修改按钮操作 */
  234 + handleUpdate(row) {
  235 + this.reset();
  236 + const id = row.id;
  237 + getJob(id).then(response => {
  238 + this.form = response.data;
  239 + this.open = true;
  240 + this.title = "修改任务";
  241 + });
  242 + },
  243 + /** 提交按钮 */
  244 + submitForm: function() {
  245 + this.$refs["form"].validate(valid => {
  246 + if (valid) {
  247 + if (this.form.id !== undefined) {
  248 + updateJob(this.form).then(response => {
  249 + this.msgSuccess("修改成功");
  250 + this.open = false;
  251 + this.getList();
  252 + });
  253 + } else {
  254 + addJob(this.form).then(response => {
  255 + this.msgSuccess("新增成功");
  256 + this.open = false;
  257 + this.getList();
  258 + });
  259 + }
  260 + }
  261 + });
  262 + },
  263 + /** 删除按钮操作 */
  264 + handleDelete(row) {
  265 + const ids = row.id;
  266 + this.$confirm('是否确认删除定时任务编号为"' + ids + '"的数据项?', "警告", {
  267 + confirmButtonText: "确定",
  268 + cancelButtonText: "取消",
  269 + type: "warning"
  270 + }).then(function() {
  271 + return delJob(ids);
  272 + }).then(() => {
  273 + this.getList();
  274 + this.msgSuccess("删除成功");
  275 + })
  276 + },
  277 + /** 更新状态操作 */
  278 + handleChangeStatus(row, open) {
  279 + const id = row.id;
  280 + let status = open ? InfJobStatusEnum.NORMAL : InfJobStatusEnum.STOP;
  281 + let statusStr = open ? '开启' : '关闭';
  282 + this.$confirm('是否确认' + statusStr + '定时任务编号为"' + id + '"的数据项?', "警告", {
  283 + confirmButtonText: "确定",
  284 + cancelButtonText: "取消",
  285 + type: "warning"
  286 + }).then(function() {
  287 + return updateJobStatus(id, status);
  288 + }).then(() => {
  289 + this.getList();
  290 + this.msgSuccess(statusStr + "成功");
  291 + })
  292 + },
  293 + /** 导出按钮操作 */
  294 + handleExport() {
  295 + const queryParams = this.queryParams;
  296 + this.$confirm("是否确认导出所有定时任务数据项?", "警告", {
  297 + confirmButtonText: "确定",
  298 + cancelButtonText: "取消",
  299 + type: "warning"
  300 + }).then(function() {
  301 + return exportJob(queryParams);
  302 + }).then(response => {
  303 + this.downloadExcel(response, '定时任务.xls');
  304 + })
  305 + }
  306 + }
  307 +};
  308 +</script>
... ...
ruoyi-ui/src/views/monitor/job/log.vue renamed to ruoyi-ui/src/views/infra/job/log.vue
ruoyi-ui/src/views/monitor/server/index.vue renamed to ruoyi-ui/src/views/infra/server/index.vue
1   -<template>
2   - <div class="app-container">
3   - <el-row>
4   - <el-col :span="12" class="card-box">
5   - <el-card>
6   - <div slot="header"><span>CPU</span></div>
7   - <div class="el-table el-table--enable-row-hover el-table--medium">
8   - <table cellspacing="0" style="width: 100%;">
9   - <thead>
10   - <tr>
11   - <th class="is-leaf"><div class="cell">属性</div></th>
12   - <th class="is-leaf"><div class="cell">值</div></th>
13   - </tr>
14   - </thead>
15   - <tbody>
16   - <tr>
17   - <td><div class="cell">核心数</div></td>
18   - <td><div class="cell" v-if="server.cpu">{{ server.cpu.cpuNum }}</div></td>
19   - </tr>
20   - <tr>
21   - <td><div class="cell">用户使用率</div></td>
22   - <td><div class="cell" v-if="server.cpu">{{ server.cpu.used }}%</div></td>
23   - </tr>
24   - <tr>
25   - <td><div class="cell">系统使用率</div></td>
26   - <td><div class="cell" v-if="server.cpu">{{ server.cpu.sys }}%</div></td>
27   - </tr>
28   - <tr>
29   - <td><div class="cell">当前空闲率</div></td>
30   - <td><div class="cell" v-if="server.cpu">{{ server.cpu.free }}%</div></td>
31   - </tr>
32   - </tbody>
33   - </table>
34   - </div>
35   - </el-card>
36   - </el-col>
37   -
38   - <el-col :span="12" class="card-box">
39   - <el-card>
40   - <div slot="header"><span>内存</span></div>
41   - <div class="el-table el-table--enable-row-hover el-table--medium">
42   - <table cellspacing="0" style="width: 100%;">
43   - <thead>
44   - <tr>
45   - <th class="is-leaf"><div class="cell">属性</div></th>
46   - <th class="is-leaf"><div class="cell">内存</div></th>
47   - <th class="is-leaf"><div class="cell">JVM</div></th>
48   - </tr>
49   - </thead>
50   - <tbody>
51   - <tr>
52   - <td><div class="cell">总内存</div></td>
53   - <td><div class="cell" v-if="server.mem">{{ server.mem.total }}G</div></td>
54   - <td><div class="cell" v-if="server.jvm">{{ server.jvm.total }}M</div></td>
55   - </tr>
56   - <tr>
57   - <td><div class="cell">已用内存</div></td>
58   - <td><div class="cell" v-if="server.mem">{{ server.mem.used}}G</div></td>
59   - <td><div class="cell" v-if="server.jvm">{{ server.jvm.used}}M</div></td>
60   - </tr>
61   - <tr>
62   - <td><div class="cell">剩余内存</div></td>
63   - <td><div class="cell" v-if="server.mem">{{ server.mem.free }}G</div></td>
64   - <td><div class="cell" v-if="server.jvm">{{ server.jvm.free }}M</div></td>
65   - </tr>
66   - <tr>
67   - <td><div class="cell">使用率</div></td>
68   - <td><div class="cell" v-if="server.mem" :class="{'text-danger': server.mem.usage > 80}">{{ server.mem.usage }}%</div></td>
69   - <td><div class="cell" v-if="server.jvm" :class="{'text-danger': server.jvm.usage > 80}">{{ server.jvm.usage }}%</div></td>
70   - </tr>
71   - </tbody>
72   - </table>
73   - </div>
74   - </el-card>
75   - </el-col>
76   -
77   - <el-col :span="24" class="card-box">
78   - <el-card>
79   - <div slot="header">
80   - <span>服务器信息</span>
81   - </div>
82   - <div class="el-table el-table--enable-row-hover el-table--medium">
83   - <table cellspacing="0" style="width: 100%;">
84   - <tbody>
85   - <tr>
86   - <td><div class="cell">服务器名称</div></td>
87   - <td><div class="cell" v-if="server.sys">{{ server.sys.computerName }}</div></td>
88   - <td><div class="cell">操作系统</div></td>
89   - <td><div class="cell" v-if="server.sys">{{ server.sys.osName }}</div></td>
90   - </tr>
91   - <tr>
92   - <td><div class="cell">服务器IP</div></td>
93   - <td><div class="cell" v-if="server.sys">{{ server.sys.computerIp }}</div></td>
94   - <td><div class="cell">系统架构</div></td>
95   - <td><div class="cell" v-if="server.sys">{{ server.sys.osArch }}</div></td>
96   - </tr>
97   - </tbody>
98   - </table>
99   - </div>
100   - </el-card>
101   - </el-col>
102   -
103   - <el-col :span="24" class="card-box">
104   - <el-card>
105   - <div slot="header">
106   - <span>Java虚拟机信息</span>
107   - </div>
108   - <div class="el-table el-table--enable-row-hover el-table--medium">
109   - <table cellspacing="0" style="width: 100%;">
110   - <tbody>
111   - <tr>
112   - <td><div class="cell">Java名称</div></td>
113   - <td><div class="cell" v-if="server.jvm">{{ server.jvm.name }}</div></td>
114   - <td><div class="cell">Java版本</div></td>
115   - <td><div class="cell" v-if="server.jvm">{{ server.jvm.version }}</div></td>
116   - </tr>
117   - <tr>
118   - <td><div class="cell">启动时间</div></td>
119   - <td><div class="cell" v-if="server.jvm">{{ server.jvm.startTime }}</div></td>
120   - <td><div class="cell">运行时长</div></td>
121   - <td><div class="cell" v-if="server.jvm">{{ server.jvm.runTime }}</div></td>
122   - </tr>
123   - <tr>
124   - <td colspan="1"><div class="cell">安装路径</div></td>
125   - <td colspan="3"><div class="cell" v-if="server.jvm">{{ server.jvm.home }}</div></td>
126   - </tr>
127   - <tr>
128   - <td colspan="1"><div class="cell">项目路径</div></td>
129   - <td colspan="3"><div class="cell" v-if="server.sys">{{ server.sys.userDir }}</div></td>
130   - </tr>
131   - </tbody>
132   - </table>
133   - </div>
134   - </el-card>
135   - </el-col>
136   -
137   - <el-col :span="24" class="card-box">
138   - <el-card>
139   - <div slot="header">
140   - <span>磁盘状态</span>
141   - </div>
142   - <div class="el-table el-table--enable-row-hover el-table--medium">
143   - <table cellspacing="0" style="width: 100%;">
144   - <thead>
145   - <tr>
146   - <th class="is-leaf"><div class="cell">盘符路径</div></th>
147   - <th class="is-leaf"><div class="cell">文件系统</div></th>
148   - <th class="is-leaf"><div class="cell">盘符类型</div></th>
149   - <th class="is-leaf"><div class="cell">总大小</div></th>
150   - <th class="is-leaf"><div class="cell">可用大小</div></th>
151   - <th class="is-leaf"><div class="cell">已用大小</div></th>
152   - <th class="is-leaf"><div class="cell">已用百分比</div></th>
153   - </tr>
154   - </thead>
155   - <tbody v-if="server.sysFiles">
156   - <tr v-for="sysFile in server.sysFiles">
157   - <td><div class="cell">{{ sysFile.dirName }}</div></td>
158   - <td><div class="cell">{{ sysFile.sysTypeName }}</div></td>
159   - <td><div class="cell">{{ sysFile.typeName }}</div></td>
160   - <td><div class="cell">{{ sysFile.total }}</div></td>
161   - <td><div class="cell">{{ sysFile.free }}</div></td>
162   - <td><div class="cell">{{ sysFile.used }}</div></td>
163   - <td><div class="cell" :class="{'text-danger': sysFile.usage > 80}">{{ sysFile.usage }}%</div></td>
164   - </tr>
165   - </tbody>
166   - </table>
167   - </div>
168   - </el-card>
169   - </el-col>
170   - </el-row>
171   - </div>
172   -</template>
173   -
174   -<script>
175   -import { getServer } from "@/api/monitor/server";
176   -
177   -export default {
178   - name: "Server",
179   - data() {
180   - return {
181   - // 加载层信息
182   - loading: [],
183   - // 服务器信息
184   - server: []
185   - };
186   - },
187   - created() {
188   - this.getList();
189   - this.openLoading();
190   - },
191   - methods: {
192   - /** 查询服务器信息 */
193   - getList() {
194   - getServer().then(response => {
195   - this.server = response.data;
196   - this.loading.close();
197   - });
198   - },
199   - // 打开加载层
200   - openLoading() {
201   - this.loading = this.$loading({
202   - lock: true,
203   - text: "拼命读取中",
204   - spinner: "el-icon-loading",
205   - background: "rgba(0, 0, 0, 0.7)"
206   - });
207   - }
208   - }
209   -};
  1 +<template>
  2 + <div class="app-container">
  3 + <el-row>
  4 + <el-col :span="12" class="card-box">
  5 + <el-card>
  6 + <div slot="header"><span>CPU</span></div>
  7 + <div class="el-table el-table--enable-row-hover el-table--medium">
  8 + <table cellspacing="0" style="width: 100%;">
  9 + <thead>
  10 + <tr>
  11 + <th class="is-leaf"><div class="cell">属性</div></th>
  12 + <th class="is-leaf"><div class="cell">值</div></th>
  13 + </tr>
  14 + </thead>
  15 + <tbody>
  16 + <tr>
  17 + <td><div class="cell">核心数</div></td>
  18 + <td><div class="cell" v-if="server.cpu">{{ server.cpu.cpuNum }}</div></td>
  19 + </tr>
  20 + <tr>
  21 + <td><div class="cell">用户使用率</div></td>
  22 + <td><div class="cell" v-if="server.cpu">{{ server.cpu.used }}%</div></td>
  23 + </tr>
  24 + <tr>
  25 + <td><div class="cell">系统使用率</div></td>
  26 + <td><div class="cell" v-if="server.cpu">{{ server.cpu.sys }}%</div></td>
  27 + </tr>
  28 + <tr>
  29 + <td><div class="cell">当前空闲率</div></td>
  30 + <td><div class="cell" v-if="server.cpu">{{ server.cpu.free }}%</div></td>
  31 + </tr>
  32 + </tbody>
  33 + </table>
  34 + </div>
  35 + </el-card>
  36 + </el-col>
  37 +
  38 + <el-col :span="12" class="card-box">
  39 + <el-card>
  40 + <div slot="header"><span>内存</span></div>
  41 + <div class="el-table el-table--enable-row-hover el-table--medium">
  42 + <table cellspacing="0" style="width: 100%;">
  43 + <thead>
  44 + <tr>
  45 + <th class="is-leaf"><div class="cell">属性</div></th>
  46 + <th class="is-leaf"><div class="cell">内存</div></th>
  47 + <th class="is-leaf"><div class="cell">JVM</div></th>
  48 + </tr>
  49 + </thead>
  50 + <tbody>
  51 + <tr>
  52 + <td><div class="cell">总内存</div></td>
  53 + <td><div class="cell" v-if="server.mem">{{ server.mem.total }}G</div></td>
  54 + <td><div class="cell" v-if="server.jvm">{{ server.jvm.total }}M</div></td>
  55 + </tr>
  56 + <tr>
  57 + <td><div class="cell">已用内存</div></td>
  58 + <td><div class="cell" v-if="server.mem">{{ server.mem.used}}G</div></td>
  59 + <td><div class="cell" v-if="server.jvm">{{ server.jvm.used}}M</div></td>
  60 + </tr>
  61 + <tr>
  62 + <td><div class="cell">剩余内存</div></td>
  63 + <td><div class="cell" v-if="server.mem">{{ server.mem.free }}G</div></td>
  64 + <td><div class="cell" v-if="server.jvm">{{ server.jvm.free }}M</div></td>
  65 + </tr>
  66 + <tr>
  67 + <td><div class="cell">使用率</div></td>
  68 + <td><div class="cell" v-if="server.mem" :class="{'text-danger': server.mem.usage > 80}">{{ server.mem.usage }}%</div></td>
  69 + <td><div class="cell" v-if="server.jvm" :class="{'text-danger': server.jvm.usage > 80}">{{ server.jvm.usage }}%</div></td>
  70 + </tr>
  71 + </tbody>
  72 + </table>
  73 + </div>
  74 + </el-card>
  75 + </el-col>
  76 +
  77 + <el-col :span="24" class="card-box">
  78 + <el-card>
  79 + <div slot="header">
  80 + <span>服务器信息</span>
  81 + </div>
  82 + <div class="el-table el-table--enable-row-hover el-table--medium">
  83 + <table cellspacing="0" style="width: 100%;">
  84 + <tbody>
  85 + <tr>
  86 + <td><div class="cell">服务器名称</div></td>
  87 + <td><div class="cell" v-if="server.sys">{{ server.sys.computerName }}</div></td>
  88 + <td><div class="cell">操作系统</div></td>
  89 + <td><div class="cell" v-if="server.sys">{{ server.sys.osName }}</div></td>
  90 + </tr>
  91 + <tr>
  92 + <td><div class="cell">服务器IP</div></td>
  93 + <td><div class="cell" v-if="server.sys">{{ server.sys.computerIp }}</div></td>
  94 + <td><div class="cell">系统架构</div></td>
  95 + <td><div class="cell" v-if="server.sys">{{ server.sys.osArch }}</div></td>
  96 + </tr>
  97 + </tbody>
  98 + </table>
  99 + </div>
  100 + </el-card>
  101 + </el-col>
  102 +
  103 + <el-col :span="24" class="card-box">
  104 + <el-card>
  105 + <div slot="header">
  106 + <span>Java虚拟机信息</span>
  107 + </div>
  108 + <div class="el-table el-table--enable-row-hover el-table--medium">
  109 + <table cellspacing="0" style="width: 100%;">
  110 + <tbody>
  111 + <tr>
  112 + <td><div class="cell">Java名称</div></td>
  113 + <td><div class="cell" v-if="server.jvm">{{ server.jvm.name }}</div></td>
  114 + <td><div class="cell">Java版本</div></td>
  115 + <td><div class="cell" v-if="server.jvm">{{ server.jvm.version }}</div></td>
  116 + </tr>
  117 + <tr>
  118 + <td><div class="cell">启动时间</div></td>
  119 + <td><div class="cell" v-if="server.jvm">{{ server.jvm.startTime }}</div></td>
  120 + <td><div class="cell">运行时长</div></td>
  121 + <td><div class="cell" v-if="server.jvm">{{ server.jvm.runTime }}</div></td>
  122 + </tr>
  123 + <tr>
  124 + <td colspan="1"><div class="cell">安装路径</div></td>
  125 + <td colspan="3"><div class="cell" v-if="server.jvm">{{ server.jvm.home }}</div></td>
  126 + </tr>
  127 + <tr>
  128 + <td colspan="1"><div class="cell">项目路径</div></td>
  129 + <td colspan="3"><div class="cell" v-if="server.sys">{{ server.sys.userDir }}</div></td>
  130 + </tr>
  131 + </tbody>
  132 + </table>
  133 + </div>
  134 + </el-card>
  135 + </el-col>
  136 +
  137 + <el-col :span="24" class="card-box">
  138 + <el-card>
  139 + <div slot="header">
  140 + <span>磁盘状态</span>
  141 + </div>
  142 + <div class="el-table el-table--enable-row-hover el-table--medium">
  143 + <table cellspacing="0" style="width: 100%;">
  144 + <thead>
  145 + <tr>
  146 + <th class="is-leaf"><div class="cell">盘符路径</div></th>
  147 + <th class="is-leaf"><div class="cell">文件系统</div></th>
  148 + <th class="is-leaf"><div class="cell">盘符类型</div></th>
  149 + <th class="is-leaf"><div class="cell">总大小</div></th>
  150 + <th class="is-leaf"><div class="cell">可用大小</div></th>
  151 + <th class="is-leaf"><div class="cell">已用大小</div></th>
  152 + <th class="is-leaf"><div class="cell">已用百分比</div></th>
  153 + </tr>
  154 + </thead>
  155 + <tbody v-if="server.sysFiles">
  156 + <tr v-for="sysFile in server.sysFiles">
  157 + <td><div class="cell">{{ sysFile.dirName }}</div></td>
  158 + <td><div class="cell">{{ sysFile.sysTypeName }}</div></td>
  159 + <td><div class="cell">{{ sysFile.typeName }}</div></td>
  160 + <td><div class="cell">{{ sysFile.total }}</div></td>
  161 + <td><div class="cell">{{ sysFile.free }}</div></td>
  162 + <td><div class="cell">{{ sysFile.used }}</div></td>
  163 + <td><div class="cell" :class="{'text-danger': sysFile.usage > 80}">{{ sysFile.usage }}%</div></td>
  164 + </tr>
  165 + </tbody>
  166 + </table>
  167 + </div>
  168 + </el-card>
  169 + </el-col>
  170 + </el-row>
  171 + </div>
  172 +</template>
  173 +
  174 +<script>
  175 +import { getServer } from "@/api/monitor/server";
  176 +
  177 +export default {
  178 + name: "Server",
  179 + data() {
  180 + return {
  181 + // 加载层信息
  182 + loading: [],
  183 + // 服务器信息
  184 + server: []
  185 + };
  186 + },
  187 + created() {
  188 + this.getList();
  189 + this.openLoading();
  190 + },
  191 + methods: {
  192 + /** 查询服务器信息 */
  193 + getList() {
  194 + getServer().then(response => {
  195 + this.server = response.data;
  196 + this.loading.close();
  197 + });
  198 + },
  199 + // 打开加载层
  200 + openLoading() {
  201 + this.loading = this.$loading({
  202 + lock: true,
  203 + text: "拼命读取中",
  204 + spinner: "el-icon-loading",
  205 + background: "rgba(0, 0, 0, 0.7)"
  206 + });
  207 + }
  208 + }
  209 +};
210 210 </script>
211 211 \ No newline at end of file
... ...
sql/ruoyi-vue-pro.sql
... ... @@ -11,7 +11,7 @@
11 11 Target Server Version : 50718
12 12 File Encoding : 65001
13 13  
14   - Date: 13/02/2021 13:39:00
  14 + Date: 14/02/2021 22:48:01
15 15 */
16 16  
17 17 SET NAMES utf8mb4;
... ... @@ -49,6 +49,38 @@ INSERT INTO `inf_config` VALUES (4, &#39;1&#39;, 2, &#39;xxx&#39;, &#39;demo.test&#39;, &#39;10&#39;, b&#39;0&#39;, &#39;5&#39;,
49 49 COMMIT;
50 50  
51 51 -- ----------------------------
  52 +-- Table structure for inf_job
  53 +-- ----------------------------
  54 +DROP TABLE IF EXISTS `inf_job`;
  55 +CREATE TABLE `inf_job` (
  56 + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '隞餃蝻',
  57 + `name` varchar(32) NOT NULL COMMENT '隞餃妍',
  58 + `status` tinyint(4) NOT NULL COMMENT '隞餃',
  59 + `handler_name` varchar(64) NOT NULL COMMENT '憭',
  60 + `handler_param` varchar(255) DEFAULT NULL COMMENT '憭',
  61 + `cron_expression` varchar(32) NOT NULL COMMENT 'CRON 銵刻噢撘',
  62 + `execute_begin_time` datetime DEFAULT NULL COMMENT '甈⊥銵憪',
  63 + `execute_end_time` datetime DEFAULT NULL COMMENT '甈⊥銵',
  64 + `fire_prev_time` datetime DEFAULT NULL COMMENT '銝甈∟圻',
  65 + `fire_next_time` datetime DEFAULT NULL COMMENT '銝甈∟圻',
  66 + `monitor_timeout` int(11) DEFAULT NULL COMMENT '頞',
  67 + `create_by` varchar(64) DEFAULT '' COMMENT '遣',
  68 + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '遣',
  69 + `update_by` varchar(64) DEFAULT '' COMMENT '',
  70 + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '',
  71 + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '',
  72 + PRIMARY KEY (`id`) USING BTREE
  73 +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COMMENT='摰隞餃銵';
  74 +
  75 +-- ----------------------------
  76 +-- Records of inf_job
  77 +-- ----------------------------
  78 +BEGIN;
  79 +INSERT INTO `inf_job` VALUES (2, ' Session 頞 Job', 3, 'sysUserSessionTimeoutJob', 'aoteman', '0/5 * * * * ? *', NULL, NULL, NULL, NULL, 10, '', '2021-02-07 10:15:09', '', '2021-02-07 12:57:44', b'1');
  80 +INSERT INTO `inf_job` VALUES (3, ' Session 頞 Job', 1, 'sysUserSessionTimeoutJob', NULL, '0/5 * * * * ? *', NULL, NULL, NULL, NULL, 0, '', '2021-02-07 13:07:32', '', '2021-02-07 13:07:32', b'0');
  81 +COMMIT;
  82 +
  83 +-- ----------------------------
52 84 -- Table structure for sys_dept
53 85 -- ----------------------------
54 86 DROP TABLE IF EXISTS `sys_dept`;
... ... @@ -103,7 +135,7 @@ CREATE TABLE `sys_dict_data` (
103 135 `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '',
104 136 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '',
105 137 PRIMARY KEY (`id`) USING BTREE
106   -) ENGINE=InnoDB AUTO_INCREMENT=53 DEFAULT CHARSET=utf8mb4 COMMENT='摮銵';
  138 +) ENGINE=InnoDB AUTO_INCREMENT=57 DEFAULT CHARSET=utf8mb4 COMMENT='摮銵';
107 139  
108 140 -- ----------------------------
109 141 -- Records of sys_dict_data
... ... @@ -111,10 +143,10 @@ CREATE TABLE `sys_dict_data` (
111 143 BEGIN;
112 144 INSERT INTO `sys_dict_data` VALUES (1, 1, '', '1', 'sys_user_sex', 0, '批', 'admin', '2021-01-05 17:03:48', '', '2021-01-06 05:48:53', b'0');
113 145 INSERT INTO `sys_dict_data` VALUES (2, 2, '憟', '2', 'sys_user_sex', 0, '批憟', 'admin', '2021-01-05 17:03:48', '', '2021-01-06 05:48:55', b'0');
114   -INSERT INTO `sys_dict_data` VALUES (8, 1, '甇虜', '0', 'sys_job_status', 0, '甇虜', 'admin', '2021-01-05 17:03:48', '', '2021-01-06 00:02:28', b'0');
115   -INSERT INTO `sys_dict_data` VALUES (9, 2, '', '1', 'sys_job_status', 0, '', 'admin', '2021-01-05 17:03:48', '', '2021-01-06 00:02:28', b'0');
116   -INSERT INTO `sys_dict_data` VALUES (10, 1, '暺恕', 'DEFAULT', 'sys_job_group', 0, '暺恕', 'admin', '2021-01-05 17:03:48', '', '2021-01-06 00:02:28', b'0');
117   -INSERT INTO `sys_dict_data` VALUES (11, 2, '蝟餌', 'SYSTEM', 'sys_job_group', 0, '蝟餌', 'admin', '2021-01-05 17:03:48', '', '2021-01-06 00:02:28', b'0');
  146 +INSERT INTO `sys_dict_data` VALUES (8, 1, '甇虜', '0', 'sys_job_status', 0, '甇虜', 'admin', '2021-01-05 17:03:48', '', '2021-02-07 07:43:57', b'1');
  147 +INSERT INTO `sys_dict_data` VALUES (9, 2, '', '1', 'sys_job_status', 0, '', 'admin', '2021-01-05 17:03:48', '', '2021-02-07 07:43:59', b'1');
  148 +INSERT INTO `sys_dict_data` VALUES (10, 1, '暺恕', 'DEFAULT', 'sys_job_group', 0, '暺恕', 'admin', '2021-01-05 17:03:48', '', '2021-02-07 07:43:44', b'1');
  149 +INSERT INTO `sys_dict_data` VALUES (11, 2, '蝟餌', 'SYSTEM', 'sys_job_group', 0, '蝟餌', 'admin', '2021-01-05 17:03:48', '', '2021-02-07 07:43:45', b'1');
118 150 INSERT INTO `sys_dict_data` VALUES (12, 1, '蝟餌蔭', '1', 'sys_config_type', 0, '蝐餃 - 蝟餌蔭', 'admin', '2021-01-05 17:03:48', '', '2021-01-18 07:41:59', b'0');
119 151 INSERT INTO `sys_dict_data` VALUES (13, 2, '摰', '2', 'sys_config_type', 0, '蝐餃 - 摰', 'admin', '2021-01-05 17:03:48', '', '2021-01-18 07:41:51', b'0');
120 152 INSERT INTO `sys_dict_data` VALUES (14, 1, '', '1', 'sys_notice_type', 0, '', 'admin', '2021-01-05 17:03:48', '', '2021-01-06 00:02:28', b'0');
... ... @@ -152,6 +184,10 @@ INSERT INTO `sys_dict_data` VALUES (49, 3, &#39;摰&#39;, &#39;3&#39;, &#39;inf_redis_timeo
152 184 INSERT INTO `sys_dict_data` VALUES (50, 1, '”嚗嚗', '1', 'tool_codegen_template_type', 0, NULL, '', '2021-02-05 07:09:06', '', '2021-02-05 07:21:52', b'0');
153 185 INSERT INTO `sys_dict_data` VALUES (51, 2, '”嚗嚗', '2', 'tool_codegen_template_type', 0, NULL, '', '2021-02-05 07:14:46', '', '2021-02-05 07:21:49', b'0');
154 186 INSERT INTO `sys_dict_data` VALUES (52, 3, '銝餃”嚗嚗', '3', 'tool_codegen_template_type', 0, NULL, '', '2021-02-05 07:21:45', '', '2021-02-06 18:54:26', b'1');
  187 +INSERT INTO `sys_dict_data` VALUES (53, 0, '葉', '0', 'inf_job_status', 0, NULL, '', '2021-02-07 07:46:49', '', '2021-02-07 07:46:49', b'0');
  188 +INSERT INTO `sys_dict_data` VALUES (54, 1, '撘', '1', 'inf_job_status', 0, NULL, '', '2021-02-07 07:46:57', '', '2021-02-07 11:54:09', b'0');
  189 +INSERT INTO `sys_dict_data` VALUES (55, 2, '撘虜', '2', 'inf_job_status', 0, NULL, '', '2021-02-07 07:47:10', '', '2021-02-07 11:54:12', b'0');
  190 +INSERT INTO `sys_dict_data` VALUES (56, 3, '', '3', 'inf_job_status', 0, NULL, '', '2021-02-07 07:47:16', '', '2021-02-07 11:54:14', b'0');
155 191 COMMIT;
156 192  
157 193 -- ----------------------------
... ... @@ -171,7 +207,7 @@ CREATE TABLE `sys_dict_type` (
171 207 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '',
172 208 PRIMARY KEY (`id`) USING BTREE,
173 209 UNIQUE KEY `dict_type` (`dict_type`)
174   -) ENGINE=InnoDB AUTO_INCREMENT=107 DEFAULT CHARSET=utf8mb4 COMMENT='摮蝐餃”';
  210 +) ENGINE=InnoDB AUTO_INCREMENT=108 DEFAULT CHARSET=utf8mb4 COMMENT='摮蝐餃”';
175 211  
176 212 -- ----------------------------
177 213 -- Records of sys_dict_type
... ... @@ -179,8 +215,8 @@ CREATE TABLE `sys_dict_type` (
179 215 BEGIN;
180 216 INSERT INTO `sys_dict_type` VALUES (1, '批', 'sys_user_sex', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 17:03:48', b'0');
181 217 INSERT INTO `sys_dict_type` VALUES (3, '蝟餌', 'sys_normal_disable', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2021-01-07 19:47:48', b'1');
182   -INSERT INTO `sys_dict_type` VALUES (4, '隞餃', 'sys_job_status', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 17:03:48', b'0');
183   -INSERT INTO `sys_dict_type` VALUES (5, '隞餃', 'sys_job_group', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 17:03:48', b'0');
  218 +INSERT INTO `sys_dict_type` VALUES (4, '隞餃蜀', 'sys_job_status', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 07:44:06', b'1');
  219 +INSERT INTO `sys_dict_type` VALUES (5, '隞餃', 'sys_job_group', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 07:43:52', b'1');
184 220 INSERT INTO `sys_dict_type` VALUES (6, '蝐餃', 'sys_config_type', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2021-01-18 07:41:04', b'0');
185 221 INSERT INTO `sys_dict_type` VALUES (7, '蝐餃', 'sys_notice_type', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 17:03:48', b'0');
186 222 INSERT INTO `sys_dict_type` VALUES (8, '', 'sys_notice_status', 0, NULL, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 17:03:48', b'0');
... ... @@ -190,6 +226,7 @@ INSERT INTO `sys_dict_type` VALUES (11, &#39;Boolean 蝐餃&#39;, &#39;sys_boolean_str
190 226 INSERT INTO `sys_dict_type` VALUES (104, '', 'sys_login_result', 0, '', '', '2021-01-18 06:17:11', '', '2021-01-18 06:17:11', b'0');
191 227 INSERT INTO `sys_dict_type` VALUES (105, 'Redis 頞蝐餃', 'inf_redis_timeout_type', 0, 'RedisKeyDefine.TimeoutTypeEnum', '', '2021-01-26 00:52:50', '', '2021-01-26 00:52:50', b'0');
192 228 INSERT INTO `sys_dict_type` VALUES (106, '隞芋蝐餃', 'tool_codegen_template_type', 0, NULL, '', '2021-02-05 07:08:06', '', '2021-02-05 07:08:06', b'0');
  229 +INSERT INTO `sys_dict_type` VALUES (107, '摰隞餃', 'inf_job_status', 0, NULL, '', '2021-02-07 07:44:16', '', '2021-02-07 07:44:16', b'0');
193 230 COMMIT;
194 231  
195 232 -- ----------------------------
... ... @@ -284,7 +321,7 @@ CREATE TABLE `sys_login_log` (
284 321 `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '',
285 322 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '',
286 323 PRIMARY KEY (`id`) USING BTREE
287   -) ENGINE=InnoDB AUTO_INCREMENT=73 DEFAULT CHARSET=utf8mb4 COMMENT='蝟餌挪霈啣';
  324 +) ENGINE=InnoDB AUTO_INCREMENT=80 DEFAULT CHARSET=utf8mb4 COMMENT='蝟餌挪霈啣';
288 325  
289 326 -- ----------------------------
290 327 -- Records of sys_login_log
... ... @@ -362,6 +399,13 @@ INSERT INTO `sys_login_log` VALUES (69, 100, &#39;a02dac13-0f1c-4f39-9497-759cace4fc
362 399 INSERT INTO `sys_login_log` VALUES (70, 100, 'd79982bf-79df-4547-ab7e-74bb9fe0c8ef', 'admin', 31, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-06 19:46:41', '', '2021-02-06 19:46:41', b'0');
363 400 INSERT INTO `sys_login_log` VALUES (71, 100, '5cc80a7e-f4ec-4e02-9d0c-1d26062e2be6', 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-06 19:46:45', '', '2021-02-06 19:46:45', b'0');
364 401 INSERT INTO `sys_login_log` VALUES (72, 100, '6ea05744-e7b2-4e6a-a1f6-d53032d4cc1d', 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-06 21:22:31', '', '2021-02-06 21:22:31', b'0');
  402 +INSERT INTO `sys_login_log` VALUES (73, 100, 'b89bdc69-e570-433d-ae62-c7cb634c012b', 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-07 06:38:34', '', '2021-02-07 06:38:34', b'0');
  403 +INSERT INTO `sys_login_log` VALUES (74, 100, 'ff74d6cd-f92b-4480-9262-7b4abecd21ee', 'admin', 31, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-07 07:36:10', '', '2021-02-07 07:36:10', b'0');
  404 +INSERT INTO `sys_login_log` VALUES (75, 100, '835d9a63-64fd-4391-bb33-583fd0e7155f', 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-07 07:36:14', '', '2021-02-07 07:36:14', b'0');
  405 +INSERT INTO `sys_login_log` VALUES (76, 100, '54079c2c-d1a6-4171-862e-c9a0604c8564', 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-07 08:36:48', '', '2021-02-07 08:36:48', b'0');
  406 +INSERT INTO `sys_login_log` VALUES (77, 100, '56588696-b307-4f14-bed9-9084775bdd60', 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-07 12:16:36', '', '2021-02-07 12:16:36', b'0');
  407 +INSERT INTO `sys_login_log` VALUES (78, 100, '053362eb-c878-4320-87ac-39cd2c78c5ab', 'admin', 30, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-07 13:05:42', '', '2021-02-07 13:05:42', b'0');
  408 +INSERT INTO `sys_login_log` VALUES (79, 100, 'c5d9d283-d103-44ca-bc0b-44f9e1708bd7', 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-07 13:05:42', '', '2021-02-07 13:05:42', b'0');
365 409 COMMIT;
366 410  
367 411 -- ----------------------------
... ... @@ -385,7 +429,7 @@ CREATE TABLE `sys_menu` (
385 429 `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '',
386 430 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '',
387 431 PRIMARY KEY (`id`) USING BTREE
388   -) ENGINE=InnoDB AUTO_INCREMENT=1075 DEFAULT CHARSET=utf8mb4 COMMENT='”';
  432 +) ENGINE=InnoDB AUTO_INCREMENT=1076 DEFAULT CHARSET=utf8mb4 COMMENT='”';
389 433  
390 434 -- ----------------------------
391 435 -- Records of sys_menu
... ... @@ -405,12 +449,12 @@ INSERT INTO `sys_menu` VALUES (106, &#39;蔭蝞∠&#39;, &#39;infra:config:list&#39;, 2, 7, 2
405 449 INSERT INTO `sys_menu` VALUES (107, '', 'system:notice:list', 2, 8, 1, 'notice', 'message', 'system/notice/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:45', b'0');
406 450 INSERT INTO `sys_menu` VALUES (108, '敹恣', '', 1, 9, 1, 'log', 'log', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:34:28', b'0');
407 451 INSERT INTO `sys_menu` VALUES (109, '蝥輻', 'system:user-session:list', 2, 10, 1, 'user-session', 'online', 'system/session/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-26 08:21:20', b'0');
408   -INSERT INTO `sys_menu` VALUES (110, '摰隞餃', 'monitor:job:list', 2, 2, 2, 'job', 'job', 'monitor/job/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:45', b'0');
  452 +INSERT INTO `sys_menu` VALUES (110, '摰隞餃', 'infra:job:query', 2, 2, 2, 'job', 'job', 'infra/job/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 13:01:36', b'0');
409 453 INSERT INTO `sys_menu` VALUES (111, '', 'monitor:druid:list', 2, 3, 2, 'druid', 'druid', 'monitor/druid/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:45', b'0');
410 454 INSERT INTO `sys_menu` VALUES (112, '', 'monitor:server:list', 2, 4, 2, 'http://127.0.0.1:8080/admin', 'server', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-21 04:58:59', b'0');
411 455 INSERT INTO `sys_menu` VALUES (113, 'Redis ', '', 2, 5, 2, 'redis', 'redis', 'infra/redis/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-26 00:56:30', b'0');
412 456 INSERT INTO `sys_menu` VALUES (114, '銵典遣', 'tool:build:list', 2, 1, 3, 'build', 'build', 'tool/build/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:45', b'0');
413   -INSERT INTO `sys_menu` VALUES (115, '隞', 'tool:codegen:query', 2, 2, 3, 'gen', 'code', 'tool/codegen/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-06 21:23:03', b'0');
  457 +INSERT INTO `sys_menu` VALUES (115, '隞', 'tool:codegen:query', 2, 2, 3, 'codegen', 'code', 'tool/codegen/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 06:48:08', b'0');
414 458 INSERT INTO `sys_menu` VALUES (116, '蝟餌', 'tool:swagger:list', 2, 3, 3, 'swagger', 'swagger', 'tool/swagger/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:45', b'0');
415 459 INSERT INTO `sys_menu` VALUES (500, '敹', 'system:operate-log:list', 2, 1, 108, 'operate-log', 'form', 'system/operatelog/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-16 18:25:45', b'0');
416 460 INSERT INTO `sys_menu` VALUES (501, '敶敹', 'system:login-log:list', 2, 2, 108, 'login-log', 'logininfor', 'system/loginlog/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-18 05:29:58', b'0');
... ... @@ -460,12 +504,12 @@ INSERT INTO `sys_menu` VALUES (1045, &#39;敹紡&#39;, &#39;system:login-log:export&#39;,
460 504 INSERT INTO `sys_menu` VALUES (1046, '蝥踵霂', 'system:user-session:list', 3, 1, 109, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-26 08:22:37', b'0');
461 505 INSERT INTO `sys_menu` VALUES (1047, '撩', 'monitor:online:batchLogout', 3, 2, 109, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-26 08:21:46', b'1');
462 506 INSERT INTO `sys_menu` VALUES (1048, '撘粹', 'system:user-session:delete', 3, 3, 109, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-26 08:22:54', b'0');
463   -INSERT INTO `sys_menu` VALUES (1049, '隞餃霂', 'monitor:job:query', 3, 1, 110, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0');
464   -INSERT INTO `sys_menu` VALUES (1050, '隞餃憓', 'monitor:job:add', 3, 2, 110, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0');
465   -INSERT INTO `sys_menu` VALUES (1051, '隞餃靽格', 'monitor:job:edit', 3, 3, 110, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0');
466   -INSERT INTO `sys_menu` VALUES (1052, '隞餃', 'monitor:job:remove', 3, 4, 110, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0');
467   -INSERT INTO `sys_menu` VALUES (1053, '耨', 'monitor:job:changeStatus', 3, 5, 110, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0');
468   -INSERT INTO `sys_menu` VALUES (1054, '隞餃撖澆', 'monitor:job:export', 3, 7, 110, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0');
  507 +INSERT INTO `sys_menu` VALUES (1049, '隞餃霂', 'monitor:job:query', 3, 1, 110, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 13:01:42', b'1');
  508 +INSERT INTO `sys_menu` VALUES (1050, '隞餃憓', 'infra:job:create', 3, 2, 110, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 13:01:58', b'0');
  509 +INSERT INTO `sys_menu` VALUES (1051, '隞餃靽格', 'infra:job:update', 3, 3, 110, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 13:02:10', b'0');
  510 +INSERT INTO `sys_menu` VALUES (1052, '隞餃', 'infra:job:delete', 3, 4, 110, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 13:02:22', b'0');
  511 +INSERT INTO `sys_menu` VALUES (1053, '耨', 'infra:job:update', 3, 5, 110, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 13:02:38', b'0');
  512 +INSERT INTO `sys_menu` VALUES (1054, '隞餃撖澆', 'infra:job:export', 3, 7, 110, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 13:02:51', b'0');
469 513 INSERT INTO `sys_menu` VALUES (1055, '霂', 'tool:gen:query', 3, 1, 115, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-06 21:23:25', b'1');
470 514 INSERT INTO `sys_menu` VALUES (1056, '耨', 'tool:codegen:update', 3, 2, 115, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-06 21:23:41', b'0');
471 515 INSERT INTO `sys_menu` VALUES (1057, '', 'tool:codegen:delete', 3, 3, 115, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-06 21:24:02', b'0');
... ... @@ -482,6 +526,7 @@ INSERT INTO `sys_menu` VALUES (1071, &#39;瘚內靘”遣&#39;, &#39;tool:test-demo:cr
482 526 INSERT INTO `sys_menu` VALUES (1072, '瘚內靘”', 'tool:test-demo:update', 3, 2, 1070, '', '', '', 0, '', '2021-02-06 12:42:49', '', '2021-02-06 12:53:51', b'0');
483 527 INSERT INTO `sys_menu` VALUES (1073, '瘚內靘”', 'tool:test-demo:delete', 3, 3, 1070, '', '', '', 0, '', '2021-02-06 12:42:49', '', '2021-02-06 12:53:58', b'0');
484 528 INSERT INTO `sys_menu` VALUES (1074, '瘚內靘”撖澆', 'tool:test-demo:export', 3, 4, 1070, '', '', '', 0, '', '2021-02-06 12:42:49', '', '2021-02-06 12:54:01', b'0');
  529 +INSERT INTO `sys_menu` VALUES (1075, '隞餃閫血', 'infra:job:trigger', 3, 8, 110, '', '', '', 0, '', '2021-02-07 13:03:10', '', '2021-02-07 13:03:10', b'0');
485 530 COMMIT;
486 531  
487 532 -- ----------------------------
... ... @@ -541,7 +586,7 @@ CREATE TABLE `sys_operate_log` (
541 586 `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '',
542 587 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '',
543 588 PRIMARY KEY (`id`) USING BTREE
544   -) ENGINE=InnoDB AUTO_INCREMENT=191 DEFAULT CHARSET=utf8mb4 COMMENT='敹扇敶';
  589 +) ENGINE=InnoDB AUTO_INCREMENT=261 DEFAULT CHARSET=utf8mb4 COMMENT='敹扇敶';
545 590  
546 591 -- ----------------------------
547 592 -- Records of sys_operate_log
... ... @@ -572,6 +617,76 @@ INSERT INTO `sys_operate_log` VALUES (187, &#39;f4bb2f5b-b095-409f-ac2d-a5ec3f36e43b
572 617 INSERT INTO `sys_operate_log` VALUES (188, '06d43f42-2f93-4862-9e73-92c3d0c5d8f2', 1, ' API', '靽格', 2, '', '', 'POST', '/api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.permission.SysMenuController.updateMenu(SysMenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"憸誨",\"permission\":\"tool:codegen:preview\",\"type\":3,\"sort\":\"4\",\"parentId\":115,\"path\":\"#\",\"icon\":\"#\",\"component\":\"\",\"status\":0,\"id\":1059}}', '2021-02-13 13:34:41', 8, 0, '', 'true', '', '2021-02-06 21:24:10', '', '2021-02-06 21:24:10', b'0');
573 618 INSERT INTO `sys_operate_log` VALUES (189, 'a8ed61bc-55b9-429e-a43c-ce892e8d6f7e', 1, ' API', '靽格', 2, '', '', 'POST', '/api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.permission.SysMenuController.updateMenu(SysMenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"誨",\"permission\":\"tool:codegen:download\",\"type\":3,\"sort\":\"5\",\"parentId\":115,\"path\":\"\",\"icon\":\"#\",\"component\":\"\",\"status\":0,\"id\":1060}}', '2021-02-13 13:34:52', 9, 0, '', 'true', '', '2021-02-06 21:24:20', '', '2021-02-06 21:24:20', b'0');
574 619 INSERT INTO `sys_operate_log` VALUES (190, '599ae718-60c4-4d94-a46f-2bfb73d577e8', 1, '隞 API', '鈭摨”蝏郊摨”挾摰', 3, '', '', 'PUT', '/api/tool/codegen/sync-from-db', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.tool.controller.codegen.ToolCodegenController.syncCodegenFromDB(Long)', '{\"tableId\":20}', '2021-02-13 13:36:32', 83, 500, 'ServiceException: 郊憭梯揖嚗', 'null', '', '2021-02-06 21:26:01', '', '2021-02-06 21:26:01', b'0');
  620 +INSERT INTO `sys_operate_log` VALUES (191, '1313b2b7-f626-4b21-a173-cdd7d35f3515', 1, '隞 API', '摨”挾摰', 4, '', '', 'DELETE', '/api/tool/codegen/delete', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.tool.controller.codegen.ToolCodegenController.deleteCodegen(Long)', '{\"tableId\":23}', '2021-02-14 10:35:09', 19, 0, '', 'true', '', '2021-02-07 06:38:51', '', '2021-02-07 06:38:51', b'0');
  621 +INSERT INTO `sys_operate_log` VALUES (192, 'a79f3ebf-c10f-4ed1-98bb-7bfad82e7189', 1, '隞 API', '摨”挾摰', 3, '', '', 'PUT', '/api/tool/codegen/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.tool.controller.codegen.ToolCodegenController.updateCodegen(ToolCodegenUpdateReqVO)', '{\"updateReqVO\":{\"table\":{\"importType\":1,\"tableName\":\"inf_job\",\"tableComment\":\"摰隞餃銵沔",\"remark\":null,\"moduleName\":\"infra\",\"businessName\":\"job\",\"className\":\"InfJob\",\"classComment\":\"摰隞餃\",\"author\":\"\",\"templateType\":1,\"parentMenuId\":null,\"id\":24},\"columns\":[{\"tableId\":24,\"columnName\":\"id\",\"columnType\":\"bigint(20)\",\"columnComment\":\"隞餃蝻\",\"nullable\":false,\"primaryKey\":true,\"autoIncrement\":\"true\",\"ordinalPosition\":1,\"javaType\":\"Long\",\"javaField\":\"id\",\"dictType\":\"\",\"example\":\"1024\",\"createOperation\":false,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":269},{\"tableId\":24,\"columnName\":\"name\",\"columnType\":\"varchar(32)\",\"columnComment\":\"隞餃妍\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":2,\"javaType\":\"String\",\"javaField\":\"name\",\"dictType\":\"\",\"example\":\"瘚遙\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"LIKE\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":270},{\"tableId\":24,\"columnName\":\"status\",\"columnType\":\"tinyint(4)\",\"columnComment\":\"隞餃",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":3,\"javaType\":\"Integer\",\"javaField\":\"status\",\"dictType\":\"\",\"example\":\"1\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"radio\",\"id\":271},{\"tableId\":24,\"columnName\":\"handler_name\",\"columnType\":\"varchar(64)\",\"columnComment\":\"憭",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":4,\"javaType\":\"String\",\"javaField\":\"handlerName\",\"dictType\":\"\",\"example\":\"sysUserSessionTimeoutJob\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"LIKE\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":272},{\"tableId\":24,\"columnName\":\"handler_param\",\"columnType\":\"varchar(255)\",\"columnComment\":\"憭\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":5,\"javaType\":\"String\",\"javaField\":\"handlerParam\",\"dictType\":\"\",\"example\":\"yudao\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":273},{\"tableId\":24,\"columnName\":\"cron_expression\",\"columnType\":\"varchar(32)\",\"columnComment\":\"CRON 銵刻噢撘",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":6,\"javaType\":\"String\",\"javaField\":\"cronExpression\",\"dictType\":\"\",\"example\":\"0/10 * * * * ? *\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":274},{\"tableId\":24,\"columnName\":\"execute_begin_time\",\"columnType\":\"datetime\",\"columnComment\":\"甈⊥銵憪\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":7,\"javaType\":\"Date\",\"javaField\":\"executeBeginTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":275},{\"tableId\":24,\"columnName\":\"execute_end_time\",\"columnType\":\"datetime\",\"columnComment\":\"甈⊥銵\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":8,\"javaType\":\"Date\",\"javaField\":\"executeEndTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":276},{\"tableId\":24,\"columnName\":\"fire_prev_time\",\"columnType\":\"datetime\",\"columnComment\":\"銝甈∟圻\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":9,\"javaType\":\"Date\",\"javaField\":\"firePrevTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":277},{\"tableId\":24,\"columnName\":\"fire_next_time\",\"columnType\":\"datetime\",\"columnComment\":\"銝甈∟圻\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":10,\"javaType\":\"Date\",\"javaField\":\"fireNextTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":278},{\"tableId\":24,\"columnName\":\"monitor_timeout\",\"columnType\":\"int(11)\",\"columnComment\":\"頞\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":11,\"javaType\":\"Integer\",\"javaField\":\"monitorTimeout\",\"dictType\":\"\",\"example\":\"1000\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":279},{\"tableId\":24,\"columnName\":\"create_by\",\"columnType\":\"varchar(64)\",\"columnComment\":\"遣",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":12,\"javaType\":\"String\",\"javaField\":\"createBy\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":280},{\"tableId\":24,\"columnName\":\"create_time\",\"columnType\":\"datetime\",\"columnComment\":\"遣\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":13,\"javaType\":\"Date\",\"javaField\":\"createTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":281},{\"tableId\":24,\"columnName\":\"update_by\",\"columnType\":\"varchar(64)\",\"columnComment\":\"",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":14,\"javaType\":\"String\",\"javaField\":\"updateBy\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":282},{\"tableId\":24,\"columnName\":\"update_time\",\"columnType\":\"datetime\",\"columnComment\":\"\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":15,\"javaType\":\"Date\",\"javaField\":\"updateTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":false,\"htmlType\":\"datetime\",\"id\":283},{\"tableId\":24,\"columnName\":\"deleted\",\"columnType\":\"bit(1)\",\"columnComment\":\"\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":16,\"javaType\":\"Boolean\",\"javaField\":\"deleted\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"radio\",\"id\":284}]}}', '2021-02-14 10:40:36', 68, 0, '', 'true', '', '2021-02-07 06:44:19', '', '2021-02-07 06:44:19', b'0');
  622 +INSERT INTO `sys_operate_log` VALUES (193, '9de3283d-69d3-4165-9893-cc0acc6914fe', 1, '摮蝐餃 API', '靽格摮蝐餃', 2, '', '', 'POST', '/api/system/dict-type/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.dict.SysDictTypeController.updateDictType(SysDictTypeUpdateReqVO)', '{\"reqVO\":{\"name\":\"隞餃蜀\",\"status\":0,\"remark\":null,\"id\":4}}', '2021-02-14 10:41:55', 11, 0, '', 'true', '', '2021-02-07 06:45:37', '', '2021-02-07 06:45:37', b'0');
  623 +INSERT INTO `sys_operate_log` VALUES (194, '7cb8ce2e-8216-42bb-b961-b70c966b6cdf', 1, '隞 API', '摨”挾摰', 3, '', '', 'PUT', '/api/tool/codegen/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.tool.controller.codegen.ToolCodegenController.updateCodegen(ToolCodegenUpdateReqVO)', '{\"updateReqVO\":{\"table\":{\"importType\":1,\"tableName\":\"inf_job\",\"tableComment\":\"摰隞餃銵沔",\"remark\":null,\"moduleName\":\"infra\",\"businessName\":\"job\",\"className\":\"InfJob\",\"classComment\":\"摰隞餃\",\"author\":\"\",\"templateType\":1,\"parentMenuId\":null,\"id\":24},\"columns\":[{\"tableId\":24,\"columnName\":\"id\",\"columnType\":\"bigint(20)\",\"columnComment\":\"隞餃蝻\",\"nullable\":false,\"primaryKey\":true,\"autoIncrement\":\"true\",\"ordinalPosition\":1,\"javaType\":\"Long\",\"javaField\":\"id\",\"dictType\":\"\",\"example\":\"1024\",\"createOperation\":false,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":269},{\"tableId\":24,\"columnName\":\"name\",\"columnType\":\"varchar(32)\",\"columnComment\":\"隞餃妍\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":2,\"javaType\":\"String\",\"javaField\":\"name\",\"dictType\":\"\",\"example\":\"瘚遙\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"LIKE\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":270},{\"tableId\":24,\"columnName\":\"status\",\"columnType\":\"tinyint(4)\",\"columnComment\":\"隞餃",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":3,\"javaType\":\"Integer\",\"javaField\":\"status\",\"dictType\":\"sys_job_status\",\"example\":\"1\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"radio\",\"id\":271},{\"tableId\":24,\"columnName\":\"handler_name\",\"columnType\":\"varchar(64)\",\"columnComment\":\"憭",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":4,\"javaType\":\"String\",\"javaField\":\"handlerName\",\"dictType\":\"\",\"example\":\"sysUserSessionTimeoutJob\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"LIKE\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":272},{\"tableId\":24,\"columnName\":\"handler_param\",\"columnType\":\"varchar(255)\",\"columnComment\":\"憭\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":5,\"javaType\":\"String\",\"javaField\":\"handlerParam\",\"dictType\":\"\",\"example\":\"yudao\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":273},{\"tableId\":24,\"columnName\":\"cron_expression\",\"columnType\":\"varchar(32)\",\"columnComment\":\"CRON 銵刻噢撘",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":6,\"javaType\":\"String\",\"javaField\":\"cronExpression\",\"dictType\":\"\",\"example\":\"0/10 * * * * ? *\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":274},{\"tableId\":24,\"columnName\":\"execute_begin_time\",\"columnType\":\"datetime\",\"columnComment\":\"甈⊥銵憪\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":7,\"javaType\":\"Date\",\"javaField\":\"executeBeginTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":275},{\"tableId\":24,\"columnName\":\"execute_end_time\",\"columnType\":\"datetime\",\"columnComment\":\"甈⊥銵\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":8,\"javaType\":\"Date\",\"javaField\":\"executeEndTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":276},{\"tableId\":24,\"columnName\":\"fire_prev_time\",\"columnType\":\"datetime\",\"columnComment\":\"銝甈∟圻\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":9,\"javaType\":\"Date\",\"javaField\":\"firePrevTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":277},{\"tableId\":24,\"columnName\":\"fire_next_time\",\"columnType\":\"datetime\",\"columnComment\":\"銝甈∟圻\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":10,\"javaType\":\"Date\",\"javaField\":\"fireNextTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":278},{\"tableId\":24,\"columnName\":\"monitor_timeout\",\"columnType\":\"int(11)\",\"columnComment\":\"頞\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":11,\"javaType\":\"Integer\",\"javaField\":\"monitorTimeout\",\"dictType\":\"\",\"example\":\"1000\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":279},{\"tableId\":24,\"columnName\":\"create_by\",\"columnType\":\"varchar(64)\",\"columnComment\":\"遣",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":12,\"javaType\":\"String\",\"javaField\":\"createBy\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":280},{\"tableId\":24,\"columnName\":\"create_time\",\"columnType\":\"datetime\",\"columnComment\":\"遣\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":13,\"javaType\":\"Date\",\"javaField\":\"createTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":281},{\"tableId\":24,\"columnName\":\"update_by\",\"columnType\":\"varchar(64)\",\"columnComment\":\"",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":14,\"javaType\":\"String\",\"javaField\":\"updateBy\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":282},{\"tableId\":24,\"columnName\":\"update_time\",\"columnType\":\"datetime\",\"columnComment\":\"\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":15,\"javaType\":\"Date\",\"javaField\":\"updateTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":false,\"htmlType\":\"datetime\",\"id\":283},{\"tableId\":24,\"columnName\":\"deleted\",\"columnType\":\"bit(1)\",\"columnComment\":\"\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":16,\"javaType\":\"Boolean\",\"javaField\":\"deleted\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"radio\",\"id\":284}]}}', '2021-02-14 10:42:22', 39, 0, '', 'true', '', '2021-02-07 06:46:04', '', '2021-02-07 06:46:04', b'0');
  624 +INSERT INTO `sys_operate_log` VALUES (195, 'dfc5015a-1677-43b9-9d76-4dee8a96f5ea', 1, '隞 API', '摨”挾摰', 3, '', '', 'PUT', '/api/tool/codegen/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.tool.controller.codegen.ToolCodegenController.updateCodegen(ToolCodegenUpdateReqVO)', '{\"updateReqVO\":{\"table\":{\"importType\":1,\"tableName\":\"inf_job\",\"tableComment\":\"摰隞餃銵沔",\"remark\":null,\"moduleName\":\"infra\",\"businessName\":\"job\",\"className\":\"InfJob\",\"classComment\":\"摰隞餃\",\"author\":\"",\"templateType\":1,\"parentMenuId\":null,\"id\":24},\"columns\":[{\"tableId\":24,\"columnName\":\"id\",\"columnType\":\"bigint(20)\",\"columnComment\":\"隞餃蝻\",\"nullable\":false,\"primaryKey\":true,\"autoIncrement\":\"true\",\"ordinalPosition\":1,\"javaType\":\"Long\",\"javaField\":\"id\",\"dictType\":\"\",\"example\":\"1024\",\"createOperation\":false,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":269},{\"tableId\":24,\"columnName\":\"name\",\"columnType\":\"varchar(32)\",\"columnComment\":\"隞餃妍\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":2,\"javaType\":\"String\",\"javaField\":\"name\",\"dictType\":\"\",\"example\":\"瘚遙\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"LIKE\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":270},{\"tableId\":24,\"columnName\":\"status\",\"columnType\":\"tinyint(4)\",\"columnComment\":\"隞餃",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":3,\"javaType\":\"Integer\",\"javaField\":\"status\",\"dictType\":\"sys_job_status\",\"example\":\"1\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"radio\",\"id\":271},{\"tableId\":24,\"columnName\":\"handler_name\",\"columnType\":\"varchar(64)\",\"columnComment\":\"憭",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":4,\"javaType\":\"String\",\"javaField\":\"handlerName\",\"dictType\":\"\",\"example\":\"sysUserSessionTimeoutJob\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"LIKE\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":272},{\"tableId\":24,\"columnName\":\"handler_param\",\"columnType\":\"varchar(255)\",\"columnComment\":\"憭\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":5,\"javaType\":\"String\",\"javaField\":\"handlerParam\",\"dictType\":\"\",\"example\":\"yudao\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":273},{\"tableId\":24,\"columnName\":\"cron_expression\",\"columnType\":\"varchar(32)\",\"columnComment\":\"CRON 銵刻噢撘",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":6,\"javaType\":\"String\",\"javaField\":\"cronExpression\",\"dictType\":\"\",\"example\":\"0/10 * * * * ? *\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":274},{\"tableId\":24,\"columnName\":\"execute_begin_time\",\"columnType\":\"datetime\",\"columnComment\":\"甈⊥銵憪\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":7,\"javaType\":\"Date\",\"javaField\":\"executeBeginTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":275},{\"tableId\":24,\"columnName\":\"execute_end_time\",\"columnType\":\"datetime\",\"columnComment\":\"甈⊥銵\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":8,\"javaType\":\"Date\",\"javaField\":\"executeEndTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":276},{\"tableId\":24,\"columnName\":\"fire_prev_time\",\"columnType\":\"datetime\",\"columnComment\":\"銝甈∟圻\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":9,\"javaType\":\"Date\",\"javaField\":\"firePrevTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":277},{\"tableId\":24,\"columnName\":\"fire_next_time\",\"columnType\":\"datetime\",\"columnComment\":\"銝甈∟圻\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":10,\"javaType\":\"Date\",\"javaField\":\"fireNextTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":278},{\"tableId\":24,\"columnName\":\"monitor_timeout\",\"columnType\":\"int(11)\",\"columnComment\":\"頞\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":11,\"javaType\":\"Integer\",\"javaField\":\"monitorTimeout\",\"dictType\":\"\",\"example\":\"1000\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":279},{\"tableId\":24,\"columnName\":\"create_by\",\"columnType\":\"varchar(64)\",\"columnComment\":\"遣",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":12,\"javaType\":\"String\",\"javaField\":\"createBy\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":280},{\"tableId\":24,\"columnName\":\"create_time\",\"columnType\":\"datetime\",\"columnComment\":\"遣\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":13,\"javaType\":\"Date\",\"javaField\":\"createTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":281},{\"tableId\":24,\"columnName\":\"update_by\",\"columnType\":\"varchar(64)\",\"columnComment\":\"",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":14,\"javaType\":\"String\",\"javaField\":\"updateBy\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":282},{\"tableId\":24,\"columnName\":\"update_time\",\"columnType\":\"datetime\",\"columnComment\":\"\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":15,\"javaType\":\"Date\",\"javaField\":\"updateTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":false,\"htmlType\":\"datetime\",\"id\":283},{\"tableId\":24,\"columnName\":\"deleted\",\"columnType\":\"bit(1)\",\"columnComment\":\"\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":16,\"javaType\":\"Boolean\",\"javaField\":\"deleted\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"radio\",\"id\":284}]}}', '2021-02-14 10:43:13', 31, 0, '', 'true', '', '2021-02-07 06:46:56', '', '2021-02-07 06:46:56', b'0');
  625 +INSERT INTO `sys_operate_log` VALUES (196, 'cef40362-081e-4e34-a070-b07fbe57a184', 1, ' API', '靽格', 2, '', '', 'POST', '/api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.permission.SysMenuController.updateMenu(SysMenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"隞",\"permission\":\"tool:codegen:query\",\"type\":2,\"sort\":\"2\",\"parentId\":3,\"path\":\"codegen\",\"icon\":\"code\",\"component\":\"tool/codegen/index\",\"status\":0,\"id\":115}}', '2021-02-14 10:44:25', 15, 0, '', 'true', '', '2021-02-07 06:48:08', '', '2021-02-07 06:48:08', b'0');
  626 +INSERT INTO `sys_operate_log` VALUES (197, '0eb2e9a1-7506-414a-836a-f658c9b69aac', 1, '摮蝐餃 API', '靽格摮蝐餃', 2, '', '', 'POST', '/api/system/dict-type/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.dict.SysDictTypeController.updateDictType(SysDictTypeUpdateReqVO)', '{\"reqVO\":{\"name\":\"隞餃蜀\",\"status\":0,\"remark\":null,\"id\":4}}', '2021-02-14 11:38:57', 8, 0, '', 'true', '', '2021-02-07 07:42:43', '', '2021-02-07 07:42:43', b'0');
  627 +INSERT INTO `sys_operate_log` VALUES (198, '9a82ba2d-dc41-4b05-9449-365d77ced8ba', 1, '摮蝐餃 API', '靽格摮蝐餃', 2, '', '', 'POST', '/api/system/dict-type/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.dict.SysDictTypeController.updateDictType(SysDictTypeUpdateReqVO)', '{\"reqVO\":{\"name\":\"隞餃蜀\",\"status\":0,\"remark\":null,\"id\":4}}', '2021-02-14 11:39:12', 7, 0, '', 'true', '', '2021-02-07 07:42:58', '', '2021-02-07 07:42:58', b'0');
  628 +INSERT INTO `sys_operate_log` VALUES (199, 'b739e8ca-59d1-4b90-b987-ff32e8c4e4a5', 1, '摮蝐餃 API', '摮蝐餃', 2, '', '', 'POST', '/api/system/dict-type/delete', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.dict.SysDictTypeController.deleteDictType(Long)', '{\"id\":5}', '2021-02-14 11:39:45', 4, 500, 'ServiceException: 嚗砲摮蝐餃', 'null', '', '2021-02-07 07:43:32', '', '2021-02-07 07:43:32', b'0');
  629 +INSERT INTO `sys_operate_log` VALUES (200, 'b01f2912-3473-4a32-957e-7fc318b2f0ab', 1, '摮 API', '摮', 2, '', '', 'POST', '/api/system/dict-data/delete', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.dict.SysDictDataController.deleteDictData(Long)', '{\"id\":10}', '2021-02-14 11:39:57', 6, 0, '', 'true', '', '2021-02-07 07:43:44', '', '2021-02-07 07:43:44', b'0');
  630 +INSERT INTO `sys_operate_log` VALUES (201, '20be4aa0-f26c-4218-8df8-54289f4cfa32', 1, '摮 API', '摮', 2, '', '', 'POST', '/api/system/dict-data/delete', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.dict.SysDictDataController.deleteDictData(Long)', '{\"id\":11}', '2021-02-14 11:39:59', 5, 0, '', 'true', '', '2021-02-07 07:43:45', '', '2021-02-07 07:43:45', b'0');
  631 +INSERT INTO `sys_operate_log` VALUES (202, '4caa969a-7115-435d-ae4f-b2ba7ff3723b', 1, '摮蝐餃 API', '摮蝐餃', 2, '', '', 'POST', '/api/system/dict-type/delete', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.dict.SysDictTypeController.deleteDictType(Long)', '{\"id\":5}', '2021-02-14 11:40:06', 5, 0, '', 'true', '', '2021-02-07 07:43:52', '', '2021-02-07 07:43:52', b'0');
  632 +INSERT INTO `sys_operate_log` VALUES (203, 'e667b0ab-c5bd-4f3f-a3a2-c82aaca2df7f', 1, '摮 API', '摮', 2, '', '', 'POST', '/api/system/dict-data/delete', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.dict.SysDictDataController.deleteDictData(Long)', '{\"id\":8}', '2021-02-14 11:40:11', 4, 0, '', 'true', '', '2021-02-07 07:43:57', '', '2021-02-07 07:43:57', b'0');
  633 +INSERT INTO `sys_operate_log` VALUES (204, '8438c7d0-b8f8-4bb5-bfa4-a975d90c5b49', 1, '摮 API', '摮', 2, '', '', 'POST', '/api/system/dict-data/delete', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.dict.SysDictDataController.deleteDictData(Long)', '{\"id\":9}', '2021-02-14 11:40:13', 5, 0, '', 'true', '', '2021-02-07 07:43:59', '', '2021-02-07 07:43:59', b'0');
  634 +INSERT INTO `sys_operate_log` VALUES (205, 'ab727852-a3e7-428a-b6c2-9280c7837b12', 1, '摮蝐餃 API', '摮蝐餃', 2, '', '', 'POST', '/api/system/dict-type/delete', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.dict.SysDictTypeController.deleteDictType(Long)', '{\"id\":4}', '2021-02-14 11:40:19', 6, 0, '', 'true', '', '2021-02-07 07:44:06', '', '2021-02-07 07:44:06', b'0');
  635 +INSERT INTO `sys_operate_log` VALUES (206, '23b40364-f41b-4302-a77a-89f6c7a133d4', 1, '摮蝐餃 API', '憓蝐餃', 2, '', '', 'POST', '/api/system/dict-type/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.dict.SysDictTypeController.createDictType(SysDictTypeCreateReqVO)', '{\"reqVO\":{\"name\":\"摰隞餃",\"status\":0,\"remark\":null,\"type\":\"inf_job_status\"}}', '2021-02-14 11:40:29', 9, 0, '', '107', '', '2021-02-07 07:44:16', '', '2021-02-07 07:44:16', b'0');
  636 +INSERT INTO `sys_operate_log` VALUES (207, '367441d5-9fd9-40fd-8552-492852645534', 1, '摮 API', '憓', 2, '', '', 'POST', '/api/system/dict-data/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.dict.SysDictDataController.createDictData(SysDictDataCreateReqVO)', '{\"reqVO\":{\"sort\":\"0\",\"label\":\"葉\",\"value\":\"0\",\"dictType\":\"inf_job_status\",\"status\":0,\"remark\":null}}', '2021-02-14 11:43:02', 8, 0, '', '53', '', '2021-02-07 07:46:49', '', '2021-02-07 07:46:49', b'0');
  637 +INSERT INTO `sys_operate_log` VALUES (208, '642c9566-4eb6-49aa-95a3-e7927f5671b7', 1, '摮 API', '憓', 2, '', '', 'POST', '/api/system/dict-data/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.dict.SysDictDataController.createDictData(SysDictDataCreateReqVO)', '{\"reqVO\":{\"sort\":\"1\",\"label\":\"撘餈",\"value\":\"1\",\"dictType\":\"inf_job_status\",\"status\":0,\"remark\":null}}', '2021-02-14 11:43:11', 6, 0, '', '54', '', '2021-02-07 07:46:57', '', '2021-02-07 07:46:57', b'0');
  638 +INSERT INTO `sys_operate_log` VALUES (209, '112176f4-04c9-4d51-ab56-98c5c245b601', 1, '摮 API', '憓', 2, '', '', 'POST', '/api/system/dict-data/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.dict.SysDictDataController.createDictData(SysDictDataCreateReqVO)', '{\"reqVO\":{\"sort\":\"2\",\"label\":\"撘虜餈",\"value\":\"2\",\"dictType\":\"inf_job_status\",\"status\":0,\"remark\":null}}', '2021-02-14 11:43:23', 6, 0, '', '55', '', '2021-02-07 07:47:10', '', '2021-02-07 07:47:10', b'0');
  639 +INSERT INTO `sys_operate_log` VALUES (210, '5aa5513e-e482-4587-aecc-2a78590ce455', 1, '摮 API', '憓', 2, '', '', 'POST', '/api/system/dict-data/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.dict.SysDictDataController.createDictData(SysDictDataCreateReqVO)', '{\"reqVO\":{\"sort\":\"3\",\"label\":\"",\"value\":\"3\",\"dictType\":\"inf_job_status\",\"status\":0,\"remark\":null}}', '2021-02-14 11:43:30', 6, 0, '', '56', '', '2021-02-07 07:47:16', '', '2021-02-07 07:47:16', b'0');
  640 +INSERT INTO `sys_operate_log` VALUES (211, '0248494d-524e-4f33-a5d0-457861c9015b', 1, '隞 API', '摨”挾摰', 3, '', '', 'PUT', '/api/tool/codegen/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.tool.controller.codegen.ToolCodegenController.updateCodegen(ToolCodegenUpdateReqVO)', '{\"updateReqVO\":{\"table\":{\"importType\":1,\"tableName\":\"inf_job\",\"tableComment\":\"摰隞餃銵沔",\"remark\":null,\"moduleName\":\"infra\",\"businessName\":\"job\",\"className\":\"InfJob\",\"classComment\":\"摰隞餃\",\"author\":\"",\"templateType\":1,\"parentMenuId\":null,\"id\":24},\"columns\":[{\"tableId\":24,\"columnName\":\"id\",\"columnType\":\"bigint(20)\",\"columnComment\":\"隞餃蝻\",\"nullable\":false,\"primaryKey\":true,\"autoIncrement\":\"true\",\"ordinalPosition\":1,\"javaType\":\"Long\",\"javaField\":\"id\",\"dictType\":\"\",\"example\":\"1024\",\"createOperation\":false,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":269},{\"tableId\":24,\"columnName\":\"name\",\"columnType\":\"varchar(32)\",\"columnComment\":\"隞餃妍\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":2,\"javaType\":\"String\",\"javaField\":\"name\",\"dictType\":\"\",\"example\":\"瘚遙\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"LIKE\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":270},{\"tableId\":24,\"columnName\":\"status\",\"columnType\":\"tinyint(4)\",\"columnComment\":\"隞餃",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":3,\"javaType\":\"Integer\",\"javaField\":\"status\",\"dictType\":\"inf_job_status\",\"example\":\"1\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"radio\",\"id\":271},{\"tableId\":24,\"columnName\":\"handler_name\",\"columnType\":\"varchar(64)\",\"columnComment\":\"憭",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":4,\"javaType\":\"String\",\"javaField\":\"handlerName\",\"dictType\":\"\",\"example\":\"sysUserSessionTimeoutJob\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"LIKE\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":272},{\"tableId\":24,\"columnName\":\"handler_param\",\"columnType\":\"varchar(255)\",\"columnComment\":\"憭\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":5,\"javaType\":\"String\",\"javaField\":\"handlerParam\",\"dictType\":\"\",\"example\":\"yudao\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":273},{\"tableId\":24,\"columnName\":\"cron_expression\",\"columnType\":\"varchar(32)\",\"columnComment\":\"CRON 銵刻噢撘",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":6,\"javaType\":\"String\",\"javaField\":\"cronExpression\",\"dictType\":\"\",\"example\":\"0/10 * * * * ? *\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":274},{\"tableId\":24,\"columnName\":\"execute_begin_time\",\"columnType\":\"datetime\",\"columnComment\":\"甈⊥銵憪\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":7,\"javaType\":\"Date\",\"javaField\":\"executeBeginTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":275},{\"tableId\":24,\"columnName\":\"execute_end_time\",\"columnType\":\"datetime\",\"columnComment\":\"甈⊥銵\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":8,\"javaType\":\"Date\",\"javaField\":\"executeEndTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":276},{\"tableId\":24,\"columnName\":\"fire_prev_time\",\"columnType\":\"datetime\",\"columnComment\":\"銝甈∟圻\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":9,\"javaType\":\"Date\",\"javaField\":\"firePrevTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":277},{\"tableId\":24,\"columnName\":\"fire_next_time\",\"columnType\":\"datetime\",\"columnComment\":\"銝甈∟圻\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":10,\"javaType\":\"Date\",\"javaField\":\"fireNextTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":278},{\"tableId\":24,\"columnName\":\"monitor_timeout\",\"columnType\":\"int(11)\",\"columnComment\":\"頞\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":11,\"javaType\":\"Integer\",\"javaField\":\"monitorTimeout\",\"dictType\":\"\",\"example\":\"1000\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":279},{\"tableId\":24,\"columnName\":\"create_by\",\"columnType\":\"varchar(64)\",\"columnComment\":\"遣",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":12,\"javaType\":\"String\",\"javaField\":\"createBy\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":280},{\"tableId\":24,\"columnName\":\"create_time\",\"columnType\":\"datetime\",\"columnComment\":\"遣\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":13,\"javaType\":\"Date\",\"javaField\":\"createTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":281},{\"tableId\":24,\"columnName\":\"update_by\",\"columnType\":\"varchar(64)\",\"columnComment\":\"",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":14,\"javaType\":\"String\",\"javaField\":\"updateBy\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":282},{\"tableId\":24,\"columnName\":\"update_time\",\"columnType\":\"datetime\",\"columnComment\":\"\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":15,\"javaType\":\"Date\",\"javaField\":\"updateTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":false,\"htmlType\":\"datetime\",\"id\":283},{\"tableId\":24,\"columnName\":\"deleted\",\"columnType\":\"bit(1)\",\"columnComment\":\"\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":16,\"javaType\":\"Boolean\",\"javaField\":\"deleted\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"radio\",\"id\":284}]}}', '2021-02-14 11:49:40', 88, 0, '', 'true', '', '2021-02-07 07:53:27', '', '2021-02-07 07:53:27', b'0');
  641 +INSERT INTO `sys_operate_log` VALUES (212, '1c1182c9-48a5-4b47-aa7b-2431560c5b20', 1, '隞 API', '摨”挾摰', 3, '', '', 'PUT', '/api/tool/codegen/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.tool.controller.codegen.ToolCodegenController.updateCodegen(ToolCodegenUpdateReqVO)', '{\"updateReqVO\":{\"table\":{\"importType\":1,\"tableName\":\"inf_job\",\"tableComment\":\"摰隞餃銵沔",\"remark\":null,\"moduleName\":\"infra\",\"businessName\":\"job\",\"className\":\"InfJob\",\"classComment\":\"摰隞餃\",\"author\":\"",\"templateType\":1,\"parentMenuId\":null,\"id\":24},\"columns\":[{\"tableId\":24,\"columnName\":\"id\",\"columnType\":\"bigint(20)\",\"columnComment\":\"隞餃蝻\",\"nullable\":false,\"primaryKey\":true,\"autoIncrement\":\"true\",\"ordinalPosition\":1,\"javaType\":\"Long\",\"javaField\":\"id\",\"dictType\":\"\",\"example\":\"1024\",\"createOperation\":false,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":269},{\"tableId\":24,\"columnName\":\"name\",\"columnType\":\"varchar(32)\",\"columnComment\":\"隞餃妍\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":2,\"javaType\":\"String\",\"javaField\":\"name\",\"dictType\":\"\",\"example\":\"瘚遙\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"LIKE\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":270},{\"tableId\":24,\"columnName\":\"status\",\"columnType\":\"tinyint(4)\",\"columnComment\":\"隞餃",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":3,\"javaType\":\"Integer\",\"javaField\":\"status\",\"dictType\":\"inf_job_status\",\"example\":\"1\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"radio\",\"id\":271},{\"tableId\":24,\"columnName\":\"handler_name\",\"columnType\":\"varchar(64)\",\"columnComment\":\"憭",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":4,\"javaType\":\"String\",\"javaField\":\"handlerName\",\"dictType\":\"\",\"example\":\"sysUserSessionTimeoutJob\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"LIKE\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":272},{\"tableId\":24,\"columnName\":\"handler_param\",\"columnType\":\"varchar(255)\",\"columnComment\":\"憭\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":5,\"javaType\":\"String\",\"javaField\":\"handlerParam\",\"dictType\":\"\",\"example\":\"yudao\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":273},{\"tableId\":24,\"columnName\":\"cron_expression\",\"columnType\":\"varchar(32)\",\"columnComment\":\"CRON 銵刻噢撘",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":6,\"javaType\":\"String\",\"javaField\":\"cronExpression\",\"dictType\":\"\",\"example\":\"0/10 * * * * ? *\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":274},{\"tableId\":24,\"columnName\":\"execute_begin_time\",\"columnType\":\"datetime\",\"columnComment\":\"甈⊥銵憪\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":7,\"javaType\":\"Date\",\"javaField\":\"executeBeginTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":275},{\"tableId\":24,\"columnName\":\"execute_end_time\",\"columnType\":\"datetime\",\"columnComment\":\"甈⊥銵\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":8,\"javaType\":\"Date\",\"javaField\":\"executeEndTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":276},{\"tableId\":24,\"columnName\":\"fire_prev_time\",\"columnType\":\"datetime\",\"columnComment\":\"銝甈∟圻\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":9,\"javaType\":\"Date\",\"javaField\":\"firePrevTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":277},{\"tableId\":24,\"columnName\":\"fire_next_time\",\"columnType\":\"datetime\",\"columnComment\":\"銝甈∟圻\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":10,\"javaType\":\"Date\",\"javaField\":\"fireNextTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":278},{\"tableId\":24,\"columnName\":\"monitor_timeout\",\"columnType\":\"int(11)\",\"columnComment\":\"頞\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":11,\"javaType\":\"Integer\",\"javaField\":\"monitorTimeout\",\"dictType\":\"\",\"example\":\"1000\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":279},{\"tableId\":24,\"columnName\":\"create_by\",\"columnType\":\"varchar(64)\",\"columnComment\":\"遣",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":12,\"javaType\":\"String\",\"javaField\":\"createBy\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":280},{\"tableId\":24,\"columnName\":\"create_time\",\"columnType\":\"datetime\",\"columnComment\":\"遣\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":13,\"javaType\":\"Date\",\"javaField\":\"createTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":281},{\"tableId\":24,\"columnName\":\"update_by\",\"columnType\":\"varchar(64)\",\"columnComment\":\"",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":14,\"javaType\":\"String\",\"javaField\":\"updateBy\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":282},{\"tableId\":24,\"columnName\":\"update_time\",\"columnType\":\"datetime\",\"columnComment\":\"\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":15,\"javaType\":\"Date\",\"javaField\":\"updateTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":false,\"htmlType\":\"datetime\",\"id\":283},{\"tableId\":24,\"columnName\":\"deleted\",\"columnType\":\"bit(1)\",\"columnComment\":\"\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":16,\"javaType\":\"Boolean\",\"javaField\":\"deleted\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"radio\",\"id\":284}]}}', '2021-02-14 11:50:38', 41, 0, '', 'true', '', '2021-02-07 07:54:25', '', '2021-02-07 07:54:25', b'0');
  642 +INSERT INTO `sys_operate_log` VALUES (213, '08c46d7f-0207-4a82-86f9-1e4fc0bda574', 1, '隞 API', '摨”挾摰', 3, '', '', 'PUT', '/api/tool/codegen/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.tool.controller.codegen.ToolCodegenController.updateCodegen(ToolCodegenUpdateReqVO)', '{\"updateReqVO\":{\"table\":{\"importType\":1,\"tableName\":\"inf_job\",\"tableComment\":\"摰隞餃銵沔",\"remark\":null,\"moduleName\":\"infra\",\"businessName\":\"job\",\"className\":\"InfJob\",\"classComment\":\"摰隞餃\",\"author\":\"",\"templateType\":1,\"parentMenuId\":null,\"id\":24},\"columns\":[{\"tableId\":24,\"columnName\":\"id\",\"columnType\":\"bigint(20)\",\"columnComment\":\"隞餃蝻\",\"nullable\":false,\"primaryKey\":true,\"autoIncrement\":\"true\",\"ordinalPosition\":1,\"javaType\":\"Long\",\"javaField\":\"id\",\"dictType\":\"\",\"example\":\"1024\",\"createOperation\":false,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":269},{\"tableId\":24,\"columnName\":\"name\",\"columnType\":\"varchar(32)\",\"columnComment\":\"隞餃妍\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":2,\"javaType\":\"String\",\"javaField\":\"name\",\"dictType\":\"\",\"example\":\"瘚遙\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"LIKE\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":270},{\"tableId\":24,\"columnName\":\"status\",\"columnType\":\"tinyint(4)\",\"columnComment\":\"隞餃",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":3,\"javaType\":\"Integer\",\"javaField\":\"status\",\"dictType\":\"inf_job_status\",\"example\":\"1\",\"createOperation\":false,\"updateOperation\":false,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"radio\",\"id\":271},{\"tableId\":24,\"columnName\":\"handler_name\",\"columnType\":\"varchar(64)\",\"columnComment\":\"憭",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":4,\"javaType\":\"String\",\"javaField\":\"handlerName\",\"dictType\":\"\",\"example\":\"sysUserSessionTimeoutJob\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"LIKE\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":272},{\"tableId\":24,\"columnName\":\"handler_param\",\"columnType\":\"varchar(255)\",\"columnComment\":\"憭\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":5,\"javaType\":\"String\",\"javaField\":\"handlerParam\",\"dictType\":\"\",\"example\":\"yudao\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":273},{\"tableId\":24,\"columnName\":\"cron_expression\",\"columnType\":\"varchar(32)\",\"columnComment\":\"CRON 銵刻噢撘",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":6,\"javaType\":\"String\",\"javaField\":\"cronExpression\",\"dictType\":\"\",\"example\":\"0/10 * * * * ? *\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":274},{\"tableId\":24,\"columnName\":\"execute_begin_time\",\"columnType\":\"datetime\",\"columnComment\":\"甈⊥銵憪\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":7,\"javaType\":\"Date\",\"javaField\":\"executeBeginTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":275},{\"tableId\":24,\"columnName\":\"execute_end_time\",\"columnType\":\"datetime\",\"columnComment\":\"甈⊥銵\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":8,\"javaType\":\"Date\",\"javaField\":\"executeEndTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":276},{\"tableId\":24,\"columnName\":\"fire_prev_time\",\"columnType\":\"datetime\",\"columnComment\":\"銝甈∟圻\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":9,\"javaType\":\"Date\",\"javaField\":\"firePrevTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":277},{\"tableId\":24,\"columnName\":\"fire_next_time\",\"columnType\":\"datetime\",\"columnComment\":\"銝甈∟圻\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":10,\"javaType\":\"Date\",\"javaField\":\"fireNextTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":278},{\"tableId\":24,\"columnName\":\"monitor_timeout\",\"columnType\":\"int(11)\",\"columnComment\":\"頞\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":11,\"javaType\":\"Integer\",\"javaField\":\"monitorTimeout\",\"dictType\":\"\",\"example\":\"1000\",\"createOperation\":true,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":279},{\"tableId\":24,\"columnName\":\"create_by\",\"columnType\":\"varchar(64)\",\"columnComment\":\"遣",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":12,\"javaType\":\"String\",\"javaField\":\"createBy\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":280},{\"tableId\":24,\"columnName\":\"create_time\",\"columnType\":\"datetime\",\"columnComment\":\"遣\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":13,\"javaType\":\"Date\",\"javaField\":\"createTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":281},{\"tableId\":24,\"columnName\":\"update_by\",\"columnType\":\"varchar(64)\",\"columnComment\":\"",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":14,\"javaType\":\"String\",\"javaField\":\"updateBy\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":282},{\"tableId\":24,\"columnName\":\"update_time\",\"columnType\":\"datetime\",\"columnComment\":\"\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":15,\"javaType\":\"Date\",\"javaField\":\"updateTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":false,\"htmlType\":\"datetime\",\"id\":283},{\"tableId\":24,\"columnName\":\"deleted\",\"columnType\":\"bit(1)\",\"columnComment\":\"\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":16,\"javaType\":\"Boolean\",\"javaField\":\"deleted\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"radio\",\"id\":284}]}}', '2021-02-14 11:51:29', 40, 0, '', 'true', '', '2021-02-07 07:55:17', '', '2021-02-07 07:55:17', b'0');
  643 +INSERT INTO `sys_operate_log` VALUES (214, 'c526a275-1f28-4516-8329-99f1f09549b9', 1, '摰隞餃', '遣摰隞餃', 2, '', '', 'POST', '/api/infra/job/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.createJob(InfJobCreateReqVO)', '{\"createReqVO\":{\"name\":\" Session 頞 Job\",\"status\":0,\"handlerName\":\"sysUserSessionTimeoutJob\",\"handlerParam\":null,\"cronExpression\":\"0/10 * * * * ? *\",\"executeBeginTime\":null,\"executeEndTime\":null,\"firePrevTime\":null,\"fireNextTime\":null,\"monitorTimeout\":null}}', '2021-02-14 12:03:54', 7, 0, '', '1', '', '2021-02-07 08:07:42', '', '2021-02-07 08:07:42', b'0');
  644 +INSERT INTO `sys_operate_log` VALUES (215, '85b18aa0-68bb-43fe-a797-43bc41264b0c', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJob(InfJobUpdateReqVO)', '{\"updateReqVO\":{\"name\":\" Session 頞 Job\",\"handlerParam\":null,\"cronExpression\":\"0/10 * * * * ? *\",\"monitorTimeout\":null,\"id\":1}}', '2021-02-14 18:56:51', 8, 500, 'NoSuchMethodError: cn.iocoder.dashboard.modules.infra.controller.job.vo.job.InfJobUpdateReqVO.getStatus()Ljava/lang/Integer;', 'null', '', '2021-02-07 09:23:29', '', '2021-02-07 09:23:29', b'0');
  645 +INSERT INTO `sys_operate_log` VALUES (216, '9839b96d-ec32-4c24-86cb-24d406accced', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJob(InfJobUpdateReqVO)', '{\"updateReqVO\":{\"name\":\" Session 頞 Job\",\"handlerParam\":null,\"cronExpression\":\"0/10 * * * * ? *\",\"monitorTimeout\":null,\"id\":1}}', '2021-02-14 18:57:27', 3, 500, 'NoSuchMethodError: cn.iocoder.dashboard.modules.infra.controller.job.vo.job.InfJobUpdateReqVO.getStatus()Ljava/lang/Integer;', 'null', '', '2021-02-07 09:24:05', '', '2021-02-07 09:24:05', b'0');
  646 +INSERT INTO `sys_operate_log` VALUES (217, '75ffd8e1-dbc1-4bb0-a527-ba45d7728596', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJob(InfJobUpdateReqVO)', '{\"updateReqVO\":{\"name\":\" Session 頞 Job\",\"handlerParam\":null,\"cronExpression\":\"0/10 * * * * ? *\",\"monitorTimeout\":null,\"id\":1}}', '2021-02-14 18:57:27', 3, 500, 'NoSuchMethodError: cn.iocoder.dashboard.modules.infra.controller.job.vo.job.InfJobUpdateReqVO.getStatus()Ljava/lang/Integer;', 'null', '', '2021-02-07 09:24:06', '', '2021-02-07 09:24:06', b'0');
  647 +INSERT INTO `sys_operate_log` VALUES (218, 'c23ace85-054e-45ca-b90e-bb6e52034839', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJob(InfJobUpdateReqVO)', '{\"updateReqVO\":{\"name\":\" Session 頞 Job\",\"handlerParam\":null,\"cronExpression\":\"0/10 * * * * ? *\",\"monitorTimeout\":null,\"id\":1}}', '2021-02-14 18:59:42', 24, 0, '', 'true', '', '2021-02-07 09:26:21', '', '2021-02-07 09:26:21', b'0');
  648 +INSERT INTO `sys_operate_log` VALUES (219, '54b57664-c4bc-4c6b-a958-ecd274079870', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJob(InfJobUpdateReqVO)', '{\"updateReqVO\":{\"name\":\" Session 頞 Job\",\"handlerParam\":null,\"cronExpression\":\"0/10 * * * * ? *\",\"monitorTimeout\":10,\"id\":1}}', '2021-02-14 18:59:48', 7, 0, '', 'true', '', '2021-02-07 09:26:27', '', '2021-02-07 09:26:27', b'0');
  649 +INSERT INTO `sys_operate_log` VALUES (220, 'd48573df-9eb4-420d-a3bd-940ea6bc10cd', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJob(InfJobUpdateReqVO)', '{\"updateReqVO\":{\"name\":\" Session 頞 Job\",\"handlerParam\":\"demo\",\"cronExpression\":\"0/10 * * * * ? *\",\"monitorTimeout\":null,\"id\":1}}', '2021-02-14 19:00:28', 6, 0, '', 'true', '', '2021-02-07 09:27:07', '', '2021-02-07 09:27:07', b'0');
  650 +INSERT INTO `sys_operate_log` VALUES (221, 'de38299e-88d9-447c-bfc8-432521aeb7f6', 1, '摰隞餃', '遣摰隞餃', 2, '', '', 'POST', '/api/infra/job/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.createJob(InfJobCreateReqVO)', '{\"createReqVO\":{\"name\":\" Session 頞 Job\",\"handlerParam\":null,\"cronExpression\":\"0/10 * * * * ? *\",\"monitorTimeout\":null,\"handlerName\":\"sysUserSessionTimeoutJob\"}}', '2021-02-14 19:48:25', 7260, 0, '', '2', '', '2021-02-07 10:15:14', '', '2021-02-07 10:15:14', b'0');
  651 +INSERT INTO `sys_operate_log` VALUES (222, 'a84ac759-7057-4c99-8dba-cf776fc96070', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJob(InfJobUpdateReqVO)', '{\"updateReqVO\":{\"name\":\" Session 頞 Job\",\"handlerParam\":null,\"cronExpression\":\"0/20 * * * * ? *\",\"monitorTimeout\":0,\"id\":2}}', '2021-02-14 19:49:26', 22, 0, '', 'true', '', '2021-02-07 10:16:08', '', '2021-02-07 10:16:08', b'0');
  652 +INSERT INTO `sys_operate_log` VALUES (223, '68e11f7b-78a4-4541-b3d7-639faf287277', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJob(InfJobUpdateReqVO)', '{\"updateReqVO\":{\"name\":\" Session 頞 Job\",\"handlerParam\":\"aoteman\",\"cronExpression\":\"0/20 * * * * ? *\",\"monitorTimeout\":0,\"id\":2}}', '2021-02-14 19:49:51', 21, 0, '', 'true', '', '2021-02-07 10:16:32', '', '2021-02-07 10:16:32', b'0');
  653 +INSERT INTO `sys_operate_log` VALUES (224, 'f007b9cd-068a-4bd8-83b8-d0036c624470', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update-status', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJobStatus(Long,Integer)', '{\"id\":2,\"status\":1}', '2021-02-14 22:01:43', 18, 500, 'ServiceException: 捂靽格銝箏', 'null', '', '2021-02-07 12:25:32', '', '2021-02-07 12:25:32', b'0');
  654 +INSERT INTO `sys_operate_log` VALUES (225, '7d3c36c5-5792-4582-b489-b90490c426d8', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update-status', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJobStatus(Long,Integer)', '{\"id\":2,\"status\":1}', '2021-02-14 22:02:13', 13, 500, 'ServiceException: 摰隞餃撌脩砲靽格', 'null', '', '2021-02-07 12:26:02', '', '2021-02-07 12:26:02', b'0');
  655 +INSERT INTO `sys_operate_log` VALUES (226, 'dbf7947c-130e-4efa-93f0-40e70abdd20f', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update-status', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJobStatus(Long,Integer)', '{\"id\":2,\"status\":1}', '2021-02-14 22:02:18', 4, 500, 'ServiceException: 摰隞餃撌脩砲靽格', 'null', '', '2021-02-07 12:26:07', '', '2021-02-07 12:26:07', b'0');
  656 +INSERT INTO `sys_operate_log` VALUES (227, '438dee18-c788-4609-90cf-56b5d783168f', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update-status', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJobStatus(Long,Integer)', '{\"id\":2,\"status\":1}', '2021-02-14 22:02:27', 5, 500, 'ServiceException: 摰隞餃撌脩砲靽格', 'null', '', '2021-02-07 12:26:16', '', '2021-02-07 12:26:16', b'0');
  657 +INSERT INTO `sys_operate_log` VALUES (228, '80acc266-8034-4cef-b064-ef788f85ef80', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update-status', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJobStatus(Long,Integer)', '{\"id\":2,\"status\":3}', '2021-02-14 22:04:07', 2, 500, 'ServiceException: 捂靽格銝箏', 'null', '', '2021-02-07 12:27:56', '', '2021-02-07 12:27:56', b'0');
  658 +INSERT INTO `sys_operate_log` VALUES (229, '6380a27d-3858-4219-8051-91b6c3e23c58', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update-status', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJobStatus(Long,Integer)', '{\"id\":2,\"status\":3}', '2021-02-14 22:05:00', 27, 0, '', 'true', '', '2021-02-07 12:28:49', '', '2021-02-07 12:28:49', b'0');
  659 +INSERT INTO `sys_operate_log` VALUES (230, 'e07dacf3-3c9d-4379-a707-7546b4eb1790', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJob(InfJobUpdateReqVO)', '{\"updateReqVO\":{\"name\":\" Session 頞 Job\",\"handlerParam\":\"aoteman\",\"cronExpression\":\"0/5 * * * * ? *\",\"monitorTimeout\":0,\"id\":2}}', '2021-02-14 22:05:39', 22, 0, '', 'true', '', '2021-02-07 12:29:28', '', '2021-02-07 12:29:28', b'0');
  660 +INSERT INTO `sys_operate_log` VALUES (231, '4d0ea27c-d7e0-4c4b-b279-ede302fb99ba', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update-status', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJobStatus(Long,Integer)', '{\"id\":2,\"status\":3}', '2021-02-14 22:05:52', 4, 500, 'ServiceException: 摰隞餃撌脩砲靽格', 'null', '', '2021-02-07 12:29:41', '', '2021-02-07 12:29:41', b'0');
  661 +INSERT INTO `sys_operate_log` VALUES (232, 'a3f88f40-77e3-433a-aafa-4373ce848fd3', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update-status', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJobStatus(Long,Integer)', '{\"id\":2,\"status\":1}', '2021-02-14 22:06:05', 18, 0, '', 'true', '', '2021-02-07 12:29:54', '', '2021-02-07 12:29:54', b'0');
  662 +INSERT INTO `sys_operate_log` VALUES (233, '0e93c02c-334e-442b-b21e-fabbf2c0a28a', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update-status', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJobStatus(Long,Integer)', '{\"id\":2,\"status\":3}', '2021-02-14 22:06:29', 13, 0, '', 'true', '', '2021-02-07 12:30:18', '', '2021-02-07 12:30:18', b'0');
  663 +INSERT INTO `sys_operate_log` VALUES (234, '5231d05d-a3ea-4285-ba27-7e00821c9c9d', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJob(InfJobUpdateReqVO)', '{\"updateReqVO\":{\"name\":\" Session 頞 Job\",\"handlerParam\":\"aoteman\",\"cronExpression\":\"0/5 * * * * ? *\",\"monitorTimeout\":10,\"id\":2}}', '2021-02-14 22:10:34', 26, 0, '', 'true', '', '2021-02-07 12:34:23', '', '2021-02-07 12:34:23', b'0');
  664 +INSERT INTO `sys_operate_log` VALUES (235, 'f510aa4d-45bc-4fea-98de-dac97a6e26df', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update-status', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJobStatus(Long,Integer)', '{\"id\":2,\"status\":1}', '2021-02-14 22:10:48', 15, 0, '', 'true', '', '2021-02-07 12:34:37', '', '2021-02-07 12:34:37', b'0');
  665 +INSERT INTO `sys_operate_log` VALUES (236, 'c21181c6-3690-48f3-9199-e2fa159a22fa', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update-status', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJobStatus(Long,Integer)', '{\"id\":2,\"status\":3}', '2021-02-14 22:10:50', 11, 0, '', 'true', '', '2021-02-07 12:34:40', '', '2021-02-07 12:34:40', b'0');
  666 +INSERT INTO `sys_operate_log` VALUES (237, '266c8bec-a655-4b57-901f-9ce6f0d69a37', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update-status', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJobStatus(Long,Integer)', '{\"id\":2,\"status\":3}', '2021-02-14 22:14:33', 34, 500, 'ServiceException: 摰隞餃撌脩砲靽格', 'null', '', '2021-02-07 12:38:23', '', '2021-02-07 12:38:23', b'0');
  667 +INSERT INTO `sys_operate_log` VALUES (238, '68201580-f4ef-47e1-b537-e997f8a01ea2', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJob(InfJobUpdateReqVO)', '{\"updateReqVO\":{\"name\":\" Session 頞 Job\",\"handlerParam\":\"aoteman\",\"cronExpression\":\"0/5 * * * * ? *\",\"monitorTimeout\":null,\"id\":2}}', '2021-02-14 22:14:50', 7, 500, 'ServiceException: 遙嚗隞乩耨', 'null', '', '2021-02-07 12:38:40', '', '2021-02-07 12:38:40', b'0');
  668 +INSERT INTO `sys_operate_log` VALUES (239, '789501a4-d049-4053-90dd-db425d87f921', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJob(InfJobUpdateReqVO)', '{\"updateReqVO\":{\"name\":\" Session 頞 Job\",\"handlerParam\":\"aoteman\",\"cronExpression\":\"0/5 * * * * ? *\",\"monitorTimeout\":null,\"id\":2}}', '2021-02-14 22:14:51', 6, 500, 'ServiceException: 遙嚗隞乩耨', 'null', '', '2021-02-07 12:38:41', '', '2021-02-07 12:38:41', b'0');
  669 +INSERT INTO `sys_operate_log` VALUES (240, '60bb3736-482a-45ed-ba63-fc1c94fdbceb', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJob(InfJobUpdateReqVO)', '{\"updateReqVO\":{\"name\":\" Session 頞 Job\",\"handlerParam\":\"aoteman\",\"cronExpression\":\"0/5 * * * * ? *\",\"monitorTimeout\":null,\"id\":2}}', '2021-02-14 22:14:52', 5, 500, 'ServiceException: 遙嚗隞乩耨', 'null', '', '2021-02-07 12:38:42', '', '2021-02-07 12:38:42', b'0');
  670 +INSERT INTO `sys_operate_log` VALUES (241, '2a2c18cd-5056-472a-900e-29f6c2248ac0', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJob(InfJobUpdateReqVO)', '{\"updateReqVO\":{\"name\":\" Session 頞 Job\",\"handlerParam\":\"aoteman\",\"cronExpression\":\"0/5 * * * * ? *\",\"monitorTimeout\":null,\"id\":2}}', '2021-02-14 22:14:52', 5, 500, 'ServiceException: 遙嚗隞乩耨', 'null', '', '2021-02-07 12:38:42', '', '2021-02-07 12:38:42', b'0');
  671 +INSERT INTO `sys_operate_log` VALUES (242, 'abd26aa1-4561-4b83-80b4-989158ff272f', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJob(InfJobUpdateReqVO)', '{\"updateReqVO\":{\"name\":\" Session 頞 Job\",\"handlerParam\":\"aoteman\",\"cronExpression\":\"0/5 * * * * ? *\",\"monitorTimeout\":null,\"id\":2}}', '2021-02-14 22:14:52', 4, 500, 'ServiceException: 遙嚗隞乩耨', 'null', '', '2021-02-07 12:38:42', '', '2021-02-07 12:38:42', b'0');
  672 +INSERT INTO `sys_operate_log` VALUES (243, 'a582d39d-1bca-42ab-b417-f646bc0d41ca', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJob(InfJobUpdateReqVO)', '{\"updateReqVO\":{\"name\":\" Session 頞 Job\",\"handlerParam\":\"aoteman\",\"cronExpression\":\"0/5 * * * * ? *\",\"monitorTimeout\":null,\"id\":2}}', '2021-02-14 22:14:52', 5, 500, 'ServiceException: 遙嚗隞乩耨', 'null', '', '2021-02-07 12:38:42', '', '2021-02-07 12:38:42', b'0');
  673 +INSERT INTO `sys_operate_log` VALUES (244, '4f926259-0b96-4c25-a6cf-b52b3e9f0561', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJob(InfJobUpdateReqVO)', '{\"updateReqVO\":{\"name\":\" Session 頞 Job\",\"handlerParam\":\"aoteman\",\"cronExpression\":\"0/5 * * * * ? *\",\"monitorTimeout\":null,\"id\":2}}', '2021-02-14 22:14:53', 5, 500, 'ServiceException: 遙嚗隞乩耨', 'null', '', '2021-02-07 12:38:43', '', '2021-02-07 12:38:43', b'0');
  674 +INSERT INTO `sys_operate_log` VALUES (245, 'ece28b24-55fb-4357-ac77-568a69b8bdc5', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJob(InfJobUpdateReqVO)', '{\"updateReqVO\":{\"name\":\" Session 頞 Job\",\"handlerParam\":\"aoteman\",\"cronExpression\":\"0/5 * * * * ? *\",\"monitorTimeout\":null,\"id\":2}}', '2021-02-14 22:14:53', 4, 500, 'ServiceException: 遙嚗隞乩耨', 'null', '', '2021-02-07 12:38:43', '', '2021-02-07 12:38:43', b'0');
  675 +INSERT INTO `sys_operate_log` VALUES (246, '5989998d-33fe-468d-a53f-5cdc4db8dba5', 1, '摰隞餃', '摰隞餃', 3, '', '', 'PUT', '/api/infra/job/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.updateJob(InfJobUpdateReqVO)', '{\"updateReqVO\":{\"name\":\" Session 頞 Job\",\"handlerParam\":\"aoteman\",\"cronExpression\":\"0/5 * * * * ? *\",\"monitorTimeout\":null,\"id\":2}}', '2021-02-14 22:14:54', 5, 500, 'ServiceException: 遙嚗隞乩耨', 'null', '', '2021-02-07 12:38:43', '', '2021-02-07 12:38:43', b'0');
  676 +INSERT INTO `sys_operate_log` VALUES (247, '4d837253-aeab-41d6-9918-5423564bb6e4', 1, '摰隞餃', '閫血隞餃', 3, '', '', 'PUT', '/api/infra/job/trigger', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.triggerJob(Long)', '{\"id\":2}', '2021-02-14 22:25:10', 42, 0, '', 'true', '', '2021-02-07 12:49:01', '', '2021-02-07 12:49:01', b'0');
  677 +INSERT INTO `sys_operate_log` VALUES (248, 'ed5c70fb-7af2-49fe-9e46-3f4d8a83560a', 1, '摰隞餃', '摰隞餃', 4, '', '', 'DELETE', '/api/infra/job/delete', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.deleteJob(Long)', '{\"id\":2}', '2021-02-14 22:33:53', 46, 0, '', 'true', '', '2021-02-07 12:57:44', '', '2021-02-07 12:57:44', b'0');
  678 +INSERT INTO `sys_operate_log` VALUES (249, '9e125d0f-5300-4311-89b9-808b80f7e48d', 1, ' API', '靽格', 2, '', '', 'POST', '/api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.permission.SysMenuController.updateMenu(SysMenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"摰隞餃\",\"permission\":\"infra:job:query\",\"type\":2,\"sort\":\"2\",\"parentId\":2,\"path\":\"job\",\"icon\":\"job\",\"component\":\"infra/job/index\",\"status\":0,\"id\":110}}', '2021-02-14 22:37:44', 16, 0, '', 'true', '', '2021-02-07 13:01:36', '', '2021-02-07 13:01:36', b'0');
  679 +INSERT INTO `sys_operate_log` VALUES (250, '8c86d97d-45ff-42a2-bb53-57295377f39b', 1, ' API', '', 2, '', '', 'POST', '/api/system/menu/delete', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.permission.SysMenuController.deleteMenu(Long)', '{\"id\":1049}', '2021-02-14 22:37:50', 13, 0, '', 'true', '', '2021-02-07 13:01:42', '', '2021-02-07 13:01:42', b'0');
  680 +INSERT INTO `sys_operate_log` VALUES (251, 'e4b474a9-923e-4322-87c2-947702ad92f0', 1, ' API', '靽格', 2, '', '', 'POST', '/api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.permission.SysMenuController.updateMenu(SysMenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"隞餃憓",\"permission\":\"infra:job:create\",\"type\":3,\"sort\":\"2\",\"parentId\":110,\"path\":\"#\",\"icon\":\"#\",\"component\":\"\",\"status\":0,\"id\":1050}}', '2021-02-14 22:38:06', 10, 0, '', 'true', '', '2021-02-07 13:01:58', '', '2021-02-07 13:01:58', b'0');
  681 +INSERT INTO `sys_operate_log` VALUES (252, '1d0e5e0c-fdbd-4354-a690-075b1e284b76', 1, ' API', '靽格', 2, '', '', 'POST', '/api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.permission.SysMenuController.updateMenu(SysMenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"隞餃靽格\",\"permission\":\"infra:job:update\",\"type\":3,\"sort\":\"3\",\"parentId\":110,\"path\":\"#\",\"icon\":\"#\",\"component\":\"\",\"status\":0,\"id\":1051}}', '2021-02-14 22:38:19', 8, 0, '', 'true', '', '2021-02-07 13:02:10', '', '2021-02-07 13:02:10', b'0');
  682 +INSERT INTO `sys_operate_log` VALUES (253, '30cda294-e2be-42d8-825f-0538d47e5853', 1, ' API', '靽格', 2, '', '', 'POST', '/api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.permission.SysMenuController.updateMenu(SysMenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"隞餃\",\"permission\":\"infra:job:delete\",\"type\":3,\"sort\":\"4\",\"parentId\":110,\"path\":\"#\",\"icon\":\"#\",\"component\":\"\",\"status\":0,\"id\":1052}}', '2021-02-14 22:38:30', 9, 0, '', 'true', '', '2021-02-07 13:02:22', '', '2021-02-07 13:02:22', b'0');
  683 +INSERT INTO `sys_operate_log` VALUES (254, '82d44075-9c1b-4d1f-a611-f8123a8e0bc4', 1, ' API', '靽格', 2, '', '', 'POST', '/api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.permission.SysMenuController.updateMenu(SysMenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"耨\",\"permission\":\"infra:job:update\",\"type\":3,\"sort\":\"5\",\"parentId\":110,\"path\":\"#\",\"icon\":\"#\",\"component\":\"\",\"status\":0,\"id\":1053}}', '2021-02-14 22:38:46', 7, 0, '', 'true', '', '2021-02-07 13:02:38', '', '2021-02-07 13:02:38', b'0');
  684 +INSERT INTO `sys_operate_log` VALUES (255, 'a56037c8-4e13-46ac-8c50-a9b298fdfcb2', 1, ' API', '靽格', 2, '', '', 'POST', '/api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.permission.SysMenuController.updateMenu(SysMenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"隞餃撖澆\",\"permission\":\"infra:job:export\",\"type\":3,\"sort\":\"7\",\"parentId\":110,\"path\":\"#\",\"icon\":\"#\",\"component\":\"\",\"status\":0,\"id\":1054}}', '2021-02-14 22:39:00', 8, 0, '', 'true', '', '2021-02-07 13:02:51', '', '2021-02-07 13:02:51', b'0');
  685 +INSERT INTO `sys_operate_log` VALUES (256, '6456526a-ac2f-4fdf-b873-0484b81af0aa', 1, ' API', '遣', 2, '', '', 'POST', '/api/system/menu/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.system.controller.permission.SysMenuController.createMenu(SysMenuCreateReqVO)', '{\"reqVO\":{\"name\":\"隞餃閫血",\"permission\":\"infra:job:trigger\",\"type\":3,\"sort\":\"8\",\"parentId\":110,\"path\":null,\"icon\":null,\"component\":null,\"status\":0}}', '2021-02-14 22:39:19', 12, 0, '', '1075', '', '2021-02-07 13:03:10', '', '2021-02-07 13:03:10', b'0');
  686 +INSERT INTO `sys_operate_log` VALUES (257, 'a3b43efc-c3a3-4228-8f48-f978c2c7ff6c', 1, '摰隞餃', '遣摰隞餃', 2, '', '', 'POST', '/api/infra/job/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'CommonResult cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.createJob(InfJobCreateReqVO)', '{\"createReqVO\":{\"name\":\" Session 頞 Job\",\"handlerParam\":null,\"cronExpression\":\"0/5 * * * * ? *\",\"monitorTimeout\":null,\"handlerName\":\"sysUserSessionTimeoutJob\"}}', '2021-02-14 22:43:40', 39, 0, '', '3', '', '2021-02-07 13:07:32', '', '2021-02-07 13:07:32', b'0');
  687 +INSERT INTO `sys_operate_log` VALUES (258, '2be3590d-9ab4-4cc1-a8af-4b2a7c557958', 1, '摰隞餃', '撖澆摰隞餃 Excel', 5, '', '', 'GET', '/api/infra/job/export-excel', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'void cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.exportJobExcel(InfJobExportReqVO,HttpServletResponse)', '{\"exportReqVO\":{\"name\":null,\"status\":null,\"handlerName\":null},\"response\":\"[ignore]\"}', '2021-02-14 22:46:07', 1008, 0, '', 'null', '', '2021-02-07 13:10:00', '', '2021-02-07 13:10:00', b'0');
  688 +INSERT INTO `sys_operate_log` VALUES (259, '5dc1134b-41e0-4080-9e4e-9d955674d8d5', 1, '摰隞餃', '撖澆摰隞餃 Excel', 5, '', '', 'GET', '/api/infra/job/export-excel', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'void cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.exportJobExcel(InfJobExportReqVO,HttpServletResponse)', '{\"exportReqVO\":{\"name\":null,\"status\":null,\"handlerName\":null},\"response\":\"[ignore]\"}', '2021-02-14 22:46:13', 37, 0, '', 'null', '', '2021-02-07 13:10:06', '', '2021-02-07 13:10:06', b'0');
  689 +INSERT INTO `sys_operate_log` VALUES (260, '2df8e5e2-613e-4aab-b95f-ffd692c2e563', 1, '摰隞餃', '撖澆摰隞餃 Excel', 5, '', '', 'GET', '/api/infra/job/export-excel', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', 'void cn.iocoder.dashboard.modules.infra.controller.job.InfJobController.exportJobExcel(InfJobExportReqVO,HttpServletResponse)', '{\"exportReqVO\":{\"name\":null,\"status\":null,\"handlerName\":null},\"response\":\"[ignore]\"}', '2021-02-14 22:47:28', 27, 0, '', 'null', '', '2021-02-07 13:11:20', '', '2021-02-07 13:11:20', b'0');
575 690 COMMIT;
576 691  
577 692 -- ----------------------------
... ... @@ -899,10 +1014,13 @@ CREATE TABLE `sys_user_session` (
899 1014 -- Records of sys_user_session
900 1015 -- ----------------------------
901 1016 BEGIN;
  1017 +INSERT INTO `sys_user_session` VALUES ('019f009268e24cc1957c46763eef1fd4', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-07 08:36:48', '', '2021-02-14 20:04:33', b'0');
902 1018 INSERT INTO `sys_user_session` VALUES ('04d51ff81ad54d05ab2f29e66b2a02f2', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-05 17:46:10', '', '2021-02-11 00:58:19', b'0');
  1019 +INSERT INTO `sys_user_session` VALUES ('0df60899301d4080bd4164f24bccf18b', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-07 13:05:42', '', '2021-02-07 13:05:42', b'0');
903 1020 INSERT INTO `sys_user_session` VALUES ('1127b5eb9b0c4f9fa382d4d98a8a4a38', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-05 06:49:00', '', '2021-02-10 11:10:31', b'0');
904 1021 INSERT INTO `sys_user_session` VALUES ('20109910c52e4b02bbc0531212bff8cb', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-06 02:39:48', '', '2021-02-06 02:39:48', b'0');
905 1022 INSERT INTO `sys_user_session` VALUES ('2024509755b3444690c2a1dddaebd812', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-05 06:22:30', '', '2021-02-05 06:22:30', b'0');
  1023 +INSERT INTO `sys_user_session` VALUES ('27d6db8abb3b4ed88d446ad489b9db23', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-07 06:38:34', '', '2021-02-14 10:57:34', b'0');
906 1024 INSERT INTO `sys_user_session` VALUES ('31e5ff8584794ca58460ecf68a177c3f', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-06 11:48:57', '', '2021-02-12 20:56:44', b'0');
907 1025 INSERT INTO `sys_user_session` VALUES ('39cdef31685d4e93931a053d88ff0279', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-05 08:09:33', '', '2021-02-05 08:09:33', b'0');
908 1026 INSERT INTO `sys_user_session` VALUES ('5636ae58b9644ea1b4ed934b025b76ea', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-05 04:24:59', '', '2021-02-09 18:40:06', b'0');
... ... @@ -911,10 +1029,12 @@ INSERT INTO `sys_user_session` VALUES (&#39;5a9b736ccaa8452394c57ac82bd0815e&#39;, 1, &#39;1
911 1029 INSERT INTO `sys_user_session` VALUES ('604ac07123a445ee8a81e58db1d6d695', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-05 16:33:53', '', '2021-02-05 16:33:53', b'0');
912 1030 INSERT INTO `sys_user_session` VALUES ('64fd3d0a54754b8fa13b62d2f261b1e2', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-05 01:36:09', '', '2021-02-09 16:05:22', b'0');
913 1031 INSERT INTO `sys_user_session` VALUES ('661be9d3983e4e2eb8b346c1329015f5', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-06 19:46:45', '', '2021-02-13 12:02:29', b'0');
  1032 +INSERT INTO `sys_user_session` VALUES ('6acbf1f210ff4c6594acb3505f0c3738', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-07 12:16:36', '', '2021-02-14 22:37:22', b'0');
914 1033 INSERT INTO `sys_user_session` VALUES ('73c66b705ed94e18bc53df61abc2d102', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-06 15:00:55', '', '2021-02-06 15:00:55', b'0');
915 1034 INSERT INTO `sys_user_session` VALUES ('73cc914671034f3190f09f520d1b39e9', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-01-26 08:29:27', '', '2021-01-26 08:29:50', b'1');
916 1035 INSERT INTO `sys_user_session` VALUES ('8331dbbca7be4348a3d2d02bf559b65e', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-05 13:29:04', '', '2021-02-10 19:06:26', b'0');
917 1036 INSERT INTO `sys_user_session` VALUES ('9cc71dc2d7a24b978db1bfe0e4bae349', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-01-26 08:30:01', '', '2021-01-26 08:30:01', b'0');
  1037 +INSERT INTO `sys_user_session` VALUES ('a1d01dbed7ff4b6392c3f27c18ce8778', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-07 07:36:14', '', '2021-02-14 12:13:56', b'0');
918 1038 INSERT INTO `sys_user_session` VALUES ('a93edff183c447719ecb627d40ca22a6', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-05 20:28:51', '', '2021-02-05 20:28:51', b'0');
919 1039 INSERT INTO `sys_user_session` VALUES ('aa22b7a5754b440e957ec47b832c9fd6', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-06 21:22:31', '', '2021-02-06 21:22:31', b'0');
920 1040 INSERT INTO `sys_user_session` VALUES ('e3ad1ef8b9aa4b329855b29c7b372e8f', 1, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36', '', '2021-02-05 06:21:44', '', '2021-02-05 06:21:44', b'0');
... ... @@ -951,7 +1071,7 @@ CREATE TABLE `tool_codegen_column` (
951 1071 `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '',
952 1072 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '',
953 1073 PRIMARY KEY (`id`) USING BTREE
954   -) ENGINE=InnoDB AUTO_INCREMENT=269 DEFAULT CHARSET=utf8mb4 COMMENT='隞”摮挾摰';
  1074 +) ENGINE=InnoDB AUTO_INCREMENT=285 DEFAULT CHARSET=utf8mb4 COMMENT='隞”摮挾摰';
955 1075  
956 1076 -- ----------------------------
957 1077 -- Records of tool_codegen_column
... ... @@ -981,7 +1101,7 @@ INSERT INTO `tool_codegen_column` VALUES (252, 21, &#39;create_time&#39;, &#39;datetime&#39;, &#39;
981 1101 INSERT INTO `tool_codegen_column` VALUES (253, 21, 'update_by', 'varchar(64)', '', b'1', b'0', '0', 11, 'String', 'updateBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-06 19:51:35', '', '2021-02-06 19:51:35', b'0');
982 1102 INSERT INTO `tool_codegen_column` VALUES (254, 21, 'update_time', 'datetime', '', b'0', b'0', '0', 12, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '', '2021-02-06 19:51:35', '', '2021-02-06 19:51:35', b'0');
983 1103 INSERT INTO `tool_codegen_column` VALUES (255, 21, 'deleted', 'bit(1)', '', b'0', b'0', '0', 13, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '', '2021-02-06 19:51:35', '', '2021-02-06 19:51:35', b'0');
984   -INSERT INTO `tool_codegen_column` VALUES (256, 23, 'job_id', 'bigint(20)', '隞餃ID', b'0', b'1', '1', 1, 'Long', 'jobId', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '', '2021-02-06 20:29:26', '', '2021-02-06 20:29:26', b'0');
  1104 +INSERT INTO `tool_codegen_column` VALUES (256, 23, 'job_id', 'bigint(20)', '隞餃ID', b'0', b'1', '1', 1, 'Long', 'jobId', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '', '2021-02-06 20:29:26', '', '2021-02-07 06:38:51', b'1');
985 1105 INSERT INTO `tool_codegen_column` VALUES (257, 23, 'job_name', 'varchar(64)', '隞餃妍', b'0', b'0', '0', 2, 'String', 'jobName', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '', '2021-02-06 20:29:26', '', '2021-02-06 20:47:14', b'1');
986 1106 INSERT INTO `tool_codegen_column` VALUES (258, 23, 'job_group', 'varchar(64)', '隞餃蝏', b'0', b'0', '0', 3, 'String', 'jobGroup', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '', '2021-02-06 20:29:26', '', '2021-02-06 20:47:14', b'1');
987 1107 INSERT INTO `tool_codegen_column` VALUES (259, 23, 'invoke_target', 'varchar(500)', '靚泵銝', b'0', b'0', '0', 4, 'String', 'invokeTarget', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '', '2021-02-06 20:29:26', '', '2021-02-06 20:47:14', b'1');
... ... @@ -994,6 +1114,22 @@ INSERT INTO `tool_codegen_column` VALUES (265, 23, &#39;create_time&#39;, &#39;datetime&#39;, &#39;
994 1114 INSERT INTO `tool_codegen_column` VALUES (266, 23, 'update_by', 'varchar(64)', '', b'1', b'0', '0', 11, 'String', 'updateBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-06 20:29:26', '', '2021-02-06 20:46:49', b'1');
995 1115 INSERT INTO `tool_codegen_column` VALUES (267, 23, 'update_time', 'datetime', '', b'1', b'0', '0', 12, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '', '2021-02-06 20:29:26', '', '2021-02-06 20:47:14', b'1');
996 1116 INSERT INTO `tool_codegen_column` VALUES (268, 23, 'remark', 'varchar(500)', '憭釣靽⊥', b'1', b'0', '0', 13, 'String', 'remark', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '', '2021-02-06 20:29:26', '', '2021-02-06 20:47:14', b'1');
  1117 +INSERT INTO `tool_codegen_column` VALUES (269, 24, 'id', 'bigint(20)', '隞餃蝻', b'0', b'1', '1', 1, 'Long', 'id', '', '1024', b'0', b'1', b'0', '=', b'1', 'input', '', '2021-02-07 06:39:34', '', '2021-02-07 06:44:19', b'0');
  1118 +INSERT INTO `tool_codegen_column` VALUES (270, 24, 'name', 'varchar(32)', '隞餃妍', b'0', b'0', '0', 2, 'String', 'name', '', '瘚遙', b'1', b'1', b'1', 'LIKE', b'1', 'input', '', '2021-02-07 06:39:34', '', '2021-02-07 06:44:19', b'0');
  1119 +INSERT INTO `tool_codegen_column` VALUES (271, 24, 'status', 'tinyint(4)', '隞餃', b'0', b'0', '0', 3, 'Integer', 'status', 'inf_job_status', '1', b'0', b'0', b'1', '=', b'1', 'radio', '', '2021-02-07 06:39:34', '', '2021-02-07 07:55:17', b'0');
  1120 +INSERT INTO `tool_codegen_column` VALUES (272, 24, 'handler_name', 'varchar(64)', '憭', b'0', b'0', '0', 4, 'String', 'handlerName', '', 'sysUserSessionTimeoutJob', b'1', b'1', b'1', 'LIKE', b'1', 'input', '', '2021-02-07 06:39:34', '', '2021-02-07 06:44:19', b'0');
  1121 +INSERT INTO `tool_codegen_column` VALUES (273, 24, 'handler_param', 'varchar(255)', '憭', b'1', b'0', '0', 5, 'String', 'handlerParam', '', 'yudao', b'1', b'1', b'0', '=', b'1', 'input', '', '2021-02-07 06:39:34', '', '2021-02-07 06:44:19', b'0');
  1122 +INSERT INTO `tool_codegen_column` VALUES (274, 24, 'cron_expression', 'varchar(32)', 'CRON 銵刻噢撘', b'0', b'0', '0', 6, 'String', 'cronExpression', '', '0/10 * * * * ? *', b'1', b'1', b'0', '=', b'1', 'input', '', '2021-02-07 06:39:34', '', '2021-02-07 06:44:19', b'0');
  1123 +INSERT INTO `tool_codegen_column` VALUES (275, 24, 'execute_begin_time', 'datetime', '甈⊥銵憪', b'1', b'0', '0', 7, 'Date', 'executeBeginTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'1', 'datetime', '', '2021-02-07 06:39:34', '', '2021-02-07 07:53:27', b'0');
  1124 +INSERT INTO `tool_codegen_column` VALUES (276, 24, 'execute_end_time', 'datetime', '甈⊥銵', b'1', b'0', '0', 8, 'Date', 'executeEndTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'1', 'datetime', '', '2021-02-07 06:39:34', '', '2021-02-07 07:53:27', b'0');
  1125 +INSERT INTO `tool_codegen_column` VALUES (277, 24, 'fire_prev_time', 'datetime', '銝甈∟圻', b'1', b'0', '0', 9, 'Date', 'firePrevTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'1', 'datetime', '', '2021-02-07 06:39:34', '', '2021-02-07 07:53:27', b'0');
  1126 +INSERT INTO `tool_codegen_column` VALUES (278, 24, 'fire_next_time', 'datetime', '銝甈∟圻', b'1', b'0', '0', 10, 'Date', 'fireNextTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'1', 'datetime', '', '2021-02-07 06:39:34', '', '2021-02-07 07:53:27', b'0');
  1127 +INSERT INTO `tool_codegen_column` VALUES (279, 24, 'monitor_timeout', 'int(11)', '頞', b'1', b'0', '0', 11, 'Integer', 'monitorTimeout', '', '1000', b'1', b'1', b'0', '=', b'1', 'input', '', '2021-02-07 06:39:34', '', '2021-02-07 06:44:19', b'0');
  1128 +INSERT INTO `tool_codegen_column` VALUES (280, 24, 'create_by', 'varchar(64)', '遣', b'1', b'0', '0', 12, 'String', 'createBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-07 06:39:34', '', '2021-02-07 06:39:34', b'0');
  1129 +INSERT INTO `tool_codegen_column` VALUES (281, 24, 'create_time', 'datetime', '遣', b'0', b'0', '0', 13, 'Date', 'createTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'1', 'datetime', '', '2021-02-07 06:39:34', '', '2021-02-07 06:44:19', b'0');
  1130 +INSERT INTO `tool_codegen_column` VALUES (282, 24, 'update_by', 'varchar(64)', '', b'1', b'0', '0', 14, 'String', 'updateBy', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '', '2021-02-07 06:39:34', '', '2021-02-07 06:39:34', b'0');
  1131 +INSERT INTO `tool_codegen_column` VALUES (283, 24, 'update_time', 'datetime', '', b'0', b'0', '0', 15, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '', '2021-02-07 06:39:34', '', '2021-02-07 06:39:34', b'0');
  1132 +INSERT INTO `tool_codegen_column` VALUES (284, 24, 'deleted', 'bit(1)', '', b'0', b'0', '0', 16, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '', '2021-02-07 06:39:34', '', '2021-02-07 06:39:34', b'0');
997 1133 COMMIT;
998 1134  
999 1135 -- ----------------------------
... ... @@ -1019,7 +1155,7 @@ CREATE TABLE `tool_codegen_table` (
1019 1155 `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '',
1020 1156 `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '',
1021 1157 PRIMARY KEY (`id`) USING BTREE
1022   -) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8mb4 COMMENT='隞”摰';
  1158 +) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb4 COMMENT='隞”摰';
1023 1159  
1024 1160 -- ----------------------------
1025 1161 -- Records of tool_codegen_table
... ... @@ -1028,7 +1164,8 @@ BEGIN;
1028 1164 INSERT INTO `tool_codegen_table` VALUES (20, 1, 'tool_test_demo', '瘚內靘”', NULL, 'tool', 'test', 'ToolTestDemo', '瘚內靘', '', 1, 3, '', '2021-02-06 01:33:25', '', '2021-02-06 12:34:17', b'0');
1029 1165 INSERT INTO `tool_codegen_table` VALUES (21, 1, 'inf_config', '蔭銵', NULL, 'infra', 'config', 'InfConfig', '蔭', '', 1, NULL, '', '2021-02-06 19:51:35', '', '2021-02-06 19:51:35', b'0');
1030 1166 INSERT INTO `tool_codegen_table` VALUES (22, 2, 'sys_file', '辣銵沔n', NULL, 'system', 'file', 'SysFile', '辣', '', 1, NULL, '', '2021-02-06 20:28:34', '', '2021-02-06 20:28:34', b'0');
1031   -INSERT INTO `tool_codegen_table` VALUES (23, 2, 'sys_job', '摰隞餃靚漲銵', NULL, 'system', 'job', 'SysJob', '摰隞餃靚漲', '', 1, NULL, '', '2021-02-06 20:29:26', '', '2021-02-06 20:29:26', b'0');
  1167 +INSERT INTO `tool_codegen_table` VALUES (23, 2, 'sys_job', '摰隞餃靚漲銵', NULL, 'system', 'job', 'SysJob', '摰隞餃靚漲', '', 1, NULL, '', '2021-02-06 20:29:26', '', '2021-02-07 06:38:51', b'1');
  1168 +INSERT INTO `tool_codegen_table` VALUES (24, 1, 'inf_job', '摰隞餃銵', NULL, 'infra', 'job', 'InfJob', '摰隞餃', '', 1, NULL, '', '2021-02-07 06:39:34', '', '2021-02-07 06:46:56', b'0');
1032 1169 COMMIT;
1033 1170  
1034 1171 -- ----------------------------
... ...
src/main/java/cn/iocoder/dashboard/framework/mybatis/core/mapper/BaseMapperX.java
... ... @@ -28,4 +28,8 @@ public interface BaseMapperX&lt;T&gt; extends BaseMapper&lt;T&gt; {
28 28 return selectList(new QueryWrapper<>());
29 29 }
30 30  
  31 + default T selectOne(String field, Object value) {
  32 + return selectOne(new QueryWrapper<T>().eq(field, value));
  33 + }
  34 +
31 35 }
... ...
src/main/java/cn/iocoder/dashboard/framework/quartz/core/scheduler/SchedulerManager.java
... ... @@ -7,6 +7,12 @@ import org.quartz.*;
7 7 /**
8 8 * {@link org.quartz.Scheduler} 的管理器,负责创建任务
9 9 *
  10 + * 考虑到实现的简洁性,我们使用 jobHandlerName 作为唯一标识,即:
  11 + * 1. Job 的 {@link JobDetail#getKey()}
  12 + * 2. Trigger 的 {@link Trigger#getKey()}
  13 + *
  14 + * 另外,jobHandlerName 对应到 Spring Bean 的名字,直接调用
  15 + *
10 16 * @author 芋道源码
11 17 */
12 18 public class SchedulerManager {
... ... @@ -17,6 +23,15 @@ public class SchedulerManager {
17 23 this.scheduler = scheduler;
18 24 }
19 25  
  26 + /**
  27 + * 添加 Job 到 Quartz 中
  28 + *
  29 + * @param jobId 任务编号
  30 + * @param jobHandlerName 任务处理器的名字
  31 + * @param jobHandlerParam 任务处理器的参数
  32 + * @param cronExpression CRON 表达式
  33 + * @throws SchedulerException 添加异常
  34 + */
20 35 public void addJob(Long jobId, String jobHandlerName, String jobHandlerParam, String cronExpression)
21 36 throws SchedulerException {
22 37 // 创建 JobDetail 对象
... ... @@ -30,6 +45,14 @@ public class SchedulerManager {
30 45 scheduler.scheduleJob(jobDetail, trigger);
31 46 }
32 47  
  48 + /**
  49 + * 更新 Job 到 Quartz
  50 + *
  51 + * @param jobHandlerName 任务处理器的名字
  52 + * @param jobHandlerParam 任务处理器的参数
  53 + * @param cronExpression CRON 表达式
  54 + * @throws SchedulerException 更新异常
  55 + */
33 56 public void updateJob(String jobHandlerName, String jobHandlerParam, String cronExpression)
34 57 throws SchedulerException {
35 58 // 创建新 Trigger 对象
... ... @@ -38,19 +61,45 @@ public class SchedulerManager {
38 61 scheduler.rescheduleJob(new TriggerKey(jobHandlerName), newTrigger);
39 62 }
40 63  
  64 + /**
  65 + * 删除 Quartz 中的 Job
  66 + *
  67 + * @param jobHandlerName 任务处理器的名字
  68 + * @throws SchedulerException 删除异常
  69 + */
41 70 public void deleteJob(String jobHandlerName) throws SchedulerException {
42 71 scheduler.deleteJob(new JobKey(jobHandlerName));
43 72 }
44 73  
  74 + /**
  75 + * 暂停 Quartz 中的 Job
  76 + *
  77 + * @param jobHandlerName 任务处理器的名字
  78 + * @throws SchedulerException 暂停异常
  79 + */
45 80 public void pauseJob(String jobHandlerName) throws SchedulerException {
46 81 scheduler.pauseJob(new JobKey(jobHandlerName));
47 82 }
48 83  
  84 + /**
  85 + * 启动 Quartz 中的 Job
  86 + *
  87 + * @param jobHandlerName 任务处理器的名字
  88 + * @throws SchedulerException 启动异常
  89 + */
49 90 public void resumeJob(String jobHandlerName) throws SchedulerException {
50 91 scheduler.resumeJob(new JobKey(jobHandlerName));
51 92 scheduler.resumeTrigger(new TriggerKey(jobHandlerName));
52 93 }
53 94  
  95 + /**
  96 + * 立即触发一次 Quartz 中的 Job
  97 + *
  98 + * @param jobId 任务编号
  99 + * @param jobHandlerName 任务处理器的名字
  100 + * @param jobHandlerParam 任务处理器的参数
  101 + * @throws SchedulerException 触发异常
  102 + */
54 103 public void triggerJob(Long jobId, String jobHandlerName, String jobHandlerParam)
55 104 throws SchedulerException {
56 105 JobDataMap data = new JobDataMap();
... ...
src/main/java/cn/iocoder/dashboard/framework/quartz/core/util/CronUtils.java 0 → 100644
  1 +package cn.iocoder.dashboard.framework.quartz.core.util;
  2 +
  3 +import org.quartz.CronExpression;
  4 +
  5 +/**
  6 + * Quartz Cron 表达式的工具类
  7 + *
  8 + * @author 芋道源码
  9 + */
  10 +public class CronUtils {
  11 +
  12 + /**
  13 + * 校验 CRON 表达式是否有效
  14 + *
  15 + * @param cronExpression CRON 表达式
  16 + * @return 是否有效
  17 + */
  18 + public static boolean isValid(String cronExpression) {
  19 + return CronExpression.isValidExpression(cronExpression);
  20 + }
  21 +
  22 +}
... ...
src/main/java/cn/iocoder/dashboard/modules/infra/controller/job/InfJobController.java
... ... @@ -10,7 +10,9 @@ import cn.iocoder.dashboard.modules.infra.dal.dataobject.job.InfJobDO;
10 10 import cn.iocoder.dashboard.modules.infra.service.job.InfJobService;
11 11 import io.swagger.annotations.Api;
12 12 import io.swagger.annotations.ApiImplicitParam;
  13 +import io.swagger.annotations.ApiImplicitParams;
13 14 import io.swagger.annotations.ApiOperation;
  15 +import org.quartz.SchedulerException;
14 16 import org.springframework.security.access.prepost.PreAuthorize;
15 17 import org.springframework.validation.annotation.Validated;
16 18 import org.springframework.web.bind.annotation.*;
... ... @@ -37,30 +39,55 @@ public class InfJobController {
37 39 @PostMapping("/create")
38 40 @ApiOperation("创建定时任务")
39 41 @PreAuthorize("@ss.hasPermission('infra:job:create')")
40   - public CommonResult<Long> createJob(@Valid @RequestBody InfJobCreateReqVO createReqVO) {
  42 + public CommonResult<Long> createJob(@Valid @RequestBody InfJobCreateReqVO createReqVO)
  43 + throws SchedulerException {
41 44 return success(jobService.createJob(createReqVO));
42 45 }
43 46  
44 47 @PutMapping("/update")
45 48 @ApiOperation("更新定时任务")
46 49 @PreAuthorize("@ss.hasPermission('infra:job:update')")
47   - public CommonResult<Boolean> updateJob(@Valid @RequestBody InfJobUpdateReqVO updateReqVO) {
  50 + public CommonResult<Boolean> updateJob(@Valid @RequestBody InfJobUpdateReqVO updateReqVO)
  51 + throws SchedulerException {
48 52 jobService.updateJob(updateReqVO);
49 53 return success(true);
50 54 }
51 55  
  56 + @PutMapping("/update-status")
  57 + @ApiOperation("更新定时任务的状态")
  58 + @ApiImplicitParams({
  59 + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class),
  60 + @ApiImplicitParam(name = "status", value = "状态", required = true, example = "1", dataTypeClass = Integer.class),
  61 + })
  62 + @PreAuthorize("@ss.hasPermission('infra:job:update')")
  63 + public CommonResult<Boolean> updateJobStatus(@RequestParam(value = "id") Long id, @RequestParam("status") Integer status)
  64 + throws SchedulerException {
  65 + jobService.updateJobStatus(id, status);
  66 + return success(true);
  67 + }
  68 +
52 69 @DeleteMapping("/delete")
53 70 @ApiOperation("删除定时任务")
54   - @ApiImplicitParam(name = "id", value = "编号", required = true)
  71 + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
55 72 @PreAuthorize("@ss.hasPermission('infra:job:delete')")
56   - public CommonResult<Boolean> deleteJob(@RequestParam("id") Long id) {
  73 + public CommonResult<Boolean> deleteJob(@RequestParam("id") Long id)
  74 + throws SchedulerException {
57 75 jobService.deleteJob(id);
58 76 return success(true);
59 77 }
60 78  
  79 + @PutMapping("/trigger")
  80 + @ApiOperation("触发定时任务")
  81 + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
  82 + @PreAuthorize("@ss.hasPermission('infra:job:trigger')")
  83 + public CommonResult<Boolean> triggerJob(@RequestParam("id") Long id) throws SchedulerException {
  84 + jobService.triggerJob(id);
  85 + return success(true);
  86 + }
  87 +
61 88 @GetMapping("/get")
62 89 @ApiOperation("获得定时任务")
63   - @ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = Long.class)
  90 + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
64 91 @PreAuthorize("@ss.hasPermission('infra:job:query')")
65 92 public CommonResult<InfJobRespVO> getJob(@RequestParam("id") Long id) {
66 93 InfJobDO job = jobService.getJob(id);
... ...
src/main/java/cn/iocoder/dashboard/modules/infra/dal/dataobject/job/InfJobDO.java
... ... @@ -2,13 +2,9 @@ package cn.iocoder.dashboard.modules.infra.dal.dataobject.job;
2 2  
3 3 import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO;
4 4 import cn.iocoder.dashboard.modules.infra.enums.job.InfJobStatusEnum;
5   -import com.baomidou.mybatisplus.annotation.FieldStrategy;
6   -import com.baomidou.mybatisplus.annotation.TableField;
7 5 import com.baomidou.mybatisplus.annotation.TableId;
8 6 import com.baomidou.mybatisplus.annotation.TableName;
9   -import lombok.Data;
10   -import lombok.EqualsAndHashCode;
11   -import lombok.ToString;
  7 +import lombok.*;
12 8  
13 9 import java.util.Date;
14 10  
... ... @@ -21,6 +17,9 @@ import java.util.Date;
21 17 @Data
22 18 @EqualsAndHashCode(callSuper = true)
23 19 @ToString(callSuper = true)
  20 +@Builder
  21 +@NoArgsConstructor
  22 +@AllArgsConstructor
24 23 public class InfJobDO extends BaseDO {
25 24  
26 25 /**
... ... @@ -45,7 +44,6 @@ public class InfJobDO extends BaseDO {
45 44 /**
46 45 * 处理器的参数
47 46 */
48   - @TableField(updateStrategy = FieldStrategy.IGNORED)
49 47 private String handlerParam;
50 48  
51 49 // ========== 时间相关字段 ==========
... ...
src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/job/InfJobMapper.java
... ... @@ -18,6 +18,10 @@ import java.util.List;
18 18 @Mapper
19 19 public interface InfJobMapper extends BaseMapperX<InfJobDO> {
20 20  
  21 + default InfJobDO selectByHandlerName(String handlerName) {
  22 + return selectOne("handler_name", handlerName);
  23 + }
  24 +
21 25 default PageResult<InfJobDO> selectPage(InfJobPageReqVO reqVO) {
22 26 return selectPage(reqVO, new QueryWrapperX<InfJobDO>()
23 27 .likeIfPresent("name", reqVO.getName())
... ...
src/main/java/cn/iocoder/dashboard/modules/infra/enums/InfErrorCodeConstants.java
... ... @@ -17,5 +17,10 @@ public interface InfErrorCodeConstants {
17 17  
18 18 // ========== 定时任务 1001001000 ==========
19 19 ErrorCode JOB_NOT_EXISTS = new ErrorCode(1001001000, "定时任务不存在");
  20 + ErrorCode JOB_HANDLER_EXISTS = new ErrorCode(1001001001, "定时任务的处理器已经存在");
  21 + ErrorCode JOB_CHANGE_STATUS_INVALID = new ErrorCode(1001001002, "只允许修改为开启或者关闭状态");
  22 + ErrorCode JOB_CHANGE_STATUS_EQUALS = new ErrorCode(1001001003, "定时任务已经处于该状态,无需修改");
  23 + ErrorCode JOB_UPDATE_ONLY_NORMAL_STATUS = new ErrorCode(1001001004, "只有开启状态的任务,才可以修改");
  24 + ErrorCode JOB_CRON_EXPRESSION_VALID = new ErrorCode(1001001005, "CRON 表达式不正确");
20 25  
21 26 }
... ...
src/main/java/cn/iocoder/dashboard/modules/infra/service/job/InfJobService.java
... ... @@ -6,6 +6,7 @@ import cn.iocoder.dashboard.modules.infra.controller.job.vo.job.InfJobExportReqV
6 6 import cn.iocoder.dashboard.modules.infra.controller.job.vo.job.InfJobPageReqVO;
7 7 import cn.iocoder.dashboard.modules.infra.controller.job.vo.job.InfJobUpdateReqVO;
8 8 import cn.iocoder.dashboard.modules.infra.dal.dataobject.job.InfJobDO;
  9 +import org.quartz.SchedulerException;
9 10  
10 11 import javax.validation.Valid;
11 12 import java.util.Collection;
... ... @@ -24,21 +25,36 @@ public interface InfJobService {
24 25 * @param createReqVO 创建信息
25 26 * @return 编号
26 27 */
27   - Long createJob(@Valid InfJobCreateReqVO createReqVO);
  28 + Long createJob(@Valid InfJobCreateReqVO createReqVO) throws SchedulerException;
28 29  
29 30 /**
30 31 * 更新定时任务
31 32 *
32 33 * @param updateReqVO 更新信息
33 34 */
34   - void updateJob(@Valid InfJobUpdateReqVO updateReqVO);
  35 + void updateJob(@Valid InfJobUpdateReqVO updateReqVO) throws SchedulerException;
  36 +
  37 + /**
  38 + * 更新定时任务的状态
  39 + *
  40 + * @param id 任务编号
  41 + * @param status 状态
  42 + */
  43 + void updateJobStatus(Long id, Integer status) throws SchedulerException;
  44 +
  45 + /**
  46 + * 触发定时任务
  47 + *
  48 + * @param id 任务编号
  49 + */
  50 + void triggerJob(Long id) throws SchedulerException;
35 51  
36 52 /**
37 53 * 删除定时任务
38 54 *
39 55 * @param id 编号
40 56 */
41   - void deleteJob(Long id);
  57 + void deleteJob(Long id) throws SchedulerException;
42 58  
43 59 /**
44 60 * 获得定时任务
... ...
src/main/java/cn/iocoder/dashboard/modules/infra/service/job/impl/InfJobServiceImpl.java
1 1 package cn.iocoder.dashboard.modules.infra.service.job.impl;
2 2  
3   -import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil;
4 3 import cn.iocoder.dashboard.common.pojo.PageResult;
  4 +import cn.iocoder.dashboard.framework.quartz.core.scheduler.SchedulerManager;
  5 +import cn.iocoder.dashboard.framework.quartz.core.util.CronUtils;
5 6 import cn.iocoder.dashboard.modules.infra.controller.job.vo.job.InfJobCreateReqVO;
6 7 import cn.iocoder.dashboard.modules.infra.controller.job.vo.job.InfJobExportReqVO;
7 8 import cn.iocoder.dashboard.modules.infra.controller.job.vo.job.InfJobPageReqVO;
... ... @@ -9,15 +10,20 @@ import cn.iocoder.dashboard.modules.infra.controller.job.vo.job.InfJobUpdateReqV
9 10 import cn.iocoder.dashboard.modules.infra.convert.job.InfJobConvert;
10 11 import cn.iocoder.dashboard.modules.infra.dal.dataobject.job.InfJobDO;
11 12 import cn.iocoder.dashboard.modules.infra.dal.mysql.job.InfJobMapper;
  13 +import cn.iocoder.dashboard.modules.infra.enums.job.InfJobStatusEnum;
12 14 import cn.iocoder.dashboard.modules.infra.service.job.InfJobService;
  15 +import org.quartz.SchedulerException;
13 16 import org.springframework.stereotype.Service;
  17 +import org.springframework.transaction.annotation.Transactional;
14 18 import org.springframework.validation.annotation.Validated;
15 19  
16 20 import javax.annotation.Resource;
17 21 import java.util.Collection;
18 22 import java.util.List;
19 23  
20   -import static cn.iocoder.dashboard.modules.infra.enums.InfErrorCodeConstants.JOB_NOT_EXISTS;
  24 +import static cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil.exception;
  25 +import static cn.iocoder.dashboard.modules.infra.enums.InfErrorCodeConstants.*;
  26 +import static cn.iocoder.dashboard.util.collection.CollectionUtils.containsAny;
21 27  
22 28 /**
23 29 * 定时任务 Service 实现类
... ... @@ -31,41 +37,109 @@ public class InfJobServiceImpl implements InfJobService {
31 37 @Resource
32 38 private InfJobMapper jobMapper;
33 39  
  40 + @Resource
  41 + private SchedulerManager schedulerManager;
  42 +
34 43 @Override
35   - public Long createJob(InfJobCreateReqVO createReqVO) {
  44 + @Transactional
  45 + public Long createJob(InfJobCreateReqVO createReqVO) throws SchedulerException {
  46 + validateCronExpression(createReqVO.getCronExpression());
  47 + // 校验唯一性
  48 + if (jobMapper.selectByHandlerName(createReqVO.getHandlerName()) != null) {
  49 + throw exception(JOB_HANDLER_EXISTS);
  50 + }
36 51 // 插入
37 52 InfJobDO job = InfJobConvert.INSTANCE.convert(createReqVO);
38   - if (job.getMonitorTimeout() == null) {
39   - job.setMonitorTimeout(0);
40   - }
  53 + job.setStatus(InfJobStatusEnum.INIT.getStatus());
  54 + fillJobMonitorTimeoutEmpty(job);
41 55 jobMapper.insert(job);
  56 +
  57 + // 添加 Job 到 Quartz 中
  58 + schedulerManager.addJob(job.getId(), job.getHandlerName(), job.getHandlerParam(), job.getCronExpression());
  59 + // 更新
  60 + InfJobDO updateObj = InfJobDO.builder().id(job.getId()).status(InfJobStatusEnum.NORMAL.getStatus()).build();
  61 + jobMapper.updateById(updateObj);
  62 +
42 63 // 返回
43 64 return job.getId();
44 65 }
45 66  
46 67 @Override
47   - public void updateJob(InfJobUpdateReqVO updateReqVO) {
  68 + @Transactional
  69 + public void updateJob(InfJobUpdateReqVO updateReqVO) throws SchedulerException {
  70 + validateCronExpression(updateReqVO.getCronExpression());
48 71 // 校验存在
49   - this.validateJobExists(updateReqVO.getId());
  72 + InfJobDO job = this.validateJobExists(updateReqVO.getId());
  73 + // 只有开启状态,才可以修改.原因是,如果出暂停状态,修改 Quartz Job 时,会导致任务又开始执行
  74 + if (!job.getStatus().equals(InfJobStatusEnum.NORMAL.getStatus())) {
  75 + throw exception(JOB_UPDATE_ONLY_NORMAL_STATUS);
  76 + }
50 77 // 更新
51 78 InfJobDO updateObj = InfJobConvert.INSTANCE.convert(updateReqVO);
52   - if (updateObj.getMonitorTimeout() == null) {
53   - updateObj.setMonitorTimeout(0);
  79 + fillJobMonitorTimeoutEmpty(updateObj);
  80 + jobMapper.updateById(updateObj);
  81 +
  82 + // 更新 Job 到 Quartz 中
  83 + schedulerManager.updateJob(job.getHandlerName(), updateReqVO.getHandlerParam(), updateReqVO.getCronExpression());
  84 + }
  85 +
  86 + @Override
  87 + @Transactional
  88 + public void updateJobStatus(Long id, Integer status) throws SchedulerException {
  89 + // 校验 status
  90 + if (!containsAny(status, InfJobStatusEnum.NORMAL.getStatus(), InfJobStatusEnum.STOP.getStatus())) {
  91 + throw exception(JOB_CHANGE_STATUS_INVALID);
  92 + }
  93 + // 校验存在
  94 + InfJobDO job = this.validateJobExists(id);
  95 + // 校验是否已经为当前状态
  96 + if (job.getStatus().equals(status)) {
  97 + throw exception(JOB_CHANGE_STATUS_EQUALS);
54 98 }
  99 + // 更新 Job 状态
  100 + InfJobDO updateObj = InfJobDO.builder().id(id).status(status).build();
55 101 jobMapper.updateById(updateObj);
  102 +
  103 + // 更新状态 Job 到 Quartz 中
  104 + if (InfJobStatusEnum.NORMAL.getStatus().equals(status)) { // 开启
  105 + schedulerManager.resumeJob(job.getHandlerName());
  106 + } else { // 暂停
  107 + schedulerManager.pauseJob(job.getHandlerName());
  108 + }
56 109 }
57 110  
58 111 @Override
59   - public void deleteJob(Long id) {
  112 + public void triggerJob(Long id) throws SchedulerException {
60 113 // 校验存在
61   - this.validateJobExists(id);
  114 + InfJobDO job = this.validateJobExists(id);
  115 +
  116 + // 触发 Quartz 中的 Job
  117 + schedulerManager.triggerJob(job.getId(), job.getHandlerName(), job.getHandlerParam());
  118 + }
  119 +
  120 + @Override
  121 + @Transactional
  122 + public void deleteJob(Long id) throws SchedulerException {
  123 + // 校验存在
  124 + InfJobDO job = this.validateJobExists(id);
62 125 // 更新
63 126 jobMapper.deleteById(id);
  127 +
  128 + // 删除 Job 到 Quartz 中
  129 + schedulerManager.deleteJob(job.getHandlerName());
64 130 }
65 131  
66   - private void validateJobExists(Long id) {
67   - if (jobMapper.selectById(id) == null) {
68   - throw ServiceExceptionUtil.exception(JOB_NOT_EXISTS);
  132 + private InfJobDO validateJobExists(Long id) {
  133 + InfJobDO job = jobMapper.selectById(id);
  134 + if (job == null) {
  135 + throw exception(JOB_NOT_EXISTS);
  136 + }
  137 + return job;
  138 + }
  139 +
  140 + private void validateCronExpression(String cronExpression) {
  141 + if (CronUtils.isValid(cronExpression)) {
  142 + throw exception(JOB_CRON_EXPRESSION_VALID);
69 143 }
70 144 }
71 145  
... ... @@ -89,4 +163,10 @@ public class InfJobServiceImpl implements InfJobService {
89 163 return jobMapper.selectList(exportReqVO);
90 164 }
91 165  
  166 + private static void fillJobMonitorTimeoutEmpty(InfJobDO job) {
  167 + if (job.getMonitorTimeout() == null) {
  168 + job.setMonitorTimeout(0);
  169 + }
  170 + }
  171 +
92 172 }
... ...
src/main/java/cn/iocoder/dashboard/util/collection/CollectionUtils.java
... ... @@ -15,6 +15,10 @@ import java.util.stream.Collectors;
15 15 */
16 16 public class CollectionUtils {
17 17  
  18 + public static boolean containsAny(Object source, Object... targets) {
  19 + return Arrays.asList(targets).contains(source);
  20 + }
  21 +
18 22 public static boolean isAnyEmpty(Collection<?>... collections) {
19 23 return Arrays.stream(collections).anyMatch(CollectionUtil::isEmpty);
20 24 }
... ...
src/main/resources/codegen/java/controller/controller.vm
... ... @@ -63,7 +63,7 @@ public class ${table.className}Controller {
63 63  
64 64 @GetMapping("/get")
65 65 @ApiOperation("获得${table.classComment}")
66   - @ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = ${primaryColumn.javaType}.class)
  66 + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = ${primaryColumn.javaType}.class)
67 67 @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')")
68 68 public CommonResult<${table.className}RespVO> get${simpleClassName}(@RequestParam("id") ${primaryColumn.javaType} id) {
69 69 ${table.className}DO ${classNameVar} = ${classNameVar}Service.get${simpleClassName}(id);
... ... @@ -72,7 +72,7 @@ public class ${table.className}Controller {
72 72  
73 73 @GetMapping("/list")
74 74 @ApiOperation("获得${table.classComment}列表")
75   - @ApiImplicitParam(name = "ids", value = "编号列表", required = true, dataTypeClass = List.class)
  75 + @ApiImplicitParam(name = "ids", value = "编号列表", required = true, example = "1024,2048", dataTypeClass = List.class)
76 76 @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')")
77 77 public CommonResult<List<${table.className}RespVO>> get${simpleClassName}List(@RequestParam("ids") Collection<${primaryColumn.javaType}> ids) {
78 78 List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(ids);
... ...