提交 1e3c5ee7 authored 作者: 李秋林's avatar 李秋林

集成Mybatis-plus;分页规范修改;完成考勤功能

上级 5e9864e8
......@@ -74,6 +74,15 @@
<artifactId>wangxiaolu-sfa-common-swagger</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
</dependencies>
<build>
......
package com.sfa.job;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.sfa.common.security.annotation.EnableCustomConfig;
......@@ -13,6 +14,7 @@ import com.sfa.common.security.annotation.EnableRyFeignClients;
@EnableCustomConfig
@EnableRyFeignClients
@SpringBootApplication
@MapperScan("com.sfa.job.mapper")
public class SfaJobApplication
{
public static void main(String[] args) {
......
package com.sfa.job.config.advice;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sfa.common.core.domain.R;
import com.sfa.common.core.web.domain.AjaxResult;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
/**
* @author : liqiulin
* @date : 2024-10-28 17
* @describe :自动封装
*/
@RestControllerAdvice
public class ControllerResponseAdvice implements ResponseBodyAdvice<Object>{
/**
* response是R类型或者注释了NotControllerResponseAdvice都不进行包装
*/
@Override
public boolean supports(MethodParameter methodParameter, Class converterType) {
if (methodParameter.getParameterType().isAssignableFrom(AjaxResult.class)) {
return false;
}
return !methodParameter.getParameterType().isAssignableFrom(R.class);
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter methodParameter, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
// String类型不能直接包装
if (methodParameter.getGenericParameterType().equals(String.class)) {
ObjectMapper objectMapper = new ObjectMapper();
try {
// 将数据包装在ResultVo里后转换为json串进行返回
return objectMapper.writeValueAsString(R.ok(body));
} catch (JsonProcessingException e) {
throw new RuntimeException();
}
}
// 包装成R返回
return R.ok(body);
}
}
package com.sfa.job.config.mysql;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author : liqiulin
* @date : 2024-04-25 13
* @describe :
*/
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
\ No newline at end of file
package com.sfa.job.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.quartz.SchedulerException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.sfa.common.core.constant.Constants;
import com.sfa.common.core.exception.job.TaskException;
import com.sfa.common.core.utils.StringUtils;
import com.sfa.common.core.utils.poi.ExcelUtil;
import com.sfa.common.core.web.controller.BaseController;
import com.sfa.common.core.web.domain.AjaxResult;
import com.sfa.common.core.web.page.TableDataInfo;
import com.sfa.common.core.web.domain.PageInfo;
import com.sfa.common.log.annotation.Log;
import com.sfa.common.log.enums.BusinessType;
import com.sfa.common.security.annotation.RequiresPermissions;
......@@ -27,6 +15,12 @@ import com.sfa.job.domain.SysJob;
import com.sfa.job.service.ISysJobService;
import com.sfa.job.util.CronUtils;
import com.sfa.job.util.ScheduleUtils;
import org.quartz.SchedulerException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 调度任务信息操作处理
......@@ -45,11 +39,9 @@ public class SysJobController extends BaseController
*/
@RequiresPermissions("monitor:job:list")
@GetMapping("/list")
public TableDataInfo list(SysJob sysJob)
public PageInfo list(SysJob sysJob)
{
startPage();
List<SysJob> list = jobService.selectJobList(sysJob);
return getDataTable(list);
return jobService.selectJobList(sysJob);
}
/**
......@@ -60,7 +52,7 @@ public class SysJobController extends BaseController
@PostMapping("/export")
public void export(HttpServletResponse response, SysJob sysJob)
{
List<SysJob> list = jobService.selectJobList(sysJob);
List<SysJob> list = jobService.selectJobList(sysJob).getRows();
ExcelUtil<SysJob> util = new ExcelUtil<SysJob>(SysJob.class);
util.exportExcel(response, list, "定时任务");
}
......
package com.sfa.job.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.sfa.common.core.utils.poi.ExcelUtil;
import com.sfa.common.core.web.controller.BaseController;
import com.sfa.common.core.web.domain.AjaxResult;
import com.sfa.common.core.web.page.TableDataInfo;
import com.sfa.common.core.web.domain.PageInfo;
import com.sfa.common.log.annotation.Log;
import com.sfa.common.log.enums.BusinessType;
import com.sfa.common.security.annotation.RequiresPermissions;
import com.sfa.job.domain.SysJobLog;
import com.sfa.job.service.ISysJobLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 调度日志操作处理
......@@ -36,11 +32,9 @@ public class SysJobLogController extends BaseController
*/
@RequiresPermissions("monitor:job:list")
@GetMapping("/list")
public TableDataInfo list(SysJobLog sysJobLog)
public PageInfo list(SysJobLog sysJobLog)
{
startPage();
List<SysJobLog> list = jobLogService.selectJobLogList(sysJobLog);
return getDataTable(list);
return jobLogService.selectJobLogList(sysJobLog);
}
/**
......@@ -51,7 +45,7 @@ public class SysJobLogController extends BaseController
@PostMapping("/export")
public void export(HttpServletResponse response, SysJobLog sysJobLog)
{
List<SysJobLog> list = jobLogService.selectJobLogList(sysJobLog);
List<SysJobLog> list = jobLogService.selectJobLogList(sysJobLog).getRows();
ExcelUtil<SysJobLog> util = new ExcelUtil<SysJobLog>(SysJobLog.class);
util.exportExcel(response, list, "调度日志");
}
......
package com.sfa.job.domain;
import java.util.Date;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.sfa.common.core.annotation.Excel;
import com.sfa.common.core.annotation.Excel.ColumnType;
import com.sfa.common.core.constant.ScheduleConstants;
import com.sfa.common.core.utils.StringUtils;
import com.sfa.common.core.web.domain.BaseEntity;
import com.sfa.common.core.web.domain.BaseDo;
import com.sfa.job.util.CronUtils;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.util.Date;
/**
* 定时任务调度表 sys_job
*
* @author ruoyi
*/
public class SysJob extends BaseEntity
@TableName(value ="sys_job")
@Data
public class SysJob extends BaseDo
{
private static final long serialVersionUID = 1L;
/** 任务ID */
@Excel(name = "任务序号", cellType = ColumnType.NUMERIC)
@TableId(type = IdType.AUTO)
private Long jobId;
/** 任务名称 */
@Excel(name = "任务名称")
@NotBlank(message = "任务名称不能为空")
@Size(min = 0, max = 64, message = "任务名称不能超过64个字符")
private String jobName;
/** 任务组名 */
......@@ -36,10 +44,14 @@ public class SysJob extends BaseEntity
/** 调用目标字符串 */
@Excel(name = "调用目标字符串")
@NotBlank(message = "调用目标字符串不能为空")
@Size(min = 0, max = 500, message = "调用目标字符串长度不能超过500个字符")
private String invokeTarget;
/** cron执行表达式 */
@Excel(name = "执行表达式 ")
@NotBlank(message = "Cron执行表达式不能为空")
@Size(min = 0, max = 255, message = "Cron执行表达式不能超过255个字符")
private String cronExpression;
/** cron计划策略 */
......@@ -54,62 +66,6 @@ public class SysJob extends BaseEntity
@Excel(name = "任务状态", readConverterExp = "0=正常,1=暂停")
private String status;
public Long getJobId()
{
return jobId;
}
public void setJobId(Long jobId)
{
this.jobId = jobId;
}
@NotBlank(message = "任务名称不能为空")
@Size(min = 0, max = 64, message = "任务名称不能超过64个字符")
public String getJobName()
{
return jobName;
}
public void setJobName(String jobName)
{
this.jobName = jobName;
}
public String getJobGroup()
{
return jobGroup;
}
public void setJobGroup(String jobGroup)
{
this.jobGroup = jobGroup;
}
@NotBlank(message = "调用目标字符串不能为空")
@Size(min = 0, max = 500, message = "调用目标字符串长度不能超过500个字符")
public String getInvokeTarget()
{
return invokeTarget;
}
public void setInvokeTarget(String invokeTarget)
{
this.invokeTarget = invokeTarget;
}
@NotBlank(message = "Cron执行表达式不能为空")
@Size(min = 0, max = 255, message = "Cron执行表达式不能超过255个字符")
public String getCronExpression()
{
return cronExpression;
}
public void setCronExpression(String cronExpression)
{
this.cronExpression = cronExpression;
}
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
public Date getNextValidTime()
{
......@@ -119,53 +75,4 @@ public class SysJob extends BaseEntity
}
return null;
}
public String getMisfirePolicy()
{
return misfirePolicy;
}
public void setMisfirePolicy(String misfirePolicy)
{
this.misfirePolicy = misfirePolicy;
}
public String getConcurrent()
{
return concurrent;
}
public void setConcurrent(String concurrent)
{
this.concurrent = concurrent;
}
public String getStatus()
{
return status;
}
public void setStatus(String status)
{
this.status = status;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("jobId", getJobId())
.append("jobName", getJobName())
.append("jobGroup", getJobGroup())
.append("cronExpression", getCronExpression())
.append("nextValidTime", getNextValidTime())
.append("misfirePolicy", getMisfirePolicy())
.append("concurrent", getConcurrent())
.append("status", getStatus())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("remark", getRemark())
.toString();
}
}
\ No newline at end of file
package com.sfa.job.domain;
import java.util.Date;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.sfa.common.core.annotation.Excel;
import com.sfa.common.core.web.domain.BaseEntity;
import lombok.Data;
import java.util.Date;
/**
* 定时任务调度日志表 sys_job_log
*
* @author ruoyi
*/
public class SysJobLog extends BaseEntity
@TableName(value ="sys_job_log")
@Data
public class SysJobLog
{
private static final long serialVersionUID = 1L;
......@@ -44,112 +47,20 @@ public class SysJobLog extends BaseEntity
private String exceptionInfo;
/** 开始时间 */
@TableField(exist = false)
private Date startTime;
/** 停止时间 */
@TableField(exist = false)
private Date stopTime;
public Long getJobLogId()
{
return jobLogId;
}
public void setJobLogId(Long jobLogId)
{
this.jobLogId = jobLogId;
}
public String getJobName()
{
return jobName;
}
public void setJobName(String jobName)
{
this.jobName = jobName;
}
public String getJobGroup()
{
return jobGroup;
}
public void setJobGroup(String jobGroup)
{
this.jobGroup = jobGroup;
}
public String getInvokeTarget()
{
return invokeTarget;
}
public void setInvokeTarget(String invokeTarget)
{
this.invokeTarget = invokeTarget;
}
public String getJobMessage()
{
return jobMessage;
}
public void setJobMessage(String jobMessage)
{
this.jobMessage = jobMessage;
}
public String getStatus()
{
return status;
}
public void setStatus(String status)
{
this.status = status;
}
public String getExceptionInfo()
{
return exceptionInfo;
}
public void setExceptionInfo(String exceptionInfo)
{
this.exceptionInfo = exceptionInfo;
}
public Date getStartTime()
{
return startTime;
}
public void setStartTime(Date startTime)
{
this.startTime = startTime;
}
public Date getStopTime()
{
return stopTime;
}
public void setStopTime(Date stopTime)
{
this.stopTime = stopTime;
}
/** 创建时间 */
private Date createTime;
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("jobLogId", getJobLogId())
.append("jobName", getJobName())
.append("jobGroup", getJobGroup())
.append("jobMessage", getJobMessage())
.append("status", getStatus())
.append("exceptionInfo", getExceptionInfo())
.append("startTime", getStartTime())
.append("stopTime", getStopTime())
.toString();
}
/** 操作开始时间 **/
@TableField(exist = false)
private Date beginTime;
/** 操作结束时间 **/
@TableField(exist = false)
private Date endTime;
}
package com.sfa.job.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sfa.job.domain.SysJobLog;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
......@@ -12,7 +14,7 @@ import org.springframework.stereotype.Repository;
*/
@Repository
@Mapper
public interface SysJobLogMapper
public interface SysJobLogMapper extends BaseMapper<SysJobLog>
{
/**
* 获取quartz调度器日志的计划任务
......
package com.sfa.job.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sfa.job.domain.SysJob;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
......@@ -12,7 +14,7 @@ import org.springframework.stereotype.Repository;
*/
@Repository
@Mapper
public interface SysJobMapper
public interface SysJobMapper extends BaseMapper<SysJob>
{
/**
* 查询调度任务日志集合
......
package com.sfa.job.service;
import java.util.List;
import com.sfa.common.core.web.domain.PageInfo;
import com.sfa.job.domain.SysJobLog;
/**
......@@ -16,7 +16,7 @@ public interface ISysJobLogService
* @param jobLog 调度日志信息
* @return 调度任务日志集合
*/
public List<SysJobLog> selectJobLogList(SysJobLog jobLog);
public PageInfo selectJobLogList(SysJobLog jobLog);
/**
* 通过调度任务日志ID查询调度信息
......
package com.sfa.job.service;
import java.util.List;
import org.quartz.SchedulerException;
import com.sfa.common.core.exception.job.TaskException;
import com.sfa.common.core.web.domain.PageInfo;
import com.sfa.job.domain.SysJob;
import org.quartz.SchedulerException;
/**
* 定时任务调度信息信息 服务层
......@@ -18,7 +18,7 @@ public interface ISysJobService
* @param job 调度信息
* @return 调度任务集合
*/
public List<SysJob> selectJobList(SysJob job);
public PageInfo selectJobList(SysJob job);
/**
* 通过调度任务ID查询调度信息
......
package com.sfa.job.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sfa.common.core.web.domain.PageInfo;
import com.sfa.common.core.web.page.TableSupport;
import com.sfa.job.domain.SysJobLog;
import com.sfa.job.mapper.SysJobLogMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Objects;
/**
* 定时任务调度日志信息 服务层
......@@ -24,9 +30,33 @@ public class SysJobLogServiceImpl implements ISysJobLogService
* @return 调度任务日志集合
*/
@Override
public List<SysJobLog> selectJobLogList(SysJobLog jobLog)
public PageInfo selectJobLogList(SysJobLog jobLog)
{
return jobLogMapper.selectJobLogList(jobLog);
LambdaQueryWrapper<SysJobLog> qw = buildWrapper(jobLog);
Page<SysJobLog> pageR = jobLogMapper.selectPage(TableSupport.pageI(), qw);
PageInfo<SysJobLog> pageInfo = new PageInfo<>(pageR);
return pageInfo;
}
private LambdaQueryWrapper<SysJobLog> buildWrapper(SysJobLog jobLog) {
LambdaQueryWrapper<SysJobLog> qw = new LambdaQueryWrapper<>();
if (StringUtils.isNotBlank(jobLog.getStatus())){
qw.eq(SysJobLog::getStatus,jobLog.getStatus());
}
if (StringUtils.isNotBlank(jobLog.getJobGroup())){
qw.eq(SysJobLog::getJobGroup,jobLog.getJobGroup());
}
if (StringUtils.isNotBlank(jobLog.getJobName())){
qw.like(SysJobLog::getJobName,jobLog.getJobName());
}
if (StringUtils.isNotBlank(jobLog.getInvokeTarget())){
qw.like(SysJobLog::getInvokeTarget,jobLog.getInvokeTarget());
}
if (Objects.nonNull(jobLog.getBeginTime())&&Objects.nonNull(jobLog.getEndTime())){
qw.between(SysJobLog::getCreateTime, jobLog.getBeginTime(),jobLog.getEndTime());
}
qw.orderByDesc(SysJobLog::getCreateTime);
return qw;
}
/**
......
package com.sfa.job.service;
import java.util.List;
import javax.annotation.PostConstruct;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sfa.common.core.constant.ScheduleConstants;
import com.sfa.common.core.exception.job.TaskException;
import com.sfa.common.core.web.domain.PageInfo;
import com.sfa.common.core.web.page.TableSupport;
import com.sfa.job.domain.SysJob;
import com.sfa.job.mapper.SysJobMapper;
import com.sfa.job.util.CronUtils;
import com.sfa.job.util.ScheduleUtils;
import org.apache.commons.lang3.StringUtils;
import org.quartz.JobDataMap;
import org.quartz.JobKey;
import org.quartz.Scheduler;
......@@ -9,12 +18,9 @@ import org.quartz.SchedulerException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.sfa.common.core.constant.ScheduleConstants;
import com.sfa.common.core.exception.job.TaskException;
import com.sfa.job.domain.SysJob;
import com.sfa.job.mapper.SysJobMapper;
import com.sfa.job.util.CronUtils;
import com.sfa.job.util.ScheduleUtils;
import javax.annotation.PostConstruct;
import java.util.List;
/**
* 定时任务调度信息 服务层
......@@ -51,9 +57,29 @@ public class SysJobServiceImpl implements ISysJobService
* @return
*/
@Override
public List<SysJob> selectJobList(SysJob job)
public PageInfo selectJobList(SysJob job)
{
return jobMapper.selectJobList(job);
LambdaQueryWrapper<SysJob> qw = buildWrapper(job);
Page<SysJob> pageR = jobMapper.selectPage(TableSupport.pageI(), qw);
PageInfo<SysJob> pageInfo = new PageInfo<>(pageR);
return pageInfo;
}
private LambdaQueryWrapper<SysJob> buildWrapper(SysJob job) {
LambdaQueryWrapper<SysJob> qw = new LambdaQueryWrapper<>();
if (StringUtils.isNotBlank(job.getStatus())){
qw.eq(SysJob::getStatus,job.getStatus());
}
if (StringUtils.isNotBlank(job.getJobGroup())){
qw.eq(SysJob::getJobGroup,job.getJobGroup());
}
if (StringUtils.isNotBlank(job.getJobName())){
qw.like(SysJob::getJobName,job.getJobName());
}
if (StringUtils.isNotBlank(job.getInvokeTarget())){
qw.like(SysJob::getInvokeTarget,job.getInvokeTarget());
}
return qw;
}
/**
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论