Commit Graph

553 Commits

Author SHA1 Message Date
huangzd1997 ed2900361c progress 48 2026-08-30 14:15:37 +08:00
huangzd1997 d4ebe1926d fix: 品牌检查过滤器多构造器显式 @Autowired,供 Spring bean 解析 2026-08-30 14:12:19 +08:00
huangzd1997 98c45486fa task-48: invalid ASIN 记录改为批量 INSERT IGNORE/upsert,唯一键扩为 (data_value, brand) 2026-08-30 14:11:59 +08:00
huangzd1997 c609ffb279 progress 47 2026-08-30 13:54:03 +08:00
huangzd1997 b92d3e688d task-47: 品牌检查结果任务内短期缓存,避免同品牌重复远程调用 2026-08-30 13:53:38 +08:00
huangzd1997 751f4b89fd progress 46 2026-08-30 13:40:09 +08:00
huangzd1997 0d99baea04 task-46: 跳过空品牌批次的无效远程品牌检查请求
新增 CollectDataBrandBatchFilter 接管品牌检查批次切分与分类:空品牌
批次不发起 checkAll 远程调用(行直接归 rejected),远程抛错整组降级
queryFailed 可恢复。service 委托查询器只做计数与无效 ASIN 落库,语义
与旧 filterByBrandCheck 完全等价。8 个测试覆盖默认/批量/幂等/空输入/
单元素/超限/非法参数/依赖失败,全量回归 720 通过。
2026-08-30 13:40:03 +08:00
huangzd1997 61f8c86b02 progress 45 2026-08-30 13:31:58 +08:00
huangzd1997 7110d1086b task-45: ASIN 去重与无效品牌查询统一为批量集合查询
新增 CollectDataBatchQuery 把 dedupe 表查询与 invalid_asin 表查询
合并为两次批量集合查询,输出与旧两段式语义等价,并返回两类过滤计数
由 service 维护 stats。8 个测试覆盖默认/批量/幂等/空输入/单元素/
超限/非法参数/依赖失败,全量回归 712 通过。
2026-08-30 13:31:52 +08:00
huangzd1997 d23485029d progress 44 2026-08-30 13:20:04 +08:00
huangzd1997 639e8b989e task-44: collectdata extra JSON 批量预序列化与内容去重
persistParsedTask 逐行调用 ObjectMapper 序列化 extra 是热点;新增
CollectDataExtraJsonCodec 批量预序列化,相同 extra 只序列化一次,
输出与逐行语义完全一致,失败行降级 {}。8 个测试覆盖去重/幂等/
空输入/单元素/容量淘汰/非法输入/序列化失败,全量回归 704 通过。
2026-08-30 13:19:15 +08:00
huangzd1997 a0a232f504 progress 43 2026-08-30 13:08:18 +08:00
huangzd1997 173287e3d6 task-43: 采集源文件查找改为确定路径/索引查询
LocalFileStorageService 新增 fileKey→文件名 有界索引(LinkedHashMap LRU,
上限 1024 淘汰最旧):saveTempFile 登记,findLocalSourceFile 优先按索引
直接构造确定路径,索引过期/进程重启时兜底枚举根层目录,结果与索引一致;
key 与索引名均校验单段字符集,防止路径穿越与索引污染。8 个用例覆盖
正常/批量/幂等/空/单元素/索引容量超限/非法输入/清理与重启降级,
mvn 全量测试通过。
2026-08-30 13:08:13 +08:00
huangzd1997 f168e23dde progress 42 2026-08-30 13:04:08 +08:00
huangzd1997 fec89b6b7b task-42: 限制采集解析的文件大小、最大行数和单 chunk 行数
新增 CollectDataParseLimits 组件并在 CollectDataService 解析/回传路径
接入:源文件大小(默认 50MB)、累计解析行数(默认 50000)、单 chunk
回传行数(默认 5000)超限即拒绝,配置经 aiimage.collect-data.* 环境变量
可调、0/负值回退默认。8 个用例覆盖正常/批量/幂等/空/单元素/边界超限/
非法配置/失败后可恢复路径,mvn 全量测试通过。
2026-08-30 13:04:02 +08:00
huangzd1997 3f8326afc4 progress 41 2026-08-30 12:58:31 +08:00
huangzd1997 33d0f02c55 task-41: 建立 Collect Data 性能基线夹具(1k/10k 行、多 chunk、品牌检测)
新增 CollectDataPerfFixture:确定性生成 1k/10k 行、多关键词多 chunk 与
品牌检测场景(成功/失败/查询失败/空 ASIN)行集合并采样 payload 字节与
chunk 划分;同一输入重复生成结果一致(幂等),行数/计数/关键词均有上限
校验。8 个用例覆盖正常/批量/幂等/空/单元素/超限/非法输入/序列化失败
降级路径,mvn 全量 681 测试通过。
2026-08-30 12:58:26 +08:00
huangzd1997 2ce37f0a1a progress 40 2026-08-30 12:53:41 +08:00
huangzd1997 7f44ca6383 task-40: 完成店铺抓取压测探针与资源比较
新增 ShopDataCrawlLoadTestProbe:并发多轮执行"生成-采样-回传-上传-锁"
流水线,产出内存峰值、耗时、DB QPS、对象存储流量与锁等待五类可比较
指标;行数/线程/轮数均有上限,注入 OSS 上传与锁获取失败验证依赖降级
可恢复且计数不残留。8 个用例覆盖正常/批量/幂等/空/单元素/超限/非法
输入/依赖失败路径,mvn 全量 672 测试通过。
2026-08-30 12:53:36 +08:00
huangzd1997 6875abaa1a progress 39 2026-08-30 12:40:15 +08:00
huangzd1997 b806ab9384 task-39: 补充删除/超时/重复回传/累计文件失败的资源清理测试
新增 ShopDataCrawlCleanupTest 11 个用例覆盖:单条/批量/空输入删除路径的
临时文件与累计对象回收、陈旧 RUNNING 任务超时终态化、分片重复回传的
payload 释放与终态拒绝、累计文件 CAS 冲突重试时上传对象回滚。

