- Add DataImportService for reading Excel and importing to database - Extend DiscreteMaterialPlanDAO with deleteBySourceNumbers and batchInsert - Auto-trigger database write after successful Excel merge - Support batch delete by SourceNumber and batch insert (1000/batch) - Update ExtractorPage UI to show import results - Fix SQL Server query to handle undefined recordset for DELETE/INSERT Co-Authored-By: Claude (glm-5) <noreply@anthropic.com>
3.6 KiB
3.6 KiB
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
SourceNumberbefore 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 pointreadExcelFile(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 deletebatchInsert(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:
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
- Extend
DiscreteMaterialPlanDAOwith insert/delete methods - Create
DataImportService - Integrate into
ExtractorService - Update types
- Update UI
Testing Plan
- Unit test DAO methods
- Integration test with sample Excel file
- E2E test extraction → import flow