소스 검색

日志重构

xueli.xue 9 년 전
부모
커밋
ee50140842

+ 2 - 0
README.md 파일 보기

4
 git.osc地址:http://git.oschina.net/xuxueli0323/xxl-job
4
 git.osc地址:http://git.oschina.net/xuxueli0323/xxl-job
5
 
5
 
6
 博客地址(内附使用教程):http://www.cnblogs.com/xuxueli/p/5021979.html
6
 博客地址(内附使用教程):http://www.cnblogs.com/xuxueli/p/5021979.html
7
+
8
+技术交流群(仅作技术交流):367260654
7
 	
9
 	
8
 # 特点:基于quartz封装实现的的集群任务调度管理平台
10
 # 特点:基于quartz封装实现的的集群任务调度管理平台
9
 	1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;
11
 	1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;

+ 29 - 11
doc/db/tables_xxl_log.sql 파일 보기

10
 # DROP TABLE IF EXISTS XXL_JOB_QRTZ_JOB_DETAILS;
10
 # DROP TABLE IF EXISTS XXL_JOB_QRTZ_JOB_DETAILS;
11
 # DROP TABLE IF EXISTS XXL_JOB_QRTZ_CALENDARS;
11
 # DROP TABLE IF EXISTS XXL_JOB_QRTZ_CALENDARS;
12
 # DROP TABLE IF EXISTS `xxl_job_qrtz_trigger_log`;
12
 # DROP TABLE IF EXISTS `xxl_job_qrtz_trigger_log`;
13
+# DROP TABLE IF EXISTS `xxl_job_qrtz_trigger_info`;
13
 
14
 
14
 CREATE TABLE XXL_JOB_QRTZ_JOB_DETAILS
15
 CREATE TABLE XXL_JOB_QRTZ_JOB_DETAILS
