R5:视频上传切换至 erpgo,移除货憨憨直连 #27

Open
opened 2026-09-30 09:27:01 +08:00 by ila · 3 comments
Owner

来源与授权(2026-09-30)

用户要求“去掉本项目直接调用huohanhan接口,通过erpgo的对应接口来上传指定商品的产品视频.建工单,做”。内部系统已明确不设独立实施门禁;本工单据此实施,不对真实商品发起未指定文件的写入。

目标与方案

  • 查询仍走现有erpgo接口;视频上传改用现有本机erpgo地址/API Key。选中商品按Shopee itemId调用PUT /api/v1/shopee/products/{shopeeId}/video,multipart只传一个video MP4及持久化Idempotency-Key;保留本地ffprobe内容预检和单个/批量选择、明确确认、磁盘首个MP4规则。
  • 通过GET /video维护单商品覆盖提示、批量已有视频跳过;远端读取失败不写。PUT的202只算操作已记录/接受;按同键GET /video/operation轮询并以本次status=succeeded确认,pending/unknown不算成功且不自动重发。失败按稳定errorCode/stage/submissionState展示,不透传服务端原文或凭据。
  • 在本机SQLite增加非破坏性上传操作表,发PUT前保存每商品的幂等键、Shopee ID、文件路径/摘要、状态及操作ID;重启/超时/断线后只查询原操作,未终结期间拒绝换键、换文件和重复绑定。ERPGo保存服务端锁,cmsp避免本进程重叠提交。已确认成功后更新原本地视频/上传状态;失败和未确认保留已有下载状态及本地文件。批量逐商品串行,单品失败不覆盖其它状态。
  • 运行时不再直接访问货憨憨:删除App直连登录和上传入口,启动店铺刷新改由erpgo配置判断;隐藏过时的货憨憨账号设置和永远显示未登录的状态。旧config.yaml货憨憨字段及SQLite历史token原样兼容保留,不读取用于联网、不自动删除用户数据。

非目标

不修复淘宝失效视频URL,不上传不存在或不合规MP4,不同步Shopee/改标题主图,不执行真实店铺批量写入,不删除已有素材、旧凭据或本地视频,不自动回退直连货憨憨。明确已存在的用户单商品覆盖确认及批量跳过语义保留。

风险、依赖与回退

所属MVP #6/Epic #2,承接已提交#17/#19的上传UI及#20的erpgo本机配置;这些工单待验收不阻塞已实现功能的迁移。ERPGo LOCAL-029文档与已部署版本契约为接口基线,真实视频写入仍待提供方验收;本工单先模拟联调。风险集中于错误重试引起重复写、响应丢失误报成功、SQLite迁移与凭据处理。回退仅回退程序代码版本,保留操作事实/原SQLite表及旧配置;旧版直连不可自动重放结果未知的上传。

验收

模拟ERPGo与临时SQLite测试:API Key与单文件multipart/Shopee ID/本地预检;单品覆盖确认、批量已有跳过;202、processing、succeeded、failed、unknown、超时/断线、同键恢复、Key轮换404、409、413、无效响应;不在结果未知时二次PUT;重启恢复和本机重复点击;状态与视频记录保留、日志脱敏、无运行时直连货憨憨。运行Go测试/race/vet、Windows构建、Harness检查。真实视频上传、Shopee最终生效和Windows真机交互未验证要明确记录。

文档影响与设计证据

更新Wiki架构、业务规则、开发验证、排障、项目档案中的上传主路径/配置/状态与操作恢复,回读revision后同步镜像;需要更新AGENTS项目红线。后端接口/状态设计为本工单文字证据,沿用现有确认框与列表,不另造UI原型。无任务快照/部署文档变化。

状态

进行中

Gitea访问

项目当前没有可用Gitea MCP,按仓库规则回退WikiClient API;凭据仅从用户授权环境文件载入进程,未写入工单。

