# 飞云网站用户行为监测后台 Sky User Console **Repository Path**: cute_boy/sky_user_console ## Basic Information - **Project Name**: 飞云网站用户行为监测后台 Sky User Console - **Description**: 一个面向网站用户行为采集、趋势分析、转化观察、权限控制与桌面端交付的全栈监测后台项目。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-03-26 - **Last Updated**: 2026-03-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 飞云网站用户行为监测后台 Sky User Console 一个面向网站用户行为采集、趋势分析、转化观察、权限控制的全栈监测后台项目。 ## 技术栈 | 层级 | 技术 | |------|------| | 后端 | Spring Boot 3.5、Java 21 (Virtual Threads) | | 安全 | Spring Security + JWT | | 数据访问 | MyBatis、MySQL 8 | | 缓存 | Redis、Spring Cache | | 前端 | Vue 3、Vite、TypeScript | | UI 组件 | Element Plus、ECharts | ## 当前功能 ### 核心监测 - 网站行为事件采集接口:页面浏览、点击、滚动、表单提交、注册、支付转化 - 行为监测中心:PV / UV / 会话 / 转化 / 参与度 / 高表现页面分析 - 实时活跃访客、活跃会话、活跃页面榜 - 漏斗转化分析:浏览触达、互动参与、线索转化、成交完成 - 来源转化排行、来源渠道分布、设备分布、事件类型热度和实时会话流 - 支持按来源、设备、事件类型、关键词、参与度和停留时长筛选分析 - 提供分群洞察卡片,快速对比移动端、桌面端、高参与度和已转化会话 - 支持保存筛选视图,沉淀常用分析口径 - 提供会话探索台,可分页筛选会话并钻取单个会话时间线 - 提供报表中心,统一管理推荐模板与已保存视图 - 提供分群对比页,按来源 / 设备 / 事件类型分析转化质量 - 提供告警中心,监测当前周期与上一周期的异常波动 ### 管理与审计 - 功能工作台:把用户管理、审计、测试、运维等辅助能力统一收敛为单独入口 - JWT 登录与当前会话校验 - 基于角色 + 资源动作权限码的细粒度权限控制 - 用户分页查询、关键字搜索、状态 / 角色 / 登录活跃度筛选 - 用户概览卡片:总量、近 7 天新增、近 7 天登录、从未登录、状态分群与角色分层 - 用户管理支持本地保存筛选视图,可快速复用人群筛选条件 - 用户管理筛选条件支持 URL 持久化,刷新页面或复制链接后仍可保留当前查询上下文 - 新增 / 编辑 / 删除用户 - 批量更新用户状态 - CSV 批量导入用户与模板下载 - 用户回收站:软删除、恢复与彻底删除 - 个人中心资料维护与当前账号密码修改 - 用户详情抽屉与个人近期活动追踪 - 仪表盘总览、趋势图、状态分布、操作热度 - 审计日志分页查询、关键字动作联动筛选与摘要卡片 - 审计摘要:总操作量、近 24 小时波动、近 7 天风险操作、高频动作与高频操作者 - 审计中心支持本地保存检索视图,适合复盘高频排查口径 - 审计中心检索条件支持 URL 持久化,便于前进后退与团队共享排查链接 - 用户列表与审计日志 CSV 导出 ### 平台保障 - 测试中心:自动化门禁、发布检查、VM 冒烟命令聚合 - 运维中心:运行态摘要、健康趋势、日志预览、巡检告警健康检查 - 功能工作台支持展示最近使用的本地视图,减少多页面往返 - 前端路由守卫与 `403` 无权限访问页 - 开发环境默认自动建表并初始化演示数据 ## 项目结构 ```text . ├── src/main/java/com/example │ ├── config │ ├── controller │ ├── dto │ ├── entity │ ├── mapper │ ├── security │ ├── service │ └── util ├── src/main/resources │ ├── mapper │ ├── schema.sql │ ├── data.sql │ ├── application.yml │ ├── application-dev.yml │ └── application-prod.yml ├── src/test/java/com/example ├── docs ├── ops ├── .github/workflows ├── go-services │ └── behavior-service ├── gradle/wrapper └── frontend ├── src ├── package.json └── vite.config.ts ``` ## 技术文档 - [技术文档总览](./docs/README.md) - [系统架构](./docs/architecture.md) - [RBAC 与权限矩阵](./docs/rbac.md) - [接口总览](./docs/api-overview.md) - [部署与配置](./docs/deployment.md) - [测试与 CI](./docs/testing-and-ci.md) ## 仓库与协作 - Gitee 仓库主页:`https://gitee.com/liu-minxue/sky_user_console` - HTTPS 克隆:`git clone https://gitee.com/liu-minxue/sky_user_console.git` - SSH 克隆:`git clone git@gitee.com:liu-minxue/sky_user_console.git` - 问题反馈:`https://gitee.com/liu-minxue/sky_user_console/issues` - 代码贡献:`https://gitee.com/liu-minxue/sky_user_console/pulls` - 协作约定:见 [贡献指南](./CONTRIBUTING.md) 说明: - 仓库当前默认托管在 Gitee,Issue 与 Pull Request 协作入口已按 Gitee 方式整理。 - `.github/workflows/ci.yml` 仍保留为一份可复用的 CI workflow 示例,便于迁移到 GitHub Actions 或其他流水线平台时直接复用任务拆分。 - 不论接入哪种 CI 平台,建议统一以 README 和 `docs/testing-and-ci.md` 中列出的本地验证命令作为质量门禁来源。 ## 运行要求 - JDK 21+ - Gradle 9+ - Node.js 20+ - MySQL 8+ - Redis 7+ ## 配置与 Profile 项目现在默认启用 `dev` profile,本地开发开箱即用;生产部署请显式设置 `SPRING_PROFILES_ACTIVE=prod`。 开发环境常用默认值如下: | 环境变量 | 默认值 | |---|---| | `DB_URL` | `jdbc:mysql://localhost:3306/sky_user_console?...` | | `DB_USERNAME` | `root` | | `DB_PASSWORD` | `12345678` | | `REDIS_HOST` | `127.0.0.1` | | `REDIS_PORT` | `6379` | | `APP_CORS_ALLOWED_ORIGINS` | `http://localhost:5173` | | `JWT_SECRET` | 本地开发默认 secret,可通过环境变量覆盖 | | `APP_SQL_INIT_MODE` | `always` | 说明: - JDBC URL 已启用 `createDatabaseIfNotExist=true`,首次启动会自动创建 `sky_user_console`。 - `dev` profile 默认执行 `schema.sql` 和 `data.sql`,方便演示环境自动补齐表结构与样例账号。 - 如果你想保留现有数据而不重复初始化,可以设置 `APP_SQL_INIT_MODE=never`。 - `prod` profile 默认关闭 SQL 初始化,只暴露 `/actuator/health`,并要求通过环境变量提供真实的数据库、Redis 和 `JWT_SECRET` 配置。 - 基础 profile 不再内置生产兜底密码或开放型 CORS,避免误把演示配置带到线上。 ## 默认演示账号 初始化数据会创建以下账号,默认密码统一为 `Password@123`,并以 bcrypt 形式写入数据库: | 用户名 | 角色 | 状态 | 用途 | |---|---|---|---| | `alice` | `ADMIN` | `ACTIVE` | 系统管理员 | | `bob` | `OPERATOR` | `ACTIVE` | 运营账号 | | `carol` | `VIEWER` | `ACTIVE` | 只读审计账号 | | `dave` | `VIEWER` | `INACTIVE` | 停用示例账号 | | `erin` | `OPERATOR` | `SUSPENDED` | 冻结示例账号 | 角色说明: - `ADMIN`:拥有全部资源动作权限,包括回收站恢复与彻底删除。 - `OPERATOR`:可管理用户、导入导出和查看回收站,但不能执行删除、恢复、彻底删除。 - `VIEWER`:可访问 Dashboard、个人中心、用户列表和审计日志,并可执行只读导出。 ## 本地开发启动 ### 1. 启动依赖服务 确保本机 MySQL 和 Redis 已启动,并且配置与 `application-dev.yml` 中的默认值匹配。 如果本机使用 Homebrew,可以参考: ```bash brew services start redis brew services list redis-cli ping ``` ### 2. 启动后端 ```bash ./gradlew bootRun ``` 后端默认以 `dev` profile 启动,并监听 `http://localhost:8080`。 ### 3. 启动 Go 行为服务 ```bash cd go-services/behavior-service DB_URL='jdbc:mysql://127.0.0.1:3306/sky_user_console?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&createDatabaseIfNotExist=true' \ DB_USERNAME=root \ DB_PASSWORD=12345678 \ APP_CORS_ALLOWED_ORIGINS='http://localhost:5173,http://127.0.0.1:5173' \ go run ./cmd/behavior-service ``` Go 行为服务默认监听 `http://localhost:8090`,负责 `/api/behavior/*`。 ### 4. 启动前端 ```bash cd frontend npm ci npm run dev ``` 前端默认监听 `http://localhost:5173`,开发模式下会将: - `/api/behavior/*` 代理到 `http://localhost:8090` - 其他 `/api/*` 代理到 `http://localhost:8080` ## 访问地址 - 前端登录页:`http://localhost:5173/login` - 行为监测中心:`http://localhost:5173/behavior` - 会话探索台:`http://localhost:5173/behavior/sessions` - 报表中心:`http://localhost:5173/behavior/reports` - 分群对比:`http://localhost:5173/behavior/segments` - 告警中心:`http://localhost:5173/behavior/alerts` - 功能工作台:`http://localhost:5173/workspace` - 前端首页:`http://localhost:5173/dashboard` - Go 行为服务健康检查:`http://localhost:8090/healthz` - 测试中心:`http://localhost:5173/testing` - 运维中心:`http://localhost:5173/operations` - 后端健康检查:`http://localhost:8080/actuator/health` - 开发环境应用信息:`http://localhost:8080/actuator/info` - 开发环境缓存信息:`http://localhost:8080/actuator/caches` ## 常用接口 - `POST /api/auth/login` - `GET /api/auth/me` - `PUT /api/auth/profile` - `PUT /api/auth/password` - `GET /api/users` - `GET /api/users/overview` - `GET /api/users/export` - `GET /api/users/import/template` - `POST /api/users/import` - `GET /api/users/recycle-bin` - `GET /api/users/{id}` - `GET /api/users/{id}/activities` - `POST /api/users` - `PUT /api/users/{id}` - `PUT /api/users/{id}/restore` - `POST /api/users/bulk-status` - `DELETE /api/users/{id}` - `DELETE /api/users/{id}/purge` - `GET /api/audit-logs/overview` - `GET /api/audit-logs/export` - `GET /api/dashboard/stats` - `GET /api/dashboard/overview` - `GET /api/dashboard/analytics` - `POST /api/behavior/events` - `GET /api/behavior/overview` - `GET /api/testing/overview` - `GET /api/ops/overview` - `GET /api/ops/telemetry` - `GET /api/ops/inspection` - `GET /api/audit-logs` ## 验证命令 后端测试: ```bash ./gradlew test ``` 生产模式自检: ```bash SPRING_PROFILES_ACTIVE=prod \ DB_URL=jdbc:mysql://localhost:3306/sky_user_console \ DB_USERNAME=root \ DB_PASSWORD=your-password \ REDIS_HOST=127.0.0.1 \ REDIS_PORT=6379 \ JWT_SECRET=replace-with-a-real-32-byte-secret \ ./gradlew bootRun ``` 前端构建检查: ```bash cd frontend npm run build ``` ## 最小验收流程 1. 打开 `http://localhost:5173/login`。 2. 使用 `alice / Password@123` 登录。 3. 确认能进入 Dashboard,看到用户统计、趋势图和近期活动。 4. 进入"个人中心"修改邮箱、手机号或备注,并测试修改密码。 5. 进入"用户管理"下载导入模板,填写后测试 `CSV 导入用户`,确认能看到导入汇总结果。 6. 在"用户管理"删除一个用户,确认它进入"回收站",再测试恢复与彻底删除。 7. 在"用户管理"完成搜索、分页、新增或编辑,并打开任意用户详情查看近期活动。 8. 在"用户管理"中点击 `导出 CSV`,确认用户列表可下载。 9. 进入"审计中心"确认能看到包括 `SOFT_DELETE_USER`、`RESTORE_USER`、`PURGE_USER`、`IMPORT_USERS`、`UPDATE_PROFILE`、`CHANGE_PASSWORD` 在内的操作记录,并测试审计日志导出。 ## 后续扩展方向 - Excel / XLSX 导入导出与模板体系 - 角色、权限、菜单的后台配置化 - 更完整的集成测试 / Testcontainers 覆盖 - 容器化部署与 CD 流水线 - 多租户 / 部门 / 数据范围权限