MVP:档口入库码导入、匹配与顺运宝逐件写入 #117

Open
opened 2026-08-27 23:28:37 +08:00 by ila · 6 comments
Owner

所属与来源

  • 类型:MVP / 档口入库码迁移。
  • 来源:用户于 2026-08-27 要求将 D:\chengma\cmautobuy\admin 已实现的“档口入库码”模块迁移到 GoAuto,并先按全栈分析方案建工单、制作总原型,用户审核后才能实施。
  • 当前阶段:先建立工单层级与统一设计证据;原型未经用户明确审核通过前,所有生产实现子工单保持待实施。

目标

在 GoAuto 原生技术栈中建立“Excel 入库码导入 → 自动只读匹配顺运宝明细 → 人工确认 → 异步逐件写码 → 结果不明确只读复核”的完整闭环,同时复用现有 sybclient,不复制源项目的模板页面或第二套顺运宝客户端。

当前事实

  • 源模块已有成熟的导入、匹配、多件拆分、远端写入、检查点、needs_check、重启恢复和软删除逻辑及测试。
  • GoAuto 已有顺运宝登录/会话、订单明细读取、删除旧码、创建零价明细、写入明细码和 ErrWriteResultUnknown 底层能力。
  • GoAuto 尚无档口入库码领域表、服务、JSON API 和 Vue 页面。
  • 源模块依赖 Go + Gin + html/template + 原生 SQL;目标是 Go 1.26.5 + go-admin/GORM + Vue/Element Plus,不能目录级复制。

子工单与顺序

  • #118 总体交互原型与产品权限确认(当前执行,所有生产实现的前置门禁)
  • #119 数据模型、迁移与 Excel 导入(依赖 #118)
  • #120 只读确定性匹配与写入规划(依赖 #118、#119)
  • #121 异步逐件写入、检查点与只读复核(依赖 #118~#120;高风险)
  • #122 Vue 管理页面、权限与全栈联调(依赖 #118~#121)
  • #123 旧系统历史数据迁移(可选,依赖 #119 且须另行确认)

生产实施依赖第 1 项原型审核通过。第 4 项涉及外部 SYB 写入,自动化可使用 fake 实现;首次真实写入、部署或数据迁移必须再次等待人工确认。

总体方案

  • 服务端新增独立 sybinnercode 领域包,复用 sybclient 和现有 SYB 会话。
  • 管理端新增 /syb-inner-codes 独立路由,采用 JSON API,不复用源项目 HTML/JS;导入成功后自动开始只读匹配,页面不提供常驻“批量匹配”按钮。
  • 业务身份保持 business_date + order_number + stall + spec_key。
  • 优先采用父记录 + 单件码 + 执行批次的结构,避免长期依赖逗号拼接码和单表聚合批次。
  • 所有修改请求带 UUID requestId;远端写请求禁止自动重试。
  • 写入前重读整个 SYB 单据并验证身份;每个远端动作前后保存结构化检查点。
  • 不确定写结果进入 needs_check,只能通过只读接口复核。
  • 跨进程串行由数据库活动槽/租约和原子状态转换保证,不使用进程内 sync.Mutex 作为唯一保护。
  • 不保存 Excel 原文件、顺运宝 Cookie、原始响应、截图或控件树。

产品与安全边界

  • 本功能修改 SYB 入库码,可能创建数量 1、价格 0 的占位明细;不创建采购订单、不付款。
  • 采购员具备查看、导入、自动匹配、发起写入、只读复核和批量删除权限,不再拆分运营角色。
  • 删除采用“勾选记录 → 删除 → 弹窗确认 → 物理删除”;仅 queued、applying、needs_check 禁止删除,其余状态允许删除并可重新导入 Excel。
  • 本 MVP 不影响 Android Agent。
  • 历史数据迁移不是功能迁移的默认组成部分,必须独立确认源库、用户映射、状态映射和回滚方案。

MVP 验收

  • 总原型覆盖正常、空、加载、失败、禁用、权限、确认、执行进度、部分失败和 needs_check,并由用户明确审核通过。
  • Excel 导入限制、业务唯一性、同日安全替换、多件一码数据结构通过测试。
  • 导入成功后自动开始只读匹配,无常驻批量匹配按钮;冲突或歧义明确失败,不猜测候选。
  • 写入前后验证、逐件检查点、未知结果、只读复核和服务重启恢复通过 fault-injection 测试。
  • 数据库防止多个服务实例并发执行远端写入。
  • Vue 页面实现批量物理删除确认,服务端对 queued、applying、needs_check 拒绝删除;采购员具备全部运营权限。
  • 迁移、接口、服务端、Web 构建与受影响回归真实通过。
  • 首次真实 SYB 写入未获单独授权前保持未验证,并明确记录。
  • 所有长期事实按 Wiki-first 更新并完成镜像一致性检查。

文档影响

生产实现将影响 Architecture-and-Code-Map、Business-Rules-and-Glossary、Local-Development-and-Verification、MVP-Requirements 与 SYB-ERP-Interface。原型阶段只记录线上设计链接与审核状态,不更新 Wiki;只有用户明确要求时才按需导出本地 HTML。

