# 模块迁移方案 — 05 特殊场景 > **模板说明**:描述定时任务、导入导出、状态机、事件触发等特殊业务场景。如果模块无特殊场景,写"无"即可。 > **参考范例**:`docs/客户管理及公海池迁移方案.md` 第五章 --- ## 定时任务 ### 任务 1:[任务名称] | 项目 | 内容 | |------|------| | 触发频率 | [如:每天凌晨 1 点] | | 说明 | [业务描述] | | Java 源码 | `shanxia/crm/backend/.../XxxTask.java` | **业务逻辑**: 1. [步骤1] 2. [步骤2] **Python 实现位置**:`backend/app/tasks/{module}.py` --- ## 导入导出 ### 导入 | 项目 | 内容 | |------|------| | 模板字段 | [列出 Excel 列] | | 校验规则 | [唯一性、必填、格式] | | Java 源码 | `...` | ### 导出 | 项目 | 内容 | |------|------| | 导出字段 | [列出 Excel 列] | | 字典列 | [字段 → dict_type,对照 Java `*Vo` 的 `@ExcelDictFormat`] | | Java 源码 | `...Controller.export` + `CrmXxxVo.java` | | 门户实现 | `backend/app/utils/crm_export_columns.py` 增加 `XXX_EXPORT_COLUMNS`;路由调用 `export_rows_to_xlsx_response` | **门户导出步骤(强制)**: 1. 从 Java `CrmXxxVo` 复制带 `@ExcelDictFormat(dictType="...")` 的字段映射。 2. 在 `crm_export_columns.py` 用 `ExportColumn("列标题", "camelCaseField", dict_type="...")` 声明。 3. 路由:`rows, _ = list_xxx(...)` → `return export_rows_to_xlsx_response(...)`。 4. 前端:`exportXxx` 使用 `responseType: 'blob'`(见 `ref-frontend-diff.md`)。 非字典列(姓名、手机号等)只写 `ExportColumn("标题", "field")` 即可。布尔列可用 `formatter=_yes_no`(参考联系人导出)。 --- ## 状态机 / 业务流程 ### 流程 1:[流程名称] ``` 状态A → (触发条件) → 状态B → (触发条件) → 状态C ``` | 转换 | 触发条件 | 伴随操作 | |------|---------|---------| | A→B | [条件] | [更新哪些字段/写入哪些记录] | --- ## 事件触发器 ### 触发器 1:[名称] | 触发时机 | 伴随操作 | Java 源码 | |---------|---------|----------| | [如:新增跟进记录后] | [如:更新客户最后跟进时间/跟进次数] | `...` |