R1:接入 erpgo 店铺及商品查询接口 #20

Open
opened 2026-09-28 17:13:55 +08:00 by ila · 3 comments
Owner

基本信息

  • 类型:需求
  • 所属 Epic:#2
  • 所属 MVP / 版本:#3(商品同步)
  • 阶段:待验收
  • 当前指令:用户于 2026-09-28 要求执行工单 #20,实施、验证、提交、推送并回写证据。

依赖与并行

  • 前置工单:外部提供方 erpgo LOCAL-027;不要求其他待验收工单先关闭。
  • 提供方代码提交:461a0ea;正式接口文档后续提交:a5e73ed。
  • 用户报告:提供方已验证店铺查询、分页、末页、空页及 401、400、403,相关测试通过;cmsp 接入与落库联调未完成。
  • 契约来源:erpgo 仓库 docs/cmsp-huohanhan-query-api.md(本地已读取)。
  • 是否允许与其他任务并行:是;不同模块可并行,同步入口、配置、存储模块冲突时协调,不混入其他任务改动。
  • 实施前核对目标服务版本与契约一致,不将提供方验证替代消费方联调。

子项目影响

  • 交付单元:cmsp 桌面应用。
  • 跨仓库依赖:消费 erpgo 已有接口,不修改提供方代码或契约。
  • 各端验证:cmsp 配置、设置界面、HTTP 客户端、分页和 SQLite 落库;erpgo 只读联调。

原始需求

  • 来源:用户对话。
  • 提出时间:2026-09-28。
  • 脱敏摘要:用户要求建工单,将店铺刷新和商品同步切换至 erpgo;配置地址与 API Key,完整分页成功后落库,失败保留数据及状态,保留现有上传与货憨憨配置,并验证错误码、分页异常和状态保留。

要解决什么

cmsp 当前直连货憨憨执行店铺刷新和商品同步。erpgo 已提供统一查询接口,本任务让 cmsp 消费该接口,减少重复维护登录和查询链路,同时保持现有本地商品、视频及任务状态。

做什么 / 不做什么

做:

  1. 参数设置增加 erpgo 地址与 API Key,保存在本机配置;界面掩码显示,日志不输出。
  2. 店铺刷新和商品同步切换至 erpgo 两个查询接口;串行分页,按货憨憨内部商品 id 去重。
  3. 全部分页成功后落库;失败保留原数据及任务状态。
  4. 保留现有视频上传流程和货憨憨配置。
  5. 验证错误码、分页异常及落库后下载、上传状态保留。

不做:迁移视频上传、真实店铺写操作、淘宝流程或调度调整、SQLite 表结构迁移、多账号/只读 Key 权限体系、主动 Shopee 同步、自动回退直连掩盖失败、任务归档或原型导出。

已确认方案

  • GET /api/v1/integrations/huohanhan/shops。
  • GET /api/v1/integrations/huohanhan/products?platformShopId=...&current=1&size=200。
  • cmsp Go 后端以 X-API-Key 请求头鉴权;只读取货憨憨当前数据,不触发 Shopee 同步或商品写操作。
  • erpgo 使用服务端配置的货憨憨账号;当前有效 Key 可查询该账号全部 Shopee 店铺,无独立只读权限体系。
  • 新增独立 erpgo 查询客户端,解析 code/msg/data/requestId/errorCode,转换店铺、商品及诊断白名单字段。保留 id、itemId、platformShopId 的不同含义。
  • videoDiagnosis 为 missing/ok;ok 只表示未明确诊断缺少视频,不保证真实存在视频。
  • 配置补充默认值、校验、渲染与旧配置兼容;不内置 Key,不向日志输出配置或认证头。
  • 替换 RefreshShops 和 DownloadProductData 的查询来源。未配置或请求失败时明确提示,不静默使用另一货憨憨账号查询。
  • 商品分页串行拉取,保持现有每页 200 条与分页上限保护;按内部 id 去重。total/pages 是全部在售商品,不是缺少视频商品数;不先过滤再沿用原分页元数据。
  • 拉取期间暂存结果,完整成功后写入商品与诊断。商品或诊断写入失败时不留下部分同步结果,必要时扩展现有存储事务入口,不改表结构。
  • 更新商品基础字段与诊断,保留本地 video_status、download_status、upload_status、视频记录、错误与任务断点;不依据列表删除商品,不混入 #16 的状态修正需求。
  • 对页码异常、跨店记录、缺失 id、非在售记录、非法诊断状态与触及分页保护上限报告失败。正常末页、合法空店铺与错误响应分开处理。
  • 前端不按中文错误文本分支;使用稳定错误码。日志只记录脱敏错误、HTTP 状态与 requestId。

