package cn.lihu.jh.module.infra.controller.admin.job; import cn.lihu.jh.framework.apilog.core.annotation.ApiAccessLog; import cn.lihu.jh.framework.common.pojo.CommonResult; import cn.lihu.jh.framework.common.pojo.PageParam; import cn.lihu.jh.framework.common.pojo.PageResult; import cn.lihu.jh.framework.common.util.object.BeanUtils; import cn.lihu.jh.framework.excel.core.util.ExcelUtils; import cn.lihu.jh.framework.quartz.core.util.CronUtils; import cn.lihu.jh.module.infra.controller.admin.job.vo.job.JobPageReqVO; import cn.lihu.jh.module.infra.controller.admin.job.vo.job.JobRespVO; import cn.lihu.jh.module.infra.controller.admin.job.vo.job.JobSaveReqVO; import cn.lihu.jh.module.infra.dal.dataobject.job.JobDO; import cn.lihu.jh.module.infra.service.job.JobService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameters; import io.swagger.v3.oas.annotations.tags.Tag; import org.quartz.SchedulerException; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.IOException; import java.time.LocalDateTime; import java.util.Collections; import java.util.List; import static cn.lihu.jh.framework.apilog.core.enums.OperateTypeEnum.EXPORT; import static cn.lihu.jh.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - 定时任务") @RestController @RequestMapping("/infra/job") @Validated public class JobController { @Resource private JobService jobService; @PostMapping("/create") @Operation(summary = "创建定时任务") @PreAuthorize("@ss.hasPermission('infra:job:create')") public CommonResult createJob(@Valid @RequestBody JobSaveReqVO createReqVO) throws SchedulerException { return success(jobService.createJob(createReqVO)); } @PutMapping("/update") @Operation(summary = "更新定时任务") @PreAuthorize("@ss.hasPermission('infra:job:update')") public CommonResult updateJob(@Valid @RequestBody JobSaveReqVO updateReqVO) throws SchedulerException { jobService.updateJob(updateReqVO); return success(true); } @PutMapping("/update-status") @Operation(summary = "更新定时任务的状态") @Parameters({ @Parameter(name = "id", description = "编号", required = true, example = "1024"), @Parameter(name = "status", description = "状态", required = true, example = "1"), }) @PreAuthorize("@ss.hasPermission('infra:job:update')") public CommonResult updateJobStatus(@RequestParam(value = "id") Long id, @RequestParam("status") Integer status) throws SchedulerException { jobService.updateJobStatus(id, status); return success(true); } @DeleteMapping("/delete") @Operation(summary = "删除定时任务") @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('infra:job:delete')") public CommonResult deleteJob(@RequestParam("id") Long id) throws SchedulerException { jobService.deleteJob(id); return success(true); } @PutMapping("/trigger") @Operation(summary = "触发定时任务") @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('infra:job:trigger')") public CommonResult triggerJob(@RequestParam("id") Long id) throws SchedulerException { jobService.triggerJob(id); return success(true); } @PostMapping("/sync") @Operation(summary = "同步定时任务") @PreAuthorize("@ss.hasPermission('infra:job:create')") public CommonResult syncJob() throws SchedulerException { jobService.syncJob(); return success(true); } @GetMapping("/get") @Operation(summary = "获得定时任务") @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('infra:job:query')") public CommonResult getJob(@RequestParam("id") Long id) { JobDO job = jobService.getJob(id); return success(BeanUtils.toBean(job, JobRespVO.class)); } @GetMapping("/page") @Operation(summary = "获得定时任务分页") @PreAuthorize("@ss.hasPermission('infra:job:query')") public CommonResult> getJobPage(@Valid JobPageReqVO pageVO) { PageResult pageResult = jobService.getJobPage(pageVO); return success(BeanUtils.toBean(pageResult, JobRespVO.class)); } @GetMapping("/export-excel") @Operation(summary = "导出定时任务 Excel") @PreAuthorize("@ss.hasPermission('infra:job:export')") @ApiAccessLog(operateType = EXPORT) public void exportJobExcel(@Valid JobPageReqVO exportReqVO, HttpServletResponse response) throws IOException { exportReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); List list = jobService.getJobPage(exportReqVO).getList(); // 导出 Excel ExcelUtils.write(response, "定时任务.xls", "数据", JobRespVO.class, BeanUtils.toBean(list, JobRespVO.class)); } @GetMapping("/get_next_times") @Operation(summary = "获得定时任务的下 n 次执行时间") @Parameters({ @Parameter(name = "id", description = "编号", required = true, example = "1024"), @Parameter(name = "count", description = "数量", example = "5") }) @PreAuthorize("@ss.hasPermission('infra:job:query')") public CommonResult> getJobNextTimes( @RequestParam("id") Long id, @RequestParam(value = "count", required = false, defaultValue = "5") Integer count) { JobDO job = jobService.getJob(id); if (job == null) { return success(Collections.emptyList()); } return success(CronUtils.getNextTimes(job.getCronExpression(), count)); } }