x
This commit is contained in:
@@ -23,6 +23,63 @@ logger = get_logger(__name__)
|
||||
class StorageIntegrationService:
|
||||
"""存储集成服务 - PostgreSQL + RustFS"""
|
||||
|
||||
@staticmethod
|
||||
def _resolve_best_scheme_payload(cavity_json: Dict[str, Any]) -> Dict[str, Any]:
|
||||
"""从新多方案/旧单方案结构中解析推荐方案和型腔详情。"""
|
||||
if not isinstance(cavity_json, dict):
|
||||
return {
|
||||
"best_scheme_id": None,
|
||||
"best_scheme": {},
|
||||
"best_cavity_data": {},
|
||||
"key_info": {},
|
||||
}
|
||||
|
||||
candidate_schemes = cavity_json.get("candidate_schemes") or []
|
||||
if not candidate_schemes:
|
||||
key_info = cavity_json.get("mold_cavities", {}).get("cavity_key_info", {})
|
||||
return {
|
||||
"best_scheme_id": cavity_json.get("best_scheme_id"),
|
||||
"best_scheme": {},
|
||||
"best_cavity_data": cavity_json,
|
||||
"key_info": key_info,
|
||||
}
|
||||
|
||||
best_scheme_id = cavity_json.get("best_scheme_id")
|
||||
best_scheme = candidate_schemes[0]
|
||||
if best_scheme_id:
|
||||
for scheme in candidate_schemes:
|
||||
if scheme.get("scheme_id") == best_scheme_id:
|
||||
best_scheme = scheme
|
||||
break
|
||||
|
||||
best_cavity_data = best_scheme.get("cavity_data", {}) if isinstance(best_scheme, dict) else {}
|
||||
key_info = best_scheme.get("key_info", {}) if isinstance(best_scheme, dict) else {}
|
||||
if not key_info:
|
||||
key_info = best_cavity_data.get("mold_cavities", {}).get("cavity_key_info", {})
|
||||
return {
|
||||
"best_scheme_id": best_scheme.get("scheme_id") or best_scheme_id,
|
||||
"best_scheme": best_scheme,
|
||||
"best_cavity_data": best_cavity_data,
|
||||
"key_info": key_info,
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
def _parse_first_number(value: Any) -> Optional[float]:
|
||||
if value is None:
|
||||
return None
|
||||
try:
|
||||
return float(value)
|
||||
except (TypeError, ValueError):
|
||||
pass
|
||||
import re
|
||||
matches = re.findall(r"\d+(?:\.\d+)?", str(value))
|
||||
if not matches:
|
||||
return None
|
||||
try:
|
||||
return float(matches[0])
|
||||
except (TypeError, ValueError):
|
||||
return None
|
||||
|
||||
async def save_stp_file(self, session: AsyncSession,
|
||||
file_path: Path,
|
||||
original_filename: str,
|
||||
@@ -272,12 +329,26 @@ class StorageIntegrationService:
|
||||
file_hash=file_hash
|
||||
)
|
||||
|
||||
# 3. 提取关键信息
|
||||
metadata = cavity_json.get('metadata', {})
|
||||
product_analysis = cavity_json.get('product_analysis', {})
|
||||
manufacturing_info = cavity_json.get('manufacturing_info', {})
|
||||
# 3. 提取关键信息(兼容多方案与单方案结构)
|
||||
payload = self._resolve_best_scheme_payload(cavity_json)
|
||||
best_scheme_id = payload.get("best_scheme_id")
|
||||
best_scheme = payload.get("best_scheme") or {}
|
||||
best_cavity_data = payload.get("best_cavity_data") or {}
|
||||
metadata = best_cavity_data.get('metadata', {})
|
||||
product_analysis = best_cavity_data.get('product_analysis', {})
|
||||
manufacturing_info = best_cavity_data.get('manufacturing_info', {})
|
||||
mold_size = manufacturing_info.get('estimated_mold_size', {})
|
||||
key_info = cavity_json.get('mold_cavities', {}).get('cavity_key_info', {})
|
||||
key_info = payload.get("key_info") or {}
|
||||
if not key_info:
|
||||
key_info = best_cavity_data.get('mold_cavities', {}).get('cavity_key_info', {})
|
||||
mold_material = (
|
||||
metadata.get("selected_material")
|
||||
or manufacturing_info.get("recommended_material")
|
||||
or 'Aluminum Alloy 7075'
|
||||
)
|
||||
parting_line_length = self._parse_first_number(
|
||||
manufacturing_info.get("parting_line_length")
|
||||
)
|
||||
|
||||
# 4. 创建PostgreSQL记录
|
||||
mold_cavity = MoldCavityData(
|
||||
@@ -286,9 +357,10 @@ class StorageIntegrationService:
|
||||
storage_bucket=upload_result['bucket'],
|
||||
|
||||
# 模具参数
|
||||
mold_material=manufacturing_info.get('recommended_material', 'Aluminum Alloy 7075'),
|
||||
mold_material=mold_material,
|
||||
shrinkage_rate=metadata.get('shrinkage_rate', 0.005),
|
||||
draft_angle=metadata.get('draft_angle', 2.0),
|
||||
parting_line_length=parting_line_length,
|
||||
|
||||
# 提取的摘要字段
|
||||
cavity_key_info=key_info,
|
||||
@@ -306,7 +378,13 @@ class StorageIntegrationService:
|
||||
# 质量评估
|
||||
weld_line_risk=key_info.get('quality_considerations', {}).get('potential_weld_lines'),
|
||||
sink_mark_risk=key_info.get('quality_considerations', {}).get('sink_mark_areas'),
|
||||
warpage_risk=key_info.get('quality_considerations', {}).get('warpage_risk')
|
||||
warpage_risk=key_info.get('quality_considerations', {}).get('warpage_risk'),
|
||||
|
||||
# 多方案可信化摘要
|
||||
best_scheme_id=best_scheme_id,
|
||||
confidence_score=best_scheme.get("confidence_score"),
|
||||
is_fallback=best_scheme.get("is_fallback"),
|
||||
fallback_reason=best_scheme.get("fallback_reason"),
|
||||
)
|
||||
|
||||
session.add(mold_cavity)
|
||||
|
||||
Reference in New Issue
Block a user