预计修改:internal/config/、config.example.yaml、新 erpgo 客户端及测试、app.go、frontend/src/views/SettingsView.vue、必要错误展示与 Wails 绑定,以及必要的 internal/store/ 事务入口和回归测试。

需求变化记录

日期 变化内容 原因 用户确认
2026-09-28 建立本工单,固定上述五项范围 erpgo 查询能力已提供,消费方需要接入 是,用户明确建单

设计与原型门禁

  • 修改类型:非 UI 接口适配及小范围参数设置调整。
  • 设计证据:本工单文字方案与 erpgo 正式接口契约。
  • 识别方式:2026-09-28 任务基线及提供方提交 461a0ea / a5e73ed。
  • 状态:范围已确认。
  • 确认人及覆盖范围:用户,2026-09-28,上述五项接入范围。
  • 无需完整 UI 原型:复用现有设置表单,Key 使用密码输入控件,无重大导航或交互变化。
  • 本地 HTML 导出:未要求。
  • 按 AGENTS.md 内部系统实施授权,不设置额外实施人工确认门禁;用户已另行明确授权执行工单。

文档影响

  • Project-Profile:外部服务与凭据来源。
  • Architecture-and-Code-Map:查询调用链与模块入口。
  • Local-Development-and-Verification:配置与联调方式。
  • Business-Rules-and-Glossary:诊断语义、失败保留及状态边界。
  • Troubleshooting:错误码、服务不可用及 requestId 排查。
  • 按 Wiki 修改 → 回读 → 导出镜像 → 检查 → 提交执行,不直接修改 docs 镜像。

交付文档影响

  • 更新内部使用者的参数设置说明:erpgo 地址、API Key、原上传配置用途与同步失败处理;实施时更新对应 Wiki 的使用/排错说明。
  • 需要桌面实际验证配置保存、掩码与失败提示;无外部客户文档。

任务记录与可选快照

  • 单次任务事实来源:当前 Gitea 工单正文与评论。
  • 默认不创建任务快照,不导出工单全文。

验收标准

  • 地址和 Key 可保存并在重启后生效;Key 掩码显示且不进入日志。
  • 旧配置兼容,原货憨憨上传配置有效。
  • 店铺刷新走新接口,失败保留原缓存。
  • 商品串行分页并按内部 id 去重,正常末页与合法空列表正确处理。
  • 任一页请求、解析、校验失败,原商品、诊断及任务状态不变。
  • 商品和诊断落库失败,无部分同步结果。
  • 成功同步更新商品和诊断,保留下载、上传、视频记录和断点状态。
  • 400/401/403/502/503/504 及网络错误有明确处理;429 仅作为后续契约兼容,不宣称提供方已有限流。
  • 页码异常、非法记录和触及分页上限不误报成功。
  • 查询不触发 Shopee 同步、上传、修改或删除。
  • 现有上传链路模拟回归通过,不真实修改店铺。

验证方式

实施时运行,当前尚未执行:

go test ./...
go vet ./...
go build ./...
npm --prefix frontend run build
python dev_scripts/harness.py check --strict

使用模拟 HTTP 响应与临时 SQLite 验证分页、错误码、事务回滚及各类本地状态保留。真实 erpgo 只读联调覆盖店铺、商品及消费方落库;桌面检查保存、重启、掩码和错误展示。真实上传不在本次范围,不能将模拟结果写为真实店铺验证。

