Commit Graph

220 Commits

Author SHA1 Message Date
huangzd1997 d9e3f34d37 chore: 移除项目内无用代码(28 文件)
- 清理任务面板/SPA 化改造遗留的未使用变量与函数(模板管理配套 6 函数、
  payloadForDisplay/showTip/hasRunning/schedulePoll/removeMatchedRowLocally 等 30+ 处)
- 清理未使用 import(getBrandTemplateXlsxUrl/uploadTempFileToJava/getProductRiskTasksBatch 等)
- useTaskProgressLoop 改为仅类型导入;progress/task-request 缓存未用参数精简
- DeleteBrandRunService 删除永不执行的 taskItems 死分支
- 全量 vue-tsc(含 --noUnusedLocals/--noUnusedParameters)0 错误;648 测试全过
2026-09-08 10:20:30 +08:00
huangzd1997 e248b6e43a feat(web): 前端 SPA 化 + 工具页任务面板统一与历史批量删除
- SPA 化:22 个 MPA html 入口与 *-main.ts 合并为 index.html + vue-router(URL 无 .html 后缀),
  页面跳转全部 router-link,/new_web_source/xxx.html 旧路径归一为 /xxx
- 任务面板统一:共享 TaskCenterPanel/TaskItemCard/TaskStatCards/HistoryTaskLayer,
  16 个工具页右侧统一为统计卡 + 当前任务 + 历史任务弹层(任务ID/开始/结束/状态必展示)
- 历史记录支持单条删除 + 批量勾选删除(确认框/全选/失败提示)
- Java 7 模块(dedupe/convert/split/productrisk/shopmatch/pricetrack/deletebrand)
  history 接口补齐任务时间字段(VO+Service,复用 biz_file_task 列)
- 图片工作台/API 层(brand/permission/user)既有未提交改动一并提交
2026-09-08 10:02:55 +08:00
huangzd1997 c086d402a7 feat(web): 品牌检测/图片生成服务端化——URL 统一 https+域名,入口文件带 hash 防长缓存失效
- brand/image 本地执行 API 服务端化(主机A shufu-web-api:15126,nginx 转发 /api/brand/* 等)
- 前端撤销本地回连逻辑(local-http 删除,http.ts/brand.ts 还原为域名相对路径)
- 版本更新改桌面桥 do_update_app(原 Flask /api/update/do 桥化,Web 无更新入口)
- 品牌检测页 Web 可用(hasBridge 恢复 blanket 判定:文件选择走浏览器降级、任务/SSE 走域名)
- vite 入口文件带内容 hash(/assets 配了 immutable 长缓存,无 hash 入口导致更新永不生效)
- public/logo.jpg:Web 版 /logo.jpg 素材(原 app_client/logo.jpg 随桌面瘦身移除)
2026-09-07 17:11:33 +08:00
huangzd1997 30b8c910e8 feat(web): 桌面端前端 Web 独立部署适配——浏览器降级桥+登录态引导+页面动态修正
- 新增 web-fallback.ts:无 pywebview 时以浏览器能力降级(文件选择/上传/模板下载/配置),
  其余桌面能力(enqueue_json/vc_*/folder 选择等)保持 undefined 交由页面既有请在本地客户端中打开提示
- 新增 ensure-auth.ts:无 uid 时经 /newApi/check_login 恢复登录态,无 token/失效跳登录页;
  21 个入口 main.ts 挂载前先引导(桌面端已注入 uid 时零开销)
- pywebview.ts:getPywebviewApi() 在纯浏览器环境返回降级桥;新增 isDesktopRuntime 标志
  (首页更新面板/退出链接据此区分桌面与 Web);hasPywebview 语义修正为真实桥判定
