# wwllogdatacrawler **Repository Path**: hanphycai/wwllogdatacrawler ## Basic Information - **Project Name**: wwllogdatacrawler - **Description**: 企业微信私有化数据开放 API 的开放数据爬取入库、数据查询,供平台运营数据审计。提供了系统管理员、配置管理员和审计管理员三个角色。 - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-03-11 - **Last Updated**: 2026-04-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 企业微信私有化开放数据获取与查询 > 基于企业微信私有化「开放数据 API」的日志数据采集、解密、存储与行为查询的demo。 --- ## 介绍 这个是面向**企业微信私有化部署**场景的开放数据获取与查询 demo。通过调用企业微信私有化的「开放数据 API」,系统能够定时或即时拉取加密的运营日志数据,经 RSA + AES 两级解密后,按数据类型分表存储至 MySQL 数据库,供管理员进行数据查询、用户行为追踪、平台干预操作及统计分析等操作。 **本 demo 用于学习与演示,不建议直接在生产环境上使用。** ### 核心能力 - **数据采集**:支持定时任务(可配置频率)和即时任务两种采集模式,覆盖 4 大类 24 种日志数据项 - **数据解密**:RSA 私钥解密数据密钥 → AES-128-CBC 解密业务内容,支持多密钥版本管理 - **数据存储**:按 `featureid + 月份` 自动分表存储,应对大量日志数据场景 - **权限管理**:三级角色隔离(系统管理员 / 配置管理员 / 审计管理员),职责分明 - **数据查询**:支持按数据项编码、时间范围分页查询解密后的结构化数据,支持 POST 请求高级条件查询 - **用户行为追踪**:按用户 OpenID 跨多个数据类型并发查询行为记录,支持字段匹配与去重 - **平台干预**:支持对不当内容的实时干预操作(撤回/删除消息、删除文件、解散群、移除群成员) - **统计分析**:按分钟、小时、天等粒度统计各数据项的日志条数,ECharts 图表可视化展示;支持按月分组的日志统计缓存 - **数据维护**:自动化数据生命周期管理,定期清理过期日志分表和任务记录,维护统计缓存 - **安全审计**:完整的操作日志记录,CSRF 防护,登录防暴力破解,密码复杂度校验 ### 支持的数据类型(24 项) | 数据大类 | 数据项编码 | 数据说明 | |:---------|:----------|:---------| | 成员使用日志 | 90000031 | 登录 | | | 90000032 | 唤醒 | | | 90000035 | 聊天消息发送 | | | 90000038 | 创建群聊 | | | 90000039 | 群加人 | | | 90000040 | 群踢人 | | | 90000041 | 退群 | | | 90000042 | 转让群主 | | | 90000043 | 解散群 | | | 90000044 | 群改名 | | | 90000047 | 添加 | | | 90000048 | 激活 | | | 90000054 | 客户端安装信息 | | | 90000055 | 客户端更新信息 | | | 90000064 | 点击导航 | | | 90000065 | 接收文件 | | 系统日志 | 90000056 | 消息列表拉取异常 | | | 90000057 | 用户操作失败 | | | 90000058 | 通讯录更新 | | | 90000059 | 客户端网络请求结果统计 | | 应用数据 | 90000033 | 访问应用 | | | 90000034 | 应用推送消息 | | 聊天数据 | 90000036 | 单聊聊天数据 | | | 90000037 | 群聊聊天数据 | | | 90000046 | 用户和应用之间的聊天数据 | --- ## 软件架构 ### 技术栈 | 层次 | 技术选型 | 说明 | |:-----|:---------|:-----| | 后端语言 | Go 1.26+ | 高性能,适合后台服务 | | Web 框架 | Gin | 轻量高效的 HTTP 框架 | | ORM | GORM | 数据库操作与自动迁移 | | 数据库 | MySQL 5.7+ / 8.0 | 主要数据存储 | | 任务调度 | robfig/cron v3 | 定时任务引擎 | | 配置管理 | Viper | YAML 配置文件读取 | | CLI 工具 | Cobra | 命令行管理工具 | | 前端框架 | Vue 3 + TypeScript | SPA 单页应用 | | UI 组件库 | Element Plus | 后台管理 UI 组件 | | 状态管理 | Pinia | Vue 3 官方推荐状态管理 | | HTTP 客户端 | Axios | 前端 API 请求 | | 图表可视化 | ECharts 6 | 数据统计图表展示 | | 表格导出 | XLSX (SheetJS) | Excel 数据导出 | | 图标库 | Lucide Vue Next | SVG 图标组件 | | CSS 框架 | Tailwind CSS | 原子化 CSS 工具类 | | 构建工具 | Vite | 快速前端构建 | | 前端测试 | Vitest | Vue 组件与单元测试 | ### 项目结构 ``` wwllogdatacrawler/ ├── cmd/ # 程序入口 │ ├── server/main.go # Web 服务主入口 │ └── cli/main.go # CLI 管理工具(重置密码、禁用账号) ├── config.yaml # 配置文件 ├── internal/ # 内部业务逻辑 │ ├── api/ # 企业微信 API 客户端 │ │ ├── client.go # 日志数据拉取(分页+重试)+ 干预操作 API │ │ ├── token.go # access_token 自动获取/刷新(内存缓存) │ │ └── debug_logger.go # API 调试日志(哨兵文件开关 + 按小时滚动) │ ├── config/ # 配置加载(Viper) │ │ └── config.go │ ├── crypto/ # 数据解密引擎 │ │ └── decrypt.go # RSA + AES-128-CBC 两级解密 │ ├── handler/ # HTTP 请求处理器 │ │ ├── router.go # 路由注册(含 SPA 静态文件、CSRF 防护) │ │ ├── auth_handler.go # 认证(登录/登出/改密码) │ │ ├── admin_handler.go # 管理员 CRUD │ │ ├── task_handler.go # 任务配置与执行(含带过滤的记录查询) │ │ ├── data_query_handler.go # 数据查询与统计(支持 GET/POST) │ │ ├── private_key_handler.go # 私钥管理 │ │ ├── behavior_query_handler.go # 用户行为查询(按 OpenID 跨数据类型) │ │ ├── intervention_handler.go # 平台干预操作(撤回/删除/解散/踢人) │ │ ├── maintenance_handler.go # 数据维护配置与手动触发统计 │ │ └── log_statistics_handler.go # 日志统计查询(按月分组/全量) │ ├── middleware/ # 中间件 │ │ ├── session.go # Session 认证 + 角色权限控制 + CSRF 防护 │ │ └── session_store.go # 内存 Session 存储(RWMutex + 自动过期清理) │ ├── model/ # 数据模型 │ │ ├── admin.go # 管理员模型(三角色 + 三状态 + 双密码哈希) │ │ ├── feature.go # 24 种数据项编码与名称映射 │ │ ├── log_models.go # 25 种日志结构体模型 │ │ ├── task_config.go # 定时任务配置模型 │ │ ├── task_record.go # 任务执行记录模型 │ │ ├── private_key.go # RSA 私钥模型 │ │ ├── operation_log.go # 操作日志模型 │ │ ├── behavior_query.go # 用户行为查询模型(24 种 OpenID 字段映射) │ │ ├── intervention.go # 干预操作请求/响应模型 │ │ ├── maintenance_config.go # 数据维护配置模型 │ │ └── log_statistics.go # 日志统计缓存模型 │ ├── repository/ # 数据访问层 │ │ ├── admin_repo.go # 管理员数据库操作 │ │ ├── log_repo.go # 日志分表读写(核心,含行为查询并发) │ │ ├── task_config_repo.go # 任务配置操作 │ │ ├── task_record_repo.go # 任务记录操作 │ │ ├── private_key_repo.go # 私钥操作 │ │ ├── operation_log_repo.go # 操作日志记录 │ │ ├── maintenance_config_repo.go # 数据维护配置操作 │ │ └── log_statistics_repo.go # 日志统计缓存操作(含表管理) │ ├── service/ # 业务逻辑层 │ │ ├── auth_service.go # 认证服务(含防暴力破解) │ │ ├── admin_service.go # 管理员管理服务 │ │ ├── task_service.go # 任务调度服务 │ │ ├── data_query_service.go # 数据查询服务 │ │ ├── private_key_service.go # 私钥管理服务 │ │ ├── operation_log_service.go # 操作日志服务 │ │ ├── behavior_query_service.go # 用户行为查询服务(并发多表查询) │ │ ├── intervention_service.go # 平台干预服务(调用企微 API + 日志记录) │ │ ├── maintenance_service.go # 数据维护服务 │ │ └── log_statistics_service.go # 日志统计服务 │ └── task/ # 任务执行引擎 │ ├── scheduler.go # 定时任务调度器(含维护任务调度) │ ├── instant_task.go # 即时任务执行器(互斥锁 + 事务写入) │ ├── mapping.go # 数据字段映射(25 种映射函数) │ └── maintenance_task.go # 维护任务(Drop 旧表 + 统计 + 清理记录) ├── migrations/ # 数据库迁移 │ └── init.sql # 初始建表 SQL ├── pkg/ # 公共工具包 │ ├── hash.go # 密码哈希与校验 │ ├── response.go # 统一 API 响应格式 │ └── table_naming.go # 分表命名工具 ├── web/ # 前端源码(Vue 3 + Element Plus) │ ├── src/ │ │ ├── api/ # API 调用层 │ │ │ ├── auth.ts # 认证 API │ │ │ ├── admin.ts # 管理员 API │ │ │ ├── task.ts # 任务 API │ │ │ ├── dataQuery.ts # 数据查询 API │ │ │ ├── privateKey.ts # 私钥 API │ │ │ ├── behaviorQuery.ts # 用户行为查询 API │ │ │ ├── intervention.ts # 干预操作 API │ │ │ ├── maintenance.ts # 数据维护 API │ │ │ ├── statistics.ts # 日志统计 API │ │ │ └── operationLog.ts # 操作日志 API │ │ ├── components/ # 公共组件 │ │ │ └── StatsChart.vue # ECharts 统计图表组件 │ │ ├── router/ # 前端路由(含权限守卫) │ │ ├── stores/ # Pinia 状态管理 │ │ │ ├── user.ts # 用户状态 │ │ │ └── labels.ts # 页面标签/字典配置 │ │ ├── utils/ # 工具函数(Axios 封装) │ │ └── views/ # 页面组件 │ │ ├── login/ # 登录 / 修改密码 │ │ ├── layout/ # 主布局(侧边栏+顶栏) │ │ ├── common/ # 公共页面组件 │ │ │ └── OperationLog.vue # 操作日志查看(跨角色复用) │ │ ├── sysadmin/ # 系统管理员页面 │ │ │ ├── AdminManage.vue # 管理员管理 │ │ │ ├── LogStatistics.vue # 日志统计总览 │ │ │ ├── MaintenanceConfig.vue # 数据维护配置 │ │ │ ├── SysOperationLog.vue # 全局操作日志 │ │ │ └── TaskRecords.vue # 任务记录查看 │ │ ├── configadmin/ # 配置管理员页面 │ │ │ ├── TaskConfig.vue # 定时任务配置 │ │ │ ├── InstantTask.vue # 即时任务 │ │ │ ├── KeyManage.vue # 私钥管理 │ │ │ └── DataStats.vue # 数据统计 │ │ └── audadmin/ # 审计管理员页面 │ │ ├── DataQuery.vue # 数据查询 │ │ ├── BehaviorQuery.vue # 用户行为查询 │ │ └── DataStats.vue # 数据统计 │ └── package.json ├── Makefile # 构建命令 ├── go.mod / go.sum # Go 依赖管理 ├── scripts/ # 自动化脚本 │ └── run_tests.sh # 测试运行脚本 ├── tests/ # 测试文件 ├── images/ # 界面截图 └── Docs/ # 开发文档 ├── 开发需求.md # 开发需求规格书 └── 系统介绍文档.md # 系统介绍文档 ``` ### 系统架构图 ``` ┌──────────────────────────────────────────────────────────────┐ │ 前端 (Vue 3 SPA) │ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────────┐ │ │ │ 登录页 │ │用户管理│ │任务配置│ │数据查询│ │ 行为/干预 │ │ │ └───┬────┘ └───┬────┘ └───┬────┘ └───┬────┘ └─────┬──────┘ │ └──────┼──────────┼──────────┼──────────┼────────────┼────────┘ │ HTTP/JSON│ │ │ │ ┌──────┼──────────┼──────────┼──────────┼────────────┼────────┐ │ ▼ ▼ ▼ ▼ ▼ │ │ ┌────────────────────────────────────────────────────────┐ │ │ │ Gin HTTP Router │ │ │ │ (Session 认证 + 角色权限中间件 + CSRF 防护) │ │ │ └───────────────────────┬────────────────────────────────┘ │ │ ┌─────────────────┼─────────────────┐ │ │ ▼ ▼ ▼ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ Handler │ │ Service │ │Repository│ ──→ MySQL │ │ └──────────┘ └──────────┘ └──────────┘ │ │ │ │ │ ┌─────────┬───────┼───────┬──────────┐ │ │ ▼ ▼ ▼ ▼ ▼ │ │ ┌─────────┐┌────────┐┌──────┐┌──────────┐┌───────────┐ │ │ │Scheduler││API Cli-││Crypto││Maintenan-││ Instant │ │ │ │ (cron) ││ent(企微)││(RSA+ ││ce Task ││ Executor │ │ │ │ ││+干预API ││ AES) ││(清理+统计)││(互斥+事务)│ │ │ └─────────┘└────────┘└──────┘└──────────┘└───────────┘ │ │ 后端 (Go + Gin) │ └──────────────────────────────────────────────────────────────┘ ``` ### 数据库设计 #### 系统表 | 表名 | 说明 | |:-----|:-----| | `admins` | 管理员信息(用户名、密码哈希、角色、状态、登录失败计数等) | | `task_configs` | 定时任务配置(频率类型、数据项列表、运行状态) | | `task_records` | 任务执行记录(类型、状态、进度、时间范围) | | `private_keys` | RSA 私钥存储(`enc_ver` 与 PEM 私钥一对一映射) | | `operation_logs` | 操作审计日志(登录、配置变更、任务操作、用户管理、干预操作) | | `token_cache` | 企业微信 access_token 缓存 | | `maintenance_config` | 数据维护配置(日志保留月数、任务记录保留天数、维护执行时间) | | `log_statistics` | 日志统计缓存(按 `featureid + 月份` 唯一键,缓存各分表记录数) | #### 日志分表 日志数据按 `featureid + 月份` 自动分表,命名规则: ``` log_{featureid}_{YYYYMM} ``` 例如:`log_90000031_202603` 表示 2026年3月的登录日志数据表。 系统启动后会根据数据写入需要自动创建对应的分表,无需手动建表。 --- ## 安装部署指引 ### 环境要求 | 组件 | 版本要求 | |:-----|:---------| | Go | ≥ 1.26 | | Node.js | ≥ 18(用于前端构建) | | MySQL | ≥ 5.7 或 8.0 | | 操作系统 | Linux / macOS / Windows | ### 第一步:数据库准备 1. 创建 MySQL 数据库并执行初始化 SQL: ```bash mysql -u root -p < migrations/init.sql ``` 该脚本会自动创建 `audit_platform` 数据库及所有 8 张系统表(含 `maintenance_config` 和 `log_statistics`)。日志数据分表由程序自动创建,无需手动执行。 ### 第二步:配置文件 编辑项目根目录下的 `config.yaml`,根据实际环境修改以下配置: ```yaml server: port: 8080 # 服务监听端口 session_secret: "change-me-to-random-string" # Session 密钥(请修改为随机字符串) database: host: "127.0.0.1" # MySQL 地址 port: 3306 # MySQL 端口 user: "root" # 数据库用户名 password: "" # 数据库密码 dbname: "audit_platform" # 数据库名称 charset: "utf8mb4" # 字符集 password: salt: "wwlocal-osslog" # 密码加盐哈希的盐值 wecom: base_url: "https://your-wework-private-domain" # 企业微信私有化服务地址 corpid: "" # 企业 ID corpsecret: "" # 应用凭证密钥 log: level: "info" # 日志级别(debug/info/warn/error) labels: maintitle: "开放数据自动获取与查询小助手" # 页面主标题(显示在登录页和侧边栏) subtitle: "企业微信私有化开放数据Demo" # 页面副标题 ``` > **重要**:请务必修改 `session_secret` 为一个足够长的随机字符串,并正确填写企业微信的 `base_url`、`corpid`、`corpsecret`。可通过 `labels` 配置自定义页面标题。可参考 `config.yaml.example` 文件。 ### 第三步:编译构建 #### 安装依赖 1. 安装 nmp ``` sudo apt install npm ``` 2. 安装Vue ``` npm install vue-tsc --save-dev ``` 3. 安装 go ``` sudo apt install -y golang-go ``` 4. 安装最新版 nvm(v0.40.4) ``` curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash source ~/.bashrc ``` 5. 安装 Node.js 24(当前 Active LTS,推荐) ``` nvm install 24 nvm use 24 nvm alias default 24 # 验证 node -v # 应该显示 v24.x.x npm -v ``` #### 方式一:使用 Makefile(推荐) ```bash # 构建前端 make frontend-build # 构建后端(输出到 bin/ 目录) make build ``` #### 方式二:手动构建 ```bash # 构建前端 cd web && npm install && npm run build && cd .. # 构建后端服务 go build -o bin/server ./cmd/server # 构建 CLI 工具 go build -o bin/cli ./cmd/cli ``` #### 一些报错处理 1. 用 make frontend-build 时,如果出现 npm 版本问题,建议升级到最新版 npm,升级版本后再执行 make frontend-build ``` cd ./web # 安装新增的 @types/node rm -rf node_modules npm install cd .. && make frontend-build ``` 2. 用 make build 时,如果出现 go 版本问题,建议升级到最新版 go,升级版本后再执行 make build ```bash # 在服务器上执行 # 1. 查看当前 Go 版本 go version # 2. 下载最新版 Go 1.26.1 wget https://go.dev/dl/go1.26.1.linux-amd64.tar.gz # 3. 删除旧版本并安装新版本 sudo rm -rf /usr/local/go sudo tar -C /usr/local -xzf go1.26.1.linux-amd64.tar.gz # 4. 确认 Go 在 PATH 中(如果之前没配置过) echo 'export GOROOT=/usr/local/go' >> ~/.bashrc echo 'export PATH=$PATH:$GOROOT/bin' >> ~/.bashrc source ~/.bashrc # 5. 验证版本 go version # 应该显示 go version go1.26.1 linux/amd64 # 6. 重新构建 cd ~/wwllogdatacrawler make build ``` 3. 出现 Go 模块下载超时 比如出现了类似以下错误: ``` cmd/server/main.go:20:2: github.com/gin-gonic/gin@v1.12.0: Get "https://proxy.golang.org/github.com/gin-gonic/gin/@v/v1.12.0.zip": dial tcp 142.251.33.209:443: i/o timeout cmd/server/main.go:21:2: gorm.io/driver/mysql@v1.6.0: Get "https://proxy.golang.org/gorm.io/driver/mysql/@v/v1.6.0.zip": dial tcp 142.251.33.209:443: i/o timeout ``` 这是因为服务器无法访问 proxy.golang.org(Google 的服务器,IP 142.251.33.209)。这是国内服务器的常见问题。解决方案,是在服务器上设置 国内 Go 模块代理,推荐使用七牛云的 goproxy.cn: ``` # 在服务器上执行 go env -w GOPROXY=https://goproxy.cn,direct go env -w GONOSUMDB=* # 然后重新构建 cd ~/wwllogdatacrawler make build ``` ### 第四步:启动服务 ```bash # 启动 Web 服务(前端 SPA 已内嵌) ./bin/server config.yaml ``` 服务启动后: - Web 管理界面访问地址:`http://<服务器IP>:8080` - 健康检查端点:`http://<服务器IP>:8080/health` - 首次启动时,系统会自动创建初始管理员账号 `admin`,**初始密码将打印在控制台**,请妥善记录 ### 开发模式 ```bash # 后端开发模式(热重载需配合 air 等工具) make dev # 前端开发模式(独立 dev server,端口 5173) make frontend-dev ``` --- ## 用户使用说明 ### 初始登录 1. 浏览器访问 `http://<服务器IP>:8080`,进入登录页面 2. 使用初始管理员账号 `admin` 和控制台打印的初始密码登录 3. 首次登录会提示**强制修改密码**,新密码需满足: - 最少 **8 个字符** - 必须包含:大写字母 + 小写字母 + 数字 + 特殊字符 4. 修改密码后,账号激活为系统管理员身份 ### 角色与权限 系统按职责划分三种互斥的管理员角色(一个用户只能拥有一种角色): | 角色 | 职责 | 可访问功能 | |:-----|:-----|:-----------| | **系统管理员** | 管理所有管理员账号及系统运维 | 管理员列表、创建/禁用/启用/删除管理员、重置密码、数据维护配置、日志统计总览、全局操作日志、任务记录查看 | | **配置管理员** | 配置和执行数据采集任务 | 定时任务配置、即时任务、私钥管理、数据统计、我的操作日志 | | **审计管理员** | 查询和审计业务数据 | 数据查询(分页明细)、用户行为查询(按 OpenID 跨类型追踪)、平台干预操作、数据统计(图表)、我的操作日志 | ### 系统管理员操作指南 1. 登录后进入「用户管理」页面 2. 点击「新建管理员」,填写用户名、姓名,选择角色(配置管理员/审计管理员) 3. 创建成功后系统会生成随机初始密码,告知新用户 4. 可对管理员执行:禁用、启用、删除、重置密码等操作 #### 数据维护配置 1. 进入「数据维护」页面 2. 配置**日志表保留期限**(1~36 个月,默认 6 个月):超出期限的 `log_*` 分表将被自动删除 3. 配置 **task_records 保留天数**(1~365 天,默认 30 天):超出天数的任务记录将被自动清理 4. 配置**维护任务执行时间**(默认 05:00):系统每天在指定时间自动执行清理和统计 5. 支持**手动触发统计**:可按月份全量统计或指定数据项+月份精确统计 #### 日志统计总览 - 进入「日志统计」页面,查看各月份各数据项的记录总数 - 支持按月份分组展示、按数据项编码筛选 - 统计数据来自缓存表,不影响业务查询性能 #### 全局操作日志 - 进入「操作日志」页面,查看所有管理员的操作记录 - 支持按管理员账号、操作类型、时间范围筛选(查询时间跨度不超过 7 天) #### 任务记录查看 - 进入「任务记录」页面,查看所有定时任务和即时任务的执行历史 - 支持按时间范围过滤 ### 配置管理员操作指南 #### 私钥管理 1. 进入「私钥管理」页面 2. 添加 RSA 私钥,需填写**密钥版本号**(对应 API 返回数据中的 `enc_ver`)和 **PEM 格式私钥内容** 3. 私钥用于解密从企业微信 API 获取的加密日志数据 #### 定时任务配置 1. 进入「定时任务配置」页面 2. 设置采集频率: - **每小时一次**:设定每小时的第几分钟执行 - **每 N 分钟一次**:可选 2、3、5、10、15、20、30 分钟间隔 3. 勾选需要采集的数据项编码(featureid) 4. 点击「启动定时任务」开始自动采集,可查看下一次执行时间和倒计时 5. 可随时「停止定时任务」暂停采集 #### 即时任务 1. 进入「即时任务」页面 2. 选择需要采集的数据类型、设置起止时间 3. 时间跨度限制:最小 1 小时,最大 7 天 4. 如果定时任务正在运行,系统会提示冲突并需确认 5. 启动后可实时查看任务进度,如"正在处理 2026-03-23 14 的数据拉取" 6. 同一时间只能运行一个即时任务 #### 数据统计 - 进入「数据统计」页面,选择数据项和时间范围 - 支持按分钟、小时、天粒度统计日志条数 - 图表可视化展示数据采集趋势 ### 审计管理员操作指南 #### 数据查询 1. 进入「数据查询」页面 2. 选择数据项编码(featureid)和时间范围 3. 系统会查询该数据项对应的分表,返回解密后的结构化数据 4. 支持分页浏览,表格列根据不同数据项自动适配 5. 支持 Excel 导出查询结果 #### 用户行为查询 1. 进入「用户行为查询」页面 2. 输入用户 **OpenID**,选择时间范围和数据类型(默认勾选成员使用日志、应用数据、聊天数据三大类) 3. 时间范围限制:最长 7 天,不允许跨月查询 4. 系统并发查询多个数据类型的分表,返回该用户的所有行为记录 5. 每条记录展示命中的 OpenID 字段、行为数据详情 #### 平台干预操作 在数据查询或行为查询结果中,审计管理员可对不当内容执行干预操作: | 干预类型 | 说明 | 适用数据类型 | |:---------|:-----|:-------------| | **撤回消息** | 以发送者身份撤回消息(支持无痕撤回) | 单聊/群聊聊天数据 | | **删除消息** | 以发送者身份删除消息 | 单聊/群聊聊天数据 | | **删除文件** | 以发送者身份删除文件 | 接收文件数据 | | **解散群** | 以群主/操作人身份解散群聊 | 群相关数据 | | **移除群成员** | 以群主/操作人身份移除指定群成员 | 群加人/群聊数据 | > **注意**:所有干预操作都会自动记录操作日志,包括操作人、操作对象、操作结果等详细信息。 #### 数据统计 - 进入「数据统计」页面 - 查看一段时间内各数据项的日志条数统计图表 ### CLI 管理工具 当管理员密码遗失或需要紧急操作时,可使用命令行工具: ```bash # 重置 admin 用户密码(会生成新的随机密码并打印到控制台) ./bin/cli reset-password # 禁用 admin 用户 ./bin/cli disable-admin ``` ### 企业微信 API 调试模式 当数据库中没有数据,需要排查是企业微信 API 调用报错、API 未返回数据还是其他环节出问题时,可以开启 API 调试模式,记录每次企业微信 API 请求的完整信息。 #### 开启调试模式 在**程序工作目录**(即 `start.sh` 中 `cd` 进入的目录,默认为 `/home/ubuntu/wwllogdatacrawler`)下创建哨兵文件: ```bash # 进入程序工作目录 cd /home/ubuntu/wwllogdatacrawler # 创建哨兵文件,开启调试模式 touch QYWXAPI_OUTPUT_DEBUG ``` 开启后,每次调用企业微信 API(包括获取 access_token、拉取日志数据、干预操作等)都会将完整的请求和响应信息记录到调试日志文件中。 #### 查看调试日志 调试日志文件按小时滚动,文件名格式为 `qywxapi-debug-{YYYYMMDDHH}.log`,位于程序工作目录下: ```bash # 查看当前小时的调试日志 tail -f qywxapi-debug-*.log # 查看某个时段的日志 cat qywxapi-debug-2026040110.log ``` 日志中包含每次 API 请求的完整信息:请求时间、HTTP Method、URL(敏感参数已脱敏)、请求头、请求体、HTTP 状态码、响应体(超过 1KB 自动截断)、响应耗时、错误信息等。 #### 关闭调试模式 删除哨兵文件即可关闭调试模式,无需重启服务: ```bash rm QYWXAPI_OUTPUT_DEBUG ``` > **注意**:调试日志文件不会自动清理,排查完毕后建议手动删除调试日志文件以释放磁盘空间:`rm qywxapi-debug-*.log` ### 安全机制 | 安全特性 | 说明 | |:---------|:-----| | 密码加盐哈希 | 使用 bcrypt + 配置盐值 | | 防暴力破解 | 连续 5 次输错密码锁定账号 10 分钟 | | 密码复杂度 | 最少 8 字符,大小写 + 数字 + 特殊字符 | | Session 认证 | Cookie HttpOnly,防 XSS 攻击 | | CSRF 防护 | 对写操作(POST/PUT/DELETE)校验 Origin/Referer | | 角色权限控制 | 中间件级别的接口权限校验 | | 操作日志 | 记录所有关键操作(含干预操作),支持审计追溯 | --- ## API 端点列表 | 方法 | 路径 | 权限 | 功能 | |:-----|:-----|:-----|:-----| | POST | `/api/auth/login` | 公开 | 登录 | | POST | `/api/auth/logout` | 已登录 | 登出 | | GET | `/api/auth/current` | 已登录 | 获取当前用户信息 | | POST | `/api/auth/change-password` | 已登录 | 修改密码 | | GET | `/api/labels` | 公开 | 获取页面标签配置 | | GET | `/api/admins` | 系统管理员 | 管理员列表 | | POST | `/api/admins` | 系统管理员 | 创建管理员 | | GET | `/api/admins/:id` | 系统管理员 | 管理员详情 | | PUT | `/api/admins/:id/disable` | 系统管理员 | 禁用管理员 | | PUT | `/api/admins/:id/enable` | 系统管理员 | 启用管理员 | | DELETE | `/api/admins/:id` | 系统管理员 | 删除管理员 | | PUT | `/api/admins/:id/reset-password` | 系统管理员 | 重置密码 | | GET | `/api/maintenance/config` | 系统管理员 | 获取数据维护配置 | | PUT | `/api/maintenance/config` | 系统管理员 | 更新数据维护配置 | | POST | `/api/maintenance/recount` | 系统管理员 | 手动触发数据统计 | | GET | `/api/statistics` | 系统管理员 | 查询日志统计数据 | | GET | `/api/statistics/grouped` | 系统管理员 | 按月分组查询统计 | | GET | `/api/statistics/months` | 系统管理员 | 获取所有已统计月份 | | GET | `/api/all-operation-logs` | 系统管理员 | 全局操作日志查询 | | GET | `/api/task/records-filter` | 系统管理员 | 任务记录查询(带过滤) | | GET | `/api/task/config` | 配置管理员 | 获取任务配置 | | PUT | `/api/task/config` | 配置管理员 | 更新任务配置 | | PUT | `/api/task/scheduled/start` | 配置管理员 | 启动定时任务 | | PUT | `/api/task/scheduled/stop` | 配置管理员 | 停止定时任务 | | POST | `/api/task/instant` | 配置管理员 | 创建即时任务 | | GET | `/api/task/instant/progress` | 配置管理员 | 查询即时任务进度 | | GET | `/api/task/instant/conflict` | 配置管理员 | 检查定时任务冲突 | | GET | `/api/task/records` | 配置管理员 | 任务记录列表 | | GET | `/api/private-keys` | 配置管理员 | 私钥列表 | | POST | `/api/private-keys` | 配置管理员 | 创建私钥 | | PUT | `/api/private-keys/:id` | 配置管理员 | 更新私钥 | | DELETE | `/api/private-keys/:id` | 配置管理员 | 删除私钥 | | GET | `/api/data/feature-ids` | 配置/审计管理员 | 数据项编码列表 | | GET | `/api/data/query` | 配置/审计管理员 | 查询日志数据(GET) | | POST | `/api/data/query` | 配置/审计管理员 | 查询日志数据(POST,支持高级过滤) | | GET | `/api/data/stats` | 配置/审计管理员 | 查询统计数据 | | POST | `/api/behavior-query` | 审计管理员 | 用户行为查询 | | GET | `/api/behavior-query/validate-time` | 审计管理员 | 校验行为查询时间范围 | | POST | `/api/intervention/revoke-message` | 审计管理员 | 撤回消息 | | POST | `/api/intervention/delete-message` | 审计管理员 | 删除消息 | | POST | `/api/intervention/delete-file` | 审计管理员 | 删除文件 | | POST | `/api/intervention/dismiss-room` | 审计管理员 | 解散群 | | POST | `/api/intervention/remove-members` | 审计管理员 | 移除群成员 | | POST | `/api/intervention/get-members` | 审计管理员 | 获取群成员列表 | | GET | `/api/operation-logs` | 已登录 | 操作日志查询(全部) | | GET | `/api/my-operation-logs` | 已登录 | 我的操作日志查询 | | GET | `/health` | 公开 | 健康检查 | --- ## 参与贡献 1. Fork 本仓库 2. 新建 `Feat_xxx` 分支 3. 提交代码 4. 新建 Pull Request ## 开源许可 本项目基于 [LICENSE](./LICENSE) 协议开源。