生成操作日志代码.

This commit is contained in:
lijiahang
2023-10-10 18:37:17 +08:00
parent 730fb000d1
commit 2028d1ee0f
36 changed files with 557 additions and 52 deletions

View File

@@ -0,0 +1,17 @@
### 分页查询操作日志
POST {{baseUrl}}/infra/operator-log/query
Content-Type: application/json
Authorization: {{token}}
{
"page": 1,
"limit": 10,
"userId": "",
"module": "",
"type": "",
"result": "",
"startTime": "",
"endTime": ""
}
###

View File

@@ -0,0 +1,51 @@
package com.orion.ops.module.infra.controller;
import com.orion.lang.define.wrapper.DataGrid;
import com.orion.ops.framework.common.validator.group.Page;
import com.orion.ops.framework.log.core.annotation.IgnoreLog;
import com.orion.ops.framework.log.core.enums.IgnoreLogMode;
import com.orion.ops.framework.web.core.annotation.RestWrapper;
import com.orion.ops.module.infra.entity.request.operator.log.OperatorLogQueryRequest;
import com.orion.ops.module.infra.entity.vo.OperatorLogVO;
import com.orion.ops.module.infra.service.OperatorLogService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* 操作日志 api
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023-10-10 17:08
*/
@Tag(name = "infra - 操作日志服务")
@Slf4j
@Validated
@RestWrapper
@RestController
@RequestMapping("/infra/operator-log")
@SuppressWarnings({"ELValidationInJSP", "SpringElInspection"})
public class OperatorLogController {
@Resource
private OperatorLogService operatorLogService;
@IgnoreLog(IgnoreLogMode.RET)
@PostMapping("/query")
@Operation(summary = "分页查询操作日志")
@PreAuthorize("@ss.hasPermission('infra:operator-log:query')")
public DataGrid<OperatorLogVO> getOperatorLogPage(@Validated(Page.class) @RequestBody OperatorLogQueryRequest request) {
return operatorLogService.getOperatorLogPage(request);
}
}

View File

@@ -3,10 +3,12 @@ package com.orion.ops.module.infra.controller;
import com.orion.lang.define.wrapper.DataGrid;
import com.orion.lang.define.wrapper.HttpWrapper;
import com.orion.lang.utils.collect.Lists;
import com.orion.ops.framework.biz.operator.log.core.annotation.OperatorLog;
import com.orion.ops.framework.common.validator.group.Page;
import com.orion.ops.framework.log.core.annotation.IgnoreLog;
import com.orion.ops.framework.log.core.enums.IgnoreLogMode;
import com.orion.ops.framework.web.core.annotation.RestWrapper;
import com.orion.ops.module.infra.define.operator.UserOperatorType;
import com.orion.ops.module.infra.entity.request.user.*;
import com.orion.ops.module.infra.entity.vo.SystemUserVO;
import com.orion.ops.module.infra.service.SystemUserRoleService;

View File

@@ -0,0 +1,28 @@
package com.orion.ops.module.infra.convert;
import com.orion.ops.framework.biz.operator.log.core.model.OperatorLogModel;
import com.orion.ops.module.infra.entity.domain.OperatorLogDO;
import com.orion.ops.module.infra.entity.request.operator.log.OperatorLogQueryRequest;
import com.orion.ops.module.infra.entity.vo.OperatorLogVO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
/**
* 操作日志 内部对象转换器
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023-10-10 17:08
*/
@Mapper
public interface OperatorLogConvert {
OperatorLogConvert MAPPER = Mappers.getMapper(OperatorLogConvert.class);
OperatorLogDO to(OperatorLogModel model);
OperatorLogDO to(OperatorLogQueryRequest request);
OperatorLogVO to(OperatorLogDO domain);
}

View File

