5.8 KiB
5.8 KiB
系统使用统计实施版
1. 实施目标
基于《系统使用统计最终版》,落地一期可用方案,范围收敛为:
- 后端统计接口
- 登录统计补数
- 上传/评查统计查询
- 权限隔离
- 前端“总览 + 按部门 + 按地区”页面
- 上线 SQL 与验收流程
2. 实际落地方案
2.1 数据来源
统计数据来源分两类:
- 复用现有业务事实表
- 补最小新增事件表
其中:
- 上传统计:复用现有文档与文件表
- 评查统计:复用现有评查运行表
- 登录统计:新增登录事件表
- 用户最近登录时间:补
sso_users.last_login_at
2.2 复用的现有表
-
sso_users- 用户、部门、地区来源
- 最近登录时间展示
-
leaudit_documents- 文档主记录
- 文档类型、地区、状态来源
-
leaudit_document_files- 主文件上传、附件上传统计
- 上传人、上传时间明细来源
-
leaudit_audit_runs- 评查发起、完成、失败统计
- 评查时间趋势
- 发起人必须依赖
trigger_user_id
-
leaudit_document_types- 文档类型维度
- 入口模块归属
-
leaudit_entry_modules- 入口模块维度
3. 新增与补齐的库结构
3.1 新增字段
sso_users.last_login_at- 含义:最近一次成功登录时间
- 作用:用户维度统计、最近登录展示
3.2 新增表
usage_login_events- 用途:记录登录成功/失败事件
- 核心字段:
user_idsubusername_snapshotnick_name_snapshotdepartment_name_snapshotou_name_snapshotarea_snapshotlogin_timelogin_resultlogin_typeip_addressuser_agentfailure_reason
3.3 已落地 SQL
统一放在:scripts/创建sql/
本功能核心脚本:
scripts/创建sql/schema_add_usage_stats.sqlscripts/创建sql/seed_usage_stats_rbac.sql
4. 后端接口口径
统一前缀:/api/v3/usage-stats
已定义的一期接口:
GET /api/v3/usage-stats/overviewGET /api/v3/usage-stats/trendsGET /api/v3/usage-stats/by-usersGET /api/v3/usage-stats/by-departmentsGET /api/v3/usage-stats/by-areasGET /api/v3/usage-stats/details
一期前端先接:
overviewby-departmentsby-areas
5. 核心权限与地区隔离
5.1 页面入口
页面入口放在:
- 系统设置
- 路由:
/usage-stats
5.2 权限点
已定义权限:
usage_stats:overview:readusage_stats:trends:readusage_stats:users:readusage_stats:departments:readusage_stats:areas:readusage_stats:details:read
5.3 角色范围
super_admin:看全量provincial_admin:看全量admin:作为地区管理员,仅看本地区
5.4 实施要求
- 不能只靠前端限制
- 必须由后端按当前登录用户地区做数据过滤
- 按地区页在
admin角色下只能返回当前地区数据
6. 一期前端范围
一期页面只做:
- 总览
- 按部门
- 按地区
放置位置:
- 系统设置
页面要求:
- 支持时间范围筛选
- 支持按地区筛选
- 按地区页支持地区口径切换
- 页面可用优先,不继续堆复杂交互
7. 后端实现拆解
7.1 登录链路补数
代码位置:
fastapi_modules/fastapi_leaudit/controllers/auth/authController.pyfastapi_modules/fastapi_leaudit/services/usageStatsService.pyfastapi_modules/fastapi_leaudit/services/impl/usageStatsServiceImpl.py
要求:
- 成功登录写
usage_login_events - 失败登录写
usage_login_events - 成功登录更新
sso_users.last_login_at - 不影响现有登录返回结构
7.2 评查链路补数
代码位置:
fastapi_modules/fastapi_leaudit/controllers/auditController.pyfastapi_modules/fastapi_leaudit/services/auditService.pyfastapi_modules/fastapi_leaudit/services/impl/auditServiceImpl.pyfastapi_modules/fastapi_leaudit/services/impl/documentServiceImpl.py
要求:
- 创建评查 run 时写入
trigger_user_id - 上传后自动评查与手工发起评查都要补齐
7.3 统计查询接口
代码位置:
fastapi_modules/fastapi_leaudit/controllers/usageStatsController.pyfastapi_modules/fastapi_leaudit/services/usageStatsService.pyfastapi_modules/fastapi_leaudit/services/impl/usageStatsServiceImpl.py
要求:
- 概览页可直接取数
- 部门页可分页汇总
- 地区页支持地区口径切换
- 后端完成权限与地区过滤
8. 上线顺序
8.1 SQL
先执行:
scripts/创建sql/schema_add_usage_stats.sqlscripts/创建sql/seed_usage_stats_rbac.sql
8.2 服务
- 发布后端代码
- 重启后端服务
- 用管理员账号重新登录一次
- 手动上传一次文档
- 手动发起一次评查
8.3 验收
必须验证:
usage_login_events有数据sso_users.last_login_at有更新leaudit_audit_runs.trigger_user_id有写入/usage-stats菜单可见- 超级管理员可看全量
- 地区管理员只能看本地区
9. 当前推荐验收 SQL
SELECT column_name
FROM information_schema.columns
WHERE table_name = 'sso_users'
AND column_name = 'last_login_at';
SELECT to_regclass('public.usage_login_events');
SELECT id, username, last_login_at
FROM sso_users
WHERE last_login_at IS NOT NULL
ORDER BY last_login_at DESC
LIMIT 10;
SELECT id, user_id, login_result, login_type, login_time
FROM usage_login_events
ORDER BY id DESC
LIMIT 10;
SELECT id, trigger_user_id, status, created_at
FROM leaudit_audit_runs
ORDER BY id DESC
LIMIT 10;
10. 当前文档收口原则
本目录只保留这两份:
docs/系统使用统计/系统使用统计最终版.mddocs/系统使用统计/系统使用统计实施版.md
老的“最终需求 / 表设计 / 接口设计 / 开发任务拆解”内容,统一并入这两份主文档,不再继续扩散。