huangzd1997
|
d0db577a9c
|
后台店铺数据重复检查独立成菜单:删除店铺导入测试、新增撞款详情卡片区
- 删除「店铺导入测试」菜单及全部实现:admin.html 面板、admin.js 逻辑、
admin_api.py 路由/常量/权限映射、Java 默认菜单
- 「店铺数据记录」页内子 tab 移除,只保留店铺数据列表
- 「店铺管理」下新增「店铺数据重复检查」菜单(V106 导入测试菜单保留并新增
V107 清理 + 幂等插入新菜单,Java 清单同步)
- 新面板:筛选/指标卡/店铺上架分布/矩阵表格/撞款详情卡片区(同 ASIN 跨店
上架明细,查看明细开抽屉,上架时间倒序)
- 重复扫描结果改为 MySQL 缓存 + 每日定时扫描(start_duplicate_scan_scheduler)
- 新增 test_admin_shop_data_duplicate_check.py 单元测试
|
2026-09-04 00:16:14 +08:00 |
|
huangzd1997
|
672b9f9b46
|
后台店铺数据重复ASIN:全选移至表头、Tab总数、独立筛选、按ASIN分组表格展示
Build Backend JAR / build (push) Has been cancelled
- 列表全选复选框从工具栏移到表格表头,事件委托处理动态元素
- 重复ASIN Tab 标题加总数(XX 为重复 ASIN 数量)
- 重复ASIN 筛选独立:ASIN/店铺/国家/上架时间(开始+结束),与原店铺数据筛选互不影响
- 后端支持 asin/shop_name/country/date_from/date_to 参数:
行级筛选命中 ASIN 后展示完整记录(含其他店铺,跨店语义更直观)
- 日期文本归一化(支持 2026年8月19日 上午4:34 中文格式)
- 按 ASIN 分组表格展示:ASIN/店铺数/记录条数/品牌/对应店铺/国家/上架时间/操作,
详情展开显示每条记录的店铺/分组/国家/日期/价格/品牌
- 修复 _shop_data_crawl_fetch_result_bytes 兼容 result_id 列别名(生产首个真实调用报 KeyError)
- 新增单测:筛选语义、日期归一化、record_count
|
2026-09-03 09:32:25 +08:00 |
|
huangzd1997
|
417a2bf831
|
后台店铺数据记录页新增 Tab 切换与重复 ASIN 分析;task-169/170 HTTP 客户端配置接入;dedupe/brand 相关改造
Build Backend JAR / build (push) Has been cancelled
- 管理后台:店铺数据记录改为列表分页展示(去任务号/文件列/累计标题,'最新'改'更新时间'),新增'重复 ASIN' Tab 按跨店聚合展示 ASIN/店铺/分组/国家/日期/价格;修复失败/进行中任务被过滤不显示的问题
- task-169: BrandCheckHttpConfigResolver 从 aiimage.http-client.* 读取品牌检查超时/重试(默认同现状、钳制),附 8 条测试
- task-170: surefire 内存调整为 1536m
- dedupe: DedupeRunService 重构(事务边界/进度)、新增 DedupeRunProgressVo、Controller 与结果 VO 调整,PermissionMenuService 相应适配
- brand/dedupe 前端:BrandDedupeTab/BrandPatrolDeleteTab 改造、新增 CountrySelector 组件与 country-options、类型与接口端对齐、测试更新
- 移除无引用文件:backend/static/logo.jpg、prompts/
|
2026-09-03 01:57:41 +08:00 |
|
huangzd1997
|
152ea6eec0
|
下线店铺管理-检测店铺密码功能:后台 UI 按钮/徽标、Python 代理路由、Java 接口与 service 全套移除,V105 迁移删除 biz_shop_credential_check 表及历史记录
Build Backend JAR / build (push) Has been cancelled
|
2026-09-02 16:55:54 +08:00 |
|
huangzd1997
|
664047dbe0
|
修复店铺数据抓取新店铺归档 daily_file 报 user_id 无默认值
线上现象:店铺数据抓取任务 26401 失败,错误
"Field 'user_id' doesn't have a default value",
INSERT 列清单不含 user_id(MyBatis-Plus 对 null 字段跳过该列)。
根因链:
1. V95(97ae8a7)累计文件改为店铺级共享(去 user 维度),
persistDailyAggregation 新建 daily_file 时删掉了 setUserId;
2. 但 V95 只改了唯一键为 (shop_key, business_date),未把 user_id 列改可空;
3. 表列 user_id 仍为 NOT NULL 无默认值 → 新店铺首次插入必报错;
已有 daily_file 行的店铺走 update 分支不受影响,因此只在
新店铺(如 26401)出现。
修复:
- persistDailyAggregation 新建 daily_file 时补回 setUserId(row.getUserId()),
新店铺也写入正确归属;
- V104 迁移把 user_id 改可空,兼容存量/历史数据(保留兼容,不再使用);
- 新增回归断言(新建累计文件必须写入 user_id),
shopdatacrawl 全包 255 测试全绿,双机已部署验证。
|
2026-09-02 14:23:48 +08:00 |
|
huangzd1997
|
1aea4674e3
|
修复货源查询 404 行被过滤且状态列置空:Python 404 的 ASIN 保留导出并标记「ASIN未找到」
线上现象:货源采集任务 26402(1212.xlsx)结果文件中存在 Python 端
404 Not Found 的行没有图,且状态列空白——这些行实际已完成采集但被后端过滤。
根因链:
1. Python 404 行 title/url/图全空 → isMissingRequired 必填校验拦截 →
markRowsFailed(status=FAILED,error 保留 "404 Not Found");
2. isExportableResultRow 对「其它错误需带 title/url/图」的判断把这类 404 行
过滤掉,即使存在也被 isSilentOutputFailure 把状态列置空。
修复:
- 新增 isAsinNotFound 判定(404 / not found / 商品未找到 等文案,大小写不敏感);
- resolveResultStatus 在图片判定后、rawStatus→失败 映射前插入
「ASIN未找到」状态;isExportableResultRow 对 404 行直接放行;
- writeResultWorkbook 状态列 gate 排除 404 行(不再被置空);
- 新增 2 条单元测试(404/中文文案命中、普通技术失败不误判)。
|
2026-09-02 13:47:58 +08:00 |
|
huangzd1997
|
69eb825d29
|
修复采集数据结果明细 module_type 写读大小写不一致:写入端误用小写 collectdata 导致 task-50 之后所有采集任务明细行生成结果文件时读不到
线上现象:任务 26334 采集完成(去重 42/无效品牌 62/品牌拒绝 6/保留 85)
但结果文件「采集数据结果」sheet 只有表头 0 行,历史卡片「保留 0」。
根因链:
1. CollectDataResultItemBatchWriter(task-50 新增写入端)常量误写为小写
"collectdata",与 CollectDataService.MODULE_TYPE(大写 COLLECT_DATA)不一致;
2. loadFinalRows 按大写查 biz_task_result_item 命中 0 行 → 组装空表 →
stats.finalRowCount 被 rows.size()=0 覆盖,UI 显示保留 0;
3. 生产库 5386 行小写 collectdata(8/31 起约 15 个任务)全部读不到,
大写 COLLECT_DATA 仅存 1067 行历史数据。
修复:
- 写入常量改回大写 COLLECT_DATA(与读取端一致),现有行查询 in(大写,小写)
兼容存量,旧任务重试幂等命中不重复插入;
- loadFinalRows / deleteTask / deleteHistory 查询改 in(MODULE_TYPE, LEGACY_MODULE_TYPE),
历史小写行可读出并正确清理(RustFS 对象不泄漏);
- 新增 2 条回归测试(写入 module_type 必须与读取端常量一致、小写存量行重试命中),
collectdata 全包 168 测试全绿。
|
2026-09-02 13:47:52 +08:00 |
|
huangzd1997
|
162ed7e406
|
task-168: LLM 客户端配置接入(LlmHttpConfigResolver 从 aiimage.http-client.* 读取超时/重试,默认值同现状、钳制、可覆盖)+ 8 条测试
|
2026-09-02 08:16:12 +08:00 |
|
huangzd1997
|
8ca5b1d53b
|
task-167: aiimage.http-client.* 配置命名空间(connect/read/call 超时与重试默认值同现状、非法值钳制、env 覆盖)+ 8 条测试;surefire 加 MaxMetaspaceSize 修复 fork 内存崩溃
|
2026-09-02 08:00:19 +08:00 |
|
huangzd1997
|
f2736729fa
|
task-166: HTTP 客户端契约表盘点(45 项超时/重试配置、198 个调用点扫描器 + 8 条测试 + 报告快照,不改生产代码)
|
2026-09-02 07:43:27 +08:00 |
|
huangzd1997
|
bde9e75eed
|
task-165: 巡检只读契约(巡检器无删除/状态修改/写库方法集合断言、调度只调 inspect*、可重复、报表隔离)+ 8 条测试
|
2026-09-02 07:42:10 +08:00 |
|
huangzd1997
|
34f614ea32
|
task-164: 清理失败不阻断契约(单文件失败其余继续、失败路径可见、不上抛、下轮重试、引用跳过不计失败)+ 8 条测试
|
2026-09-02 07:35:57 +08:00 |
|
huangzd1997
|
7a43ed6c43
|
task-163: 引用中文件不清契约(job/result 引用跳过、引用解除后可清、判定失败保守跳过、批量混合、幂等)+ 8 条测试
|
2026-09-02 07:30:53 +08:00 |
|
huangzd1997
|
0e4d680aef
|
task-162: 路径穿越输入矩阵(../、..\、绝对路径、%2e 编码、全角点、混合分隔符、空字节全部拒绝)+ 9 条测试
|
2026-09-02 07:25:49 +08:00 |
|
huangzd1997
|
035ec9ac79
|
task-161: 巡检任务开关(aiimage.inspection.enabled 默认 disabled、cron 调度、分布式锁双实例去重、单巡检异常隔离、limit 透传)+ 8 条测试
|
2026-09-02 07:19:56 +08:00 |
|
huangzd1997
|
9712bdf538
|
task-160: 超保留期仍被引用巡检(超期+引用检出供人工处理、未超期/未引用不报、只读、可重复)+ 8 条测试
|
2026-09-02 07:14:05 +08:00 |
|
huangzd1997
|
5305d6dbc2
|
task-159: 已完成任务活跃 Job 巡检(终态任务 RUNNING/PENDING Job 检出、运行中任务正常、只读、可重复)+ 8 条测试
|
2026-09-02 07:08:53 +08:00 |
|
huangzd1997
|
9998571770
|
task-158: 结果存在文件缺失巡检(resultFileUrl 对应 OSS 文件缺失检出、空白 URL 不告警、只读、可重复)+ 8 条测试
|
2026-09-02 07:04:06 +08:00 |
|
huangzd1997
|
9144bce33f
|
task-157: 任务存在结果缺失巡检(终态任务无 file_result 检出、运行中忽略、只读、可重复)+ 8 条测试
|
2026-09-02 06:57:50 +08:00 |
|
huangzd1997
|
d773748ae9
|
task-156: 孤立 Job 巡检报表(task/result 缺失孤儿检出、重试耗尽同样报、只读不修改、可重复)+ 8 条测试
|
2026-09-02 06:53:06 +08:00 |
|
huangzd1997
|
d64ef5284a
|
task-155: 孤立文件巡检报表(只读巡检超保留期且无引用文件,报表含路径/大小/时间,绝不删除,可重复)+ 8 条测试
|
2026-09-02 06:47:03 +08:00 |
|
huangzd1997
|
87a6d20f88
|
task-154: 临时目录磁盘容量告警(aiimage.storage.capacity-warn-bytes 阈值、告警含当前容量/阈值、10 分钟频率限制、测量失败容忍不阻塞)+ 8 条测试
|
2026-09-02 06:40:20 +08:00 |
|
huangzd1997
|
57f75b8bc3
|
task-153: fileKey 兜底查找契约(保存即登记、重启后目录枚举重建、缺失明确失败、清理后不可找、语义稳定)+ 8 条测试
|
2026-09-02 06:34:22 +08:00 |
|
huangzd1997
|
3b34ec3bef
|
task-152: 清理失败吞异常记指标(aiimage.temp-cleanup.failed 计数、日志+指标均不阻断主流程、按路径隔离、无重试循环)+ 8 条测试
|
2026-09-02 06:29:59 +08:00 |
|
huangzd1997
|
f0e12b9b1b
|
task-151: 路径安全校验(PathSafetyGuard 规范化 startsWith 判定、../与绝对路径与符号链接逃逸拒绝、接入清理路径)+ 8 条测试
|
2026-09-02 06:24:37 +08:00 |
|
huangzd1997
|
ffc3963345
|
task-150: 清理前引用检查契约(chunk 共享/scope 引用保留、自身行可清、异常保守保留、只读无副作用、批量 IN 反查)+ 8 条测试
|
2026-09-02 06:19:42 +08:00 |
|
huangzd1997
|
dd569edc66
|
task-149: 临时文件时间元数据补缺(TempFileMetadata 创建/修改/访问时间与大小读取,mtime 回退不改变清理语义,IO 错误容忍)+ 8 条测试
|
2026-09-02 06:08:50 +08:00 |
|
huangzd1997
|
383ec544e1
|
task-148: 临时目录配置盘点(16 配置项/322 清理调用点扫描器 + 9 条测试 + 报告快照,不改生产代码)
|
2026-09-02 06:02:14 +08:00 |
|
huangzd1997
|
dc90ead263
|
task-147: downloadUrl 永不过期验证(result/ 走下载域名、无签名参数、bucket 前缀、null/空白安全、输出稳定)+ 8 条测试
|
2026-09-02 06:00:53 +08:00 |
|
huangzd1997
|
eced873779
|
task-146: collectdata 自洽行为契约(后端无 file 字段 VO 快照、前端 success+downloadUrl 判定含空白边界)+ 前后端 13 条测试
|
2026-09-02 05:55:43 +08:00 |
|
huangzd1997
|
0945882458
|
task-145: 前端可下载判定契约(fileReady/downloadUrl/终态 SUCCESS+FAILED 可下载,PENDING/RUNNING/无 resultId 不可下载)+ 8 条测试
|
2026-09-02 05:49:01 +08:00 |
|
huangzd1997
|
6c674f0f1d
|
task-144: 前端 live progress 合并补强(mergeHistoryItemPreservingLiveProgress 纯函数:缺失保留/有效覆盖/可下载不合并/幂等)+ 11 条测试
|
2026-09-02 05:48:09 +08:00 |
|
huangzd1997
|
5e5056b99d
|
task-143: publish 文件级 file 状态语义契约(ready 由 result.success+url 推导、job 字段独立、多文件混合、无结果 null)+ 8 条测试
|
2026-09-02 05:46:42 +08:00 |
|
huangzd1997
|
9e58d28a99
|
task-142: fileReady/fileStatus 语义契约(URL 判定、无 job SUCCESS/null、job 状态与错误映射、空白边界)+ 8 条测试
|
2026-09-02 05:42:32 +08:00 |
|
huangzd1997
|
89d5eda057
|
task-141: similarasin file 进度合成单测(LLM/Python 上传/snapshot 三路径、fileReady 恒 100%、除零与状态边界)+ 8 条测试
|
2026-09-02 05:38:26 +08:00 |
|
huangzd1997
|
b7a403dc22
|
task-140: 13 模块 file 字段契约快照(fileStatus/fileError/fileReady 类型与白名单冻结、旧字段仍在、collectdata 自洽)+ 8 条守门测试
|
2026-09-02 05:32:06 +08:00 |
|
huangzd1997
|
4fb33bda1c
|
task-138: 事务时长性能对比基准(prepare/persist 分段测量、200 分片负载上界、文档基线守门不劣化)+ 8 条基准测试
|
2026-09-02 05:20:54 +08:00 |
|
huangzd1997
|
2493019c27
|
task-137: 重复提交幂等契约(同 id 幂等接受/不重复落库/终态拒绝/并发撞键不覆盖/多次安全)+ 8 条守门测试
|
2026-09-02 05:15:18 +08:00 |
|
huangzd1997
|
58cfcfdf35
|
task-136: 事务外清理异常不阻断契约(响应不受影响/不重试循环/事务已提交/下次可再清理/部分失败继续)+ 8 条守门测试
|
2026-09-02 05:07:33 +08:00 |
|
huangzd1997
|
a982da0262
|
task-135: 任务状态成功时机契约(SUCCESS 必在文件生成上传后、无文件不成功、fileReady/downloadUrl 语义不变)+ 8 条守门测试
|
2026-09-02 05:03:05 +08:00 |
|
huangzd1997
|
c8d14a5b1b
|
task-134: done=true 封口时机契约(分片先落库再强制 finalize、剩余全量行数、result 不重复创建、done=false 只触心跳)+ 8 条守门测试
|
2026-09-02 04:57:56 +08:00 |
|
huangzd1997
|
44fc43912f
|
task-133: 回滚语义硬约束契约(完整回滚/状态不改写/payload 保留/重试安全/计算幂等/双模块一致)+ 8 条守门测试
|
2026-09-02 04:51:16 +08:00 |
|
huangzd1997
|
cf83752338
|
task-132: /result 成功确认时机契约(四模块 200+success=true 必在落库后、失败不成功、重试安全)+ 8 条守门测试
|
2026-09-02 04:44:21 +08:00 |
|
huangzd1997
|
c60ad48be5
|
task-131: collectdata 事务收缩契约固化(/result 锁内单条写无长事务 + 响应 DTO 写后组装)+ 8 条守门测试
|
2026-09-02 04:37:14 +08:00 |
|
huangzd1997
|
29ddf5c780
|
task-130: publish 事务收缩契约固化(prepare 外置/短事务落库/提交后清理已符合 spec 07)+ 8 条守门测试
|
2026-09-02 04:25:14 +08:00 |
|
huangzd1997
|
5e71e1bb3d
|
task-129: shopdatacrawl 事务收缩(/result 无长事务契约固化 + deleteTask 纯计算抽静态纯函数)+ 8 条边界测试
|
2026-09-02 04:15:44 +08:00 |
|
huangzd1997
|
ecc62f095b
|
task-128: appearancepatent 事务收缩(flatten/序列化/存储/哈希纯计算抽 prepareSubmittedChunk 移出事务,双事务路径不变)+ 8 条边界测试
|
2026-09-02 03:54:29 +08:00 |
|
huangzd1997
|
28f61eb70d
|
task-127: similarasin 临时文件清理时机契约固化(提交后清理/回滚不清理/异常吞掉/可重试/幂等)+ 8 条守门测试
|
2026-09-02 03:44:38 +08:00 |
|
huangzd1997
|
ef4ea8d24b
|
task-126: similarasin DTO 组装位置契约固化(审计结论:/result 无响应 DTO、可移出组装已在事务外、落库行组装顺序不变)+ 8 条守门测试
|
2026-09-02 03:39:54 +08:00 |
|
huangzd1997
|
79b3efd365
|
task-125: similarasin /result 纯计算移出事务(payload 哈希在 prepare 阶段预计算,落库直接引用)+ 9 条事务边界守门测试
|
2026-09-02 03:34:15 +08:00 |
|