@@ -0,0 +1,17 @@
package com.orion.ops.module.infra.dao;
import com.orion.ops.framework.mybatis.core.mapper.IMapper;
import com.orion.ops.module.infra.entity.domain.OperatorLogDO;
import org.apache.ibatis.annotations.Mapper;
/**
* 操作日志 Mapper 接口
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023-10-10 17:08
*/
@Mapper
public interface OperatorLogDAO extends IMapper<OperatorLogDO> {
}

View File

@@ -1,4 +1,4 @@
package com.orion.ops.module.infra.define;
package com.orion.ops.module.infra.define.cache;
import com.orion.lang.define.cache.CacheKeyBuilder;
import com.orion.lang.define.cache.CacheKeyDefine;

View File

@@ -1,4 +1,4 @@
package com.orion.ops.module.infra.define;
package com.orion.ops.module.infra.define.cache;
import com.alibaba.fastjson.JSONObject;
import com.orion.lang.define.cache.CacheKeyBuilder;

View File

@@ -1,4 +1,4 @@
package com.orion.ops.module.infra.define;
package com.orion.ops.module.infra.define.cache;
import com.orion.lang.define.cache.CacheKeyBuilder;
import com.orion.lang.define.cache.CacheKeyDefine;

View File

@@ -1,4 +1,4 @@
package com.orion.ops.module.infra.define;
package com.orion.ops.module.infra.define.cache;
import com.orion.lang.define.cache.CacheKeyBuilder;
import com.orion.lang.define.cache.CacheKeyDefine;

View File

@@ -1,4 +1,4 @@
package com.orion.ops.module.infra.define;
package com.orion.ops.module.infra.define.cache;
import com.orion.lang.define.cache.CacheKeyBuilder;
import com.orion.lang.define.cache.CacheKeyDefine;

View File

