|
|
|
@ -1,5 +1,183 @@ |
|
|
|
# 修改记录 |
|
|
|
|
|
|
|
## 2025-08-18 修改DeviceService.get_device方法优先级 |
|
|
|
|
|
|
|
**修改内容:** |
|
|
|
修改 `app/services/device_service.py` 中的 `get_device` 方法,让它优先获取自动发现的设备,然后再获取注册的设备。 |
|
|
|
|
|
|
|
**修改详情:** |
|
|
|
|
|
|
|
### 修改前 |
|
|
|
```python |
|
|
|
async def get_device(self, device_id: str) -> Optional[Dict[str, Any]]: |
|
|
|
"""获取指定设备(包括注册和自动发现的设备)""" |
|
|
|
try: |
|
|
|
# 先检查注册设备 |
|
|
|
device_info = await self.device_manager.get_device(device_id) |
|
|
|
if device_info: |
|
|
|
# 转换为统一格式 |
|
|
|
return {...} |
|
|
|
|
|
|
|
# 检查自动发现设备 |
|
|
|
device_source = await self.device_manager.get_device_source(device_id) |
|
|
|
if device_source == DeviceSource.AUTO_DISCOVERED: |
|
|
|
# 获取自动发现设备信息 |
|
|
|
auto_discovered_devices = await self.device_manager.get_auto_discovered_devices() |
|
|
|
for device in auto_discovered_devices: |
|
|
|
if device["device_id"] == device_id: |
|
|
|
return device |
|
|
|
|
|
|
|
return None |
|
|
|
``` |
|
|
|
|
|
|
|
### 修改后 |
|
|
|
```python |
|
|
|
async def get_device(self, device_id: str) -> Optional[Dict[str, Any]]: |
|
|
|
"""获取指定设备(优先获取自动发现的设备,然后获取注册的设备)""" |
|
|
|
try: |
|
|
|
# 优先检查自动发现设备 |
|
|
|
device_source = await self.device_manager.get_device_source(device_id) |
|
|
|
if device_source == DeviceSource.AUTO_DISCOVERED: |
|
|
|
# 获取自动发现设备信息 |
|
|
|
auto_discovered_devices = await self.device_manager.get_auto_discovered_devices() |
|
|
|
for device in auto_discovered_devices: |
|
|
|
if device["device_id"] == device_id: |
|
|
|
return device |
|
|
|
|
|
|
|
# 然后检查注册设备 |
|
|
|
device_info = await self.device_manager.get_device(device_id) |
|
|
|
if device_info: |
|
|
|
# 转换为统一格式 |
|
|
|
return {...} |
|
|
|
|
|
|
|
return None |
|
|
|
``` |
|
|
|
|
|
|
|
**优化效果:** |
|
|
|
- ✅ 优先获取自动发现的设备信息 |
|
|
|
- ✅ 然后获取注册的设备信息 |
|
|
|
- ✅ 保持原有的错误处理和日志记录 |
|
|
|
- ✅ 不影响其他方法的调用 |
|
|
|
|
|
|
|
## 2025-08-18 修复DeviceService重大Bug:支持自动发现设备 |
|
|
|
|
|
|
|
**修改内容:** |
|
|
|
修复 `app/services/device_service.py` 中的重大Bug,确保所有方法都能正确处理自动发现设备,而不仅仅是注册设备。 |
|
|
|
|
|
|
|
**修改详情:** |
|
|
|
|
|
|
|
### 1. 修复get_all_devices方法 |
|
|
|
```python |
|
|
|
# 修改前:只返回注册的设备 |
|
|
|
async def get_all_devices(self) -> List[Device]: |
|
|
|
devices = await self.device_manager.get_all_devices() |
|
|
|
return devices |
|
|
|
|
|
|
|
# 修改后:返回包括注册和自动发现设备的统一列表 |
|
|
|
async def get_all_devices(self) -> List[Dict[str, Any]]: |
|
|
|
devices = await self.device_manager.get_all_devices_unified() |
|
|
|
return devices |
|
|
|
``` |
|
|
|
|
|
|
|
### 2. 修复get_device方法(重大Bug修复) |
|
|
|
```python |
|
|
|
# 修改前:只检查注册设备,自动发现设备会被误判为不存在 |
|
|
|
async def get_device(self, device_id: str) -> Optional[Device]: |
|
|
|
device_info = await self.device_manager.get_device(device_id) |
|
|
|
return device_info |
|
|
|
|
|
|
|
# 修改后:同时检查注册和自动发现设备 |
|
|
|
async def get_device(self, device_id: str) -> Optional[Dict[str, Any]]: |
|
|
|
# 先检查注册设备 |
|
|
|
device_info = await self.device_manager.get_device(device_id) |
|
|
|
if device_info: |
|
|
|
return {转换为统一格式} |
|
|
|
|
|
|
|
# 检查自动发现设备 |
|
|
|
device_source = await self.device_manager.get_device_source(device_id) |
|
|
|
if device_source == DeviceSource.AUTO_DISCOVERED: |
|
|
|
return {获取自动发现设备信息} |
|
|
|
|
|
|
|
return None |
|
|
|
``` |
|
|
|
|
|
|
|
### 3. 修复get_device_status方法(重大Bug修复) |
|
|
|
```python |
|
|
|
# 修改前:只检查注册设备,自动发现设备状态无法获取 |
|
|
|
async def get_device_status(self, device_id: str) -> DeviceStatusResponse: |
|
|
|
device = await self.device_manager.get_device(device_id) |
|
|
|
if not device: |
|
|
|
raise ValueError(f"设备 {device_id} 不存在") # 自动发现设备会被误判 |
|
|
|
|
|
|
|
# 修改后:同时支持注册和自动发现设备状态 |
|
|
|
async def get_device_status(self, device_id: str) -> DeviceStatusResponse: |
|
|
|
device_source = await self.device_manager.get_device_source(device_id) |
|
|
|
|
|
|
|
if device_source == DeviceSource.REGISTERED: |
|
|
|
# 处理注册设备 |
|
|
|
device = await self.device_manager.get_device(device_id) |
|
|
|
return DeviceStatusResponse(...) |
|
|
|
else: |
|
|
|
# 处理自动发现设备 |
|
|
|
auto_discovered_devices = await self.device_manager.get_auto_discovered_devices() |
|
|
|
for device in auto_discovered_devices: |
|
|
|
if device["device_id"] == device_id: |
|
|
|
return DeviceStatusResponse(...) |
|
|
|
``` |
|
|
|
|
|
|
|
### 4. 修复execute_operation方法(重大Bug修复) |
|
|
|
```python |
|
|
|
# 修改前:只检查注册设备,自动发现设备操作会失败 |
|
|
|
async def execute_operation(self, device_id: str, operation: str, **kwargs): |
|
|
|
device = await self.device_manager.get_device(device_id) |
|
|
|
if not device: |
|
|
|
raise ValueError(f"设备 {device_id} 不存在") # 自动发现设备会被误判 |
|
|
|
|
|
|
|
# 修改后:正确处理注册和自动发现设备操作 |
|
|
|
async def execute_operation(self, device_id: str, operation: str, **kwargs): |
|
|
|
device_source = await self.device_manager.get_device_source(device_id) |
|
|
|
|
|
|
|
if device_source == DeviceSource.REGISTERED: |
|
|
|
# 检查注册设备是否存在 |
|
|
|
device = await self.device_manager.get_device(device_id) |
|
|
|
if not device: |
|
|
|
raise ValueError(f"设备 {device_id} 不存在") |
|
|
|
# 执行注册设备操作 |
|
|
|
else: |
|
|
|
# 检查自动发现设备是否存在 |
|
|
|
auto_discovered_devices = await self.device_manager.get_auto_discovered_devices() |
|
|
|
device_exists = any(device["device_id"] == device_id for device in auto_discovered_devices) |
|
|
|
if not device_exists: |
|
|
|
raise ValueError(f"设备 {device_id} 不存在") |
|
|
|
# 执行自动发现设备操作 |
|
|
|
``` |
|
|
|
|
|
|
|
### 5. 更新API端点 |
|
|
|
```python |
|
|
|
# 更新API端点注释,明确支持自动发现设备 |
|
|
|
@router.get("/devices/{device_id}", summary="获取指定设备") |
|
|
|
async def get_device(device_id: str): |
|
|
|
"""获取指定设备信息(包括注册和自动发现的设备)""" |
|
|
|
|
|
|
|
@router.get("/devices/{device_id}/status", summary="获取设备状态") |
|
|
|
async def get_device_status(device_id: str): |
|
|
|
"""获取指定设备状态(包括注册和自动发现的设备)""" |
|
|
|
``` |
|
|
|
|
|
|
|
### 6. 修复效果 |
|
|
|
- ✅ **完整设备支持**:所有方法现在都能正确处理注册和自动发现设备 |
|
|
|
- ✅ **设备查询修复**:`get_device` 方法不再误判自动发现设备为不存在 |
|
|
|
- ✅ **状态查询修复**:`get_device_status` 方法能正确获取自动发现设备状态 |
|
|
|
- ✅ **操作执行修复**:`execute_operation` 方法能正确执行自动发现设备操作 |
|
|
|
- ✅ **统一数据格式**:所有设备都以统一的字典格式返回 |
|
|
|
- ✅ **设备来源标识**:每个设备都包含 `source` 字段标识设备来源 |
|
|
|
|
|
|
|
### 7. 技术说明 |
|
|
|
- **设备来源检查**:使用 `get_device_source` 方法正确识别设备类型 |
|
|
|
- **自动发现设备处理**:通过 `get_auto_discovered_devices` 方法获取自动发现设备信息 |
|
|
|
- **错误处理完善**:确保设备不存在时抛出正确的错误信息 |
|
|
|
- **数据格式统一**:注册和自动发现设备都转换为统一的字典格式 |
|
|
|
|
|
|
|
## 2025-08-18 请求和响应模型架构重构 |
|
|
|
|
|
|
|
**修改内容:** |
|
|
|
|