huangzd1997
|
9b8423bb9b
|
task-147(Java 菜单树与 Flyway): Task147Test 8 用例 RED→GREEN。
|
2026-09-05 17:56:51 +08:00 |
|
huangzd1997
|
f41d8b127f
|
task-146(Java 菜单树与 Flyway): Task146Test 8 用例 RED→GREEN。
|
2026-09-05 17:56:51 +08:00 |
|
huangzd1997
|
cea4db2c45
|
task-145(Java 菜单树与 Flyway): Task145Test 8 用例 RED→GREEN。
|
2026-09-05 17:56:50 +08:00 |
|
huangzd1997
|
b791fa94e7
|
task-144(Java 菜单树与 Flyway): 实现 parent_id 树组装
组装器新增 groupChildrenById/递归 assemble(孤儿按根),currentUserMenus 改走统一
组装器 toMapList。
TDD: Task144Test 8 用例 RED→GREEN。
|
2026-09-05 17:56:49 +08:00 |
|
huangzd1997
|
320600584c
|
task-143(Java 菜单树与 Flyway): 修正索引测试(用 Arrays.asList 允许 null 元素) 补 GREEN。
|
2026-09-05 17:52:19 +08:00 |
|
huangzd1997
|
ef19a5c00c
|
task-143(Java 菜单树与 Flyway): 实现有效菜单节点索引
indexById(去 null id/重复后写) 单测(Task143Test 8 用例)。
TDD: RED→GREEN。
|
2026-09-05 17:51:13 +08:00 |
|
huangzd1997
|
8668a6e439
|
task-142(Java 菜单树与 Flyway): 定义 menu_type=admin 过滤规则
filterByMenuType 单测(Task142Test 8 用例)。
TDD: RED→GREEN。
|
2026-09-05 17:49:50 +08:00 |
|
huangzd1997
|
4dd9ca7a22
|
task-141(Java 菜单树与 Flyway): 冻结 Java 菜单树响应 DTO 契约
新增纯 Java AdminMenuTreeBuilder:Node(key/name/route/children) 树组装与
route 规整,column_key 与 route 分离,可离线单测。
TDD: Task141Test 8 用例先 RED 后 GREEN。
|
2026-09-05 17:49:44 +08:00 |
|
huangzd1997
|
40224d8e56
|
fix(backend-java): 收口并发资源与恢复链路
|
2026-09-05 14:44:00 +08:00 |
|
huangzd1997
|
01e8c608e7
|
task-212(部分): 04 Handler SPI 实现迁回各业务模块(依赖反转大头)——13 个 *ResultFileJobHandler 从 modules/task/service 迁到各自模块 service
- TaskFileJobConfig 与相关测试 import 同步到新模块包;MappingSnapshot 源码路径按模块映射
- task 模块对业务 import 由 16+ 文件降到 3(TaskHeartbeatService/TaskResultFileJobWorker/ModuleHistoryCleanupService 尚需心跳/worker/清理 SPI 化)
- 全量回归 2308 测试 0 失败
|
2026-09-05 10:11:53 +08:00 |
|
huangzd1997
|
d4b4e1e165
|
task-219(env-gated 全链路): similarasin 最小链路 done=true→assemble→上传结果文件回放测试(种子含 items+groups→按同名 group 回填→轮询至 SUCCESS→result_file_url 非空 .xlsx)+ 本地真跑通过
本地 MinIO 已建桶;关键点:解析载荷须含 groups 且 python 按同名 group 回填。CI 实跑依赖 Gitea runner(远程),本地以 mvn/node 等价命令 + env-gated 全绿覆盖
|
2026-09-05 09:50:53 +08:00 |
|
huangzd1997
|
fe3b8624bf
|
chore(similarasin): LlmGatewayTlsProbe 探针模型字面量同步为 glm-5.3-flash
|
2026-09-05 09:48:27 +08:00 |
|
huangzd1997
|
736760aa31
|
fix(perf test): 移除墙钟 light<batch 断言(纯内存 mock 下 0ms 抖动偶发红;类注释本就声明不做毫秒比较、用确定性查询次数口径)
|
2026-09-05 09:31:13 +08:00 |
|
huangzd1997
|
8cbc86f6fa
|
task-214: progress/batch 轻量响应契约回放(env-gated,真实服务:造 SIMILAR_ASIN RUNNING → batch items/missingTaskIds + task 轻量字段(id/taskNo/status) + 文件 items;light items/missingTaskIds)+ 已本地真跑
|
2026-09-05 09:25:54 +08:00 |
|
huangzd1997
|
6bd3e76048
|
task-218(离线可收部分): 结果文件格式契约(真实 AppearancePatentSheetBuilder 纯调用:Sheet 名/主表列序(含标题/图片链接/sku)/原因表列/空行产出)+ 8 测试
文件名 <stem>-result.xlsx 与 ZIP 结构由运行时组装/上传环节生成,依赖真实流水线(3+2 约定 env-gated 另行验证)
|
2026-09-05 09:23:21 +08:00 |
|
huangzd1997
|
c282327a0b
|
task-207(服务层): done=true 终态决策纯语义(SimilarAsinSubmitResultSemantics:done/error→终态回调、chunkIndex/Total 缺省归一)接线回 submit + 8 单测
按 3+2 约定:文件生成/终态落库依赖真实 LLM 流水线,留待真实运行时经 env-gated 回放(CONTRACT_* 已就绪)
|
2026-09-05 09:10:51 +08:00 |
|
huangzd1997
|
dacdab7adb
|
task-206: heartbeat 旧字段契约回放(env-gated,真实服务:RUNNING→alive:true、非运行→alive:false、未知任务 alive:false+message、旧/多余字段容忍)+ 已本地真跑
|
2026-09-05 09:01:55 +08:00 |
|
huangzd1997
|
f0f9ba29f0
|
task-205: parsed-payload 契约回放(env-gated,真实服务:造 SIMILAR_ASIN 任务+内联载荷 → success/顶层字段 items/allItems/groups/headers/脱敏 apiKey/行数据;未知任务 success:false)+ 已本地真跑
|
2026-09-05 09:00:50 +08:00 |
|
huangzd1997
|
0b83c9a3c1
|
task-204: /items 分页语义契约回放(env-gated,真实服务:造 COLLECT_DATA 任务+5 行 item → page/pageSize/count/total/totalPages/items、越界空页、缺省 50、rowIndex 升序)+ 已本地真跑
|
2026-09-05 08:59:52 +08:00 |
|
huangzd1997
|
db0c1c1fdc
|
task-203: /result 幂等契约回放测试(env-gated,真实服务:造 SIMILAR_ASIN RUNNING 任务+内联解析载荷 → parsed-payload 成功 → 同 submissionId/chunk 提交两次均 success:true 且 biz_task_chunk 只落 1 行)
- CI 默认跳过(需 CONTRACT_BASE_URL+CONTRACT_DB_*),设了即在本地/任意副本库跑
- 覆盖 success/idempotent/single-persist(chunk)/chunk 字段/未知任务(live 已验);done=true 封口需真实 LLM 流水线,不在本回放内(见限制说明)
- 本地已用 18080 实例 + schema 副本真跑通过
|
2026-09-05 08:56:41 +08:00 |
|
huangzd1997
|
d3b499b596
|
feat(admin): 店铺重复检查导出「站点」列改「国家」中文显示;撞款抽屉按点击处定位
- 导出 CSV 列头 站点→国家,值映射中文(DE德国/UK英国/FR法国/IT意大利/ES西班牙,未知回退原值)
- 撞款详情抽屉以触发元素为垂直锚点并钳制在视口内,不再贴区块/页面顶部导致看不见需上滑
- 同步 Java 静态托管副本;更新 Java/Python 相关断言
|
2026-09-05 01:53:12 +08:00 |
|
huangzd1997
|
1b27a3f1ca
|
task-200: 巡检报表任务落地(InspectionSqlReportTask 跑 6 张只读报表 SQL:默认 disabled、分布式锁、单条失败不阻断、只 query)+ 8 条测试
|
2026-09-05 00:08:44 +08:00 |
|
huangzd1997
|
05bda8915a
|
feat(admin): 店铺数据重复检查撞款抽屉样式优化与导入测试按钮
Build Backend JAR / build (push) Has been cancelled
- 撞款详情抽屉:上架时间默认降序(晚到早)、去掉列头(按时间升序)小括号、加宽至 760px、
去掉全屏遮罩(底层仍可点击)、抽屉贴到「撞款详情」区块位置而非浏览器顶部
- 修复抽屉 fixed 定位失效:.tab-panel.active 入场动画带 transform 会成为包含块,
打开时把 drawer mask 挂到 body 下恢复视口定位
- 新增导入(新增-测试)/ 导入(删除-测试)按钮与上传弹窗,对应后端端点
/api/admin/shop-data-crawl/duplicate-check-import(ADD=按店名替换基线记录、DELETE=移除该店记录)
- 新增 ShopDataDuplicateCheckImportService 导入服务(复用 WorkbookParser/Aggregator,与扫描共用 Redis 锁)
- 新增 3 个单测:导入替换重聚合、删除移除、无基线报错
- _preview_mock.py 加入 .gitignore(本地预览工具不入库)
|
2026-09-04 12:25:31 +08:00 |
|
huangzd1997
|
8241cd704e
|
feat(admin): A1 管理后台收敛 Java 单后台完整实现并修复 guard 误拦内部令牌
Build Backend JAR / build (push) Has been cancelled
- Java 补齐后台全部迁移差集:shopduplicatecheck 店铺数据重复检查模块(V108 扫描表+查询/扫描服务)、
PinyinAbbrUtil 拼音缩写、ImageHistory 接口调整为内部可用、AdminUser 支持内部令牌操作并放宽列表上限
- Flask 后台 admin_api.py 路由收敛转发 Java、admin.html/admin.js 适配新后台形态
- AdminApiGuardFilter 对可信 X-Internal-Token 放行(controller 自校验兜底),修复客户端仅凭
内部令牌调用 /api/admin/shop-manages/credential 被误拦 401
- 测试:AdminApiGuardFilterTest 补可信/假令牌用例;AdminUserServiceTest 补菜单权限 mock;
shopduplicatecheck 新增查询/聚合/CSV 单测
|
2026-09-04 11:30:09 +08:00 |
|
huangzd1997
|
92a7a2c478
|
权限回收级联清理:管理员被回收权限后自动清理其直建员工的越权授权
- 保存管理员权限时,若其权限被回收,级联删除其直接创建的员工中超出
该管理员当前有效范围的授权(创建时快照遗留的越权项)
- 只清理越权项,保留员工合法持有的其他授权;超级管理员不受此限制
|
2026-09-04 00:16:18 +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
|
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
|
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
|
5e5056b99d
|
task-143: publish 文件级 file 状态语义契约(ready 由 result.success+url 推导、job 字段独立、多文件混合、无结果 null)+ 8 条测试
|
2026-09-02 05:46:42 +08:00 |
|