diff --git a/yshop-system/src/main/java/co/yixiang/modules/quartz/config/JobRunner.java b/yshop-system/src/main/java/co/yixiang/modules/quartz/config/JobRunner.java index 7da2d9f3..091c4f52 100644 --- a/yshop-system/src/main/java/co/yixiang/modules/quartz/config/JobRunner.java +++ b/yshop-system/src/main/java/co/yixiang/modules/quartz/config/JobRunner.java @@ -1,8 +1,8 @@ package co.yixiang.modules.quartz.config; -import co.yixiang.modules.quartz.utils.QuartzManage; import co.yixiang.modules.quartz.domain.QuartzJob; -import co.yixiang.modules.quartz.repository.QuartzJobRepository; +import co.yixiang.modules.quartz.service.QuartzJobService; +import co.yixiang.modules.quartz.utils.QuartzManage; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; @@ -16,12 +16,12 @@ import java.util.List; @Component public class JobRunner implements ApplicationRunner { - private final QuartzJobRepository quartzJobRepository; + private final QuartzJobService quartzJobService; private final QuartzManage quartzManage; - public JobRunner(QuartzJobRepository quartzJobRepository, QuartzManage quartzManage) { - this.quartzJobRepository = quartzJobRepository; + public JobRunner(QuartzJobService quartzJobService, QuartzManage quartzManage) { + this.quartzJobService = quartzJobService; this.quartzManage = quartzManage; } @@ -32,7 +32,7 @@ public class JobRunner implements ApplicationRunner { @Override public void run(ApplicationArguments applicationArguments){ System.out.println("--------------------注入定时任务---------------------"); - List quartzJobs = quartzJobRepository.findByIsPauseIsFalse(); + List quartzJobs = quartzJobService.findByIsPauseIsFalse(); quartzJobs.forEach(quartzManage::addJob); System.out.println("--------------------定时任务注入完成---------------------"); } diff --git a/yshop-system/src/main/java/co/yixiang/modules/quartz/domain/QuartzJob.java b/yshop-system/src/main/java/co/yixiang/modules/quartz/domain/QuartzJob.java index bbfd64bb..6e5e063e 100644 --- a/yshop-system/src/main/java/co/yixiang/modules/quartz/domain/QuartzJob.java +++ b/yshop-system/src/main/java/co/yixiang/modules/quartz/domain/QuartzJob.java @@ -1,66 +1,74 @@ package co.yixiang.modules.quartz.domain; - -import lombok.Getter; -import lombok.Setter; -import org.hibernate.annotations.CreationTimestamp; +import com.baomidou.mybatisplus.annotation.TableLogic; +import lombok.Data; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; import javax.persistence.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; -import java.io.Serializable; +import javax.validation.constraints.*; import java.sql.Timestamp; +import java.io.Serializable; /** - * @author Zheng Jie - * @date 2019-01-07 - */ -@Getter -@Setter +* @author hupeng +* @date 2020-05-13 +*/ @Entity -@Table(name = "quartz_job") -public class QuartzJob implements Serializable { +@Data +@Table(name="quartz_job") +public class QuartzJob implements Serializable { public static final String JOB_KEY = "JOB_KEY"; + /** 定时任务ID */ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @NotNull(groups = {Update.class}) + @Column(name = "id") private Long id; - /** 定时器名称 */ + + /** Spring Bean名称 */ + @Column(name = "bean_name") + private String beanName; + + + /** cron 表达式 */ + @Column(name = "cron_expression") + private String cronExpression; + + + /** 状态:1暂停、0启用 */ + @Column(name = "is_pause") + private Boolean isPause; + + + /** 任务名称 */ @Column(name = "job_name") private String jobName; - /** Bean名称 */ - @Column(name = "bean_name") - @NotBlank - private String beanName; /** 方法名称 */ @Column(name = "method_name") - @NotBlank private String methodName; + /** 参数 */ @Column(name = "params") private String params; - /** cron表达式 */ - @Column(name = "cron_expression") - @NotBlank - private String cronExpression; - - /** 状态 */ - @Column(name = "is_pause") - private Boolean isPause = false; /** 备注 */ @Column(name = "remark") - @NotBlank private String remark; + + /** 创建日期 */ @Column(name = "create_time") - @CreationTimestamp + @TableField(fill= FieldFill.INSERT) private Timestamp createTime; - public @interface Update {} -} \ No newline at end of file + public void copy(QuartzJob source){ + BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); + } +} diff --git a/yshop-system/src/main/java/co/yixiang/modules/quartz/domain/QuartzLog.java b/yshop-system/src/main/java/co/yixiang/modules/quartz/domain/QuartzLog.java index 91b36cbf..81b76dfc 100644 --- a/yshop-system/src/main/java/co/yixiang/modules/quartz/domain/QuartzLog.java +++ b/yshop-system/src/main/java/co/yixiang/modules/quartz/domain/QuartzLog.java @@ -1,58 +1,77 @@ package co.yixiang.modules.quartz.domain; - +import com.baomidou.mybatisplus.annotation.TableLogic; import lombok.Data; -import org.hibernate.annotations.CreationTimestamp; - +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; import javax.persistence.*; -import java.io.Serializable; +import javax.validation.constraints.*; import java.sql.Timestamp; +import java.io.Serializable; /** - * @author Zheng Jie - * @date 2019-01-07 - */ +* @author hupeng +* @date 2020-05-13 +*/ @Entity @Data -@Table(name = "quartz_log") +@Table(name="quartz_log") public class QuartzLog implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") private Long id; + /** 任务名称 */ - @Column(name = "job_name") - private String jobName; - - /** Bean名称 */ @Column(name = "baen_name") - private String beanName; + private String baenName; - /** 方法名称 */ - @Column(name = "method_name") - private String methodName; - /** 参数 */ - @Column(name = "params") - private String params; + /** Bean名称 */ + @Column(name = "create_time") + @TableField(fill= FieldFill.INSERT) + private Timestamp createTime; + /** cron表达式 */ @Column(name = "cron_expression") private String cronExpression; + + /** 异常详细 */ + @Column(name = "exception_detail") + private String exceptionDetail; + + /** 状态 */ @Column(name = "is_success") private Boolean isSuccess; - /** 异常详细 */ - @Column(name = "exception_detail",columnDefinition = "text") - private String exceptionDetail; + + /** 任务名称 */ + @Column(name = "job_name") + private String jobName; + + + /** 方法名称 */ + @Column(name = "method_name") + private String methodName; + + + /** 参数 */ + @Column(name = "params") + private String params; + /** 耗时(毫秒) */ + @Column(name = "time") private Long time; - /** 创建日期 */ - @CreationTimestamp - @Column(name = "create_time") - private Timestamp createTime; + + public void copy(QuartzLog source){ + BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); + } } diff --git a/yshop-system/src/main/java/co/yixiang/modules/quartz/repository/QuartzJobRepository.java b/yshop-system/src/main/java/co/yixiang/modules/quartz/repository/QuartzJobRepository.java deleted file mode 100644 index 39b8eacd..00000000 --- a/yshop-system/src/main/java/co/yixiang/modules/quartz/repository/QuartzJobRepository.java +++ /dev/null @@ -1,19 +0,0 @@ -package co.yixiang.modules.quartz.repository; - -import co.yixiang.modules.quartz.domain.QuartzJob; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.JpaSpecificationExecutor; -import java.util.List; - -/** - * @author Zheng Jie - * @date 2019-01-07 - */ -public interface QuartzJobRepository extends JpaRepository, JpaSpecificationExecutor { - - /** - * 查询启用的任务 - * @return List - */ - List findByIsPauseIsFalse(); -} diff --git a/yshop-system/src/main/java/co/yixiang/modules/quartz/repository/QuartzLogRepository.java b/yshop-system/src/main/java/co/yixiang/modules/quartz/repository/QuartzLogRepository.java deleted file mode 100644 index 44ac0588..00000000 --- a/yshop-system/src/main/java/co/yixiang/modules/quartz/repository/QuartzLogRepository.java +++ /dev/null @@ -1,13 +0,0 @@ -package co.yixiang.modules.quartz.repository; - -import co.yixiang.modules.quartz.domain.QuartzLog; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.JpaSpecificationExecutor; - -/** - * @author Zheng Jie - * @date 2019-01-07 - */ -public interface QuartzLogRepository extends JpaRepository, JpaSpecificationExecutor { - -} diff --git a/yshop-system/src/main/java/co/yixiang/modules/quartz/rest/QuartzJobController.java b/yshop-system/src/main/java/co/yixiang/modules/quartz/rest/QuartzJobController.java index 69e47862..b2f5ce86 100644 --- a/yshop-system/src/main/java/co/yixiang/modules/quartz/rest/QuartzJobController.java +++ b/yshop-system/src/main/java/co/yixiang/modules/quartz/rest/QuartzJobController.java @@ -1,11 +1,18 @@ package co.yixiang.modules.quartz.rest; -import cn.hutool.core.util.StrUtil; import co.yixiang.aop.log.Log; +import co.yixiang.dozer.service.IGenerator; import co.yixiang.exception.BadRequestException; import co.yixiang.modules.quartz.domain.QuartzJob; import co.yixiang.modules.quartz.service.QuartzJobService; -import co.yixiang.modules.quartz.service.dto.JobQueryCriteria; +import co.yixiang.modules.quartz.service.QuartzLogService; +import co.yixiang.modules.quartz.service.dto.QuartzJobDto; +import co.yixiang.modules.quartz.service.dto.QuartzJobQueryCriteria; +import co.yixiang.modules.quartz.service.dto.QuartzLogDto; +import co.yixiang.modules.quartz.service.dto.QuartzLogQueryCriteria; +import co.yixiang.modules.shop.domain.YxUser; +import co.yixiang.modules.system.service.dto.JobQueryCriteria; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -18,7 +25,8 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.Set; +import java.util.ArrayList; +import java.util.Arrays; /** * @author Zheng Jie @@ -33,16 +41,22 @@ public class QuartzJobController { private static final String ENTITY_NAME = "quartzJob"; private final QuartzJobService quartzJobService; + private final IGenerator generator; + private final QuartzLogService quartzLogService; - public QuartzJobController(QuartzJobService quartzJobService) { + + + public QuartzJobController(QuartzJobService quartzJobService, IGenerator generator, QuartzLogService quartzLogService) { this.quartzJobService = quartzJobService; + this.generator = generator; + this.quartzLogService = quartzLogService; } @Log("查询定时任务") @ApiOperation("查询定时任务") @GetMapping @PreAuthorize("@el.check('admin','timing:list')") - public ResponseEntity getJobs(JobQueryCriteria criteria, Pageable pageable){ + public ResponseEntity getJobs(QuartzJobQueryCriteria criteria, Pageable pageable){ return new ResponseEntity<>(quartzJobService.queryAll(criteria,pageable), HttpStatus.OK); } @@ -50,23 +64,23 @@ public class QuartzJobController { @ApiOperation("导出任务数据") @GetMapping(value = "/download") @PreAuthorize("@el.check('admin','timing:list')") - public void download(HttpServletResponse response, JobQueryCriteria criteria) throws IOException { - quartzJobService.download(quartzJobService.queryAll(criteria), response); + public void download(HttpServletResponse response, QuartzJobQueryCriteria criteria) throws IOException { + quartzJobService.download(generator.convert(quartzJobService.queryAll(criteria),QuartzJobDto.class), response); } @Log("导出日志数据") @ApiOperation("导出日志数据") @GetMapping(value = "/logs/download") @PreAuthorize("@el.check('admin','timing:list')") - public void downloadLog(HttpServletResponse response, JobQueryCriteria criteria) throws IOException { - quartzJobService.downloadLog(quartzJobService.queryAllLog(criteria), response); + public void downloadLog(HttpServletResponse response, QuartzLogQueryCriteria criteria) throws IOException { + quartzLogService.download(generator.convert(quartzLogService.queryAll(criteria), QuartzLogDto.class), response); } @ApiOperation("查询任务执行日志") @GetMapping(value = "/logs") @PreAuthorize("@el.check('admin','timing:list')") - public ResponseEntity getJobLogs(JobQueryCriteria criteria, Pageable pageable){ - return new ResponseEntity<>(quartzJobService.queryAllLog(criteria,pageable), HttpStatus.OK); + public ResponseEntity getJobLogs(QuartzLogQueryCriteria criteria, Pageable pageable){ + return new ResponseEntity<>(quartzLogService.queryAll(criteria,pageable), HttpStatus.OK); } @Log("新增定时任务") @@ -78,16 +92,16 @@ public class QuartzJobController { if (resources.getId() != null) { throw new BadRequestException("A new "+ ENTITY_NAME +" cannot already have an ID"); } - return new ResponseEntity<>(quartzJobService.create(resources),HttpStatus.CREATED); + return new ResponseEntity<>(quartzJobService.save(resources),HttpStatus.CREATED); } @Log("修改定时任务") @ApiOperation("修改定时任务") @PutMapping @PreAuthorize("@el.check('admin','timing:edit')") - public ResponseEntity update(@Validated(QuartzJob.Update.class) @RequestBody QuartzJob resources){ + public ResponseEntity update(@Validated @RequestBody QuartzJob resources){ //if(StrUtil.isNotEmpty("22")) throw new BadRequestException("演示环境禁止操作"); - quartzJobService.update(resources); + quartzJobService.saveOrUpdate(resources); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @@ -97,7 +111,7 @@ public class QuartzJobController { @PreAuthorize("@el.check('admin','timing:edit')") public ResponseEntity updateIsPause(@PathVariable Long id){ //if(StrUtil.isNotEmpty("22")) throw new BadRequestException("演示环境禁止操作"); - quartzJobService.updateIsPause(quartzJobService.findById(id)); + quartzJobService.updateIsPause(quartzJobService.getOne(new QueryWrapper().eq("uid",id))); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @@ -107,7 +121,7 @@ public class QuartzJobController { @PreAuthorize("@el.check('admin','timing:edit')") public ResponseEntity execution(@PathVariable Long id){ //if(StrUtil.isNotEmpty("22")) throw new BadRequestException("演示环境禁止操作"); - quartzJobService.execution(quartzJobService.findById(id)); + quartzJobService.execution(quartzJobService.getOne(new QueryWrapper().eq("id",id))); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @@ -115,9 +129,9 @@ public class QuartzJobController { @ApiOperation("删除定时任务") @DeleteMapping @PreAuthorize("@el.check('admin','timing:del')") - public ResponseEntity delete(@RequestBody Set ids){ + public ResponseEntity delete(@RequestBody Integer[] ids){ //if(StrUtil.isNotEmpty("22")) throw new BadRequestException("演示环境禁止操作"); - quartzJobService.delete(ids); + quartzJobService.removeByIds(new ArrayList<>(Arrays.asList(ids))); return new ResponseEntity<>(HttpStatus.OK); } } diff --git a/yshop-system/src/main/java/co/yixiang/modules/quartz/service/QuartzJobService.java b/yshop-system/src/main/java/co/yixiang/modules/quartz/service/QuartzJobService.java index 29ed4bba..0779a75d 100644 --- a/yshop-system/src/main/java/co/yixiang/modules/quartz/service/QuartzJobService.java +++ b/yshop-system/src/main/java/co/yixiang/modules/quartz/service/QuartzJobService.java @@ -1,76 +1,43 @@ package co.yixiang.modules.quartz.service; - +import co.yixiang.common.service.BaseService; import co.yixiang.modules.quartz.domain.QuartzJob; -import co.yixiang.modules.quartz.domain.QuartzLog; -import co.yixiang.modules.quartz.service.dto.JobQueryCriteria; +import co.yixiang.modules.quartz.service.dto.QuartzJobDto; +import co.yixiang.modules.quartz.service.dto.QuartzJobQueryCriteria; import org.springframework.data.domain.Pageable; - -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; +import java.util.Map; import java.util.List; -import java.util.Set; +import java.io.IOException; +import javax.servlet.http.HttpServletResponse; /** - * @author Zheng Jie - * @date 2019-01-07 - */ -public interface QuartzJobService { +* @author hupeng +* @date 2020-05-13 +*/ +public interface QuartzJobService extends BaseService{ + +/** + * 查询数据分页 + * @param criteria 条件 + * @param pageable 分页参数 + * @return Map + */ + Map queryAll(QuartzJobQueryCriteria criteria, Pageable pageable); /** - * 分页查询 - * @param criteria 条件 - * @param pageable 分页参数 - * @return / - */ - Object queryAll(JobQueryCriteria criteria, Pageable pageable); + * 查询所有数据不分页 + * @param criteria 条件参数 + * @return List + */ + List queryAll(QuartzJobQueryCriteria criteria); /** - * 查询全部 - * @param criteria 条件 - * @return / - */ - List queryAll(JobQueryCriteria criteria); + * 导出数据 + * @param all 待导出的数据 + * @param response / + * @throws IOException / + */ + void download(List all, HttpServletResponse response) throws IOException; - /** - * 分页查询日志 - * @param criteria 条件 - * @param pageable 分页参数 - * @return / - */ - Object queryAllLog(JobQueryCriteria criteria, Pageable pageable); - - /** - * 查询全部 - * @param criteria 条件 - * @return / - */ - List queryAllLog(JobQueryCriteria criteria); - - /** - * 创建 - * @param resources / - * @return / - */ - QuartzJob create(QuartzJob resources); - - /** - * 编辑 - * @param resources / - */ - void update(QuartzJob resources); - - /** - * 删除任务 - * @param ids / - */ - void delete(Set ids); - - /** - * 根据ID查询 - * @param id ID - * @return / - */ - QuartzJob findById(Long id); /** * 更改定时任务状态 @@ -85,18 +52,8 @@ public interface QuartzJobService { void execution(QuartzJob quartzJob); /** - * 导出定时任务 - * @param queryAll 待导出的数据 - * @param response / - * @throws IOException / + * 查询启用的任务 + * @return List */ - void download(List queryAll, HttpServletResponse response) throws IOException; - - /** - * 导出定时任务日志 - * @param queryAllLog 待导出的数据 - * @param response / - * @throws IOException / - */ - void downloadLog(List queryAllLog, HttpServletResponse response) throws IOException; + List findByIsPauseIsFalse(); } diff --git a/yshop-system/src/main/java/co/yixiang/modules/quartz/service/QuartzLogService.java b/yshop-system/src/main/java/co/yixiang/modules/quartz/service/QuartzLogService.java new file mode 100644 index 00000000..18e7a251 --- /dev/null +++ b/yshop-system/src/main/java/co/yixiang/modules/quartz/service/QuartzLogService.java @@ -0,0 +1,40 @@ +package co.yixiang.modules.quartz.service; +import co.yixiang.common.service.BaseService; +import co.yixiang.modules.quartz.domain.QuartzLog; +import co.yixiang.modules.quartz.service.dto.QuartzLogDto; +import co.yixiang.modules.quartz.service.dto.QuartzLogQueryCriteria; +import org.springframework.data.domain.Pageable; +import java.util.Map; +import java.util.List; +import java.io.IOException; +import javax.servlet.http.HttpServletResponse; + +/** +* @author hupeng +* @date 2020-05-13 +*/ +public interface QuartzLogService extends BaseService{ + +/** + * 查询数据分页 + * @param criteria 条件 + * @param pageable 分页参数 + * @return Map + */ + Map queryAll(QuartzLogQueryCriteria criteria, Pageable pageable); + + /** + * 查询所有数据不分页 + * @param criteria 条件参数 + * @return List + */ + List queryAll(QuartzLogQueryCriteria criteria); + + /** + * 导出数据 + * @param all 待导出的数据 + * @param response / + * @throws IOException / + */ + void download(List all, HttpServletResponse response) throws IOException; +} diff --git a/yshop-system/src/main/java/co/yixiang/modules/quartz/service/dto/QuartzJobDto.java b/yshop-system/src/main/java/co/yixiang/modules/quartz/service/dto/QuartzJobDto.java new file mode 100644 index 00000000..dd03c4a7 --- /dev/null +++ b/yshop-system/src/main/java/co/yixiang/modules/quartz/service/dto/QuartzJobDto.java @@ -0,0 +1,41 @@ +package co.yixiang.modules.quartz.service.dto; + +import lombok.Data; +import java.sql.Timestamp; +import java.io.Serializable; + +/** +* @author hupeng +* @date 2020-05-13 +*/ +@Data +public class QuartzJobDto implements Serializable { + + /** 定时任务ID */ + private Long id; + + /** Bean名称 */ + private String beanName; + + /** cron 表达式 */ + private String cronExpression; + + /** 状态:1暂停、0启用 */ + private Boolean isPause; + + /** 任务名称 */ + private String jobName; + + /** 方法名称 */ + private String methodName; + + /** 参数 */ + private String params; + + /** 备注 */ + private String remark; + + /** 创建日期 */ + private Timestamp createTime; + +} diff --git a/yshop-system/src/main/java/co/yixiang/modules/quartz/service/dto/JobQueryCriteria.java b/yshop-system/src/main/java/co/yixiang/modules/quartz/service/dto/QuartzJobQueryCriteria.java similarity index 75% rename from yshop-system/src/main/java/co/yixiang/modules/quartz/service/dto/JobQueryCriteria.java rename to yshop-system/src/main/java/co/yixiang/modules/quartz/service/dto/QuartzJobQueryCriteria.java index 5783d48b..115d2cbc 100644 --- a/yshop-system/src/main/java/co/yixiang/modules/quartz/service/dto/JobQueryCriteria.java +++ b/yshop-system/src/main/java/co/yixiang/modules/quartz/service/dto/QuartzJobQueryCriteria.java @@ -1,17 +1,17 @@ package co.yixiang.modules.quartz.service.dto; -import co.yixiang.annotation.Query; import lombok.Data; import java.sql.Timestamp; import java.util.List; +import co.yixiang.annotation.Query; /** - * @author Zheng Jie - * @date 2019-6-4 10:33:02 - */ +* @author hupeng +* @date 2020-05-13 +*/ @Data -public class JobQueryCriteria { +public class QuartzJobQueryCriteria{ @Query(type = Query.Type.INNER_LIKE) private String jobName; @@ -19,6 +19,9 @@ public class JobQueryCriteria { @Query private Boolean isSuccess; + @Query + private Boolean isPause; + @Query(type = Query.Type.BETWEEN) private List createTime; } diff --git a/yshop-system/src/main/java/co/yixiang/modules/quartz/service/dto/QuartzLogDto.java b/yshop-system/src/main/java/co/yixiang/modules/quartz/service/dto/QuartzLogDto.java new file mode 100644 index 00000000..c76879fb --- /dev/null +++ b/yshop-system/src/main/java/co/yixiang/modules/quartz/service/dto/QuartzLogDto.java @@ -0,0 +1,40 @@ +package co.yixiang.modules.quartz.service.dto; + +import lombok.Data; +import java.sql.Timestamp; +import java.io.Serializable; + +/** +* @author hupeng +* @date 2020-05-13 +*/ +@Data +public class QuartzLogDto implements Serializable { + + /** 定时任务名称 */ + private String baenName; + + /** Bean名称 */ + private Timestamp createTime; + + /** cron表达式 */ + private String cronExpression; + + /** 异常详细 */ + private String exceptionDetail; + + /** 状态 */ + private Boolean isSuccess; + + /** 任务名称 */ + private String jobName; + + /** 方法名称 */ + private String methodName; + + /** 参数 */ + private String params; + + /** 耗时(毫秒) */ + private Long time; +} diff --git a/yshop-system/src/main/java/co/yixiang/modules/quartz/service/dto/QuartzLogQueryCriteria.java b/yshop-system/src/main/java/co/yixiang/modules/quartz/service/dto/QuartzLogQueryCriteria.java new file mode 100644 index 00000000..e072e296 --- /dev/null +++ b/yshop-system/src/main/java/co/yixiang/modules/quartz/service/dto/QuartzLogQueryCriteria.java @@ -0,0 +1,13 @@ +package co.yixiang.modules.quartz.service.dto; + +import lombok.Data; +import java.util.List; +import co.yixiang.annotation.Query; + +/** +* @author hupeng +* @date 2020-05-13 +*/ +@Data +public class QuartzLogQueryCriteria{ +} \ No newline at end of file diff --git a/yshop-system/src/main/java/co/yixiang/modules/quartz/service/impl/QuartzJobServiceImpl.java b/yshop-system/src/main/java/co/yixiang/modules/quartz/service/impl/QuartzJobServiceImpl.java index adf5a7f5..a8c49310 100644 --- a/yshop-system/src/main/java/co/yixiang/modules/quartz/service/impl/QuartzJobServiceImpl.java +++ b/yshop-system/src/main/java/co/yixiang/modules/quartz/service/impl/QuartzJobServiceImpl.java @@ -2,107 +2,110 @@ package co.yixiang.modules.quartz.service.impl; import co.yixiang.exception.BadRequestException; import co.yixiang.modules.quartz.domain.QuartzJob; -import co.yixiang.modules.quartz.domain.QuartzLog; -import co.yixiang.modules.quartz.service.QuartzJobService; -import co.yixiang.modules.quartz.service.dto.JobQueryCriteria; +import co.yixiang.common.service.impl.BaseServiceImpl; import co.yixiang.modules.quartz.utils.QuartzManage; -import co.yixiang.utils.FileUtil; -import co.yixiang.utils.PageUtil; -import co.yixiang.utils.QueryHelp; +import co.yixiang.modules.shop.service.YxSystemStoreService; +import lombok.AllArgsConstructor; +import co.yixiang.dozer.service.IGenerator; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import co.yixiang.common.utils.QueryHelpPlus; import co.yixiang.utils.ValidationUtil; -import co.yixiang.modules.quartz.repository.QuartzJobRepository; -import co.yixiang.modules.quartz.repository.QuartzLogRepository; -import org.quartz.CronExpression; -import org.springframework.cache.annotation.CacheConfig; -import org.springframework.cache.annotation.CacheEvict; -import org.springframework.cache.annotation.Cacheable; -import org.springframework.data.domain.Pageable; +import co.yixiang.utils.FileUtil; +import co.yixiang.modules.quartz.service.QuartzJobService; +import co.yixiang.modules.quartz.service.dto.QuartzJobDto; +import co.yixiang.modules.quartz.service.dto.QuartzJobQueryCriteria; +import co.yixiang.modules.quartz.service.mapper.QuartzJobMapper; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; - -import javax.servlet.http.HttpServletResponse; +// 默认不使用缓存 +//import org.springframework.cache.annotation.CacheConfig; +//import org.springframework.cache.annotation.CacheEvict; +//import org.springframework.cache.annotation.Cacheable; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import co.yixiang.utils.PageUtil; +import co.yixiang.utils.QueryHelp; +import java.util.List; +import java.util.Map; import java.io.IOException; -import java.util.*; +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.LinkedHashMap; /** - * @author Zheng Jie - * @date 2019-01-07 - */ -@Service(value = "quartzJobService") -@CacheConfig(cacheNames = "quartzJob") +* @author hupeng +* @date 2020-05-13 +*/ +@Service +@AllArgsConstructor +//@CacheConfig(cacheNames = "quartzJob") @Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class) -public class QuartzJobServiceImpl implements QuartzJobService { - - private final QuartzJobRepository quartzJobRepository; - - private final QuartzLogRepository quartzLogRepository; +public class QuartzJobServiceImpl extends BaseServiceImpl implements QuartzJobService { + private final IGenerator generator; private final QuartzManage quartzManage; - public QuartzJobServiceImpl(QuartzJobRepository quartzJobRepository, QuartzLogRepository quartzLogRepository, QuartzManage quartzManage) { - this.quartzJobRepository = quartzJobRepository; - this.quartzLogRepository = quartzLogRepository; - this.quartzManage = quartzManage; + @Override + //@Cacheable + public Map queryAll(QuartzJobQueryCriteria criteria, Pageable pageable) { + getPage(pageable); + PageInfo page = new PageInfo<>(queryAll(criteria)); + Map map = new LinkedHashMap<>(2); + map.put("content", generator.convert(page.getList(), QuartzJobDto.class)); + map.put("totalElements", page.getTotal()); + return map; } - @Override - @Cacheable - public Object queryAll(JobQueryCriteria criteria, Pageable pageable){ - return PageUtil.toPage(quartzJobRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable)); - } @Override - public Object queryAllLog(JobQueryCriteria criteria, Pageable pageable){ - return PageUtil.toPage(quartzLogRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable)); + //@Cacheable + public List queryAll(QuartzJobQueryCriteria criteria){ + return baseMapper.selectList(QueryHelpPlus.getPredicate(QuartzJob.class, criteria)); } - @Override - public List queryAll(JobQueryCriteria criteria) { - return quartzJobRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)); - } @Override - public List queryAllLog(JobQueryCriteria criteria) { - return quartzLogRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)); - } - - @Override - @Cacheable(key = "#p0") - public QuartzJob findById(Long id) { - QuartzJob quartzJob = quartzJobRepository.findById(id).orElseGet(QuartzJob::new); - ValidationUtil.isNull(quartzJob.getId(),"QuartzJob","id",id); - return quartzJob; - } - - @Override - @CacheEvict(allEntries = true) - @Transactional(rollbackFor = Exception.class) - public QuartzJob create(QuartzJob resources) { - if (!CronExpression.isValidExpression(resources.getCronExpression())){ - throw new BadRequestException("cron表达式格式错误"); + public void download(List all, HttpServletResponse response) throws IOException { + List> list = new ArrayList<>(); + for (QuartzJobDto quartzJob : all) { + Map map = new LinkedHashMap<>(); + map.put("Spring Bean名称", quartzJob.getBeanName()); + map.put("cron 表达式", quartzJob.getCronExpression()); + map.put("状态:1暂停、0启用", quartzJob.getIsPause()); + map.put("任务名称", quartzJob.getJobName()); + map.put("方法名称", quartzJob.getMethodName()); + map.put("参数", quartzJob.getParams()); + map.put("备注", quartzJob.getRemark()); + map.put("创建日期", quartzJob.getCreateTime()); + map.put("Spring Bean名称", quartzJob.getBeanName()); + map.put("cron 表达式", quartzJob.getCronExpression()); + map.put("状态:1暂停、0启用", quartzJob.getIsPause()); + map.put("任务名称", quartzJob.getJobName()); + map.put("方法名称", quartzJob.getMethodName()); + map.put("参数", quartzJob.getParams()); + map.put("备注", quartzJob.getRemark()); + map.put("创建日期", quartzJob.getCreateTime()); + map.put("Spring Bean名称", quartzJob.getBeanName()); + map.put("cron 表达式", quartzJob.getCronExpression()); + map.put("状态:1暂停、0启用", quartzJob.getIsPause()); + map.put("任务名称", quartzJob.getJobName()); + map.put("方法名称", quartzJob.getMethodName()); + map.put("参数", quartzJob.getParams()); + map.put("备注", quartzJob.getRemark()); + map.put("创建日期", quartzJob.getCreateTime()); + list.add(map); } - resources = quartzJobRepository.save(resources); - quartzManage.addJob(resources); - return resources; + FileUtil.downloadExcel(list, response); } + /** + * 更改定时任务状态 + * + * @param quartzJob / + */ @Override - @CacheEvict(allEntries = true) - @Transactional(rollbackFor = Exception.class) - public void update(QuartzJob resources) { - if(resources.getId().equals(1L)){ - throw new BadRequestException("该任务不可操作"); - } - if (!CronExpression.isValidExpression(resources.getCronExpression())){ - throw new BadRequestException("cron表达式格式错误"); - } - resources = quartzJobRepository.save(resources); - quartzManage.updateJobCron(resources); - } - - @Override - @CacheEvict(allEntries = true) public void updateIsPause(QuartzJob quartzJob) { if(quartzJob.getId().equals(1L)){ throw new BadRequestException("该任务不可操作"); @@ -114,9 +117,14 @@ public class QuartzJobServiceImpl implements QuartzJobService { quartzManage.pauseJob(quartzJob); quartzJob.setIsPause(true); } - quartzJobRepository.save(quartzJob); + this.save(quartzJob); } + /** + * 立即执行定时任务 + * + * @param quartzJob / + */ @Override public void execution(QuartzJob quartzJob) { if(quartzJob.getId().equals(1L)){ @@ -125,54 +133,15 @@ public class QuartzJobServiceImpl implements QuartzJobService { quartzManage.runJobNow(quartzJob); } + /** + * 查询启用的任务 + * + * @return List + */ @Override - @CacheEvict(allEntries = true) - @Transactional(rollbackFor = Exception.class) - public void delete(Set ids) { - for (Long id : ids) { - if(id.equals(1L)){ - throw new BadRequestException("更新访客记录不可删除,你可以在后台代码中取消该限制"); - } - QuartzJob quartzJob = findById(id); - quartzManage.deleteJob(quartzJob); - quartzJobRepository.delete(quartzJob); - } - } - - @Override - public void download(List quartzJobs, HttpServletResponse response) throws IOException { - List> list = new ArrayList<>(); - for (QuartzJob quartzJob : quartzJobs) { - Map map = new LinkedHashMap<>(); - map.put("任务名称", quartzJob.getJobName()); - map.put("Bean名称", quartzJob.getBeanName()); - map.put("执行方法", quartzJob.getMethodName()); - map.put("参数", quartzJob.getParams()); - map.put("表达式", quartzJob.getCronExpression()); - map.put("状态", quartzJob.getIsPause() ? "暂停中" : "运行中"); - map.put("描述", quartzJob.getRemark()); - map.put("创建日期", quartzJob.getCreateTime()); - list.add(map); - } - FileUtil.downloadExcel(list, response); - } - - @Override - public void downloadLog(List queryAllLog, HttpServletResponse response) throws IOException { - List> list = new ArrayList<>(); - for (QuartzLog quartzLog : queryAllLog) { - Map map = new LinkedHashMap<>(); - map.put("任务名称", quartzLog.getJobName()); - map.put("Bean名称", quartzLog.getBeanName()); - map.put("执行方法", quartzLog.getMethodName()); - map.put("参数", quartzLog.getParams()); - map.put("表达式", quartzLog.getCronExpression()); - map.put("异常详情", quartzLog.getExceptionDetail()); - map.put("耗时/毫秒", quartzLog.getTime()); - map.put("状态", quartzLog.getIsSuccess() ? "成功" : "失败"); - map.put("创建日期", quartzLog.getCreateTime()); - list.add(map); - } - FileUtil.downloadExcel(list, response); + public List findByIsPauseIsFalse() { + QuartzJobQueryCriteria criteria = new QuartzJobQueryCriteria(); + criteria.setIsPause(false); + return baseMapper.selectList(QueryHelpPlus.getPredicate(QuartzJob.class, criteria)); } } diff --git a/yshop-system/src/main/java/co/yixiang/modules/quartz/service/impl/QuartzLogServiceImpl.java b/yshop-system/src/main/java/co/yixiang/modules/quartz/service/impl/QuartzLogServiceImpl.java new file mode 100644 index 00000000..cdf9c2fb --- /dev/null +++ b/yshop-system/src/main/java/co/yixiang/modules/quartz/service/impl/QuartzLogServiceImpl.java @@ -0,0 +1,98 @@ +package co.yixiang.modules.quartz.service.impl; + +import co.yixiang.modules.quartz.domain.QuartzLog; +import co.yixiang.common.service.impl.BaseServiceImpl; +import lombok.AllArgsConstructor; +import co.yixiang.dozer.service.IGenerator; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import co.yixiang.common.utils.QueryHelpPlus; +import co.yixiang.utils.ValidationUtil; +import co.yixiang.utils.FileUtil; +import co.yixiang.modules.quartz.service.QuartzLogService; +import co.yixiang.modules.quartz.service.dto.QuartzLogDto; +import co.yixiang.modules.quartz.service.dto.QuartzLogQueryCriteria; +import co.yixiang.modules.quartz.service.mapper.QuartzLogMapper; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +// 默认不使用缓存 +//import org.springframework.cache.annotation.CacheConfig; +//import org.springframework.cache.annotation.CacheEvict; +//import org.springframework.cache.annotation.Cacheable; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import co.yixiang.utils.PageUtil; +import co.yixiang.utils.QueryHelp; +import java.util.List; +import java.util.Map; +import java.io.IOException; +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.LinkedHashMap; + +/** +* @author hupeng +* @date 2020-05-13 +*/ +@Service +@AllArgsConstructor +//@CacheConfig(cacheNames = "quartzLog") +@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class) +public class QuartzLogServiceImpl extends BaseServiceImpl implements QuartzLogService { + + private final IGenerator generator; + + @Override + //@Cacheable + public Map queryAll(QuartzLogQueryCriteria criteria, Pageable pageable) { + getPage(pageable); + PageInfo page = new PageInfo<>(queryAll(criteria)); + Map map = new LinkedHashMap<>(2); + map.put("content", generator.convert(page.getList(), QuartzLogDto.class)); + map.put("totalElements", page.getTotal()); + return map; + } + + + @Override + //@Cacheable + public List queryAll(QuartzLogQueryCriteria criteria){ + return baseMapper.selectList(QueryHelpPlus.getPredicate(QuartzLog.class, criteria)); + } + + /** + * 导出数据 + * + * @param all 待导出的数据 + * @param response / + * @throws IOException / + */ + @Override + public void download(List all, HttpServletResponse response) throws IOException { + List> list = new ArrayList<>(); + for (QuartzLogDto quartzLog : all) { + Map map = new LinkedHashMap<>(); + map.put(" baenName", quartzLog.getBaenName()); + map.put(" createTime", quartzLog.getCreateTime()); + map.put(" cronExpression", quartzLog.getCronExpression()); + map.put(" exceptionDetail", quartzLog.getExceptionDetail()); + map.put(" isSuccess", quartzLog.getIsSuccess()); + map.put(" jobName", quartzLog.getJobName()); + map.put(" methodName", quartzLog.getMethodName()); + map.put(" params", quartzLog.getParams()); + map.put(" time", quartzLog.getTime()); + map.put("任务名称", quartzLog.getBaenName()); + map.put("Bean名称 ", quartzLog.getCreateTime()); + map.put("cron表达式", quartzLog.getCronExpression()); + map.put("异常详细 ", quartzLog.getExceptionDetail()); + map.put("状态", quartzLog.getIsSuccess()); + map.put("任务名称", quartzLog.getJobName()); + map.put("方法名称", quartzLog.getMethodName()); + map.put("参数", quartzLog.getParams()); + map.put("耗时(毫秒)", quartzLog.getTime()); + list.add(map); + } + FileUtil.downloadExcel(list, response); + } +} diff --git a/yshop-system/src/main/java/co/yixiang/modules/quartz/service/mapper/QuartzJobMapper.java b/yshop-system/src/main/java/co/yixiang/modules/quartz/service/mapper/QuartzJobMapper.java new file mode 100644 index 00000000..640de30b --- /dev/null +++ b/yshop-system/src/main/java/co/yixiang/modules/quartz/service/mapper/QuartzJobMapper.java @@ -0,0 +1,16 @@ +package co.yixiang.modules.quartz.service.mapper; + +import co.yixiang.common.mapper.CoreMapper; +import co.yixiang.modules.quartz.domain.QuartzJob; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +/** +* @author hupeng +* @date 2020-05-13 +*/ +@Repository +@Mapper +public interface QuartzJobMapper extends CoreMapper { + +} \ No newline at end of file diff --git a/yshop-system/src/main/java/co/yixiang/modules/quartz/service/mapper/QuartzLogMapper.java b/yshop-system/src/main/java/co/yixiang/modules/quartz/service/mapper/QuartzLogMapper.java new file mode 100644 index 00000000..973594f4 --- /dev/null +++ b/yshop-system/src/main/java/co/yixiang/modules/quartz/service/mapper/QuartzLogMapper.java @@ -0,0 +1,16 @@ +package co.yixiang.modules.quartz.service.mapper; + +import co.yixiang.common.mapper.CoreMapper; +import co.yixiang.modules.quartz.domain.QuartzLog; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +/** +* @author hupeng +* @date 2020-05-13 +*/ +@Repository +@Mapper +public interface QuartzLogMapper extends CoreMapper { + +} \ No newline at end of file diff --git a/yshop-system/src/main/java/co/yixiang/modules/quartz/utils/ExecutionJob.java b/yshop-system/src/main/java/co/yixiang/modules/quartz/utils/ExecutionJob.java index 37949f35..cc148904 100644 --- a/yshop-system/src/main/java/co/yixiang/modules/quartz/utils/ExecutionJob.java +++ b/yshop-system/src/main/java/co/yixiang/modules/quartz/utils/ExecutionJob.java @@ -1,11 +1,11 @@ package co.yixiang.modules.quartz.utils; import co.yixiang.config.thread.ThreadPoolExecutorUtil; +import co.yixiang.modules.quartz.domain.QuartzJob; +import co.yixiang.modules.quartz.service.QuartzLogService; import co.yixiang.utils.SpringContextHolder; import co.yixiang.utils.ThrowableUtil; -import co.yixiang.modules.quartz.domain.QuartzJob; import co.yixiang.modules.quartz.domain.QuartzLog; -import co.yixiang.modules.quartz.repository.QuartzLogRepository; import co.yixiang.modules.quartz.service.QuartzJobService; import org.quartz.JobExecutionContext; import org.slf4j.Logger; @@ -32,12 +32,12 @@ public class ExecutionJob extends QuartzJobBean { protected void executeInternal(JobExecutionContext context) { QuartzJob quartzJob = (QuartzJob) context.getMergedJobDataMap().get(QuartzJob.JOB_KEY); // 获取spring bean - QuartzLogRepository quartzLogRepository = SpringContextHolder.getBean(QuartzLogRepository.class); + QuartzLogService quartzLogService = SpringContextHolder.getBean(QuartzLogService.class); QuartzJobService quartzJobService = SpringContextHolder.getBean(QuartzJobService.class); QuartzLog log = new QuartzLog(); log.setJobName(quartzJob.getJobName()); - log.setBeanName(quartzJob.getBeanName()); + log.setBaenName(quartzJob.getBeanName()); log.setMethodName(quartzJob.getMethodName()); log.setParams(quartzJob.getParams()); long startTime = System.currentTimeMillis(); @@ -65,7 +65,7 @@ public class ExecutionJob extends QuartzJobBean { //更新状态 quartzJobService.updateIsPause(quartzJob); } finally { - quartzLogRepository.save(log); + quartzLogService.save(log); } } } diff --git a/yshop-system/src/main/java/co/yixiang/modules/quartz/utils/QuartzManage.java b/yshop-system/src/main/java/co/yixiang/modules/quartz/utils/QuartzManage.java index 43b692b4..db5a485e 100644 --- a/yshop-system/src/main/java/co/yixiang/modules/quartz/utils/QuartzManage.java +++ b/yshop-system/src/main/java/co/yixiang/modules/quartz/utils/QuartzManage.java @@ -1,8 +1,8 @@ package co.yixiang.modules.quartz.utils; import co.yixiang.exception.BadRequestException; -import lombok.extern.slf4j.Slf4j; import co.yixiang.modules.quartz.domain.QuartzJob; +import lombok.extern.slf4j.Slf4j; import org.quartz.*; import org.quartz.impl.triggers.CronTriggerImpl; import org.springframework.stereotype.Component;