7.6 KiB
7.6 KiB
自动创建患者 TRTC 账号功能
功能说明
在新增或编辑诊单时,系统会自动为患者创建 TRTC(实时音视频)账号,这样医生就可以直接发起视频通话,无需手动创建患者账号。
工作流程
医生新增/编辑诊单
↓
保存诊单信息
↓
自动为患者创建 TRTC 账号
↓
生成 UserSig(有效期180天)
↓
保存到数据库
↓
患者可以接听来电
实现细节
1. 数据库表
表名: la_tcm_patient_trtc
字段说明:
patient_id: 患者ID(唯一)user_id: TRTC用户ID(格式:patient_{patient_id})user_sig: UserSig签名sdk_app_id: SDKAppIDexpire_time: 过期时间(180天后)is_active: 是否激活last_login_time: 最后登录时间
2. 自动创建逻辑
触发时机:
- 新增诊单时
- 编辑诊单时
代码位置:
// server/app/adminapi/logic/tcm/DiagnosisLogic.php
public static function add(array $params)
{
// ... 创建诊单 ...
$model = Diagnosis::create($params);
// 自动为患者创建 TRTC 账号
self::createPatientTrtcAccount($model->patient_id);
return $model->id;
}
创建规则:
- 检查患者是否已有 TRTC 账号
- 如果已存在且未过期,跳过
- 如果不存在或已过期,创建/更新账号
- 生成 180 天有效期的 UserSig
- 保存到数据库
3. 获取患者签名
接口: /adminapi/tcm.diagnosis/getPatientSignature
逻辑:
- 先从数据库查询
- 如果存在且未过期,直接返回
- 如果不存在或已过期,重新生成并保存
优势:
- 减少重复生成
- 提高性能
- 统一管理
使用方式
方式 1: 自动创建(推荐)✅
-
新增诊单
- 进入"中医诊单"页面
- 点击"新增诊单"
- 填写患者信息
- 点击"确定"
- ✅ 系统自动为患者创建 TRTC 账号
-
编辑诊单
- 进入"中医诊单"页面
- 点击"编辑"
- 修改信息
- 点击"确定"
- ✅ 系统自动更新患者 TRTC 账号
-
发起通话
- 点击"视频通话"
- 点击"开始通话"
- ✅ 患者可以接听(如果患者端已登录)
方式 2: 手动测试
如果需要测试,可以使用测试页面:
- 访问:
http://localhost:5173/#/test/patient-call - 输入患者ID
- 点击"初始化患者端"
- 等待来电
数据库迁移
执行 SQL
mysql -u root -p your_database < server/sql/tcm_patient_trtc.sql
SQL 内容
CREATE TABLE IF NOT EXISTS `la_tcm_patient_trtc` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`patient_id` int(11) NOT NULL DEFAULT '0' COMMENT '患者ID',
`user_id` varchar(100) NOT NULL DEFAULT '' COMMENT 'TRTC用户ID',
`user_sig` text COMMENT 'UserSig签名',
`sdk_app_id` int(11) NOT NULL DEFAULT '0' COMMENT 'SDKAppID',
`expire_time` int(11) NOT NULL DEFAULT '0' COMMENT '过期时间',
`is_active` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否激活',
`last_login_time` int(11) NOT NULL DEFAULT '0' COMMENT '最后登录时间',
`create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
`update_time` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
`delete_time` int(11) DEFAULT NULL COMMENT '删除时间',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_patient_id` (`patient_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
日志记录
系统会记录账号创建/更新的日志:
// 创建成功
[info] 创建患者 TRTC 账号
{
"patient_id": 10001,
"user_id": "patient_10001"
}
// 更新成功
[info] 更新患者 TRTC 账号
{
"patient_id": 10001,
"user_id": "patient_10001"
}
// 创建失败
[error] 创建患者 TRTC 账号失败
{
"patient_id": 10001,
"error": "错误信息"
}
查看日志:
tail -f server/runtime/log/info.log
tail -f server/runtime/log/error.log
优势
1. 自动化
- ✅ 无需手动创建患者账号
- ✅ 新增/编辑诊单时自动处理
- ✅ 减少操作步骤
2. 长期有效
- ✅ UserSig 有效期 180 天
- ✅ 自动检测过期并更新
- ✅ 无需频繁重新生成
3. 统一管理
- ✅ 所有患者账号集中管理
- ✅ 可以查询账号状态
- ✅ 可以批量更新
4. 性能优化
- ✅ 从数据库读取,减少计算
- ✅ 缓存机制,提高响应速度
- ✅ 按需生成,节省资源
注意事项
1. TRTC 配置
确保已配置腾讯云 TRTC:
# server/.env
[TRTC]
SDK_APP_ID = "你的SDKAppID"
SECRET_KEY = "你的密钥"
ENABLE = "true"
注意: 配置格式必须使用 [TRTC] 分组,否则无法正确读取配置。
2. 患者端集成
患者端需要:
- 集成 TUICallKit
- 使用患者的 UserSig 登录
- 监听来电事件
3. 过期处理
- UserSig 有效期 180 天
- 过期后自动重新生成
- 建议定期检查并更新
4. 安全性
- UserSig 包含敏感信息
- 不要在前端暴露
- 通过 API 获取
测试步骤
1. 创建诊单
1. 登录后台
2. 进入"中医诊单"
3. 点击"新增诊单"
4. 填写信息:
- 患者姓名:张三
- 手机号:13800138000
- 其他必填项...
5. 点击"确定"
6. ✅ 系统自动创建患者 TRTC 账号
2. 查看日志
# 查看是否创建成功
tail -f server/runtime/log/info.log | grep "TRTC"
# 应该看到:
# [info] 创建患者 TRTC 账号 {"patient_id":10001,"user_id":"patient_10001"}
3. 查询数据库
-- 查看患者 TRTC 账号
SELECT * FROM la_tcm_patient_trtc WHERE patient_id = 10001;
-- 应该看到:
-- patient_id: 10001
-- user_id: patient_10001
-- user_sig: eJw1jk...
-- expire_time: 1234567890
4. 测试通话
1. 打开测试页面:/test/patient-call
2. 输入患者ID:10001
3. 点击"初始化患者端"
4. 在另一个窗口发起通话
5. ✅ 患者端收到来电
故障排查
问题 0: 新增诊单时提示"参数缺失"
现象:
- 新增诊单后提示:
{"code":0,"show":1,"msg":"参数缺失","data":[]} - 无法切换到"血糖血压记录"标签页
原因:
- 后端返回的数据结构不正确
- 前端无法正确获取新创建的诊单ID
解决方案: 已修复!后端现在返回:
return $this->success('添加成功', ['id' => $result], 1, 1);
前端正确处理:
if (result && result.id) {
mode.value = 'edit'
formData.value.id = result.id
// 重新获取详情
const detail = await tcmDiagnosisDetail({ id: result.id })
formData.value.patient_id = detail.patient_id
}
问题 1: 账号未创建
检查:
- TRTC 是否已配置?
- TRTC_ENABLE 是否为 true?
- 查看错误日志
解决:
# 查看错误日志
tail -f server/runtime/log/error.log
# 检查配置
cat server/.env | grep TRTC
问题 2: UserSig 过期
检查:
SELECT
patient_id,
user_id,
FROM_UNIXTIME(expire_time) as expire_time,
CASE
WHEN expire_time < UNIX_TIMESTAMP() THEN '已过期'
ELSE '有效'
END as status
FROM la_tcm_patient_trtc;
解决:
- 重新编辑诊单
- 或手动调用 API 更新
问题 3: 无法接听
检查:
- 患者端是否已登录?
- UserSig 是否有效?
- 网络是否正常?
相关文档
更新日志
v1.0.0 (2024-03-02)
- ✅ 实现自动创建患者 TRTC 账号
- ✅ 新增患者 TRTC 账号表
- ✅ 实现账号缓存机制
- ✅ 添加日志记录
- ✅ 支持自动更新过期账号
现在新增或编辑诊单时,系统会自动为患者创建 TRTC 账号! 🎉