日志(LogsController)¶
提供 KMS 知识管理模块「日志域」的能力:用户操作日志查询、KM 访问日志查询、所有用户文件上传数量统计。本控制器共 3 个端点,所有端点均返回 JSON 资源。
- 接口类型:REST 资源(
@RestController,所有方法级produces = MediaType.APPLICATION_JSON_VALUE) - 基址:
${myapps.context-path.kms:}/api/kms(类级@RequestMapping仅声明单一前缀) - Tag:kms日志模块
公共说明¶
- 鉴权(据源码
KmsMvcConfig+KmsSecurityFilter):KmsMvcConfig注册全局 Servlet 过滤器KmsSecurityFilter(URL 模式/*,context-path 为/时为/kms/*)。本控制器路径/api/kms/users/{userId}/logs、/api/kms/logs、/api/kms/logs/getAllUserUploadFileCount不在KmsSecurityFilter.isExcludeURI的豁免名单内(豁免仅覆盖/login.*、/admin、/domain.*、/tray/service、/authtime、service/OfficeServer、.*outsideshare/.*/preview、静态资源后缀、actuator/health等)。过滤器调用Security.getUserIdFromToken(request),取不到用户则返回 HTTP401。因此所有端点均需 accessToken,可通过以下任一方式传递(据Security.getUserIdFromToken):query 参数accessToken、query 参数access_token(移动端)、请求头accessToken、CookieaccessToken、请求头Authorization: Bearer <token>。完整鉴权机制见 index.md「鉴权说明」。 - 执行用户:
#3调用getUser().getDomainid()取当前用户企业域;#1、#2不调用getUser(),按入参userId/deptId过滤。 - 响应结构:统一
Resource(见 ../index.md「统一响应结构」),字段为errcode/errmsg/data/errors。 - 路径变量:
userId为 KMS 内部用户主键(与UserAPI一致)。
1. 查询我的日志¶
按用户Id、操作类型、关键字分页查询该用户的操作日志(据 Javadoc「查询我的日志」)。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/users/{userId}/logs(完整:{kms-context}/api/kms/users/{userId}/logs) - 鉴权:是(需 accessToken,据源码)
- Tag:kms日志模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| userId | path | string | 是 | 用户Id |
| keyWord | query | string | 否 | 关键字(模糊匹配) |
| operationType | query | int | 是 | 操作类型 |
| pageNo | query | int | 是 | 页码 |
| linesPerPage | query | int | 是 | 每页条数 |
请求示例¶
GET /api/kms/users/__USERID__/logs?operationType=1&pageNo=1&linesPerPage=20&accessToken=__TOKEN__ HTTP/1.1
响应¶
结构:统一 Resource。
data:DataPackage<Logs>,日志分页数据。
成功示例:
{
"errcode": 0,
"errmsg": "ok",
"data": {
"pageNo": 1,
"linesPerPage": 20,
"rowCount": 35,
"datas": [
{ "id": "__LOGID__", "userId": "__USERID__", "operationType": 1, "content": "预览文件 报告.docx", "operationDate": "2026-08-04 10:00:00" }
]
},
"errors": null
}
2. 查询 KM 访问日志¶
按用户、部门、操作类型、时间范围分页查询 KM 系统访问日志(据 Javadoc「KM访问日志」)。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/logs(完整:{kms-context}/api/kms/logs) - 鉴权:是(需 accessToken,据源码)
- Tag:kms日志模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| userId | query | string | 否 | 用户Id |
| deptId | query | string | 否 | 部门Id |
| keyWord | query | string | 否 | 关键字 |
| operationType | query | int | 否 | 操作类型 |
| startDate | query | date | 否 | 起始时间(Spring 默认按日期解析;建议传毫秒时间戳或 ISO 串,与服务端 Date 参数绑定一致) |
| endDate | query | date | 否 | 截止时间 |
| pageNo | query | int | 是 | 页码 |
| linesPerPage | query | int | 是 | 每页条数 |
注:本端点的
startDate/endDate由 Spring 按方法签名Date自动绑定,时间格式由全局@InitBinder决定(与ReportController中以字符串接收再手动解析不同)。
请求示例¶
GET /api/kms/logs?deptId=__DEPTID__&operationType=1&pageNo=1&linesPerPage=20&accessToken=__TOKEN__ HTTP/1.1
响应¶
结构:统一 Resource。
data:DataPackage<Logs>,访问日志分页数据。
成功示例:
{
"errcode": 0,
"errmsg": "ok",
"data": {
"pageNo": 1,
"linesPerPage": 20,
"rowCount": 120,
"datas": [ { "id": "__LOGID__", "userId": "__USERID__", "operationType": 1, "content": "下载文件 方案.docx" } ]
},
"errors": null
}
3. 获取所有用户的文件上传数量¶
分页统计当前用户企业域下所有用户的文件上传数量,并按 userId 经 Feign 回查补全 userName/name/avatar 字段(用户信息查询失败时仅记录日志,不中断统计流程)。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/logs/getAllUserUploadFileCount(完整:{kms-context}/api/kms/logs/getAllUserUploadFileCount) - 鉴权:是(需 accessToken,据源码)
- Tag:kms日志模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| linesPerPage | query | int | 是 | 每页条数 |
| pageNo | query | int | 是 | 页码 |
请求示例¶
响应¶
结构:统一 Resource。
data:DataPackage<Map>,分页信息沿用底层结果(linesPerPage/pageNo/rowCount),datas 中每项为 Map:
| 字段 | 类型 | 说明 |
|---|---|---|
| userName | string | 用户名(来自 ContributionFileCount) |
| fileUploadCount | number | 文件上传数量 |
| id | string | 用户Id |
| avatar | string | 头像(JSON 字符串,来自 KmsUser.avatar;查询失败时缺省) |
| name | string | 用户姓名(来自 KmsUser.name;查询失败时缺省) |
成功示例:
{
"errcode": 0,
"errmsg": "ok",
"data": {
"pageNo": 1,
"linesPerPage": 20,
"rowCount": 5,
"datas": [
{ "userName": "zhangsan", "fileUploadCount": 28, "id": "__USERID1__", "avatar": "{...}", "name": "张三" }
]
},
"errors": null
}