15
   (
16
   (
158
 
159
 
159
 CREATE TABLE `xxl_job_qrtz_trigger_log` (
160
 CREATE TABLE `xxl_job_qrtz_trigger_log` (
160
   `id` int(11) NOT NULL AUTO_INCREMENT,
161
   `id` int(11) NOT NULL AUTO_INCREMENT,
161
-  `job_name` varchar(255) NOT NULL,
162
-  `job_cron` varchar(128) DEFAULT NULL,
163
-  `job_class` varchar(255) DEFAULT NULL,
164
-  `job_data` varchar(2048) DEFAULT NULL,
165
-  `trigger_time` datetime DEFAULT NULL,
166
-  `trigger_status` varchar(255) DEFAULT NULL,
167
-  `trigger_msg` varchar(2048) DEFAULT NULL,
168
-  `handle_time` datetime DEFAULT NULL,
169
-  `handle_status` varchar(255) DEFAULT NULL,
170
-  `handle_msg` varchar(2048) DEFAULT NULL,
162
+  `job_group` varchar(255) NOT NULL COMMENT '任务组',
163
+  `job_name` varchar(255) NOT NULL COMMENT '任务名',
164
+  `job_cron` varchar(128) NOT NULL COMMENT '任务执行CORN表达式',
165
+  `job_class` varchar(255) NOT NULL COMMENT '任务执行JobBean',
166
+  `job_data` varchar(2048) DEFAULT NULL COMMENT '任务执行数据',
167
+  `trigger_time` datetime DEFAULT NULL COMMENT '调度-时间',
168
+  `trigger_status` varchar(255) DEFAULT NULL COMMENT '调度-结果',
169
+  `trigger_msg` varchar(2048) DEFAULT NULL COMMENT '调度-日志',
170
+  `handle_time` datetime DEFAULT NULL COMMENT '执行-时间',
171
+  `handle_status` varchar(255) DEFAULT NULL COMMENT '执行-状态',
172
+  `handle_msg` varchar(2048) DEFAULT NULL COMMENT '执行-日志',
171
   PRIMARY KEY (`id`)
173
   PRIMARY KEY (`id`)
172
-) ENGINE=InnoDB AUTO_INCREMENT=127 DEFAULT CHARSET=utf8;
174
+);
175
+
176
+CREATE TABLE `xxl_job_qrtz_trigger_log` (
177
+  `id` int(11) NOT NULL AUTO_INCREMENT,
178
+  `job_group` varchar(255) NOT NULL COMMENT '任务组',
179
+  `job_name` varchar(255) NOT NULL COMMENT '任务名',
180
+  `job_cron` varchar(128) NOT NULL COMMENT '任务执行CORN表达式',
181
+  `job_class` varchar(255) NOT NULL COMMENT '任务执行JobBean',
182
+  `job_data` varchar(2048) DEFAULT NULL COMMENT '任务执行数据',
183
+  `trigger_time` datetime DEFAULT NULL COMMENT '调度-时间',
184
+  `trigger_status` varchar(255) DEFAULT NULL COMMENT '调度-结果',
185
+  `trigger_msg` varchar(2048) DEFAULT NULL COMMENT '调度-日志',
186
+  `handle_time` datetime DEFAULT NULL COMMENT '执行-时间',
187
+  `handle_status` varchar(255) DEFAULT NULL COMMENT '执行-状态',
188
+  `handle_msg` varchar(2048) DEFAULT NULL COMMENT '执行-日志',
189
+  PRIMARY KEY (`id`)
190
+);
173
 
191
 
174
 commit;
192
 commit;
175
 
193
 

+ 1 - 1
xxl-job-admin/pom.xml 파일 보기

127
 		<dependency>
127
 		<dependency>
128
 			<groupId>org.quartz-scheduler</groupId>
128
 			<groupId>org.quartz-scheduler</groupId>
129
 			<artifactId>quartz</artifactId>
129
 			<artifactId>quartz</artifactId>
130
-			<version>2.2.1</version>
130
+			<version>2.2.2</version>
131
 		</dependency>
131
 		</dependency>
132
 		
132
 		
133
 		<!-- httpclient -->
133
 		<!-- httpclient -->

+ 1 - 1
xxl-job-admin/src/main/java/com/xxl/job/controller/IndexController.java 파일 보기

13
 
13
 
14
 	@RequestMapping("/")
14
 	@RequestMapping("/")
15
 	public String index(Model model) {
15
 	public String index(Model model) {
16
-		return "redirect:job";
16
+		return "redirect:jobinfo";
17
 	}
17
 	}
18
 	
18
 	
19
 	@RequestMapping("/help")
19
 	@RequestMapping("/help")

xxl-job-admin/src/main/java/com/xxl/job/controller/JobController.java → xxl-job-admin/src/main/java/com/xxl/job/controller/JobInfoController.java 파일 보기

22
 
22
 
23
 import com.xxl.job.client.handler.HandlerRepository;
23
 import com.xxl.job.client.handler.HandlerRepository;
24
 import com.xxl.job.client.util.JacksonUtil;
24
 import com.xxl.job.client.util.JacksonUtil;
25
+import com.xxl.job.core.constant.Constants.JobGroupEnum;
25
 import com.xxl.job.core.model.ReturnT;
26
 import com.xxl.job.core.model.ReturnT;
26
 import com.xxl.job.core.model.XxlJobInfo;
27
 import com.xxl.job.core.model.XxlJobInfo;
27
 import com.xxl.job.core.util.DynamicSchedulerUtil;
28
 import com.xxl.job.core.util.DynamicSchedulerUtil;
33
  * @author xuxueli 2015-12-19 16:13:16
34
  * @author xuxueli 2015-12-19 16:13:16
34
  */
35
  */
35
 @Controller
36
 @Controller
36
-@RequestMapping("/job")
37
-public class JobController {
37
+@RequestMapping("/jobinfo")
38
+public class JobInfoController {
38
 	
39
 	
39
 	@Resource
40
 	@Resource
40
 	private IXxlJobInfoDao xxlJobInfoDao;
41
 	private IXxlJobInfoDao xxlJobInfoDao;
41
 	
42
 	
42
 	@RequestMapping
43
 	@RequestMapping
43
 	public String index(Model model) {
44
 	public String index(Model model) {
44
-		//List<Map<String, Object>> jobList = DynamicSchedulerUtil.getJobList();
45
-		//model.addAttribute("jobList", jobList);
46
-		return "job/index";
45
+		model.addAttribute("JobGroupList", JobGroupEnum.values());
46
+		return "jobinfo/index";
47
 	}
47
 	}
48
 	
48
 	
49
 	@RequestMapping("/pageList")
49
 	@RequestMapping("/pageList")

+ 26 - 37
xxl-job-admin/src/main/java/com/xxl/job/controller/JobLogController.java 파일 보기

1
 package com.xxl.job.controller;
1
 package com.xxl.job.controller;
2
 
2
 
3
 import java.text.ParseException;
3
 import java.text.ParseException;
4
-import java.util.Calendar;
5
 import java.util.Date;
4
 import java.util.Date;
6
 import java.util.HashMap;
5
 import java.util.HashMap;
7
 import java.util.List;
6
 import java.util.List;
17
 import org.springframework.web.bind.annotation.RequestParam;
16
 import org.springframework.web.bind.annotation.RequestParam;
18
 import org.springframework.web.bind.annotation.ResponseBody;
17
 import org.springframework.web.bind.annotation.ResponseBody;
19
 
18
 
19
+import com.xxl.job.core.constant.Constants.JobGroupEnum;
20
 import com.xxl.job.core.model.ReturnT;
20
 import com.xxl.job.core.model.ReturnT;
21
 import com.xxl.job.core.model.XxlJobLog;
21
 import com.xxl.job.core.model.XxlJobLog;
22
 import com.xxl.job.dao.IXxlJobLogDao;
22
 import com.xxl.job.dao.IXxlJobLogDao;
32
 	@Resource
32
 	@Resource
33
 	public IXxlJobLogDao xxlJobLogDao;
33
 	public IXxlJobLogDao xxlJobLogDao;
34
 	
34
 	
35
-	@RequestMapping("/save")
36
-	@ResponseBody
37
-	public ReturnT<String> triggerLog(int triggerLogId, String status, String msg) {
38
-		XxlJobLog log = xxlJobLogDao.load(triggerLogId);
39
-		if (log!=null) {
40
-			log.setHandleTime(new Date());
41
-			log.setHandleStatus(status);
42
-			log.setHandleMsg(msg);
43
-			xxlJobLogDao.updateHandleInfo(log);
44
-			return ReturnT.SUCCESS;
45
-		}
46
-		return ReturnT.FAIL;
47
-	}
48
-	
49
 	@RequestMapping
35
 	@RequestMapping
50
-	public String index(Model model, String jobName, String filterTime) {
51
-		
52
-		// 默认filterTime
53
-		Calendar todayz = Calendar.getInstance();
54
-		todayz.set(Calendar.HOUR_OF_DAY, 0);
55
-		todayz.set(Calendar.MINUTE, 0);
56
-		todayz.set(Calendar.SECOND, 0);
57
-		model.addAttribute("triggerTimeStart", todayz.getTime());
58
-		model.addAttribute("triggerTimeEnd", Calendar.getInstance().getTime());
59
-				
60
-		model.addAttribute("jobName", jobName);
61
-		model.addAttribute("filterTime", filterTime);
36
+	public String index(Model model) {
37
+		model.addAttribute("JobGroupList", JobGroupEnum.values());
62
 		return "joblog/index";
38
 		return "joblog/index";
63
 	}
39
 	}
64
 	
40
 	
66
 	@ResponseBody
42
 	@ResponseBody
67
 	public Map<String, Object> pageList(@RequestParam(required = false, defaultValue = "0") int start,  
43
 	public Map<String, Object> pageList(@RequestParam(required = false, defaultValue = "0") int start,  
68
 			@RequestParam(required = false, defaultValue = "10") int length,
44
 			@RequestParam(required = false, defaultValue = "10") int length,
69
-			String jobName, String filterTime) {
45
+			String jobGroup, String jobName, String filterTime) {
46
+		
70
 		// parse param
47
 		// parse param
71
 		Date triggerTimeStart = null;
48
 		Date triggerTimeStart = null;
72
 		Date triggerTimeEnd = null;
49
 		Date triggerTimeEnd = null;
74
 			String[] temp = filterTime.split(" - ");
51
 			String[] temp = filterTime.split(" - ");
75
 			if (temp!=null && temp.length == 2) {
52
 			if (temp!=null && temp.length == 2) {
76
 				try {
53
 				try {
77
-					triggerTimeEnd = DateUtils.parseDate(temp[0], new String[]{"yyyy-MM-dd HH:mm:ss"});
54
+					triggerTimeStart = DateUtils.parseDate(temp[0], new String[]{"yyyy-MM-dd HH:mm:ss"});
78
 					triggerTimeEnd = DateUtils.parseDate(temp[1], new String[]{"yyyy-MM-dd HH:mm:ss"});
55
 					triggerTimeEnd = DateUtils.parseDate(temp[1], new String[]{"yyyy-MM-dd HH:mm:ss"});
79
-				} catch (ParseException e) {
80
-					e.printStackTrace();
81
-				}
56
+				} catch (ParseException e) {	}
82
 			}
57
 			}
83
 		}
58
 		}
84
 		
59
 		
85
 		// page query
60
 		// page query
86
-		List<XxlJobLog> list = xxlJobLogDao.pageList(start, length, jobName, triggerTimeStart, triggerTimeEnd);
87
-		int list_count = xxlJobLogDao.pageListCount(start, length, jobName, triggerTimeStart, triggerTimeEnd);
61
+		List<XxlJobLog> list = xxlJobLogDao.pageList(start, length, jobGroup, jobName, triggerTimeStart, triggerTimeEnd);
62
+		int list_count = xxlJobLogDao.pageListCount(start, length, jobGroup, jobName, triggerTimeStart, triggerTimeEnd);
88
 		
63
 		
89
 		// package result
64
 		// package result
90
 		Map<String, Object> maps = new HashMap<String, Object>();
65
 		Map<String, Object> maps = new HashMap<String, Object>();
91
-	    maps.put("recordsTotal", list_count);	// 总记录数
92
-	    maps.put("recordsFiltered", list_count);// 过滤后的总记录数
93
-	    maps.put("data", list);  				// 分页列表
66
+	    maps.put("recordsTotal", list_count);		// 总记录数
67
+	    maps.put("recordsFiltered", list_count);	// 过滤后的总记录数
68
+	    maps.put("data", list);  					// 分页列表
94
 		return maps;
69
 		return maps;
95
 	}
70
 	}
96
 	
71
 	
72
+	@RequestMapping("/save")
73
+	@ResponseBody
74
+	public ReturnT<String> triggerLog(int triggerLogId, String status, String msg) {
75
+		XxlJobLog log = xxlJobLogDao.load(triggerLogId);
76
+		if (log!=null) {
77
+			log.setHandleTime(new Date());
78
+			log.setHandleStatus(status);
79
+			log.setHandleMsg(msg);
80
+			xxlJobLogDao.updateHandleInfo(log);
81
+			return ReturnT.SUCCESS;
82
+		}
83
+		return ReturnT.FAIL;
84
+	}
85
+	
97
 }
86
 }

