docs: add developer module guides
This commit is contained in:
133
docs/developer/modules/extractor.md
Normal file
133
docs/developer/modules/extractor.md
Normal file
@@ -0,0 +1,133 @@
|
||||
# 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,而不是塞回页面
|
||||
Reference in New Issue
Block a user