Files

71 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 诊单视频录制回放上传入口
## Goal
在诊单编辑抽屉的「视频录制回放记录」tab 中增加手动上传入口,支持大容量视频自动分片上传,并在上传完成后把视频回放地址关联到对应通话记录,供后台直接回放。
## What I already know
* 入口页面在 `admin/src/views/tcm/diagnosis/edit.vue`tab 组件为 `admin/src/views/tcm/diagnosis/components/CallRecordPanel.vue`
* 当前回放面板只能展示 `recording_urls_list`,没有手动上传入口。
* 管理端现有视频上传能力只有整文件 `POST /upload/video`,前端封装在 `admin/src/api/file.ts``uploadVideoBlob` / `uploadMaterialFile`
* 服务端上传实现位于 `server/app/common/service/UploadService.php`,视频上传目前只接收一次性文件流,不支持分片合并。
* 诊单通话记录接口为 `GET /tcm.diagnosis/getCallRecords`,服务端逻辑在 `DiagnosisLogic::getCallRecords`
* 当前“浏览器本地录制上传后关联回放”的接口是 `POST /tcm.diagnosis/attachLocalCallRecording`,它按 `diagnosis_id + admin_id` 回退到最近一条通话记录,不支持显式指定 `call_record_id`
* 回放数据存储在 `tcm_call_record.recording_urls`JSON 数组)与 `recording_status`
* `tcm_call_record` 基础字段定义在 `server/sql/tcm_call_record.sql`;录制相关补充字段定义在 `server/sql/add_call_recording_fields.sql`
* 当前 Trellis 目录下没有 `.trellis/spec/`,本任务的实现上下文需要依赖 PRD / research 文件本身。
## Assumptions (temporary)
* 大容量视频上传采用后端落盘分片 + 最终合并的方式,不依赖云厂商 Multipart SDK。
* 无通话记录时允许直接上传,服务端自动生成一条模拟 `tcm_call_record` 承载该视频回放。
## Open Questions
* 暂无
## Requirements (evolving)
* 在诊单编辑的「视频录制回放记录」tab 提供视频上传入口。
* 有通话记录时,上传入口按“每条通话记录”逐行提供,用户在目标记录行内上传视频。
* 无通话记录时,tab 顶部也要提供上传入口;上传后服务端自动生成一条模拟通话记录并展示在列表中。
* 支持大容量视频自动切片上传,避免单次请求过大导致失败。
* 下方列表数据来源保持为 `tcm_call_record`,不得引入独立的“上传视频列表”数据源。
* 上传完成后必须将视频地址写入目标通话记录的 `recording_urls`,并同步维护相关状态字段,确保列表立即可见。
* 对于自动生成的模拟通话记录,房间号、通话类型、状态等无真实来源字段使用系统默认值,但仍落在 `tcm_call_record` 同表中。
* 保持现有云端录制 / 本地浏览器录制展示逻辑兼容,不破坏已有回放列表。
* 仅允许视频文件类型,沿用现有视频格式白名单。
## Acceptance Criteria (evolving)
* [ ] 在诊单编辑页打开「视频录制回放记录」tab 时可以看到上传入口。
* [ ] 即使当前没有通话记录,也可以直接上传视频。
* [ ] 选择较大视频文件后,前端自动分片并完成上传,无需用户手工处理。
* [ ] 上传成功后,目标通话记录立即能看到新增回放视频。
* [ ] 列表中的上传视频信息仍然来自 `tcm_call_record`,不会写到别的表导致数据割裂。
* [ ] 已有录制回放仍能正常展示与播放。
* [ ] 错误场景有明确提示,失败后不会写入脏的回放地址。
## Definition of Done (team quality bar)
* Tests added/updated (unit/integration where appropriate)
* Lint / typecheck / CI green
* Docs/notes updated if behavior changes
* Rollout/rollback considered if risky
## Out of Scope (explicit)
* 不改造 TRTC 云端录制流程
* 不新增独立的视频转码/压缩流程
* 不做前台/小程序端上传入口
## Technical Notes
* 诊单编辑页 tab`admin/src/views/tcm/diagnosis/edit.vue`
* 回放面板:`admin/src/views/tcm/diagnosis/components/CallRecordPanel.vue`
* 通话记录 API`admin/src/api/tcm.ts`
* 上传 API`admin/src/api/file.ts`
* 服务端上传:`server/app/common/service/UploadService.php`
* 通话记录逻辑:`server/app/adminapi/logic/tcm/DiagnosisLogic.php`