风险和回退

  • 新同步依赖 erpgo 可用性;失败保留本地缓存与任务。
  • Key 可查询配置账号全部 Shopee 店铺,不宣称具有独立只读权限;凭据不提交、不记录、不随程序分发。
  • 上游按 updateTime 排序,无一致性快照保证;去重不能保证拉取期间零遗漏。
  • 回退恢复原查询入口和设置行为;不删除 SQLite、视频或原认证状态。
  • 保护现有非本任务工作区改动:go.mod、go.sum、cmsp.code-workspace、cmsp.exe。已有规则提交 cd0acfc 不混入新实施提交。
  • 提交引用本工单号;最终评论集中记录测试、未验证部分、提交和 Wiki revision。实施完成保持待验收,用户验收后关闭。

Gitea 交互说明

当前无可用 Gitea MCP,回退 Gitea API。用户指定的本机环境文件已加载至本次进程环境,认证已验证;未记录凭据内容。先前认证失败未产生线上工单,本次创建后回读确认并同步父工单索引。

## 基本信息 - 类型:需求 - 所属 Epic:#2 - 所属 MVP / 版本:#3(商品同步) - 阶段:待验收 - 当前指令:用户于 2026-09-28 要求执行工单 #20,实施、验证、提交、推送并回写证据。 ## 依赖与并行 - 前置工单:外部提供方 erpgo LOCAL-027;不要求其他待验收工单先关闭。 - 提供方代码提交:461a0ea;正式接口文档后续提交:a5e73ed。 - 用户报告:提供方已验证店铺查询、分页、末页、空页及 401、400、403,相关测试通过;cmsp 接入与落库联调未完成。 - 契约来源:erpgo 仓库 docs/cmsp-huohanhan-query-api.md(本地已读取)。 - 是否允许与其他任务并行:是;不同模块可并行,同步入口、配置、存储模块冲突时协调,不混入其他任务改动。 - 实施前核对目标服务版本与契约一致,不将提供方验证替代消费方联调。 ## 子项目影响 - 交付单元:cmsp 桌面应用。 - 跨仓库依赖:消费 erpgo 已有接口,不修改提供方代码或契约。 - 各端验证:cmsp 配置、设置界面、HTTP 客户端、分页和 SQLite 落库;erpgo 只读联调。 ## 原始需求 - 来源:用户对话。 - 提出时间:2026-09-28。 - 脱敏摘要:用户要求建工单,将店铺刷新和商品同步切换至 erpgo;配置地址与 API Key,完整分页成功后落库,失败保留数据及状态,保留现有上传与货憨憨配置,并验证错误码、分页异常和状态保留。 ## 要解决什么 cmsp 当前直连货憨憨执行店铺刷新和商品同步。erpgo 已提供统一查询接口,本任务让 cmsp 消费该接口,减少重复维护登录和查询链路,同时保持现有本地商品、视频及任务状态。 ## 做什么 / 不做什么 做: 1. 参数设置增加 erpgo 地址与 API Key,保存在本机配置;界面掩码显示,日志不输出。 2. 店铺刷新和商品同步切换至 erpgo 两个查询接口;串行分页,按货憨憨内部商品 id 去重。 3. 全部分页成功后落库;失败保留原数据及任务状态。 4. 保留现有视频上传流程和货憨憨配置。 5. 验证错误码、分页异常及落库后下载、上传状态保留。 不做:迁移视频上传、真实店铺写操作、淘宝流程或调度调整、SQLite 表结构迁移、多账号/只读 Key 权限体系、主动 Shopee 同步、自动回退直连掩盖失败、任务归档或原型导出。 ## 已确认方案 - GET /api/v1/integrations/huohanhan/shops。 - GET /api/v1/integrations/huohanhan/products?platformShopId=...&current=1&size=200。 - cmsp Go 后端以 X-API-Key 请求头鉴权;只读取货憨憨当前数据,不触发 Shopee 同步或商品写操作。 - erpgo 使用服务端配置的货憨憨账号;当前有效 Key 可查询该账号全部 Shopee 店铺,无独立只读权限体系。 - 新增独立 erpgo 查询客户端,解析 code/msg/data/requestId/errorCode,转换店铺、商品及诊断白名单字段。保留 id、itemId、platformShopId 的不同含义。 - videoDiagnosis 为 missing/ok;ok 只表示未明确诊断缺少视频,不保证真实存在视频。 - 配置补充默认值、校验、渲染与旧配置兼容;不内置 Key,不向日志输出配置或认证头。 - 替换 RefreshShops 和 DownloadProductData 的查询来源。未配置或请求失败时明确提示,不静默使用另一货憨憨账号查询。 - 商品分页串行拉取,保持现有每页 200 条与分页上限保护;按内部 id 去重。total/pages 是全部在售商品,不是缺少视频商品数;不先过滤再沿用原分页元数据。 - 拉取期间暂存结果,完整成功后写入商品与诊断。商品或诊断写入失败时不留下部分同步结果,必要时扩展现有存储事务入口,不改表结构。 - 更新商品基础字段与诊断,保留本地 video_status、download_status、upload_status、视频记录、错误与任务断点;不依据列表删除商品,不混入 #16 的状态修正需求。 - 对页码异常、跨店记录、缺失 id、非在售记录、非法诊断状态与触及分页保护上限报告失败。正常末页、合法空店铺与错误响应分开处理。 - 前端不按中文错误文本分支;使用稳定错误码。日志只记录脱敏错误、HTTP 状态与 requestId。 预计修改:internal/config/、config.example.yaml、新 erpgo 客户端及测试、app.go、frontend/src/views/SettingsView.vue、必要错误展示与 Wails 绑定,以及必要的 internal/store/ 事务入口和回归测试。 ## 需求变化记录 | 日期 | 变化内容 | 原因 | 用户确认 | |---|---|---|---| | 2026-09-28 | 建立本工单,固定上述五项范围 | erpgo 查询能力已提供,消费方需要接入 | 是,用户明确建单 | ## 设计与原型门禁 - 修改类型:非 UI 接口适配及小范围参数设置调整。 - 设计证据:本工单文字方案与 erpgo 正式接口契约。 - 识别方式:2026-09-28 任务基线及提供方提交 461a0ea / a5e73ed。 - 状态:范围已确认。 - 确认人及覆盖范围:用户,2026-09-28,上述五项接入范围。 - 无需完整 UI 原型:复用现有设置表单,Key 使用密码输入控件,无重大导航或交互变化。 - 本地 HTML 导出:未要求。 - 按 AGENTS.md 内部系统实施授权,不设置额外实施人工确认门禁;用户已另行明确授权执行工单。 ## 文档影响 - [x] Project-Profile:外部服务与凭据来源。 - [x] Architecture-and-Code-Map:查询调用链与模块入口。 - [x] Local-Development-and-Verification:配置与联调方式。 - [x] Business-Rules-and-Glossary:诊断语义、失败保留及状态边界。 - [x] Troubleshooting:错误码、服务不可用及 requestId 排查。 - 按 Wiki 修改 → 回读 → 导出镜像 → 检查 → 提交执行,不直接修改 docs 镜像。 ## 交付文档影响 - [x] 更新内部使用者的参数设置说明:erpgo 地址、API Key、原上传配置用途与同步失败处理;实施时更新对应 Wiki 的使用/排错说明。 - [x] 需要桌面实际验证配置保存、掩码与失败提示;无外部客户文档。 ## 任务记录与可选快照 - 单次任务事实来源:当前 Gitea 工单正文与评论。 - [x] 默认不创建任务快照,不导出工单全文。 ## 验收标准 - [x] 地址和 Key 可保存并在重启后生效;Key 掩码显示且不进入日志。 - [x] 旧配置兼容,原货憨憨上传配置有效。 - [x] 店铺刷新走新接口,失败保留原缓存。 - [x] 商品串行分页并按内部 id 去重,正常末页与合法空列表正确处理。 - [x] 任一页请求、解析、校验失败,原商品、诊断及任务状态不变。 - [x] 商品和诊断落库失败,无部分同步结果。 - [x] 成功同步更新商品和诊断,保留下载、上传、视频记录和断点状态。 - [x] 400/401/403/502/503/504 及网络错误有明确处理;429 仅作为后续契约兼容,不宣称提供方已有限流。 - [x] 页码异常、非法记录和触及分页上限不误报成功。 - [x] 查询不触发 Shopee 同步、上传、修改或删除。 - [x] 现有上传链路模拟回归通过,不真实修改店铺。 ## 验证方式 实施时运行,当前尚未执行: ```powershell go test ./... go vet ./... go build ./... npm --prefix frontend run build python dev_scripts/harness.py check --strict ``` 使用模拟 HTTP 响应与临时 SQLite 验证分页、错误码、事务回滚及各类本地状态保留。真实 erpgo 只读联调覆盖店铺、商品及消费方落库;桌面检查保存、重启、掩码和错误展示。真实上传不在本次范围,不能将模拟结果写为真实店铺验证。 ## 风险和回退 - 新同步依赖 erpgo 可用性;失败保留本地缓存与任务。 - Key 可查询配置账号全部 Shopee 店铺,不宣称具有独立只读权限;凭据不提交、不记录、不随程序分发。 - 上游按 updateTime 排序,无一致性快照保证;去重不能保证拉取期间零遗漏。 - 回退恢复原查询入口和设置行为;不删除 SQLite、视频或原认证状态。 - 保护现有非本任务工作区改动:go.mod、go.sum、cmsp.code-workspace、cmsp.exe。已有规则提交 cd0acfc 不混入新实施提交。 - 提交引用本工单号;最终评论集中记录测试、未验证部分、提交和 Wiki revision。实施完成保持待验收,用户验收后关闭。 ## Gitea 交互说明 当前无可用 Gitea MCP,回退 Gitea API。用户指定的本机环境文件已加载至本次进程环境,认证已验证;未记录凭据内容。先前认证失败未产生线上工单,本次创建后回读确认并同步父工单索引。
Author
Owner

