task-2: 解析载荷改为单一规范行集合,消除 allItems 重复序列化

SimilarAsinParsedPayloadDto.allItems 标记 @JsonInclude(NON_EMPTY) 并仅作反序列化
兼容字段(新写入不再输出);buildParsedPayloadJson 只写 items 一份全量行,
消除每任务双倍行序列化的内存与 payload 体积。读取侧 getAllItems() 消费点保留
以兼容旧载荷(task-3 再统一收敛)。9 个测试覆盖默认/批量/幂等/空/单行/超限/
旧格式吸收/依赖失败恢复。
This commit is contained in:
2026-08-29 14:32:11 +08:00
parent 2039acdfe6
commit 8c84ff3394
4 changed files with 232 additions and 7 deletions
@@ -1,5 +1,6 @@
package com.nanri.aiimage.modules.similarasin.model.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.nanri.aiimage.modules.similarasin.model.vo.SimilarAsinParsedGroupVo;
import com.nanri.aiimage.modules.similarasin.model.vo.SimilarAsinParsedRowVo;
import io.swagger.v3.oas.annotations.media.Schema;
@@ -29,12 +30,14 @@ public class SimilarAsinParsedPayloadDto {
@Schema(description = "Excel 原始表头列表")
private List<String> headers = new ArrayList<>();
@Schema(description = "平铺的全量有效行")
@Schema(description = "平铺的全量有效行(单一规范行集合,写入侧唯一全量行来源)")
private List<SimilarAsinParsedRowVo> items = new ArrayList<>();
@Schema(description = "按主数据块分组后的完整数据,每个 group.items 都是需要 Python 抓取的全量子行")
private List<SimilarAsinParsedGroupVo> groups = new ArrayList<>();
@Schema(description = "全量有效行,用于兼容旧链路与结果文件组装")
/** 兼容字段:仅用于反序列化旧版本 payload(items 为空时兜底),写入侧不再输出。 */
@JsonInclude(JsonInclude.Include.NON_EMPTY)
@Schema(description = "兼容旧链路字段,仅读取旧 payload 时使用;新写入不再输出", hidden = true)
private List<SimilarAsinParsedRowVo> allItems = new ArrayList<>();
}
@@ -5876,7 +5876,6 @@ public class SimilarAsinTaskService {
payload.setHeaders(headers == null ? List.of() : headers);
payload.setItems(allRows == null ? List.of() : new ArrayList<>(allRows));
payload.setGroups(groups == null ? List.of() : groups);
payload.setAllItems(allRows == null ? List.of() : new ArrayList<>(allRows));
return writeJson(payload, "保存解析结果失败");
}