131 lines
4.6 KiB
Markdown
131 lines
4.6 KiB
Markdown
# Implementation Plan: Auto-import Extracted Data to Database
|
|
|
|
## Overview
|
|
|
|
Implement automatic database import after ERP data extraction completes. The merged Excel file will be read and written to the `dbo_DiscreteMaterialPlanData` table.
|
|
|
|
## Requirements
|
|
|
|
- **Trigger**: Automatic after extraction completes
|
|
- **Delete Strategy**: Batch delete by `SourceNumber` before insert
|
|
- **Batch Insert**: 1000 records per batch
|
|
- **Field Mapping**: 28 Excel fields → database columns (skip 打印人, 打印日期, BOMVersion)
|
|
|
|
## Architecture
|
|
|
|
```
|
|
ExtractorService
|
|
│
|
|
├── extract() → download + merge Excel
|
|
│
|
|
└── NEW: importToDatabase(mergedFile)
|
|
│
|
|
▼
|
|
DataImportService
|
|
│
|
|
├── readExcelFile() → records + sourceNumbers
|
|
├── deleteExistingRecords(sourceNumbers)
|
|
└── batchInsert(records, batchSize=1000)
|
|
│
|
|
▼
|
|
DiscreteMaterialPlanDAO
|
|
├── deleteBySourceNumbers()
|
|
└── batchInsert()
|
|
```
|
|
|
|
## Field Mapping
|
|
|
|
| Excel Header | Database Column | Notes |
|
|
| ------------ | ------------------------ | ---------------- |
|
|
| 工厂 | Factory | |
|
|
| 备料状态 | MaterialStatus | |
|
|
| 备料计划单号 | PlanNumber | |
|
|
| 来源单号 | SourceNumber | **Deletion key** |
|
|
| 备料类型 | MaterialType | |
|
|
| 产品编码 | ProductCode | |
|
|
| 产品名称 | ProductName | |
|
|
| 产品计划数量 | ProductPlanQuantity | decimal |
|
|
| 产品单位 | ProductUnit | |
|
|
| 用料部门 | UseDepartment | |
|
|
| 备注 | Remark | |
|
|
| 制单人 | Creator | |
|
|
| 制单日期 | CreateDate | date |
|
|
| 审批人 | Approver | |
|
|
| 审批日期 | ApproveDate | date |
|
|
| 序号 | SequenceNumber | int |
|
|
| 材料编码 | MaterialCode | |
|
|
| 材料名称 | MaterialName | |
|
|
| 规格 | Specification | |
|
|
| 型号 | Model | |
|
|
| 图号 | DrawingNumber | |
|
|
| 物料材质 | MaterialQuality | |
|
|
| 计划数量 | PlanQuantity | decimal |
|
|
| 单位 | Unit | |
|
|
| 需用日期 | RequiredDate | date |
|
|
| 发料仓库 | Warehouse | |
|
|
| 单位用量 | UnitUsage | decimal |
|
|
| 累计出库数量 | CumulativeOutputQuantity | decimal |
|
|
| 打印人 | ❌ SKIP | Not in DB |
|
|
| 打印日期 | ❌ SKIP | Not in DB |
|
|
| - | BOMVersion | SKIP (no source) |
|
|
|
|
## Files to Create/Modify
|
|
|
|
### 1. NEW: `src/main/services/database/data-importer.ts`
|
|
|
|
Main import service with:
|
|
|
|
- `importFromExcel(filePath)` - Main entry point
|
|
- `readExcelFile(filePath)` - Parse Excel using ExcelJS
|
|
- Map Excel columns to database fields
|
|
- Return records and unique SourceNumbers
|
|
|
|
### 2. MODIFY: `src/main/services/database/discrete-material-plan-dao.ts`
|
|
|
|
Add methods:
|
|
|
|
- `deleteBySourceNumbers(sourceNumbers: string[])` - Batch delete
|
|
- `batchInsert(records: MaterialPlanRecord[], batchSize: number)` - Batch insert
|
|
|
|
### 3. MODIFY: `src/main/services/erp/extractor.ts`
|
|
|
|
- After successful merge, call `importToDatabase(mergedFile)`
|
|
- Add import results to `ExtractorResult`
|
|
|
|
### 4. MODIFY: `src/main/types/extractor.types.ts`
|
|
|
|
Add types:
|
|
|
|
```typescript
|
|
export interface ImportResult {
|
|
success: boolean
|
|
recordsImported: number
|
|
recordsDeleted: number
|
|
errors: string[]
|
|
}
|
|
|
|
export interface ExtractorResult {
|
|
// existing fields...
|
|
importResult?: ImportResult
|
|
}
|
|
```
|
|
|
|
### 5. MODIFY: `src/renderer/src/pages/ExtractorPage.tsx`
|
|
|
|
- Display import results
|
|
- Show records deleted/imported counts
|
|
|
|
## Implementation Order
|
|
|
|
1. Extend `DiscreteMaterialPlanDAO` with insert/delete methods
|
|
2. Create `DataImportService`
|
|
3. Integrate into `ExtractorService`
|
|
4. Update types
|
|
5. Update UI
|
|
|
|
## Testing Plan
|
|
|
|
1. Unit test DAO methods
|
|
2. Integration test with sample Excel file
|
|
3. E2E test extraction → import flow
|