mirror of
https://github.com/continew-org/continew-admin.git
synced 2025-09-09 20:57:21 +08:00
优化:优化模型类命名(为数据模型类添加 DO 后缀),并优化所有模型相关变量命名
This commit is contained in:
@@ -53,7 +53,7 @@ import top.charles7c.cnadmin.common.util.holder.LogContextHolder;
|
||||
import top.charles7c.cnadmin.monitor.annotation.Log;
|
||||
import top.charles7c.cnadmin.monitor.config.properties.LogProperties;
|
||||
import top.charles7c.cnadmin.monitor.enums.LogStatusEnum;
|
||||
import top.charles7c.cnadmin.monitor.model.entity.SysLog;
|
||||
import top.charles7c.cnadmin.monitor.model.entity.LogDO;
|
||||
|
||||
/**
|
||||
* 系统日志拦截器
|
||||
@@ -83,20 +83,20 @@ public class LogInterceptor implements HandlerInterceptor {
|
||||
public void afterCompletion(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response,
|
||||
@NonNull Object handler, Exception e) {
|
||||
// 记录请求耗时及异常信息
|
||||
SysLog sysLog = this.logElapsedTimeAndException();
|
||||
if (sysLog == null) {
|
||||
LogDO logDO = this.logElapsedTimeAndException();
|
||||
if (logDO == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 记录日志描述
|
||||
this.logDescription(sysLog, handler);
|
||||
this.logDescription(logDO, handler);
|
||||
// 记录请求信息
|
||||
this.logRequest(sysLog, request);
|
||||
this.logRequest(logDO, request);
|
||||
// 记录响应信息
|
||||
this.logResponse(sysLog, response);
|
||||
this.logResponse(logDO, response);
|
||||
|
||||
// 保存系统日志
|
||||
SpringUtil.getApplicationContext().publishEvent(sysLog);
|
||||
SpringUtil.getApplicationContext().publishEvent(logDO);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -114,28 +114,28 @@ public class LogInterceptor implements HandlerInterceptor {
|
||||
*
|
||||
* @return 系统日志信息
|
||||
*/
|
||||
private SysLog logElapsedTimeAndException() {
|
||||
private LogDO logElapsedTimeAndException() {
|
||||
LogContext logContext = LogContextHolder.get();
|
||||
if (logContext != null) {
|
||||
LogContextHolder.remove();
|
||||
SysLog sysLog = new SysLog();
|
||||
sysLog.setCreateTime(logContext.getCreateTime());
|
||||
sysLog.setElapsedTime(System.currentTimeMillis() - LocalDateTimeUtil.toEpochMilli(sysLog.getCreateTime()));
|
||||
sysLog.setStatus(LogStatusEnum.SUCCESS);
|
||||
LogDO logDO = new LogDO();
|
||||
logDO.setCreateTime(logContext.getCreateTime());
|
||||
logDO.setElapsedTime(System.currentTimeMillis() - LocalDateTimeUtil.toEpochMilli(logDO.getCreateTime()));
|
||||
logDO.setStatus(LogStatusEnum.SUCCESS);
|
||||
|
||||
// 记录错误信息(非未知异常不记录异常详情,只记录错误信息)
|
||||
String errorMsg = logContext.getErrorMsg();
|
||||
if (StrUtil.isNotBlank(errorMsg)) {
|
||||
sysLog.setStatus(LogStatusEnum.FAILURE);
|
||||
sysLog.setErrorMsg(errorMsg);
|
||||
logDO.setStatus(LogStatusEnum.FAILURE);
|
||||
logDO.setErrorMsg(errorMsg);
|
||||
}
|
||||
// 记录异常详情
|
||||
Exception exception = logContext.getException();
|
||||
if (exception != null) {
|
||||
sysLog.setStatus(LogStatusEnum.FAILURE);
|
||||
sysLog.setExceptionDetail(ExceptionUtil.stacktraceToString(exception, -1));
|
||||
logDO.setStatus(LogStatusEnum.FAILURE);
|
||||
logDO.setExceptionDetail(ExceptionUtil.stacktraceToString(exception, -1));
|
||||
}
|
||||
return sysLog;
|
||||
return logDO;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -143,69 +143,69 @@ public class LogInterceptor implements HandlerInterceptor {
|
||||
/**
|
||||
* 记录日志描述
|
||||
*
|
||||
* @param sysLog
|
||||
* @param logDO
|
||||
* 系统日志信息
|
||||
* @param handler
|
||||
* 处理器
|
||||
*/
|
||||
private void logDescription(SysLog sysLog, Object handler) {
|
||||
private void logDescription(LogDO logDO, Object handler) {
|
||||
HandlerMethod handlerMethod = (HandlerMethod)handler;
|
||||
Operation methodOperation = AnnotationUtils.findAnnotation(handlerMethod.getMethod(), Operation.class);
|
||||
Log methodLog = AnnotationUtils.findAnnotation(handlerMethod.getMethod(), Log.class);
|
||||
|
||||
if (methodOperation != null) {
|
||||
sysLog.setDescription(
|
||||
logDO.setDescription(
|
||||
StrUtil.isNotBlank(methodOperation.summary()) ? methodOperation.summary() : "请在该接口方法上指定日志描述");
|
||||
}
|
||||
// 例如:@Log("获取验证码") -> 获取验证码
|
||||
if (methodLog != null && StrUtil.isNotBlank(methodLog.value())) {
|
||||
sysLog.setDescription(methodLog.value());
|
||||
logDO.setDescription(methodLog.value());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 记录请求信息
|
||||
*
|
||||
* @param sysLog
|
||||
* @param logDO
|
||||
* 系统日志信息
|
||||
* @param request
|
||||
* 请求对象
|
||||
*/
|
||||
private void logRequest(SysLog sysLog, HttpServletRequest request) {
|
||||
sysLog.setRequestUrl(StrUtil.isBlank(request.getQueryString()) ? request.getRequestURL().toString()
|
||||
private void logRequest(LogDO logDO, HttpServletRequest request) {
|
||||
logDO.setRequestUrl(StrUtil.isBlank(request.getQueryString()) ? request.getRequestURL().toString()
|
||||
: request.getRequestURL().append("?").append(request.getQueryString()).toString());
|
||||
sysLog.setRequestMethod(request.getMethod());
|
||||
sysLog.setRequestHeaders(this.desensitize(ServletUtil.getHeaderMap(request)));
|
||||
logDO.setRequestMethod(request.getMethod());
|
||||
logDO.setRequestHeaders(this.desensitize(ServletUtil.getHeaderMap(request)));
|
||||
String requestBody = this.getRequestBody(request);
|
||||
if (StrUtil.isNotBlank(requestBody)) {
|
||||
sysLog.setRequestBody(this.desensitize(
|
||||
logDO.setRequestBody(this.desensitize(
|
||||
JSONUtil.isTypeJSON(requestBody) ? JSONUtil.parseObj(requestBody) : ServletUtil.getParamMap(request)));
|
||||
}
|
||||
sysLog.setClientIp(ServletUtil.getClientIP(request));
|
||||
sysLog.setLocation(IpUtils.getCityInfo(sysLog.getClientIp()));
|
||||
sysLog.setBrowser(ServletUtils.getBrowser(request));
|
||||
sysLog.setCreateUser(sysLog.getCreateUser() == null ? LoginHelper.getUserId() : sysLog.getCreateUser());
|
||||
logDO.setClientIp(ServletUtil.getClientIP(request));
|
||||
logDO.setLocation(IpUtils.getCityInfo(logDO.getClientIp()));
|
||||
logDO.setBrowser(ServletUtils.getBrowser(request));
|
||||
logDO.setCreateUser(logDO.getCreateUser() == null ? LoginHelper.getUserId() : logDO.getCreateUser());
|
||||
}
|
||||
|
||||
/**
|
||||
* 记录响应信息
|
||||
*
|
||||
* @param sysLog
|
||||
* @param logDO
|
||||
* 系统日志信息
|
||||
* @param response
|
||||
* 响应对象
|
||||
*/
|
||||
private void logResponse(SysLog sysLog, HttpServletResponse response) {
|
||||
private void logResponse(LogDO logDO, HttpServletResponse response) {
|
||||
int status = response.getStatus();
|
||||
sysLog.setStatusCode(status);
|
||||
sysLog.setResponseHeaders(this.desensitize(ServletUtil.getHeadersMap(response)));
|
||||
logDO.setStatusCode(status);
|
||||
logDO.setResponseHeaders(this.desensitize(ServletUtil.getHeadersMap(response)));
|
||||
// 响应体(不记录非 JSON 响应数据)
|
||||
String responseBody = this.getResponseBody(response);
|
||||
if (StrUtil.isNotBlank(responseBody) && JSONUtil.isTypeJSON(responseBody)) {
|
||||
sysLog.setResponseBody(responseBody);
|
||||
logDO.setResponseBody(responseBody);
|
||||
}
|
||||
// 操作失败:>= 400
|
||||
sysLog.setStatus(status >= HttpStatus.HTTP_BAD_REQUEST ? LogStatusEnum.FAILURE : sysLog.getStatus());
|
||||
logDO.setStatus(status >= HttpStatus.HTTP_BAD_REQUEST ? LogStatusEnum.FAILURE : logDO.getStatus());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -18,7 +18,7 @@ package top.charles7c.cnadmin.monitor.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
import top.charles7c.cnadmin.monitor.model.entity.SysLog;
|
||||
import top.charles7c.cnadmin.monitor.model.entity.LogDO;
|
||||
|
||||
/**
|
||||
* 系统日志 Mapper
|
||||
@@ -26,4 +26,4 @@ import top.charles7c.cnadmin.monitor.model.entity.SysLog;
|
||||
* @author Charles7c
|
||||
* @since 2022/12/22 21:47
|
||||
*/
|
||||
public interface LogMapper extends BaseMapper<SysLog> {}
|
||||
public interface LogMapper extends BaseMapper<LogDO> {}
|
||||
|
@@ -34,7 +34,7 @@ import top.charles7c.cnadmin.monitor.enums.LogStatusEnum;
|
||||
*/
|
||||
@Data
|
||||
@TableName("sys_log")
|
||||
public class SysLog implements Serializable {
|
||||
public class LogDO implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
@@ -17,7 +17,7 @@
|
||||
package top.charles7c.cnadmin.monitor.service;
|
||||
|
||||
import top.charles7c.cnadmin.common.model.query.PageQuery;
|
||||
import top.charles7c.cnadmin.common.model.vo.PageInfo;
|
||||
import top.charles7c.cnadmin.common.model.vo.PageDataVO;
|
||||
import top.charles7c.cnadmin.monitor.model.query.LoginLogQuery;
|
||||
import top.charles7c.cnadmin.monitor.model.query.OperationLogQuery;
|
||||
import top.charles7c.cnadmin.monitor.model.query.SystemLogQuery;
|
||||
@@ -43,7 +43,7 @@ public interface LogService {
|
||||
* 分页查询条件
|
||||
* @return 操作日志分页信息
|
||||
*/
|
||||
PageInfo<OperationLogVO> list(OperationLogQuery query, PageQuery pageQuery);
|
||||
PageDataVO<OperationLogVO> list(OperationLogQuery query, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 分页查询登录日志列表
|
||||
@@ -54,7 +54,7 @@ public interface LogService {
|
||||
* 分页查询条件
|
||||
* @return 登录日志分页信息
|
||||
*/
|
||||
PageInfo<LoginLogVO> list(LoginLogQuery query, PageQuery pageQuery);
|
||||
PageDataVO<LoginLogVO> list(LoginLogQuery query, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 分页查询系统日志列表
|
||||
@@ -65,7 +65,7 @@ public interface LogService {
|
||||
* 分页查询条件
|
||||
* @return 系统日志分页信息
|
||||
*/
|
||||
PageInfo<SystemLogVO> list(SystemLogQuery query, PageQuery pageQuery);
|
||||
PageDataVO<SystemLogVO> list(SystemLogQuery query, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查看系统日志详情
|
||||
|
@@ -34,13 +34,13 @@ import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
|
||||
import top.charles7c.cnadmin.common.model.query.PageQuery;
|
||||
import top.charles7c.cnadmin.common.model.vo.PageInfo;
|
||||
import top.charles7c.cnadmin.common.model.vo.PageDataVO;
|
||||
import top.charles7c.cnadmin.common.util.ExceptionUtils;
|
||||
import top.charles7c.cnadmin.common.util.ReflectUtils;
|
||||
import top.charles7c.cnadmin.common.util.helper.QueryHelper;
|
||||
import top.charles7c.cnadmin.common.util.validate.CheckUtils;
|
||||
import top.charles7c.cnadmin.monitor.mapper.LogMapper;
|
||||
import top.charles7c.cnadmin.monitor.model.entity.SysLog;
|
||||
import top.charles7c.cnadmin.monitor.model.entity.LogDO;
|
||||
import top.charles7c.cnadmin.monitor.model.query.LoginLogQuery;
|
||||
import top.charles7c.cnadmin.monitor.model.query.OperationLogQuery;
|
||||
import top.charles7c.cnadmin.monitor.model.query.SystemLogQuery;
|
||||
@@ -64,13 +64,13 @@ public class LogServiceImpl implements LogService {
|
||||
|
||||
@Async
|
||||
@EventListener
|
||||
public void save(SysLog sysLog) {
|
||||
logMapper.insert(sysLog);
|
||||
public void save(LogDO logDO) {
|
||||
logMapper.insert(logDO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageInfo<OperationLogVO> list(OperationLogQuery query, PageQuery pageQuery) {
|
||||
QueryWrapper<SysLog> queryWrapper = QueryHelper.build(query);
|
||||
public PageDataVO<OperationLogVO> list(OperationLogQuery query, PageQuery pageQuery) {
|
||||
QueryWrapper<LogDO> queryWrapper = QueryHelper.build(query);
|
||||
|
||||
// 限定查询信息
|
||||
String[] fieldsName = ReflectUtils.getNonStaticFieldsName(OperationLogVO.class);
|
||||
@@ -79,24 +79,24 @@ public class LogServiceImpl implements LogService {
|
||||
queryWrapper.select(columns);
|
||||
|
||||
// 分页查询
|
||||
IPage<SysLog> page = logMapper.selectPage(pageQuery.toPage(), queryWrapper);
|
||||
PageInfo<OperationLogVO> pageInfo = PageInfo.build(page, OperationLogVO.class);
|
||||
IPage<LogDO> page = logMapper.selectPage(pageQuery.toPage(), queryWrapper);
|
||||
PageDataVO<OperationLogVO> pageDataVO = PageDataVO.build(page, OperationLogVO.class);
|
||||
|
||||
// 填充数据(如果是查询个人操作日志,只查询一次用户信息即可)
|
||||
if (query.getUid() != null) {
|
||||
String nickname = ExceptionUtils.exToNull(() -> userService.getById(query.getUid()).getNickname());
|
||||
pageInfo.getList().forEach(o -> o.setCreateUserString(nickname));
|
||||
pageDataVO.getList().forEach(o -> o.setCreateUserString(nickname));
|
||||
} else {
|
||||
pageInfo.getList().forEach(this::fill);
|
||||
pageDataVO.getList().forEach(this::fill);
|
||||
}
|
||||
return pageInfo;
|
||||
return pageDataVO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageInfo<LoginLogVO> list(LoginLogQuery query, PageQuery pageQuery) {
|
||||
QueryWrapper<SysLog> queryWrapper = QueryHelper.build(query);
|
||||
public PageDataVO<LoginLogVO> list(LoginLogQuery query, PageQuery pageQuery) {
|
||||
QueryWrapper<LogDO> queryWrapper = QueryHelper.build(query);
|
||||
queryWrapper.lambda()
|
||||
.and(qw -> qw.like(SysLog::getRequestUrl, "/auth/login").or().like(SysLog::getRequestUrl, "/auth/logout"));
|
||||
.and(qw -> qw.like(LogDO::getRequestUrl, "/auth/login").or().like(LogDO::getRequestUrl, "/auth/logout"));
|
||||
|
||||
// 限定查询信息
|
||||
String[] fieldsName = ReflectUtils.getNonStaticFieldsName(LoginLogVO.class);
|
||||
@@ -105,17 +105,17 @@ public class LogServiceImpl implements LogService {
|
||||
queryWrapper.select(columns);
|
||||
|
||||
// 分页查询
|
||||
IPage<SysLog> page = logMapper.selectPage(pageQuery.toPage(), queryWrapper);
|
||||
PageInfo<LoginLogVO> pageInfo = PageInfo.build(page, LoginLogVO.class);
|
||||
IPage<LogDO> page = logMapper.selectPage(pageQuery.toPage(), queryWrapper);
|
||||
PageDataVO<LoginLogVO> pageDataVO = PageDataVO.build(page, LoginLogVO.class);
|
||||
|
||||
// 填充数据
|
||||
pageInfo.getList().forEach(this::fill);
|
||||
return pageInfo;
|
||||
pageDataVO.getList().forEach(this::fill);
|
||||
return pageDataVO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageInfo<SystemLogVO> list(SystemLogQuery query, PageQuery pageQuery) {
|
||||
QueryWrapper<SysLog> queryWrapper = QueryHelper.build(query);
|
||||
public PageDataVO<SystemLogVO> list(SystemLogQuery query, PageQuery pageQuery) {
|
||||
QueryWrapper<LogDO> queryWrapper = QueryHelper.build(query);
|
||||
|
||||
// 限定查询信息
|
||||
String[] fieldsName = ReflectUtils.getNonStaticFieldsName(SystemLogVO.class);
|
||||
@@ -124,35 +124,36 @@ public class LogServiceImpl implements LogService {
|
||||
queryWrapper.select(columns);
|
||||
|
||||
// 分页查询
|
||||
IPage<SysLog> page = logMapper.selectPage(pageQuery.toPage(), queryWrapper);
|
||||
PageInfo<SystemLogVO> pageInfo = PageInfo.build(page, SystemLogVO.class);
|
||||
IPage<LogDO> page = logMapper.selectPage(pageQuery.toPage(), queryWrapper);
|
||||
PageDataVO<SystemLogVO> pageDataVO = PageDataVO.build(page, SystemLogVO.class);
|
||||
|
||||
// 填充数据
|
||||
pageInfo.getList().forEach(this::fill);
|
||||
return pageInfo;
|
||||
pageDataVO.getList().forEach(this::fill);
|
||||
return pageDataVO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SystemLogDetailVO detail(Long logId) {
|
||||
SysLog sysLog = logMapper.selectById(logId);
|
||||
CheckUtils.throwIfNull(sysLog, String.format("ID为 [%s] 的日志已不存在", logId));
|
||||
LogDO logDO = logMapper.selectById(logId);
|
||||
CheckUtils.throwIfNull(logDO, String.format("ID为 [%s] 的日志已不存在", logId));
|
||||
|
||||
SystemLogDetailVO detailVO = BeanUtil.copyProperties(sysLog, SystemLogDetailVO.class);
|
||||
this.fill(detailVO);
|
||||
return detailVO;
|
||||
SystemLogDetailVO systemLogDetailVO = BeanUtil.copyProperties(logDO, SystemLogDetailVO.class);
|
||||
this.fill(systemLogDetailVO);
|
||||
return systemLogDetailVO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 填充数据
|
||||
*
|
||||
* @param vo
|
||||
* VO
|
||||
* @param logVO
|
||||
* 日志信息
|
||||
*/
|
||||
private void fill(LogVO vo) {
|
||||
Long createUser = vo.getCreateUser();
|
||||
private void fill(LogVO logVO) {
|
||||
Long createUser = logVO.getCreateUser();
|
||||
if (createUser == null) {
|
||||
return;
|
||||
}
|
||||
vo.setCreateUserString(ExceptionUtils.exToNull(() -> userService.getById(vo.getCreateUser())).getNickname());
|
||||
logVO.setCreateUserString(
|
||||
ExceptionUtils.exToNull(() -> userService.getById(logVO.getCreateUser())).getNickname());
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user