同时撤销上一提交误引入的按国家覆盖语义:rowsByCountry 恢复同国累积
(addAll),移除与之矛盾的 writeWorkbookLatestMemberWinsPerCountryOthersPreserved
测试,修复 task-22~26 批量合并回归(行数被覆盖削减)。
2026-08-30 12:16:39 +08:00
huangzd1997 6b76333159 task-39: 店铺 Excel 按国家增量更新,未提交国家保留旧数据
Build Backend JAR / build (push) Has been cancelled
rowsByCountry 由同国行累加改为覆盖语义:按成员顺序累积,
后面的结果覆盖前面同名国家的行(最新任务胜出),本次未提交的
国家从旧累计对象/成员累积中保留,不再被清空。

新增回归测试:两个成员快照(英德法 + 仅德国新行)写入 workbook 后,
英国/法国保留旧行、德国被新任务覆盖、未提交国家保持空表。
2026-08-29 23:46:22 +08:00
huangzd1997 9a8fab2ce4 progress 38 2026-08-29 23:12:06 +08:00
huangzd1997 36bed2bdc6 task-38 2026-08-29 23:11:59 +08:00
huangzd1997 a9a72c7bdf progress 37 2026-08-29 22:36:15 +08:00
huangzd1997 95e314cef4 task-37 2026-08-29 22:36:11 +08:00
huangzd1997 6f6d7be344 progress 36 2026-08-29 22:05:36 +08:00
huangzd1997 93ccb27b40 task-36 2026-08-29 22:05:30 +08:00
huangzd1997 f2546fc152 progress 35 2026-08-29 21:28:32 +08:00
huangzd1997 2f89f795f6 task-35 2026-08-29 21:28:28 +08:00
huangzd1997 add8b057d5 progress 34 2026-08-29 20:44:25 +08:00
huangzd1997 11e19ef4f1 task-34: 将 ownerInstanceId 从 JSON 查询迁移到显式列并补充索引 2026-08-29 20:44:21 +08:00
huangzd1997 790267560a progress 33 2026-08-29 20:19:17 +08:00
huangzd1997 0e4a1c1c35 task-33: 将店铺源文件 key 映射改为确定路径,取消临时目录递归扫描 2026-08-29 20:18:57 +08:00
huangzd1997 76d9558851 progress 32 2026-08-29 20:11:20 +08:00
huangzd1997 2cd5e07248 task-32: 将 task entity 本地缓存替换为有容量和过期回收的实现 2026-08-29 20:11:16 +08:00
huangzd1997 5f7457a07b progress 31 2026-08-29 20:04:26 +08:00
huangzd1997 cb4e10c87f task-31: 将任务快照改为轻量进度字段,避免每次写入完整结果 JSON 2026-08-29 20:04:22 +08:00
huangzd1997 76a51ac290 progress 30 2026-08-29 19:52:14 +08:00
huangzd1997 199345fd11 task-30: 为国家结果行建立稳定去重键,替换线性重复扫描 2026-08-29 19:52:08 +08:00
huangzd1997 6e3b43d591 progress 29 2026-08-29 19:36:34 +08:00
huangzd1997 ec28216984 task-29: 合并 scope 状态查询与更新,减少单 chunk 数据库往返
persistResultScope 复用接收前已加载的 scope,不再重复 selectOne ——
每个分片接收的 scope 查询从 2 次降为 1 次;空分片校验前移至任何
scope 查询之前,非法分片零数据库往返。任务级分布式锁保证预读 scope
在锁内不过期。
2026-08-29 19:36:30 +08:00
huangzd1997 24ea02f150 progress 28 2026-08-29 19:26:03 +08:00
huangzd1997 f1db31f813 task-28: 以 scope 计数器替代每个 chunk 的 COUNT(*) 完整统计
分片接收不再对 chunk 表执行 selectCount 全量统计:新插入分片按 scope 计数器 +1
并钳制到 chunk_total,重复提交(唯一键冲突)保持不变;分片行与 scope 计数器
作为一致性单元,状态写入失败时回滚本次插入的分片行与 payload,重试走全新插入,
避免计数器重复计数或永久欠计。任务级分布式锁串行化同一任务的接收,读改写在锁内完成。
2026-08-29 19:25:59 +08:00
huangzd1997 7f49ef596e progress 27 2026-08-29 19:11:17 +08:00
huangzd1997 23eddde770 task-27: chunk 接收改为原子插入/幂等 upsert,去掉先查后插
persistResultChunk 去除提交前的 findResultChunk 预查,直接 store payload + insert,
唯一索引 uk_task_scope_chunk 兜底幂等:重复提交命中 DuplicateKeyException 后
重查 winner 校验并清理本次重存 payload;空分片(无可处理数据)在落库前拒绝,
不创建 RustFS payload 与分片行。
2026-08-29 19:11:10 +08:00
huangzd1997 0092092dbd progress: task-26 done (completed=26) 2026-08-29 18:55:05 +08:00
huangzd1997 8ea4d2f502 task-26: 模板 workbook 大行数下的样式、图片和工作表兼容测试
writeWorkbook(模板路径)改为返回实际写入行数,与 streaming 路径一致;
新增 1000/5000 行规模兼容测试:模板表头样式保留、同 URL 图片按 pictureIndex 去重复用、
5 工作表顺序名称保持模板语义、失败行兜底 URL 文本不中断整表。
全量测试 556 通过。
2026-08-29 18:55:01 +08:00
huangzd1997 6594e1f5d7 progress: task-25 done (completed=25) 2026-08-29 18:46:44 +08:00
huangzd1997 4e4af7911a task-25: 店铺结果 workbook 的 SXSSF 流式写入路径
评估结论:SXSSF 无法访问/删除模板行,与现有模板重写流程不兼容,
故模板路径保留 XSSFWorkbook,另提供 writeWorkbookStreaming —— 空构造
SXSSFWorkbook + 自建 5 国工作表与表头,行数据按 rowAccessWindow spill 到磁盘,
写入后 dispose() 释放 spill 文件;图片嵌入复用现有链路,失败行兜底 URL 文本。
全量测试 548 通过。
2026-08-29 18:46:40 +08:00