+ 72 - 16
xxl-job-admin/src/main/java/com/xxl/job/core/model/XxlJobInfo.java 파일 보기

9
 public class XxlJobInfo {
9
 public class XxlJobInfo {
10
 	
10
 	
11
 	private int id;
11
 	private int id;
12
-	// job info
13
-	private String jobName;
14
-	private String jobCron;		// base on quartz
15
-	private String jobClass;	// base on quartz
16
-	private String jobStatus;	// base on quartz
17
-	private String jobData;		// base on db, Map-JSON-String
12
+	
13
+	private String jobGroup;	// base on quartz	任务组
14
+	private String jobName;		// base on quartz	任务名
15
+	private String jobCron;		// base on quartz	任务执行CRON表达式
16
+	private String jobClass;	// base on quartz	任务执行JobBean
17
+	private String jobData;		// base on db, Map-JSON-String	任务执行数据
18
+	
18
 	private Date addTime;
19
 	private Date addTime;
19
 	private Date updateTime;
20
 	private Date updateTime;
20
 	
21
 	
22
+	private String author;		// 作者
23
+	private String alarmEmail;	// 报警邮件
24
+	private int alarmThreshold;	// 报警阀值
25
+	
26
+	// copy from quartz
27
+	private String jobStatus;	// 任务状态
28
+
21
 	public int getId() {
29
 	public int getId() {
22
 		return id;
30
 		return id;
23
 	}
31
 	}
32
+
24
 	public void setId(int id) {
33
 	public void setId(int id) {
25
 		this.id = id;
34
 		this.id = id;
26
 	}
35
 	}
36
+
37
+	public String getJobGroup() {
38
+		return jobGroup;
39
+	}
40
+
41
+	public void setJobGroup(String jobGroup) {
42
+		this.jobGroup = jobGroup;
43
+	}
44
+
27
 	public String getJobName() {
45
 	public String getJobName() {
28
 		return jobName;
46
 		return jobName;
29
 	}
47
 	}
48
+
30
 	public void setJobName(String jobName) {
49
 	public void setJobName(String jobName) {
31
 		this.jobName = jobName;
50
 		this.jobName = jobName;
32
 	}
51
 	}
52
+
33
 	public String getJobCron() {
53
 	public String getJobCron() {
34
 		return jobCron;
54
 		return jobCron;
35
 	}
55
 	}
56
+
36
 	public void setJobCron(String jobCron) {
57
 	public void setJobCron(String jobCron) {
37
 		this.jobCron = jobCron;
58
 		this.jobCron = jobCron;
38
 	}
59
 	}
60
+
39
 	public String getJobClass() {
61
 	public String getJobClass() {
40
 		return jobClass;
62
 		return jobClass;
41
 	}
63
 	}
64
+
42
 	public void setJobClass(String jobClass) {
65
 	public void setJobClass(String jobClass) {
43
 		this.jobClass = jobClass;
66
 		this.jobClass = jobClass;
44
 	}
67
 	}
45
-	public String getJobStatus() {
46
-		return jobStatus;
47
-	}
48
-	public void setJobStatus(String jobStatus) {
49
-		this.jobStatus = jobStatus;
50
-	}
68
+
51
 	public String getJobData() {
69
 	public String getJobData() {
52
 		return jobData;
70
 		return jobData;
53
 	}
71
 	}
72
+
54
 	public void setJobData(String jobData) {
73
 	public void setJobData(String jobData) {
55
 		this.jobData = jobData;
74
 		this.jobData = jobData;
56
 	}
75
 	}
76
+
57
 	public Date getAddTime() {
77
 	public Date getAddTime() {
58
 		return addTime;
78
 		return addTime;
59
 	}
79
 	}
80
+
60
 	public void setAddTime(Date addTime) {
81
 	public void setAddTime(Date addTime) {
61
 		this.addTime = addTime;
82
 		this.addTime = addTime;
62
 	}
83
 	}
84
+
63
 	public Date getUpdateTime() {
85
 	public Date getUpdateTime() {
64
 		return updateTime;
86
 		return updateTime;
65
 	}
87
 	}
88
+
66
 	public void setUpdateTime(Date updateTime) {
89
 	public void setUpdateTime(Date updateTime) {
67
 		this.updateTime = updateTime;
90
 		this.updateTime = updateTime;
68
 	}
91
 	}
69
-	
92
+
93
+	public String getAuthor() {
94
+		return author;
95
+	}
96
+
97
+	public void setAuthor(String author) {
98
+		this.author = author;
99
+	}
100
+
101
+	public String getAlarmEmail() {
102
+		return alarmEmail;
103
+	}
104
+
105
+	public void setAlarmEmail(String alarmEmail) {
106
+		this.alarmEmail = alarmEmail;
107
+	}
108
+
109
+	public int getAlarmThreshold() {
110
+		return alarmThreshold;
111
+	}
112
+
113
+	public void setAlarmThreshold(int alarmThreshold) {
114
+		this.alarmThreshold = alarmThreshold;
115
+	}
116
+
117
+	public String getJobStatus() {
118
+		return jobStatus;
119
+	}
120
+
121
+	public void setJobStatus(String jobStatus) {
122
+		this.jobStatus = jobStatus;
123
+	}
124
+
70
 	@Override
125
 	@Override
71
 	public String toString() {
126
 	public String toString() {
72
-		return "XxlJobInfo [id=" + id + ", jobName=" + jobName + ", jobCron=" + jobCron + ", jobClass=" + jobClass
73
-				+ ", jobStatus=" + jobStatus + ", jobData=" + jobData + ", addTime=" + addTime + ", updateTime="
74
-				+ updateTime + "]";
127
+		return "XxlJobInfo [id=" + id + ", jobGroup=" + jobGroup + ", jobName=" + jobName + ", jobCron=" + jobCron
128
+				+ ", jobClass=" + jobClass + ", jobData=" + jobData + ", addTime=" + addTime + ", updateTime="
129
+				+ updateTime + ", author=" + author + ", alarmEmail=" + alarmEmail + ", alarmThreshold="
130
+				+ alarmThreshold + ", jobStatus=" + jobStatus + "]";
75
 	}
131
 	}
76
 	
132
 	
77
 }
133
 }

