""" 映射控制器 协调映射管理的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)