diff --git a/udf-starter-scheduler-client/src/main/java/com/egridcloud/udf/scheduler/client/SchClientHandle.java b/udf-starter-scheduler-client/src/main/java/com/egridcloud/udf/scheduler/client/SchClientHandle.java index c8357f2..8f4fa95 100644 --- a/udf-starter-scheduler-client/src/main/java/com/egridcloud/udf/scheduler/client/SchClientHandle.java +++ b/udf-starter-scheduler-client/src/main/java/com/egridcloud/udf/scheduler/client/SchClientHandle.java @@ -63,7 +63,7 @@ public class SchClientHandle implements ApplicationContextAware { RmsJobResult result = new RmsJobResult(); result.setParam(param); result.setClientReceiveTime(receiveTime); - result.setFireInstanceId(param.getFireInstanceId()); + result.setId(param.getId()); //执行(并且记录开始和结束时间) result.setClientStartExecuteTime(new Date()); try { diff --git a/udf-starter-scheduler-client/src/main/java/com/egridcloud/udf/scheduler/client/TriggerType.java b/udf-starter-scheduler-client/src/main/java/com/egridcloud/udf/scheduler/client/TriggerType.java new file mode 100644 index 0000000..a306c6b --- /dev/null +++ b/udf-starter-scheduler-client/src/main/java/com/egridcloud/udf/scheduler/client/TriggerType.java @@ -0,0 +1,53 @@ +/** + * TriggerType.java + * Created at 2016-09-27 + * Created by wangkang + * Copyright (C) 2016 egridcloud.com, All rights reserved. + */ +package com.egridcloud.udf.scheduler.client; + +/** + * 描述 : TriggerType + * + * @author wangkang + * + */ +public enum TriggerType { + /** + * 描述 : 手动触发 + */ + MANUAL("manual"), + /** + * 描述 : 触发器触发 + */ + TRIGGER("trigger"); + + /** + *

+ * Field value: 参数值 + *

+ */ + private String value = null; + + /** + *

+ * Description: 构造函数 + *

+ * + * @param value 构造函数 + */ + private TriggerType(String value) { + this.value = value; + } + + /** + *

+ * Description: 放回int值 + *

+ * + * @return value 放回int值 + */ + public String value() { + return this.value; + } +} diff --git a/udf-starter-scheduler-client/src/main/java/com/egridcloud/udf/scheduler/client/domain/RmsJobParam.java b/udf-starter-scheduler-client/src/main/java/com/egridcloud/udf/scheduler/client/domain/RmsJobParam.java index 063e501..1cfca2d 100644 --- a/udf-starter-scheduler-client/src/main/java/com/egridcloud/udf/scheduler/client/domain/RmsJobParam.java +++ b/udf-starter-scheduler-client/src/main/java/com/egridcloud/udf/scheduler/client/domain/RmsJobParam.java @@ -26,12 +26,24 @@ public class RmsJobParam implements Serializable { */ private static final long serialVersionUID = 1L; + /** + * 描述 : 主键ID + */ + @ApiModelProperty(value = "主键ID", required = true, dataType = "string") + private String id; + /** * 描述 : 触发实例ID */ @ApiModelProperty(value = "触发实例ID", required = true, dataType = "string") private String fireInstanceId; + /** + * 描述 : 触发方式 + */ + @ApiModelProperty(value = "触发实例ID", required = true, dataType = "string") + private String triggerType; + /** * 描述 : bean名称 */ @@ -50,6 +62,42 @@ public class RmsJobParam implements Serializable { @ApiModelProperty(value = "作业参数", required = true, dataType = "object") private Map jobDataMap; //NOSONAR + /** + * 描述 : 获取triggerType + * + * @return the triggerType + */ + public String getTriggerType() { + return triggerType; + } + + /** + * 描述 : 设置triggerType + * + * @param triggerType the triggerType to set + */ + public void setTriggerType(String triggerType) { + this.triggerType = triggerType; + } + + /** + * 描述 : 获取id + * + * @return the id + */ + public String getId() { + return id; + } + + /** + * 描述 : 设置id + * + * @param id the id to set + */ + public void setId(String id) { + this.id = id; + } + /** * 描述 : 获取async * diff --git a/udf-starter-scheduler-client/src/main/java/com/egridcloud/udf/scheduler/client/domain/RmsJobResult.java b/udf-starter-scheduler-client/src/main/java/com/egridcloud/udf/scheduler/client/domain/RmsJobResult.java index e8b37dd..ddf40c0 100644 --- a/udf-starter-scheduler-client/src/main/java/com/egridcloud/udf/scheduler/client/domain/RmsJobResult.java +++ b/udf-starter-scheduler-client/src/main/java/com/egridcloud/udf/scheduler/client/domain/RmsJobResult.java @@ -27,10 +27,10 @@ public class RmsJobResult implements Serializable { private static final long serialVersionUID = 1L; /** - * 描述 : 执行ID + * 描述 : 主键ID */ - @ApiModelProperty(value = "执行ID", required = true, dataType = "string") - private String fireInstanceId; + @ApiModelProperty(value = "主键ID", required = true, dataType = "string") + private String id; /** * 描述 : 参数 @@ -177,21 +177,21 @@ public class RmsJobResult implements Serializable { } /** - * 描述 : 获取fireInstanceId + * 描述 : 获取id * - * @return the fireInstanceId + * @return the id */ - public String getFireInstanceId() { - return fireInstanceId; + public String getId() { + return id; } /** - * 描述 : 设置fireInstanceId + * 描述 : 设置id * - * @param fireInstanceId the fireInstanceId to set + * @param id the id to set */ - public void setFireInstanceId(String fireInstanceId) { - this.fireInstanceId = fireInstanceId; + public void setId(String id) { + this.id = id; } } diff --git a/udf-starter-scheduler-client/src/main/java/com/egridcloud/udf/scheduler/client/web/SchClientController.java b/udf-starter-scheduler-client/src/main/java/com/egridcloud/udf/scheduler/client/web/SchClientController.java index cd87701..a444783 100644 --- a/udf-starter-scheduler-client/src/main/java/com/egridcloud/udf/scheduler/client/web/SchClientController.java +++ b/udf-starter-scheduler-client/src/main/java/com/egridcloud/udf/scheduler/client/web/SchClientController.java @@ -41,7 +41,7 @@ public class SchClientController implements ISchClientController { RmsJobResult result = new RmsJobResult(); result.setParam(param); result.setClientReceiveTime(receiveTime); - result.setFireInstanceId(param.getFireInstanceId()); + result.setId(param.getId()); //执行(区分同步跟异步) if (param.getAsync()) { schClientHandle.asyncHandle(receiveTime, param); diff --git a/udf-starter-scheduler/src/main/java/com/egridcloud/udf/scheduler/job/RmsJob.java b/udf-starter-scheduler/src/main/java/com/egridcloud/udf/scheduler/job/RmsJob.java index 4ea711b..d123c24 100644 --- a/udf-starter-scheduler/src/main/java/com/egridcloud/udf/scheduler/job/RmsJob.java +++ b/udf-starter-scheduler/src/main/java/com/egridcloud/udf/scheduler/job/RmsJob.java @@ -6,6 +6,8 @@ */ package com.egridcloud.udf.scheduler.job; +import java.util.UUID; + import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.exception.ExceptionUtils; @@ -23,6 +25,7 @@ import com.egridcloud.udf.rms.Rms; import com.egridcloud.udf.scheduler.IRmsJobLog; import com.egridcloud.udf.scheduler.client.RmsJobStats; import com.egridcloud.udf.scheduler.client.SchException; +import com.egridcloud.udf.scheduler.client.TriggerType; import com.egridcloud.udf.scheduler.client.domain.RmsJobParam; import com.egridcloud.udf.scheduler.client.domain.RmsJobResult; @@ -45,26 +48,32 @@ public class RmsJob extends AbstractBaseJob { //从trigger中获得jobDataMap JobDataMap jobDataMap = jobExecutionContext.getTrigger().getJobDataMap(); //获得必要字段 + String triggerId = jobDataMap.getString("triggerId"); + triggerId = StringUtils.isBlank(triggerId) ? UUID.randomUUID().toString() : triggerId; + String triggerType = jobDataMap.getString("triggerType"); + triggerType = StringUtils.isBlank(triggerType) ? TriggerType.TRIGGER.value() : triggerType; String serviceCode = jobDataMap.getString("serviceCode"); String beanName = jobDataMap.getString("beanName"); Boolean async = jobDataMap.getBoolean("async"); - //校验 - if (StringUtils.isBlank(serviceCode)) { - throw new SchException("serviceCode can not be empty"); - } - if (StringUtils.isBlank(beanName)) { - throw new SchException("beanName can not be empty"); - } - //获得RMS - Rms rms = this.getApplicationContext().getBean(Rms.class); //封装请求参数 RmsJobParam rmsJobParam = new RmsJobParam(); + rmsJobParam.setId(triggerId); + rmsJobParam.setTriggerType(triggerType); rmsJobParam.setFireInstanceId(jobExecutionContext.getFireInstanceId()); rmsJobParam.setBeanName(beanName); rmsJobParam.setAsync(async); rmsJobParam.setJobDataMap(jobDataMap.getWrappedMap()); - //请求 try { + //校验 + if (StringUtils.isBlank(serviceCode)) { + throw new SchException("serviceCode can not be empty"); + } + if (StringUtils.isBlank(rmsJobParam.getBeanName())) { + throw new SchException("beanName can not be empty"); + } + //获得RMS + Rms rms = this.getApplicationContext().getBean(Rms.class); + //请求 ResponseEntity> result = rms.call(serviceCode, rmsJobParam, null, new ParameterizedTypeReference>() { }, null); @@ -79,7 +88,7 @@ public class RmsJob extends AbstractBaseJob { //定义返回值 RmsJobResult result = new RmsJobResult(); result.setParam(rmsJobParam); - result.setFireInstanceId(rmsJobParam.getFireInstanceId()); + result.setId(rmsJobParam.getId()); result.setStats(RmsJobStats.ERROR.value()); result.setErrorMsg(ExceptionUtils.getStackTrace(e)); //记录 diff --git a/udf-starter-scheduler/src/main/java/com/egridcloud/udf/scheduler/service/JobService.java b/udf-starter-scheduler/src/main/java/com/egridcloud/udf/scheduler/service/JobService.java index a17485d..525ba25 100644 --- a/udf-starter-scheduler/src/main/java/com/egridcloud/udf/scheduler/service/JobService.java +++ b/udf-starter-scheduler/src/main/java/com/egridcloud/udf/scheduler/service/JobService.java @@ -136,21 +136,6 @@ public class JobService { this.s.getScheduler().deleteJob(jobKey); } - /** - * 描述 : 触发 - * - * @param jobCode 作业代码 - * @throws SchedulerException SchedulerException - */ - public void trigger(String jobCode) throws SchedulerException { - //获得作业元数据 - JobDetailMeta jobDetailMeta = getJobDetailMeta(jobCode); - // 设置jobkey - JobKey jobKey = getJobKey(jobDetailMeta); - // 触发 - this.s.getScheduler().triggerJob(jobKey); - } - /** * 描述 : 触发 * diff --git a/udf-starter-scheduler/src/main/java/com/egridcloud/udf/scheduler/web/IJobController.java b/udf-starter-scheduler/src/main/java/com/egridcloud/udf/scheduler/web/IJobController.java index 3c59ca8..a59d91d 100644 --- a/udf-starter-scheduler/src/main/java/com/egridcloud/udf/scheduler/web/IJobController.java +++ b/udf-starter-scheduler/src/main/java/com/egridcloud/udf/scheduler/web/IJobController.java @@ -6,8 +6,11 @@ */ package com.egridcloud.udf.scheduler.web; +import java.util.Map; + import org.quartz.SchedulerException; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @@ -94,4 +97,26 @@ public interface IJobController { public RestResponse remove(@PathVariable String jobCode) //NOSONAR throws SchedulerException; + /** + * 描述 : 触发作业 + * + * @param jobCode 作业代码 + * @param jobDataMap jobDataMap + * @return 操作结果 + * @throws SchedulerException SchedulerException + */ + @ApiOperation(value = "SCHEDULER_JOB_4", notes = "触发作业") + @ApiImplicitParams({ + @ApiImplicitParam(paramType = "header", name = "rmsApplicationName", value = "rms应用名称", + required = true, dataType = "string"), + @ApiImplicitParam(paramType = "header", name = "rmsSign", value = "rms认证秘钥", required = true, + dataType = "string"), + @ApiImplicitParam(paramType = "header", name = "rmsServiceCode", value = "rms接口编号", + required = true, dataType = "string"), + @ApiImplicitParam(paramType = "path", name = "jobCode", value = "作业代码", required = true, + dataType = "string") }) + @RequestMapping(value = "trigger/{jobCode}", method = RequestMethod.POST) + public RestResponse trigger(@PathVariable String jobCode, + @RequestBody Map jobDataMap) throws SchedulerException; + } diff --git a/udf-starter-scheduler/src/main/java/com/egridcloud/udf/scheduler/web/JobController.java b/udf-starter-scheduler/src/main/java/com/egridcloud/udf/scheduler/web/JobController.java index fb80840..3afd309 100644 --- a/udf-starter-scheduler/src/main/java/com/egridcloud/udf/scheduler/web/JobController.java +++ b/udf-starter-scheduler/src/main/java/com/egridcloud/udf/scheduler/web/JobController.java @@ -6,12 +6,19 @@ */ package com.egridcloud.udf.scheduler.web; +import java.util.Map; +import java.util.UUID; + +import org.apache.commons.collections4.MapUtils; +import org.quartz.JobDataMap; import org.quartz.SchedulerException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import com.egridcloud.udf.core.RestResponse; +import com.egridcloud.udf.scheduler.client.TriggerType; import com.egridcloud.udf.scheduler.service.JobService; /** @@ -49,4 +56,26 @@ public class JobController implements IJobController { return new RestResponse<>(); } + @Override + public RestResponse trigger(@PathVariable String jobCode, + @RequestBody Map jobDataMap) throws SchedulerException { + //生成id + String triggerId = UUID.randomUUID().toString(); + //生成jobDataMap + JobDataMap jdm = null; + //判断是否有jobDataMap + if (MapUtils.isEmpty(jobDataMap)) { + jdm = new JobDataMap(); + } else { + jdm = new JobDataMap(jobDataMap); + } + //添加参数 + jdm.put("triggerId", triggerId); + jdm.put("triggerType", TriggerType.MANUAL.value()); + //触发 + jobService.trigger(jobCode, jdm); + //返回 + return new RestResponse<>(triggerId); + } + }