@@ -0,0 +1,111 @@
package com.orion.ops.module.infra.entity.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.orion.ops.framework.mybatis.core.domain.BaseDO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.Date;
/**
* 操作日志 实体对象
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023-10-10 17:08
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@TableName(value = "operator_log", autoResultMap = true)
@Schema(name = "OperatorLogDO", description = "操作日志 实体对象")
public class OperatorLogDO extends BaseDO {
private static final long serialVersionUID = 1L;
@Schema(description = "id")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@Schema(description = "用户id")
@TableField("user_id")
private Long userId;
@Schema(description = "traceId")
@TableField("trace_id")
private String traceId;
@Schema(description = "请求ip")
@TableField("address")
private String address;
@Schema(description = "请求地址")
@TableField("location")
private String location;
@Schema(description = "userAgent")
@TableField("user_agent")
private String userAgent;
@Schema(description = "模块")
@TableField("module")
private String module;
@Schema(description = "操作类型")
@TableField("type")
private String type;
@Schema(description = "日志")
@TableField("log_info")
private String logInfo;
@Schema(description = "参数")
@TableField("extra")
private String extra;
@Schema(description = "操作结果 0失败 1成功")
@TableField("result")
private Integer result;
@Schema(description = "错误信息")
@TableField("error_message")
private String errorMessage;
@Schema(description = "返回值")
@TableField("return_value")
private String returnValue;
@Schema(description = "操作时间")
@TableField("duration")
private Integer duration;
@Schema(description = "开始时间")
@TableField("start_time")
private Date startTime;
@Schema(description = "结束时间")
@TableField("end_time")
private Date endTime;
@Schema(description = "修改时间")
@TableField(exist = false)
private Date updateTime;
@Schema(description = "创建人")
@TableField(exist = false)
private String creator;
@Schema(description = "修改人")
@TableField(exist = false)
private String updater;
@Schema(description = "是否删除 0未删除 1已删除")
@TableField(exist = false)
private Boolean deleted;
}

View File

@@ -0,0 +1,48 @@
package com.orion.ops.module.infra.entity.request.operator.log;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.orion.ops.framework.common.entity.PageRequest;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import javax.validation.constraints.Size;
import java.util.Date;
/**
* 操作日志 查询请求对象
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023-10-10 17:08
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Schema(name = "OperatorLogQueryRequest", description = "操作日志 查询请求对象")
public class OperatorLogQueryRequest extends PageRequest {
@Schema(description = "用户id")
private Long userId;
@Size(max = 32)
@Schema(description = "模块")
private String module;
@Size(max = 64)
@Schema(description = "操作类型")
private String type;
@Schema(description = "操作结果 0失败 1成功")
private Integer result;
@Schema(description = "开始时间-开区间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date startTimeStart;
@Schema(description = "开始时间-闭区间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date startTimeEnd;
}

View File

@@ -0,0 +1,79 @@
package com.orion.ops.module.infra.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* 操作日志 视图响应对象
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023-10-10 17:08
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(name = "OperatorLogVO", description = "操作日志 视图响应对象")
public class OperatorLogVO implements Serializable {
private static final long serialVersionUID = 1L;
@Schema(description = "id")
private Long id;
@Schema(description = "用户id")
private Long userId;
@Schema(description = "traceId")
private String traceId;
@Schema(description = "请求ip")
private String address;
@Schema(description = "请求地址")
private String location;
@Schema(description = "userAgent")
private String userAgent;
@Schema(description = "模块")
private String module;
@Schema(description = "操作类型")
private String type;
@Schema(description = "日志")
private String logInfo;
@Schema(description = "参数")
private String extra;
@Schema(description = "操作结果 0失败 1成功")
private Integer result;
@Schema(description = "错误信息")
private String errorMessage;
@Schema(description = "返回值")
private String returnValue;
@Schema(description = "操作时间")
private Integer duration;
@Schema(description = "开始时间")
private Date startTime;
@Schema(description = "结束时间")
private Date endTime;
@Schema(description = "创建时间")
private Date createTime;
}

View File

@@ -2,8 +2,11 @@ package com.orion.ops.module.infra.framework.service.impl;
import com.orion.ops.framework.biz.operator.log.core.model.OperatorLogModel;
import com.orion.ops.framework.biz.operator.log.core.service.OperatorLogFrameworkService;
import com.orion.ops.module.infra.service.OperatorLogService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* 操作日志包 实现类
*
@@ -14,9 +17,12 @@ import org.springframework.stereotype.Service;
@Service
public class OperatorLogFrameworkServiceImpl implements OperatorLogFrameworkService {
@Resource
private OperatorLogService operatorLogService;
@Override
public void insert(OperatorLogModel log) {
System.out.println(log);
operatorLogService.addOperatorLog(log);
}
}

View File

@@ -0,0 +1,32 @@
package com.orion.ops.module.infra.service;
import com.orion.lang.define.wrapper.DataGrid;
import com.orion.ops.framework.biz.operator.log.core.model.OperatorLogModel;
import com.orion.ops.module.infra.entity.request.operator.log.OperatorLogQueryRequest;
import com.orion.ops.module.infra.entity.vo.OperatorLogVO;
/**
* 操作日志 服务类
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023-10-10 17:08
*/
public interface OperatorLogService {
/**
* 添加操作日志
*
* @param model model
*/
void addOperatorLog(OperatorLogModel model);
/**
* 分页查询操作日志
*
* @param request request
* @return rows
*/
DataGrid<OperatorLogVO> getOperatorLogPage(OperatorLogQueryRequest request);
}

View File

@@ -18,7 +18,7 @@ import com.orion.ops.framework.security.core.utils.SecurityUtils;
import com.orion.ops.module.infra.convert.SystemUserConvert;
import com.orion.ops.module.infra.dao.SystemUserDAO;
import com.orion.ops.module.infra.dao.SystemUserRoleDAO;
import com.orion.ops.module.infra.define.UserCacheKeyDefine;
import com.orion.ops.module.infra.define.cache.UserCacheKeyDefine;
import com.orion.ops.module.infra.entity.domain.SystemRoleDO;
import com.orion.ops.module.infra.entity.domain.SystemUserDO;
import com.orion.ops.module.infra.entity.dto.LoginTokenDTO;

View File

