From 8474f4a569b758a1bf79a821626c0b841015fae2 Mon Sep 17 00:00:00 2001 From: "yunhao.wang" Date: Mon, 11 Mar 2019 19:21:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=89=B9=E9=87=8F=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E4=BB=BB=E5=8A=A1=E8=AE=A1=E5=88=92=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/iservice/busi/ISysTaskPlanService.java | 8 ++ .../controller/busi/SysTaskPlanController.java | 17 +++ .../serviceimpl/busi/SysTaskPlanService.java | 129 +++++++++++++++------ 3 files changed, 116 insertions(+), 38 deletions(-) diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskPlanService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskPlanService.java index 1fe4a4d..ae1f9f8 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskPlanService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysTaskPlanService.java @@ -107,4 +107,12 @@ public interface ISysTaskPlanService { */ @ApiOperation(value = "修改任务计划信息",notes = "修改任务计划信息,不会更新quartz数据库") void updateSysTaskPlan(SysTaskPlan sysTaskPlan); + + + /** + * 批量删除任务计划信息 + * @param ids + */ + @ApiOperation(value = "批量删除任务计划信息",notes = "批量删除任务计划信息") + void deleteSysTaskPlanByIds(Long[] ids); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java index d0b4fa2..904de23 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskPlanController.java @@ -3,6 +3,7 @@ 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.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; @@ -221,4 +222,20 @@ public class SysTaskPlanController extends CoreBaseController{ return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } + + @DeleteMapping("/batch-delete") + @ApiOperation(value = "根据id批量删除任务计划",notes = "根据id批量删除任务计划") + public ResultBean deleteSysTaskPlanByIds(String[] idsStr) { + try { + // 数据校验 + ValidatorBean.checkNotNull(idsStr, "任务计划id 不能为空"); + + sysTaskPlanService.deleteSysTaskPlanByIds(StringTool.getArrayLong(idsStr)); + return ResultBean.success().setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } } \ No newline at end of file diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskPlanService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskPlanService.java index 7b8f361..673d3c3 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskPlanService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysTaskPlanService.java @@ -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 sysTaskPlanList = sysTaskPlanRDao.findByProperty(new String[]{"name","groupName"},new Object[]{name,groupName}); - if (sysTaskPlanList != null && sysTaskPlanList.size() != 0){ + List 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 = sysTaskPlanRDao.findByHqlWhere(CoreHqlPack.packHqlIds("id", ids)); + List 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(); + } + } }