开始实施:已核对工单无后续范围变更,提供方契约已读取。当前无 Gitea MCP,继续使用 API,凭据由用户指定环境文件加载进本次进程。保留 go.mod/go.sum 的 Wails 版本改动及未跟踪文件。本地商品 upsert 与诊断替换目前分别提交;按工单范围增加同一事务的同步入口,保障诊断写入失败可完整回滚,不改表结构、不混入 #16 状态修正。已询问真实只读联调地址及本机 Key 配置位置,等待期间继续实现和模拟验证。

开始实施:已核对工单无后续范围变更,提供方契约已读取。当前无 Gitea MCP,继续使用 API,凭据由用户指定环境文件加载进本次进程。保留 go.mod/go.sum 的 Wails 版本改动及未跟踪文件。本地商品 upsert 与诊断替换目前分别提交;按工单范围增加同一事务的同步入口,保障诊断写入失败可完整回滚,不改表结构、不混入 #16 状态修正。已询问真实只读联调地址及本机 Key 配置位置,等待期间继续实现和模拟验证。
Author
Owner

实现与验证进度:已接通 erpgo 店铺/商品客户端、参数设置及稳定错误码;商品与诊断改为同一事务。模拟测试覆盖二页失败、非法页/记录、ID 去重、诊断写入回滚及本地状态保留。真实只读联调成功:店铺查询、串行分页、临时 SQLite 落库、状态保留及数据库重开;未对现有数据库或真实店铺执行写操作。Go 测试、vet、构建和前端构建通过;Wails Windows 构建通过。浏览器模拟检查验证了默认掩码、设置保存/重载和 1000px 无水平溢出。剩余:最终变更检查、Wiki 更新与镜像校验、提交推送。提供方错误未透传 msg,使用稳定错误码及 requestId;补充 API Key 日志脱敏和 YAML 解析错误脱敏。用户本机 erpgo 配置字段 url/apikey 已仅改名为 base_url/api_key,保留值且不纳入提交。

