GLUE编辑器以及后端交互更新
This commit is contained in:
parent
5c1bba3364
commit
74e4e58c0e
|
@ -1,7 +1,10 @@
|
||||||
package com.xxl.job.controller;
|
package com.xxl.job.controller;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.ui.Model;
|
import org.springframework.ui.Model;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
@ -9,6 +12,9 @@ import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
|
||||||
import com.xxl.job.core.model.ReturnT;
|
import com.xxl.job.core.model.ReturnT;
|
||||||
import com.xxl.job.core.model.XxlJobInfo;
|
import com.xxl.job.core.model.XxlJobInfo;
|
||||||
|
import com.xxl.job.core.model.XxlJobLogGlue;
|
||||||
|
import com.xxl.job.dao.IXxlJobInfoDao;
|
||||||
|
import com.xxl.job.dao.IXxlJobLogGlueDao;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* job code controller
|
* job code controller
|
||||||
|
@ -17,15 +23,55 @@ import com.xxl.job.core.model.XxlJobInfo;
|
||||||
@Controller
|
@Controller
|
||||||
@RequestMapping("/jobcode")
|
@RequestMapping("/jobcode")
|
||||||
public class JobCodeController {
|
public class JobCodeController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IXxlJobInfoDao xxlJobInfoDao;
|
||||||
|
@Resource
|
||||||
|
private IXxlJobLogGlueDao xxlJobLogGlueDao;
|
||||||
|
|
||||||
@RequestMapping
|
@RequestMapping
|
||||||
public String index(Model model, HttpServletRequest request) {
|
public String index(Model model, String jobGroup, String jobName) {
|
||||||
|
XxlJobInfo jobInfo = xxlJobInfoDao.load(jobGroup, jobName);
|
||||||
|
List<XxlJobLogGlue> jobLogGlues = xxlJobLogGlueDao.selectList(jobGroup, jobName);
|
||||||
|
model.addAttribute("jobInfo", jobInfo);
|
||||||
|
model.addAttribute("jobLogGlues", jobLogGlues);
|
||||||
return "jobcode/index";
|
return "jobcode/index";
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping("/save")
|
@RequestMapping("/save")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public ReturnT<String> save(Model model, XxlJobInfo jobInfo, HttpServletRequest request) {
|
public ReturnT<String> save(Model model, String jobGroup, String jobName, String glueSource, String glueRemark) {
|
||||||
|
// valid
|
||||||
|
if (glueRemark==null) {
|
||||||
|
return new ReturnT<String>(500, "请输入备注");
|
||||||
|
}
|
||||||
|
if (glueRemark.length()<6 || glueRemark.length()>100) {
|
||||||
|
return new ReturnT<String>(500, "备注长度应该在6至100之间");
|
||||||
|
}
|
||||||
|
XxlJobInfo jobInfoOld = xxlJobInfoDao.load(jobGroup, jobName);
|
||||||
|
if (jobInfoOld == null) {
|
||||||
|
return new ReturnT<String>(500, "任务不存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
// log old code
|
||||||
|
XxlJobLogGlue xxlJobLogGlue = new XxlJobLogGlue();
|
||||||
|
xxlJobLogGlue.setJobGroup(jobInfoOld.getJobGroup());
|
||||||
|
xxlJobLogGlue.setJobName(jobInfoOld.getJobName());
|
||||||
|
xxlJobLogGlue.setGlueSource(jobInfoOld.getGlueSource());
|
||||||
|
xxlJobLogGlue.setGlueRemark(jobInfoOld.getGlueRemark());
|
||||||
|
|
||||||
|
// init new code
|
||||||
|
jobInfoOld.setGlueSource(glueSource);
|
||||||
|
jobInfoOld.setGlueRemark(glueRemark);
|
||||||
|
|
||||||
|
// update new code ,and log old code
|
||||||
|
xxlJobInfoDao.update(jobInfoOld);
|
||||||
|
if (StringUtils.isNotBlank(xxlJobLogGlue.getGlueSource()) && StringUtils.isNotBlank(xxlJobLogGlue.getGlueRemark())) {
|
||||||
|
xxlJobLogGlueDao.save(xxlJobLogGlue);
|
||||||
|
// remove code backup more than 30
|
||||||
|
xxlJobLogGlueDao.removeOld(xxlJobLogGlue.getJobGroup(), xxlJobLogGlue.getJobName(), 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return ReturnT.SUCCESS;
|
return ReturnT.SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,8 @@ import com.xxl.job.core.model.ReturnT;
|
||||||
import com.xxl.job.core.model.XxlJobInfo;
|
import com.xxl.job.core.model.XxlJobInfo;
|
||||||
import com.xxl.job.core.util.DynamicSchedulerUtil;
|
import com.xxl.job.core.util.DynamicSchedulerUtil;
|
||||||
import com.xxl.job.dao.IXxlJobInfoDao;
|
import com.xxl.job.dao.IXxlJobInfoDao;
|
||||||
|
import com.xxl.job.dao.IXxlJobLogDao;
|
||||||
|
import com.xxl.job.dao.IXxlJobLogGlueDao;
|
||||||
import com.xxl.job.service.job.RemoteHttpJobBean;
|
import com.xxl.job.service.job.RemoteHttpJobBean;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -34,6 +36,10 @@ public class JobInfoController {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private IXxlJobInfoDao xxlJobInfoDao;
|
private IXxlJobInfoDao xxlJobInfoDao;
|
||||||
|
@Resource
|
||||||
|
public IXxlJobLogDao xxlJobLogDao;
|
||||||
|
@Resource
|
||||||
|
private IXxlJobLogGlueDao xxlJobLogGlueDao;
|
||||||
|
|
||||||
@RequestMapping
|
@RequestMapping
|
||||||
public String index(Model model) {
|
public String index(Model model) {
|
||||||
|
@ -216,6 +222,8 @@ public class JobInfoController {
|
||||||
try {
|
try {
|
||||||
DynamicSchedulerUtil.removeJob(jobName, jobGroup);
|
DynamicSchedulerUtil.removeJob(jobName, jobGroup);
|
||||||
xxlJobInfoDao.delete(jobGroup, jobName);
|
xxlJobInfoDao.delete(jobGroup, jobName);
|
||||||
|
xxlJobLogDao.delete(jobGroup, jobName);
|
||||||
|
xxlJobLogGlueDao.delete(jobGroup, jobName);
|
||||||
return ReturnT.SUCCESS;
|
return ReturnT.SUCCESS;
|
||||||
} catch (SchedulerException e) {
|
} catch (SchedulerException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|
|
@ -0,0 +1,69 @@
|
||||||
|
package com.xxl.job.core.model;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xxl-job log for glue, used to track job code process
|
||||||
|
* @author xuxueli 2016-5-19 17:57:46
|
||||||
|
*/
|
||||||
|
public class XxlJobLogGlue {
|
||||||
|
|
||||||
|
private int id;
|
||||||
|
|
||||||
|
private String jobGroup;
|
||||||
|
private String jobName;
|
||||||
|
|
||||||
|
private String glueSource;
|
||||||
|
private String glueRemark;
|
||||||
|
private String addTime;
|
||||||
|
private String updateTime;
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
public void setId(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
public String getJobGroup() {
|
||||||
|
return jobGroup;
|
||||||
|
}
|
||||||
|
public void setJobGroup(String jobGroup) {
|
||||||
|
this.jobGroup = jobGroup;
|
||||||
|
}
|
||||||
|
public String getJobName() {
|
||||||
|
return jobName;
|
||||||
|
}
|
||||||
|
public void setJobName(String jobName) {
|
||||||
|
this.jobName = jobName;
|
||||||
|
}
|
||||||
|
public String getGlueSource() {
|
||||||
|
return glueSource;
|
||||||
|
}
|
||||||
|
public void setGlueSource(String glueSource) {
|
||||||
|
this.glueSource = glueSource;
|
||||||
|
}
|
||||||
|
public String getGlueRemark() {
|
||||||
|
return glueRemark;
|
||||||
|
}
|
||||||
|
public void setGlueRemark(String glueRemark) {
|
||||||
|
this.glueRemark = glueRemark;
|
||||||
|
}
|
||||||
|
public String getAddTime() {
|
||||||
|
return addTime;
|
||||||
|
}
|
||||||
|
public void setAddTime(String addTime) {
|
||||||
|
this.addTime = addTime;
|
||||||
|
}
|
||||||
|
public String getUpdateTime() {
|
||||||
|
return updateTime;
|
||||||
|
}
|
||||||
|
public void setUpdateTime(String updateTime) {
|
||||||
|
this.updateTime = updateTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "XxlJobLogGlue [id=" + id + ", jobGroup=" + jobGroup + ", jobName=" + jobName + ", glueSource="
|
||||||
|
+ glueSource + ", glueRemark=" + glueRemark + ", addTime=" + addTime + ", updateTime=" + updateTime
|
||||||
|
+ "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -21,4 +21,6 @@ public interface IXxlJobLogDao {
|
||||||
public int updateTriggerInfo(XxlJobLog xxlJobLog);
|
public int updateTriggerInfo(XxlJobLog xxlJobLog);
|
||||||
public int updateHandleInfo(XxlJobLog xxlJobLog);
|
public int updateHandleInfo(XxlJobLog xxlJobLog);
|
||||||
|
|
||||||
|
public int delete(String jobGroup, String jobName);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
package com.xxl.job.dao;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.xxl.job.core.model.XxlJobLogGlue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* job log for glue
|
||||||
|
* @author xuxueli 2016-5-19 18:04:56
|
||||||
|
*/
|
||||||
|
public interface IXxlJobLogGlueDao {
|
||||||
|
|
||||||
|
public int save(XxlJobLogGlue xxlJobLogGlue);
|
||||||
|
|
||||||
|
public List<XxlJobLogGlue> selectList(String jobGroup, String jobName);
|
||||||
|
|
||||||
|
public int removeOld(String jobGroup, String jobName, int limit);
|
||||||
|
|
||||||
|
public int delete(String jobGroup, String jobName);
|
||||||
|
|
||||||
|
}
|
|
@ -84,5 +84,13 @@ public class XxlJobLogDaoImpl implements IXxlJobLogDao {
|
||||||
}
|
}
|
||||||
return sqlSessionTemplate.update("XxlJobLogMapper.updateHandleInfo", xxlJobLog);
|
return sqlSessionTemplate.update("XxlJobLogMapper.updateHandleInfo", xxlJobLog);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int delete(String jobGroup, String jobName) {
|
||||||
|
HashMap<String, Object> params = new HashMap<String, Object>();
|
||||||
|
params.put("jobGroup", jobGroup);
|
||||||
|
params.put("jobName", jobName);
|
||||||
|
return sqlSessionTemplate.delete("XxlJobLogMapper.delete", params);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
package com.xxl.job.dao.impl;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
import org.mybatis.spring.SqlSessionTemplate;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import com.xxl.job.core.model.XxlJobLogGlue;
|
||||||
|
import com.xxl.job.dao.IXxlJobLogGlueDao;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* job log for glue
|
||||||
|
* @author xuxueli 2016-5-19 18:17:52
|
||||||
|
*/
|
||||||
|
@Repository
|
||||||
|
public class XxlJobLogGlueDaoImpl implements IXxlJobLogGlueDao {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
public SqlSessionTemplate sqlSessionTemplate;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int save(XxlJobLogGlue xxlJobLogGlue) {
|
||||||
|
return sqlSessionTemplate.insert("XxlJobLogGlueMapper.save", xxlJobLogGlue);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<XxlJobLogGlue> selectList(String jobGroup, String jobName) {
|
||||||
|
HashMap<String, Object> params = new HashMap<String, Object>();
|
||||||
|
params.put("jobGroup", jobGroup);
|
||||||
|
params.put("jobName", jobName);
|
||||||
|
return sqlSessionTemplate.selectList("XxlJobLogGlueMapper.selectList", params);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int removeOld(String jobGroup, String jobName, int limit) {
|
||||||
|
HashMap<String, Object> params = new HashMap<String, Object>();
|
||||||
|
params.put("jobGroup", jobGroup);
|
||||||
|
params.put("jobName", jobName);
|
||||||
|
params.put("limit", limit);
|
||||||
|
return sqlSessionTemplate.delete("XxlJobLogGlueMapper.removeOld", params);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int delete(String jobGroup, String jobName) {
|
||||||
|
HashMap<String, Object> params = new HashMap<String, Object>();
|
||||||
|
params.put("jobGroup", jobGroup);
|
||||||
|
params.put("jobName", jobName);
|
||||||
|
return sqlSessionTemplate.delete("XxlJobLogGlueMapper.delete", params);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,78 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="XxlJobLogGlueMapper">
|
||||||
|
|
||||||
|
<resultMap id="XxlJobLogGlue" type="com.xxl.job.core.model.XxlJobLogGlue" >
|
||||||
|
<result column="id" property="id" />
|
||||||
|
<result column="job_group" property="jobGroup" />
|
||||||
|
<result column="job_name" property="jobName" />
|
||||||
|
<result column="glue_source" property="glueSource" />
|
||||||
|
<result column="glue_remark" property="glueRemark" />
|
||||||
|
<result column="add_time" property="addTime" />
|
||||||
|
<result column="update_time" property="updateTime" />
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<sql id="Base_Column_List">
|
||||||
|
t.id,
|
||||||
|
t.job_group,
|
||||||
|
t.job_name,
|
||||||
|
t.glue_source,
|
||||||
|
t.glue_remark,
|
||||||
|
t.add_time,
|
||||||
|
t.update_time
|
||||||
|
</sql>
|
||||||
|
|
||||||
|
<insert id="save" parameterType="com.xxl.job.core.model.XxlJobLogGlue" useGeneratedKeys="true" keyProperty="id" >
|
||||||
|
INSERT INTO `xxl_job_qrtz_trigger_logglue` (
|
||||||
|
`job_group`,
|
||||||
|
`job_name`,
|
||||||
|
`glue_source`,
|
||||||
|
`glue_remark`,
|
||||||
|
`add_time`,
|
||||||
|
`update_time`
|
||||||
|
) VALUES (
|
||||||
|
#{jobGroup},
|
||||||
|
#{jobName},
|
||||||
|
#{glueSource},
|
||||||
|
#{glueRemark},
|
||||||
|
now(),
|
||||||
|
now()
|
||||||
|
);
|
||||||
|
<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
|
||||||
|
SELECT LAST_INSERT_ID()
|
||||||
|
</selectKey>
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
<select id="selectList" parameterType="java.util.HashMap" resultMap="XxlJobLogGlue">
|
||||||
|
SELECT <include refid="Base_Column_List" />
|
||||||
|
FROM xxl_job_qrtz_trigger_logglue AS t
|
||||||
|
<trim prefix="WHERE" prefixOverrides="AND | OR" >
|
||||||
|
<if test="jobGroup != null and jobGroup != ''">
|
||||||
|
AND t.job_group = #{jobGroup}
|
||||||
|
</if>
|
||||||
|
<if test="jobName != null and jobName != ''">
|
||||||
|
AND t.job_name = #{jobName}
|
||||||
|
</if>
|
||||||
|
</trim>
|
||||||
|
ORDER BY id DESC
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<delete id="removeOld" parameterType="java.util.HashMap" >
|
||||||
|
DELETE FROM xxl_job_qrtz_trigger_logglue
|
||||||
|
WHERE id NOT in(
|
||||||
|
SELECT id FROM(
|
||||||
|
SELECT id FROM xxl_job_qrtz_trigger_logglue
|
||||||
|
WHERE `job_group` = #{jobGroup} and `job_name` = #{jobName}
|
||||||
|
ORDER BY update_time desc
|
||||||
|
LIMIT 0, #{limit}
|
||||||
|
) t1
|
||||||
|
)
|
||||||
|
</delete>
|
||||||
|
|
||||||
|
<delete id="delete" parameterType="java.util.HashMap" >
|
||||||
|
DELETE FROM xxl_job_qrtz_trigger_logglue
|
||||||
|
WHERE job_group = #{jobGroup} and job_name = #{jobName}
|
||||||
|
</delete>
|
||||||
|
|
||||||
|
</mapper>
|
|
@ -130,4 +130,10 @@
|
||||||
WHERE `id`= #{id}
|
WHERE `id`= #{id}
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
|
<delete id="delete">
|
||||||
|
delete from `xxl_job_qrtz_trigger_log`
|
||||||
|
WHERE job_group = #{jobGroup}
|
||||||
|
AND job_name = #{jobName}
|
||||||
|
</delete>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
|
@ -16,59 +16,80 @@
|
||||||
</head>
|
</head>
|
||||||
<body class=" layout-top-nav">
|
<body class=" layout-top-nav">
|
||||||
|
|
||||||
<div class="wrapper">
|
<#if !jobInfo?exists>
|
||||||
|
<div class="wrapper">
|
||||||
<div class="content-wrapper">
|
<div class="content-wrapper">
|
||||||
<!-- Content Header (Page header) -->
|
<section class="content-header">
|
||||||
<section class="content-header">
|
<h1>抱歉,任务不存在.</small></h1>
|
||||||
<h1>任务调度中心<small>任务CODE管理</small></h1>
|
</section>
|
||||||
</section>
|
</div>
|
||||||
|
</div>
|
||||||
|
<#else>
|
||||||
|
<div class="wrapper">
|
||||||
|
|
||||||
<!-- Main content -->
|
<div class="content-wrapper">
|
||||||
<section class="content">
|
<!-- Content Header (Page header) -->
|
||||||
<div class="row">
|
<section class="content-header">
|
||||||
<div class="col-xs-4">
|
<h1>任务调度中心<small>任务GLUE管理</small></h1>
|
||||||
<div class="input-group margin">
|
</section>
|
||||||
<div class="input-group-btn">
|
<!-- Main content -->
|
||||||
<button type="button" class="btn btn-info">版本回溯</button>
|
<section class="content">
|
||||||
</div>
|
<div class="row">
|
||||||
<select class="form-control" id="jobGroup" >
|
<div class="col-xs-4">
|
||||||
<option value="999" >逻辑调整版本C</option>
|
<div class="input-group margin">
|
||||||
<option value="999" >逻辑调整版本B</option>
|
<div class="input-group-btn">
|
||||||
<option value="999" >逻辑调整版本A</option>
|
<button type="button" class="btn btn-info">版本回溯</button>
|
||||||
<option value="999" >代码初始化</option>
|
</div>
|
||||||
</select>
|
<select class="form-control" id="glue_version" >
|
||||||
</div>
|
<option value="glue_now" >${jobInfo.glueRemark}【线上】</option>
|
||||||
</div>
|
<#if jobLogGlues?exists && jobLogGlues?size gt 0 >
|
||||||
<div class="col-xs-4">
|
<#list jobLogGlues as glue>
|
||||||
<div class="input-group margin">
|
<option value="glue_log_${glue.id}" >${glue.glueRemark}</option>
|
||||||
<div class="input-group-btn">
|
</#list>
|
||||||
<button type="button" class="btn btn-info">备注</button>
|
</#if>
|
||||||
</div>
|
</select>
|
||||||
<input type="text" class="form-control" id="codeRemark" value="${jobName}" autocomplete="on" >
|
|
||||||
</div>
|
<textarea id="glue_now" style="display:none;" >${jobInfo.glueSource}</textarea>
|
||||||
</div>
|
<#if jobLogGlues?exists && jobLogGlues?size gt 0 >
|
||||||
<div class="col-xs-2">
|
<#list jobLogGlues as glue>
|
||||||
<div class="input-group margin">
|
<textarea id="glue_log_${glue.id}" style="display:none;" >${glue.glueSource}</textarea>
|
||||||
<div class="input-group-btn">
|
</#list>
|
||||||
<button type="button" class="btn btn-primary" id="save" >保存</button>
|
</#if>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="col-xs-4">
|
||||||
|
<div class="input-group margin">
|
||||||
<div class="row">
|
<div class="input-group-btn">
|
||||||
<div class="col-xs-12">
|
<button type="button" class="btn btn-info">备注</button>
|
||||||
<div class="box callout callout-info">
|
</div>
|
||||||
<textarea id="codeSource" ></textarea>
|
<input type="text" class="form-control" id="glueRemark" value="${jobName}" autocomplete="on" >
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-2">
|
||||||
|
<div class="input-group margin">
|
||||||
|
<div class="input-group-btn">
|
||||||
|
<button type="button" class="btn btn-primary" id="save" >保存</button>
|
||||||
|
</div>
|
||||||
|
<div class="input-group-btn">
|
||||||
|
<button type="button" class="btn btn-default" id="demoCode_btn" >DEMO</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-12">
|
||||||
|
<div class="box callout callout-info">
|
||||||
|
<textarea id="glueSource" ></textarea>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</section>
|
||||||
</section>
|
</div>
|
||||||
|
<!-- footer -->
|
||||||
|
<@netCommon.commonFooter />
|
||||||
</div>
|
</div>
|
||||||
<!-- footer -->
|
|
||||||
<@netCommon.commonFooter />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<textarea id="demoCode" style="display:none;" >
|
<textarea id="demoCode" style="display:none;" >
|
||||||
package com.xxl.job.service.handler;
|
package com.xxl.job.service.handler;
|
||||||
|
@ -83,11 +104,7 @@ public class DemoJobHandler extends IJobHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JobHandleStatus handle(String... params) throws Exception {
|
public JobHandleStatus handle(String... params) throws Exception {
|
||||||
logger.info(" ... params:" + params);
|
logger.info("demo run success...");
|
||||||
for (int i = 0; i < 5; i++) {
|
|
||||||
TimeUnit.SECONDS.sleep(1);
|
|
||||||
logger.info("handler run:{}", i);
|
|
||||||
}
|
|
||||||
return JobHandleStatus.SUCCESS;
|
return JobHandleStatus.SUCCESS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -100,8 +117,11 @@ public class DemoJobHandler extends IJobHandler {
|
||||||
<script src="${request.contextPath}/static/plugins/codemirror/addon/hint/show-hint.js"></script>
|
<script src="${request.contextPath}/static/plugins/codemirror/addon/hint/show-hint.js"></script>
|
||||||
<script src="${request.contextPath}/static/plugins/codemirror/addon/hint/anyword-hint.js"></script>
|
<script src="${request.contextPath}/static/plugins/codemirror/addon/hint/anyword-hint.js"></script>
|
||||||
<script>
|
<script>
|
||||||
var id = ${id!-1};
|
var jobGroup = '${jobInfo.jobGroup}';
|
||||||
|
var jobName = '${jobInfo.jobName}';
|
||||||
</script>
|
</script>
|
||||||
<script src="${request.contextPath}/static/js/jobcode.index.1.js"></script>
|
<script src="${request.contextPath}/static/js/jobcode.index.1.js"></script>
|
||||||
|
|
||||||
|
</#if>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -1,12 +1,23 @@
|
||||||
$(function() {
|
$(function() {
|
||||||
|
|
||||||
// init code editor
|
// init code editor
|
||||||
var codeEditor = CodeMirror.fromTextArea(document.getElementById("codeSource"), {
|
var codeEditor = CodeMirror.fromTextArea(document.getElementById("glueSource"), {
|
||||||
mode : "text/x-java",
|
mode : "text/x-java",
|
||||||
lineNumbers : true,
|
lineNumbers : true,
|
||||||
matchBrackets : true
|
matchBrackets : true
|
||||||
});
|
});
|
||||||
codeEditor.setValue( $("#demoCode").val() );
|
codeEditor.setValue( $("#glue_now").val() );
|
||||||
|
|
||||||
|
// code change
|
||||||
|
$("#glue_version").change(function(){
|
||||||
|
var temp = $( "#" + $(this).val() ).val();
|
||||||
|
codeEditor.setValue( temp );
|
||||||
|
});
|
||||||
|
|
||||||
|
// democode
|
||||||
|
$("#demoCode_btn").click(function() {
|
||||||
|
codeEditor.setValue( $("#demoCode").val() );
|
||||||
|
});
|
||||||
|
|
||||||
// editor height
|
// editor height
|
||||||
var height = Math.max(document.documentElement.clientHeight, document.body.offsetHeight);
|
var height = Math.max(document.documentElement.clientHeight, document.body.offsetHeight);
|
||||||
|
@ -14,14 +25,14 @@ $(function() {
|
||||||
|
|
||||||
// code source save
|
// code source save
|
||||||
$("#save").click(function() {
|
$("#save").click(function() {
|
||||||
var codeSource = codeEditor.getValue();
|
var glueSource = codeEditor.getValue();
|
||||||
var codeRemark = $("#codeRemark").val();
|
var glueRemark = $("#glueRemark").val();
|
||||||
|
|
||||||
if (!codeRemark) {
|
if (!glueRemark) {
|
||||||
ComAlert.show(2, "请输入备注");
|
ComAlert.show(2, "请输入备注");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (codeRemark.length < 6|| codeRemark.length > 100) {
|
if (glueRemark.length < 6|| glueRemark.length > 100) {
|
||||||
ComAlert.show(2, "备注长度应该在6至100之间");
|
ComAlert.show(2, "备注长度应该在6至100之间");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -31,9 +42,10 @@ $(function() {
|
||||||
type : 'POST',
|
type : 'POST',
|
||||||
url : base_url + '/jobcode/save',
|
url : base_url + '/jobcode/save',
|
||||||
data : {
|
data : {
|
||||||
'jobInfo.id' : id,
|
'jobGroup' : jobGroup,
|
||||||
'jobInfo.codeSource' : codeSource,
|
'jobName' : jobName,
|
||||||
'jobInfo.codeRemark' : codeRemark
|
'glueSource' : glueSource,
|
||||||
|
'glueRemark' : glueRemark
|
||||||
},
|
},
|
||||||
dataType : "json",
|
dataType : "json",
|
||||||
success : function(data){
|
success : function(data){
|
||||||
|
@ -43,7 +55,7 @@ $(function() {
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
ComAlert.alert(data.msg);
|
ComAlert.show(2, data.msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -92,7 +92,7 @@ $(function() {
|
||||||
// log url
|
// log url
|
||||||
var codeHtml = "";
|
var codeHtml = "";
|
||||||
if(row.glueSwitch != 0){
|
if(row.glueSwitch != 0){
|
||||||
var codeUrl = base_url +'/jobcode?id='+ row.id;
|
var codeUrl = base_url +'/jobcode?jobGroup='+ row.jobGroup +'&jobName='+ row.jobName;
|
||||||
codeHtml = '<button class="btn btn-warning btn-xs" type="button" onclick="javascript:window.open(\'' + codeUrl + '\')" >GLUE</button> '
|
codeHtml = '<button class="btn btn-warning btn-xs" type="button" onclick="javascript:window.open(\'' + codeUrl + '\')" >GLUE</button> '
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue