CadHubManage/CONFIG_MANAGEMENT_FEATURE.md

195 lines
4.7 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.

# 配置管理功能实现说明
## 功能概述
本次更新为WebSocket API添加了配置管理功能允许前端动态修改CAD文件的基础路径和文件扩展名配置所有修改都会持久化到配置文件中。
## 新增功能
### 1. 获取文件配置 (get_file_config)
获取当前的文件基础路径和扩展名配置。
**WebSocket消息**:
```json
{
"type": "get_file_config"
}
```
**响应**:
```json
{
"type": "info",
"message": "获取文件配置成功",
"data": {
"base_path": "C:\\Users\\Public\\Documents",
"file_extensions": {
"creo": [".prt", ".asm", ".drw"],
"pdms": [".rvm", ".dri"],
"revit": [".rvt", ".rfa", ".rte"]
}
}
}
```
### 2. 设置基础路径 (set_base_path)
修改CAD文件的基础存储路径并持久化。
**WebSocket消息**:
```json
{
"type": "set_base_path",
"base_path": "D:\\CAD_Files"
}
```
**验证规则**:
- 路径必须存在
- 路径必须是有效的目录
- 修改会立即写入配置文件
### 3. 设置文件扩展名 (set_file_extensions)
修改支持的文件扩展名配置并持久化。
**WebSocket消息**:
```json
{
"type": "set_file_extensions",
"file_extensions": {
"creo": [".prt", ".asm", ".drw", ".sec"],
"pdms": [".rvm", ".dri"],
"revit": [".rvt", ".rfa", ".rte"],
"autocad": [".dwg", ".dxf"]
}
}
```
**验证规则**:
- 扩展名配置必须是字典格式
- 每个软件的扩展名必须是数组
- 所有扩展名必须以"."开头
- 修改会立即写入配置文件
## 代码修改说明
### 1. 配置文件修改 (`configs/software_config.yaml`)
添加了`file_extensions`配置项:
```yaml
file_storage:
cad_files_path: "C:\\Users\\Public\\Documents"
# 文件扩展名配置
file_extensions:
creo: [".prt", ".asm", ".drw"]
pdms: [".rvm", ".dri"]
revit: [".rvt", ".rfa", ".rte"]
```
### 2. 配置类扩展 (`app/config.py`)
在`SoftwareConfig`类中新增方法:
- `get_file_extensions()`: 获取文件扩展名配置
- `set_file_extensions(extensions)`: 设置文件扩展名并持久化
- `set_cad_files_path(path)`: 设置CAD文件路径并持久化
- `save_config()`: 保存配置到YAML文件
### 3. 文件管理模块修改 (`app/api/v1/files.py`)
- 将硬编码的`CAD_EXTENSIONS`改为动态获取:`get_cad_extensions()`
- 更新`is_cad_file()`函数,从配置动态读取扩展名
- 更新`get_file_extension()`函数,从配置动态读取扩展名
### 4. WebSocket API扩展 (`app/api/v1/websocket.py`)
在`WSMessageType`类中新增消息类型:
- `GET_FILE_CONFIG = "get_file_config"`
- `SET_BASE_PATH = "set_base_path"`
- `SET_FILE_EXTENSIONS = "set_file_extensions"`
在`handle_client_message()`函数中新增对应的消息处理逻辑。
### 5. API文档更新 (`websocket-file-api-docs.md`)
添加了完整的配置管理功能文档,包括:
- 接口说明
- 请求/响应示例
- JavaScript和React使用示例
- 注意事项
## 使用示例
### JavaScript示例
```javascript
const ws = new WebSocket('ws://localhost:8000/api/v1/ws/connect?user_id=user123');
ws.onopen = () => {
// 获取当前配置
ws.send(JSON.stringify({ type: 'get_file_config' }));
};
ws.onmessage = (event) => {
const message = JSON.parse(event.data);
console.log(message);
};
// 修改基础路径
setTimeout(() => {
ws.send(JSON.stringify({
type: 'set_base_path',
base_path: 'D:\\CAD_Files'
}));
}, 1000);
// 修改文件扩展名
setTimeout(() => {
ws.send(JSON.stringify({
type: 'set_file_extensions',
file_extensions: {
creo: ['.prt', '.asm', '.drw'],
pdms: ['.rvm', '.dri'],
revit: ['.rvt', '.rfa', '.rte'],
autocad: ['.dwg', '.dxf']
}
}));
}, 2000);
```
## 注意事项
1. **权限要求**: 修改配置需要对`configs/software_config.yaml`文件有写入权限
2. **配置立即生效**: 修改后立即生效,影响文件列表查询和下载功能
3. **路径验证**: 设置基础路径时会验证路径是否存在且为有效目录
4. **扩展名格式**: 所有扩展名必须以"."开头
5. **配置同步**: 修改配置后,建议调用`get_file_list`重新获取文件列表以查看变更效果
6. **并发修改**: 多个客户端同时修改配置时,以最后一次修改为准
## 测试建议
1. 启动WebSocket服务器
2. 使用WebSocket客户端连接
3. 测试获取配置功能
4. 测试修改基础路径(使用有效和无效路径)
5. 测试修改文件扩展名(使用有效和无效格式)
6. 验证配置文件是否正确更新
7. 验证文件列表是否使用新配置
## 错误处理
所有接口都包含完善的错误处理:
- 参数验证
- 路径验证
- 扩展名格式验证
- 文件写入异常处理
错误会通过WebSocket以`type: "error"`消息返回给客户端。