From b2873e80aee49106138c9d0531667e767ae59a01 Mon Sep 17 00:00:00 2001 From: "yunhao.wang" Date: Wed, 20 Mar 2019 21:51:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=E5=BE=AE?= =?UTF-8?q?=E6=9C=8D=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/iservice/busi/ISysTaskPlanService.java | 27 +- .../controller/base/CoreCommonController.java | 21 ++ .../controller/busi/SysTaskController.java | 37 ++- .../controller/busi/SysTaskCycleController.java | 40 ++- .../controller/busi/SysTaskPlanController.java | 94 +++++-- .../serviceimpl/busi/SysTaskPlanService.java | 283 ++------------------- 6 files changed, 187 insertions(+), 315 deletions(-) create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/CoreCommonController.java 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 ae1f9f8..7947167 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 @@ -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); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/CoreCommonController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/CoreCommonController.java new file mode 100644 index 0000000..8dda5a7 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/CoreCommonController.java @@ -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 { +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskController.java index ac35073..900a6de 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskController.java @@ -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()); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskCycleController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskCycleController.java index 29bfb02..e5e14ab 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskCycleController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysTaskCycleController.java @@ -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 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); 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 8f41740..ab6d03a 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,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){ 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 673d3c3..312a13b 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 @@ -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 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 clazz = (Class) 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 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 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 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 = 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(); - } - } }