11 KiB
系统使用统计接口设计
1. 设计目标
基于“系统使用统计最终需求”,提供一套统一的统计查询接口,满足以下场景:
- 概览页查看核心指标与分布情况
- 明细页查看登录、上传、评查记录
- 支持按用户、部门、地区、文档大类、文档类型、入口模块筛选
- 支持动态分类,不写死业务名称
- 支持后续扩展导出、聚合表与驾驶舱
2. 设计原则
- 统一前缀:
/api/v3/usage-stats - 所有接口均需登录鉴权
- 汇总接口与明细接口分离
- 所有查询默认支持时间范围筛选
- 分类字段尽量返回
id + code + name - 地区统计支持
user/document两种口径
3. 统一筛选参数
以下参数为统计接口通用参数,按接口需要选用。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
dateFrom |
string | 否 | 起始日期,格式 YYYY-MM-DD |
dateTo |
string | 否 | 结束日期,格式 YYYY-MM-DD |
userId |
integer | 否 | 用户 ID |
departmentName |
string | 否 | 部门名称 |
area |
string | 否 | 地区编码/地区值 |
areaScope |
string | 否 | 地区口径:user / document,默认 user |
entryModuleId |
integer | 否 | 入口模块 ID |
documentCategoryId |
integer | 否 | 文档大类 ID |
documentTypeId |
integer | 否 | 文档类型 ID |
dataType |
string | 否 | 明细类型:login / upload / audit |
page |
integer | 否 | 页码,默认 1 |
pageSize |
integer | 否 | 每页大小,默认 20,最大 200 |
sortBy |
string | 否 | 排序字段 |
sortOrder |
string | 否 | 排序方向:asc / desc |
4. 接口清单
4.1 获取使用统计概览
GET /api/v3/usage-stats/overview
作用
返回概览页顶部核心指标与基础汇总。
请求参数
支持:
dateFromdateToareaareaScopeentryModuleIddocumentCategoryIddocumentTypeId
响应示例
{
"success": true,
"message": "ok",
"data": {
"loginUserCount": 128,
"loginCount": 346,
"activeUserCount": 152,
"uploadDocumentCount": 512,
"uploadAttachmentCount": 203,
"auditRunCount": 438,
"auditCompletedCount": 401,
"auditFailedCount": 19,
"lastUpdatedAt": "2026-05-09 18:30:00"
}
}
4.2 获取时间趋势统计
GET /api/v3/usage-stats/trends
作用
返回按日、周或月聚合的趋势数据。
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
dateFrom |
string | 否 | 起始日期 |
dateTo |
string | 否 | 结束日期 |
granularity |
string | 否 | 聚合粒度:day / week / month,默认 day |
metric |
string | 否 | 指标:login / upload / audit / active_user |
| 其余通用筛选参数 | - | 否 | 同上 |
响应示例
{
"success": true,
"message": "ok",
"data": {
"granularity": "month",
"metric": "audit",
"items": [
{ "label": "2026-01", "value": 42 },
{ "label": "2026-02", "value": 57 },
{ "label": "2026-03", "value": 63 }
]
}
}
4.3 获取按用户汇总统计
GET /api/v3/usage-stats/by-users
作用
按用户汇总登录、上传、评查情况,可用于用户排行与用户分析。
请求参数
支持全部通用参数,另外支持:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
keyword |
string | 否 | 用户名/姓名模糊搜索 |
响应示例
{
"success": true,
"message": "ok",
"data": {
"total": 2,
"page": 1,
"pageSize": 20,
"items": [
{
"userId": 101,
"username": "zhangsan",
"nickName": "张三",
"departmentName": "法规科",
"area": "mz",
"loginCount": 12,
"uploadDocumentCount": 20,
"uploadAttachmentCount": 8,
"auditRunCount": 15,
"auditCompletedCount": 14,
"auditFailedCount": 1,
"lastLoginTime": "2026-05-09 09:12:00"
},
{
"userId": 102,
"username": "lisi",
"nickName": "李四",
"departmentName": "合同管理部",
"area": "jy",
"loginCount": 8,
"uploadDocumentCount": 11,
"uploadAttachmentCount": 3,
"auditRunCount": 9,
"auditCompletedCount": 9,
"auditFailedCount": 0,
"lastLoginTime": "2026-05-08 16:20:00"
}
]
}
}
4.4 获取按部门汇总统计
GET /api/v3/usage-stats/by-departments
作用
按部门汇总登录、上传、评查使用情况。
请求参数
支持:
dateFromdateToareaareaScopeentryModuleIddocumentCategoryIddocumentTypeIdkeyword(部门模糊搜索)
响应示例
{
"success": true,
"message": "ok",
"data": {
"items": [
{
"departmentName": "法规科",
"userCount": 18,
"loginUserCount": 15,
"loginCount": 63,
"uploadDocumentCount": 40,
"auditRunCount": 52,
"auditCompletedCount": 48,
"auditFailedCount": 2
}
]
}
}
4.5 获取按地区汇总统计
GET /api/v3/usage-stats/by-areas
作用
按地区汇总统计,支持用户地区口径和文档地区口径。
请求参数
支持:
dateFromdateToareaScopeentryModuleIddocumentCategoryIddocumentTypeId
响应示例
{
"success": true,
"message": "ok",
"data": {
"areaScope": "user",
"items": [
{
"area": "mz",
"loginUserCount": 36,
"loginCount": 120,
"uploadDocumentCount": 75,
"auditRunCount": 82,
"auditCompletedCount": 78,
"auditFailedCount": 3
}
]
}
}
4.6 获取按文档大类汇总统计
GET /api/v3/usage-stats/by-categories
作用
动态统计各文档大类下的评查使用情况,不写死业务名称。
请求参数
支持:
dateFromdateToareaareaScopeentryModuleIddocumentCategoryId
响应示例
{
"success": true,
"message": "ok",
"data": {
"items": [
{
"documentCategoryId": 1,
"documentCategoryCode": "contract",
"documentCategoryName": "合同类",
"auditRunCount": 145,
"auditCompletedCount": 138,
"auditFailedCount": 4
}
]
}
}
4.7 获取按文档类型汇总统计
GET /api/v3/usage-stats/by-document-types
作用
统计各文档类型下的上传与评查使用情况。
请求参数
支持全部核心通用筛选参数。
响应示例
{
"success": true,
"message": "ok",
"data": {
"items": [
{
"documentTypeId": 12,
"documentTypeCode": "contract_tech",
"documentTypeName": "技术合同",
"entryModuleId": 3,
"entryModuleName": "合同管理",
"uploadDocumentCount": 32,
"auditRunCount": 29,
"auditCompletedCount": 28,
"auditFailedCount": 1
}
]
}
}
4.8 获取按入口模块汇总统计
GET /api/v3/usage-stats/by-entry-modules
作用
统计各入口模块下的上传与评查使用情况。
请求参数
支持:
dateFromdateToareaareaScopeentryModuleId
响应示例
{
"success": true,
"message": "ok",
"data": {
"items": [
{
"entryModuleId": 3,
"entryModuleName": "合同管理",
"uploadDocumentCount": 120,
"auditRunCount": 118,
"auditCompletedCount": 112,
"auditFailedCount": 4
}
]
}
}
4.9 获取使用明细列表
GET /api/v3/usage-stats/details
作用
统一查询登录、上传、评查三类明细数据。
请求参数
支持全部通用参数,其中 dataType 建议必传:
loginuploadaudit
响应示例
{
"success": true,
"message": "ok",
"data": {
"total": 1,
"page": 1,
"pageSize": 20,
"items": [
{
"time": "2026-05-09 10:23:11",
"dataType": "audit",
"userId": 101,
"username": "zhangsan",
"nickName": "张三",
"departmentName": "法规科",
"area": "mz",
"documentId": 886,
"documentName": "采购合同.docx",
"documentCategoryId": 1,
"documentCategoryName": "合同类",
"documentTypeId": 12,
"documentTypeName": "技术合同",
"entryModuleId": 3,
"entryModuleName": "合同管理",
"status": "completed",
"extra": {
"runId": 9981,
"resultStatus": "pass"
}
}
]
}
}
4.10 导出明细
GET /api/v3/usage-stats/export
作用
导出当前筛选条件下的明细数据。
请求参数
与 /details 相同,另支持:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
format |
string | 否 | 导出格式:csv / xlsx,默认 xlsx |
响应
- 文件流下载
- 响应头返回文件名
5. 返回结构约定
所有统计接口统一使用:
{
"success": true,
"message": "ok",
"data": {}
}
分页结构统一使用:
{
"total": 100,
"page": 1,
"pageSize": 20,
"items": []
}
6. 数据来源建议
6.1 登录数据
当前系统若尚未持久化登录记录,建议补充登录统计来源表,例如:
usage_login_events
至少记录:
- 用户 ID
- 登录时间
- 部门快照
- 地区快照
6.2 上传数据
建议来源:
leaudit_document_filesleaudit_documentssso_users
其中:
- 主文件上传:
file_role = 'primary' - 附件上传:
file_role = 'attachment'
6.3 评查数据
建议来源:
leaudit_audit_runsleaudit_documentsleaudit_document_typesleaudit_entry_modules
6.4 用户与组织信息
建议来源:
sso_users
主要字段:
idusernamenick_namedep_nameou_namearea
7. 动态分类建议
为避免写死业务名称,建议使用以下动态归类链路:
- 文档 -> 文档类型
- 文档类型 -> 文档大类
- 文档类型 -> 入口模块
若当前系统尚无稳定的“文档大类”实体,可采用以下两种方式之一:
- 方式一:基于已有一级分组/一级文档类型直接汇总
- 方式二:增加一张“统计分类映射表”进行归类
8. 权限建议
建议接口默认仅开放给具备管理权限的角色,例如:
- 超级管理员
- 省级管理员
- 地市管理员
- 具备统计查看权限的业务管理角色
后续可增加独立权限点,例如:
usage_stats:overview:readusage_stats:details:readusage_stats:export:read
9. 一期实现优先级建议
P0
/overview/trends/by-users/by-departments/by-areas/details
P1
/by-categories/by-document-types/by-entry-modules/export
P2
- 聚合表优化
- 驾驶舱接口
- 大屏接口
10. 后续优化建议
- 增加日汇总表,提升一年跨度查询性能
- 增加部门、地区快照,避免组织调整影响历史统计
- 为明细与汇总增加统一缓存策略
- 为导出增加异步任务模式,避免大数据量同步阻塞