docs: reorganize by module
This commit is contained in:
@@ -0,0 +1,578 @@
|
||||
# 系统使用统计接口设计
|
||||
|
||||
## 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`
|
||||
|
||||
#### 作用
|
||||
|
||||
返回概览页顶部核心指标与基础汇总。
|
||||
|
||||
#### 请求参数
|
||||
|
||||
支持:
|
||||
- `dateFrom`
|
||||
- `dateTo`
|
||||
- `area`
|
||||
- `areaScope`
|
||||
- `entryModuleId`
|
||||
- `documentCategoryId`
|
||||
- `documentTypeId`
|
||||
|
||||
#### 响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"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` |
|
||||
| 其余通用筛选参数 | - | 否 | 同上 |
|
||||
|
||||
#### 响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"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 | 否 | 用户名/姓名模糊搜索 |
|
||||
|
||||
#### 响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"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`
|
||||
|
||||
#### 作用
|
||||
|
||||
按部门汇总登录、上传、评查使用情况。
|
||||
|
||||
#### 请求参数
|
||||
|
||||
支持:
|
||||
- `dateFrom`
|
||||
- `dateTo`
|
||||
- `area`
|
||||
- `areaScope`
|
||||
- `entryModuleId`
|
||||
- `documentCategoryId`
|
||||
- `documentTypeId`
|
||||
- `keyword`(部门模糊搜索)
|
||||
|
||||
#### 响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"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`
|
||||
|
||||
#### 作用
|
||||
|
||||
按地区汇总统计,支持用户地区口径和文档地区口径。
|
||||
|
||||
#### 请求参数
|
||||
|
||||
支持:
|
||||
- `dateFrom`
|
||||
- `dateTo`
|
||||
- `areaScope`
|
||||
- `entryModuleId`
|
||||
- `documentCategoryId`
|
||||
- `documentTypeId`
|
||||
|
||||
#### 响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"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`
|
||||
|
||||
#### 作用
|
||||
|
||||
动态统计各文档大类下的评查使用情况,不写死业务名称。
|
||||
|
||||
#### 请求参数
|
||||
|
||||
支持:
|
||||
- `dateFrom`
|
||||
- `dateTo`
|
||||
- `area`
|
||||
- `areaScope`
|
||||
- `entryModuleId`
|
||||
- `documentCategoryId`
|
||||
|
||||
#### 响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"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`
|
||||
|
||||
#### 作用
|
||||
|
||||
统计各文档类型下的上传与评查使用情况。
|
||||
|
||||
#### 请求参数
|
||||
|
||||
支持全部核心通用筛选参数。
|
||||
|
||||
#### 响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"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`
|
||||
|
||||
#### 作用
|
||||
|
||||
统计各入口模块下的上传与评查使用情况。
|
||||
|
||||
#### 请求参数
|
||||
|
||||
支持:
|
||||
- `dateFrom`
|
||||
- `dateTo`
|
||||
- `area`
|
||||
- `areaScope`
|
||||
- `entryModuleId`
|
||||
|
||||
#### 响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"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` 建议必传:
|
||||
|
||||
- `login`
|
||||
- `upload`
|
||||
- `audit`
|
||||
|
||||
#### 响应示例
|
||||
|
||||
```json
|
||||
{
|
||||
"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. 返回结构约定
|
||||
|
||||
所有统计接口统一使用:
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"message": "ok",
|
||||
"data": {}
|
||||
}
|
||||
```
|
||||
|
||||
分页结构统一使用:
|
||||
|
||||
```json
|
||||
{
|
||||
"total": 100,
|
||||
"page": 1,
|
||||
"pageSize": 20,
|
||||
"items": []
|
||||
}
|
||||
```
|
||||
|
||||
## 6. 数据来源建议
|
||||
|
||||
### 6.1 登录数据
|
||||
|
||||
当前系统若尚未持久化登录记录,建议补充登录统计来源表,例如:
|
||||
|
||||
- `usage_login_events`
|
||||
|
||||
至少记录:
|
||||
- 用户 ID
|
||||
- 登录时间
|
||||
- 部门快照
|
||||
- 地区快照
|
||||
|
||||
### 6.2 上传数据
|
||||
|
||||
建议来源:
|
||||
- `leaudit_document_files`
|
||||
- `leaudit_documents`
|
||||
- `sso_users`
|
||||
|
||||
其中:
|
||||
- 主文件上传:`file_role = 'primary'`
|
||||
- 附件上传:`file_role = 'attachment'`
|
||||
|
||||
### 6.3 评查数据
|
||||
|
||||
建议来源:
|
||||
- `leaudit_audit_runs`
|
||||
- `leaudit_documents`
|
||||
- `leaudit_document_types`
|
||||
- `leaudit_entry_modules`
|
||||
|
||||
### 6.4 用户与组织信息
|
||||
|
||||
建议来源:
|
||||
- `sso_users`
|
||||
|
||||
主要字段:
|
||||
- `id`
|
||||
- `username`
|
||||
- `nick_name`
|
||||
- `dep_name`
|
||||
- `ou_name`
|
||||
- `area`
|
||||
|
||||
## 7. 动态分类建议
|
||||
|
||||
为避免写死业务名称,建议使用以下动态归类链路:
|
||||
|
||||
- 文档 -> 文档类型
|
||||
- 文档类型 -> 文档大类
|
||||
- 文档类型 -> 入口模块
|
||||
|
||||
若当前系统尚无稳定的“文档大类”实体,可采用以下两种方式之一:
|
||||
|
||||
- 方式一:基于已有一级分组/一级文档类型直接汇总
|
||||
- 方式二:增加一张“统计分类映射表”进行归类
|
||||
|
||||
## 8. 权限建议
|
||||
|
||||
建议接口默认仅开放给具备管理权限的角色,例如:
|
||||
|
||||
- 超级管理员
|
||||
- 省级管理员
|
||||
- 地市管理员
|
||||
- 具备统计查看权限的业务管理角色
|
||||
|
||||
后续可增加独立权限点,例如:
|
||||
|
||||
- `usage_stats:overview:read`
|
||||
- `usage_stats:details:read`
|
||||
- `usage_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. 后续优化建议
|
||||
|
||||
- 增加日汇总表,提升一年跨度查询性能
|
||||
- 增加部门、地区快照,避免组织调整影响历史统计
|
||||
- 为明细与汇总增加统一缓存策略
|
||||
- 为导出增加异步任务模式,避免大数据量同步阻塞
|
||||
Reference in New Issue
Block a user