## 来源与授权(2026-09-30) 用户要求“去掉本项目直接调用huohanhan接口,通过erpgo的对应接口来上传指定商品的产品视频.建工单,做”。内部系统已明确不设独立实施门禁;本工单据此实施,不对真实商品发起未指定文件的写入。 ## 目标与方案 - 查询仍走现有erpgo接口;视频上传改用现有本机erpgo地址/API Key。选中商品按Shopee itemId调用PUT /api/v1/shopee/products/{shopeeId}/video,multipart只传一个video MP4及持久化Idempotency-Key;保留本地ffprobe内容预检和单个/批量选择、明确确认、磁盘首个MP4规则。 - 通过GET /video维护单商品覆盖提示、批量已有视频跳过;远端读取失败不写。PUT的202只算操作已记录/接受;按同键GET /video/operation轮询并以本次status=succeeded确认,pending/unknown不算成功且不自动重发。失败按稳定errorCode/stage/submissionState展示,不透传服务端原文或凭据。 - 在本机SQLite增加非破坏性上传操作表,发PUT前保存每商品的幂等键、Shopee ID、文件路径/摘要、状态及操作ID;重启/超时/断线后只查询原操作,未终结期间拒绝换键、换文件和重复绑定。ERPGo保存服务端锁,cmsp避免本进程重叠提交。已确认成功后更新原本地视频/上传状态;失败和未确认保留已有下载状态及本地文件。批量逐商品串行,单品失败不覆盖其它状态。 - 运行时不再直接访问货憨憨:删除App直连登录和上传入口,启动店铺刷新改由erpgo配置判断;隐藏过时的货憨憨账号设置和永远显示未登录的状态。旧config.yaml货憨憨字段及SQLite历史token原样兼容保留,不读取用于联网、不自动删除用户数据。 ## 非目标 不修复淘宝失效视频URL,不上传不存在或不合规MP4,不同步Shopee/改标题主图,不执行真实店铺批量写入,不删除已有素材、旧凭据或本地视频,不自动回退直连货憨憨。明确已存在的用户单商品覆盖确认及批量跳过语义保留。 ## 风险、依赖与回退 所属MVP #6/Epic #2,承接已提交#17/#19的上传UI及#20的erpgo本机配置;这些工单待验收不阻塞已实现功能的迁移。ERPGo LOCAL-029文档与已部署版本契约为接口基线,真实视频写入仍待提供方验收;本工单先模拟联调。风险集中于错误重试引起重复写、响应丢失误报成功、SQLite迁移与凭据处理。回退仅回退程序代码版本,保留操作事实/原SQLite表及旧配置;旧版直连不可自动重放结果未知的上传。 ## 验收 模拟ERPGo与临时SQLite测试:API Key与单文件multipart/Shopee ID/本地预检;单品覆盖确认、批量已有跳过;202、processing、succeeded、failed、unknown、超时/断线、同键恢复、Key轮换404、409、413、无效响应;不在结果未知时二次PUT;重启恢复和本机重复点击;状态与视频记录保留、日志脱敏、无运行时直连货憨憨。运行Go测试/race/vet、Windows构建、Harness检查。真实视频上传、Shopee最终生效和Windows真机交互未验证要明确记录。 ## 文档影响与设计证据 更新Wiki架构、业务规则、开发验证、排障、项目档案中的上传主路径/配置/状态与操作恢复,回读revision后同步镜像;需要更新AGENTS项目红线。后端接口/状态设计为本工单文字证据,沿用现有确认框与列表,不另造UI原型。无任务快照/部署文档变化。 ## 状态 进行中 ## Gitea访问 项目当前没有可用Gitea MCP,按仓库规则回退WikiClient API;凭据仅从用户授权环境文件载入进程,未写入工单。
Author
Owner

状态:待验收(工单保持 open)。

最终差异:

  • 删除 cmsp 的 internal/huohanhan 直连客户端与登录入口。店铺/商品查询继续走 erpgo;指定商品视频上传改用 PUT /api/v1/shopee/products/{shopeeId}/video,X-API-Key、单个 multipart video、持久化 Idempotency-Key。旧 huohanhan 配置只保留本机文件兼容,界面隐藏;启动店铺刷新依 erpgo 配置。
  • 单商品远端已有视频给覆盖警告,批量已有视频跳过;保留本地 mp4 首文件选择及 ffprobe 预检。HTTP 202 只表示受理,查询同键 operation,只有 succeeded 更新本地视频与上传完成状态。SQLite 新表保存操作身份、文件摘要和状态;未决/未知结果再次操作只查询原键,避免重复 PUT。错误只展示稳定错误码,不输出凭据或上游原文。
  • 更新 AGENTS.md 及 6 个 Wiki 页面,在线回读确认;核心镜像 sync --check 一致。Architecture-and-Code-Map 最终 revision:21b539622946d275a78fc6c469a50a14cd5eb4b4。

