Authored by qinchao

增加新的模块crm定时任务

package com.ui.ctrl;
import com.ui.http.HttpRestClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
/**
* 定时模块
*/
@Controller
@RequestMapping("/job")
public class JobQuartzCtrl {
@Autowired
HttpRestClient httpRestClient;
@RequestMapping("/toJob")
public ModelAndView toJob() {
return new ModelAndView("quartz/showjobs");
}
@RequestMapping("/toCreateJob")
public ModelAndView toCreateJob() {
return new ModelAndView("quartz/createjob");
}
@RequestMapping("/toJobDetail")
public ModelAndView toJobDetail(Model model,String jobname,String jobgroup,String schedulename) {
model.addAttribute("jobname",jobname);
model.addAttribute("jobgroup",jobgroup);
model.addAttribute("schedulename",schedulename);
return new ModelAndView("quartz/showdetailjob");
}
}
... ...
... ... @@ -13,6 +13,13 @@
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>com.yoho.quartz</groupId>
<artifactId>yoho-quartz-server</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
... ...
#==============================================================
#Configure Main Scheduler Properties
#==============================================================
org.quartz.scheduler.instanceName = orderScheduler
org.quartz.scheduler.instanceId = AUTO
#==============================================================
#Configure JobStore
#==============================================================
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.isClustered = true
org.quartz.jobStore.clusterCheckinInterval = 10000
org.quartz.jobStore.dataSource = myDS
#==============================================================
#Configure DataSource
#==============================================================
org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver
org.quartz.dataSource.myDS.URL = jdbc:mysql://172.16.6.85:3306/jobmanager?useUnicode=true&amp;characterEncoding=UTF-8
org.quartz.dataSource.myDS.user = test
org.quartz.dataSource.myDS.password = t5/oMgwUCmO/GeMHBAQ2Cg==
org.quartz.dataSource.myDS.maxConnections = 30
org.quartz.dataSource.myDS.connectionProvider.class=com.yoho.quartz.dbconnectionpool.CusPoolingConnectionProvider
#==============================================================
#Configure ThreadPool
#==============================================================
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 2
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true
#=============================================================
# Alarm
##############################################################
org.yoho.quartz.alarm.influxdb.url=http://192.168.102.22:8086
org.yoho.quartz.alarm.influxdb.username=root
org.yoho.quartz.alarm.influxdb.passwd=Z5BMngayHLUxyWLSv6+koA==
org.yoho.quartz.alarm.influxdb.database=yoho-monitor
org.yoho.quartz.alarm.influxdb.measurement=yoho_job_alarm
\ No newline at end of file
... ...
/**
* 显示一个表格控件
* 依赖于bootstrap的table
* 作者:黄平
* 日期:2016-04-13
*/
(function($) {
$.fn.table = function(options, param) {
var self = this;
if (typeof (options) == "string") {
var method = $.fn.table.methods[options];
if (method){
return method.call(this, param);
}
}
return this.each(function() {
var opt = $.extend({}, $.fn.table.defaults, $.fn.table.events, options);
if (!opt.columns || opt.columns.length == 0) {
return;
}
self.data("table", opt);
_createtTable.call(self);
});
};
/**
* 生成(适用于bootstrap)
*/
function _createtTable() {
var jq = this;
var opt = $(jq).data("table");
//清空table
jq.empty();
jq.addClass("panel");
//设置panel的样式
if (opt.panelClass) {
jq.addClass(opt.panelClass);
}
//设置panel标题
if (opt.title) {
$("<div>").html(opt.title).addClass("panel-heading").appendTo(jq);
}
//设置表格上方标签区域
$("<div>").css({
"margin-left": 20,
"margin-top": 20
}).attr({
id: "frontLabel"
}).appendTo(jq);
if(opt.label) {
$("#frontLabel").html(opt.label);
}
//设置表上方button
if (opt.button) {
$("<button>").addClass("btn btn-xs btn-success").html(opt.button).attr({
id : "frontButton"
}).css({
"margin-right" : 30,
"margin-top" : 10,
"margin-bottom" : 10,
float:"right"
}).appendTo(jq);
}
var body, table, thead, headTR, th,fTh,secondTR;
body = $("<div>").addClass("panel-body").appendTo(jq).attr("tableRole", "body");
table = $("<table>").addClass("table").appendTo(body).attr("tableRole", "table");
if (opt.columnAutoWidth !== true) {
table.css({
"table-layout" : "fixed",
"word-wrap" : "break-word",
"word-break" : "break-all",
//"white-space" : "nowrap",
"text-overflow" : "ellipsis"
});
}
//设置边框
if (opt.border === true) {
table.addClass("table-bordered");
}
//设置悬停
if (opt.hover === true) {
table.addClass("table-hover");
}
//设置斑马纹
if (opt.striped === true) {
table.addClass("table-striped");
}
thead = $("<thead>").appendTo(table);
headTR = $("<tr>").appendTo(thead);
secondTR = $("<tr>").appendTo(thead);
//若存在表头单元格合并的情况则另外处理
if(opt.mergeHeads){
_mergeHeadCell(opt,headTR,secondTR)
}else{
//设置table的头
$(opt.columns).each(function(index, item) {
th = $("<th>").css({
"text-align" : item.align ? item.align : "left",
width : item.width ? item.width : "auto"
}).appendTo(headTR);
if (item.checkbox === true) {
$("<input type=\"checkbox\" id=\"bootstrap-table-checkAll\" />").click(function() {
//点击全选
if (opt.singleSelect === true) {
this.checked = false;
return;
}
_clickCheckAll(jq, this.checked);
}).appendTo(th);
} else {
var headSpan = $("<span>").html(item.title);
th.append(headSpan);
if (item.sortable === true) {
//可排序
var sortSpan = $("<span>").addClass("datagrid-sort");
th.append(sortSpan);
th.css("cursor", "pointer");
th.click(function() {
//重新加载数据
var param = {
sortColumn : item.sortcolumn || item.field
};
//修改排序样式
if (sortSpan.hasClass("datagrid-sort")) {
param.sortType = "ASC";
} else if (sortSpan.hasClass("datagrid-sort-asc")) {
param.sortType = "DESC";
} else if (sortSpan.hasClass("datagrid-sort-desc")) {
param.sortType = "ASC";
}
_loadRemote(jq, param, function() {
if (param.sortType == "ASC") {
sortSpan.addClass("datagrid-sort-asc");
} else if (param.sortType == "DESC") {
sortSpan.addClass("datagrid-sort-desc");
}
});
});
}
}
});
}
if (opt && opt.url) {
_loadRemote(jq);
} else {
//显示正在加载
_showLoading(jq);
//生成tbody
_createTbody(jq);
//处理onLoadSuccess事件
if (opt.onLoadSuccess) {
opt.onLoadSuccess.call(jq, opt.data);
}
//分页
_createPage(jq);
//隐藏正在加载
_hideLoading(jq);
//设置已经加载完成
jq.attr("loadStatus", "1");
}
}
function _mergeHeadCell(opt,headTR,secondTR){
var firstTh,secondTh;
//1、先处理存在合并的单元格
$(opt.columns).each(function(index, item) {
if(item.rowspan || item.colspan){
firstTh = $("<th>").css({
"text-align" : "center",
"text-valign" : "middle",
width : item.width ? item.width : "auto"
}).appendTo(headTR);
//合并行
if(item.rowspan){
firstTh.attr("rowspan",item.rowspan);
firstTh.css({
"align":'center',
"valign":'middle'
});
}
//和并列
if(item.colspan){
firstTh.attr("colspan",item.colspan);
firstTh.css({
"data-align":'center',
"data-valign":'middle'
});
}
var headSpan = $("<span>").html(item.title);
firstTh.append(headSpan);
}
});
// 2、处理常规单元格
$(opt.columns).each(function(index, item) {
if(!item.rowspan && !item.colspan){
secondTh = $("<th>").css({
"text-align" : item.align ? item.align : "left",
width : item.width ? item.width : "auto"
}).appendTo(secondTR);
if (item.checkbox === true) {
$("<input type=\"checkbox\" id=\"bootstrap-table-checkAll\" />").click(function() {
//点击全选
if (opt.singleSelect === true) {
this.checked = false;
return;
}
_clickCheckAll(jq, this.checked);
}).appendTo(secondTh);
} else {
var headSpan = $("<span>").html(item.title);
secondTh.append(headSpan);
}
}
});
}
/**
* 从远端加载数据
*/
function _loadRemote(jq, param, callback) {
//显示正在加载
_showLoading(jq);
var opt = $(jq).data("table");
//清空排序样式
jq.find("thead th span.datagrid-sort-asc").removeClass("datagrid-sort-asc").addClass("datagrid-sort");
jq.find("thead th span.datagrid-sort-desc").removeClass("datagrid-sort-desc").addClass("datagrid-sort");
_removeTbody(jq);
if (!opt || !opt.url) {
//隐藏正在加载
_hideLoading(jq);
return;
}
if (opt.onBeforeLoad) {
if (opt.onBeforeLoad.call(jq) === false) {
//隐藏正在加载
_hideLoading(jq);
return;
}
}
var lastQueryParam = $.extend({}, opt.queryParams, jq.data("lastQueryParam"), param);
jq.data("lastQueryParam", lastQueryParam);
//重新确认当前页码,若指定页码,则优先;不指定,则从页码控件中获取
var currentPage;
if(opt.currentPage){
currentPage = opt.currentPage;
}else{
currentPage = param && param.currentPage ? param.currentPage : 0;
}
$.ajax($.extend({}, {
url : opt.url,
data : JSON.stringify($.extend({}, lastQueryParam, {
pageSize : (opt.pagination === true ? opt.pageSize : 0),
currentPage : (opt.pagination === true ? currentPage : 0)
})),
type : opt.type,
dataType : opt.dataType,
contentType : opt.contentType,
success : function(json) {
if (!json) {
//隐藏正在加载
_hideLoading(jq);
return;
}
opt.data = json;
if (opt.loadFilter) {
opt.data = opt.loadFilter(json);
}
//生成tbody
_createTbody(jq);
//处理onLoadSuccess事件
if (opt.onLoadSuccess) {
opt.onLoadSuccess.call(jq, opt.data);
}
//分页
_createPage(jq, (opt.pagination === true ? (currentPage) : 0));
//隐藏正在加载
_hideLoading(jq);
//设置已经加载完成
jq.attr("loadStatus", "1");
},
error : function() {
//隐藏正在加载
_hideLoading(jq);
},
complete : function() {
//执行回调
if (callback) {
callback();
}
},
dataType : "json"
}));
}
/**
* 设置页码
*/
function _setCurrentPage(jq, param) {
var opt = $(jq).data("table");
if(param){
opt.currentPage = param;
}
}
/**
/**
* 取去总条数和行记录
*/
function _getTotalAndData(jq) {
var opt = jq.data("table");
var d = opt.data;
var total = 0;
if ($.type(d) === "object") {
total = d.total;
d = d.rows;
} else {
total = d ? d.length : 0;
}
return {
rows : d,
total : total
};
}
/**
* 显示正在加载的效果
*/
function _showLoading(jq) {
var div = $("<div>");
var tableOffset = jq.offset();
var tableWidth = jq.outerWidth(true), tableHeight = jq.outerHeight(true);
div.append($("<div>").addClass("table-loading").css({
left : (tableWidth - 124) / 2,
top : (tableHeight - 124) / 2
}));
div.css({
width : tableWidth,
height : tableHeight,
left : tableOffset.left,
top : tableOffset.top
});
div.show();
}
/**
* 隐藏正在加载效果
*/
function _hideLoading(jq) {
$("body").find("div[tableSelector='"+ jq.selector +"']").remove();
}
/**
* 获取body部分
*/
function _getBody(jq) {
return jq.find("div.panel-body[tableRole='body']");
}
/**
* 获取table
*/
function _getTable(jq) {
return jq.find("table.table[tableRole='table']");
}
/**
* 获取tbody
*/
function _getTbody(jq) {
return jq.find("table.table tbody");
}
/**
* 获取表头
*/
function _getThead(jq) {
return jq.find("table.table thead");
}
/**
* 获取分页对象
*/
function _getPagination(jq) {
return jq.find("div[role='pagination']");
}
/**
* 销毁表格tbody
*/
function _removeTbody(jq) {
_getTbody(jq).remove();
}
/**
* 生成分页部分
*/
function _createPage(jq, currentPage) {
var opt = jq.data("table");
var totalAndRow = _getTotalAndData(jq);
if (opt.pagination === true) {
_getPagination(jq).remove();
var pageDiv = $("<div>").appendTo(_getBody(jq));
pageDiv.pagination({
totalCount : totalAndRow.total,
currentPage : currentPage ? currentPage : 1,
pageSize : opt.pageSize,
onSelectPage : function(currentPage, pageSize) {
//显示正在加载
_showLoading(jq);
var lastQueryParam = jq.data("lastQueryParam");
$.ajax($.extend({}, {
url : opt.url,
data :JSON.stringify( $.extend({}, lastQueryParam, {
currentPage : currentPage,
pageSize : pageSize
})),
type : opt.type,
dataType : opt.dataType,
contentType : opt.contentType,
success : function(json) {
if (!json) {
return;
}
opt.data = json;
if (opt.loadFilter) {
opt.data = opt.loadFilter(json);
}
_loadLoaclData(jq);
//隐藏正在加载
_hideLoading(jq);
},
error : function() {
//隐藏正在加载
_hideLoading(jq);
},
dataType : "json"
}));
}
});
}
}
/**
* 生成body部分
* @param table
* @param opt
*/
function _createTbody(jq) {
var opt = jq.data("table");
// 没有数据渲染,展示"无数据"
if (!opt.data) {
var _tbody = $("<tbody>").css({overflow: "auto"}).appendTo(_getTable(jq));
$(_tbody).html('<tr><td colspan="' + opt.columns.length + '">无数据</td></tr>');
return;
}
var totalAndRow = _getTotalAndData(jq);
if (!totalAndRow.rows || totalAndRow.rows.length == 0) {
return;
}
var tbody = $("<tbody>").css({
overflow : "auto"
}).appendTo(_getTable(jq));
//若存在需要合并单元格的情况
//整理出需要合并的单元格
var obj=[];
if(opt.mergeRowsField){
var colField = opt.mergeRowsField;
var rowContent;
var rowMergeNum = 1;
var tempIndex = 0;
$(totalAndRow.rows).each(function(rowIndex, rowData) {
var rowContentTemp = rowData[colField];
if (rowContentTemp == rowContent) {
rowMergeNum ++;
}else{
if(rowIndex != 0){
obj.push({"index":tempIndex,"row":rowMergeNum});
}
rowContent = rowContentTemp;
tempIndex = rowIndex;
rowMergeNum = 1;
}
if(totalAndRow.rows.length - rowIndex == 1){
obj.push({"index":tempIndex,"row":rowMergeNum});
}
});
}
//设置table的主体
//若存在合并单元格,则被合并的单元格禁止显示
var stopCellSum = 0;
var stopCellCount = 1;
$(totalAndRow.rows).each(function(rowIndex, rowData) {
if (opt.formatterRow) {
var formatterRowResult = opt.formatterRow(rowData, rowIndex);
if (formatterRowResult) {
tbody.append(formatterRowResult);
return true;
}
}
var bodyTR = $("<tr>").data("rowData", rowData).appendTo(tbody).css("cursor", "pointer");
if (opt.idField) {
bodyTR.attr("table_rowDataId", rowData[opt.idField]);
}
bodyTR.click(function() {
var chk = bodyTR.find("input:checkbox[name='bootstrap-table-checkbox']");
if (chk) {
//chk.prop("checked", !chk.prop("checked"));
//_clickChk.call(chk.get(0), jq, rowIndex, rowData);
chk.trigger("click");
//_clickChk.call(chk.get(0), jq, rowIndex, rowData);
}
});
if (opt.onClickRow) {
bodyTR.click(function() {
opt.onClickRow.call(jq, rowIndex, rowData);
});
}
//行样式
if (opt.rowStyler) {
var rowStyler = opt.rowStyler(rowData, rowIndex);
if ($.type(rowStyler) === "object") {
bodyTR.css(rowStyler);
} else if ($.type(rowStyler) === "string") {
bodyTR.addClass(rowStyler);
}
}
$(opt.columns).each(function(columnIndex, columnData) {
if (!columnData.colspan) {
if (opt.mergeRowsField && opt.mergeRowsField == columnData.field && stopCellCount < stopCellSum) {
//若存在需要合并单元格的情况 被合并的不需要展示
stopCellCount++;
return;
}
var bodyTD = $("<td>").css({
"text-align": columnData.align ? columnData.align : "left"
}).appendTo(bodyTR);
//将需要合并的cell设置合并属性
if(opt.mergeRowsField && opt.mergeRowsField == columnData.field){
for (var item in obj) {
if (obj[item].index == rowIndex) {
bodyTD.attr("rowspan", obj[item].row);
stopCellSum = obj[item].row;
stopCellCount = 1;
bodyTD.css({
"text-align": 'center',
"vertical-align": 'middle'
})
}
}
}
//列样式
if (columnData.styler) {
var styler = columnData.styler(rowData[columnData.field], rowData, rowIndex);
if ($.type(styler) === "object") {
bodyTD.css(styler);
} else if ($.type(styler) === "string") {
bodyTD.addClass(styler);
}
}
if (columnData.checkbox === true) {
$("<input type=\"checkbox\" name=\"bootstrap-table-checkbox\" id=\"bootstrap-table-checkbox_"+ rowIndex +"\" />").click(function(event) {
_clickChk.call(this, jq, rowIndex, rowData);
}).appendTo(bodyTD);
} else {
if (columnData.formatter) {
var formatter = columnData.formatter(rowData[columnData.field], rowData, rowIndex);
if ($.type(formatter) === "object") {
bodyTD.append(formatter);
} else {
bodyTD.html(formatter);
}
} else {
bodyTD.html(rowData[columnData.field]);
}
}
}
});
});
}
/**
* 获取选中的行数据
*/
function _clickChk(jq, rowIndex, rowData) {
//阻止冒泡
if (event) {
event.stopPropagation();
}
//点击选择,当不是全部都选中时候,把上面的全选框去掉选中状态
var opt = jq.data("table");
var thead = _getThead(jq);
if (!this.checked) {
//当有一个没有选中时,去掉全选框
thead.find("#bootstrap-table-checkAll").prop("checked", false);
if (opt.onUnCheck) {
opt.onUnCheck.call(jq, rowIndex, rowData);
}
} else {
if (opt.singleSelect === true) {
//当是只能单选时
_clickCheckAll(jq, false);
//this.checked = true;
this.checked = true;
} else {
var chedkeds = _getTbody(jq).find("input:checked[name='bootstrap-table-checkbox']");
var totalAndRow = _getTotalAndData(jq);
thead.find("#bootstrap-table-checkAll").prop("checked", chedkeds.length == totalAndRow.rows.length);
}
if (opt.onCheck) {
opt.onCheck.call(jq, rowIndex, rowData);
}
}
}
/**
* 获取选中的行数据
*/
function _getCheckedData(jq) {
var arr = [];
var checked = jq.find("input:checked[name='bootstrap-table-checkbox']");
if (!checked || checked.length == 0) {
return arr;
}
$(checked).each(function(index, item) {
arr.push($(item).parent().parent().data("rowData"));
});
return arr;
}
/**
* 点击全选
*/
function _clickCheckAll(jq, checked) {
var opt = jq.data("table");
if (checked === true && opt.singleSelect === true) {
//如果只能单选,那就不处理
return;
}
var rows = _getRows(jq);
for (var i = 0; i < rows.length; i++) {
if (checked === true) {
_checkRow(jq, i);
} else {
_unCheckRow(jq, i);
}
}
var check = jq.find("input:checkbox[name='bootstrap-table-checkbox']");
check.prop("checked", checked);
}
/**
* 加载本地数据
*/
function _loadLoaclData(jq) {
var opt = jq.data("table");
_removeTbody(jq);
//opt.data = data;
_createTbody(jq);
//处理onLoadSuccess事件
if (opt.onLoadSuccess) {
opt.onLoadSuccess.call(jq, opt.data);
}
}
/**
* 选中一行
*/
function _checkRow(jq, index) {
var row = $(_getRow(jq, index));
var chk = row.find("input:checkbox[name='bootstrap-table-checkbox']");
chk.prop("checked", true);
_clickChk.call(chk.get(0), jq, index, row.data("rowData"));
}
/**
* 反选中一行
*/
function _unCheckRow(jq, index) {
var row = $(_getRow(jq, index));
var chk = row.find("input:checkbox[name='bootstrap-table-checkbox']");
chk.prop("checked", false);
_clickChk.call(chk.get(0), jq, index, row.data("rowData"));
}
/**
* 获取表格中的每一行对象
*/
function _getRows(jq) {
return jq.find("table tbody tr");
}
/**
* 获取表格中的一行对象
*/
function _getRow(jq, index) {
return _getRows(jq)[index];
}
/**
* 获取表格中的每一行数据
*/
function _getData(jq) {
var rows = _getRows(jq);
if (rows) {
var data = [];
for (var i = 0; i < rows.length; i++) {
data.push($(rows[i]).data("rowData"));
}
return data;
}
return [];
}
function _reload(jq, param) {
var page = _getPagination(jq).data("pagination");
_loadRemote(jq, $.extend({}, param, {
currentPage : page.currentPage
}));
}
/**
* 获取表格中的一行数据
*/
function _getRowData(jq, index) {
return _getRow(jq, index).data("rowData");
}
$.fn.table.methods = {
/**
* 获取选中的行数据
*/
getChecked : function() {
return _getCheckedData(this);
},
/**
* 加载本地数据
* @param data
*/
loadLoaclData : function(data) {
var jq = this;
return jq.each(function() {
_loadLoaclData(jq);
});
},
/**
* 从远程再去请求数据
* @param param
*/
load : function(param) {
var jq = this;
_loadRemote(jq, param);
},
/**
* 从远端请求数据(并且留在当前页)
*/
reload : function(param) {
var jq = this;
return this.each(function() {
_reload(jq, param);
});
},
/**
* 获取表格中的每一行数据
*/
getRows : function() {
return _getRows(this);
},
/**
* 获取表格中的一行对象
* @param index
*/
getRow : function(index) {
return _getRow(this, index);
},
/**
* 获取表格中的每一行数据data
*/
getData : function() {
return _getData(this);
},
/**
* 获取表格中的一行数据
* @param index
*/
getRowData : function(index) {
return _getRowData(this, index);
},
/**
* 选中一行
* @param param
*/
checkRow : function(index) {
var jq = this;
return jq.each(function() {
_checkRow(jq, index);
});
},
/**
* 反选中一行
* @param param
*/
unCheckRow : function(index) {
var jq = this;
return jq.each(function() {
_unCheckRow(jq, index);
});
},
/**
* 设置页码
* @param param
*/
setCurrentPage : function(param) {
var jq = this;
_setCurrentPage(jq, param);
}
};
$.fn.table.events = {
/**
* 加载完成执行
* @param data
*/
onLoadSuccess : function(data) {},
/**
* 加载之前执行,如果返回false,则不去远端调用
*
*/
onBeforeLoad : function() {},
/**
* 当选中复选框时
* @param rowIndex
* @param rowData
*/
onCheck : function(rowIndex, rowData) {},
/**
* 当去掉选中复选框时
* @param rowIndex
* @param rowData
*/
onUnCheck : function(rowIndex, rowData) {},
/**
* 当点击一行时
* @param rowIndex
* @param rowData
*/
onClickRow : function(rowIndex, rowData) {}
};
$.fn.table.defaults = $.extend({}, $.fn.table.events, {
columnAutoWidth : false,//列是否自动宽度
url : "", //远端调用的url
queryParams : {}, //调用url传递的参数
type : "POST", //提交方式
dataType : "json", //返回的类型
pagination : false, //是否分页
pageSize : 10, //分页时,每页条数
data : null, //如果不用url,则可以直接传入data
striped : false, //是否显示条纹
panelClass : "panel-default", //标题面板 的样式 (primary,success,info,warning,danger)
title : "", //表格标题
label : "", //表格上方标签区域
button : "", //表格上方按钮
hover : true, //是否悬停显示
border : true, //是否显示边框
columns : [], //表格列字段
idField : null, //表示id值的字段
singleSelect : false, //是否单选
loadFilter : function(data) { //对返回值进行特殊处理
return data;
},
/**
* 对行进行格式化
*/
formatterRow : function(rowData, rowIndex) {
},
/**
* 对行样式进行处理
* 如果返回值是对象,则应用在css属性里面
* 如果返回值是string,则应用在class里面
* @param rowData
* @param rowIndex
*/
rowStyler : function(rowData, rowIndex) {
return null;
},
/**
* 表格中是否存在表头单元格合并的情况
*/
mergeHeads : false,
/**
* 需要合并单元格的列名 合并行
*/
mergeRowsField : "",
/**
* 当前页码
*/
currentPage : ""
});
/**
* 其中,columns是一数组,每个数组包含字段
* width=null 列宽
* title="" 列标题
* field="" 列属性
* align="left" 对齐
* sortable=false 是否可以排序
* sortcolumn=[field] 排序字段名称(默认为该字段的field)
* checkbox=false, 是否显示复选框
* formatter : function(value, rowData, rowIndex) { //对列进行格式化
如果返回值是jquery对象,则直接把该对象放在该列
如果是返回值是string,则直接放在html()里面
}
* styler : function(value, rowData, rowIndex) { //对列的样式进行格式化
如果返回值是对象,则应用在css属性里面
如果返回值是string,则应用在class里面
},
*/
})(jQuery);
\ No newline at end of file
... ...
... ... @@ -208,6 +208,7 @@
var default_releaseWorkJob_environment="${releaseWorkJob_environment}";
</script>
<script src="<%=basePath%>js/jquery-2.1.4.min.js"></script>
<script src="<%=basePath %>js/jquery-plugin/jquery.extend.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath%>js/bootstrap.min.js"></script>
<script src="<%=basePath%>js/select2.min.js"></script>
<script src="<%=basePath%>js/custom.js"></script>
... ...
<%@page language="java" contentType="text/html;charset=utf-8" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="<%=basePath %>css/bootstrap.min.css"/>
<link rel="stylesheet" href="<%=basePath %>css/unicorn.main.css"/>
<link rel="stylesheet" href="<%=basePath %>css/unicorn.grey.css"/>
<link rel="stylesheet" href="<%=basePath %>css/jquery-ui.css"/>
<link rel="stylesheet" href="<%=basePath %>css/bootstrap-responsive.min.css"/>
<link rel="stylesheet" href="<%=basePath %>css/uniform.css"/>
<link rel="stylesheet" href="<%=basePath %>css/select2.css"/>
<script src="<%=basePath %>js/excanvas.min.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jquery-1.12.0.min.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jquery-plugin/jquery.extend.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jquery-ui.custom.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>/js/bootstrap.min.js"></script>
<script src="<%=basePath %>/js/unicorn.js"></script>
<script src="<%=basePath %>js/bootstrap-plugin/datetimepicker/moment-with-locales.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/datetimepicker/bootstrap-datetimepicker.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/global.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.pagination.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/jsquartz/bootstrap.table.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.dialog.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.form.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.panel.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.alerts.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.accordion.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.breadcrumb.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.validate.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.form.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/layer/layer.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.select.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jstree/jstree.min.js"></script>
<script src="<%=basePath %>js/jquery.toaster.js"></script>
<script src="<%=basePath %>js/laydate/laydate.js" charset="UTF-8" type="text/javascript"></script>
<script>
var contextPath = '<%=basePath %>';
</script>
</head>
<body>
<div id="createJobTable">
<div id="dialog"></div>
<div class="container theme-showcase">
<h1 style="line-height: 2em;"></h1>
<br />
<br />
<br />
<br />
<div class="row">
<div class="col-sm-3"></div>
<div class="col-sm-6">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">
<strong>创建任务</strong>
</h3>
</div>
<div class="panel-body">
<form class="form col-md-12 center-block" name="form" id="creatjobinfo">
<div class="form-group">
<input type="text" class="form-control input-lg" id="jobName" name="jobName" placeholder="任务名称" required>
</div>
<div class="form-group">
<input type="text" class="form-control input-lg" id="jobGroup" name="jobGroup" placeholder="任务分组,默认default">
</div>
<!--<div class="form-group">-->
<!--<input type="text" class="form-control input-lg" id="schedulerName" name="schedulerName" placeholder="调度器" required>-->
<!--</div>-->
<div class="form-group">
调度器名称:<select name="schedulerName" id="schedulerName" >
</select>
</div>
<div class="form-group">
<input type="text" class="form-control input-lg" id="module" name="module" placeholder="任务所属模块">
</div>
<div class="form-group">
<input type="text" class="form-control input-lg" id="priority" name="priority" placeholder="任务优先级" value="5">
</div>
<div class="form-group">
<input type="text" class="form-control input-lg" id="processor" name="processor" placeholder="任务执行器">
</div>
<div class="form-group">
<select name="activemode" id="activemode" onchange="jobTypeDiv('mune_x'+this.value)">
<option value="0" class="form-group">周期任务</option>
<option value="1" class="form-group">有限次任务</option>
</select>
</div>
<div class="form-group" id="x0">
<input type="text" class="form-control input-lg" id="cronexception" name="cronexception" placeholder="任务执行周期">
</div>
<div id="x1" style="display: none">
<div class="form-group">
<input type="text" class="form-control input-lg" id="startTime" name="startTime" placeholder="简单任务执行开始时间">
</div>
<div class="form-group">
<input type="text" class="form-control input-lg" id="repeatCount" name="repeatCount" placeholder="简单任务重复次数">
</div>
<div class="form-group">
<input type="text" class="form-control input-lg" id="interval" name="interval" placeholder="间隔时间,单位(秒)">
</div>
</div>
<div class="form-group">
<input type="text" class="form-control input-lg" id="misfiredPlocy" name="misfiredPlocy" placeholder="执行策略" value="0">
</div>
<div class="form-group">
<textarea rows="5" cols="65" id="context" name="context" placeholder="任务执行所需入参"></textarea>
</div>
<div class="form-group">
<input type="text" class="form-control input-lg" id="desc" name="desc" placeholder="任务描述">
</div>
<div class="form-group">
<input type="button" value="创建" id="createJobBtn" class="btn btn-primary btn-lg btn-block" name="createJobBtn"/>
<!-- <span><a href="#">找回密码</a></span> <span></span> -->
</div>
<div id="messageAlert"></div>
</form>
</div>
</div>
</div>
<div class="col-sm-3"></div>
</div>
</div>
</div>
</body>
</html>
<script>
$(function() {
$("#createJobBtn").click(function() {
//$(this).prop("disabled", "disabled");
var jobName = $("#jobName");
var jobGroup = $("#jobGroup");
var schedulerName = $("#schedulerName");
var module = $("#module");
var priority = $("#priority");
var processor = $("#processor");
var cronexception = $("#cronexception");
var startTime = $("#startTime");
var repeatCount = $("#repeatCount");
var interval = $("#interval");
var misfiredPlocy = $("#misfiredPlocy");
var context = $("#context");
var activemode = $("#activemode");
var desc = $("#desc");
var jobinfo = {
"jobName": jobName.val(),
"jobGroup" : jobGroup.val(),
"module" : module.val(),
"jobType" : activemode.val(),
"priority" : priority.val(),
"desc" : desc.val(),
"jobClass" : processor.val(),
"misfiredPlocy" : misfiredPlocy.val(),
"cron" : cronexception.val(),
"startDate" : startTime.val(),
"repeatCount" : repeatCount.val(),
"interval" : interval.val(),
"jobContext" : context.val(),
"scheduleName" : schedulerName.val()
};
$.ajax({
url : contextPath+"/job/createJob.do",
contentType : "application/json; charset=utf-8",
data : JSON.stringify(jobinfo),
dataType : "json",
type : "POST",
success : function(data) {
if (!data) {
$("#messageAlert").alerts({
content : "创建任务失败",
type : "danger"
});
$("#createJobBtn").removeAttr("disabled");
return;
}
if (data.code != 200) {
$("#messageAlert").alerts({
content : data.message,
type : "danger"
});
$("#createJobBtn").removeAttr("disabled");
return;
}
location.href = contextPath+"/job/toJob";
},error: function (e) {
console.log(e);
$("#messageAlert").alerts({
content : "创建任务失败,发生error",
type : "danger"
});
$("#createJobBtn").removeAttr("disabled");
return;
}
});
});
});
function jobTypeDiv(Names) {
var Name;
for (var i=0;i<2;i++){ // 更改数字4可以改变选择的内容数量,在下拉总数值的基础上+1.比如:下拉菜单有5个值,则4变成6
var tempname="mune_x"+i
var NewsHot="x"+i // “X”是ID名称,比如:ID命名为“case1”,这里的“X”即为“case”
if (Names==tempname){
Nnews=document.getElementById(NewsHot)
Nnews.style.display='';
}else{
Nnews=document.getElementById(NewsHot)
Nnews.style.display='none';
}
}
}
laydate.render({
elem: '#startTime', //指定元素
type:'datetime'
});
$(function () {
$.ajax({
url : contextPath+"/job/getJobSchedule.do",
contentType : "application/json; charset=utf-8",
dataType : "json",
type : "GET",
async : false,
success : function (data) {
var programme_sel=[];
programme_sel.push('<option value="" selected>请选择</option>')
if (data.data &&data.code == 200){
for(var i=0,len=data.data.length;i<len;i++){
var programme = data.data[i];
programme_sel.push('<option value="'+programme+'">'+programme+'</option>')
}
$("#schedulerName").html(programme_sel.join(' '));
}
},
error : function () {
}
});
});
</script>
... ...
<%@page language="java" contentType="text/html;charset=utf-8" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="<%=basePath %>css/bootstrap.min.css"/>
<link rel="stylesheet" href="<%=basePath %>css/unicorn.main.css"/>
<link rel="stylesheet" href="<%=basePath %>css/unicorn.grey.css"/>
<link rel="stylesheet" href="<%=basePath %>css/jquery-ui.css"/>
<link rel="stylesheet" href="<%=basePath %>css/bootstrap-responsive.min.css"/>
<link rel="stylesheet" href="<%=basePath %>css/uniform.css"/>
<link rel="stylesheet" href="<%=basePath %>css/select2.css"/>
<script src="<%=basePath %>js/excanvas.min.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jquery-1.12.0.min.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jquery-plugin/jquery.extend.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jquery-ui.custom.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>/js/bootstrap.min.js"></script>
<script src="<%=basePath %>/js/unicorn.js"></script>
<script src="<%=basePath %>js/bootstrap-plugin/datetimepicker/moment-with-locales.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/datetimepicker/bootstrap-datetimepicker.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/global.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.pagination.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/jsquartz/bootstrap.table.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.dialog.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.form.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.panel.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.alerts.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.accordion.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.breadcrumb.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.validate.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.form.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/layer/layer.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.select.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jstree/jstree.min.js"></script>
<script src="<%=basePath %>js/jquery.toaster.js"></script>
<script src="<%=basePath %>js/laydate/laydate.js" charset="UTF-8" type="text/javascript"></script>
<script>
var contextPath = '<%=basePath %>';
</script>
</head>
<body>
<!-- 头部 -->
<div id="head">
</div>
<!-- 右侧具体内容 -->
<div id="content">
<div class="container-fluid">
<div class="widget-box">
<div class="widget-content nopadding">
<div id="showDetailDiv">
<div id="showDetailTable"></div>
</div>
</div>
</div>
</div>
</div>
<script src="<%=basePath %>script/common/genarate_left_panel.js"></script>
<script>
$("#li_other").addClass("active open");
$("#li_crm_job").addClass("active");
</script>
</body>
</html>
<script>
$(function () {
var currentPage=1;
/*var args = new Object();
args = GetUrlParms();*/
var jobname1 ="${jobname}";
var jobgroup1 = "${jobgroup}";
var schedulename1 = "${schedulename}";
var queryData = {}
$("#showDetailDiv #showDetailTable").table(
{
url: contextPath+"/job/getJobProcessDetail.do",
queryParams: {
"jobName": jobname1,
"jobGroup": jobgroup1,
"schedulerName": schedulename1
},
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",
currentPage: currentPage,
title: "任务执行情况",
panelClass: "panel-primary",
striped: true,
pagination: true,
pageSize: 10,
loadFilter: function (data) {
return data.data;
},
columns: [
{
title: "任务Id",
field: "jobId"
},
{
title: "任务名称",
field: "jobName"
},
{
title: "任务所属组",
field: "jobGroup"
},
{
title: "任务所属模块",
field: "module"
},
{
title: "调度器名称",
field: "schedulerName"
},
{
title: "调度器实例",
field: "schedulerInstanceId"
},
{
title: "执行结果",
field: "result"
},
{
title: "本次执行开始时间",
field: "startTime"
},
{
title: "本次执行结束时间",
field: "endTime"
},
{
title: "任务执行器",
field: "processor"
},
{
title: "任务执行上下文",
field: "context"
},
{
title: "附加信息",
field: "message",
formatter: function (value, rowData, rowIndex) {
var messageinfo = "";
if (typeof (rowData.message) == "string") {
if ((rowData.message).length > 200) {
messageinfo = rowData.message
.substring(0, 200)
+ "...";
} else {
messageinfo = rowData.message;
}
return messageinfo;
}
}
},
{
title: "操作",
formatter: function (value, rowData, rowIndex) {
var div = $("<div>");
// if (rowData.status == 0) {//已暂停,可以开启
var openBtn = $("<button>").addClass(
"btn btn-xs btn-success").html(
"重新执行").appendTo(div);
div.append("&nbsp;");
openBtn.click(function () {//开启变为待执行状态
retrySchedule(rowData, this,
"确定重新执行吗", "确定重新执行任务么");
});
// }
div.append("&nbsp;");
div.append("&nbsp;");
return div;
}
}]
});
});
function retrySchedule(job, obj, title, meg) {
var dialog = $("<div>").appendTo($("body"));
var jobInfo ={
"id" : job.jobId,
"jobGroup" : job.jobGroup,
"scheduleName" : job.schedulerName
};
dialog.dialog({
title: title,
backdrop: "static",
content: meg,
buttons: [{
text: "否",
className: "btn-danger",
onclick: function () {
$(dialog).dialog("hide");
}
}, {
text: "是",
className: "btn-success",
onclick: function () {
$(dialog).dialog("hide");
$.ajax({
url: contextPath+"/job/rescheduleJob.do",
type: 'post',
contentType: "application/json; charset=utf-8",
data: JSON.stringify(jobInfo),
dataType: "json",
success: function (data) {
if (!data || data.code != 200) {
var dialog = $("<div>").appendTo($("body"));
dialog.dialog({
title: "重试失败",
backdrop: "static",
content: "重试失败",
buttons: [{
text: "确定",
className: "btn-danger",
onclick: function () {
$(dialog).dialog("hide");
}
}]
});
}
$("#jobInfoDiv #jobInfoListTable").table("load");
}
});
}
}]
});
}
/* function GetUrlParms() {
var args = new Object();
var url = location.search.substring(1);//获取查询串
var query = decodeURI(url);
var pairs = query.split("&");//在处断开
for (var i = 0; i < pairs.length; i++) {
var pos = pairs[i].indexOf('=');//查找name=value
if (pos == -1)
continue;//如果没有找到就跳过
var argname = pairs[i].substring(0, pos);//提取name
var value = pairs[i].substring(pos + 1);//提取value
args[argname] = unescape(value);//存为属性
}
return args;
}*/
</script>
... ...
<%@page language="java" contentType="text/html;charset=utf-8" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="<%=basePath %>css/bootstrap.min.css"/>
<link rel="stylesheet" href="<%=basePath %>css/unicorn.main.css"/>
<link rel="stylesheet" href="<%=basePath %>css/unicorn.grey.css"/>
<link rel="stylesheet" href="<%=basePath %>css/jquery-ui.css"/>
<link rel="stylesheet" href="<%=basePath %>css/bootstrap-responsive.min.css"/>
<link rel="stylesheet" href="<%=basePath %>css/uniform.css"/>
<link rel="stylesheet" href="<%=basePath %>css/select2.css"/>
<script src="<%=basePath %>js/excanvas.min.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jquery-1.12.0.min.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jquery-plugin/jquery.extend.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jquery-ui.custom.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>/js/bootstrap.min.js"></script>
<script src="<%=basePath %>/js/unicorn.js"></script>
<script src="<%=basePath %>js/bootstrap-plugin/datetimepicker/moment-with-locales.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/datetimepicker/bootstrap-datetimepicker.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/global.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.pagination.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/jsquartz/bootstrap.table.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.dialog.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.form.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.panel.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.alerts.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.accordion.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.breadcrumb.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.validate.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.form.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/layer/layer.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.select.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jstree/jstree.min.js"></script>
<script src="<%=basePath %>js/jquery.toaster.js"></script>
<script src="<%=basePath %>js/laydate/laydate.js" charset="UTF-8" type="text/javascript"></script>
<script>
var contextPath = '<%=basePath %>';
</script>
</head>
<body>
<!-- 头部 -->
<div id="head">
</div>
<!-- 右侧具体内容 -->
<div id="content">
<div class="container-fluid">
<div class="widget-box">
<div class="widget-content nopadding">
<div id="jobInfoDiv">
<div id="jobInfoListTable"></div>
<div id="jobCreateJobBtm">
<button id="crtbtn" class="btn btn-primary" onclick="showCreatePage()">创建任务</button>
</div>
<div id="jobCreateJobDiv"></div>
</div>
</div>
</div>
</div>
</div>
<script src="<%=basePath %>script/common/genarate_left_panel.js"></script>
<script>
$("#li_other").addClass("active open");
$("#li_crm_job").addClass("active");
</script>
</body>
<script>
$(function () {
//设置路径导航
//全局用来html传递参数使用
//var paramObj = {};
$("#jobCreateJobDiv").hide();
//全局的panel的样式
var currentPage=1;
var panelStyle = "panel-primary";
$("#jobInfoDiv #jobInfoListTable").table(
{
url: contextPath+"/job/getAllJobs.do",
queryParams: {},
title: "任务列表",
panelClass: panelStyle,
striped: true,
pagination: true,
currentPage: currentPage,
pageSize: 10,
contentType: "application/json; charset=utf-8",
loadFilter: function (data) {
return data.data;
},
columns: [
{
title: "任务Id",
field: "id"
},
{
title: "任务名称",
field: "jobName"
},
{
title: "任务所属组",
field: "jobGroup"
},
{
title: "调度器",
field: "scheduleName"
},
{
title: "任务所属模块",
field: "module"
},
{
title: "任务执行表达式",
field: "cron"
},
{
title: "任务执行器",
field: "jobClass"
},
{
title: "开始时间",
field: "startDate"
},
{
title: "补偿策略",
field: "misfiredPlocy"
},
{
title: "优先级",
field: "priority"
},
{
title: "任务执行入参",
field: "jobContext"
},
{
title: "方式",
field: "jobType",
formatter: function (value, rowData, rowIndex) {
if (value == 0)
return "循环";
else if (value == 1)
return "单次";
else
return "";
}
},
{
title: "执行状态",
field: "state",
},
{
title: "操作",
formatter: function (value, rowData, rowIndex) {
var div = $("<div>");
if (rowData.state == "PAUSED") {//已暂停,可以开启
var openBtn = $("<button>").addClass(
"btn btn-xs btn-success").html(
"开启").appendTo(div);
div.append("&nbsp;");
openBtn.click(function () {//开启变为待执行状态
changeState(rowData, "WAITING", this,
"确定开启吗", "确定开启改任务么");
});
var editBtn = $("<button>").addClass(
"btn btn-xs btn-success").html(
"编辑").appendTo(div);
editBtn.click(function () {
editJob(rowData);
});
div.append("&nbsp;");
div.append("&nbsp;");
}
if (rowData.state == "WAITING" || rowData.state == "ACQUIRED") {//执行状态,可以停止
var stopBtn = $("<button>").addClass(
"btn btn-xs btn-success").html(
"停止").appendTo(div);
stopBtn.click(function () {
changeState(rowData, "PAUSE", this,
"确定停止吗", "确认停止该任务么");
});
div.append("&nbsp;");
}
var editBtn = $("<button>").addClass(
"btn btn-xs btn-success")
.html("查看").appendTo(div);
editBtn.click(function () {
showDetailJob(rowData);
});
return div;
}
}]
});
//加载创建
$("#jobInfoDiv #jobCreateJobDiv").panel({
className: panelStyle,
title: "创建任务",
url: contextPath+"/job/toCreateJob",
showFooter: false
});
});
function changeState(job, newstate, obj, title, meg) {
var dialog = $("<div>").appendTo($("body"));
dialog.dialog({
title: title,
backdrop: "static",
content: meg,
buttons: [{
text: "否",
className: "btn-danger",
onclick: function () {
$(dialog).dialog("hide");
}
}, {
text: "是",
className: "btn-success",
onclick: function () {
$(dialog).dialog("hide");
$.ajax({
url: geturl(),
type: 'post',
contentType: "application/json; charset=utf-8",
data: JSON.stringify(job),
dataType: "json",
success: function (data) {
if (!data || data.code != 200) {
var dialog = $("<div>").appendTo($("body"));
dialog.dialog({
title: "开启失败",
backdrop: "static",
content: "开启失败",
buttons: [{
text: "确定",
className: "btn-danger",
onclick: function () {
$(dialog).dialog("hide");
}
}]
});
}
$("#jobInfoDiv #jobInfoListTable").table("load",{});
}
});
}
}]
});
function geturl() {
if (newstate == "PAUSE") {
return contextPath+"/job/pauseJob.do";
} else if (newstate == "WAITING") {
return contextPath+"/job/startJob.do";
}
}
}
function showCreatePage() {
$("#jobCreateJobDiv").show();
}
function editJob(job) {
var dialog = $("<div>").appendTo($("body"));
dialog.dialog({
title: "创建任务",
backdrop: "static",
content: buildCnt(job)
});
function buildCnt(job) {
var cnt = "<form class=\"form col-md-12 center-block\" name=\"form\" id=\"editjobinfo\">";
cnt += "<div class=\"form-group\">";
cnt = cnt
+ "任务Id:<input type=\"text\" class=\"form-control input-lg\" id=\"editId\" name=\"editId\" placeholder=\"任务Id\" value=";
cnt = cnt + job.id;
cnt += " disabled=\"true\">";
cnt += "</div>";
cnt += "<div class=\"form-group\">";
cnt = cnt
+ "任务名称:<input type=\"text\" class=\"form-control input-lg\" id=\"editjobName\" name=\"editjobName\" placeholder=\"任务名称\" value=";
cnt = cnt + job.jobName;
cnt += " disabled=\"true\">";
cnt += "</div>";
cnt += "<div class=\"form-group\">";
cnt = cnt
+ "任务分组:<input type=\"text\" class=\"form-control input-lg\" id=\"editjobGroup\" name=\"editjobGroup\" placeholder=\"分组名称\" value=";
cnt = cnt + job.jobGroup;
cnt += " disabled=\"true\">";
cnt += "</div>";
cnt += "<div class=\"form-group\">";
cnt = cnt
+ "调度器名称:<input type=\"text\" class=\"form-control input-lg\" id=\"editscheduleName\" name=\"editscheduleName\" placeholder=\"调度器\" value=";
cnt = cnt + job.scheduleName;
cnt += " disabled=\"true\">";
cnt += "</div>";
cnt += "<div class=\"form-group\">";
cnt = cnt
+ "所属模块:<input type=\"text\" class=\"form-control input-lg\" id=\"editmodule\" name=\"editmodule\" placeholder=\"所属模块\" value=";
cnt = cnt + job.module;
cnt += " disabled=\"true\">";
cnt += "</div>";
cnt += "<div class=\"form-group\">";
cnt = cnt
+ "任务执行器:<input type=\"text\" class=\"form-control input-lg\" id=\"editprocessor\" name=\"editprocessor\" placeholder=\"任务执行器\" value=";
cnt = cnt + job.jobClass;
cnt += ">";
cnt += "</div>";
cnt += "<div class=\"form-group\">";
cnt = cnt
+ "执行周期:<input type=\"text\" class=\"form-control input-lg\" id=\"editcronexception\" name=\"editcronexception\" placeholder=\"任务执行周期\" value=\"";
cnt = cnt + job.cron;
cnt += "\">";
cnt += "</div>";
cnt += "<div class=\"form-group\">";
cnt = cnt
+ "补偿策略:<input type=\"text\" class=\"form-control input-lg\" id=\"editmisfiredPlocy\" name=\"editmisfiredPlocy\" placeholder=\"补偿策略\" value=\"";
cnt = cnt + job.misfiredPlocy;
cnt += "\">";
cnt += "</div>";
cnt += "<div class=\"form-group\">";
cnt = cnt
+ "优先级:<input type=\"text\" class=\"form-control input-lg\" id=\"editpriority\" name=\"editpriority\" placeholder=\"优先级\" value=\"";
cnt = cnt + job.priority;
cnt += "\">";
cnt += "</div>";
cnt += "<div class=\"form-group\">";
cnt = cnt
+ "任务入参:<input type=\"text\" class=\"form-control input-lg\" id=\"editcontext\" name=\"editcontext\" placeholder=\"任务入参\" value=";
if (typeof (job.jobContext) == "undefined") {
cnt = cnt + "";
} else {
cnt = cnt + job.jobContext;
}
cnt += ">";
cnt += "</div>";
cnt += "<div class=\"form-group\">";
cnt = cnt
+ "任务触发类型:<input type=\"text\" class=\"form-control input-lg\" id=\"editactivemode\" name=\"editactivemode\" placeholder=\"任务触发类型\" value=";
if (job.jobType == 0) {
cnt = cnt + "周期任务";
} else {
cnt = cnt + "单次任务";
}
cnt += " disabled=\"true\">";
cnt += "</div>";
cnt += "<div class=\"form-group\">";
cnt += "<input type=\"button\" value=\"更新\" id=\"editJobBtn\" class=\"btn btn-primary btn-lg btn-block\" name=\"editJobBtn\" onclick=\"updatejob()\" />";
cnt += "</div>";
cnt += "</form>";
return cnt;
}
}
function updatejob() {
var id = $("#editId");
var jobName = $("#editjobName");
var jobGroup = $("#editjobGroup");
var module = $("#editmodule");
var scheduleName = $("#editscheduleName");
var processor = $("#editprocessor");
var misfiredPlocy = $("#editmisfiredPlocy");
var priority = $("#editpriority");
var cronexception = $("#editcronexception");
var context = $("#editcontext");
var jobtype = $("#editactivemode");
var jobinfo = {
"id" : id.val(),
"jobName": jobName.val(),
"jobGroup": jobGroup.val(),
"module": module.val(),
"jobType": getJobType(jobtype.val()),
"priority": priority.val(),
"jobClass": processor.val(),
"misfiredPlocy": misfiredPlocy.val(),
"cron": cronexception.val(),
"jobContext": context.val(),
"scheduleName": scheduleName.val()
};
$.ajax({
url: contextPath+"/job/updateJob.do",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(jobinfo),
dataType: "json",
type: "POST",
success: function (data) {
if (!data) {
$("#messageAlert").alerts({
content: "创建任务失败",
type: "danger"
});
$("#createJobBtn").removeAttr("disabled");
return;
}
if (data.code != 200) {
$("#messageAlert").alerts({
content: data.message,
type: "danger"
});
$("#createJobBtn").removeAttr("disabled");
return;
}
location.href = contextPath+"/job/toJob";
}
});
}
function getJobType(jobtype) {
if (jobtype == '周期任务') {
return 0;
} else {
return 1;
}
}
function showDetailJob(job) {
/* window.open(encodeURI("/jobs/html/showdetailjob.html?jobname=" + job.id
+ "&jobgroup=" + job.jobGroup + "&schedulename=" + job.scheduleName));*/
var param={};
param.jobname= job.id;
param.jobgroup= job.jobGroup;
param.schedulename= job.scheduleName;
GobalStandardPost( contextPath+ "job/toJobDetail",param);
}
laydate.render({
elem: '#startTime', //指定元素
type:'datetime'
});
</script>
</html>
\ No newline at end of file
... ...
... ... @@ -144,6 +144,7 @@ innerHTML += "<ul><li id='li_sms'><a id='li_sms_a' href=''>短信验证码</a></
innerHTML += "<li id='li_search_compare'><a id='li_search_compare_a' href=''>搜索双云比较</a></li>";
innerHTML += "<li id='li_sql_operate'><a id='li_sql_operate_a' href=''>SQL通用查询</a></li>";
innerHTML += "<li id='li_redis_operate'><a id='li_redis_operate_a' href=''>REDIS查询</a></li>";
innerHTML += "<li id='li_crm_job'><a id='li_crm_job_a' href=''>crmjob</a></li>";
innerHTML += "</ul></li>";/*其他*/
/*客户端错误日志查询 */
... ... @@ -233,6 +234,7 @@ document.getElementById("li_centerswitch_new_a").setAttribute("href",path+"/cent
document.getElementById("li_javarollbackbytime_a").setAttribute("href",path+"/project/toRollbackByTime");
document.getElementById("li_sql_operate_a").setAttribute("href",path+"/sqlOperate/toSqlOperate");
document.getElementById("li_redis_operate_a").setAttribute("href",path+"/redisOperate/toRedisOperate");
document.getElementById("li_crm_job_a").setAttribute("href",path+"/job/toJob");
//add ops bigdata refer
document.getElementById("li_bigdata_ops_dashboard_info_a").setAttribute("href",path+"/bigdata/toDashboardinfo");
... ...