# 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文档 ### 导出订单 ```http 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": "测试" } ``` **响应示例:** ```json { "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" } } ``` ### 异步导出 ```http POST /api/v1/exports/orders/async Content-Type: application/json { "tenantId": 1, "format": "XLSX", "startDate": "2024-01-01", "endDate": "2024-01-31" } ``` ### 查询导出历史 ```http GET /api/v1/exports?tenantId=1&type=ORDERS&status=COMPLETED&page=1&pageSize=20 ``` ### 下载导出文件 ```http GET /api/v1/exports/{id}/download?tenantId=1 ``` ### 创建定时导出任务 ```http 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部署 ```bash # 构建并启动 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部署 ```bash # 部署 ./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-BOM,Excel需要使用带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导出 - 支持订单/商品/库存/供应商导出 - 支持异步导出