# 模板与导入导出 iTi-Flask 提供模板中心、模板文件、导入导出任务和业务规格注册能力。 具体业务字段、变量含义和执行逻辑由业务模块提供。 ## 业务范围 一个导入导出能力由三段业务键定位: - `biz_domain`:业务域,例如 `system`、`mes`、`qos`。 - `biz_obj`:业务对象,例如 `user`、`work_order`。 - `operation`:操作,目前是 `import` 或 `export`。 模板编码默认由这三段生成: ```text system.user.import ``` 前端可以调用 `/exchange/templates/code` 生成,也可以创建模板时不传 `code`,后端自动生成。 ## 业务规格 模板变量不是运维动态维护的字典。 变量由业务模块注册,模板中心只展示和保存版本快照。 ```python from iti.exchange import ( ExchangeBusinessSpec, ExchangeOperation, ExchangeScope, ExchangeTemplateLayout, ExchangeTaskResult, ExchangeVariable, register_exchange_spec, ) def import_users(context): return ExchangeTaskResult(success_count=1) def register_tasks(self, app): register_exchange_spec( app, ExchangeBusinessSpec( scope=ExchangeScope("system", "user", ExchangeOperation.IMPORT), name="用户导入", description="导入系统用户", layout=ExchangeTemplateLayout(title="用户导入", sheet_name="用户", header_row=2), variables=( ExchangeVariable(key="username", label="用户名", required=True, example="alice"), ExchangeVariable(key="mobile", label="手机号"), ), ), handler=import_users, ) ``` 前端维护模板时,先从 `/exchange/catalog` 聚合查询业务范围。 选定范围后,页面展示该范围的变量、示例和使用方式。 ## 模板 模板记录保存: - `code` - `name` - `biz_domain` - `biz_obj` - `operation` - `layout` - `current_version` - `status` `layout` 只保存解析需要的标记,例如 `title_row`、`header_row`、`data_start_row`。 样式属于 Excel 文件本身,不进入导入导出数据模型。 版本记录保存: - 模板文件位置 - 校验值 - 布局快照 - 变量快照 变量快照用于保证历史版本可复现。 业务模块改了变量定义,不会影响已发布版本。 ## 执行 创建任务时传业务范围和可选模板版本。 框架解析模板计划后创建 `exchange_tasks`。 调用 `/exchange/tasks/{task_id}/run` 时,框架按业务范围找到注册的 handler,并把 `ExchangeTaskContext` 交给业务模块。 框架只管理任务状态、行结果和文件读写。 业务模块负责真实导入、导出、校验、回执和业务事务。 ## Source 模板计划可来自: - 本地模板中心:默认。 - 远程模板中心:`sourceKind=remote`。 - 自定义 source:注册 `register_exchange_source()`。 - 纯映射输入:显式 `sourceKind=mapping`。 ## 主要对象 - `ExchangeBusinessSpec` - `ExchangeScope` - `ExchangeOperation` - `ExchangeVariable` - `ExchangeTemplateLayout` - `ExchangeTemplatePlan` - `ExchangeTemplateSnapshot` - `ExchangeTaskContext` - `ExchangeTaskResult` - `ExchangeSource` Excel 数据处理走 `pandas`。 模板文件生成和上传解析走 `openpyxl`。