certflow.services.dn_service module¶
公称通径(DN)处理服务
对标 VBA function.vb 确认口径() 函数,提供: 1. 口径字符串标准化(去除 DN 前缀、英制转换) 2. 口径映射查询(从 SQLite caliber_mappings 表) 3. 自学习机制(新口径自动记录到数据库) 4. 多口径处理(如 DN100*80 → 100*80)
- v2.0 新增:
对标 VBA 确认口径() 全部逻辑
英制口径识别(2", 2-1/2" 等格式)
哨兵值处理(VBA 的 CInt(-20) 对应 None)
- class certflow.services.dn_service.DNService(session=None)[源代码]¶
基类:
object公称通径处理服务
负责从口径字符串解析/查询标准化口径值。
对标 VBA function.vb 确认口径() 函数(第156-293行)。
- 参数:
session (Session | None)
- session¶
SQLAlchemy 数据库会话
- static normalize_caliber(raw_text)[源代码]¶
标准化口径字符串
对标 VBA print.vb 第681行: .Cells(5, 2) = Replace(str_kjA, "DN", "")
- static is_imperial_model(model)[源代码]¶
判断产品型号是否为英制(含 LB 磅级或 2500 等级)
对标 VBA 确认压力() 第312行: If (UCase(... Like "LB") Or (UCase(... Like "2500")) Then ...
- static imperial_to_mm(inch_str)[源代码]¶
英制口径转换为 mm 值
对标 VBA 确认口径() 中隐含的英制转换逻辑。 常见英制口径对照: - 1/2" → 15mm - 3/4" → 20mm - 1" → 25mm - 1-1/4" → 32mm - 1-1/2" → 40mm - 2" → 50mm - 2-1/2" → 65mm - 3" → 80mm - 4" → 100mm - 5" → 125mm - 6" → 150mm - 8" → 200mm - 10" → 250mm - 12" → 300mm
- lookup_caliber_from_db(raw_text)[源代码]¶
从 caliber_mappings 表查询口径映射
对标 VBA 确认口径() 第164-166行: Arr_KouJingDuiYing = CanShuSheet.Range("口径替换数据表")
- resolve_caliber(caliber_str, model='', fallback_raw='')[源代码]¶
解析口径字符串,返回标准化口径信息
处理流程对标 VBA 确认口径() 函数(含 B5/C5 回退与英制 LB 判断): 1. 英制口径判断和转换(支持携带 LB 磅级,如 2"150LB) 2. 数据库口径映射表查询(剥离 LB 后缀后匹配) 3. 直接标准化(去除 DN 前缀、清理 "MM" 后缀) 4. C5/C6 备用口径回退(主口径为空或解析无效时启用) 5. 无法解析,标记 needs_manual
- 参数:
- 返回:
包含以下键的字典
caliber_value (str): 标准化口径值,如 "100", "50"
is_imperial (bool): 是否英制
raw_text (str): 原始文本
source (str): 来源 "db" / "imperial" / "normalize" / "fallback" / "unknown"
needs_manual (bool): 是否需要手动补充(对标 VBA CInt(-20) 哨兵)
lb_class (str | None): 提取到的 LB 磅级(如 "150"),无则 None
- 返回类型: