VWED_server/routes/modbus_config_api.py

190 lines
6.1 KiB
Python
Raw Normal View History

2025-07-14 10:29:37 +08:00
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Modbus配置API模块
提供Modbus配置相关的API接口
"""
from typing import Dict, List, Any, Optional
from fastapi import APIRouter, Query, Path, Request, Body
from routes.common_api import format_response, error_response
from utils.logger import get_logger
from services.modbus_config_service import ModbusConfigService
from routes.model.modbus_config_model import (
ModbusConfigAddRequest,
ModbusConfigUpdateRequest,
ModbusConnectionTestRequest,
ModbusConfigListParams
)
# 创建路由
router = APIRouter(
prefix="/api/vwed-modbus-config",
tags=["VWED Modbus配置"]
)
# 设置日志
logger = get_logger("app.modbus_config_api")
@router.post("/add")
async def add_modbus_config(
request: Request,
config_data: ModbusConfigAddRequest = Body(..., description="Modbus配置信息")
):
"""
新增Modbus配置
Args:
config_data: Modbus配置信息包含nameipport等字段
Returns:
包含新增结果的响应
"""
try:
# 转换为字典
config_dict = config_data.model_dump(exclude_unset=True)
result = await ModbusConfigService.add_modbus_config(config_dict)
if not result["success"]:
return error_response(message=result["message"], code=400)
return format_response(data=result["data"], message=result["message"])
except Exception as e:
logger.error(f"新增Modbus配置失败: {str(e)}")
return error_response(message=f"新增Modbus配置失败: {str(e)}", code=500)
@router.delete("/{config_id}")
async def delete_modbus_config(
config_id: str = Path(..., description="配置ID")
):
"""
删除Modbus配置
Args:
config_id: Modbus配置ID
Returns:
包含删除结果的响应
"""
try:
result = await ModbusConfigService.delete_modbus_config(config_id)
if not result["success"]:
return error_response(message=result["message"], code=404)
return format_response(message=result["message"])
except Exception as e:
logger.error(f"删除Modbus配置失败: {str(e)}")
return error_response(message=f"删除Modbus配置失败: {str(e)}", code=500)
@router.post("/test-connection")
async def test_modbus_connection(
connection_data: ModbusConnectionTestRequest = Body(..., description="Modbus连接参数")
):
"""
测试Modbus连接
Args:
connection_data: Modbus连接参数包含ipportslave_id等
Returns:
包含连接测试结果的响应
"""
try:
# 转换为字典
connection_dict = connection_data.model_dump(exclude_unset=True)
result = await ModbusConfigService.test_modbus_connection(connection_dict)
if not result["success"]:
return error_response(message=result["message"], code=400)
return format_response(data=result["data"], message=result["message"])
except Exception as e:
logger.error(f"测试Modbus连接失败: {str(e)}")
return error_response(message=f"测试Modbus连接失败: {str(e)}", code=500)
@router.get("/list")
async def get_modbus_config_list(
page: int = Query(1, ge=1, description="页码"),
size: int = Query(10, ge=1, description="每页数量"),
name: Optional[str] = Query(None, description="配置名称"),
ip: Optional[str] = Query(None, description="设备IP地址")
):
"""
获取Modbus配置列表
Args:
page: 页码
size: 每页数量
name: 配置名称用于筛选
ip: 设备IP地址用于筛选
Returns:
包含Modbus配置列表的响应
"""
try:
# 创建查询参数对象
params = ModbusConfigListParams(
pageNum=page,
pageSize=size,
name=name,
ip=ip
)
result = await ModbusConfigService.get_modbus_config_list(
page=params.pageNum,
size=params.pageSize,
name=params.name,
ip=params.ip
)
if not result["success"]:
return error_response(message=result["message"], code=500)
return format_response(data=result["data"], message=result["message"])
except Exception as e:
logger.error(f"获取Modbus配置列表失败: {str(e)}")
return error_response(message=f"获取Modbus配置列表失败: {str(e)}", code=500)
@router.put("/{config_id}")
async def update_modbus_config(
config_id: str = Path(..., description="配置ID"),
config_data: ModbusConfigUpdateRequest = Body(..., description="Modbus配置信息")
):
"""
修改Modbus配置
Args:
config_id: Modbus配置ID
config_data: 修改后的Modbus配置信息
Returns:
包含修改结果的响应
"""
try:
# 转换为字典
config_dict = config_data.model_dump(exclude_unset=True)
result = await ModbusConfigService.update_modbus_config(config_id, config_dict)
if not result["success"]:
return error_response(message=result["message"], code=400)
return format_response(data=result["data"], message=result["message"])
except Exception as e:
logger.error(f"修改Modbus配置失败: {str(e)}")
return error_response(message=f"修改Modbus配置失败: {str(e)}", code=500)
@router.get("/{config_id}")
async def get_modbus_config_detail(
config_id: str = Path(..., description="配置ID")
):
"""
获取指定Modbus配置详情
Args:
config_id: Modbus配置ID
Returns:
包含Modbus配置详情的响应
"""
try:
result = await ModbusConfigService.get_modbus_config_detail(config_id)
if not result["success"]:
return error_response(message=result["message"], code=404)
return format_response(data=result["data"], message=result["message"])
except Exception as e:
logger.error(f"获取Modbus配置详情失败: {str(e)}")
return error_response(message=f"获取Modbus配置详情失败: {str(e)}", code=500)