190 lines
6.1 KiB
Python
190 lines
6.1 KiB
Python
#!/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配置信息,包含name、ip、port等字段
|
||
|
||
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连接参数,包含ip、port、slave_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)
|