Sfoglia il codice sorgente

设计 "注册模式" 交互

xueli.xue 9 anni fa
parent
commit
662e129afc

+ 7 - 5
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java Vedi File

@@ -41,20 +41,22 @@ public class JobInfoController {
41 41
 	@RequestMapping("/add")
42 42
 	@ResponseBody
43 43
 	public ReturnT<String> add(String jobGroup, String jobCron, String jobDesc, String author, String alarmEmail,
44
-			String executorAddress, String executorHandler, String executorParam, int glueSwitch, String glueSource, String glueRemark,
45
-			String childJobKey) {
44
+			String executorAppname, String executorAddress, String executorHandler, String executorParam,
45
+			int glueSwitch, String glueSource, String glueRemark, String childJobKey) {
46 46
 		
47 47
 		return xxlJobService.add(jobGroup, jobCron, jobDesc, author, alarmEmail,
48
-				executorAddress, executorHandler, executorParam, glueSwitch, glueSource, glueRemark, childJobKey);
48
+				executorAppname, executorAddress, executorHandler, executorParam,
49
+				glueSwitch, glueSource, glueRemark, childJobKey);
49 50
 	}
50 51
 	
51 52
 	@RequestMapping("/reschedule")
52 53
 	@ResponseBody
53 54
 	public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc, String author, String alarmEmail,
54
-			String executorAddress, String executorHandler, String executorParam, int glueSwitch, String childJobKey) {
55
+			String executorAppname, String executorAddress, String executorHandler, String executorParam,
56
+			int glueSwitch, String childJobKey) {
55 57
 
56 58
 		return xxlJobService.reschedule(jobGroup, jobName, jobCron, jobDesc, author, alarmEmail,
57
-				executorAddress, executorHandler, executorParam, glueSwitch, childJobKey);
59
+				executorAppname, executorAddress, executorHandler, executorParam, glueSwitch, childJobKey);
58 60
 	}
59 61
 	
60 62
 	@RequestMapping("/remove")

+ 10 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java Vedi File