- 登录页跳转、首页登出链接、品牌检测页 hasBridge 判定(select_brand_folder 存在性)适配 Web
2026-09-07 16:35:19 +08:00
huangzd1997 e6cf4c2461 fix: 停用登录设备绑定(注释 machine 写入/重绑与 check_login 不一致拒绝)便于多设备/联调;Vue 首页背景图改 /bg.jpg 并补 public 资源、首页/登录布局居中修复 2026-09-07 11:19:42 +08:00
huangzd1997 d2301db292 feat(frontend-vue): 亚马逊运营工具台与新功能页接入——新版工具台(amazon-console+tool-catalog)、品牌检测/ASIN变体采集/查询ASIN 三个工具页 Vue 化并对接既有后端与桌面桥接;桌面首页/登录页 Vue 化(沿用旧视觉);补充 vc_*/get_device_id/save_file_from_url 桥类型、dev 代理;品牌默认勾选排名+FBM;修正 query-asin 标题
含未提交新版改造累积:Brand*Tab 套入工具台壳(AmazonToolPageShell/AmazonTopBar)与目录/权限联动。
2026-09-07 11:06:05 +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 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 fa5a59e5cd task-116: 后台管理新增/导入表单弹窗化 + 分组管理独立菜单与UI优化 + 轻量进度端点
Build Backend JAR / build (push) Has been cancelled
- 后台管理页(admin)所有面板的新增/导入表单改为弹窗操作,原有字段 ID 全部保留、提交逻辑不变;导入删除入口不再触发二次确认拦截
- 分组管理升级为独立菜单(V102 + schema initializer),移除 5 个面板内的管理分组按钮;分组列表改为蓝白主题、增加权限分组横幅
- Python 侧 group-manage 权限守卫(_ensure_backend_menu_access 补充 group-manage)
- 引入 V101(biz_task_file_job 复合索引)+ 新增 TaskProgressLight/TaskFileJob 轻量端点与进度聚合作
- 前端 progress-light / page-separated-loads / dispatch-guard 共享模块及单元测试
2026-09-01 12:54:13 +08:00
huangzd1997 759f0b15d8 task-101: 上传/解析/入队三道前端拦截,阻止坏数据卡死 Python 自动化
Build Backend JAR / build (push) Has been cancelled
新增 shared/dispatch-guard.ts(纯 TS 校验,可单测)与 dispatch-guard-ui.ts
(ElMessageBox 弹窗层),在数据流的三个位置设闸:

- 选文件:空选择、非 xlsx/xls/csv、空路径直接拦;重复文件弹确认
- 解析结果:taskId 非法、totalRows 为 0、整批行被丢弃、需要分组却无分组直接拦;
  部分行被丢弃弹确认后才允许推送
- 入队前:结构不符、必填字段缺失、items/groups/country_codes 为空数组、
  行数页数为 0、JSON 不安全值(NaN/Infinity/BigInt/循环引用/数组洞)

覆盖 11 个推 Python 队列的 Tab 与 dedupe/split/convert 三个纯 Java Tab。
闸位按 Tab 挑选以免留下孤儿后端状态:collect-data 校验前置到
activateCollectDataTask 之前(任务保持 PENDING 无需回滚)、product-risk 的国家
检查提到建任务之前;已建任务后才拦下的复用各 Tab 原有失败补偿路径。

两处边界:对象属性 undefined 放行(taskNo 这类可选字段是惯用写法),只拦数组
元素 undefined 与数组洞;price-track 的 asin_rows_by_country 仅在 mode=asin
时要求非空,status 模式下 loadAsinRowsForAppClient 本就返回 {}。

顺带修复 similar-asin / appearance-patent 的 selectFiles 缺少 try/catch,
上传失败会残留上一批文件与解析结果。

测试:tests/dispatch-guard.test.ts 新增 37 个 test_task_101_* 用例。
2026-09-01 12:53:12 +08:00
huangzd1997 e2607ab723 task-98: 移除 similar-asin/appearance-patent 模块 Coze,状态机与共享组件改名 LLM
Build Backend JAR / build (push) Has been cancelled
- similarasin/appearancepatent 模块全部 Coze 工作流调用改走 direct-LLM(已确认唯一运行路径)
- 共享组件改名:CozeTaskQueueGate→TaskQueueGate、CozeGroupResultPropagator→GroupResultPropagator
- 状态机改名:biz_task_scope_state 的 coze_* 列→llm_*、stateJson coze 键→llm(V100 迁移已应用生产)
- 删除 biz_coze_credential 表、CozeCredential* 类、SimilarAsinCozeClient、AppearancePatentCozeClient→LlmClient
- 前端 brand 页 Coze 文案→LLM;Python 后端删除 cozepy 依赖与死配置
- 修复 TaskResultFileJobWorker 启动失败:TaskFileJobConfig 注册 ResultFileJobHandlerRegistry 与 13 个 handler bean(含 validateCoverage 启动校验)
2026-09-01 02:20:50 +08:00
huangzd1997 0cc7380205 task-47: 轮询 baseline 统计补强测试 2026-08-31 22:47:47 +08:00
huangzd1997 50518b5420 task-41: storage 恢复与清理测试
恢复过滤非正数/非数字、空列表清除过期 key、终态同步 storage、
写失败不抛、坏 JSON 容错、恢复即轮询、无 key 不操作。修复恢复
出空列表时遗留 key 未清理的问题。共 8 个测试。
2026-08-31 21:02:52 +08:00
huangzd1997 d33316f093 task-40: 页面隐藏降频与可见恢复测试
隐藏 60s/可见 10s 间隔自适应、切回可见立即刷新、开关关闭不刷
新、延迟刷新生效、隐藏仍轮询、事件绑定/解绑、隐藏不触发即时
刷新。修复 scheduleNextDelayed 被轮询定时器阻塞导致延迟前台刷
新永不触发的缺陷。共 8 个测试。
2026-08-31 20:58:05 +08:00
huangzd1997 ab55b20edd task-31: 连续失败计数
useTaskProgressLoop 轮询循环维护连续失败计数:refreshOnce 成功
(收到响应)归零;失败递增(封顶 100);onError 回调增加第二参数
attempt(0 起),供上层决定退避策略;dispose 后不再上报。

