在系统日志中新增 platform 字段,用于区分医生端(doctor)和管理端(manage)的操作日志,并提供分别查询医生端和管理端日志的接口。
位置:/doc/sql/add_platform_to_sys_log.sql
-- 1. 添加 platform 字段
ALTER TABLE `sys_log`
ADD COLUMN `platform` varchar(20) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '平台类型:doctor-医生端,manage-管理端' AFTER `real_name`;
-- 2. 添加索引
ALTER TABLE `sys_log` ADD INDEX `idx_platform` (`platform`);
ALTER TABLE `sys_log` ADD INDEX `idx_platform_time` (`platform`, `operate_time`);
在前端项目的 axios 拦截器中添加 platform 请求头:
// axios 请求拦截器
axios.interceptors.request.use(config => {
// 添加平台标识
config.headers['platform'] = 'doctor';
// 其他配置...
return config;
});
// axios 请求拦截器
axios.interceptors.request.use(config => {
// 添加平台标识
config.headers['platform'] = 'manage';
// 其他配置...
return config;
});
AOP 会自动从请求头获取 platform 字段并记录到日志中:
// 平台类型(从请求头获取)
String platform = request.getHeader("platform");
if (StringUtils.isNotBlank(platform)) {
log.setPlatform(platform.toLowerCase()); // 转为小写存储
} else {
// 如果请求头没有platform,尝试从URL判断
String requestUri = request.getRequestURI();
if (requestUri.contains("/api/doctor/") || requestUri.contains("/doctor/")) {
log.setPlatform("doctor");
} else if (requestUri.contains("/api/admin/") || requestUri.contains("/api/manage/")) {
log.setPlatform("manage");
}
}
说明:
platform 获取新增字段:
/**
* 平台类型:doctor-医生端,manage-管理端
*/
private String platform;
/api/log
接口: POST /api/log/doctor/page
请求体:
{
"username": "zhangsan", // 可选,用户名模糊查询
"logType": "操作日志", // 可选,日志类型
"operateType": "查询", // 可选,操作类型
"status": 1, // 可选,状态 0-失败 1-成功
"startTime": "2025-12-01 00:00:00", // 可选,开始时间
"endTime": "2025-12-01 23:59:59", // 可选,结束时间
"pageNum": 1, // 页码,默认1
"pageSize": 10 // 每页大小,默认10
}
响应示例:
{
"code": 200,
"message": "查询成功",
"data": {
"total": 100,
"pageNum": 1,
"pageSize": 10,
"list": [
{
"id": 1,
"userId": 10,
"username": "zhangsan",
"realName": "张三",
"platform": "doctor",
"logType": "操作日志",
"operateType": "查询",
"detail": "查询患者列表",
"requestUrl": "/api/patient/list",
"requestMethod": "POST",
"operateIp": "192.168.1.100",
"operateTime": "2025-12-01 10:00:00",
"useTime": 123,
"status": 1,
"browser": "Chrome",
"os": "Windows 10"
}
]
}
}
接口: POST /api/log/manage/page
请求体: 同医生端
响应: 同医生端,platform 字段为 "manage"
接口: POST /api/log/page
请求体:
{
"platform": "doctor", // 可选,指定平台 doctor/manage
"username": "admin", // 可选
"logType": "登录日志", // 可选
"pageNum": 1,
"pageSize": 10
}
说明: 可以通过 platform 字段指定查询哪个平台的日志,如果不指定则查询所有平台
接口: GET /api/log/{id}
响应示例:
{
"code": 200,
"message": "查询成功",
"data": {
"id": 1,
"userId": 10,
"username": "zhangsan",
"realName": "张三",
"platform": "doctor",
"logType": "操作日志",
"operateType": "查询",
"detail": "查询患者列表",
"controller": "PatientController",
"method": "getPatientList",
"requestUrl": "/api/patient/list",
"requestMethod": "POST",
"requestParams": "{\"pageNum\":1,\"pageSize\":10}",
"operateIp": "192.168.1.100",
"operateTime": "2025-12-01 10:00:00",
"useTime": 123,
"status": 1,
"browser": "Chrome 120.0.0",
"os": "Windows 10"
}
}
// 查询医生端日志
async getDoctorLogs() {
const queryParams = {
username: this.searchForm.username,
logType: this.searchForm.logType,
startTime: this.searchForm.startTime,
endTime: this.searchForm.endTime,
pageNum: this.currentPage,
pageSize: this.pageSize
};
const response = await this.$axios.post('/api/log/doctor/page', queryParams);
if (response.data.code === 200) {
this.logList = response.data.data.list;
this.total = response.data.data.total;
}
}
// 查询管理端日志
async getManageLogs() {
const queryParams = {
username: this.searchForm.username,
logType: this.searchForm.logType,
startTime: this.searchForm.startTime,
endTime: this.searchForm.endTime,
pageNum: this.currentPage,
pageSize: this.pageSize
};
const response = await this.$axios.post('/api/log/manage/page', queryParams);
if (response.data.code === 200) {
this.logList = response.data.data.list;
this.total = response.data.data.total;
}
}
修改:
- src/main/java/com/zskk/pacsonline/component/aop/ControllerAop.java
- src/main/java/com/zskk/pacsonline/modules/system/entity/SysLog.java
- src/main/java/com/zskk/pacsonline/modules/system/mapper/SysLogMapper.java
- src/main/java/com/zskk/pacsonline/modules/system/service/SysLogService.java
- src/main/java/com/zskk/pacsonline/modules/system/service/impl/SysLogServiceImpl.java
- src/main/java/com/zskk/pacsonline/modules/system/controller/LogController.java
新增:
- doc/sql/add_platform_to_sys_log.sql
- src/main/java/com/zskk/pacsonline/modules/system/vo/LogQueryVO.java
- src/main/java/com/zskk/pacsonline/modules/system/dto/LogDTO.java
- src/main/java/com/zskk/pacsonline/modules/system/mapper/xml/SysLogMapper.xml
platform 字段和索引platform 请求头platform 字段为 NULL,可以通过 URL 规则进行批量更新idx_platform 和 idx_platform_time 索引优化查询性能启动项目后,访问 Swagger 文档查看详细的 API 接口说明:
http://localhost:8080/swagger-ui/index.html
在 "系统日志管理" 分组下可以看到所有日志查询相关的接口。
platform 字段是否为 doctorplatform 字段是否为 manage/api/log/doctor/page 和 /api/log/manage/page 验证日志筛选是否正确