+ 12 - 4
xxl-job-admin/src/main/java/com/xxl/job/core/model/XxlJobLog.java 파일 보기

9
 public class XxlJobLog {
9
 public class XxlJobLog {
10
 	
10
 	
11
 	private int id;
11
 	private int id;
12
+	
12
 	// job info
13
 	// job info
14
+	private String jobGroup;
13
 	private String jobName;
15
 	private String jobName;
14
 	private String jobCron;
16
 	private String jobCron;
15
 	private String jobClass;
17
 	private String jobClass;
31
 	public void setId(int id) {
33
 	public void setId(int id) {
32
 		this.id = id;
34
 		this.id = id;
33
 	}
35
 	}
36
+	public String getJobGroup() {
37
+		return jobGroup;
38
+	}
39
+	public void setJobGroup(String jobGroup) {
40
+		this.jobGroup = jobGroup;
41
+	}
34
 	public String getJobName() {
42
 	public String getJobName() {
35
 		return jobName;
43
 		return jobName;
36
 	}
44
 	}
94
 	
102
 	
95
 	@Override
103
 	@Override
96
 	public String toString() {
104
 	public String toString() {
97
-		return "XxlJobLog [id=" + id + ", jobName=" + jobName + ", jobCron=" + jobCron + ", jobClass=" + jobClass
98
-				+ ", jobData=" + jobData + ", triggerTime=" + triggerTime + ", triggerStatus=" + triggerStatus
99
-				+ ", triggerMsg=" + triggerMsg + ", handleTime=" + handleTime + ", handleStatus=" + handleStatus
100
-				+ ", handleMsg=" + handleMsg + "]";
105
+		return "XxlJobLog [id=" + id + ", jobGroup=" + jobGroup + ", jobName=" + jobName + ", jobCron=" + jobCron
106
+				+ ", jobClass=" + jobClass + ", jobData=" + jobData + ", triggerTime=" + triggerTime
107
+				+ ", triggerStatus=" + triggerStatus + ", triggerMsg=" + triggerMsg + ", handleTime=" + handleTime
108
+				+ ", handleStatus=" + handleStatus + ", handleMsg=" + handleMsg + "]";
101
 	}
109
 	}
102
 	
110
 	
103
 }
111
 }

+ 4 - 7
xxl-job-admin/src/main/java/com/xxl/job/dao/IXxlJobLogDao.java 파일 보기

1
 package com.xxl.job.dao;
1
 package com.xxl.job.dao;
2
 
2
 
3
-
4
 import java.util.Date;
3
 import java.util.Date;
5
 import java.util.List;
4
 import java.util.List;
6
 
5
 
12
  */
11
  */
13
 public interface IXxlJobLogDao {
12
 public interface IXxlJobLogDao {
14
 	
13
 	
15
-	public int save(XxlJobLog xxlJobLog);
14
+	public List<XxlJobLog> pageList(int offset, int pagesize, String jobGroup, String jobName, Date triggerTimeStart, Date triggerTimeEnd);
15
+	public int pageListCount(int offset, int pagesize, String jobGroup, String jobName, Date triggerTimeStart, Date triggerTimeEnd);
16
 	
16
 	
17
 	public XxlJobLog load(int id);
17
 	public XxlJobLog load(int id);
18
+	public XxlJobLog loadByGroupAndName(String jobGroup, String jobName);
18
 	
19
 	
20
+	public int save(XxlJobLog xxlJobLog);
19
 	public int updateTriggerInfo(XxlJobLog xxlJobLog);
21
 	public int updateTriggerInfo(XxlJobLog xxlJobLog);
20
-	
21
 	public int updateHandleInfo(XxlJobLog xxlJobLog);
22
 	public int updateHandleInfo(XxlJobLog xxlJobLog);
22
 	
23
 	
23
-	public List<XxlJobLog> pageList(int offset, int pagesize,String jobName, Date triggerTimeStart, Date triggerTimeEnd);
24
-	
25
-	public int pageListCount(int offset, int pagesize,String jobName, Date triggerTimeStart, Date triggerTimeEnd);
26
-	
27
 }
24
 }

+ 39 - 27
xxl-job-admin/src/main/java/com/xxl/job/dao/impl/XxlJobLogDaoImpl.java 파일 보기

23
 	public SqlSessionTemplate sqlSessionTemplate;
23
 	public SqlSessionTemplate sqlSessionTemplate;
24
 
24
 
25
 	@Override
25
 	@Override
26
-	public int save(XxlJobLog xxlJobLog) {
27
-		if (xxlJobLog!=null && xxlJobLog.getJobData().length()>2000) {
28
-			xxlJobLog.setJobData(xxlJobLog.getJobData().substring(0, 2000));
29
-		}
30
-		return sqlSessionTemplate.insert("XxlJobLogMapper.save", xxlJobLog);
26
+	public List<XxlJobLog> pageList(int offset, int pagesize, String jobGroup, String jobName, Date triggerTimeStart, Date triggerTimeEnd) {
27
+		HashMap<String, Object> params = new HashMap<String, Object>();
28
+		params.put("offset", offset);
29
+		params.put("pagesize", pagesize);
30
+		params.put("jobGroup", jobGroup);
31
+		params.put("jobName", jobName);
32
+		params.put("triggerTimeStart", triggerTimeStart);
33
+		params.put("triggerTimeEnd", triggerTimeEnd);
34
+		
35
+		return sqlSessionTemplate.selectList("XxlJobLogMapper.pageList", params);
36
+	}
37
+
38
+	@Override
39
+	public int pageListCount(int offset, int pagesize, String jobGroup, String jobName, Date triggerTimeStart, Date triggerTimeEnd) {
40
+		HashMap<String, Object> params = new HashMap<String, Object>();
41
+		params.put("offset", offset);
42
+		params.put("pagesize", pagesize);
43
+		params.put("jobGroup", jobGroup);
44
+		params.put("jobName", jobName);
45
+		params.put("triggerTimeStart", triggerTimeStart);
46
+		params.put("triggerTimeEnd", triggerTimeEnd);
47
+		
48
+		return sqlSessionTemplate.selectOne("XxlJobLogMapper.pageListCount", params);
31
 	}
49
 	}
32
 
50
 
33
 	@Override
51
 	@Override
34
 	public XxlJobLog load(int id) {
52
 	public XxlJobLog load(int id) {
35
 		return sqlSessionTemplate.selectOne("XxlJobLogMapper.load", id);
53
 		return sqlSessionTemplate.selectOne("XxlJobLogMapper.load", id);
36
 	}
54
 	}
55
+	
56
+	@Override
57
+	public XxlJobLog loadByGroupAndName(String jobGroup, String jobName) {
58
+		HashMap<String, Object> params = new HashMap<String, Object>();
59
+		params.put("jobGroup", jobGroup);
60
+		params.put("jobName", jobName);
61
+		return sqlSessionTemplate.selectOne("XxlJobLogMapper.loadByGroupAndName", params);
62
+	}
37
 
