定时任务微服优化

yun-zuoyi
yunhao.wang 6 years ago
parent fd74559fd8
commit b2873e80ae

@ -23,20 +23,10 @@ public interface ISysTaskPlanService {
/**
*
* @param sysTaskPlan
* @param sysTaskCycle
* @param sysTask
* @return
*/
@ApiOperation(value = "新增任务计划",notes = "新增任务计划")
SysTaskPlan insertSysTaskPlan(SysTaskPlan sysTaskPlan, SysTaskCycle sysTaskCycle, SysTask sysTask);
/**
*
* @param sysTaskPlan
* @param sysTaskCycle
*/
@ApiOperation(value = "修改任务计划",notes = "修改任务计划")
void updateSysTaskPlan(SysTaskPlan sysTaskPlan, SysTaskCycle sysTaskCycle);
SysTaskPlan insertSysTaskPlan(SysTaskPlan sysTaskPlan);
/**
*
@ -79,13 +69,6 @@ public interface ISysTaskPlanService {
ListPager querySysTaskPlanByPager(SysTaskPlan sysTaskPlan, Pager pager);
/**
*
* @param sysTaskPlan
*/
@ApiOperation(value = "立即执行任务计划",notes = "立即执行任务计划")
void executeSysTaskPlan(SysTaskPlan sysTaskPlan);
/**
*
* @param name
* @param groupName
@ -107,12 +90,4 @@ public interface ISysTaskPlanService {
*/
@ApiOperation(value = "修改任务计划信息",notes = "修改任务计划信息不会更新quartz数据库")
void updateSysTaskPlan(SysTaskPlan sysTaskPlan);
/**
*
* @param ids
*/
@ApiOperation(value = "批量删除任务计划信息",notes = "批量删除任务计划信息")
void deleteSysTaskPlanByIds(Long[] ids);
}

@ -0,0 +1,21 @@
package cn.estsh.i3plus.core.apiservice.controller.base;
import cn.estsh.i3plus.platform.common.util.PlatformConstWords;
import cn.estsh.i3plus.pojo.base.bean.BaseConstWords;
import cn.estsh.impp.framework.base.controller.BaseCommonController;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description :
* @Reference :
* @Author : yunhao
* @CreateDate : 2019-03-20 20:07
* @Modify:
**/
@RestController
@Api(description = "通用功能服务")
@RequestMapping(PlatformConstWords.BASE_URL +"/common")
public class CoreCommonController extends BaseCommonController {
}