@@ -20,7 +20,8 @@ public class XxlJobInfo {
20 20
 	
21 21
 	private String author;		// 负责人
22 22
 	private String alarmEmail;	// 报警邮件
23
-	
23
+
24
+	private String executorAppname;	// 执行器对应的AppName
24 25
 	private String executorAddress;	// 执行器地址,有多个则逗号分隔
25 26
 	private String executorHandler;	// 执行器,任务Handler名称
26 27
 	private String executorParam;	// 执行器,任务参数
@@ -106,6 +107,14 @@ public class XxlJobInfo {
106 107
 		this.alarmEmail = alarmEmail;
107 108
 	}
108 109
 
110
+	public String getExecutorAppname() {
111
+		return executorAppname;
112
+	}
113
+
114
+	public void setExecutorAppname(String executorAppname) {
115
+		this.executorAppname = executorAppname;
116
+	}
117
+
109 118
 	public String getExecutorAddress() {
110 119
 		return executorAddress;
111 120
 	}

+ 5 - 5
xxl-job-admin/src/main/java/com/xxl/job/admin/service/IXxlJobService.java Vedi File

@@ -1,9 +1,9 @@
1 1
 package com.xxl.job.admin.service;
2 2
 
3
-import java.util.Map;
4
-
5 3
 import com.xxl.job.admin.core.model.ReturnT;
6 4
 
5
+import java.util.Map;
6
+
7 7
 /**
8 8
  * core job action for xxl-job
9 9
  * 
@@ -14,11 +14,11 @@ public interface IXxlJobService {
14 14
 	public Map<String, Object> pageList(int start, int length, String jobGroup, String executorHandler, String filterTime);
15 15
 	
16 16
 	public ReturnT<String> add(String jobGroup, String jobCron, String jobDesc,String author, String alarmEmail,
17
-			String executorAddress,	String executorHandler, String executorParam, int glueSwitch, String glueSource, String glueRemark,
18
-			String childJobKey);
17
+			String executorAppname, String executorAddress,	String executorHandler, String executorParam,
18
+			int glueSwitch, String glueSource, String glueRemark, String childJobKey);
19 19
 	
20 20
 	public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc, String author, String alarmEmail,
21
-			String executorAddress, String executorHandler, String executorParam, int glueSwitch, String childJobKey);
21
+			String executorAppname, String executorAddress, String executorHandler, String executorParam, int glueSwitch, String childJobKey);
22 22
 	
23 23
 	public ReturnT<String> remove(String jobGroup, String jobName);
24 24
 	

+ 16 - 8
xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java Vedi File

@@ -61,9 +61,9 @@ public class XxlJobServiceImpl implements IXxlJobService {
61 61
 	}
62 62
 
63 63
 	@Override
64
-	public ReturnT<String> add(String jobGroup, String jobCron, String jobDesc, String author, String alarmEmail,
65
-			String executorAddress,	String executorHandler, String executorParam, int glueSwitch, String glueSource, String glueRemark,
66
-			String childJobKey) {
64
+	public ReturnT<String> add(String jobGroup, String jobCron, String jobDesc,String author, String alarmEmail,
65
+			String executorAppname, String executorAddress,	String executorHandler, String executorParam,
66
+			int glueSwitch, String glueSource, String glueRemark, String childJobKey) {
67 67
 		// valid
68 68
 		if (JobGroupEnum.match(jobGroup) == null) {
69 69
 			return new ReturnT<String>(500, "请选择“任务组”");
@@ -80,8 +80,11 @@ public class XxlJobServiceImpl implements IXxlJobService {
80 80
 		if (StringUtils.isBlank(alarmEmail)) {
81 81
 			return new ReturnT<String>(500, "请输入“报警邮件”");
82 82
 		}
83
-		if (StringUtils.isBlank(executorAddress)) {
84
-			return new ReturnT<String>(500, "请输入“执行器地址”");
83
+		if (StringUtils.isBlank(executorAppname) && StringUtils.isBlank(executorAddress)) {
84
+			return new ReturnT<String>(500, "“执行器AppName”和“执行器地址”不可同时为空");
85
+		}
86
+		if (StringUtils.isNotBlank(executorAppname) && StringUtils.isNotBlank(executorAddress)) {
87
+			return new ReturnT<String>(500, "“执行器AppName”和“执行器地址” 不可同时使用");
85 88
 		}
86 89
 		if (glueSwitch==0 && StringUtils.isBlank(executorHandler)) {
87 90
 			return new ReturnT<String>(500, "请输入“JobHandler”");
@@ -121,6 +124,7 @@ public class XxlJobServiceImpl implements IXxlJobService {
121 124
 		jobInfo.setJobDesc(jobDesc);
122 125
 		jobInfo.setAuthor(author);
123 126
 		jobInfo.setAlarmEmail(alarmEmail);
127
+		jobInfo.setExecutorAppname(executorAppname);
124 128
 		jobInfo.setExecutorAddress(executorAddress);
125 129
 		jobInfo.setExecutorHandler(executorHandler);
126 130
 		jobInfo.setExecutorParam(executorParam);
@@ -146,7 +150,7 @@ public class XxlJobServiceImpl implements IXxlJobService {
146 150
 
147 151
 	@Override
148 152
 	public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc, String author, String alarmEmail,
149
-			String executorAddress, String executorHandler, String executorParam, int glueSwitch, String childJobKey) {
153
+			String executorAppname, String executorAddress, String executorHandler, String executorParam, int glueSwitch, String childJobKey) {
150 154
 
151 155
 		// valid
152 156
 		if (JobGroupEnum.match(jobGroup) == null) {
@@ -167,8 +171,11 @@ public class XxlJobServiceImpl implements IXxlJobService {
167 171
 		if (StringUtils.isBlank(alarmEmail)) {
168 172
 			return new ReturnT<String>(500, "请输入“报警邮件”");
169 173
 		}
170
-		if (StringUtils.isBlank(executorAddress)) {
171
-			return new ReturnT<String>(500, "请输入“执行器地址”");
174
+		if (StringUtils.isBlank(executorAppname) && StringUtils.isBlank(executorAddress)) {
175
+			return new ReturnT<String>(500, "“执行器AppName”和“执行器地址”不可同时为空");
176
+		}
177
+		if (StringUtils.isNotBlank(executorAppname) && StringUtils.isNotBlank(executorAddress)) {
178
+			return new ReturnT<String>(500, "“执行器AppName”和“执行器地址” 不可同时使用");
172 179
 		}
173 180
 		if (glueSwitch==0 && StringUtils.isBlank(executorHandler)) {
174 181
 			return new ReturnT<String>(500, "请输入“JobHandler”");
@@ -195,6 +202,7 @@ public class XxlJobServiceImpl implements IXxlJobService {
195 202
 		jobInfo.setJobDesc(jobDesc);
196 203
 		jobInfo.setAuthor(author);
197 204
 		jobInfo.setAlarmEmail(alarmEmail);
205
+		jobInfo.setExecutorAppname(executorAppname);
198 206
 		jobInfo.setExecutorAddress(executorAddress);
199 207
 		jobInfo.setExecutorHandler(executorHandler);
200 208
 		jobInfo.setExecutorParam(executorParam);

+ 6 - 1
xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml Vedi File

@@ -16,7 +16,8 @@
16 16
 	    
17 17
 	    <result column="author" property="author" />
18 18
 	    <result column="alarm_email" property="alarmEmail" />
19
-	    
19
+
20
+		<result column="executor_appname" property="executorAppname" />
20 21
 	    <result column="executor_address" property="executorAddress" />
21 22
 		<result column="executor_handler" property="executorHandler" />
22 23
 	    <result column="executor_param" property="executorParam" />
@@ -38,6 +39,7 @@
38 39
 		t.update_time,
39 40
 		t.author,
40 41
 		t.alarm_email,
42
+		t.executor_appname,
41 43
 		t.executor_address,
42 44
 		t.executor_handler,
43 45
 		t.executor_param,
@@ -85,6 +87,7 @@
85 87
 			update_time,
86 88
 			author,
87 89
 			alarm_email,
90
+			executor_appname,
88 91
 			executor_address,
89 92
 			executor_handler,
90 93
 			executor_param,
@@ -101,6 +104,7 @@
101 104
 			NOW(),
102 105
 			#{author},
103 106
 			#{alarmEmail},
107
+			#{executorAppname},
104 108
 			#{executorAddress},
105 109
 			#{executorHandler},
106 110
 			#{executorParam},
@@ -129,6 +133,7 @@
129 133
 			update_time = NOW(),
130 134
 			author = #{author},
131 135
 			alarm_email = #{alarmEmail},
136
+			executor_appname = #{executorAppname},
132 137
 			executor_address = #{executorAddress},
133 138
 			executor_handler = #{executorHandler},
134 139
 			executor_param = #{executorParam},

+ 23 - 4
xxl-job-admin/src/main/webapp/WEB-INF/template/jobinfo/jobinfo.index.ftl Vedi File

@@ -78,6 +78,7 @@
78 78
                                         <th name="childJobKey" >任务Key</th>
79 79
 					                  	<th name="jobDesc" >描述</th>
80 80
 					                  	<th name="jobCron" >Cron</th>
81
+                                        <th name="executorAppname" >执行器Appname</th>
81 82
 					                  	<th name="executorAddress" >执行器地址</th>
82 83
                                         <th name="executorHandler" >JobJandler</th>
83 84
 					                  	<th name="executorParam" >任务参数</th>
@@ -126,8 +127,14 @@
126 127
                         <div class="col-sm-4"><input type="text" class="form-control" name="jobDesc" placeholder="请输入“描述”" maxlength="50" ></div>
127 128
 					</div>
128 129
 					<div class="form-group">
129
-                        <label for="lastname" class="col-sm-2 control-label">执行器地址<font color="red">*</font></label>
130
-                        <div class="col-sm-4"><input type="text" class="form-control" name="executorAddress" placeholder="请输入“执行器地址”,多个地址逗号分隔" maxlength="50" ></div>
130
+						<div class="executorAddress">
131
+							<label for="lastname" class="col-sm-2 control-label">执行器地址<font color="red">*</font></label>
132
+							<div class="col-sm-4"><input type="text" class="form-control" name="executorAddress" placeholder="请输入“执行器地址”,多个地址逗号分隔" maxlength="50" ></div>
133
+                        </div>
134
+						<div class="executorAppname" style="display:none;">
135
+							<label for="lastname" class="col-sm-2 control-label">AppName<font color="red">*</font></label>
136
+							<div class="col-sm-4"><input type="text" class="form-control" name="executorAppname" placeholder="请输入执行器对应Appname, 自动发现注册的人任务" maxlength="100" ></div>
137
+                        </div>
131 138
                         <label for="lastname" class="col-sm-2 control-label">Cron<font color="red">*</font></label>
132 139
                         <div class="col-sm-4"><input type="text" class="form-control" name="jobCron" placeholder="请输入“Cron”" maxlength="20" ></div>
133 140
 					</div>
@@ -159,6 +166,9 @@
159 166
 							<button type="submit" class="btn btn-primary"  >保存</button>
160 167
 							<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
161 168
 						</div>
169
+                        <div class="col-sm-offset-0 col-sm-3">
170
+                            启动注册&nbsp;<input type="checkbox" class="ifAppName" >
171
+                        </div>
162 172
 					</div>
163 173
 
164 174
 <input type="hidden" name="glueRemark" value="GLUE代码初始化" >
@@ -205,8 +215,14 @@ public class DemoGlueJobHandler extends IJobHandler {
205 215
                         <div class="col-sm-4"><input type="text" class="form-control" name="jobDesc" placeholder="请输入“描述”" maxlength="50" ></div>
206 216
 					</div>
207 217
 					<div class="form-group">
208
-                        <label for="lastname" class="col-sm-2 control-label">执行器地址<font color="red">*</font></label>
209
-                        <div class="col-sm-4"><input type="text" class="form-control" name="executorAddress" placeholder="请输入“执行器地址”,多个地址逗号分隔" maxlength="50" ></div>
218
+                        <div class="executorAddress">
219
+                            <label for="lastname" class="col-sm-2 control-label">执行器地址<font color="red">*</font></label>
220
+                            <div class="col-sm-4"><input type="text" class="form-control" name="executorAddress" placeholder="请输入“执行器地址”,多个地址逗号分隔" maxlength="50" ></div>
221
+                        </div>
222
+                        <div class="executorAppname" style="display:none;">
223
+                            <label for="lastname" class="col-sm-2 control-label">AppName<font color="red">*</font></label>
224
+                            <div class="col-sm-4"><input type="text" class="form-control" name="executorAppname" placeholder="请输入执行器对应Appname, 自动发现注册的人任务" maxlength="100" ></div>
225
+                        </div>
210 226
                         <label for="lastname" class="col-sm-2 control-label">Cron<font color="red">*</font></label>
211 227
                         <div class="col-sm-4"><input type="text" class="form-control" name="jobCron" placeholder="请输入“Cron”" maxlength="20" ></div>
212 228
 					</div>
@@ -240,6 +256,9 @@ public class DemoGlueJobHandler extends IJobHandler {
240 256
                             <input type="hidden" name="jobGroup" >
241 257
                             <input type="hidden" name="jobName" >
242 258
 						</div>
259
+                        <div class="col-sm-offset-0 col-sm-3">
260
+                            启动注册&nbsp;<input type="checkbox" class="ifAppName" >
261
+                        </div>
243 262
 					</div>
244 263
 				</form>
245 264
          	</div>

+ 36 - 1
xxl-job-admin/src/main/webapp/static/js/jobinfo.index.1.js Vedi File

@@ -45,6 +45,7 @@ $(function() {
45 45
 					},
46 46
 	                { "data": 'jobDesc', "visible" : true},
47 47
 	                { "data": 'jobCron', "visible" : true},
48
+					{ "data": 'executorAppname', "visible" : false},
48 49
 	                { "data": 'executorAddress', "visible" : false},
49 50
 					{
50 51
 						"data": 'executorHandler',
@@ -113,6 +114,7 @@ $(function() {
113 114
 									' jobDesc="'+ row.jobDesc +'" '+
114 115
 									' author="'+ row.author +'" '+
115 116
 									' alarmEmail="'+ row.alarmEmail +'" '+
117
+									' executorAppname="'+row.executorAppname +'" '+
116 118
 									' executorAddress="'+row.executorAddress +'" '+
117 119
 									' executorHandler="'+row.executorHandler +'" '+
118 120
 									' executorParam="'+ row.executorParam +'" '+
@@ -312,6 +314,26 @@ $(function() {
312 314
 		$("#addModal .form input[name='executorHandler']").removeAttr("readonly");
313 315
 	});
314 316
 
317
+	// 注册模式
318
+	$(".ifAppName").click(function(){
319
+		var ifAppName = $(this).is(':checked');
320
+
321
+		var $executorAddress = $(this).parents("form").find("input[name='executorAddress']");
322
+		var $executorAppname = $(this).parents("form").find("input[name='executorAppname']");
323
+		$($executorAddress).val("");
324
+		$($executorAppname).val("");
325
+
326
+		var $executorAddressDiv = $(this).parents("form").find(".executorAddress");
327
+		var $executorAppnameDiv = $(this).parents("form").find(".executorAppname");
328
+		if (ifAppName) {
329
+			$($executorAddressDiv).hide();
330
+			$($executorAppnameDiv).show();
331
+		} else {
332
+			$($executorAddressDiv).show();
333
+			$($executorAppnameDiv).hide();
334
+		}
335
+	});
336
+
315 337
 	// GLUE模式开启
316 338
 	$(".ifGLUE").click(function(){
317 339
 		var ifGLUE = $(this).is(':checked');
@@ -337,6 +359,7 @@ $(function() {
337 359
 		$("#updateModal .form input[name='jobCron']").val($(this).parent('p').attr("jobCron"));
338 360
 		$("#updateModal .form input[name='author']").val($(this).parent('p').attr("author"));
339 361
 		$("#updateModal .form input[name='alarmEmail']").val($(this).parent('p').attr("alarmEmail"));
362
+		$("#updateModal .form input[name='executorAppname']").val($(this).parent('p').attr("executorAppname"));
340 363
 		$("#updateModal .form input[name='executorAddress']").val($(this).parent('p').attr("executorAddress"));
341 364
 		$("#updateModal .form input[name='executorHandler']").val($(this).parent('p').attr("executorHandler"));
342 365
 		$("#updateModal .form input[name='executorParam']").val($(this).parent('p').attr("executorParam"));
@@ -346,6 +369,18 @@ $(function() {
346 369
 		var jobGroupTitle = $("#addModal .form select[name='jobGroup']").find("option[value='" + $(this).parent('p').attr("jobGroup") + "']").text();
347 370
 		$("#updateModal .form .jobGroupTitle").val(jobGroupTitle);
348 371
 
372
+		// appname / address, switch
373
+		var $executorAppname = $(this).parent('p').attr("executorAppname");
374
+		if ($executorAppname) {
375
+			$("#updateModal .form .ifAppName").attr("checked", true);
376
+			$("#updateModal .form .executorAppname").show();
377
+			$("#updateModal .form .executorAddress").hide();
378
+		} else {
379
+			$("#updateModal .form .ifAppName").attr("checked", false);
380
+			$("#updateModal .form .executorAppname").hide();
381
+			$("#updateModal .form .executorAddress").show();
382
+		}
383
+
349 384
         // glueSwitch
350 385
 		var glueSwitch = $(this).parent('p').attr("glueSwitch");
351 386
 		$("#updateModal .form input[name='glueSwitch']").val(glueSwitch);
@@ -377,7 +412,7 @@ $(function() {
377 412
 				required : true
378 413
 			},
379 414
 			executorAddress : {
380
-				required : true
415
+				required : false
381 416
 			},
382 417
 			executorHandler : {
383 418
 				required : false