用于管理录音任务的创建、数据准备、授权、领取、录制、提交、审核和结果统计。
当前仓库包含管理员/审核员 Web 端、原生微信小程序采集端、Java Spring Boot 后端和 MongoDB 数据层。平台已形成任务采集与人工审核闭环,并提供语音生成生产台、任务级 AI 辅助审核和受限的外部脚本集成;AI 只生成审核候选文本,不会自动作出审核决定。
| 模块 | 当前入口 | 主要职责 |
|---|---|---|
| Web 管理端 | apps/web/ |
真实数据大屏、后台身份、邀请码、任务、可筛选数据池、授权、审核、用户、操作记录、统计和语音生成 |
| 微信小程序 | apps/miniprogram/ |
邀请准入、采集员登录、唯一姓名资料、权限申请、任务领取、录音/文字提交、返修、结果查看和按任务双阶段统计 |
| Spring Boot 后端 | backend/ |
身份、邀请准入与会话、任务状态、媒体、导入、审核、统计和外部集成 API |
| MongoDB | recording_platform |
用户、邀请声明、会话、任务、条目、媒体、导入、幂等和语音生成数据 |
| 运维脚本 | scripts/ |
Windows 本地启动、生产部署、本地数据重置和相关检查 |
主要技术栈:
- Web:Vue 3、Vite、JavaScript
- 小程序:原生微信小程序
- 后端:Java 17、Spring Boot、Maven
- 数据库:MongoDB
| 领域 | 已实现能力 |
|---|---|
| Web 管理 | ADMIN/REVIEWER 登录与会话接管、角色路由、真实数据大屏、统一数字分页、任务配置、可从详情返回恢复筛选和分页且长期记忆所选任务的数据池、已授权采集员的单页/跨页批量分配、中文全量 CSV 导出、固定两位小数的进度百分比、双进度审核入口、审核池独立五维筛选与跨页批处理、审核领取后的标记无效、任务级 AI 辅助审核,以及列表与人员详情均可快捷切换日期的双阶段采集员统计 |
| 小程序采集 | 新微信身份邀请码首次准入、已有微信身份与数字账号登录、“我的”直达资料与头像设置、任务授权、领取、录音、当前录音删除、文本复制/补充、纯文本 JSON 与录音 multipart 提交、参考媒体时长自动检测、返修、释放备注、本人释放后 30 分钟内跳过同一条、标记无效与恢复,以及包含六种日期范围、双阶段汇总、小时分布、每日统计和两套分页明细的任务统计 |
所有“今天”、日期筛选、每日统计和 CSV 日期范围统一按 Asia/Shanghai 凌晨 4 点换日:例如 2026-07-31 表示 2026-07-31 04:00 至 2026-08-01 04:00 的左闭右开区间。原始提交/完成时间及普通操作时间仍按实际时间展示。Web 大屏、任务、审核、统计、系统管理和语音生成的关键复杂规则使用通用问号说明,支持悬浮、键盘聚焦、点击固定和单实例切换。
| 任务与审核 | 草稿、运行、暂停、结束状态;固定展示文本/音频/视频三类参考源;文字或录音成果;运行中任务的待领取数据可批量分配给已授权采集员;人工审核、驳回返修、审核标记无效与软恢复、单页/跨页批量操作和状态并发控制;AI 音频转写单条上限 20MB |
| 媒体与导入 | WAV/MP3 校验与受保护读取、HTTPS 参考媒体 URL、CSV 异步导入、失败行重试和持久化幂等 |
| 语音生成 | MiniMax 试听、付费克隆、日常合成、音色配置和生成记录 |
| 外部集成 | 专用机器 API Key 写入任务数据、按任务编号定位、来源绑定、完成状态查询和结果音频读取 |
详细业务规则、接口契约和数据库说明以 AGENTS.md 为准。
新微信身份注册时,miniprogram_users 保存邀请码 ID、名称快照、末四位和兑换时间,完整邀请码与哈希不会进入用户摘要;历史用户保持兼容并在 Web 用户管理中显示为“历史用户”。登录会话继续独立保存在 sessions,由 expiresAt TTL 自动清理,无需人工定期删除。
小程序姓名去除首尾空格后按精确值全局唯一,停用用户继续占用原姓名;英文大小写不同的姓名允许共存。完善资料或修改姓名发生冲突时返回 409 NAME_EXISTS。
采集员本人释放条目后,30 分钟内再次领取会原子跳过该条并继续查找同任务的下一条;其他采集员可以立即领取,管理员释放不触发原采集员冷却。该规则复用既有释放操作历史,不改变领取/释放接口,也不需要数据库迁移。
本地开发至少需要:
- Java 17
- Node.js 与 npm
- MongoDB
- Windows PowerShell
- 微信开发者工具(验证小程序时)
生产部署还需要 Linux、NVM、Node.js 22、PM2、Git、curl,以及已单独配置的 MongoDB、持久化目录、Nginx 和 HTTPS 证书。完整要求见 scripts/README.md。
仓库不维护 Docker Compose,也不会自动安装、启动或停止 MongoDB。
在仓库根目录复制公开模板:
Copy-Item .env.example .env根据本地环境填写 .env。至少确认 MongoDB 地址和存储目录可用;需要微信登录、语音生成、首管理员或外部集成时,再填写对应配置。
.env 已被 Git 忽略。不得把数据库密码、微信 AppSecret、MiniMax API Key、管理员初始密码或原始集成 API Key 写入仓库。
默认开发连接为:
mongodb://localhost:27017/recording_platform
如使用其他实例,只在本地 .env 中修改 MONGODB_URI。启动脚本只检查 MongoDB 是否可达,不负责管理数据库进程。
首次运行或依赖变化后执行:
Set-Location apps/web
npm install
Set-Location ../miniprogram
npm install
Set-Location ../..后端使用仓库自带 Maven Wrapper,无需全局安装 Maven。
在仓库根目录执行:
.\scripts\start-dev.cmd脚本会先脱敏检查 MongoDB 可达性和录音目录可写性,再打开两个 PowerShell 窗口运行:
backend\mvnw.cmd spring-boot:run
npm run dev -- --host localhost --port 5173
本地入口:
- Web:
http://localhost:5173 - 后端:
http://127.0.0.1:8080 - 就绪检查:
http://127.0.0.1:8080/api/health/ready - 语音生成工作台:
http://localhost:5173/admin/voice-generation/workbench
就绪接口只有 overall、mongo、storage 全部为 UP 时返回 HTTP 200;返回 503 时不应继续业务联调。
小程序导入和本地 API 地址配置见 apps/miniprogram/README.md。
Web:
Set-Location apps/web
npm test -- --run
npm run build微信小程序:
Set-Location apps/miniprogram
npm test后端:
Set-Location backend
.\mvnw.cmd test修改后还应按影响范围运行语法检查和 git diff --check。各端的专项验证方式见对应模块 README。
Ubuntu 生产服务器完成环境、私密配置和持久化目录准备后,在干净的 main 工作区执行:
./scripts/deploy-production.sh脚本通过 git pull --ff-only origin main 更新,依次验证和构建 Web、后端与微信小程序;全部成功后才启动或重启单实例 PM2 后端,并以本机就绪接口三项全 UP 作为成功条件。
脚本不会创建或修改 .env、MongoDB、Nginx、Certbot、防火墙、备份、回滚或微信发布配置。生产前置条件、失败行为和诊断命令见 scripts/README.md。
本地数据重置和旧录音路径迁移都是高风险运维操作,不属于日常启动流程:
- 本地重置会不可恢复地删除
recording_platform开发数据库和受限运行存储,且不会生成备份。 - 旧录音路径迁移必须停写、备份 MongoDB 集合与完整录音目录,并以单后端实例执行。
执行前必须阅读 scripts/README.md 和 AGENTS.md 中的完整规则。
| 目录或文件 | 职责 |
|---|---|
apps/web/ |
Vue 3 管理端、审核端和语音生成页面 |
apps/miniprogram/ |
原生微信小程序录音采集端 |
backend/ |
Spring Boot API、MongoDB 持久化和媒体处理 |
docs/ |
CSV 验收数据和补充资料 |
scripts/ |
本地启动、生产部署、重置与脚本测试 |
.env.example |
可提交的空值或安全默认配置模板 |
AGENTS.md |
长期项目规则、接口说明和数据边界 |
log.md |
AI 辅助修改与验收记录 |
backend/HELP.md 当前不存在;后端命令和接口边界分别以本 README、AGENTS.md 与源码测试为准。
- 不提交
.env、API Key、token、cookie、Authorization、微信 AppSecret、数据库凭据、管理员密码、真实客户数据或完整签名 URL。 - Web 会话使用 HttpOnly Cookie 与 CSRF;小程序使用不透明 Bearer token;服务端和 MongoDB 只保存会话令牌哈希。
- 外部集成只允许专用机器身份访问明确列出的集成端点,浏览器、Web Cookie、小程序 Bearer 和管理员身份都不能替代机器 API Key。
- 参考音视频新数据只保存通过语法校验的绝对 HTTPS URL;服务端不探测、下载或代理外部参考媒体。
- 录音结果保持受保护访问,公开参考媒体兼容端点不得暴露任何
RECORDING类型文件。 - 小程序不面向公众开放注册,仅面向重庆砚数科技有限公司内部员工及经项目管理员邀请、授权的录音采集人员;登录板块下方常驻说明身份核验和任务授权限制,不增加游客模式。
- AI 结果和语音生成能力不自动领取、审核、提交或流转录音任务。
- 生产环境必须独立配置 HTTPS、备份、监控、微信合法域名和秘密值管理。