Files
BIPMaterialManager/IMPLEMENTATION_PLAN.md
Misaka_Company c61776a1ff style: apply Prettier formatting across codebase
Apply consistent code formatting using Prettier to improve code readability
and maintain style consistency throughout the project.

Co-Authored-By: Claude (glm-5) <noreply@anthropic.com>
2026-03-04 14:24:16 +08:00

4.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 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:

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