@@ -8,7 +8,7 @@ import com.orion.ops.framework.redis.core.utils.RedisLists;
import com.orion.ops.framework.security.core.utils.SecurityUtils;
import com.orion.ops.module.infra.convert.FavoriteConvert;
import com.orion.ops.module.infra.dao.FavoriteDAO;
import com.orion.ops.module.infra.define.FavoriteCacheKeyDefine;
import com.orion.ops.module.infra.define.cache.FavoriteCacheKeyDefine;
import com.orion.ops.module.infra.entity.domain.FavoriteDO;
import com.orion.ops.module.infra.entity.request.favorite.FavoriteOperatorRequest;
import com.orion.ops.module.infra.entity.request.favorite.FavoriteQueryRequest;

View File

@@ -0,0 +1,65 @@
package com.orion.ops.module.infra.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.orion.lang.define.wrapper.DataGrid;
import com.orion.ops.framework.biz.operator.log.core.model.OperatorLogModel;
import com.orion.ops.module.infra.convert.OperatorLogConvert;
import com.orion.ops.module.infra.dao.OperatorLogDAO;
import com.orion.ops.module.infra.entity.domain.OperatorLogDO;
import com.orion.ops.module.infra.entity.request.operator.log.OperatorLogQueryRequest;
import com.orion.ops.module.infra.entity.vo.OperatorLogVO;
import com.orion.ops.module.infra.service.OperatorLogService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* 操作日志 服务实现类
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023-10-10 17:08
*/
@Slf4j
@Service
public class OperatorLogServiceImpl implements OperatorLogService {
@Resource
private OperatorLogDAO operatorLogDAO;
@Override
public void addOperatorLog(OperatorLogModel model) {
// 转换
OperatorLogDO record = OperatorLogConvert.MAPPER.to(model);
// 插入
operatorLogDAO.insert(record);
}
@Override
public DataGrid<OperatorLogVO> getOperatorLogPage(OperatorLogQueryRequest request) {
// 条件
LambdaQueryWrapper<OperatorLogDO> wrapper = this.buildQueryWrapper(request);
// 查询
return operatorLogDAO.of(wrapper)
.page(request)
.dataGrid(OperatorLogConvert.MAPPER::to);
}
/**
* 构建查询 wrapper
*
* @param request request
* @return wrapper
*/
private LambdaQueryWrapper<OperatorLogDO> buildQueryWrapper(OperatorLogQueryRequest request) {
return operatorLogDAO.wrapper()
.eq(OperatorLogDO::getUserId, request.getUserId())
.eq(OperatorLogDO::getModule, request.getModule())
.eq(OperatorLogDO::getType, request.getType())
.eq(OperatorLogDO::getResult, request.getResult())
.ge(OperatorLogDO::getStartTime, request.getStartTimeStart())
.le(OperatorLogDO::getStartTime, request.getStartTimeEnd());
}
}

View File

@@ -8,7 +8,7 @@ import com.orion.ops.framework.common.utils.Valid;
import com.orion.ops.framework.redis.core.utils.RedisStrings;
import com.orion.ops.framework.security.core.utils.SecurityUtils;
import com.orion.ops.module.infra.dao.PreferenceDAO;
import com.orion.ops.module.infra.define.PreferenceCacheKeyDefine;
import com.orion.ops.module.infra.define.cache.PreferenceCacheKeyDefine;
import com.orion.ops.module.infra.entity.domain.PreferenceDO;
import com.orion.ops.module.infra.entity.request.preference.PreferenceUpdateRequest;
import com.orion.ops.module.infra.entity.vo.PreferenceVO;

View File

@@ -8,7 +8,7 @@ import com.orion.ops.framework.redis.core.utils.RedisStrings;
import com.orion.ops.module.infra.dao.SystemRoleDAO;
import com.orion.ops.module.infra.dao.SystemUserDAO;
import com.orion.ops.module.infra.dao.SystemUserRoleDAO;
import com.orion.ops.module.infra.define.UserCacheKeyDefine;
import com.orion.ops.module.infra.define.cache.UserCacheKeyDefine;
import com.orion.ops.module.infra.entity.domain.SystemRoleDO;
import com.orion.ops.module.infra.entity.domain.SystemUserDO;
import com.orion.ops.module.infra.entity.domain.SystemUserRoleDO;

