SIT/controllers/mapping_controller.py

130 lines
3.5 KiB
Python
Raw Permalink Normal View History

2026-01-29 09:08:31 +00:00
"""
映射控制器
协调映射管理的UI和业务逻辑
"""
from typing import List, Optional
from services.mapping_service import MappingService
from services.graph_service import GraphService
from models.mapping import OperatorMapping, CodeMapping, CompositeMapping, Mapping
from models.mapping_graph import MappingGraph, GraphNode, GraphEdge
from utils.logger import get_logger
logger = get_logger(__name__)
class MappingController:
"""映射控制器类"""
def __init__(self):
self.mapping_service = MappingService()
self.graph_service = GraphService()
def create_operator_mapping(self, mapping_data: dict) -> tuple[bool, str, Optional[int]]:
"""
创建操作符映射
Args:
mapping_data: 映射数据字典
Returns:
(是否成功, 消息, 映射ID)
"""
try:
# 这里需要从字典构建OperatorMapping对象
# 简化处理,实际应用中需要更完善的转换逻辑
return False, "需要实现从字典创建映射对象的逻辑", None
except Exception as e:
logger.error(f"Controller: Failed to create operator mapping: {e}")
return False, f"创建操作符映射失败: {str(e)}", None
def create_code_mapping(self, mapping_data: dict) -> tuple[bool, str, Optional[int]]:
"""
创建代码映射
Args:
mapping_data: 映射数据字典
Returns:
(是否成功, 消息, 映射ID)
"""
try:
return False, "需要实现从字典创建映射对象的逻辑", None
except Exception as e:
logger.error(f"Controller: Failed to create code mapping: {e}")
return False, f"创建代码映射失败: {str(e)}", None
def delete_mapping(self, mapping_id: int) -> tuple[bool, str]:
"""
删除映射
Args:
mapping_id: 映射ID
Returns:
(是否成功, 消息)
"""
return self.mapping_service.delete_mapping(mapping_id)
def get_mapping(self, mapping_id: int) -> Optional[Mapping]:
"""
获取映射
Args:
mapping_id: 映射ID
Returns:
映射对象或None
"""
return self.mapping_service.get_mapping_by_id(mapping_id)
def get_mapping_graph(self) -> Optional[MappingGraph]:
"""
获取映射图
Returns:
映射图对象或None
"""
return self.mapping_service.get_mapping_graph()
def find_shortest_path(self, source_id: int, target_id: int) -> Optional[tuple]:
"""
查找最短路径
Args:
source_id: 源字段ID
target_id: 目标字段ID
Returns:
(路径, 权重) None
"""
graph = self.get_mapping_graph()
if not graph:
return None
return self.graph_service.find_shortest_path(graph, source_id, target_id)
def add_node_to_graph(self, node: GraphNode) -> tuple[bool, str]:
"""
向映射图添加节点
Args:
node: 图节点
Returns:
(是否成功, 消息)
"""
return self.mapping_service.add_node_to_graph(node)
def add_edge_to_graph(self, edge: GraphEdge) -> tuple[bool, str, Optional[int]]:
"""
向映射图添加边
Args:
edge: 图边
Returns:
(是否成功, 消息, 边ID)
"""
return self.mapping_service.add_edge_to_graph(edge)