erp-java/services/report-service/README_EXPORT.md

7.3 KiB
Raw Permalink Blame History

Report Export Module - 报表导出模块

概述

报表导出模块是ERP系统的核心组件负责将系统中的各类业务数据订单、商品、库存、供应商等导出为多种格式CSV、Excel、PDF支持同步和异步导出提供定时任务功能。

功能特性

1. 多格式导出

  • CSV: 带BOM的UTF-8编码完美兼容Microsoft Excel
  • Excel (XLSX): Apache POI生成支持大数据量
  • PDF: OpenPDF生成适合打印存档

2. 导出类型

类型 说明 API端点
订单导出 导出订单主信息和明细 POST /api/v1/exports/orders
商品导出 导出商品SKU信息 POST /api/v1/exports/goods
库存导出 导出库存快照数据 POST /api/v1/exports/inventory
供应商导出 导出供应商信息 POST /api/v1/exports/suppliers
库存报表 导出库存统计报表 POST /api/v1/exports/reports/stock
销售报表 导出销售统计报表 POST /api/v1/exports/reports/sales
订单报表 导出订单统计报表 POST /api/v1/exports/reports/orders
采购报表 导出采购统计报表 POST /api/v1/exports/reports/purchases
资金报表 导出资金流水报表 POST /api/v1/exports/reports/finances

3. 异步导出

  • 支持异步导出,提交后立即返回
  • 异步任务使用独立线程池处理
  • 可查询导出进度和历史记录

4. 定时导出

  • 支持Cron表达式配置定时任务
  • 可按每天/每周/每月等周期自动导出
  • 定时任务可取消和管理

5. 导出历史管理

  • 记录每次导出的元信息
  • 支持分页查询导出历史
  • 自动清理过期导出文件

API文档

导出订单

POST /api/v1/exports/orders
Content-Type: application/json

{
    "tenantId": 1,
    "userId": 100,
    "format": "CSV",
    "platform": "taobao",
    "status": "completed",
    "warehouseId": 1,
    "startDate": "2024-01-01",
    "endDate": "2024-01-31",
    "keyword": "测试"
}

响应示例:

{
    "code": 200,
    "message": "导出成功",
    "data": {
        "id": 1,
        "filename": "orders_1_1704067200000.csv",
        "filePath": "/data/exports/1/orders_1_1704067200000.csv",
        "fileSize": 102400,
        "fileSizeFormatted": "100.00 KB",
        "rowCount": 1000,
        "status": "COMPLETED",
        "downloadUrl": "/api/v1/exports/1/download",
        "createdAt": "2024-01-01T12:00:00",
        "completedAt": "2024-01-01T12:00:05"
    }
}

异步导出

POST /api/v1/exports/orders/async
Content-Type: application/json

{
    "tenantId": 1,
    "format": "XLSX",
    "startDate": "2024-01-01",
    "endDate": "2024-01-31"
}

查询导出历史

GET /api/v1/exports?tenantId=1&type=ORDERS&status=COMPLETED&page=1&pageSize=20

下载导出文件

GET /api/v1/exports/{id}/download?tenantId=1

创建定时导出任务

POST /api/v1/exports/scheduled?cronExpression=0%200%2012%20*%20*%20?
Content-Type: application/json

{
    "tenantId": 1,
    "type": "ORDERS",
    "format": "CSV",
    "startDate": "2024-01-01",
    "endDate": "2024-01-31"
}

技术架构

核心技术栈

  • Spring Boot 3.x: 基础框架
  • Spring Scheduling: 定时任务
  • Apache POI 5.x: Excel文件生成
  • OpenPDF: PDF文件生成
  • MyBatis Plus: 数据访问层
  • Redis: 缓存和分布式锁
  • Nacos: 服务发现和配置中心

核心组件

com.erp.report.export
├── controller/
│   └── ReportExportController.java    # REST API控制器
├── service/
│   ├── ReportExportService.java      # 服务接口
│   └── ReportExportServiceImpl.java   # 服务实现
├── entity/
│   └── DataExportEntity.java         # 导出记录实体
├── repository/
│   └── DataExportRepository.java     # 数据访问层
├── dto/
│   ├── ExportFormat.java             # 导出格式枚举
│   ├── ExportType.java               # 导出类型枚举
│   ├── ExportStatus.java             # 导出状态枚举
│   ├── ExportRequest.java            # 导出请求DTO
│   └── ExportResponse.java           # 导出响应DTO
├── scheduler/
│   └── ExportScheduler.java          # 定时任务调度器
└── config/
    ├── AsyncConfig.java              # 异步配置
    └── ExportWebConfig.java          # Web配置

线程池配置

参数 说明
corePoolSize 4 核心线程数
maxPoolSize 8 最大线程数
queueCapacity 100 任务队列容量
threadNamePrefix export- 线程名前缀

文件存储

  • 默认存储路径: /data/exports/{tenantId}/
  • 支持NFS等共享存储
  • 自动清理7天前的导出文件

部署指南

Docker部署

# 构建并启动
docker-compose -f deploy/docker-compose.yml up -d

# 查看日志
docker logs -f report-service

# 扩缩容
docker-compose -f deploy/docker-compose.yml scale report-service=3

Kubernetes部署

# 部署
./deploy/deploy.sh deploy

# 查看状态
kubectl get pods -n erp -l app=report-service

# 扩缩容
kubectl scale deployment/report-service --replicas=4 -n erp

# 查看日志
kubectl logs -f deployment/report-service -n erp

配置参数

参数 默认值 说明
export.base-path /data/exports 导出文件存储基础路径
export.max-rows 10000 单次最大导出行数
export.async.core-pool-size 4 异步导出核心线程数
export.async.max-pool-size 8 异步导出最大线程数
export.cleanup.cron 0 0 2 * * ? 清理任务Cron表达式
export.cleanup.retention-days 7 导出文件保留天数

性能优化

1. 大数据量导出

  • 使用流式处理,避免内存溢出
  • 分批次查询数据库
  • 异步处理,不阻塞主线程

2. 并发控制

  • 限制最大并发导出数
  • 使用线程池隔离任务
  • 队列缓冲,防止过载

3. 存储优化

  • 及时清理过期文件
  • 使用压缩存储
  • 考虑使用对象存储(OSS)

监控告警

健康检查

  • /actuator/health: 服务健康状态
  • /actuator/metrics: 性能指标

关键指标

  • export.tasks.total: 导出任务总数
  • export.tasks.active: 当前活跃任务数
  • export.tasks.completed: 已完成任务数
  • export.tasks.failed: 失败任务数
  • export.file.size: 导出文件大小

常见问题

Q: 导出文件打不开?

A: 检查CSV文件编码是否为UTF-8-BOMExcel需要使用带BOM的UTF-8编码才能正确显示中文。

Q: 导出超时怎么办?

A: 建议使用异步导出接口,导出会后台处理,完成后可查询历史记录下载。

Q: 导出文件在哪里?

A: 默认存储在/data/exports/{tenantId}/目录下可通过API下载或直接访问。

Q: 如何设置定时导出?

A: 使用/api/v1/exports/scheduled接口创建定时任务Cron表达式如0 0 12 * * ?表示每天中午12点执行。

更新日志

v1.1.0 (2024-01-15)

  • 新增PDF导出格式支持
  • 新增定时导出任务功能
  • 优化大数据量导出性能
  • 新增加强监控指标

v1.0.0 (2024-01-01)

  • 初始版本
  • 支持CSV/Excel导出
  • 支持订单/商品/库存/供应商导出
  • 支持异步导出