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