@ -1,17 +1,22 @@
package cn.estsh.i3plus.core.apiservice.controller.busi;
import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskService;
import cn.estsh.i3plus.icloud.wms.sdk.IWmsCommonCloud;
import cn.estsh.i3plus.platform.common.tool.StringTool;
import cn.estsh.i3plus.platform.common.util.PlatformConstWords;
import cn.estsh.i3plus.pojo.base.bean.BaseResultBean;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.platform.bean.SysTask;
import cn.estsh.impp.framework.base.controller.CoreBaseController;
import cn.estsh.impp.framework.base.service.CommonServiceImpl;
import cn.estsh.impp.framework.base.service.ICommonService;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum;
import cn.estsh.impp.framework.boot.quartz.IQuartzJobService;
import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import io.swagger.annotations.Api;
@ -40,6 +45,24 @@ public class SysTaskController extends CoreBaseController {
@Autowired
private ISysTaskService sysTaskService;
@Autowired
private CommonServiceImpl coreCommonService;
@Autowired
private IWmsCommonCloud wmsCommonCloud;
private ICommonService getCommonService(int softType){
ICommonService commonService = coreCommonService;
if(softType == CommonEnumUtil.SOFT_TYPE.CORE.getValue()){
//平台定时任务
commonService = coreCommonService;
}else if(softType == CommonEnumUtil.SOFT_TYPE.WMS.getValue()){
commonService = wmsCommonCloud;
}
return commonService;
}
@PostMapping(value = "/insert")
@ApiOperation(value = "添加任务", notes = "添加任务")
public ResultBean insertSysTask(SysTask sysTask) {
@ -47,16 +70,23 @@ public class SysTaskController extends CoreBaseController {
// 数据校验
ValidatorBean.beginValid(sysTask)
.notNull("name", sysTask.getName())
.notNull("taskSoftType", sysTask.getTaskSoftType())
.notNull("taskPackage", sysTask.getTaskPackage())
.notNull("taskClass", sysTask.getTaskClass());
// 类校验
Class.forName(sysTask.getTaskPackage() + "." + sysTask.getTaskClass());
BaseResultBean resultBean = getCommonService(sysTask.getTaskSoftType()).isExistClass(sysTask.getTaskPackage(), sysTask.getTaskClass());
if(!resultBean.isSuccess()){
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("任务类不存在")
.setErrorSolution("请重新输入")
.build();
}
sysTaskService.insertSysTask(sysTask);
return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(sysTask);
} catch (ClassNotFoundException e) {
return ResultBean.fail("任务类不存在:" + sysTask.getTaskPackage() + "." + sysTask.getTaskClass());
} catch (ImppBusiException busExcep) {
return ResultBean.fail(busExcep);
} catch (Exception e) {
@ -71,6 +101,7 @@ public class SysTaskController extends CoreBaseController {
// 数据校验
ValidatorBean.beginValid(sysTask)
.notNull("name", sysTask.getName())
.notNull("taskSoftType", sysTask.getTaskSoftType())
.notNull("taskPackage", sysTask.getTaskPackage())
.notNull("taskClass", sysTask.getTaskClass());

@ -2,6 +2,8 @@ package cn.estsh.i3plus.core.apiservice.controller.busi;
import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskCycleService;
import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskPlanService;
import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskService;
import cn.estsh.i3plus.icloud.wms.sdk.IWmsScheduleJobCloud;
import cn.estsh.i3plus.platform.common.tool.StringTool;
import cn.estsh.i3plus.platform.common.util.PlatformConstWords;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
@ -9,12 +11,15 @@ import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.platform.bean.SysRefTaskCyclePlan;
import cn.estsh.i3plus.pojo.platform.bean.SysTask;
import cn.estsh.i3plus.pojo.platform.bean.SysTaskCycle;
import cn.estsh.i3plus.pojo.platform.bean.SysTaskPlan;
import cn.estsh.impp.framework.base.controller.CoreBaseController;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum;
import cn.estsh.impp.framework.boot.quartz.IQuartzJobService;
import cn.estsh.impp.framework.boot.quartz.ScheduleTool;
import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import io.swagger.annotations.Api;
@ -46,6 +51,33 @@ public class SysTaskCycleController extends CoreBaseController{
@Autowired
private ISysTaskPlanService sysTaskPlanService;
@Autowired
private ISysTaskService sysTaskService;
/************ 微服定时任务 *********/
@Autowired
private ScheduleTool scheduleTool;
@Autowired
private IWmsScheduleJobCloud wmsScheduleJobCloud;
/**
*
* @param source CommonEnumUtil.SOFT_TYPE
* @return
*/
private IQuartzJobService getJobService(int source){
IQuartzJobService quartzJobService = scheduleTool;
if(source == CommonEnumUtil.SOFT_TYPE.CORE.getValue()){
//平台定时任务
quartzJobService = scheduleTool;
}else if(source == CommonEnumUtil.SOFT_TYPE.WMS.getValue()){
quartzJobService = wmsScheduleJobCloud;
}
return quartzJobService;
}
@PostMapping(value = "/insert")
@ApiOperation(value = "新增任务周期", notes = "任务周期")
public ResultBean insertSysTaskCycle(SysTaskCycle sysTaskCycle) {
@ -80,16 +112,20 @@ public class SysTaskCycleController extends CoreBaseController{
// 查询关联任务计划信息,并进行修改
List<SysRefTaskCyclePlan> taskCyclePlans = sysTaskCycleService.findRefTaskCyclePlanByCycleId(sysTaskCycle.getId());
SysTaskPlan sysTaskPlan;
SysTask sysTask;
for (SysRefTaskCyclePlan item: taskCyclePlans) {
sysTaskPlan = sysTaskPlanService.getSysTaskPlanByNameAndGroup(item.getTaskPlanName(),item.getTaskPlanGroupName());
sysTask = sysTaskService.getSysTaskById(sysTaskPlan.getTaskId());
sysTaskPlan.setTaskCycleNameRdd(sysTaskCycle.getName());
sysTaskPlan.setTaskCycleExpsRdd(sysTaskCycle.getTaskCycleExps());
sysTaskPlan.setTaskCycleStartDateTimeRdd(sysTaskCycle.getTaskCycleStartDatetime());
sysTaskPlan.setTaskCycleEndDateTimeRdd(sysTaskCycle.getTaskCycleEndDatetime());
sysTaskPlanService.updateSysTaskPlan(sysTaskPlan,sysTaskCycle);
// 更新关联模块的定时任务
getJobService(sysTaskPlan.getTaskSoftTypeRdd()).editTask(sysTask.getTaskPackage(),sysTask.getTaskClass(),sysTaskPlan.getName()
,sysTaskPlan.getGroupName(),sysTaskCycle.getTaskCycleExps(),sysTaskPlan.getTaskPlanDescription());
}
return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
}catch(ImppBusiException busExcep){
return ResultBean.fail(busExcep);

@ -3,11 +3,13 @@ package cn.estsh.i3plus.core.apiservice.controller.busi;
import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskCycleService;
import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskPlanService;
import cn.estsh.i3plus.core.api.iservice.busi.ISysTaskService;
import cn.estsh.i3plus.icloud.wms.sdk.IWmsScheduleJobCloud;
import cn.estsh.i3plus.platform.common.tool.StringTool;
import cn.estsh.i3plus.platform.common.util.PlatformConstWords;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.platform.bean.SysTask;
import cn.estsh.i3plus.pojo.platform.bean.SysTaskCycle;
@ -16,6 +18,9 @@ import cn.estsh.impp.framework.base.controller.CoreBaseController;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum;
import cn.estsh.impp.framework.boot.quartz.IQuartzJobService;
import cn.estsh.impp.framework.boot.quartz.ScheduleTool;
import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import io.swagger.annotations.Api;
@ -50,6 +55,30 @@ public class SysTaskPlanController extends CoreBaseController{
@Autowired
private ISysTaskService sysTaskService;
/************ 微服定时任务 *********/
@Autowired
private ScheduleTool scheduleTool;
@Autowired
private IWmsScheduleJobCloud wmsScheduleJobCloud;
/**
*
* @param source CommonEnumUtil.SOFT_TYPE
* @return
*/
private IQuartzJobService getJobService(int source){
IQuartzJobService quartzJobService = scheduleTool;
if(source == CommonEnumUtil.SOFT_TYPE.CORE.getValue()){
//平台定时任务
quartzJobService = scheduleTool;
}else if(source == CommonEnumUtil.SOFT_TYPE.WMS.getValue()){
quartzJobService = wmsScheduleJobCloud;
}
return quartzJobService;
}
@PostMapping(value = "/insert")
@ApiOperation(value = "新增任务计划", notes = "任务计划")
public ResultBean insertSysTaskTime(SysTaskPlan sysTaskPlan, Boolean isExecute) {
@ -71,18 +100,23 @@ public class SysTaskPlanController extends CoreBaseController{
// 设置冗余信息
sysTaskPlan.setTaskPlanExecNum(0);
sysTaskPlan.setTaskNameRdd(sysTask.getName());
sysTaskPlan.setTaskSoftTypeRdd(sysTask.getTaskSoftType());
sysTaskPlan.setTaskCycleNameRdd(sysTaskCycle.getName());
sysTaskPlan.setTaskCycleExpsRdd(sysTaskCycle.getTaskCycleExps());
sysTaskPlan.setTaskCycleStartDateTimeRdd(sysTaskCycle.getTaskCycleStartDatetime());
sysTaskPlan.setTaskCycleEndDateTimeRdd(sysTaskCycle.getTaskCycleEndDatetime());
sysTaskPlan.setTaskPlanStatus(CommonEnumUtil.DATA_STATUS.ENABLE.getValue());
sysTaskPlan = sysTaskPlanService.insertSysTaskPlan(sysTaskPlan,sysTaskCycle,sysTask);
sysTaskPlan = sysTaskPlanService.insertSysTaskPlan(sysTaskPlan);
// 添加至对应模块调度器中
getJobService(sysTaskPlan.getTaskSoftTypeRdd()).addTask(sysTask.getTaskPackage(),sysTask.getTaskClass(),sysTaskPlan.getName()
,sysTaskPlan.getGroupName(),sysTaskCycle.getTaskCycleExps(),sysTaskPlan.getTaskPlanDescription());
// 立即执行
if(isExecute != null && isExecute){
sysTaskPlanService.executeSysTaskPlan(sysTaskPlan);
getJobService(sysTaskPlan.getTaskSoftTypeRdd()).executeJob(sysTaskPlan.getName(),sysTaskPlan.getGroupName());
}
return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(sysTaskPlan);
}catch(ImppBusiException busExcep){
return ResultBean.fail(busExcep);
@ -110,14 +144,20 @@ public class SysTaskPlanController extends CoreBaseController{
ValidatorBean.checkNotNull(sysTask,"任务不存在");
sysTaskPlan.setTaskNameRdd(sysTask.getName());
sysTaskPlan.setTaskSoftTypeRdd(sysTask.getTaskSoftType());
sysTaskPlan.setTaskCycleNameRdd(sysTaskCycle.getName());
sysTaskPlan.setTaskCycleExpsRdd(sysTaskCycle.getTaskCycleExps());
sysTaskPlan.setTaskCycleStartDateTimeRdd(sysTaskCycle.getTaskCycleStartDatetime());
sysTaskPlan.setTaskCycleEndDateTimeRdd(sysTaskCycle.getTaskCycleEndDatetime());
sysTaskPlanService.updateSysTaskPlan(sysTaskPlan,sysTaskCycle);
sysTaskPlanService.updateSysTaskPlan(sysTaskPlan);
// 修改对应模块中的定时任务
getJobService(sysTaskPlan.getTaskSoftTypeRdd()).editTask(sysTask.getTaskPackage(),sysTask.getTaskClass(),sysTaskPlan.getName()
,sysTaskPlan.getGroupName(),sysTaskCycle.getTaskCycleExps(),sysTaskPlan.getTaskPlanDescription());
if(isExecute != null && isExecute){
sysTaskPlanService.executeSysTaskPlan(sysTaskPlan);
getJobService(sysTaskPlan.getTaskSoftTypeRdd()).executeJob(sysTaskPlan.getName(),sysTaskPlan.getGroupName());
}
return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(sysTaskPlan);
}catch(ImppBusiException busExcep){
@ -133,8 +173,12 @@ public class SysTaskPlanController extends CoreBaseController{
try {
// 数据校验
ValidatorBean.checkNotNull(id, "任务计划id 不能为空");
SysTaskPlan sysTaskPlan = sysTaskPlanService.getSysTaskPlanById(Long.parseLong(id));
ValidatorBean.checkNotNull(sysTaskPlan, "定时任务计划不存在");
sysTaskPlanService.deleteSysTaskPlanById(Long.parseLong(id));
getJobService(sysTaskPlan.getTaskSoftTypeRdd()).deleteTask(sysTaskPlan.getName(),sysTaskPlan.getGroupName());
return ResultBean.success().setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
}catch(ImppBusiException busExcep){
return ResultBean.fail(busExcep);
@ -163,12 +207,10 @@ public class SysTaskPlanController extends CoreBaseController{
// 数据校验
ValidatorBean.checkNotNull(id, "任务计划id 不能为空");
SysTaskPlan taskTime = sysTaskPlanService.getSysTaskPlanById(Long.parseLong(id));
if (taskTime != null) {
return ResultBean.success("操作成功").setResultObject(taskTime).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
}else {
return ResultBean.fail("任务计划不存在").setCode(ResourceEnumUtil.MESSAGE.EMPTY.getCode());
}
SysTaskPlan sysTaskPlan = sysTaskPlanService.getSysTaskPlanById(Long.parseLong(id));
ValidatorBean.checkNotNull(sysTaskPlan, "定时任务计划不存在");
return ResultBean.success("操作成功").setResultObject(sysTaskPlan).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
}catch(ImppBusiException busExcep){
return ResultBean.fail(busExcep);
}catch(Exception e){
@ -184,7 +226,17 @@ public class SysTaskPlanController extends CoreBaseController{
ValidatorBean.checkNotNull(idStr, "id 不能为空");
ValidatorBean.checkNotZero(status, "状态不能为空");
SysTaskPlan sysTaskPlan = sysTaskPlanService.getSysTaskPlanById(Long.parseLong(idStr));
ValidatorBean.checkNotNull(sysTaskPlan, "定时任务计划不存在");
sysTaskPlanService.updateSysTaskPlanStatus(Long.parseLong(idStr),status,AuthUtil.getSessionUser());
// 停止或启用对应模块中的定时任务
if(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == status.intValue()){
getJobService(sysTaskPlan.getTaskSoftTypeRdd()).pauseJob(sysTaskPlan.getName(),sysTaskPlan.getGroupName());
}else if(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == status.intValue()){
getJobService(sysTaskPlan.getTaskSoftTypeRdd()).resumeJob(sysTaskPlan.getName(),sysTaskPlan.getGroupName());
}
return new ResultBean(true);
}catch(ImppBusiException busExcep){
return ResultBean.fail(busExcep);
@ -214,24 +266,10 @@ public class SysTaskPlanController extends CoreBaseController{
ValidatorBean.checkNotNull(id, "任务计划id 不能为空");
SysTaskPlan sysTaskPlan = sysTaskPlanService.getSysTaskPlanById(Long.parseLong(id));
sysTaskPlanService.executeSysTaskPlan(sysTaskPlan);
return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
}catch(ImppBusiException busExcep){
return ResultBean.fail(busExcep);
}catch(Exception e){
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@DeleteMapping("/batch-delete")
@ApiOperation(value = "根据id批量删除任务计划",notes = "根据id批量删除任务计划")
public ResultBean deleteSysTaskPlanByIds(String[] idsStr) {
try {
// 数据校验
ValidatorBean.checkNotNull(idsStr, "任务计划id 不能为空");
// 执行定时任务
getJobService(sysTaskPlan.getTaskSoftTypeRdd()).executeJob(sysTaskPlan.getName(),sysTaskPlan.getGroupName());
sysTaskPlanService.deleteSysTaskPlanByIds(StringTool.getArrayLong(idsStr));
return ResultBean.success().setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
}catch(ImppBusiException busExcep){
return ResultBean.fail(busExcep);
}catch(Exception e){

@ -5,7 +5,9 @@ import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.common.PagerHelper;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.platform.bean.*;
import cn.estsh.i3plus.pojo.platform.bean.SessionUser;
import cn.estsh.i3plus.pojo.platform.bean.SysRefTaskCyclePlan;
import cn.estsh.i3plus.pojo.platform.bean.SysTaskPlan;
import cn.estsh.i3plus.pojo.platform.platbean.SysLogTaskTime;
import cn.estsh.i3plus.pojo.platform.platrepositorymongo.SysLogTaskTimeRepository;
import cn.estsh.i3plus.pojo.platform.repository.SysRefTaskCyclePlanRepository;
@ -15,16 +17,12 @@ import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import io.swagger.annotations.ApiOperation;
import org.quartz.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
/**
@ -48,94 +46,35 @@ public class SysTaskPlanService implements ISysTaskPlanService {
@Autowired
private SysLogTaskTimeRepository sysLogTaskTimeRDao;
@Autowired
private Scheduler scheduler;
@Override
@ApiOperation(value = "新增任务计划", notes = "新增任务计划")
public SysTaskPlan insertSysTaskPlan(SysTaskPlan sysTaskPlan, SysTaskCycle sysTaskCycle, SysTask sysTask) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 唯一校验
JobKey jobKey = JobKey.jobKey(sysTaskPlan.getName(), sysTaskPlan.getGroupName());
TriggerKey triggerKey = TriggerKey.triggerKey(sysTaskPlan.getName(), sysTaskPlan.getGroupName());
if (sysTaskPlanRDao.isExitByProperty(new String[]{"name", "groupName"}, new String[]{sysTaskPlan.getName(), sysTaskPlan.getGroupName()})
|| scheduler.checkExists(jobKey) || scheduler.checkExists(triggerKey)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode())
.setErrorDetail("定时任务已存在")
.setErrorSolution("请重新输入任务名称和组名称")
.build();
}
sysTaskPlan = sysTaskPlanRDao.insert(sysTaskPlan);
SysRefTaskCyclePlan refTaskCyclePlan = new SysRefTaskCyclePlan();
refTaskCyclePlan.setTaskCycleId(sysTaskCycle.getId());
refTaskCyclePlan.setTaskPlanId(sysTaskPlan.getId());
refTaskCyclePlan.setTaskPlanName(sysTaskPlan.getName());
refTaskCyclePlan.setTaskPlanGroupName(sysTaskPlan.getGroupName());
// 添加表达式与触发器关系表
sysRefTaskCyclePlanRDao.insert(refTaskCyclePlan);
// 添加定时任务与触发器到quartz表中
CronScheduleBuilder schedBuilder = CronScheduleBuilder
.cronSchedule(sysTaskCycle.getTaskCycleExps())
.withMisfireHandlingInstructionDoNothing();
TriggerBuilder<CronTrigger> trigger = TriggerBuilder.newTrigger()
.withIdentity(triggerKey)
.withDescription(sysTaskCycle.getTaskCycleDescription())
.withSchedule(schedBuilder)
.startAt(sdf.parse(sysTaskCycle.getTaskCycleStartDatetime()));
if (sysTaskCycle.getTaskCycleEndDatetime() != null && sysTaskCycle.getTaskCycleEndDatetime().length() != 0) {
trigger = trigger.endAt(sdf.parse(sysTaskCycle.getTaskCycleEndDatetime()));
}
Class<? extends Job> clazz = (Class<? extends Job>) Class.forName(sysTask.getTaskPackage() + "." + sysTask.getTaskClass());
JobDetail jobDetail = JobBuilder.newJob(clazz).withIdentity(jobKey).withDescription(sysTaskPlan.getTaskPlanDescription()).build();
scheduler.scheduleJob(jobDetail, trigger.build());
} catch (SchedulerException e) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.TASK_EXCEPTION.getCode())
.setErrorDetail(e.getMessage())
.build();
} catch (ParseException e) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.TASK_EXCEPTION.getCode())
.setErrorDetail("表达式起止时间错误")
.setErrorSolution("请更改表达式起止时间")
.build();
} catch (ClassNotFoundException e) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.TASK_EXCEPTION.getCode())
.setErrorDetail("定时任务包名及类名不正确")
.setErrorSolution("请重新输入定时任务包名及类名")
.build();
} catch (RuntimeException e) {
String message;
if (e.getMessage().indexOf("CronExpression") == 0) {
message = "时间周期表达式错误";
} else {
message = e.getMessage();
}
public SysTaskPlan insertSysTaskPlan(SysTaskPlan sysTaskPlan) {
// 唯一校验
if (sysTaskPlanRDao.isExitByProperty(new String[]{"name", "groupName"}, new String[]{sysTaskPlan.getName(), sysTaskPlan.getGroupName()})) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.TASK_EXCEPTION.getCode())
.setErrorDetail(message)
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode())
.setErrorDetail("定时任务已存在")
.setErrorSolution("请重新输入任务名称和组名称")
.build();
}
sysTaskPlan = sysTaskPlanRDao.insert(sysTaskPlan);
SysRefTaskCyclePlan refTaskCyclePlan = new SysRefTaskCyclePlan();
refTaskCyclePlan.setTaskCycleId(sysTaskPlan.getTaskCycleId());
refTaskCyclePlan.setTaskPlanId(sysTaskPlan.getId());
refTaskCyclePlan.setTaskPlanName(sysTaskPlan.getName());
refTaskCyclePlan.setTaskPlanGroupName(sysTaskPlan.getGroupName());
// 添加表达式与触发器关系表
sysRefTaskCyclePlanRDao.insert(refTaskCyclePlan);
return sysTaskPlan;
}
@Override
@ApiOperation(value = "修改任务计划", notes = "修改任务计划")
public void updateSysTaskPlan(SysTaskPlan sysTaskPlan, SysTaskCycle sysTaskCycle) {
public void updateSysTaskPlan(SysTaskPlan sysTaskPlan) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SysTaskPlan oldSysTaskPlan = sysTaskPlanRDao.getById(sysTaskPlan.getId());
@ -150,54 +89,6 @@ public class SysTaskPlanService implements ISysTaskPlanService {
sysTaskPlan.setLastRunDateTime(oldSysTaskPlan.getLastRunDateTime());
sysTaskPlan.setTaskPlanStatus(oldSysTaskPlan.getTaskPlanStatus());
sysTaskPlanRDao.update(sysTaskPlan);
try {
TriggerKey triggerKey = TriggerKey.triggerKey(oldSysTaskPlan.getName(), oldSysTaskPlan.getGroupName());
if (!scheduler.checkExists(triggerKey)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("定时任务不存在")
.setErrorSolution("请重新选择")
.build();
}
// 添加定时任务与触发器到quartz表中
CronScheduleBuilder schedBuilder = CronScheduleBuilder
.cronSchedule(sysTaskCycle.getTaskCycleExps())
.withMisfireHandlingInstructionDoNothing();
TriggerBuilder<CronTrigger> trigger = TriggerBuilder.newTrigger()
.withIdentity(triggerKey)
.withDescription(sysTaskCycle.getTaskCycleDescription())
.withSchedule(schedBuilder)
.startAt(sdf.parse(sysTaskCycle.getTaskCycleStartDatetime()));
if (sysTaskCycle.getTaskCycleEndDatetime() != null && !"".equals(sysTaskCycle.getTaskCycleEndDatetime())) {
trigger = trigger.endAt(sdf.parse(sysTaskCycle.getTaskCycleEndDatetime()));
}
JobKey jobKey = new JobKey(sysTaskPlan.getName(), sysTaskPlan.getGroupName());
JobDetail jobDetail = scheduler.getJobDetail(jobKey);
jobDetail.getJobBuilder().withDescription(sysTaskPlan.getTaskPlanDescription());
HashSet<Trigger> triggerSet = new HashSet<>();
triggerSet.add(trigger.build());
scheduler.scheduleJob(jobDetail, triggerSet, true);
} catch (SchedulerException e) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.TASK_EXCEPTION.getCode())
.setErrorDetail(e.getMessage())
.build();
} catch (ParseException e) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.TASK_EXCEPTION.getCode())
.setErrorDetail("表达式起止时间错误")
.setErrorSolution("请更改表达式起止时间")
.build();
}
}
@Override
@ -208,60 +99,19 @@ public class SysTaskPlanService implements ISysTaskPlanService {
sysTaskPlan.setTaskPlanStatus(status);
sysTaskPlan.setModifyUser(user.getUserName());
sysTaskPlanRDao.update(sysTaskPlan);
try {
TriggerKey triggerKey = TriggerKey.triggerKey(sysTaskPlan.getName(), sysTaskPlan.getGroupName());
if (!scheduler.checkExists(triggerKey)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("定时任务不存在")
.setErrorSolution("请重新选择")
.build();
}
if (status == CommonEnumUtil.DATA_STATUS.ENABLE.getValue()) {
scheduler.resumeTrigger(triggerKey);
} else {
scheduler.pauseTrigger(triggerKey);
}
} catch (SchedulerException e) {
LOGGER.info("重新开始任务-->复杂调度" + e.getMessage());
e.printStackTrace();
}
}
@Override
@ApiOperation(value = "根据根据id删除数据")
public void deleteSysTaskPlanById(Long id) {
try {
SysTaskPlan sysTaskPlan = sysTaskPlanRDao.getById(id);
ValidatorBean.checkNotNull(sysTaskPlan, "定时任务不存在");
sysTaskPlanRDao.deleteById(id);
SysTaskPlan sysTaskPlan = sysTaskPlanRDao.getById(id);
ValidatorBean.checkNotNull(sysTaskPlan, "定时任务不存在");
// 删除关系表数据
sysRefTaskCyclePlanRDao.deleteByProperties(new String[]{"taskPlanName", "taskPlanGroupName"},
new Object[]{sysTaskPlan.getName(), sysTaskPlan.getGroupName()});
sysTaskPlanRDao.deleteById(id);
TriggerKey triggerKey = TriggerKey.triggerKey(sysTaskPlan.getName(), sysTaskPlan.getGroupName());
if (scheduler.checkExists(triggerKey)) {
scheduler.pauseTrigger(triggerKey);
scheduler.unscheduleJob(triggerKey);
} else {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("定时任务不存在")
.setErrorSolution("请重新选择")
.build();
}
} catch (SchedulerException e) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.TASK_EXCEPTION.getCode())
.build();
}
// 删除关系表数据
sysRefTaskCyclePlanRDao.deleteByProperties(new String[]{"taskPlanName", "taskPlanGroupName"},
new Object[]{sysTaskPlan.getName(), sysTaskPlan.getGroupName()});
}
@Override
@ -290,29 +140,6 @@ public class SysTaskPlanService implements ISysTaskPlanService {
}
@Override
@ApiOperation(value = "立即执行任务计划", notes = "立即执行任务计划")
public void executeSysTaskPlan(SysTaskPlan sysTaskPlan) {
JobKey jobKey = JobKey.jobKey(sysTaskPlan.getName(), sysTaskPlan.getGroupName());
try {
if (scheduler.checkExists(jobKey)) {
scheduler.triggerJob(jobKey);
} else {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("任务计划不存在")
.setErrorSolution("请重新选择任务计划")
.build();
}
} catch (SchedulerException e) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.TASK_EXCEPTION.getCode())
.build();
}
}
@Override
@ApiOperation(value = "查询任务计划", notes = "根据任务计划名称与组名称查询")
public SysTaskPlan getSysTaskPlanByNameAndGroup(String name, String groupName) {
List<SysTaskPlan> sysTaskPlanList = sysTaskPlanRDao.findByProperty(new String[]{"name", "groupName"}, new Object[]{name, groupName});
@ -327,60 +154,4 @@ public class SysTaskPlanService implements ISysTaskPlanService {
public void logInsertSysLogTaskTime(SysLogTaskTime sysLogTaskTime) {
sysLogTaskTimeRDao.insert(sysLogTaskTime);
}
@Override
@ApiOperation(value = "修改定时任务信息", notes = "修改定时任务信息不会更新quartz数据库")
public void updateSysTaskPlan(SysTaskPlan sysTaskPlan) {
sysTaskPlanRDao.update(sysTaskPlan);
}
@Override
@ApiOperation(value = "批量删除任务计划信息", notes = "批量删除任务计划信息")
public void deleteSysTaskPlanByIds(Long[] ids) {
try {
List<SysTaskPlan> sysTaskPlan = sysTaskPlanRDao.findByHqlWhere(CoreHqlPack.packHqlIds("id", ids));
List<TriggerKey> triggerKeyList = new ArrayList<>();
//数据校验
if (sysTaskPlan == null || sysTaskPlan.size() == 0) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("任务计划不存在")
.setErrorSolution("请重新选择任务计划")
.build();
} else {
for (int i = 0; i < sysTaskPlan.size(); i++) {
triggerKeyList.add(TriggerKey.triggerKey(sysTaskPlan.get(i).getName(), sysTaskPlan.get(i).getGroupName()));
}
}
sysTaskPlanRDao.deleteByIds(ids);
// 删除关系表数据
sysRefTaskCyclePlanRDao.deleteByPropertyIn("taskPlanId", ids);
// 检查定时人计划是否存在,并暂停
for (TriggerKey trigger : triggerKeyList) {
if (scheduler.checkExists(trigger)) {
scheduler.pauseTrigger(trigger);
} else {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail("定时任务不存在")
.setErrorSolution("请重新选择")
.build();
}
}
// 取消调度任务
scheduler.unscheduleJobs(triggerKeyList);
} catch (SchedulerException e) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.TASK_EXCEPTION.getCode())
.build();
}
}
}

Loading…
Cancel
Save