新增功能

This commit is contained in:
Your Name
2026-03-04 15:32:30 +08:00
parent a07e844c47
commit ab77f5488d
2266 changed files with 177942 additions and 3444 deletions
+227
View File
@@ -0,0 +1,227 @@
# 医生IM账号自动导入功能
## 功能说明
在权限管理-管理员页面,新增或编辑管理员时,系统会自动将医生账号导入到腾讯云IM后台。
## 实现位置
### 前端页面
- 文件:`admin/src/views/permission/admin/index.vue`
- 新增按钮:第45-50行
- 编辑按钮:第133-135行
### 后端逻辑
- 文件:`server/app/adminapi/logic/auth/AdminLogic.php`
- 新增方法:`add()` - 第30行调用IM导入
- 编辑方法:`edit()` - 第70行调用IM导入
- 导入方法:`importDoctorAccountToIm()` - 新增的私有方法
## 账号格式
- 医生账号ID`doctor_{admin_id}`
- 例如:管理员ID为1,则IM账号为 `doctor_1`
- 昵称:使用管理员的名称
## 使用流程
### 新增管理员
1. 进入:权限管理 > 管理员
2. 点击"新增"按钮
3. 填写管理员信息(账号、名称、角色等)
4. 点击"确定"保存
5. ✅ 系统自动导入医生IM账号到腾讯云
### 编辑管理员
1. 进入:权限管理 > 管理员
2. 点击某个管理员的"编辑"按钮
3. 修改管理员信息
4. 点击"确定"保存
5. ✅ 系统自动更新医生IM账号信息
## 验证方法
### 1. 查看日志
```bash
# 查看最新日志
tail -f server/runtime/adminapi/log/当前日期.log
# 成功日志示例:
[info] 开始导入医生IM账号 - admin_id: 1, user_id: doctor_1, name: 管理员
[info] 医生IM账号导入成功 - admin_id: 1, user_id: doctor_1
# 失败日志示例:
[error] 导入医生IM账号异常 - admin_id: 1, error: xxx
```
### 2. 查看腾讯云控制台
1. 登录腾讯云控制台
2. 进入:即时通信IM > 应用列表
3. 选择你的应用(SDKAppID: 1600127710
4. 进入:账号管理
5. 搜索:`doctor_1`(或其他管理员ID
6. ✅ 应该能看到该账号
### 3. 测试视频通话
1. 医生端:使用 `doctor_1` 账号登录TUICallKit
2. 患者端:使用 `patient_X` 账号登录
3. 发起通话测试
4. ✅ 应该能正常通话
## 当前问题
### ErrorCode 70003: UserSig非法
**错误信息**
```
The UserSig in use is illegal. Please regenerate UserSig through official API.
```
**日志示例**
```
[2026-03-02T10:38:32+08:00][info] HTTP响应: {"ActionStatus":"FAIL","ErrorCode":70003,"ErrorInfo":"The UserSig in use is illegal..."}
[2026-03-02T10:38:32+08:00][error] 导入IM账号失败 - userId: patient_3, error: 导入账号失败 - ErrorCode: 70003
```
**可能原因**
1. ❌ SDKAppID不正确(使用了TRTC的而非IM的)
2. ❌ SecretKey不正确
3. ❌ IM服务未开通或已过期
4. ❌ 配置文件格式问题
## 排查步骤
### 步骤1: 验证配置
运行测试脚本:
```bash
cd server
php test_usersig.php
```
该脚本会:
- ✅ 显示当前SDKAppID和SecretKey
- ✅ 测试UserSig生成
- ✅ 测试UserSig验证
- ✅ 测试IM账号导入
- ✅ 提供详细的错误信息和排查建议
### 步骤2: 检查腾讯云控制台
1. 登录腾讯云控制台
2. 进入:即时通信IM > 应用列表
3. 确认SDKAppID是否为:`1600127710`
4. 进入应用详情 > 密钥管理
5. 确认SecretKey是否正确
6. 检查应用状态是否为"正常"
7. 检查是否欠费
### 步骤3: 使用官方工具测试
1. 访问:https://console.cloud.tencent.com/im/tool-usersig
2. 输入SDKAppID`1600127710`
3. 输入SecretKey:(从控制台复制)
4. 输入UserID`test_user`
5. 点击"生成UserSig"
6. 如果生成成功,说明配置正确
7. 如果生成失败,说明SDKAppID或SecretKey有误
### 步骤4: 更新配置
如果发现配置有误,更新 `server/.env` 文件:
```ini
[TRTC]
SDK_APP_ID = "正确的SDKAppID"
SECRET_KEY = "正确的SecretKey"
ENABLE = "true"
```
保存后重启服务。
## 技术细节
### 代码修改
#### 1. AdminLogic.php - 添加导入
```php
// 在 add() 方法中添加
self::importDoctorAccountToIm($admin['id'], $params['name']);
// 在 edit() 方法中添加
self::importDoctorAccountToIm($params['id'], $params['name']);
// 新增方法
private static function importDoctorAccountToIm($adminId, $name)
{
try {
$userId = 'doctor_' . $adminId;
Log::info('开始导入医生IM账号 - admin_id: ' . $adminId . ', user_id: ' . $userId . ', name: ' . $name);
$imService = new TencentImService();
$result = $imService->importAccount($userId, $name);
if ($result) {
Log::info('医生IM账号导入成功 - admin_id: ' . $adminId . ', user_id: ' . $userId);
} else {
Log::warning('医生IM账号导入失败 - admin_id: ' . $adminId . ', user_id: ' . $userId);
}
} catch (\Exception $e) {
Log::error('导入医生IM账号异常 - admin_id: ' . $adminId . ', error: ' . $e->getMessage());
}
}
```
#### 2. 添加命名空间
```php
use app\common\service\TencentImService;
use think\facade\Log;
```
### 依赖服务
- `TencentImService.php` - IM账号导入服务
- `TLSSigAPIv2.php` - UserSig生成算法(腾讯云官方)
## 注意事项
1. **不影响现有功能**
- 导入失败不会阻止管理员创建
- 只会记录日志,不会抛出异常
2. **重复导入**
- 重复导入同一账号不会报错
- IM会自动更新昵称信息
3. **网络要求**
- 服务器需要能访问 `console.tim.qq.com`
- 需要开放HTTPS (443)端口
4. **性能影响**
- 导入操作是同步的
- 通常耗时 < 1秒
- 如果网络慢可能影响保存速度
## 相关文档
- [IM_ACCOUNT_IMPORT.md](./IM_ACCOUNT_IMPORT.md) - IM账号导入完整文档
- [AUTO_CREATE_PATIENT_ACCOUNT.md](./AUTO_CREATE_PATIENT_ACCOUNT.md) - 患者账号自动创建
- [腾讯云IM REST API](https://cloud.tencent.com/document/product/269/1519)
## 更新日志
### 2026-03-02
- ✅ 实现医生IM账号自动导入功能
- ✅ 在AdminLogic的add()和edit()方法中添加导入逻辑
- ✅ 创建测试脚本 test_usersig.php
- ⏳ 待解决:ErrorCode 70003 UserSig非法问题
---
**下一步**:运行 `php server/test_usersig.php` 测试配置是否正确