DOU+ 订单明细数据处理工具,支持视频 ID 筛选和新模版格式输出。
- 📝 视频 ID 筛选:用户可填写需要处理的视频 ID 列表(支持逗号分隔或换行分隔)
- 🎯 智能匹配:根据用户填写的视频 ID 从汇总表中筛选匹配的数据行
- 📋 新模版输出:生成符合业务需求的 11 列模版格式
- 📊 匹配统计:显示填写数量和匹配成功数量,列出未匹配的 ID
- 🎯 视频 ID 提取:从抖音视频链接中自动提取视频 ID
- 📊 互动总量计算:自动计算点赞量 + 评论量 + 分享量总和
- 🌐 Web 界面:简洁易用的文件上传下载界面
- ⚡ 快速处理:支持批量数据处理
- 🔄 向后兼容:不填写视频 ID 时按第一版流程处理全部数据
- 后端:Java 17 + Spring Boot 3.2
- Excel 处理:Apache POI 5.2.5
- 前端:HTML + CSS + JavaScript(原生)
- 构建工具:Maven
- JDK 17+
- Maven 3.8+
cd excel-processor
mvn clean packagejava -jar target/excel-processor-0.0.1-SNAPSHOT.jar或者使用 Maven:
mvn spring-boot:run打开浏览器访问:http://localhost:8080
- 填写视频 ID:在文本框中填写需要处理的视频 ID
- 支持逗号分隔:
123,234,345 - 支持换行分隔:每行一个 ID
- 留空则处理全部数据(第一版模式)
- 支持逗号分隔:
- 上传汇总文件:点击上传区域或拖拽 Excel 文件到上传框
- 开始处理:点击"开始处理"按钮
- 查看匹配统计:显示填写数量、匹配成功数量和未匹配的 ID
- 下载结果:处理完成后点击"下载处理后的文件"
Excel 文件应包含以下列(列名需完全匹配):
| 列名 | 说明 | 是否必需 |
|---|---|---|
| 视频 ID | 视频 ID(如已有则直接使用) | 否 |
| 视频链接 | 抖音视频链接(用于提取视频 ID 或匹配) | 是 |
| 作者名称 | 视频作者名称 | 否 |
| 视频标题 | 视频标题 | 否 |
| 下单时间 | 订单创建时间 | 否 |
| 状态 | 订单状态 | 否 |
| 预算(元) | 投放预算 | 否 |
| 消耗(元) | 实际消耗 | 否 |
| 投放目标 | 投放目标类型 | 否 |
| 视频播放量 | 视频播放次数 | 否 |
| 视频点赞量 | 视频点赞数量 | 是(用于计算互动) |
| 视频评论量 | 视频评论数量 | 是(用于计算互动) |
| 视频分享量 | 视频分享数量 | 是(用于计算互动) |
处理后的 Excel 文件包含以下 11 列:
| 列名 | 说明 |
|---|---|
| 视频 ID | 匹配的视频 ID |
| 视频链接 | 原始视频链接 |
| 作者名称 | 视频作者名称 |
| 视频标题 | 视频标题 |
| 下单时间 | 订单创建时间 |
| 状态 | 订单状态 |
| 预算(元) | 投放预算 |
| 消耗(元) | 实际消耗 |
| 投放目标 | 投放目标类型 |
| 视频播放量 | 视频播放次数 |
| 互动 | 点赞量 + 评论量 + 分享量 |
| 方法 | 路径 | 参数 | 描述 |
|---|---|---|---|
| POST | /api/upload |
file, videoIds(可选) | 上传并处理 Excel 文件,videoIds 为视频 ID 列表 |
| GET | /api/download/{fileId} |
- | 下载处理后的文件 |
{
"fileId": "uuid-string",
"fileName": "processed_file.xlsx",
"success": true,
"message": "处理成功",
"totalCount": 10, // 用户填写的视频 ID 总数
"matchedCount": 8, // 匹配成功的数量
"unmatchedIds": ["999", "888"] // 未匹配的 ID 列表
}配置文件位于 src/main/resources/application.yml:
server:
port: 8080
spring:
servlet:
multipart:
max-file-size: 10MB
max-request-size: 10MB
app:
upload:
temp-dir: ${java.io.tmpdir}/excel-processor
retention-hours: 24excel-processor/
├── src/main/java/com/example/excelprocessor/
│ ├── ExcelProcessorApplication.java # 启动类
│ ├── controller/
│ │ └── FileController.java # REST 控制器
│ ├── service/
│ │ ├── ExcelProcessService.java # 服务接口
│ │ └── ExcelProcessServiceImpl.java # 服务实现
│ ├── model/
│ │ ├── ProcessResult.java # 结果封装(第二版新增匹配统计字段)
│ │ └── VideoIdInput.java # 视频 ID 输入模型(第二版新增)
│ ├── util/
│ │ ├── DataExtractor.java # 数据提取工具
│ │ ├── FileValidator.java # 文件验证器
│ │ ├── VideoIdParser.java # 视频 ID 解析工具(第二版新增)
│ │ └── VideoIdMatcher.java # 视频 ID 匹配工具(第二版新增)
│ ├── exception/
│ │ ├── MissingVideoIdsException.java # 缺少视频 ID 异常(第二版新增)
│ │ └── NoMatchedDataException.java # 无匹配数据异常(第二版新增)
│ └── config/
│ └── GlobalExceptionHandler.java # 全局异常处理
├── src/main/resources/
│ ├── static/
│ │ ├── index.html # 主页面(第二版新增视频 ID 输入区域)
│ │ ├── style.css # 样式文件
│ │ └── app.js # 前端逻辑
│ └── application.yml # 应用配置
├── src/test/java/... # 测试代码
└── pom.xml # Maven 配置
运行所有测试:
mvn testMIT License