refactor: 任务执行日志放入MongoDB

This commit is contained in:
Bunny 2024-12-29 18:28:39 +08:00
parent 025a8c26da
commit f72e30efb5
22 changed files with 217 additions and 298 deletions

View File

@ -1,11 +1,14 @@
package cn.bunny.dao.entity.log; package cn.bunny.dao.entity.log.schedule;
import cn.bunny.dao.common.entity.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.FieldType;
import org.springframework.data.mongodb.core.mapping.MongoId;
/** /**
* <p> * <p>
@ -18,9 +21,13 @@ import lombok.experimental.Accessors;
@Getter @Getter
@Setter @Setter
@Accessors(chain = true) @Accessors(chain = true)
@TableName("log_quartz_execute") @Document(collection = "log_quartz_execute")
@Schema(name = "QuartzExecuteLog对象", title = "调度任务执行日志", description = "调度任务执行日志") @Schema(name = "QuartzExecuteLog对象", title = "调度任务执行日志", description = "调度任务执行日志")
public class ScheduleExecuteLog extends BaseEntity { public class ScheduleExecuteLog {
@Id
@MongoId(targetType = FieldType.STRING)
private ObjectId id;
@Schema(name = "jobName", title = "任务名称") @Schema(name = "jobName", title = "任务名称")
private String jobName; private String jobName;

View File

@ -1,4 +1,4 @@
package cn.bunny.dao.entity.log; package cn.bunny.dao.entity.log.schedule;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;

View File

@ -1,55 +0,0 @@
package cn.bunny.dao.entity.system;
import cn.bunny.dao.common.entity.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
/**
* <p>
* 系统日志表
* </p>
*
* @author Bunny
* @since 2024-05-31
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("system_log")
@Schema(name = "SystemLog对象", title = "系统日志表", description = "系统日志表")
public class SystemLog extends BaseEntity {
@Schema(name = "classPath", title = "所在类路径")
private String classPath;
@Schema(name = "methodName", title = "执行方法名称")
private String methodName;
@Schema(name = "args", title = "入参内容")
private String args;
@Schema(name = "result", title = "返回参数")
private String result;
@Schema(name = "errorStack", title = "报错堆栈")
private String errorStack;
@Schema(name = "errorMessage", title = "报错")
private String errorMessage;
@Schema(name = "email", title = "邮箱")
private String email;
@Schema(name = "nickname", title = "用户名")
private String nickname;
@Schema(name = "token", title = "当前用户token")
private String token;
@Schema(name = "ipAddress", title = "当前用户IP地址")
private String ipAddress;
}

View File

@ -1,16 +1,20 @@
package cn.bunny.dao.vo.log; package cn.bunny.dao.vo.log;
import cn.bunny.dao.common.vo.BaseUserVo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@Builder @Builder
@Schema(name = "QuartzExecuteLogVo对象", title = "调度任务执行日志返回对象", description = "调度任务执行日志返回对象") @Schema(name = "ScheduleExecuteLogVo对象", title = "调度任务执行日志返回对象", description = "调度任务执行日志返回对象")
public class QuartzExecuteLogVo extends BaseUserVo { public class ScheduleExecuteLogVo {
@Schema(name = "id", title = "id")
private String id;
@Schema(name = "jobName", title = "任务名称") @Schema(name = "jobName", title = "任务名称")
private String jobName; private String jobName;
@ -31,6 +35,6 @@ public class QuartzExecuteLogVo extends BaseUserVo {
private String executeResult; private String executeResult;
@Schema(name = "duration", title = "执行时间") @Schema(name = "duration", title = "执行时间")
private Integer duration; private Long duration;
} }

View File

@ -1,10 +1,10 @@
package cn.bunny.services.aop; package cn.bunny.services.aop;
import cn.bunny.dao.entity.log.ScheduleExecuteLog; import cn.bunny.dao.entity.log.schedule.ScheduleExecuteLog;
import cn.bunny.dao.entity.log.ScheduleExecuteLogJson; import cn.bunny.dao.entity.log.schedule.ScheduleExecuteLogJson;
import cn.bunny.dao.pojo.constant.LocalDateTimeConstant; import cn.bunny.dao.pojo.constant.LocalDateTimeConstant;
import cn.bunny.dao.pojo.enums.JobEnums; import cn.bunny.dao.pojo.enums.JobEnums;
import cn.bunny.services.mapper.schedule.ScheduleExecuteLogMapper; import cn.bunny.services.repository.ScheduleExecuteLogRepository;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Around;
@ -27,7 +27,7 @@ public class JobExecuteAop {
private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(LocalDateTimeConstant.YYYY_MM_DD_HH_MM_SS); private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(LocalDateTimeConstant.YYYY_MM_DD_HH_MM_SS);
@Autowired @Autowired
private ScheduleExecuteLogMapper scheduleExecuteLogMapper; private ScheduleExecuteLogRepository scheduleExecuteLogRepository;
@Around(value = "pointCut()") @Around(value = "pointCut()")
public Object aroundMethod(ProceedingJoinPoint joinPoint) { public Object aroundMethod(ProceedingJoinPoint joinPoint) {
@ -65,7 +65,7 @@ public class JobExecuteAop {
executeLogJson.setOperationTime(startExecuteTime); executeLogJson.setOperationTime(startExecuteTime);
executeLogJson.setExecuteParams(jobDataMap); executeLogJson.setExecuteParams(jobDataMap);
executeLog.setExecuteResult(JSON.toJSONString(executeLogJson)); executeLog.setExecuteResult(JSON.toJSONString(executeLogJson));
scheduleExecuteLogMapper.insert(executeLog); scheduleExecuteLogRepository.insert(executeLog);
// 执行... // 执行...
result = joinPoint.proceed(); result = joinPoint.proceed();
@ -98,7 +98,7 @@ public class JobExecuteAop {
executeLog.setId(null); executeLog.setId(null);
executeLog.setExecuteResult(JSON.toJSONString(executeLogJson)); executeLog.setExecuteResult(JSON.toJSONString(executeLogJson));
executeLog.setDuration(Duration.between(startLocalDateTime, endLocalDateTime).toSeconds()); executeLog.setDuration(Duration.between(startLocalDateTime, endLocalDateTime).toSeconds());
scheduleExecuteLogMapper.insert(executeLog); scheduleExecuteLogRepository.insert(executeLog);
} }
@Pointcut("execution(* cn.bunny.services.quartz.*.execute(..))") @Pointcut("execution(* cn.bunny.services.quartz.*.execute(..))")

View File

@ -1,18 +1,17 @@
package cn.bunny.services.controller.schedule; package cn.bunny.services.controller.log;
import cn.bunny.dao.dto.log.ScheduleExecuteLogDto; import cn.bunny.dao.dto.log.ScheduleExecuteLogDto;
import cn.bunny.dao.entity.log.ScheduleExecuteLog;
import cn.bunny.dao.pojo.result.PageResult; import cn.bunny.dao.pojo.result.PageResult;
import cn.bunny.dao.pojo.result.Result; import cn.bunny.dao.pojo.result.Result;
import cn.bunny.dao.pojo.result.ResultCodeEnum; import cn.bunny.dao.pojo.result.ResultCodeEnum;
import cn.bunny.dao.vo.log.QuartzExecuteLogVo; import cn.bunny.dao.vo.log.ScheduleExecuteLogVo;
import cn.bunny.services.aop.annotation.ExcludeRequestLog; import cn.bunny.services.aop.annotation.ExcludeRequestLog;
import cn.bunny.services.service.schedule.ScheduleExecuteLogService; import cn.bunny.services.service.log.ScheduleExecuteLogService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
@ -37,20 +36,23 @@ public class ScheduleExecuteLogController {
@ExcludeRequestLog @ExcludeRequestLog
@Operation(summary = "分页查询调度任务执行日志", description = "分页查询调度任务执行日志") @Operation(summary = "分页查询调度任务执行日志", description = "分页查询调度任务执行日志")
@GetMapping("getQuartzExecuteLogList/{page}/{limit}") @GetMapping("getQuartzExecuteLogList/{page}/{limit}")
public Mono<Result<PageResult<QuartzExecuteLogVo>>> getQuartzExecuteLogList( public Mono<Result<PageResult<ScheduleExecuteLogVo>>> getQuartzExecuteLogList(
@Parameter(name = "page", description = "当前页", required = true) @Parameter(name = "page", description = "当前页", required = true)
@PathVariable("page") Integer page, @PathVariable("page") Integer page,
@Parameter(name = "limit", description = "每页记录数", required = true) @Parameter(name = "limit", description = "每页记录数", required = true)
@PathVariable("limit") Integer limit, @PathVariable("limit") Integer limit,
ScheduleExecuteLogDto dto) { ScheduleExecuteLogDto dto) {
Page<ScheduleExecuteLog> pageParams = new Page<>(page, limit); // 设置分页参数
PageResult<QuartzExecuteLogVo> pageResult = scheduleExecuteLogService.getQuartzExecuteLogList(pageParams, dto); page = page - 1;
PageRequest pageable = PageRequest.of(page < 0 ? 0 : page, limit);
PageResult<ScheduleExecuteLogVo> pageResult = scheduleExecuteLogService.getQuartzExecuteLogList(pageable, dto);
return Mono.just(Result.success(pageResult)); return Mono.just(Result.success(pageResult));
} }
@Operation(summary = "删除调度任务执行日志", description = "删除调度任务执行日志") @Operation(summary = "删除调度任务执行日志", description = "删除调度任务执行日志")
@DeleteMapping("deleteQuartzExecuteLog") @DeleteMapping("deleteQuartzExecuteLog")
public Mono<Result<String>> deleteQuartzExecuteLog(@RequestBody List<Long> ids) { public Mono<Result<String>> deleteQuartzExecuteLog(@RequestBody List<String> ids) {
scheduleExecuteLogService.deleteQuartzExecuteLog(ids); scheduleExecuteLogService.deleteQuartzExecuteLog(ids);
return Mono.just(Result.success(ResultCodeEnum.DELETE_SUCCESS)); return Mono.just(Result.success(ResultCodeEnum.DELETE_SUCCESS));
} }

View File

@ -1,4 +1,4 @@
package cn.bunny.services.controller.system; package cn.bunny.services.controller.log;
import cn.bunny.dao.dto.log.UserLoginLogDto; import cn.bunny.dao.dto.log.UserLoginLogDto;
import cn.bunny.dao.entity.log.UserLoginLog; import cn.bunny.dao.entity.log.UserLoginLog;
@ -8,7 +8,7 @@ import cn.bunny.dao.pojo.result.ResultCodeEnum;
import cn.bunny.dao.vo.log.UserLoginLogLocalVo; import cn.bunny.dao.vo.log.UserLoginLogLocalVo;
import cn.bunny.dao.vo.log.UserLoginLogVo; import cn.bunny.dao.vo.log.UserLoginLogVo;
import cn.bunny.services.aop.annotation.ExcludeRequestLog; import cn.bunny.services.aop.annotation.ExcludeRequestLog;
import cn.bunny.services.service.system.UserLoginLogService; import cn.bunny.services.service.log.UserLoginLogService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;

View File

@ -1,17 +1,16 @@
package cn.bunny.services.controller.system; package cn.bunny.services.controller.log;
import cn.bunny.dao.dto.log.UserRequestLogDto; import cn.bunny.dao.dto.log.UserRequestLogDto;
import cn.bunny.dao.pojo.result.PageResult; import cn.bunny.dao.pojo.result.PageResult;
import cn.bunny.dao.pojo.result.Result; import cn.bunny.dao.pojo.result.Result;
import cn.bunny.dao.vo.log.UserRequestLogVo; import cn.bunny.dao.vo.log.UserRequestLogVo;
import cn.bunny.services.aop.annotation.ExcludeRequestLog; import cn.bunny.services.aop.annotation.ExcludeRequestLog;
import cn.bunny.services.service.system.UserRequestLogService; import cn.bunny.services.service.log.UserRequestLogService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
@ -36,15 +35,18 @@ public class UserRequestLogController {
@Operation(summary = "分页查询用户请求日志", description = "分页查询用户请求日志") @Operation(summary = "分页查询用户请求日志", description = "分页查询用户请求日志")
@ExcludeRequestLog @ExcludeRequestLog
@GetMapping("getRequestLogList/{page}/{limit}") @GetMapping("getRequestLogList/{page}/{limit}")
public Mono<Result<PageResult<UserRequestLogVo>>> getRequestLogList( public Result<PageResult<UserRequestLogVo>> getRequestLogList(
@Parameter(name = "page", description = "当前页", required = true) @Parameter(name = "page", description = "当前页", required = true)
@PathVariable("page") Integer page, @PathVariable("page") Integer page,
@Parameter(name = "limit", description = "每页记录数", required = true) @Parameter(name = "limit", description = "每页记录数", required = true)
@PathVariable("limit") Integer limit, @PathVariable("limit") Integer limit,
UserRequestLogDto dto) { UserRequestLogDto dto) {
Pageable pageable = PageRequest.of(page, limit); // 设置分页参数
page = page - 1;
PageRequest pageable = PageRequest.of(page < 0 ? 0 : page, limit);
PageResult<UserRequestLogVo> pageResult = userRequestLogService.getRequestLogList(pageable, dto); PageResult<UserRequestLogVo> pageResult = userRequestLogService.getRequestLogList(pageable, dto);
return Mono.just(Result.success(pageResult)); return Result.success(pageResult);
} }
@Operation(summary = "删除用户请求日志", description = "删除用户请求日志") @Operation(summary = "删除用户请求日志", description = "删除用户请求日志")

View File

@ -1,40 +0,0 @@
package cn.bunny.services.mapper.schedule;
import cn.bunny.dao.dto.log.ScheduleExecuteLogDto;
import cn.bunny.dao.entity.log.ScheduleExecuteLog;
import cn.bunny.dao.vo.log.QuartzExecuteLogVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* 调度任务执行日志 Mapper 接口
* </p>
*
* @author Bunny
* @since 2024-10-18 12:56:39
*/
@Mapper
public interface ScheduleExecuteLogMapper extends BaseMapper<ScheduleExecuteLog> {
/**
* * 分页查询调度任务执行日志内容
*
* @param pageParams 调度任务执行日志分页参数
* @param dto 调度任务执行日志查询表单
* @return 调度任务执行日志分页结果
*/
IPage<QuartzExecuteLogVo> selectListByPage(@Param("page") Page<ScheduleExecuteLog> pageParams, @Param("dto") ScheduleExecuteLogDto dto);
/**
* 物理删除调度任务执行日志
*
* @param ids 删除 id 列表
*/
void deleteBatchIdsWithPhysics(List<Long> ids);
}