实现与验证进度:已接通 erpgo 店铺/商品客户端、参数设置及稳定错误码;商品与诊断改为同一事务。模拟测试覆盖二页失败、非法页/记录、ID 去重、诊断写入回滚及本地状态保留。真实只读联调成功:店铺查询、串行分页、临时 SQLite 落库、状态保留及数据库重开;未对现有数据库或真实店铺执行写操作。Go 测试、vet、构建和前端构建通过;Wails Windows 构建通过。浏览器模拟检查验证了默认掩码、设置保存/重载和 1000px 无水平溢出。剩余:最终变更检查、Wiki 更新与镜像校验、提交推送。提供方错误未透传 msg,使用稳定错误码及 requestId;补充 API Key 日志脱敏和 YAML 解析错误脱敏。用户本机 erpgo 配置字段 url/apikey 已仅改名为 base_url/api_key,保留值且不纳入提交。
Author
Owner

最终实现与验证证据(2026-09-28)

状态:待验收,保持 open,未代替用户验收。

最终差异

  • 参数设置新增 erpgo 服务根地址与 API Key,本机 YAML 为 erpgo.base_url/api_key;默认掩码、旧配置兼容、配置与错误日志脱敏。原上传账号及设置保留。
  • 店铺刷新和商品同步通过 erpgo 两个 GET 查询接口,Key 仅通过 X-API-Key;不触发 Shopee 同步、写操作或自动回退直连。
  • 每页 200 条串行查询,最多 200 页,按内部 id 去重;校验来源、时间、分页、店铺、在售状态、ID 和诊断枚举。任一页失败不给出部分落库结果。
  • 商品与诊断同一 SQLite 事务提交;任一写入失败回滚,成功更新不重置下载/上传/视频状态、错误记录和断点。无表结构迁移,无 #16 的状态修正。
  • 前端按稳定错误码展示,保留 requestId;不透传上游 msg 或 HTTP 敏感正文。
  • 用户本机 config.yaml 的 erpgo 字段 url/apikey 仅改名为 base_url/api_key,保留值;该文件未提交。