状态

需求拆分与原型设计中;不得开始生产实现。

## 所属与来源 - 类型:MVP / 档口入库码迁移。 - 来源:用户于 2026-08-27 要求将 `D:\chengma\cmautobuy\admin` 已实现的“档口入库码”模块迁移到 GoAuto,并先按全栈分析方案建工单、制作总原型,用户审核后才能实施。 - 当前阶段:先建立工单层级与统一设计证据;原型未经用户明确审核通过前,所有生产实现子工单保持待实施。 ## 目标 在 GoAuto 原生技术栈中建立“Excel 入库码导入 → 自动只读匹配顺运宝明细 → 人工确认 → 异步逐件写码 → 结果不明确只读复核”的完整闭环,同时复用现有 `sybclient`,不复制源项目的模板页面或第二套顺运宝客户端。 ## 当前事实 - 源模块已有成熟的导入、匹配、多件拆分、远端写入、检查点、`needs_check`、重启恢复和软删除逻辑及测试。 - GoAuto 已有顺运宝登录/会话、订单明细读取、删除旧码、创建零价明细、写入明细码和 `ErrWriteResultUnknown` 底层能力。 - GoAuto 尚无档口入库码领域表、服务、JSON API 和 Vue 页面。 - 源模块依赖 Go + Gin + html/template + 原生 SQL;目标是 Go 1.26.5 + go-admin/GORM + Vue/Element Plus,不能目录级复制。 ## 子工单与顺序 - #118 总体交互原型与产品权限确认(当前执行,所有生产实现的前置门禁) - #119 数据模型、迁移与 Excel 导入(依赖 #118) - #120 只读确定性匹配与写入规划(依赖 #118、#119) - #121 异步逐件写入、检查点与只读复核(依赖 #118~#120;高风险) - #122 Vue 管理页面、权限与全栈联调(依赖 #118~#121) - #123 旧系统历史数据迁移(可选,依赖 #119 且须另行确认) 生产实施依赖第 1 项原型审核通过。第 4 项涉及外部 SYB 写入,自动化可使用 fake 实现;首次真实写入、部署或数据迁移必须再次等待人工确认。 ## 总体方案 - 服务端新增独立 `sybinnercode` 领域包,复用 `sybclient` 和现有 SYB 会话。 - 管理端新增 `/syb-inner-codes` 独立路由,采用 JSON API,不复用源项目 HTML/JS;导入成功后自动开始只读匹配,页面不提供常驻“批量匹配”按钮。 - 业务身份保持 `business_date + order_number + stall + spec_key`。 - 优先采用父记录 + 单件码 + 执行批次的结构,避免长期依赖逗号拼接码和单表聚合批次。 - 所有修改请求带 UUID `requestId`;远端写请求禁止自动重试。 - 写入前重读整个 SYB 单据并验证身份;每个远端动作前后保存结构化检查点。 - 不确定写结果进入 `needs_check`,只能通过只读接口复核。 - 跨进程串行由数据库活动槽/租约和原子状态转换保证,不使用进程内 `sync.Mutex` 作为唯一保护。 - 不保存 Excel 原文件、顺运宝 Cookie、原始响应、截图或控件树。 ## 产品与安全边界 - 本功能修改 SYB 入库码,可能创建数量 1、价格 0 的占位明细;不创建采购订单、不付款。 - 采购员具备查看、导入、自动匹配、发起写入、只读复核和批量删除权限,不再拆分运营角色。 - 删除采用“勾选记录 → 删除 → 弹窗确认 → 物理删除”;仅 `queued`、`applying`、`needs_check` 禁止删除,其余状态允许删除并可重新导入 Excel。 - 本 MVP 不影响 Android Agent。 - 历史数据迁移不是功能迁移的默认组成部分,必须独立确认源库、用户映射、状态映射和回滚方案。 ## MVP 验收 - [ ] 总原型覆盖正常、空、加载、失败、禁用、权限、确认、执行进度、部分失败和 `needs_check`,并由用户明确审核通过。 - [ ] Excel 导入限制、业务唯一性、同日安全替换、多件一码数据结构通过测试。 - [ ] 导入成功后自动开始只读匹配,无常驻批量匹配按钮;冲突或歧义明确失败,不猜测候选。 - [ ] 写入前后验证、逐件检查点、未知结果、只读复核和服务重启恢复通过 fault-injection 测试。 - [ ] 数据库防止多个服务实例并发执行远端写入。 - [ ] Vue 页面实现批量物理删除确认,服务端对 `queued`、`applying`、`needs_check` 拒绝删除;采购员具备全部运营权限。 - [ ] 迁移、接口、服务端、Web 构建与受影响回归真实通过。 - [ ] 首次真实 SYB 写入未获单独授权前保持未验证,并明确记录。 - [ ] 所有长期事实按 Wiki-first 更新并完成镜像一致性检查。 ## 文档影响 生产实现将影响 Architecture-and-Code-Map、Business-Rules-and-Glossary、Local-Development-and-Verification、MVP-Requirements 与 SYB-ERP-Interface。原型阶段只记录线上设计链接与审核状态,不更新 Wiki;只有用户明确要求时才按需导出本地 HTML。 ## 状态 需求拆分与原型设计中;不得开始生产实现。
Author
Owner