View File

@ -0,0 +1,9 @@
package cn.bunny.services.repository;
import cn.bunny.dao.entity.log.schedule.ScheduleExecuteLog;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface ScheduleExecuteLogRepository extends MongoRepository<ScheduleExecuteLog, ObjectId> {
}

View File

@ -5,5 +5,5 @@ import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.data.mongodb.repository.MongoRepository;
public interface UserRequestLogRepository extends MongoRepository<UserRequestLog, ObjectId> { public interface UserRequestLogRepository extends MongoRepository<UserRequestLog, ObjectId> {
} }

View File

@ -0,0 +1,33 @@
package cn.bunny.services.service.log;
import cn.bunny.dao.dto.log.ScheduleExecuteLogDto;
import cn.bunny.dao.pojo.result.PageResult;
import cn.bunny.dao.vo.log.ScheduleExecuteLogVo;
import org.springframework.data.domain.PageRequest;
import java.util.List;
/**
* <p>
* 调度任务执行日志 服务类
* </p>
*
* @author Bunny
* @since 2024-10-18 12:56:39
*/
public interface ScheduleExecuteLogService {
/**
* * 获取调度任务执行日志列表
*
* @return 调度任务执行日志返回列表
*/
PageResult<ScheduleExecuteLogVo> getQuartzExecuteLogList(PageRequest pageable, ScheduleExecuteLogDto dto);
/**
* * 删除|批量删除调度任务执行日志类型
*
* @param ids 删除id列表
*/
void deleteQuartzExecuteLog(List<String> ids);
}