验证结果

通过:

  • go test ./...(模拟客户端、应用接线、事务失败回滚、状态和视频记录保留,以及原货憨憨上传测试均通过;默认跳过真实联调)。
  • go vet ./...、Go 构建。
  • 使用临时 -modfile 对仓库原定 Wails v2.15 依赖运行 go test ./...,全部通过;用户现有 go.mod/go.sum 的 v2.16 改动未纳入提交。
  • npm --prefix frontend run build;Wails CLI v2.16 Windows/amd64 构建通过,产物 build/bin/cmsp20.exe。
  • python dev_scripts/harness.py check --strict;Harness 55 项单元测试通过。
  • 真实只读联调:本机配置读取,19 个店铺,首个店铺 4344 个在售商品完成串行分页与临时库落库;本地下载/上传/视频状态在重复本地持久化与重开数据库后保留。全程不修改现有数据库、不写真实店铺,输出仅数量和结果,不记录账号、Key、商品内容。
  • 浏览器模拟:Key 密码输入、保存/重载、1000px 无水平溢出,以及 API_KEY_INVALID 按码展示且不使用上游消息。
  • git diff --check 与暂存凭据检查通过。sync --check 确认全部核心镜像与线上 revision 一致。

未验证部分与限制

  • 未在原生 WebView2 窗口中进行交互验收,未验证 Narrator、高对比度、多 DPI 或干净机运行;浏览器模拟不替代上述真机检查。
  • 未执行真实上传,上传验证为模拟回归;未改变或验证提供方多进程认证互斥。
  • 上游不是一致性分页快照,跨页去重不保证读取期间零遗漏;有效 API Key 当前没有独立只读权限体系。

提交与文档

实现与镜像提交:3f1b27b4e246cdb74319625e71f39f002dff4203,已推送 origin/main。此前授权规则提交 cd0acfc 同步推送。用户既有 go.mod、go.sum、cmsp.code-workspace、cmsp.exe 保留且未混入提交。

长期 Wiki 已修改、逐页回读取得 revision、导出并校验;同时补齐此前凭据失败未写入的内部系统实施授权规则。镜像提交同上:

  • Project-Profile: 86664a13bbe51f695279c7e0f01271f518e5526d
  • Development-Workflow: 9bee25b223a7e74ca4d80b4a662fa29551e9118f
  • Architecture-and-Code-Map: 9757a12d42f1f824ea906f5729d8ced09f0ccf0e
  • Business-Rules-and-Glossary: ec7b9922df62bd33fb7bb8a423fb459e81f62e44
  • Local-Development-and-Verification: 8418abc7f51ec71c3d5830df59316b1d816b46a2
  • Common-Changes: d14f0c2f6b4acd3b50fab0fbb5b36062c6f40353
  • Troubleshooting: dcbde6376c9810e59552bddc8c8732c19f94a1fd

未创建或导出任务归档/原型。回退恢复原查询入口和设置,不清除本地数据库、视频或原认证状态。当前无实施阻塞,后续由用户桌面验收。