63
 
38
 	@Override
64
 	@Override
65
+	public int save(XxlJobLog xxlJobLog) {
66
+		if (xxlJobLog!=null && xxlJobLog.getJobData().length()>2000) {
67
+			xxlJobLog.setJobData(xxlJobLog.getJobData().substring(0, 2000));
68
+		}
69
+		return sqlSessionTemplate.insert("XxlJobLogMapper.save", xxlJobLog);
70
+	}
71
+	
72
+	@Override
39
 	public int updateTriggerInfo(XxlJobLog xxlJobLog) {
73
 	public int updateTriggerInfo(XxlJobLog xxlJobLog) {
40
 		if (xxlJobLog!=null && xxlJobLog.getTriggerMsg().length()>2000) {
74
 		if (xxlJobLog!=null && xxlJobLog.getTriggerMsg().length()>2000) {
41
 			xxlJobLog.setTriggerMsg(xxlJobLog.getTriggerMsg().substring(0, 2000));
75
 			xxlJobLog.setTriggerMsg(xxlJobLog.getTriggerMsg().substring(0, 2000));
50
 		}
84
 		}
51
 		return sqlSessionTemplate.update("XxlJobLogMapper.updateHandleInfo", xxlJobLog);
85
 		return sqlSessionTemplate.update("XxlJobLogMapper.updateHandleInfo", xxlJobLog);
52
 	}
86
 	}
53
-
54
-	@Override
55
-	public List<XxlJobLog> pageList(int offset, int pagesize,String jobName, Date triggerTimeStart, Date triggerTimeEnd) {
56
-		HashMap<String, Object> params = new HashMap<String, Object>();
57
-		params.put("offset", offset);
58
-		params.put("pagesize", pagesize);
59
-		params.put("jobName", jobName);
60
-		params.put("triggerTimeStart", triggerTimeStart);
61
-		params.put("triggerTimeEnd", triggerTimeEnd);
62
-		return sqlSessionTemplate.selectList("XxlJobLogMapper.pageList", params);
63
-	}
64
-
65
-	@Override
66
-	public int pageListCount(int offset, int pagesize,String jobName, Date triggerTimeStart, Date triggerTimeEnd) {
67
-		HashMap<String, Object> params = new HashMap<String, Object>();
68
-		params.put("offset", offset);
69
-		params.put("pagesize", pagesize);
70
-		params.put("jobName", jobName);
71
-		params.put("triggerTimeStart", triggerTimeStart);
72
-		params.put("triggerTimeEnd", triggerTimeEnd);
73
-		return sqlSessionTemplate.selectOne("XxlJobLogMapper.pageListCount", params);
74
-	}
75
 	
87
 	
76
 }
88
 }

+ 61 - 44
xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml 파일 보기

6
 	<resultMap id="XxlJobLog" type="com.xxl.job.core.model.XxlJobLog" >
6
 	<resultMap id="XxlJobLog" type="com.xxl.job.core.model.XxlJobLog" >
7
 		<result column="id" property="id" />
7
 		<result column="id" property="id" />
8
 	
8
 	
9
+	    <result column="job_group" property="jobGroup" />
9
 	    <result column="job_name" property="jobName" />
10
 	    <result column="job_name" property="jobName" />
10
 	    <result column="job_cron" property="jobCron" />
11
 	    <result column="job_cron" property="jobCron" />
11
 	    <result column="job_class" property="jobClass" />
12
 	    <result column="job_class" property="jobClass" />
22
 
23
 
23
 	<sql id="Base_Column_List">
24
 	<sql id="Base_Column_List">
24
 		t.id,
25
 		t.id,
26
+		t.job_group,
25
 		t.job_name,
27
 		t.job_name,
26
 		t.job_cron,
28
 		t.job_cron,
27
 		t.job_class,
29
 		t.job_class,
34
 		t.handle_msg
36
 		t.handle_msg
35
 	</sql>
37
 	</sql>
36
 	
38
 	
39
+	<select id="pageList" parameterType="java.util.HashMap" resultMap="XxlJobLog">
40
+		SELECT <include refid="Base_Column_List" />
41
+		FROM xxl_job_qrtz_trigger_log AS t
42
+		<trim prefix="WHERE" prefixOverrides="AND | OR" >
43
+			<if test="jobGroup != null and jobGroup != ''">
44
+				AND t.job_group = #{jobGroup}
45
+			</if>
46
+			<if test="jobName != null and jobName != ''">
47
+				AND t.job_name = #{jobName}
48
+			</if>
49
+			<if test="triggerTimeStart != null">
50
+				AND t.trigger_time <![CDATA[ >= ]]> #{triggerTimeStart}
51
+			</if>
52
+			<if test="triggerTimeEnd != null">
53
+				AND t.trigger_time <![CDATA[ <= ]]> #{triggerTimeEnd}
54
+			</if>
55
+		</trim>
56
+		ORDER BY id DESC
57
+		LIMIT #{offset}, #{pagesize}
58
+	</select>
59
+	
60
+	<select id="pageListCount" parameterType="java.util.HashMap" resultType="int">
61
+		SELECT count(1)
62
+		FROM xxl_job_qrtz_trigger_log AS t
63
+		<trim prefix="WHERE" prefixOverrides="AND | OR" >
64
+			<if test="jobGroup != null and jobGroup != ''">
65
+				AND t.job_group = #{jobGroup}
66
+			</if>
67
+			<if test="jobName != null and jobName != ''">
68
+				AND t.job_name = #{jobName}
69
+			</if>
70
+			<if test="triggerTimeStart != null">
71
+				AND t.trigger_time <![CDATA[ >= ]]> #{triggerTimeStart}
72
+			</if>
73
+			<if test="triggerTimeEnd != null">
74
+				AND t.trigger_time <![CDATA[ <= ]]> #{triggerTimeEnd}
75
+			</if>
76
+		</trim>
77
+	</select>
78
+	
79
+	<select id="load" parameterType="java.lang.Integer" resultMap="XxlJobLog">
80
+		SELECT <include refid="Base_Column_List" />
81
+		FROM xxl_job_qrtz_trigger_log AS t
82
+		WHERE t.id = #{id}
83
+	</select>
84
+	
85
+	<select id="loadByGroupAndName" parameterType="java.util.HashMap" resultMap="XxlJobLog">
86
+		SELECT <include refid="Base_Column_List" />
87
+		FROM xxl_job_qrtz_trigger_log AS t
88
+		WHERE t.job_group = #{jobGroup}
89
+			AND t.job_name = #{jobName}
90
+	</select>
91
+	
37
 	<insert id="save" parameterType="com.xxl.job.core.model.XxlJobLog" useGeneratedKeys="true" keyProperty="id" >
92
 	<insert id="save" parameterType="com.xxl.job.core.model.XxlJobLog" useGeneratedKeys="true" keyProperty="id" >
