certflow.services.caliber_mapping_service module

口径映射服务

收口 CaliberMapping 的 ORM 类与 CRUD 逻辑,供控制器层(Controller)调用, 消除控制器直接依赖 certflow.models.* 的跨层边。视图(View)只经控制器门面 访问,不直接触碰本服务或模型层。

架构层次:View → Controller (CaliberMappingController)

→ Service (CaliberMappingService) → Model (CaliberMapping)

class certflow.services.caliber_mapping_service.CaliberMapping(**kwargs)[源代码]

基类:Base

口径字符串映射表

对标 VBA function.vb 确认口径() 第164-166行:

Arr_KouJingDuiYing = CanShuSheet.Range("口径替换数据表")
For i = LBound(Arr_KouJingDuiYing, 1) To UBound(Arr_KouJingDuiYing, 1)
    If VBA.Trim(Arr_KouJingDuiYing(i, 1)) = VBA.Trim(口径字符串) Then ...
id

主键ID

raw_text

原始口径字符串(如 "DN100", "2"", "2-1/2"", "DN100*80")

caliber_value

标准化口径值(如 "100", "50", "65", "100*80")

is_imperial

是否英制口径

source

来源(manual/auto-learned/import)

usage_count

使用次数

id
raw_text
caliber_value
is_imperial
source
usage_count
created_at
updated_at
to_mm()[源代码]

转换为毫米值

返回:

标准化后的毫米整数值;无法解析时返回 None。

返回类型:

int | None

class certflow.services.caliber_mapping_service.CaliberMappingService(session)[源代码]

基类:object

口径映射服务 — 控制器与模型之间的业务调度层。

CRUD 逻辑从原 CaliberMappingController 下沉至此,控制器仅做事务提交。

参数:

session (Session)

CSV_COLUMNS = ['raw_text', 'caliber_value', 'is_imperial']
CSV_FIELD_TYPES = {'caliber_value': 'text', 'is_imperial': 'bool', 'raw_text': 'text'}
CSV_UNIQUE_KEYS = ['raw_text']
list_all()[源代码]

返回全部口径映射记录(按 id 升序)。

返回类型:

list[CaliberMapping]

get_by_id(mapping_id)[源代码]

按主键获取记录。

参数:

mapping_id (int)

返回类型:

CaliberMapping | None

create(data)[源代码]

新增记录(不提交,交由控制器统一 commit)。

参数:

data (dict[str, Any])

返回类型:

CaliberMapping

update(mapping_id, data)[源代码]

更新记录(不提交);id 不存在返回 None。

参数:
返回类型:

CaliberMapping | None

delete(mapping_id)[源代码]

删除记录(不提交);id 不存在返回 False。

参数:

mapping_id (int)

返回类型:

bool

seed_common_calibers()[源代码]

幂等灌入常见口径映射示例,库非空则跳过(不破坏已有数据)。

返回类型:

int

export_csv(path)[源代码]

把当前 caliber_mappings 表整表导出为 CSV 快照,返回行数。

参数:

path (str | Any)

返回类型:

int

import_csv(path)[源代码]

把 CSV 快照 upsert 回 caliber_mappings 表,返回统计。

参数:

path (str | Any)

返回类型:

dict[str, int]