同时把该组合式函数内部 @/ 别名 import 改为相对路径(带 .ts 扩展),
使其可在 node --test 下直接运行(此前无任何测试覆盖该文件)。
新增 8 个测试:递增、成功后归零、收到响应归零、onError 带 attempt、
初始 0、交错、封顶、dispose 清理。
2026-08-31 20:26:31 +08:00
huangzd1997 9e224929fb task-30: getTaskPollBackoffMs 递增序列
getTaskPollBackoffMs 签名改为 attempt 可选(省略视为 0,向后兼容),
序列 500×factor^attempt、封顶 maxMs 行为由任务 29 的 factor 配置驱动。
新增 8 个测试:attempt0/1/2 值、序列单调、封顶、省略参数默认、
负 attempt 当 0、自定义 factor。
2026-08-31 20:16:30 +08:00
huangzd1997 37eabcbb2e task-29: 退避配置项(MaxMs/Factor)
task-progress-config.ts 新增 getTaskPollBackoffMaxMs()(默认 10000,
由 5000 提升)与 getTaskPollBackoffFactor()(默认 2,<1 钳制为 1);
configureTaskPolling 支持 backoffFactor;getTaskPollBackoffMs 改用
base × factor^attempt 计算。

既有 task-086 边界测试中封顶 5000 的快照随新默认更新为 10000。
新增 8 个测试:max/factor 默认、可覆盖、非正钳制、factor 下限、
配置隔离、默认值快照。
2026-08-31 20:14:43 +08:00
huangzd1997 71606e9fe5 task-28: 死代码清理
删除拆分后失去引用的 API 残留文件:
- src/shared/api/call.ts(已由 http.ts 取代)
- src/shared/api/download.ts(已由 download-url.ts 取代)
- src/shared/api/status.ts(页面内已有本地实现)
及其孤儿测试 tests/call.test.ts / call-abort.test.ts / download.test.ts / status.test.ts。
endpoints/url/user 仍被模块文件引用,保留。

新增 8 个验证测试(dead-code-cleanup.test.ts):无重复导出、
vue-tsc 零错误、全量测试绿、无调试日志、无残留函数体、
16+ HTML 入口存在、build 产物齐全、提交变更仅限 frontend-vue。
2026-08-31 20:11:49 +08:00
huangzd1997 3fe8d5d05c task-27: api-field-compat 高频响应 schema
新增 src/shared/api-field-schemas.ts:task 核心字段、result 文件阶段
字段、task-result 组合 schema 注册表(带版本号);12 个业务模块
注册同一 task-result schema;getApiFieldSchema()/createModuleFieldChecker()
供契约测试与联调前跑字段漂移检查。

