Files
crawler-plugin/docs/plans/02-shopdatacrawl.md
T
huangzd1997 42bbf4904e
Build Backend JAR / build (push) Has been cancelled
feat-admin-ui-interaction
2026-08-30 22:09:22 +08:00

702 lines
65 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 02 店铺数据抓取性能与累计文件优化
> 对应总览任务:21-40
> 计划来源:`docs/plans/00-plan-overview.md`;仓库当前没有 `docs/specs/`,本模块计划根据现有代码审计结果生成。
## 模块目标
降低店铺抓取 chunk 回传、图片嵌入和每日累计文件更新的峰值内存、锁等待、全量重写和对象存储流量,同时保持现有店铺/国家结果语义。
## 模块级执行规则
- 开发阶段单线程串行执行,不并行实现多个任务;完成一个任务的测试、实现、验证和 commit 后才能进入下一个任务。
- 每个任务严格按“先写全部测试 → 运行确认 RED → 实现 → 运行确认 GREEN → lint/format → commit”执行。
- 每个普通任务至少包含 8 个语义化测试;涉及 I/O、数据库、HTTP、Redis、RustFS、文件或 UI 时,测试必须同时覆盖 mock 依赖和真实集成/启动调用。
- 禁止纯 echo、硬编码成功、空实现、跳过真实依赖调用或仅以 import 成功作为验收。
## 任务 21:建立店铺抓取性能基线:单店铺 1k/5k 行、多国家、图片成功/失败场景
**所属模块**:店铺数据抓取性能与累计文件优化
**依赖**:无
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“建立店铺抓取性能基线:单店铺 1k/5k 行、多国家、图片成功/失败场景”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。
### 测试用例(必须先写,确认 RED)
1. `test_task_021_image_normal_default_path` — 使用正常输入验证“建立店铺抓取性能基线:单店铺 1k/5k 行、多国家、图片成功/失败场景”的默认成功路径和主输出。
2. `test_task_021_image_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_021_image_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_021_image_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_021_image_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_021_image_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_021_image_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_021_image_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 22:将店铺 Excel 图片缓存替换为有界字节缓存
**所属模块**:店铺数据抓取性能与累计文件优化
**依赖**21
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“将店铺 Excel 图片缓存替换为有界字节缓存”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。
### 测试用例(必须先写,确认 RED)
1. `test_task_022_image_cache_excel_normal_default_path` — 使用正常输入验证“将店铺 Excel 图片缓存替换为有界字节缓存”的默认成功路径和主输出。
2. `test_task_022_image_cache_excel_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_022_image_cache_excel_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_022_image_cache_excel_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_022_image_cache_excel_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_022_image_cache_excel_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_022_image_cache_excel_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_022_image_cache_excel_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 23:图片嵌入成功后立即释放外部缩略图字节副本
**所属模块**:店铺数据抓取性能与累计文件优化
**依赖**22
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“图片嵌入成功后立即释放外部缩略图字节副本”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。
### 测试用例(必须先写,确认 RED)
1. `test_task_023_image_normal_default_path` — 使用正常输入验证“图片嵌入成功后立即释放外部缩略图字节副本”的默认成功路径和主输出。
2. `test_task_023_image_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_023_image_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_023_image_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_023_image_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_023_image_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_023_image_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_023_image_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 24:为店铺图片预取增加任务级数量、字节和超时上限
**所属模块**:店铺数据抓取性能与累计文件优化
**依赖**23
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“为店铺图片预取增加任务级数量、字节和超时上限”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。
### 测试用例(必须先写,确认 RED)
1. `test_task_024_image_prefetch_normal_default_path` — 使用正常输入验证“为店铺图片预取增加任务级数量、字节和超时上限”的默认成功路径和主输出。
2. `test_task_024_image_prefetch_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_024_image_prefetch_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_024_image_prefetch_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_024_image_prefetch_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_024_image_prefetch_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_024_image_prefetch_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_024_image_prefetch_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 25:评估并实现店铺结果 workbook 的 SXSSF 或 spool 化写入路径
**所属模块**:店铺数据抓取性能与累计文件优化
**依赖**24
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“评估并实现店铺结果 workbook 的 SXSSF 或 spool 化写入路径”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。
### 测试用例(必须先写,确认 RED)
1. `test_task_025_workbook_normal_default_path` — 使用正常输入验证“评估并实现店铺结果 workbook 的 SXSSF 或 spool 化写入路径”的默认成功路径和主输出。
2. `test_task_025_workbook_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_025_workbook_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_025_workbook_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_025_workbook_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_025_workbook_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_025_workbook_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_025_workbook_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 26:为模板 workbook 增加大行数下的样式、图片和工作表兼容测试
**所属模块**:店铺数据抓取性能与累计文件优化
**依赖**25
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“为模板 workbook 增加大行数下的样式、图片和工作表兼容测试”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。
### 测试用例(必须先写,确认 RED)
1. `test_task_026_row_count_image_workbook_normal_default_path` — 使用正常输入验证“为模板 workbook 增加大行数下的样式、图片和工作表兼容测试”的默认成功路径和主输出。
2. `test_task_026_row_count_image_workbook_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_026_row_count_image_workbook_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_026_row_count_image_workbook_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_026_row_count_image_workbook_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_026_row_count_image_workbook_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_026_row_count_image_workbook_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_026_row_count_image_workbook_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 27:将 chunk 接收改为原子插入/幂等 upsert,减少先查后插
**所属模块**:店铺数据抓取性能与累计文件优化
**依赖**26
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“将 chunk 接收改为原子插入/幂等 upsert,减少先查后插”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。
### 测试用例(必须先写,确认 RED)
1. `test_task_027_chunk_normal_default_path` — 使用正常输入验证“将 chunk 接收改为原子插入/幂等 upsert,减少先查后插”的默认成功路径和主输出。
2. `test_task_027_chunk_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_027_chunk_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_027_chunk_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_027_chunk_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_027_chunk_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_027_chunk_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_027_chunk_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 28:以 scope 计数器替代每个 chunk 的 COUNT(*) 完整统计
**所属模块**:店铺数据抓取性能与累计文件优化
**依赖**27
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“以 scope 计数器替代每个 chunk 的 COUNT(*) 完整统计”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。
### 测试用例(必须先写,确认 RED)
1. `test_task_028_chunk_normal_default_path` — 使用正常输入验证“以 scope 计数器替代每个 chunk 的 COUNT(*) 完整统计”的默认成功路径和主输出。
2. `test_task_028_chunk_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_028_chunk_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_028_chunk_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_028_chunk_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_028_chunk_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_028_chunk_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_028_chunk_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 29:合并 scope 状态查询与更新,减少单 chunk 数据库往返
**所属模块**:店铺数据抓取性能与累计文件优化
**依赖**28
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“合并 scope 状态查询与更新,减少单 chunk 数据库往返”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。
### 测试用例(必须先写,确认 RED)
1. `test_task_029_chunk_merge_normal_default_path` — 使用正常输入验证“合并 scope 状态查询与更新,减少单 chunk 数据库往返”的默认成功路径和主输出。
2. `test_task_029_chunk_merge_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_029_chunk_merge_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_029_chunk_merge_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_029_chunk_merge_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_029_chunk_merge_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_029_chunk_merge_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_029_chunk_merge_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 30:为国家结果行建立稳定去重键,替换线性重复扫描
**所属模块**:店铺数据抓取性能与累计文件优化
**依赖**29
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“为国家结果行建立稳定去重键,替换线性重复扫描”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。
### 测试用例(必须先写,确认 RED)
1. `test_task_030_task_normal_default_path` — 使用正常输入验证“为国家结果行建立稳定去重键,替换线性重复扫描”的默认成功路径和主输出。
2. `test_task_030_task_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_030_task_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_030_task_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_030_task_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_030_task_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_030_task_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_030_task_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 31:将任务快照改为轻量进度字段,避免每次写入完整结果 JSON
**所属模块**:店铺数据抓取性能与累计文件优化
**依赖**30
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“将任务快照改为轻量进度字段,避免每次写入完整结果 JSON”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。
### 测试用例(必须先写,确认 RED)
1. `test_task_031_snapshot_progress_normal_default_path` — 使用正常输入验证“将任务快照改为轻量进度字段,避免每次写入完整结果 JSON”的默认成功路径和主输出。
2. `test_task_031_snapshot_progress_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_031_snapshot_progress_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_031_snapshot_progress_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_031_snapshot_progress_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_031_snapshot_progress_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_031_snapshot_progress_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_031_snapshot_progress_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 32:将 task entity 本地缓存替换为有容量和过期回收的实现
**所属模块**:店铺数据抓取性能与累计文件优化
**依赖**31
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“将 task entity 本地缓存替换为有容量和过期回收的实现”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。
### 测试用例(必须先写,确认 RED)
1. `test_task_032_cache_normal_default_path` — 使用正常输入验证“将 task entity 本地缓存替换为有容量和过期回收的实现”的默认成功路径和主输出。
2. `test_task_032_cache_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_032_cache_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_032_cache_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_032_cache_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_032_cache_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_032_cache_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_032_cache_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 33:将店铺源文件 key 映射改为确定路径,取消临时目录递归扫描
**所属模块**:店铺数据抓取性能与累计文件优化
**依赖**32
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“将店铺源文件 key 映射改为确定路径,取消临时目录递归扫描”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。
### 测试用例(必须先写,确认 RED)
1. `test_task_033_task_normal_default_path` — 使用正常输入验证“将店铺源文件 key 映射改为确定路径,取消临时目录递归扫描”的默认成功路径和主输出。
2. `test_task_033_task_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_033_task_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_033_task_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_033_task_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_033_task_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_033_task_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_033_task_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 34:将 ownerInstanceId 从 JSON 查询迁移到显式列并补充索引
**所属模块**:店铺数据抓取性能与累计文件优化
**依赖**33
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“将 ownerInstanceId 从 JSON 查询迁移到显式列并补充索引”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。
### 测试用例(必须先写,确认 RED)
1. `test_task_034_owner_normal_default_path` — 使用正常输入验证“将 ownerInstanceId 从 JSON 查询迁移到显式列并补充索引”的默认成功路径和主输出。
2. `test_task_034_owner_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_034_owner_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_034_owner_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_034_owner_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_034_owner_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_034_owner_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_034_owner_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 35:将每日累计文件改为数据层增量模型,避免每次下载并重写完整 XLSX
**所属模块**:店铺数据抓取性能与累计文件优化
**依赖**34
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“将每日累计文件改为数据层增量模型,避免每次下载并重写完整 XLSX”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。
### 测试用例(必须先写,确认 RED)
1. `test_task_035_daily_file_normal_default_path` — 使用正常输入验证“将每日累计文件改为数据层增量模型,避免每次下载并重写完整 XLSX”的默认成功路径和主输出。
2. `test_task_035_daily_file_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_035_daily_file_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_035_daily_file_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_035_daily_file_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_035_daily_file_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_035_daily_file_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_035_daily_file_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 36:为每日累计文件引入版本号/CAS,缩短店铺级锁的持有时间
**所属模块**:店铺数据抓取性能与累计文件优化
**依赖**35
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“为每日累计文件引入版本号/CAS,缩短店铺级锁的持有时间”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。
### 测试用例(必须先写,确认 RED)
1. `test_task_036_daily_file_lock_normal_default_path` — 使用正常输入验证“为每日累计文件引入版本号/CAS,缩短店铺级锁的持有时间”的默认成功路径和主输出。
2. `test_task_036_daily_file_lock_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_036_daily_file_lock_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_036_daily_file_lock_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_036_daily_file_lock_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_036_daily_file_lock_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_036_daily_file_lock_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_036_daily_file_lock_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 37:拆分每日累计文件组装与任务结果接收,增加异步文件作业状态
**所属模块**:店铺数据抓取性能与累计文件优化
**依赖**36
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“拆分每日累计文件组装与任务结果接收,增加异步文件作业状态”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。
### 测试用例(必须先写,确认 RED)
1. `test_task_037_daily_file_job_normal_default_path` — 使用正常输入验证“拆分每日累计文件组装与任务结果接收,增加异步文件作业状态”的默认成功路径和主输出。
2. `test_task_037_daily_file_job_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_037_daily_file_job_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_037_daily_file_job_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_037_daily_file_job_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_037_daily_file_job_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_037_daily_file_job_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_037_daily_file_job_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 38:历史列表与进度查询增加分页、字段裁剪和批量任务加载
**所属模块**:店铺数据抓取性能与累计文件优化
**依赖**37
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“历史列表与进度查询增加分页、字段裁剪和批量任务加载”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。
### 测试用例(必须先写,确认 RED)
1. `test_task_038_progress_normal_default_path` — 使用正常输入验证“历史列表与进度查询增加分页、字段裁剪和批量任务加载”的默认成功路径和主输出。
2. `test_task_038_progress_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_038_progress_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_038_progress_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_038_progress_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_038_progress_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_038_progress_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_038_progress_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 39:补充删除、超时、重复回传和累计文件失败的资源清理测试
**所属模块**:店铺数据抓取性能与累计文件优化
**依赖**38
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“补充删除、超时、重复回传和累计文件失败的资源清理测试”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。
### 测试用例(必须先写,确认 RED)
1. `test_task_039_daily_file_cleanup_normal_default_path` — 使用正常输入验证“补充删除、超时、重复回传和累计文件失败的资源清理测试”的默认成功路径和主输出。
2. `test_task_039_daily_file_cleanup_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_039_daily_file_cleanup_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_039_daily_file_cleanup_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_039_daily_file_cleanup_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_039_daily_file_cleanup_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_039_daily_file_cleanup_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_039_daily_file_cleanup_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 任务 40:完成店铺抓取压测并比较内存、CPU、DB QPS、对象存储流量和锁等待
**所属模块**:店铺数据抓取性能与累计文件优化
**依赖**39
**预估耗时**:8-15 分钟(写测试 + 实现 + 自测)
### 功能点要求
- 围绕“完成店铺抓取压测并比较内存、CPU、DB QPS、对象存储流量和锁等待”实现一个独立、可验证的功能点,不扩大到同模块其他未完成任务。
- 输入、输出、异常和资源上限必须明确;空输入、单元素、最大允许值和超限值必须有确定行为。
- 成功路径必须保留现有业务语义、幂等性和兼容字段;失败路径必须释放临时文件、连接、锁、线程任务和未引用对象。
- 实现范围限定在 backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。
### 测试用例(必须先写,确认 RED)
1. `test_task_040_lock_object_storage_normal_default_path` — 使用正常输入验证“完成店铺抓取压测并比较内存、CPU、DB QPS、对象存储流量和锁等待”的默认成功路径和主输出。
2. `test_task_040_lock_object_storage_normal_multiple_items` — 使用多个任务、行、chunk 或页面状态验证批量场景下结果不丢失且顺序稳定。
3. `test_task_040_lock_object_storage_normal_repeated_operation_is_idempotent` — 重复执行同一输入,验证不会产生重复记录、重复对象、重复请求或重复 UI 状态。
4. `test_task_040_lock_object_storage_boundary_empty_input` — 空集合、空字符串或无可处理数据时验证返回空结果/安全跳过,不创建无效资源。
5. `test_task_040_lock_object_storage_boundary_single_item` — 单任务、单行、单图片或单页面状态时验证不依赖批量路径且结果正确。
6. `test_task_040_lock_object_storage_boundary_limit_and_overflow` — 达到最大配置值以及超过最大值时验证限流、拒绝或降级行为,不发生无界内存增长。
7. `test_task_040_lock_object_storage_invalid_input_rejected` — 非法参数、缺少必填字段或格式错误时验证抛出项目约定异常及可识别错误消息。
8. `test_task_040_lock_object_storage_dependency_failure_releases_resources` — mock 数据库/Redis/RustFS/HTTP/文件依赖失败后验证错误可恢复,临时资源、锁和队列任务均释放。
### TDD 流程
1. 先写上述全部测试,运行项目测试命令,确认该功能测试 **RED**;如果测试一开始通过,必须先检查测试是否真正覆盖待实现行为。
2. 实现功能,运行该任务定向测试和相关模块测试,确认 **GREEN**
3. 执行 lint/format、编译或前端构建检查,确保没有新增错误。
4. 完成资源释放、异常路径和兼容性验证后创建该任务对应 commit。
### 验证方法
- `mvn -q test` 通过;涉及模块时补充定向测试命令。
- 涉及 I/O、外部服务或数据库时,必须再执行 mock 测试和真实集成/启动调用,并记录资源释放结果。
- 重点观察:backend-java 的 shopdatacrawl 服务、每日累计文件、店铺图片嵌入、任务快照和 owner 路由。中的功能结果正确,且 CPU、堆内存、GC、数据库/对象存储调用次数和临时磁盘占用没有超过任务设定上限。
## 模块完成 Gate
- 20 个任务全部有对应 commit,任务状态均更新为 `done` 前不得开始下一个模块。
- 运行模块定向测试、项目全量测试和 lint/format;真实依赖调用、异常降级和资源释放均有记录。
- 运行模块对应的性能基准,记录吞吐、P95/P99 延迟、峰值堆、GC、CPU、DB QPS、Redis/RustFS QPS 和临时磁盘。