|
|
|
@ -23,6 +23,7 @@ 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;
|
|
|
|
|
|
|
|
|
@ -51,15 +52,15 @@ public class SysTaskPlanService implements ISysTaskPlanService {
|
|
|
|
|
private Scheduler scheduler;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@ApiOperation(value = "新增任务计划",notes = "新增任务计划")
|
|
|
|
|
public SysTaskPlan insertSysTaskPlan(SysTaskPlan sysTaskPlan, SysTaskCycle sysTaskCycle,SysTask sysTask){
|
|
|
|
|
@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)){
|
|
|
|
|
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())
|
|
|
|
@ -68,12 +69,14 @@ public class SysTaskPlanService implements ISysTaskPlanService {
|
|
|
|
|
.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());
|
|
|
|
|
|
|
|
|
|
sysTaskPlan = sysTaskPlanRDao.insert(sysTaskPlan);
|
|
|
|
|
// 添加表达式与触发器关系表
|
|
|
|
|
sysRefTaskCyclePlanRDao.insert(refTaskCyclePlan);
|
|
|
|
|
|
|
|
|
@ -86,7 +89,7 @@ public class SysTaskPlanService implements ISysTaskPlanService {
|
|
|
|
|
.withDescription(sysTaskCycle.getTaskCycleDescription())
|
|
|
|
|
.withSchedule(schedBuilder)
|
|
|
|
|
.startAt(sdf.parse(sysTaskCycle.getTaskCycleStartDatetime()));
|
|
|
|
|
if(sysTaskCycle.getTaskCycleEndDatetime() != null && sysTaskCycle.getTaskCycleEndDatetime().length() != 0){
|
|
|
|
|
if (sysTaskCycle.getTaskCycleEndDatetime() != null && sysTaskCycle.getTaskCycleEndDatetime().length() != 0) {
|
|
|
|
|
trigger = trigger.endAt(sdf.parse(sysTaskCycle.getTaskCycleEndDatetime()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -114,11 +117,11 @@ public class SysTaskPlanService implements ISysTaskPlanService {
|
|
|
|
|
.setErrorDetail("定时任务包名及类名不正确")
|
|
|
|
|
.setErrorSolution("请重新输入定时任务包名及类名")
|
|
|
|
|
.build();
|
|
|
|
|
} catch (RuntimeException e){
|
|
|
|
|
} catch (RuntimeException e) {
|
|
|
|
|
String message;
|
|
|
|
|
if(e.getMessage().indexOf("CronExpression") == 0){
|
|
|
|
|
if (e.getMessage().indexOf("CronExpression") == 0) {
|
|
|
|
|
message = "时间周期表达式错误";
|
|
|
|
|
}else {
|
|
|
|
|
} else {
|
|
|
|
|
message = e.getMessage();
|
|
|
|
|
}
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
@ -131,15 +134,15 @@ public class SysTaskPlanService implements ISysTaskPlanService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@ApiOperation(value = "修改任务计划",notes = "修改任务计划")
|
|
|
|
|
@ApiOperation(value = "修改任务计划", notes = "修改任务计划")
|
|
|
|
|
public void updateSysTaskPlan(SysTaskPlan sysTaskPlan, SysTaskCycle sysTaskCycle) {
|
|
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
|
|
|
|
SysTaskPlan oldSysTaskPlan = sysTaskPlanRDao.getById(sysTaskPlan.getId());
|
|
|
|
|
|
|
|
|
|
// 更新关系表
|
|
|
|
|
sysRefTaskCyclePlanRDao.updateByProperties(new String[]{"taskPlanName","taskPlanGroupName"},
|
|
|
|
|
new String[]{oldSysTaskPlan.getName(),oldSysTaskPlan.getGroupName()},
|
|
|
|
|
sysRefTaskCyclePlanRDao.updateByProperties(new String[]{"taskPlanName", "taskPlanGroupName"},
|
|
|
|
|
new String[]{oldSysTaskPlan.getName(), oldSysTaskPlan.getGroupName()},
|
|
|
|
|
"taskCycleId", oldSysTaskPlan.getTaskCycleId()
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
@ -149,7 +152,7 @@ public class SysTaskPlanService implements ISysTaskPlanService {
|
|
|
|
|
sysTaskPlanRDao.update(sysTaskPlan);
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
TriggerKey triggerKey = TriggerKey.triggerKey(oldSysTaskPlan.getName(),oldSysTaskPlan.getGroupName());
|
|
|
|
|
TriggerKey triggerKey = TriggerKey.triggerKey(oldSysTaskPlan.getName(), oldSysTaskPlan.getGroupName());
|
|
|
|
|
|
|
|
|
|
if (!scheduler.checkExists(triggerKey)) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
@ -169,7 +172,7 @@ public class SysTaskPlanService implements ISysTaskPlanService {
|
|
|
|
|
.withDescription(sysTaskCycle.getTaskCycleDescription())
|
|
|
|
|
.withSchedule(schedBuilder)
|
|
|
|
|
.startAt(sdf.parse(sysTaskCycle.getTaskCycleStartDatetime()));
|
|
|
|
|
if(sysTaskCycle.getTaskCycleEndDatetime() != null && !"".equals(sysTaskCycle.getTaskCycleEndDatetime())){
|
|
|
|
|
if (sysTaskCycle.getTaskCycleEndDatetime() != null && !"".equals(sysTaskCycle.getTaskCycleEndDatetime())) {
|
|
|
|
|
trigger = trigger.endAt(sdf.parse(sysTaskCycle.getTaskCycleEndDatetime()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -198,9 +201,9 @@ public class SysTaskPlanService implements ISysTaskPlanService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@ApiOperation(value = "修改任务计划状态",notes = "修改任务计划状态")
|
|
|
|
|
@ApiOperation(value = "修改任务计划状态", notes = "修改任务计划状态")
|
|
|
|
|
public void updateSysTaskPlanStatus(Long id, int status, SessionUser user) {
|
|
|
|
|
LOGGER.info("定时任务 SYS_MENU id:{} status:{} user:{}", id,status,user);
|
|
|
|
|
LOGGER.info("定时任务 SYS_MENU id:{} status:{} user:{}", id, status, user);
|
|
|
|
|
SysTaskPlan sysTaskPlan = sysTaskPlanRDao.getById(id);
|
|
|
|
|
sysTaskPlan.setTaskPlanStatus(status);
|
|
|
|
|
sysTaskPlan.setModifyUser(user.getUserName());
|
|
|
|
@ -217,7 +220,7 @@ public class SysTaskPlanService implements ISysTaskPlanService {
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (status == CommonEnumUtil.DATA_STATUS.ENABLE.getValue()){
|
|
|
|
|
if (status == CommonEnumUtil.DATA_STATUS.ENABLE.getValue()) {
|
|
|
|
|
scheduler.resumeTrigger(triggerKey);
|
|
|
|
|
} else {
|
|
|
|
|
scheduler.pauseTrigger(triggerKey);
|
|
|
|
@ -233,19 +236,19 @@ public class SysTaskPlanService implements ISysTaskPlanService {
|
|
|
|
|
public void deleteSysTaskPlanById(Long id) {
|
|
|
|
|
try {
|
|
|
|
|
SysTaskPlan sysTaskPlan = sysTaskPlanRDao.getById(id);
|
|
|
|
|
ValidatorBean.checkNotNull(sysTaskPlan,"定时任务不存在");
|
|
|
|
|
ValidatorBean.checkNotNull(sysTaskPlan, "定时任务不存在");
|
|
|
|
|
|
|
|
|
|
sysTaskPlanRDao.deleteById(id);
|
|
|
|
|
|
|
|
|
|
// 删除关系表数据
|
|
|
|
|
sysRefTaskCyclePlanRDao.deleteByProperties(new String[]{"taskPlanName","taskPlanGroupName"},
|
|
|
|
|
new Object[]{sysTaskPlan.getName(),sysTaskPlan.getGroupName()});
|
|
|
|
|
sysRefTaskCyclePlanRDao.deleteByProperties(new String[]{"taskPlanName", "taskPlanGroupName"},
|
|
|
|
|
new Object[]{sysTaskPlan.getName(), sysTaskPlan.getGroupName()});
|
|
|
|
|
|
|
|
|
|
TriggerKey triggerKey = TriggerKey.triggerKey(sysTaskPlan.getName(),sysTaskPlan.getGroupName());
|
|
|
|
|
if(scheduler.checkExists(triggerKey)){
|
|
|
|
|
TriggerKey triggerKey = TriggerKey.triggerKey(sysTaskPlan.getName(), sysTaskPlan.getGroupName());
|
|
|
|
|
if (scheduler.checkExists(triggerKey)) {
|
|
|
|
|
scheduler.pauseTrigger(triggerKey);
|
|
|
|
|
scheduler.unscheduleJob(triggerKey);
|
|
|
|
|
}else {
|
|
|
|
|
} else {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
|
|
|
|
@ -268,28 +271,28 @@ public class SysTaskPlanService implements ISysTaskPlanService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@ApiOperation(value = "根据id查询任务计划数据",notes = "根据id查询任务计划数据")
|
|
|
|
|
@ApiOperation(value = "根据id查询任务计划数据", notes = "根据id查询任务计划数据")
|
|
|
|
|
public SysTaskPlan getSysTaskPlanById(Long id) {
|
|
|
|
|
return sysTaskPlanRDao.getById(id);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@ApiOperation(value = "任务计划复杂查询,分页,排序",notes = "任务计划复杂查询,分页,排序")
|
|
|
|
|
@ApiOperation(value = "任务计划复杂查询,分页,排序", notes = "任务计划复杂查询,分页,排序")
|
|
|
|
|
public ListPager querySysTaskPlanByPager(SysTaskPlan sysTaskPlan, Pager pager) {
|
|
|
|
|
if(sysTaskPlan == null) {
|
|
|
|
|
if (sysTaskPlan == null) {
|
|
|
|
|
pager = PagerHelper.getPager(pager, sysTaskPlanRDao.listCount());
|
|
|
|
|
return new ListPager(sysTaskPlanRDao.listPager(pager),pager);
|
|
|
|
|
}else {
|
|
|
|
|
return new ListPager(sysTaskPlanRDao.listPager(pager), pager);
|
|
|
|
|
} else {
|
|
|
|
|
String hqlPack = CoreHqlPack.packHqlSysTaskPlan(sysTaskPlan);
|
|
|
|
|
pager = PagerHelper.getPager(pager, sysTaskPlanRDao.findByHqlWhereCount(hqlPack));
|
|
|
|
|
return new ListPager(sysTaskPlanRDao.findByHqlWherePage(hqlPack + sysTaskPlan.orderBy(),pager),pager);
|
|
|
|
|
return new ListPager(sysTaskPlanRDao.findByHqlWherePage(hqlPack + sysTaskPlan.orderBy(), pager), pager);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@ApiOperation(value = "立即执行任务计划",notes = "立即执行任务计划")
|
|
|
|
|
@ApiOperation(value = "立即执行任务计划", notes = "立即执行任务计划")
|
|
|
|
|
public void executeSysTaskPlan(SysTaskPlan sysTaskPlan) {
|
|
|
|
|
JobKey jobKey = JobKey.jobKey(sysTaskPlan.getName(),sysTaskPlan.getGroupName());
|
|
|
|
|
JobKey jobKey = JobKey.jobKey(sysTaskPlan.getName(), sysTaskPlan.getGroupName());
|
|
|
|
|
try {
|
|
|
|
|
if (scheduler.checkExists(jobKey)) {
|
|
|
|
|
scheduler.triggerJob(jobKey);
|
|
|
|
@ -310,24 +313,74 @@ public class SysTaskPlanService implements ISysTaskPlanService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@ApiOperation(value = "查询任务计划",notes = "根据任务计划名称与组名称查询")
|
|
|
|
|
@ApiOperation(value = "查询任务计划", notes = "根据任务计划名称与组名称查询")
|
|
|
|
|
public SysTaskPlan getSysTaskPlanByNameAndGroup(String name, String groupName) {
|
|
|
|
|
List<SysTaskPlan> sysTaskPlanList = sysTaskPlanRDao.findByProperty(new String[]{"name","groupName"},new Object[]{name,groupName});
|
|
|
|
|
if (sysTaskPlanList != null && sysTaskPlanList.size() != 0){
|
|
|
|
|
List<SysTaskPlan> sysTaskPlanList = sysTaskPlanRDao.findByProperty(new String[]{"name", "groupName"}, new Object[]{name, groupName});
|
|
|
|
|
if (sysTaskPlanList != null && sysTaskPlanList.size() != 0) {
|
|
|
|
|
return sysTaskPlanList.get(0);
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@ApiOperation(value = "添加定时任务执行日志",notes = "添加定时任务执行日志")
|
|
|
|
|
@ApiOperation(value = "添加定时任务执行日志", notes = "添加定时任务执行日志")
|
|
|
|
|
public void logInsertSysLogTaskTime(SysLogTaskTime sysLogTaskTime) {
|
|
|
|
|
sysLogTaskTimeRDao.insert(sysLogTaskTime);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@ApiOperation(value = "修改定时任务信息",notes = "修改定时任务信息,不会更新quartz数据库")
|
|
|
|
|
@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();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|