View File

@ -1,4 +1,4 @@
package cn.bunny.services.service.system; package cn.bunny.services.service.log;
import cn.bunny.dao.dto.log.UserLoginLogDto; import cn.bunny.dao.dto.log.UserLoginLogDto;
import cn.bunny.dao.entity.log.UserLoginLog; import cn.bunny.dao.entity.log.UserLoginLog;

View File

@ -1,9 +1,9 @@
package cn.bunny.services.service.system; package cn.bunny.services.service.log;
import cn.bunny.dao.dto.log.UserRequestLogDto; import cn.bunny.dao.dto.log.UserRequestLogDto;
import cn.bunny.dao.pojo.result.PageResult; import cn.bunny.dao.pojo.result.PageResult;
import cn.bunny.dao.vo.log.UserRequestLogVo; import cn.bunny.dao.vo.log.UserRequestLogVo;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.PageRequest;
import java.util.List; import java.util.List;
@ -16,7 +16,7 @@ public interface UserRequestLogService {
* @param dto 表单查询 * @param dto 表单查询
* @return 分页结果 * @return 分页结果
*/ */
PageResult<UserRequestLogVo> getRequestLogList(Pageable pageable, UserRequestLogDto dto); PageResult<UserRequestLogVo> getRequestLogList(PageRequest pageable, UserRequestLogDto dto);
/** /**
* 删除用户请求日志 * 删除用户请求日志

View File

@ -0,0 +1,78 @@
package cn.bunny.services.service.log.impl;
import cn.bunny.dao.dto.log.ScheduleExecuteLogDto;
import cn.bunny.dao.entity.log.schedule.ScheduleExecuteLog;
import cn.bunny.dao.pojo.result.PageResult;
import cn.bunny.dao.vo.log.ScheduleExecuteLogVo;
import cn.bunny.services.repository.ScheduleExecuteLogRepository;
import cn.bunny.services.service.log.ScheduleExecuteLogService;
import org.bson.types.ObjectId;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 调度任务执行日志 服务实现类
* </p>
*
* @author Bunny
* @since 2024-10-18 12:56:39
*/
@Service
public class ScheduleExecuteLogServiceImpl implements ScheduleExecuteLogService {
@Autowired
private ScheduleExecuteLogRepository scheduleExecuteLogRepository;
/**
* * 调度任务执行日志 服务实现类
*
* @param pageable 调度任务执行日志分页查询page对象
* @param dto 调度任务执行日志分页查询对象
* @return 查询分页调度任务执行日志返回对象
*/
@Override
public PageResult<ScheduleExecuteLogVo> getQuartzExecuteLogList(PageRequest pageable, ScheduleExecuteLogDto dto) {
// 封装条件
ScheduleExecuteLog scheduleExecuteLog = new ScheduleExecuteLog();
BeanUtils.copyProperties(dto, scheduleExecuteLog);
// 构建条件
Example<ScheduleExecuteLog> example = Example.of(scheduleExecuteLog);
Page<ScheduleExecuteLog> page = scheduleExecuteLogRepository.findAll(example, pageable);
// 设置返回结果
List<ScheduleExecuteLogVo> list = page.getContent().stream().map(executeLog -> {
ScheduleExecuteLogVo vo = new ScheduleExecuteLogVo();
BeanUtils.copyProperties(executeLog, vo);
String hexString = executeLog.getId().toHexString();
vo.setId(hexString);
return vo;
}).toList();
return PageResult.<ScheduleExecuteLogVo>builder()
.list(list)
.pageNo((long) page.getNumber())
.pageSize((long) page.getSize())
.total(page.getTotalElements())
.build();
}
/**
* 删除|批量删除调度任务执行日志
*
* @param ids 删除id列表
*/
@Override
public void deleteQuartzExecuteLog(List<String> ids) {
List<ObjectId> idList = ids.stream().map(ObjectId::new).toList();
scheduleExecuteLogRepository.deleteAllById(idList);
}
}

View File

@ -1,4 +1,4 @@
package cn.bunny.services.service.system.impl; package cn.bunny.services.service.log.impl;
import cn.bunny.common.service.context.BaseContext; import cn.bunny.common.service.context.BaseContext;
import cn.bunny.dao.dto.log.UserLoginLogDto; import cn.bunny.dao.dto.log.UserLoginLogDto;
@ -7,7 +7,7 @@ import cn.bunny.dao.pojo.result.PageResult;
import cn.bunny.dao.vo.log.UserLoginLogLocalVo; import cn.bunny.dao.vo.log.UserLoginLogLocalVo;
import cn.bunny.dao.vo.log.UserLoginLogVo; import cn.bunny.dao.vo.log.UserLoginLogVo;
import cn.bunny.services.mapper.system.UserLoginLogMapper; import cn.bunny.services.mapper.system.UserLoginLogMapper;
import cn.bunny.services.service.system.UserLoginLogService; import cn.bunny.services.service.log.UserLoginLogService;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

View File

@ -1,17 +1,17 @@
package cn.bunny.services.service.system.impl; package cn.bunny.services.service.log.impl;
import cn.bunny.dao.dto.log.UserRequestLogDto; import cn.bunny.dao.dto.log.UserRequestLogDto;
import cn.bunny.dao.entity.log.UserRequestLog; import cn.bunny.dao.entity.log.UserRequestLog;
import cn.bunny.dao.pojo.result.PageResult; import cn.bunny.dao.pojo.result.PageResult;
import cn.bunny.dao.vo.log.UserRequestLogVo; import cn.bunny.dao.vo.log.UserRequestLogVo;
import cn.bunny.services.repository.UserRequestLogRepository; import cn.bunny.services.repository.UserRequestLogRepository;
import cn.bunny.services.service.system.UserRequestLogService; import cn.bunny.services.service.log.UserRequestLogService;
import org.bson.types.ObjectId; import org.bson.types.ObjectId;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Example; import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
@ -30,7 +30,7 @@ public class UserRequestLogServiceImpl implements UserRequestLogService {
* @return 分页结果 * @return 分页结果
*/ */
@Override @Override
public PageResult<UserRequestLogVo> getRequestLogList(Pageable pageable, UserRequestLogDto dto) { public PageResult<UserRequestLogVo> getRequestLogList(PageRequest pageable, UserRequestLogDto dto) {
// 封装条件 // 封装条件
UserRequestLog userRequestLog = new UserRequestLog(); UserRequestLog userRequestLog = new UserRequestLog();
BeanUtils.copyProperties(dto, userRequestLog); BeanUtils.copyProperties(dto, userRequestLog);
@ -38,6 +38,7 @@ public class UserRequestLogServiceImpl implements UserRequestLogService {
// 构建条件 // 构建条件
Example<UserRequestLog> example = Example.of(userRequestLog); Example<UserRequestLog> example = Example.of(userRequestLog);
Page<UserRequestLog> page = userRequestLogRepository.findAll(example, pageable); Page<UserRequestLog> page = userRequestLogRepository.findAll(example, pageable);
List<UserRequestLogVo> content = page.getContent().stream().map(requestLog -> { List<UserRequestLogVo> content = page.getContent().stream().map(requestLog -> {
UserRequestLogVo vo = new UserRequestLogVo(); UserRequestLogVo vo = new UserRequestLogVo();
BeanUtils.copyProperties(requestLog, vo); BeanUtils.copyProperties(requestLog, vo);

View File

@ -1,35 +0,0 @@
package cn.bunny.services.service.schedule;
import cn.bunny.dao.dto.log.ScheduleExecuteLogDto;
import cn.bunny.dao.entity.log.ScheduleExecuteLog;
import cn.bunny.dao.pojo.result.PageResult;
import cn.bunny.dao.vo.log.QuartzExecuteLogVo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* <p>
* 调度任务执行日志 服务类
* </p>
*
* @author Bunny
* @since 2024-10-18 12:56:39
*/
public interface ScheduleExecuteLogService extends IService<ScheduleExecuteLog> {
/**
* * 获取调度任务执行日志列表
*
* @return 调度任务执行日志返回列表
*/
PageResult<QuartzExecuteLogVo> getQuartzExecuteLogList(Page<ScheduleExecuteLog> pageParams, ScheduleExecuteLogDto dto);
/**
* * 删除|批量删除调度任务执行日志类型
*
* @param ids 删除id列表
*/
void deleteQuartzExecuteLog(List<Long> ids);
}

View File

@ -1,55 +0,0 @@
package cn.bunny.services.service.schedule.impl;
import cn.bunny.dao.dto.log.ScheduleExecuteLogDto;
import cn.bunny.dao.entity.log.ScheduleExecuteLog;
import cn.bunny.dao.pojo.result.PageResult;
import cn.bunny.dao.vo.log.QuartzExecuteLogVo;
import cn.bunny.services.mapper.schedule.ScheduleExecuteLogMapper;
import cn.bunny.services.service.schedule.ScheduleExecuteLogService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 调度任务执行日志 服务实现类
* </p>
*
* @author Bunny
* @since 2024-10-18 12:56:39
*/
@Service
public class ScheduleExecuteLogServiceImpl extends ServiceImpl<ScheduleExecuteLogMapper, ScheduleExecuteLog> implements ScheduleExecuteLogService {
/**
* * 调度任务执行日志 服务实现类
*
* @param pageParams 调度任务执行日志分页查询page对象
* @param dto 调度任务执行日志分页查询对象
* @return 查询分页调度任务执行日志返回对象
*/
@Override
public PageResult<QuartzExecuteLogVo> getQuartzExecuteLogList(Page<ScheduleExecuteLog> pageParams, ScheduleExecuteLogDto dto) {
IPage<QuartzExecuteLogVo> page = baseMapper.selectListByPage(pageParams, dto);
return PageResult.<QuartzExecuteLogVo>builder()
.list(page.getRecords())
.pageNo(page.getCurrent())
.pageSize(page.getSize())
.total(page.getTotal())
.build();
}
/**
* 删除|批量删除调度任务执行日志
*
* @param ids 删除id列表
*/
@Override
public void deleteQuartzExecuteLog(List<Long> ids) {
baseMapper.deleteBatchIdsWithPhysics(ids);
}
}

View File

@ -1,6 +1,10 @@
_ _ _ _
| |__ _ _ _ __ _ __ _ _ (_) __ ___ ____ _ | |__ _ _ _ __ _ __ _ _ (_) __ ___ ____ _
| '_ \| | | | '_ \| '_ \| | | | | |/ _` \ \ / / _` | | '_ \| | | | '_ \| '_ \| | | | | |/ _` \ \ / / _` |
| |_) | |_| | | | | | | | |_| | | | (_| |\ V | (_| | | |_) | |_| | | | | | | | |_| | | | (_| |\ V | (_| |
|_.__/ \__,_|_| |_|_| |_|\__, | _/ |\__,_| \_/ \__,_| |_.__/ \__,_|_| |_|_| |_|\__, | _/ |\__,_| \_/ \__,_|
|___/ |__/ |___/ |__/
${AnsiColor.BRIGHT_GREEN}
SpringBoot Version: ${spring-boot.version}${spring-boot.formatted-version}
${AnsiColor.BLACK}

View File

@ -1,66 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.bunny.services.mapper.schedule.ScheduleExecuteLogMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.bunny.dao.entity.log.ScheduleExecuteLog">
<id column="id" property="id"/>
<id column="create_time" property="createTime"/>
<id column="update_time" property="updateTime"/>
<id column="create_user" property="createUser"/>
<id column="update_user" property="updateUser"/>
<id column="is_deleted" property="isDeleted"/>
<id column="job_name" property="jobName"/>
<id column="job_group" property="jobGroup"/>
<id column="job_class_name" property="jobClassName"/>
<id column="cron_expression" property="cronExpression"/>
<id column="trigger_name" property="triggerName"/>
<id column="execute_result" property="executeResult"/>
<id column="duration" property="duration"/>
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, create_time, update_time, create_user, update_user, is_deleted, job_name, job_group, job_class_name, cron_expression, trigger_name, execute_result, duration
</sql>
<!-- 分页查询调度任务执行日志内容 -->
<select id="selectListByPage" resultType="cn.bunny.dao.vo.log.QuartzExecuteLogVo">
select
log.*,
create_user.username as create_username,
update_user.username as update_username
from log_quartz_execute log
left join sys_user create_user on create_user.id = log.create_user
left join sys_user update_user on update_user.id = log.update_user
<where>
log.is_deleted = 0
<if test="dto.jobName != null and dto.jobName != ''">
and log.job_name like CONCAT('%',#{dto.jobName},'%')
</if>
<if test="dto.jobGroup != null and dto.jobGroup != ''">
and log.job_group like CONCAT('%',#{dto.jobGroup},'%')
</if>
<if test="dto.jobClassName != null and dto.jobClassName != ''">
and log.job_class_name like CONCAT('%',#{dto.jobClassName},'%')
</if>
<if test="dto.cronExpression != null and dto.cronExpression != ''">
and log.cron_expression like CONCAT('%',#{dto.cronExpression},'%')
</if>
<if test="dto.triggerName != null and dto.triggerName != ''">
and log.trigger_name like CONCAT('%',#{dto.triggerName},'%')
</if>
</where>
</select>
<!-- 物理删除调度任务执行日志 -->
<delete id="deleteBatchIdsWithPhysics">
delete
from log_quartz_execute
where id in
<foreach collection="ids" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</delete>
</mapper>

View File

@ -0,0 +1,30 @@
package cn.bunny.services.service.system.impl;
import cn.bunny.dao.entity.log.UserRequestLog;
import cn.bunny.services.repository.UserRequestLogRepository;
import com.alibaba.fastjson2.JSON;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
@SpringBootTest
class UserRequestLogServiceImplTest {
@Autowired
private UserRequestLogRepository userRequestLogRepository;
@Test
void getRequestLogList() {
// 封装条件
UserRequestLog userRequestLog = new UserRequestLog();
PageRequest pageable = PageRequest.of(0, 150);
// 构建条件
Example<UserRequestLog> example = Example.of(userRequestLog);
Page<UserRequestLog> page = userRequestLogRepository.findAll(example, pageable);
page.getContent().forEach(item -> System.out.println(JSON.toJSONString(item)));
}
}