10 个测试:schema 必填/结果字段声明、checker 合法/缺必填/类型不符/
批量、模块注册齐全、版本标记、未知模块抛错。
2026-08-31 20:07:02 +08:00
huangzd1997 f177a15105 task-25: applyFilePhaseDefaults 兼容旧 Java 响应的文件阶段字段默认值 2026-08-31 20:01:52 +08:00
huangzd1997 eaf457c6c0 task-24: java-modules.ts 改为纯 re-export 聚合器,upload helpers 移至 upload.ts 2026-08-31 20:00:45 +08:00
huangzd1997 21c92afa7a task-23: 拆分 image-video / brand / permission / digital-human 模块 API 至 types/modules/,旧文件转 re-export 存根 2026-08-31 19:57:38 +08:00
huangzd1997 8f119198fd task-22: 拆分 collect-data 模块 API 至 types/modules/collect-data.ts,java-modules.ts re-export 2026-08-31 19:50:53 +08:00
huangzd1997 79e3513056 task-21: 拆分 withdraw / patrol-delete 模块 API 至 types/modules/withdraw.ts,java-modules.ts re-export 2026-08-31 19:48:49 +08:00
huangzd1997 71b482df6d task-20: 拆分 shop-data-crawl / query-asin 模块 API 至 types/modules/query-asin.ts,java-modules.ts re-export 2026-08-31 19:45:59 +08:00
huangzd1997 be02833b11 task-19: 拆分 shop-match / product-risk 模块 API 至 types/modules/shop-match.ts,java-modules.ts re-export
- product-risk 15 函数 + shop-match 17 函数 + 全套类型(含 ShopMatch 对 ProductRisk 的 type alias)
- 保留模块的 PatrolDelete/QueryAsin/Withdraw alias 通过 import type 兜底引用
- QueryAsinCountryAsins 内联定义避免跨模块循环依赖
- 10 个测试:双模块 CRUD/preference/match/task 系列/progressBatch 双端/dashboard/skip-asins/download/export compat
2026-08-31 19:42:18 +08:00
huangzd1997 173ea3b074 task-18: 拆分 price-track 模块 API 至 types/modules/price-track.ts,java-modules.ts re-export
- candidates/preference/matchShops/createTask/tasksBatch/progressBatch/loopRun 系列/skipAsin 系列/dispatchFailed/pendingShopResult/dashboard/history/delete/download 共 23 函数
- price-track 全套类型(含 LoopRun/ExecutionMode/SkipPriceAsin 类型)随模块迁移
- 12 个测试:CRUD/preference/match/create/batch/loopRun/progressBatch/skipAsin 系列/dashboard/download/unwrap/export compat
2026-08-31 19:39:00 +08:00
huangzd1997 f8dad27957 task-17: 拆分 delete-brand 模块 API 至 types/modules/delete-brand.ts,java-modules.ts re-export
- runDeleteBrand/getDeleteBrandHistory/deleteDeleteBrandHistory/getDeleteBrandTaskDetail/getDeleteBrandTaskDetails/getDeleteBrandTaskDownloadUrl/getDeleteBrandResultDownloadUrl/submitDeleteBrandResult/getDeleteBrandTaskProgress
- delete-brand 全套类型(含 MatchStatus union)随模块迁移;progressBatch 内联缓存+超时实现
- 10 个测试:run URL/超时/history/delete/taskDetail/taskDetails/download×2/submitResult 请求体/progressBatch/export compat
2026-08-31 19:37:19 +08:00
huangzd1997 b27a686998 task-16: 拆分 appearance-patent 模块 API 至 types/modules/appearance-patent.ts,java-modules.ts re-export
- parseAppearancePatent/getAppearancePatentParsedPayload/getAppearancePatentQueuePayload/getAppearancePatentDashboard/getAppearancePatentHistory/getAppearancePatentTaskProgressBatch/activateAppearancePatentTask/deleteAppearancePatentTask/deleteAppearancePatentHistory/getAppearancePatentResultDownloadUrl
- appearance-patent 全套类型随模块迁移;progressBatch 内联缓存+超时实现
- 9 个测试:parse/parsedPayload/queuePayload/progressBatch/activate/dashboard/history/delete/download/export compat
2026-08-31 19:35:59 +08:00
huangzd1997 d7104d35da task-15: 拆分 similar-asin 模块 API 至 types/modules/similar-asin.ts,java-modules.ts re-export
- parseSimilarAsin/getSimilarAsinDashboard/getSimilarAsinHistory/getSimilarAsinTaskProgressBatch/activateSimilarAsinTask/deleteSimilarAsinTask/deleteSimilarAsinHistory/getSimilarAsinResultDownloadUrl
- similar-asin 全套类型随模块迁移;progressBatch 内联缓存+超时实现(与 java-modules 同构)
- 9 个测试:parse URL/payload/默认值/dashboard/history/progressBatch 去重+超时/activate/delete/download/export compat
2026-08-31 19:34:56 +08:00
huangzd1997 b93d338eac task-14: 拆分 publish 模块 API 至 types/modules/publish.ts,java-modules.ts re-export
- parsePublish/activatePublishTask/activatePublishFile/getPublishItemsPage/getPublishItemsPageUrl/getPublishTaskProgressBatch/submitPublishTaskResult/getPublishDashboard/getPublishHistory/deletePublishTask
- Publish 全套类型随模块迁移;progressBatch 保留 task_ids 请求体并应用进度超时
- 10 个测试:parse URL/超时/activate/itemsPage 参数/itemsPageUrl/progressBatch 去重+超时/submitResult 请求体/dashboard/delete/export compat
2026-08-31 19:33:16 +08:00
huangzd1997 fdbf681292 task-13: 拆分 convert 模块 API 至 types/modules/convert.ts,java-modules.ts re-export
- getExcelInfo/runConvert/getConvertHistory/deleteConvertHistory/getConvertResultDownloadUrl/getConvertTemplates/importConvertTemplate/setDefaultConvertTemplate/deleteConvertTemplate
- 模板相关类型 ConvertTemplateVo/ConvertTemplateImportRequest/ExcelInfoVo 随模块迁移
- 9 个测试:URL/method/payload/history/模板系列/签名/export compat/unwrap
2026-08-31 19:31:10 +08:00
huangzd1997 a98efb00f7 task-12: 拆分 split 模块 API 至 types/modules/split.ts,java-modules.ts re-export 2026-08-31 19:29:01 +08:00
huangzd1997 a4ca9d5a19 task-11: 拆分 dedupe 模块 API 至 types/modules/dedupe.ts(callJava+buildJavaUrl 化),java-modules.ts 改 re-export 保持旧 import 兼容 2026-08-31 19:27:39 +08:00
huangzd1997 22422bc9d2 task-10: types/task.ts 共享类型(TaskStatus/ResultFilePhase/PageResult/TaskProgressBatchVo) 2026-08-31 19:24:26 +08:00
huangzd1997 9349f8ff33 task-9: 进度类请求默认 10s 超时(progressTimeoutMs 可配置覆盖,postTaskProgressBatch 接入) 2026-08-31 19:23:13 +08:00
huangzd1997 35de13f7f1 task-7: buildDownloadUrl()/resolveDownloadUrl() 下载 URL 统一构造(user_id 追加与去重、fresh 优先) 2026-08-31 19:20:56 +08:00
huangzd1997 1e1f533a24 task-6: isTerminalStatus() 终态判定(默认 SUCCESS/FAILED,extras 扩展且归一化,空值非终态) 2026-08-31 19:20:17 +08:00
huangzd1997 432b2c52b2 task-5: normalizeStatus() 状态归一(大写化、连字符/空格转下划线、空值安全) 2026-08-31 19:19:33 +08:00
huangzd1997 9f58350b4a task-4: extractErrorMessage 命名导出并覆盖 error/message/msg 三字段(空白跳过、优先级 error>message>msg) 2026-08-31 19:18:57 +08:00
huangzd1997 6e227aa377 task-3: callJava() 统一响应解包(JavaApiResponse/Legacy 兼容、success=false 抛错);开启 allowImportingTsExtensions 支持 node --test 2026-08-31 19:18:21 +08:00
huangzd1997 f63ab837f5 task-2: buildJavaUrl() 统一 URL 构造(query 编码、尾斜杠规范化) 2026-08-31 19:16:19 +08:00
huangzd1997 d1870f1382 task-1: 新增 API_ENDPOINTS 路径常量表(frontend-api-adapter) 2026-08-31 19:15:10 +08:00
huangzd1997 4d84d362cf task-100: 发布前回滚演练、commit 对应关系检查和交付清单 2026-08-30 23:18:25 +08:00
huangzd1997 2fb56632c9 task-99: 全链路压测记录 CPU、内存、GC、DB、Redis、RustFS、网络结果 2026-08-30 23:17:02 +08:00
huangzd1997 38e94e1f53 task-98: 真实启动、健康检查、核心请求和外部依赖调用验证执行器 2026-08-30 23:15:31 +08:00
huangzd1997 c08869f109 task-97: Java/Python/Vue 三端验证工作流编排器 2026-08-30 23:13:55 +08:00
huangzd1997 1b491d972a task-96: Java/Python/Vue 三端统一 API 字段兼容检查器 2026-08-30 23:12:27 +08:00