验证:go test ./...、go vet ./...、go test -race ./...、python -m unittest discover -s tests(55 项)、python dev_scripts/harness.py check --strict、npm --prefix frontend run build、Wails Windows/amd64 生产构建通过;模拟 HTTP+临时 SQLite 覆盖接口头、multipart、401/400/404/409/413、成功落库、unknown 后不重复 PUT、重启后幂等键保留。曾因 Wails 构建临时资源文件与并行 Go 检查冲突出现一次检查失败,串行重跑后全部通过。

未验证:没有对真实店铺发起写入;Shopee 页面独立发布结果和真实 WebView 界面交互待使用者指定商品/文件后验收。erpgo 的 succeeded 是本次货憨憨关联回读,不等于 Shopee 独立验证。

提交并已推送:375f20c(实现、测试与镜像)、10b5e23(最终 Wiki revision 镜像)。保留工作区原有 go.mod、go.sum、cmsp.code-workspace、cmsp.exe 改动/文件,未纳入提交。Gitea MCP 不可用,按仓库规则通过 Gitea API 回写;凭据仅取本机环境文件。

状态:待验收(工单保持 open)。 最终差异: - 删除 cmsp 的 `internal/huohanhan` 直连客户端与登录入口。店铺/商品查询继续走 erpgo;指定商品视频上传改用 `PUT /api/v1/shopee/products/{shopeeId}/video`,`X-API-Key`、单个 multipart `video`、持久化 Idempotency-Key。旧 huohanhan 配置只保留本机文件兼容,界面隐藏;启动店铺刷新依 erpgo 配置。 - 单商品远端已有视频给覆盖警告,批量已有视频跳过;保留本地 mp4 首文件选择及 ffprobe 预检。HTTP 202 只表示受理,查询同键 operation,只有 `succeeded` 更新本地视频与上传完成状态。SQLite 新表保存操作身份、文件摘要和状态;未决/未知结果再次操作只查询原键,避免重复 PUT。错误只展示稳定错误码,不输出凭据或上游原文。 - 更新 AGENTS.md 及 6 个 Wiki 页面,在线回读确认;核心镜像 `sync --check` 一致。Architecture-and-Code-Map 最终 revision:`21b539622946d275a78fc6c469a50a14cd5eb4b4`。 验证:`go test ./...`、`go vet ./...`、`go test -race ./...`、`python -m unittest discover -s tests`(55 项)、`python dev_scripts/harness.py check --strict`、`npm --prefix frontend run build`、Wails Windows/amd64 生产构建通过;模拟 HTTP+临时 SQLite 覆盖接口头、multipart、401/400/404/409/413、成功落库、unknown 后不重复 PUT、重启后幂等键保留。曾因 Wails 构建临时资源文件与并行 Go 检查冲突出现一次检查失败,串行重跑后全部通过。 未验证:没有对真实店铺发起写入;Shopee 页面独立发布结果和真实 WebView 界面交互待使用者指定商品/文件后验收。erpgo 的 `succeeded` 是本次货憨憨关联回读,不等于 Shopee 独立验证。 提交并已推送:`375f20c`(实现、测试与镜像)、`10b5e23`(最终 Wiki revision 镜像)。保留工作区原有 `go.mod`、`go.sum`、`cmsp.code-workspace`、`cmsp.exe` 改动/文件,未纳入提交。Gitea MCP 不可用,按仓库规则通过 Gitea API 回写;凭据仅取本机环境文件。
Author
Owner

