# ERPAuto - ERP 数据自动化处理工具

一个基于 Electron 的桌面应用程序，用于自动化处理 ERP 系统中的数据提取和清理任务。

## 功能特性

- **数据提取**：从 ERP 系统批量下载物料计划数据
- **物料清理**：自动删除指定的物料代码，支持干运行模式
- **数据库支持**：支持 MySQL 和 SQL Server 数据存储
- **Excel 解析**：自动解析下载的 Excel 文件

## 快速开始

### 环境要求

- Node.js >= 18
- npm >= 9
- 可访问的 ERP 系统

### 安装

```bash
# 克隆项目
git clone <repository-url>
cd ERPAuto

# 安装依赖
npm install
```

### 配置

在项目根目录创建 `config.yaml` 文件（可参考 `config.template.yaml`）：

```yaml
# ERP 配置（固定基础设施）
erp:
  url: https://your-erp-server.com

# 数据库配置
database:
  activeType: mysql # 或 sqlserver

  mysql:
    host: localhost
    port: 3306
    database: erpauto
    username: root
    password: your_password
    charset: utf8mb4

  sqlserver:
    server: localhost
    port: 1433
    database: erpauto
    username: sa
    password: your_password
    driver: 'ODBC Driver 18 for SQL Server'
    trustServerCertificate: true

# 路径配置
paths:
  dataDir: './data/'
  defaultOutput: 'output.xlsx'
  validationOutput: 'validation-result.xlsx'
```

**注意**：ERP 用户名和密码在应用的设置界面中配置，存储在数据库中（按用户管理）。

### 运行开发环境

```bash
npm run dev
```

### 构建应用

```bash
# Windows 安装版 + 便携版
npm run build:win
```

当前项目的正式构建与发布链路仅维护 Windows 目标。

## 使用指南

### 数据提取

1. 启动应用后，点击主页的「数据提取」进入提取页面
2. 在订单号输入框中输入订单号，每行一个
3. 设置批量大小（默认 100）
4. 点击「开始提取」按钮
5. 等待提取完成，查看结果

### 物料清理

1. 点击主页的「物料清理」进入清理页面
2. 输入订单号（每行一个）
3. 输入要删除的物料代码（每行一个）
4. 勾选「干运行模式」可预览删除结果（不实际删除）
5. 点击「开始清理」按钮
6. 查看清理结果和详细统计

## 测试

```bash
# 运行单元测试
npm run test

# 运行 E2E 测试
npm run test:e2e

# 查看测试报告
npm run test:e2e:report

# 查看覆盖率报告
npm run test:coverage
```

### 测试基础设施

P0 测试优化已完成（2026-04），性能提升 **41.5%**（7.65s → 4.49s）。

**文档**:

- [测试工厂使用指南](docs/TEST_FACTORY_USAGE.md) — 测试数据工厂 API 和最佳实践
- [Mock 库使用指南](docs/MOCK_LIBRARY_USAGE.md) — Mock 工厂函数和迁移指南

**快速示例**:

```typescript
// 使用测试工厂
import { UserFactory, OrderFactory } from '@/tests/fixtures/factory'
const admin = UserFactory.createAdmin()
const order = OrderFactory.createOrder()

// 使用 Mock 库
import { createMockLogger, createMockConfigManager } from '@/tests/mocks'
const logger = createMockLogger()
const config = createMockConfigManager({ logging: { level: 'debug' } })
```

## 项目结构

```
ERPAuto/
├── src/
│   ├── main/           # 主进程代码
│   │   ├── services/   # 业务服务
│   │   ├── ipc/        # IPC 处理器
│   │   └── types/      # TypeScript 类型
│   ├── preload/        # 预加载脚本
│   └── renderer/       # 渲染进程（React UI）
├── tests/
│   ├── unit/           # 单元测试
│   ├── integration/    # 集成测试
│   └── e2e/            # E2E 测试
└── docs/               # 文档
```

## 技术栈

- **框架**：Electron 39
- **前端**：React 19 + TypeScript
- **构建工具**：electron-vite
- **浏览器自动化**：Playwright
- **数据库**：mysql2, mssql
- **Excel 处理**：ExcelJS
- **测试**：Vitest, Playwright Test

## 常见问题

### 无法连接 ERP 系统

1. 检查 `config.yaml` 中的 ERP URL 是否正确
2. 确认网络连接正常
3. 检查 ERP 系统是否可访问
4. 在设置界面中确认 ERP 用户名和密码已配置

### 提取失败

1. 确认订单号格式正确
2. 检查 ERP 系统账号权限
3. 查看应用日志获取详细错误信息

### 数据库连接失败

1. 确认数据库服务已启动
2. 检查 `config.yaml` 中的数据库配置
3. 确认防火墙允许数据库端口访问

## 开发

```bash
# 安装依赖
npm install

# 启动开发服务器
npm run dev

# 类型检查
npm run typecheck

# 代码格式化
npm run format

# Lint 检查
npm run lint
```

## 许可证

MIT License
