## 立项背景和目标
京投展厅需要一套可快速配置内容、支持多种互动形式、具备实时通信能力的数字化管理平台。目标是实现展厅内容"零代码"更新、观众互动数据实时采集与展示、多终端协同控制,提升展厅运营效率和观众体验。
### 核心功能模块
| 模块 | 功能说明 |
|------|---------|
| 单页内容管理(Pages) | 通过配置表单动态渲染编辑页面,支持文本、图片、视频、音频、富文本编辑器等多种字段类型,实现展厅各展项内容的灵活配置 |
| 媒体资源管理(Media) | 管理展厅图片、视频等媒体资源,支持投票功能及排行榜展示 |
| 人员管理(Person) | 管理展厅相关人物信息展示 |
| 文章管理(Article) | 展厅资讯、新闻等内容管理 |
| 投票系统(Vote) | 支持观众对展项进行投票,实时排行榜展示 |
| 摇一摇互动(Shake) | 基于WebSocket的实时摇一摇互动,统计观众摇动次数 |
| AI助手(Assistant) | 集成讯飞AI,支持智能问答和语音听写 |
| 人脸融合(FaceMerge) | 集成百度AI人脸融合能力 |
| 内容审核(Censor) | 集成百度AI文本/图片内容审核 |
| 系统权限管理 | 基于RBAC的权限体系,支持节点+分类(cid)双维度权限控制 |
| 操作日志 | 全量记录后台操作行为,支持审计追溯 |
| 数据导入导出 | 基于PhpSpreadsheet的Excel批量导入导出 |
### 业务流程
1. 管理员在后台通过动态表单配置各展项内容(文字、图片、视频、讲解词等)
2. 前端API接口获取配置数据并渲染展示
3. 观众通过移动端参与互动(投票、摇一摇),数据经WebSocket实时同步至展厅大屏
4. AI助手提供智能问答和语音听写服务
5. 所有后台操作均记录操作日志
### "我"的负责模块和结果
- **后端独立开发**,从数据库设计到接口的实现全流程负责
- 完成后台6大核心模块(Pages/Media/Person/Article/Vote/OperationLog)的CURD开发,通过MaillCurd Trait实现代码复用率80%以上
- 设计并实现动态表单系统(SystemForm),通过配置驱动表单渲染,新增展项内容无需修改代码
- 搭建GatewayWorker WebSocket服务,支持摇一摇互动、AI助手、语音听写3种实时交互场景
- 实现RBAC权限体系,支持节点+分类(cid)双维度权限控制,满足多展项独立授权需求
- 集成百度AI内容审核、人脸融合,讯飞AI智能问答、语音听写等4项AI能力
- 适配MySQL/达梦DM/PostgreSQL/SQLite四种数据库,满足国产化信创部署需求
### 难点与解决方案
1. **动态表单渲染**:不同展项字段差异大,硬编码维护成本高 → 设计SystemForm配置表,根据cid动态读取字段配置,结合ThinkPHP模板引擎自动渲染不同类型的表单控件(text/textarea/editor/image/video/audio/atlas),实现"零代码"新增展项
2. **WebSocket与HTTP服务状态同步**:GatewayWorker独立进程运行,需与ThinkPHP共享数据库状态 → 通过Redis Queue实现跨进程消息传递,WSS服务通过DatabasesService动态加载数据库配置,确保数据一致性
3. **多维度权限控制**:传统RBAC仅按节点授权,无法满足"同一控制器不同展项需独立授权"的需求 → 扩展权限节点为"node+cid"组合键,AuthService同时校验节点和分类维度,实现细粒度权限控制
4. **CKEditor内容转义问题**:ThinkPHP默认对输出进行HTML转义,导致CKEditor保存的富文本无法正常显示 → 使用`{$v.value|raw}`原始输出标记,避免模板引擎自动转义
5. **多数据库适配**:项目需兼容国产达梦数据库 → 封装DatabasesService统一管理数据库配置,针对DM数据库执行`ALTER SESSION SET CURRENT_SCHEMA`设置默认模式,确保SQL兼容性