2026-09-30 验收中发现 ERPGo 视频预检的真实响应边界:目标商品 GET /video 返回 502 / HHH_UPSTREAM_ERROR / stage=check,货憨憨回读记录缺少 video 字段;对照商品返回 200 / video 数组。用户转述 ERPGo agent 的处理矩阵:200 + video:[] 才继续上传;502 + stage=check 视为远端视频状态未知,停止该商品且不发 PUT。界面应显示“视频状态无法确认,上传未提交”并保留 requestId 和本地 MP4,批量入口也不能把这类预检错误写成上传失败。将此作为 #27 待验收修正,保留原幂等与覆盖保护;不对真实店铺发起写入。

2026-09-30 验收中发现 ERPGo 视频预检的真实响应边界:目标商品 GET /video 返回 502 / HHH_UPSTREAM_ERROR / stage=check,货憨憨回读记录缺少 video 字段;对照商品返回 200 / video 数组。用户转述 ERPGo agent 的处理矩阵:200 + video:[] 才继续上传;502 + stage=check 视为远端视频状态未知,停止该商品且不发 PUT。界面应显示“视频状态无法确认,上传未提交”并保留 requestId 和本地 MP4,批量入口也不能把这类预检错误写成上传失败。将此作为 #27 待验收修正,保留原幂等与覆盖保护;不对真实店铺发起写入。
Author
Owner

#27 待验收修正已推送(保持 open)。

行为:单商品上传预览收到 502 / HHH_UPSTREAM_ERROR / stage=check 时,显示持久提示“视频状态无法确认,上传未提交”和安全 requestId;不弹确认框、不建上传操作、不发 PUT,选择变化或重试时清除旧提示。批量入口遇同类错误时为该商品记录 unconfirmed 与 requestId(本地 last_error),列表可筛选并悬停查看;不误标 failed,本地 MP4 保留。200 / video:[] 仍按原流程继续。其他错误路径未改。

验证:模拟 ERPGo 502 后预览不变更本地状态,批量入口无 PUT/无新操作、MP4 留存且 requestId 保存;go test ./...、go vet ./...、go test -race ./...、前端构建、Wails Windows 生产构建、DevHarness strict 与 55 项 Python 测试通过。在线 Wiki 已回读并同步镜像,Business-Rules-and-Glossary revision b2969f370a6186860f5769ac374afe90498cf3a2,Troubleshooting revision 3d7d777fd2dc91801cdf56499c0314f303feeb1e,sync --check 一致。

提交并已推送:e0bedd1(预览/入口错误日志,前次直接修复)和 1f83a34(本次状态区分)。真实店铺写入未执行;线上目标商品仍返回视频字段缺失的 502,需 ERPGo/货憨憨明确回读契约后才可继续上传。工作区原有 go.mod、go.sum 和未跟踪文件未纳入提交。Gitea MCP 不可用,本次按仓库回退规则使用 Gitea API 回写。

#27 待验收修正已推送(保持 open)。 行为:单商品上传预览收到 502 / HHH_UPSTREAM_ERROR / stage=check 时,显示持久提示“视频状态无法确认,上传未提交”和安全 requestId;不弹确认框、不建上传操作、不发 PUT,选择变化或重试时清除旧提示。批量入口遇同类错误时为该商品记录 `unconfirmed` 与 requestId(本地 last_error),列表可筛选并悬停查看;不误标 `failed`,本地 MP4 保留。200 / video:[] 仍按原流程继续。其他错误路径未改。 验证:模拟 ERPGo 502 后预览不变更本地状态,批量入口无 PUT/无新操作、MP4 留存且 requestId 保存;`go test ./...`、`go vet ./...`、`go test -race ./...`、前端构建、Wails Windows 生产构建、DevHarness strict 与 55 项 Python 测试通过。在线 Wiki 已回读并同步镜像,Business-Rules-and-Glossary revision `b2969f370a6186860f5769ac374afe90498cf3a2`,Troubleshooting revision `3d7d777fd2dc91801cdf56499c0314f303feeb1e`,sync --check 一致。 提交并已推送:`e0bedd1`(预览/入口错误日志,前次直接修复)和 `1f83a34`(本次状态区分)。真实店铺写入未执行;线上目标商品仍返回视频字段缺失的 502,需 ERPGo/货憨憨明确回读契约后才可继续上传。工作区原有 go.mod、go.sum 和未跟踪文件未纳入提交。Gitea MCP 不可用,本次按仓库回退规则使用 Gitea API 回写。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmsp#27