## 最终实现与验证证据(2026-09-28) 状态:待验收,保持 open,未代替用户验收。 ### 最终差异 - 参数设置新增 erpgo 服务根地址与 API Key,本机 YAML 为 erpgo.base_url/api_key;默认掩码、旧配置兼容、配置与错误日志脱敏。原上传账号及设置保留。 - 店铺刷新和商品同步通过 erpgo 两个 GET 查询接口,Key 仅通过 X-API-Key;不触发 Shopee 同步、写操作或自动回退直连。 - 每页 200 条串行查询,最多 200 页,按内部 id 去重;校验来源、时间、分页、店铺、在售状态、ID 和诊断枚举。任一页失败不给出部分落库结果。 - 商品与诊断同一 SQLite 事务提交;任一写入失败回滚,成功更新不重置下载/上传/视频状态、错误记录和断点。无表结构迁移,无 #16 的状态修正。 - 前端按稳定错误码展示,保留 requestId;不透传上游 msg 或 HTTP 敏感正文。 - 用户本机 config.yaml 的 erpgo 字段 url/apikey 仅改名为 base_url/api_key,保留值;该文件未提交。 ### 验证结果 通过: - go test ./...(模拟客户端、应用接线、事务失败回滚、状态和视频记录保留,以及原货憨憨上传测试均通过;默认跳过真实联调)。 - go vet ./...、Go 构建。 - 使用临时 -modfile 对仓库原定 Wails v2.15 依赖运行 go test ./...,全部通过;用户现有 go.mod/go.sum 的 v2.16 改动未纳入提交。 - npm --prefix frontend run build;Wails CLI v2.16 Windows/amd64 构建通过,产物 build/bin/cmsp20.exe。 - python dev_scripts/harness.py check --strict;Harness 55 项单元测试通过。 - 真实只读联调:本机配置读取,19 个店铺,首个店铺 4344 个在售商品完成串行分页与临时库落库;本地下载/上传/视频状态在重复本地持久化与重开数据库后保留。全程不修改现有数据库、不写真实店铺,输出仅数量和结果,不记录账号、Key、商品内容。 - 浏览器模拟:Key 密码输入、保存/重载、1000px 无水平溢出,以及 API_KEY_INVALID 按码展示且不使用上游消息。 - git diff --check 与暂存凭据检查通过。sync --check 确认全部核心镜像与线上 revision 一致。 ### 未验证部分与限制 - 未在原生 WebView2 窗口中进行交互验收,未验证 Narrator、高对比度、多 DPI 或干净机运行;浏览器模拟不替代上述真机检查。 - 未执行真实上传,上传验证为模拟回归;未改变或验证提供方多进程认证互斥。 - 上游不是一致性分页快照,跨页去重不保证读取期间零遗漏;有效 API Key 当前没有独立只读权限体系。 ### 提交与文档 实现与镜像提交:`3f1b27b4e246cdb74319625e71f39f002dff4203`,已推送 origin/main。此前授权规则提交 cd0acfc 同步推送。用户既有 go.mod、go.sum、cmsp.code-workspace、cmsp.exe 保留且未混入提交。 长期 Wiki 已修改、逐页回读取得 revision、导出并校验;同时补齐此前凭据失败未写入的内部系统实施授权规则。镜像提交同上: - Project-Profile: `86664a13bbe51f695279c7e0f01271f518e5526d` - Development-Workflow: `9bee25b223a7e74ca4d80b4a662fa29551e9118f` - Architecture-and-Code-Map: `9757a12d42f1f824ea906f5729d8ced09f0ccf0e` - Business-Rules-and-Glossary: `ec7b9922df62bd33fb7bb8a423fb459e81f62e44` - Local-Development-and-Verification: `8418abc7f51ec71c3d5830df59316b1d816b46a2` - Common-Changes: `d14f0c2f6b4acd3b50fab0fbb5b36062c6f40353` - Troubleshooting: `dcbde6376c9810e59552bddc8c8732c19f94a1fd` 未创建或导出任务归档/原型。回退恢复原查询入口和设置,不清除本地数据库、视频或原认证状态。当前无实施阻塞,后续由用户桌面验收。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmsp#20