已完成子工单拆分:#118~#123。统一原型 #118 v1 已提交为 9e3761e,本地入口 prototypes/118/v1/index.html,当前等待用户审核。#119~#122 继续受 #118 审核门禁约束,未开始生产实施;#123 历史数据迁移仍为可选且待单独确认。

已完成子工单拆分:#118~#123。统一原型 #118 v1 已提交为 `9e3761e`,本地入口 `prototypes/118/v1/index.html`,当前等待用户审核。#119~#122 继续受 #118 审核门禁约束,未开始生产实施;#123 历史数据迁移仍为可选且待单独确认。
Author
Owner

#118 已于 2026-08-28 经用户明确验收通过并关闭,统一原型门禁已解除。开始按依赖顺序实施 #119 → #120 → #121 → #122;#121 自动化验证只使用 fake SYB,首次真实写入仍需单独授权。#123 历史数据迁移保持可选、未授权。

#118 已于 2026-08-28 经用户明确验收通过并关闭,统一原型门禁已解除。开始按依赖顺序实施 #119 → #120 → #121 → #122;#121 自动化验证只使用 fake SYB,首次真实写入仍需单独授权。#123 历史数据迁移保持可选、未授权。
Author
Owner

#119~#122 已完成实施,进入用户验收

  • #119 数据模型、加法迁移、Excel 导入、查询与批量物理删除已完成。
  • #120 导入后自动只读确定性匹配、计划快照、明细预留和异常重匹配已完成。
  • #121 异步逐件回写、数据库全局租约、检查点、写后回读、未知结果与只读复核已完成;仅 fake SYB 验证,未执行真实远端写入或生产迁移。
  • #122 已按 #118 已确认原型完成 Vue 页面、菜单、权限和浏览器联调。
  • 提交已推送至 main:后端 5c6655f、前端 941b7b1,长期文档镜像提交 fd15ce0 / 68395ca / 2f54155。
  • 仓库级全量验证通过;专项 Playwright 1 passed。四个线上 Wiki 页面与本地镜像已通过 MCP 逐字及 revision 双重核对一致。
  • #119~#122 保持打开,等待用户验收;可选 #123 未确认、未实施。
## #119~#122 已完成实施,进入用户验收 - #119 数据模型、加法迁移、Excel 导入、查询与批量物理删除已完成。 - #120 导入后自动只读确定性匹配、计划快照、明细预留和异常重匹配已完成。 - #121 异步逐件回写、数据库全局租约、检查点、写后回读、未知结果与只读复核已完成;仅 fake SYB 验证,未执行真实远端写入或生产迁移。 - #122 已按 #118 已确认原型完成 Vue 页面、菜单、权限和浏览器联调。 - 提交已推送至 `main`:后端 `5c6655f`、前端 `941b7b1`,长期文档镜像提交 `fd15ce0` / `68395ca` / `2f54155`。 - 仓库级全量验证通过;专项 Playwright 1 passed。四个线上 Wiki 页面与本地镜像已通过 MCP 逐字及 revision 双重核对一致。 - #119~#122 保持打开,等待用户验收;可选 #123 未确认、未实施。
Author
Owner

启动阻塞 #125 已修复并进入待验收:迁移版本唯一性门禁已增加,本机仅执行新的 SYB 入库码迁移,受控重启后二次迁移幂等跳过;goauto-admin-api Running,健康检查 200。提交 7b55745。

启动阻塞 #125 已修复并进入待验收:迁移版本唯一性门禁已增加,本机仅执行新的 SYB 入库码迁移,受控重启后二次迁移幂等跳过;`goauto-admin-api` Running,健康检查 200。提交 `7b55745`。
Author
Owner

进度同步(2026-08-28):用户已明确验收并关闭 #119、#120、#121、#122,启动阻塞修复 #125 也已验收关闭。档口入库码必做单元交付已全部通过,#123 仍为可选且未授权。本 MVP 保持打开,等待单独的 MVP 集成验收;首次真实 SYB 写入仍需另行授权。

进度同步(2026-08-28):用户已明确验收并关闭 #119、#120、#121、#122,启动阻塞修复 #125 也已验收关闭。档口入库码必做单元交付已全部通过,#123 仍为可选且未授权。本 MVP 保持打开,等待单独的 MVP 集成验收;首次真实 SYB 写入仍需另行授权。
Author
Owner

进度同步(2026-08-29):用户已验收并关闭档口入库码上传关联缺陷 #139。#117 仍按既有记录等待 MVP 集成验收;可选 #123 未授权、未实施,因此本次不提前关闭。

进度同步(2026-08-29):用户已验收并关闭档口入库码上传关联缺陷 #139。#117 仍按既有记录等待 MVP 集成验收;可选 #123 未授权、未实施,因此本次不提前关闭。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#117