View File

@@ -15,7 +15,7 @@ import com.orion.ops.framework.security.core.utils.SecurityUtils;
import com.orion.ops.module.infra.convert.SystemUserConvert;
import com.orion.ops.module.infra.dao.SystemUserDAO;
import com.orion.ops.module.infra.dao.SystemUserRoleDAO;
import com.orion.ops.module.infra.define.UserCacheKeyDefine;
import com.orion.ops.module.infra.define.cache.UserCacheKeyDefine;
import com.orion.ops.module.infra.entity.domain.SystemUserDO;
import com.orion.ops.module.infra.entity.request.user.*;
import com.orion.ops.module.infra.entity.vo.SystemUserVO;

View File

@@ -8,7 +8,7 @@ import com.orion.ops.framework.redis.core.utils.RedisStrings;
import com.orion.ops.module.infra.convert.TagRelConvert;
import com.orion.ops.module.infra.dao.TagDAO;
import com.orion.ops.module.infra.dao.TagRelDAO;
import com.orion.ops.module.infra.define.TagCacheKeyDefine;
import com.orion.ops.module.infra.define.cache.TagCacheKeyDefine;
import com.orion.ops.module.infra.entity.domain.TagDO;
import com.orion.ops.module.infra.entity.domain.TagRelDO;
import com.orion.ops.module.infra.entity.dto.TagCacheDTO;

View File

@@ -7,7 +7,7 @@ import com.orion.ops.framework.mybatis.core.query.Conditions;
import com.orion.ops.framework.redis.core.utils.RedisLists;
import com.orion.ops.module.infra.convert.TagConvert;
import com.orion.ops.module.infra.dao.TagDAO;
import com.orion.ops.module.infra.define.TagCacheKeyDefine;
import com.orion.ops.module.infra.define.cache.TagCacheKeyDefine;
import com.orion.ops.module.infra.entity.domain.TagDO;
import com.orion.ops.module.infra.entity.dto.TagCacheDTO;
import com.orion.ops.module.infra.entity.request.tag.TagCreateRequest;

View File

@@ -3,7 +3,7 @@ package com.orion.ops.module.infra.service.impl;
import com.orion.lang.utils.collect.Lists;
import com.orion.ops.framework.redis.core.utils.RedisLists;
import com.orion.ops.framework.security.core.utils.SecurityUtils;
import com.orion.ops.module.infra.define.TipsCacheKeyDefine;
import com.orion.ops.module.infra.define.cache.TipsCacheKeyDefine;
import com.orion.ops.module.infra.service.TipsService;
import org.springframework.stereotype.Service;

View File

@@ -0,0 +1,31 @@
<?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="com.orion.ops.module.infra.dao.OperatorLogDAO">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.orion.ops.module.infra.entity.domain.OperatorLogDO">
<id column="id" property="id"/>
<result column="user_id" property="userId"/>
<result column="trace_id" property="traceId"/>
<result column="address" property="address"/>
<result column="location" property="location"/>
<result column="user_agent" property="userAgent"/>
<result column="module" property="module"/>
<result column="type" property="type"/>
<result column="log_info" property="logInfo"/>
<result column="extra" property="extra"/>
<result column="result" property="result"/>
<result column="error_message" property="errorMessage"/>
<result column="return_value" property="returnValue"/>
<result column="duration" property="duration"/>
<result column="start_time" property="startTime"/>
<result column="end_time" property="endTime"/>
<result column="create_time" property="createTime"/>
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, user_id, trace_id, address, location, user_agent, module, type, log_info, extra, result, error_message, return_value, duration, start_time, end_time, create_time
</sql>
</mapper>