# services/material_service.py """材料属性管理服务""" from typing import Dict, Any, List, Optional MATERIAL_PROPERTIES: Dict[str, Dict[str, Any]] = { "ABS": {"density": 1.05, "shrinkage": 0.005, "name": "ABS", "is_foam": False}, "PP": {"density": 0.90, "shrinkage": 0.016, "name": "PP", "is_foam": False}, "PE": {"density": 0.95, "shrinkage": 0.020, "name": "PE", "is_foam": False}, "PC": {"density": 1.20, "shrinkage": 0.007, "name": "PC", "is_foam": False}, "PA": {"density": 1.14, "shrinkage": 0.010, "name": "PA", "is_foam": False}, "POM": {"density": 1.41, "shrinkage": 0.020, "name": "POM", "is_foam": False}, "PMMA": {"density": 1.18, "shrinkage": 0.005, "name": "PMMA", "is_foam": False}, "PBT": {"density": 1.31, "shrinkage": 0.015, "name": "PBT", "is_foam": False}, "AlSi10Mg": {"density": 0.45, "shrinkage": 0.015, "name": "AlSi10Mg", "is_foam": True}, "AlSi12": {"density": 0.50, "shrinkage": 0.012, "name": "AlSi12", "is_foam": True}, "Pure Al Foam": {"density": 0.35, "shrinkage": 0.020, "name": "Pure Al Foam", "is_foam": True}, "AlSi7Mg": {"density": 0.40, "shrinkage": 0.018, "name": "AlSi7Mg", "is_foam": True}, } # 默认回退材料 _DEFAULT_MATERIAL = MATERIAL_PROPERTIES["ABS"] class MaterialService: """材料属性管理服务 — 集中管理材料字典,便于扩展和单测""" @staticmethod def get_material(material_name: str) -> Dict[str, Any]: """获取材料属性,不存在则回退到 ABS""" return MATERIAL_PROPERTIES.get(material_name, _DEFAULT_MATERIAL) @staticmethod def is_foam_material(material_name: str) -> bool: return MATERIAL_PROPERTIES.get(material_name, _DEFAULT_MATERIAL).get("is_foam", False) @staticmethod def list_all_materials() -> List[str]: return list(MATERIAL_PROPERTIES.keys()) @staticmethod def resolve_material(requested: str) -> str: """解析请求的材料名,若不在字典中则回退为 ABS""" return requested if requested in MATERIAL_PROPERTIES else "ABS"