38
 		INSERT INTO `xxl_job_qrtz_trigger_log` (
93
 		INSERT INTO `xxl_job_qrtz_trigger_log` (
39
-			`job_name`, 
94
+			`job_group`,
95
+			`job_name`,
40
 			`job_cron`, 
96
 			`job_cron`, 
41
 			`job_class`, 
97
 			`job_class`, 
42
 			`job_data`
98
 			`job_data`
43
 		) VALUES (
99
 		) VALUES (
44
-			#{jobName}, 
45
-			#{jobCron}, 
46
-			#{jobClass}, 
100
+			#{jobGroup}, 
101
+			#{jobName},
102
+			#{jobCron},
103
+			#{jobClass},
47
 			#{jobData}
104
 			#{jobData}
48
 		);
105
 		);
49
 		<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id"> 
106
 		<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id"> 
51
 		</selectKey> 
108
 		</selectKey> 
52
 	</insert>
109
 	</insert>
53
 	
110
 	
54
-	<select id="load" parameterType="java.lang.Integer" resultMap="XxlJobLog">
55
-		SELECT <include refid="Base_Column_List" />
56
-		FROM xxl_job_qrtz_trigger_log AS t
57
-		WHERE t.id = #{id}
58
-	</select>
59
-	
60
 	<update id="updateTriggerInfo">
111
 	<update id="updateTriggerInfo">
61
 		UPDATE `xxl_job_qrtz_trigger_log` 
112
 		UPDATE `xxl_job_qrtz_trigger_log` 
62
 		SET 
113
 		SET 
75
 		WHERE `id`= #{id}
126
 		WHERE `id`= #{id}
76
 	</update>
127
 	</update>
77
 	
128
 	
78
-	<select id="pageList" parameterType="java.util.HashMap" resultMap="XxlJobLog">
79
-		SELECT <include refid="Base_Column_List" />
80
-		FROM xxl_job_qrtz_trigger_log AS t
81
-		<trim prefix="WHERE" prefixOverrides="AND | OR" >
82
-			<if test="jobName != null and jobName!=''">
83
-				AND t.job_name = #{jobName}
84
-			</if>
85
-			<if test="triggerTimeStart != null">
86
-				AND t.trigger_time <![CDATA[ > ]]> #{triggerTimeStart}
87
-			</if>
88
-			<if test="triggerTimeEnd != null">
89
-				AND t.trigger_time <![CDATA[ < ]]> #{triggerTimeEnd}
90
-			</if>
91
-		</trim>
92
-		ORDER BY id DESC
93
-		LIMIT #{offset}, #{pagesize}
94
-	</select>
95
-	
96
-	<select id="pageListCount" parameterType="java.util.HashMap" resultType="int">
97
-		SELECT count(1)
98
-		FROM xxl_job_qrtz_trigger_log AS t
99
-		<trim prefix="WHERE" prefixOverrides="AND | OR" >
100
-			<if test="jobName != null and jobName!=''">
101
-				AND t.job_name = #{jobName}
102
-			</if>
103
-			<if test="triggerTimeStart != null">
104
-				AND t.trigger_time <![CDATA[ > ]]> #{triggerTimeStart}
105
-			</if>
106
-			<if test="triggerTimeEnd != null">
107
-				AND t.trigger_time <![CDATA[ < ]]> #{triggerTimeEnd}
108
-			</if>
109
-		</trim>
110
-	</select>
111
-	
112
 </mapper>
129
 </mapper>

+ 2 - 0
xxl-job-admin/src/main/resources/springmvc-context.xml 파일 보기

38
 		<property name="order" value="0" />
38
 		<property name="order" value="0" />
39
 	</bean>
39
 	</bean>
40
 	
40
 	
41
+	<bean id="exceptionResolver" class="com.xxl.job.core.resolver.WebExceptionResolver" />
42
+	
41
 	<!--
43
 	<!--
42
 	// 自定义拦截器,支持SSO登陆拦截 
44
 	// 自定义拦截器,支持SSO登陆拦截 
43
 	<mvc:interceptors>
45
 	<mvc:interceptors>

+ 1 - 1
xxl-job-admin/src/main/webapp/WEB-INF/template/common/common.macro.ftl 파일 보기

64
 			<!-- sidebar menu: : style can be found in sidebar.less -->
64
 			<!-- sidebar menu: : style can be found in sidebar.less -->
65
 			<ul class="sidebar-menu">
65
 			<ul class="sidebar-menu">
66
 				<li class="header">常用模块</li>
66
 				<li class="header">常用模块</li>
67
-				<li class="nav-click" ><a href="${request.contextPath}/job/"><i class="fa fa-circle-o text-red"></i> <span>调度管理</span></a></li>
67
+				<li class="nav-click" ><a href="${request.contextPath}/jobinfo"><i class="fa fa-circle-o text-red"></i> <span>调度管理</span></a></li>
68
 				<li class="nav-click" ><a href="${request.contextPath}/joblog"><i class="fa fa-circle-o text-yellow"></i><span>调度日志</span></a></li>
68
 				<li class="nav-click" ><a href="${request.contextPath}/joblog"><i class="fa fa-circle-o text-yellow"></i><span>调度日志</span></a></li>
69
 				<li class="nav-click" ><a href="${request.contextPath}/help"><i class="fa fa-circle-o text-yellow"></i><span>使用教程</span></a></li>
69
 				<li class="nav-click" ><a href="${request.contextPath}/help"><i class="fa fa-circle-o text-yellow"></i><span>使用教程</span></a></li>
70
 			</ul>
70
 			</ul>

xxl-job-admin/src/main/webapp/WEB-INF/template/job/index.ftl → xxl-job-admin/src/main/webapp/WEB-INF/template/jobinfo/index.ftl 파일 보기

30
 	    <section class="content">
30
 	    <section class="content">
31
 	    
31
 	    
32
 	    	<div class="row">
32
 	    	<div class="row">
33
+	    		<div class="col-xs-4">
34
+	              	<div class="input-group">
35
+	                	<span class="input-group-addon">任务组</span>
36
+                		<select class="form-control" id="jobGroup" >
37
+                			<#list JobGroupList as group>
38
+                				<option value="${group}" >${group.desc}</option>
39
+                			</#list>
40
+	                  	</select>
41
+	              	</div>
42
+	            </div>
33
 	            <div class="col-xs-4">
43
 	            <div class="col-xs-4">
34
 	              	<div class="input-group">
44
 	              	<div class="input-group">
35
 	                	<span class="input-group-addon">
45
 	                	<span class="input-group-addon">
128
 
138
 
129
 <!-- job新增.模态框 -->
139
 <!-- job新增.模态框 -->
130
 <div class="modal fade" id="addModal" tabindex="-1" role="dialog"  aria-hidden="true">
140
 <div class="modal fade" id="addModal" tabindex="-1" role="dialog"  aria-hidden="true">
131
-	<div class="modal-dialog">
141
+	<div class="modal-dialog modal-lg">
132
 		<div class="modal-content">
142
 		<div class="modal-content">
133
 			<div class="modal-header">
143
 			<div class="modal-header">
