Files
2026-03-21 20:37:50 +08:00

134 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Extractor 模块
`Extractor` 模块负责接收订单号输入、触发提取流程、同步共享订单号,并把提取结果导入后续链路可消费的数据形态。
## 1. 模块职责
- 接收和持久化订单号输入
- 将订单号同步为共享 `Production IDs`
- 触发批量提取流程
- 展示提取进度和日志
-`Cleaner` 等后续模块提供共享订单号基础
## 2. 模块结构
```mermaid
graph TD
Page[ExtractorPage]
Input[OrderNumberInput]
Persist[usePersistentTextState]
Shared[useSharedProductionIds]
Hook[useExtractor]
Preload[preload.extractor / validation]
Handler[extractor-handler]
Service[ERP Extractor Service]
Page --> Input
Page --> Persist
Page --> Shared
Page --> Hook
Hook --> Preload
Preload --> Handler
Handler --> Service
```
## 3. 关键入口文件
- `src/renderer/src/pages/ExtractorPage.tsx`
- `src/renderer/src/hooks/useExtractor.ts`
- `src/renderer/src/hooks/usePersistentTextState.ts`
- `src/renderer/src/hooks/useSharedProductionIds.ts`
- `src/renderer/src/components/OrderNumberInput.tsx`
- `src/main/ipc/extractor-handler.ts`
- `src/main/services/erp/extractor.ts`
## 4. 主要流程
```mermaid
sequenceDiagram
participant UI as ExtractorPage
participant Persist as usePersistentTextState
participant Shared as useSharedProductionIds
participant Hook as useExtractor
participant Preload as preload.extractor
participant Main as extractor-handler / extractor service
UI->>Persist: 保存输入
UI->>Shared: debounce 同步共享 IDs
UI->>Hook: startExtraction(orderNumbers)
Hook->>Preload: setSharedProductionIds()
Hook->>Preload: runExtractor()
Preload->>Main: invoke
Main-->>Preload: 提取结果
Preload-->>Hook: success / error / progress
Hook-->>UI: 更新日志与状态
```
## 5. 关键状态
当前前端侧最重要的状态包括:
- `orderNumbers`
用户输入的订单号文本
- `isRunning`
是否正在提取
- `progress`
当前提取进度
- `logs`
提取过程日志
- `error`
当前错误
- `isComplete`
提取是否结束
## 6. 与其他模块的关系
Extractor 与其他模块的关系如下:
```mermaid
graph LR
Extractor[Extractor]
SharedIds[shared Production IDs]
Validation[Validation]
Cleaner[Cleaner]
Extractor --> SharedIds
SharedIds --> Validation
Validation --> Cleaner
```
它最重要的跨模块输出不是页面本身,而是:
- 共享 `Production IDs`
- 导入数据库的数据
## 7. 最近的结构优化
最近这一块做过两类收敛:
- 把订单号持久化抽到 `usePersistentTextState`
- 把共享订单号同步抽到 `useSharedProductionIds`
这样页面不再自己同时处理:
- 输入状态
- `sessionStorage`
- bridge 副作用
## 8. 常见改动点
如果你要改 Extractor通常会落在这些位置
- 改输入与格式统计:`OrderNumberInput.tsx`
- 改页面交互:`ExtractorPage.tsx`
- 改前端提取编排:`useExtractor.ts`
- 改共享订单号同步:`useSharedProductionIds.ts`
- 改主进程执行:`extractor-handler.ts` / `erp/extractor.ts`
## 9. 修改建议
- 输入变化不要直接叠加更多高频副作用
- 共享订单号写入尽量维持单一入口
- 提取日志和进度流优先保持事件推送式结构
- 如果新增提取后处理,优先放在主进程 service而不是塞回页面