134
-            	<h4 class="modal-title" >新增调度信息</h4>
144
+            	<h4 class="modal-title" >新增任务调度信息</h4>
135
          	</div>
145
          	</div>
136
          	<div class="modal-body">
146
          	<div class="modal-body">
137
 				<form class="form-horizontal form" role="form" >
147
 				<form class="form-horizontal form" role="form" >
138
 					<div class="form-group">
148
 					<div class="form-group">
139
-						<label for="firstname" class="col-sm-3 control-label">任务Key</label>
140
-						<div class="col-sm-9"><input type="text" class="form-control" name="triggerKeyName" placeholder="请输入任务Key" minlength="4" maxlength="100" ></div>
149
+						<label for="firstname" class="col-sm-2 control-label">任务组</label>
150
+						<div class="col-sm-4">
151
+							<select class="form-control" name="jobGroup" >
152
+		            			<#list JobGroupList as group>
153
+		            				<option value="${group}" >${group.desc}</option>
154
+		            			</#list>
155
+		                  	</select>
156
+						</div>
157
+						<label for="firstname" class="col-sm-2 control-label">任务名</label>
158
+						<div class="col-sm-4"><input type="text" class="form-control" name="triggerKeyName" placeholder="请输入任务Key" minlength="4" maxlength="100" ></div>
141
 					</div>
159
 					</div>
142
 					<div class="form-group">
160
 					<div class="form-group">
143
 						<label for="lastname" class="col-sm-3 control-label">任务Corn</label>
161
 						<label for="lastname" class="col-sm-3 control-label">任务Corn</label>
219
 <script src="${request.contextPath}/static/adminlte/plugins/daterangepicker/moment.min.js"></script>
237
 <script src="${request.contextPath}/static/adminlte/plugins/daterangepicker/moment.min.js"></script>
220
 <script src="${request.contextPath}/static/adminlte/plugins/daterangepicker/daterangepicker.js"></script>
238
 <script src="${request.contextPath}/static/adminlte/plugins/daterangepicker/daterangepicker.js"></script>
221
 <script>var base_url = '${request.contextPath}';</script>
239
 <script>var base_url = '${request.contextPath}';</script>
222
-<script src="${request.contextPath}/static/js/job.index.1.js"></script>
240
+<script src="${request.contextPath}/static/js/jobinfo.index.1.js"></script>
223
 </body>
241
 </body>
224
 </html>
242
 </html>

+ 32 - 21
xxl-job-admin/src/main/webapp/WEB-INF/template/joblog/index.ftl 파일 보기

30
 		<!-- Main content -->
30
 		<!-- Main content -->
31
 	    <section class="content">
31
 	    <section class="content">
32
 	    	<div class="row">
32
 	    	<div class="row">
33
-	            <div class="col-xs-5">
33
+	    		<div class="col-xs-3">
34
+ 					<div class="input-group">
35
+	                	<span class="input-group-addon">任务组</span>
36
+                		<select class="form-control" id="jobGroup" >
37
+                			<#list JobGroupList as group>
38
+                				<option value="${group}" <#if jobInfo?exists && group == jobInfo.jobGroup>selected</#if> >${group.desc}</option>
39
+                			</#list>
40
+	                  	</select>
41
+	              	</div>
42
+	            </div>
43
+	            <div class="col-xs-3">
44
+	              	<div class="input-group">
45
+	                	<span class="input-group-addon">任务名</span>
46
+	                	<input type="text" class="form-control" id="jobName" value="${jobName}" autocomplete="on" >
47
+	              	</div>
48
+	            </div>
49
+	            <div class="col-xs-4">
34
               		<div class="input-group">
50
               		<div class="input-group">
35
                 		<span class="input-group-addon">
51
                 		<span class="input-group-addon">
36
 	                  		调度时间
52
 	                  		调度时间
37
 	                	</span>
53
 	                	</span>
38
 	                	<input type="text" class="form-control" id="filterTime" readonly 
54
 	                	<input type="text" class="form-control" id="filterTime" readonly 
39
-	                		value="<#if triggerTimeStart?exists && triggerTimeEnd?exists >${triggerTimeStart?if_exists?string('yyyy-MM-dd HH:mm:ss')} - ${triggerTimeEnd?if_exists?string('yyyy-MM-dd HH:mm:ss')}</#if>"  >
40
-	              	</div>
41
-	            </div>
42
-	            <div class="col-xs-5">
43
-	              	<div class="input-group">
44
-	                	<span class="input-group-addon">
45
-	                  		jobName
46
-	                	</span>
47
-	                	<input type="text" class="form-control" id="jobName" value="${jobName}" autocomplete="on" >
55
+	                		value2="<#if triggerTimeStart?exists && triggerTimeEnd?exists >${triggerTimeStart?if_exists?string('yyyy-MM-dd HH:mm:ss')} - ${triggerTimeEnd?if_exists?string('yyyy-MM-dd HH:mm:ss')}</#if>"  >
48
 	              	</div>
56
 	              	</div>
49
 	            </div>
57
 	            </div>
58
+	            
59
+				
50
 	            <div class="col-xs-2">
60
 	            <div class="col-xs-2">
51
 	            	<button class="btn btn-block btn-info" id="searchBtn">搜索</button>
61
 	            	<button class="btn btn-block btn-info" id="searchBtn">搜索</button>
52
 	            </div>
62
 	            </div>
60
 			              	<table id="joblog_list" class="table table-bordered table-striped display" width="100%" >
70
 			              	<table id="joblog_list" class="table table-bordered table-striped display" width="100%" >
61
 				                <thead>
71
 				                <thead>
62
 					            	<tr>
72
 					            	<tr>
63
-					                	<th>id</th>
64
-					                  	<th>jobName</th>
65
-					                  	<th>jobCron</th>
66
-					                  	<th>jobClass</th>
67
-					                  	<th>jobData</th>
68
-					                  	<th>triggerTime</th>
69
-					                  	<th>triggerStatus</th>
70
-					                  	<th>triggerMsg</th>
71
-					                  	<th>handleTime</th>
72
-					                  	<th>handleStatus</th>
73
-					                  	<th>handleMsg</th>
73
+					                	<th name="id" >id</th>
74
+					                	<th name="jobGroup" >任务组</th>
75
+					                  	<th name="jobName" >任务名</th>
76
+					                  	<th name="jobCron" >Cron</th>
77
+					                  	<th name="jobClass" >JobBean</th>
78
+					                  	<th name="jobData" >任务数据</th>
79
+					                  	<th name="triggerTime" >调度时间</th>
80
+					                  	<th name="triggerStatus" >调度结果</th>
81
+					                  	<th name="triggerMsg" >调度日志</th>
82
+					                  	<th name="handleTime" >执行时间</th>
83
+					                  	<th name="handleStatus" >执行结果</th>
84
+					                  	<th name="handleMsg" >执行日志</th>
74
 					                </tr>
85
 					                </tr>
75
 				                </thead>
86
 				                </thead>
76
 				                <tbody></tbody>
87
 				                <tbody></tbody>

xxl-job-admin/src/main/webapp/static/js/job.index.1.js → xxl-job-admin/src/main/webapp/static/js/jobinfo.index.1.js 파일 보기

5
 		"processing" : true, 
5
 		"processing" : true, 
6
 	    "serverSide": true,
6
 	    "serverSide": true,
7
 		"ajax": {
7
 		"ajax": {
8
-			url: base_url + "/job/pageList",
8
+			url: base_url + "/jobinfo/pageList",
9
 	        data : function ( d ) {
9
 	        data : function ( d ) {
10
                 d.jobName = $('#jobName').val()
10
                 d.jobName = $('#jobName').val()
11
             }
11
             }

+ 37 - 16
xxl-job-admin/src/main/webapp/static/js/joblog.index.1.js 파일 보기

8
 		"ajax": {
8
 		"ajax": {
9
 	        url: base_url + "/joblog/pageList" ,
9
 	        url: base_url + "/joblog/pageList" ,
10
 	        data : function ( d ) {
10
 	        data : function ( d ) {
11
+                d.jobGroup = $('#jobGroup').val();
12
+                d.jobName = $('#jobName').val();
11
                 d.filterTime = $('#filterTime').val();
13
                 d.filterTime = $('#filterTime').val();
12
-                d.jobName = $('#jobName').val()
13
             }
14
             }
14
 	    },
15
 	    },
15
-	    //"scrollX": true,	// X轴滚动条,取消自适应
16
+	    "searching": false,
17
+	    "ordering": false,
18
+	    //"scrollX": false,
16
 	    "columns": [
19
 	    "columns": [
17
 	                { "data": 'id', "bSortable": false, "visible" : false},
20
 	                { "data": 'id', "bSortable": false, "visible" : false},
18
-	                { "data": 'jobName', "bSortable": false},
19
-	                { "data": 'jobCron', "bSortable": false, "visible" : false},
20
-	                { "data": 'jobClass', "bSortable": false, "visible" : false},
21
-	                { "data": 'jobData', "bSortable": false, "visible" : false},
22
 	                { 
21
 	                { 
23
-	                	"data": 'triggerTime', 
22
+	                	"data": 'jobGroup', 
24
 	                	"bSortable": false, 
23
 	                	"bSortable": false, 
25
 	                	"render": function ( data, type, row ) {
24
 	                	"render": function ( data, type, row ) {
25
+	            			var groupMenu = $("#jobGroup").find("option");
26
+	            			for ( var index in $("#jobGroup").find("option")) {
27
+	            				if ($(groupMenu[index]).attr('value') == data) {
28
+									return $(groupMenu[index]).html();
29
+								}
30
+							}
31
+	            			return data;
32
+	            		}
33
+            		},
34
+	                { "data": 'jobName'},
35
+	                { "data": 'jobCron', "visible" : false},
36
+	                { "data": 'jobClass', "visible" : false},
37
+	                { 
38
+	                	"data": 'jobData',
39
+	                	"visible" : false,
40
+	                	"render": function ( data, type, row ) {
41
+	                		return data?'<a class="logTips" href="javascript:;" >查看<span style="display:none;">'+ data +'</span></a>':"无";
42
+	                	}
43
+	                },
44
+	                { 
45
+	                	"data": 'triggerTime', 
46
+	                	"render": function ( data, type, row ) {
26
 	                		return data?moment(new Date(data)).format("YYYY-MM-DD HH:mm:ss"):"";
47
 	                		return data?moment(new Date(data)).format("YYYY-MM-DD HH:mm:ss"):"";
27
 	                	}
48
 	                	}
28
 	                },
49
 	                },
29
-	                { "data": 'triggerStatus', "bSortable": false},
30
-	                { "data": 'triggerMsg',"bSortable": false,
50
+	                { "data": 'triggerStatus'},
51
+	                { 
52
+	                	"data": 'triggerMsg',
31
 	                	"render": function ( data, type, row ) {
53
 	                	"render": function ( data, type, row ) {
32
-	                		return data?'<a class="logTips" href="javascript:;" >调度日志<span style="display:none;">'+ data +'</span></a>':"无";
54
+	                		return data?'<a class="logTips" href="javascript:;" >查看<span style="display:none;">'+ data +'</span></a>':"无";
33
 	                	}
55
 	                	}
34
 	                },
56
 	                },
35
 	                { 
57
 	                { 
36
 	                	"data": 'handleTime',
58
 	                	"data": 'handleTime',
37
-	                	"bSortable": false,
38
 	                	"render": function ( data, type, row ) {
59
 	                	"render": function ( data, type, row ) {
39
 	                		return data?moment(new Date(data)).format("YYYY-MM-DD HH:mm:ss"):"";
60
 	                		return data?moment(new Date(data)).format("YYYY-MM-DD HH:mm:ss"):"";
40
 	                	}
61
 	                	}
41
 	                },
62
 	                },
42
 	                { "data": 'handleStatus',"bSortable": false},
63
 	                { "data": 'handleStatus',"bSortable": false},
43
-	                { "data": 'handleMsg' , "bSortable": false,
64
+	                { 
65
+	                	"data": 'handleMsg',
44
 	                	"render": function ( data, type, row ) {
66
 	                	"render": function ( data, type, row ) {
45
-	                		return data?'<a class="logTips" href="javascript:;" >执行日志<span style="display:none;">'+ data +'</span></a>':"无";
67
+	                		return data?'<a class="logTips" href="javascript:;" >查看<span style="display:none;">'+ data +'</span></a>':"无";
46
 	                	}
68
 	                	}
47
 	                }
69
 	                }
48
 	            ],
70
 	            ],
49
-	    "searching": false,
50
-	    "ordering": true,
51
 		"language" : {
71
 		"language" : {
52
 			"sProcessing" : "处理中...",
72
 			"sProcessing" : "处理中...",
53
 			"sLengthMenu" : "每页 _MENU_ 条记录",
73
 			"sLengthMenu" : "每页 _MENU_ 条记录",
94
             '最近7日': [moment().subtract('days', 6), moment()],
114
             '最近7日': [moment().subtract('days', 6), moment()],
95
             '最近30日': [moment().subtract('days', 29), moment()]
115
             '最近30日': [moment().subtract('days', 29), moment()]
96
         },
116
         },
97
-        opens : 'right', //日期选择框的弹出位置
117
+        opens : 'left', //日期选择框的弹出位置
98
         locale : {
118
         locale : {
99
         	customRangeLabel : '自定义',
119
         	customRangeLabel : '自定义',
100
             applyLabel : '确定',
120
             applyLabel : '确定',
106
             firstDay : 1
126
             firstDay : 1
107
         }
127
         }
108
 	});
128
 	});
129
+	$('#filterTime').val( moment(new Date()).format("YYYY-MM-DD 00:00:00") + ' - ' + moment(new Date()).format("YYYY-MM-DD HH:mm:ss") );
109
 	
130
 	
110
 	// 搜索按钮
131
 	// 搜索按钮
111
 	$('#searchBtn').on('click', function(){
132
 	$('#searchBtn').on('click', function(){