修复档口入库码匹配空候选崩溃及中断恢复,增加今天默认筛选与批量匹配 #350

Open
opened 2026-09-29 11:33:05 +08:00 by ila · 3 comments
Owner

当前状态

v2 排版字符最小兼容修复已实现、测试、合并 main(4959f3d)并于 2026-09-29 部署到 167;待用户验收。不含 #340,无迁移,未执行新的匹配或 SYB 回写。

来源与目标

2026-09-29 用户要求:档口入库码时间范围默认今天,增加“匹配”按钮,失败记录可勾选手动匹配;先恢复线上两条中断记录,再实施。本单恢复单条匹配失败可见、可重试,不放宽 SKU/档口身份判定,不自动回写 SYB。

基线与事实

线上发布 e7c049d;实施以 origin/main dd9160e 为基线。线上本日匹配批次在处理尾项时 match.go:214 对空 matches 访问 matches[0] 产生 panic,进程退出并自动重启;已有成功结果保留,尾项 pending 和任务 running 未恢复。记录缺少候选不是网络超时,不以延长等待或强行匹配处理。

顺序、依赖与范围

  1. 用户已授权线上仅修复本次两条异常记录及所属失活匹配任务;先核实无计划、无回写、旧 worker 已退出,再用精确条件事务收敛到可重试状态,保留既有成功结果。不调用仍会 panic 的旧匹配器,不伪造匹配成功;无法唯一匹配必须保留明确受限结果。
  2. Server sybinnercode:空候选和空 chosen 检查、单条 panic 隔离;上下文取消/超时用独立有界上下文持久化中断状态;启动恢复 pending/running 失活匹配任务和其未完成记录;批量 rematch 接受 pending/failed/skipped,行级事务保证同条不重复排队。原匹配证据、成功计划、回写和复核规则不变。
  3. Web 档口入库码:今天默认日期,增加当前页“匹配 N”入口,复用 rematch 请求和进度;同日勾选 pending/failed/skipped,混选仅提交合格项,无候选/读取失败/匹配中/提交中禁用;匹配成功仅成为可回写,不自动回写。保留原删除和回写能力,不新增角色权限、Android 或迁移。
    前置:线上恢复必须在任何旧接口重试前完成;Server 与 Web 共用现有 rematch 契约,不并行处理同条任务。

轻量设计证据 v1(复用现有规范)

既有 Element Plus toolbar 内:文件选择/导入|营业日期范围(今天~今天)|订单/入库码关键字|清除|搜索|匹配 N|回写 N|删除 N;表格复选框保留,以匹配资格过滤勾选,按钮复用原样式,行内重新匹配保留。
正常:勾选有效记录显示数量,单击排队;空/未选:禁用;加载/失败:禁用并保留列表错误;执行中:加载/进度、禁重复;无权限:沿用现有模块访问边界。跨日期提示分日期处理,失败不丢失恢复入口。用户本轮已批准上述最小范围实施,不新增独立页面/完整原型。

验收与验证

  • 无 SKU/档口候选、空分配、读取失败/单条 panic:不崩溃、不生成错误计划,下一条继续处理。
  • 批次超时或服务重启:已成功项保留;未完成项明确失败且可重试,任务终态可查。
  • pending/failed/skipped 同日批量匹配;状态变化、重复提交和重叠批次不得重复处理;updated/ready/queued/applying/needs_check 拒绝重新匹配。
  • 日期初始为用户本地今天;勾选资格/混选/加载/错误/禁用/进度与原回写删除回归覆盖。
  • Server 单元与构建、Web 单元/隔离浏览器/ESLint/构建、diff 检查;线上恢复前后只输出脱敏计数,不保存原始生产记录。

风险与授权边界

已授权这两条线上异常数据的定点恢复;未授权任意匹配证据改写、真实回写或采购/付款。正式发布/重启与合并 main另待用户授权。无数据库结构/新增权限迁移。工单停在待验收,不自动关闭。

文档影响

更新 Architecture-and-Code-Map、Business-Rules-and-Glossary、Android-Agent-API-Contract(Admin rematch资格)、Deployment-and-Operations(匹配中断恢复);Wiki-first在线回读后一次 sync + sync --check。

工具

当前无可用 Gitea MCP,按仓库规则回退已配置 Gitea API;凭据不入工单或日志。

线上定点恢复(已执行)

恢复前验证原 worker 已随进程退出,尾项无计划、无 apply 执行记录;精确条件事务恢复两条 pending 为 failed,将旧 running 匹配任务收敛为 failed。恢复后本日 56 条 updated 原状态与更新时间完全不变、2 条 failed;远端 SYB 写入 0 次。仅恢复可重试状态,尚未匹配成功,不可宣称已回写;旧接口禁止重试。
匹配排队新增 matching 状态占用,因此同步将 matching 加入原删除阻塞集合,避免正在匹配时被删除;不改变终态删除与原远端写入门禁。

v2 最小回归修复(2026-09-29,用户确认实施、合并、线上发布)

线上重新匹配不再崩溃,但源 Excel 档口/SKU 中的排版换行与 SYB 单行文本不一致,导致相同规格候选被判为“匹配受限”。导入程序保留原始值,没有主动插入换行。

范围仅 Server sybinnercode:比较 SKU/variationSku 与档口证据时,双方去除 CR/LF/TAB 排版控制字符并保留既有首尾 trim;不移除普通空格,不改大小写、标点、数字或货号规则。原始导入字段、SYB 数据、规格归一化、候选数量/占用及唯一候选校验不变;不迁移、不改 Web、不执行自动回写。

验收:源端、候选端以及 CRLF/TAB 布局差异可匹配;普通空格、不同档口/货号仍不可错配;归一化后重复 SKU 与 SKU/档口冲突仍拒绝;原始值不被修改;完整 sybinnercode 回归及采购/退货回归通过。生产发布按既有目录切换/重启/健康检查流程,保持已回写记录不变。真实回写仍由人工确认触发。

设计证据:恢复已有文本匹配行为,无 UI 变化,复用本单既有设计;长期文档仅更新 Business-Rules-and-Glossary 中的比较归一化边界。Gitea MCP 不可用,回退项目配置 API。

## 当前状态 v2 排版字符最小兼容修复已实现、测试、合并 main(4959f3d)并于 2026-09-29 部署到 167;待用户验收。不含 #340,无迁移,未执行新的匹配或 SYB 回写。 ## 来源与目标 2026-09-29 用户要求:档口入库码时间范围默认今天,增加“匹配”按钮,失败记录可勾选手动匹配;先恢复线上两条中断记录,再实施。本单恢复单条匹配失败可见、可重试,不放宽 SKU/档口身份判定,不自动回写 SYB。 ## 基线与事实 线上发布 e7c049d;实施以 origin/main dd9160e 为基线。线上本日匹配批次在处理尾项时 match.go:214 对空 matches 访问 matches[0] 产生 panic,进程退出并自动重启;已有成功结果保留,尾项 pending 和任务 running 未恢复。记录缺少候选不是网络超时,不以延长等待或强行匹配处理。 ## 顺序、依赖与范围 1. 用户已授权线上仅修复本次两条异常记录及所属失活匹配任务;先核实无计划、无回写、旧 worker 已退出,再用精确条件事务收敛到可重试状态,保留既有成功结果。不调用仍会 panic 的旧匹配器,不伪造匹配成功;无法唯一匹配必须保留明确受限结果。 2. Server sybinnercode:空候选和空 chosen 检查、单条 panic 隔离;上下文取消/超时用独立有界上下文持久化中断状态;启动恢复 pending/running 失活匹配任务和其未完成记录;批量 rematch 接受 pending/failed/skipped,行级事务保证同条不重复排队。原匹配证据、成功计划、回写和复核规则不变。 3. Web 档口入库码:今天默认日期,增加当前页“匹配 N”入口,复用 rematch 请求和进度;同日勾选 pending/failed/skipped,混选仅提交合格项,无候选/读取失败/匹配中/提交中禁用;匹配成功仅成为可回写,不自动回写。保留原删除和回写能力,不新增角色权限、Android 或迁移。 前置:线上恢复必须在任何旧接口重试前完成;Server 与 Web 共用现有 rematch 契约,不并行处理同条任务。 ## 轻量设计证据 v1(复用现有规范) 既有 Element Plus toolbar 内:文件选择/导入|营业日期范围(今天~今天)|订单/入库码关键字|清除|搜索|匹配 N|回写 N|删除 N;表格复选框保留,以匹配资格过滤勾选,按钮复用原样式,行内重新匹配保留。 正常:勾选有效记录显示数量,单击排队;空/未选:禁用;加载/失败:禁用并保留列表错误;执行中:加载/进度、禁重复;无权限:沿用现有模块访问边界。跨日期提示分日期处理,失败不丢失恢复入口。用户本轮已批准上述最小范围实施,不新增独立页面/完整原型。 ## 验收与验证 - 无 SKU/档口候选、空分配、读取失败/单条 panic:不崩溃、不生成错误计划,下一条继续处理。 - 批次超时或服务重启:已成功项保留;未完成项明确失败且可重试,任务终态可查。 - pending/failed/skipped 同日批量匹配;状态变化、重复提交和重叠批次不得重复处理;updated/ready/queued/applying/needs_check 拒绝重新匹配。 - 日期初始为用户本地今天;勾选资格/混选/加载/错误/禁用/进度与原回写删除回归覆盖。 - Server 单元与构建、Web 单元/隔离浏览器/ESLint/构建、diff 检查;线上恢复前后只输出脱敏计数,不保存原始生产记录。 ## 风险与授权边界 已授权这两条线上异常数据的定点恢复;未授权任意匹配证据改写、真实回写或采购/付款。正式发布/重启与合并 main另待用户授权。无数据库结构/新增权限迁移。工单停在待验收,不自动关闭。 ## 文档影响 更新 Architecture-and-Code-Map、Business-Rules-and-Glossary、Android-Agent-API-Contract(Admin rematch资格)、Deployment-and-Operations(匹配中断恢复);Wiki-first在线回读后一次 sync + sync --check。 ## 工具 当前无可用 Gitea MCP,按仓库规则回退已配置 Gitea API;凭据不入工单或日志。 ## 线上定点恢复(已执行) 恢复前验证原 worker 已随进程退出,尾项无计划、无 apply 执行记录;精确条件事务恢复两条 pending 为 failed,将旧 running 匹配任务收敛为 failed。恢复后本日 56 条 updated 原状态与更新时间完全不变、2 条 failed;远端 SYB 写入 0 次。仅恢复可重试状态,尚未匹配成功,不可宣称已回写;旧接口禁止重试。 匹配排队新增 matching 状态占用,因此同步将 matching 加入原删除阻塞集合,避免正在匹配时被删除;不改变终态删除与原远端写入门禁。 ## v2 最小回归修复(2026-09-29,用户确认实施、合并、线上发布) 线上重新匹配不再崩溃,但源 Excel 档口/SKU 中的排版换行与 SYB 单行文本不一致,导致相同规格候选被判为“匹配受限”。导入程序保留原始值,没有主动插入换行。 范围仅 Server sybinnercode:比较 SKU/variationSku 与档口证据时,双方去除 CR/LF/TAB 排版控制字符并保留既有首尾 trim;不移除普通空格,不改大小写、标点、数字或货号规则。原始导入字段、SYB 数据、规格归一化、候选数量/占用及唯一候选校验不变;不迁移、不改 Web、不执行自动回写。 验收:源端、候选端以及 CRLF/TAB 布局差异可匹配;普通空格、不同档口/货号仍不可错配;归一化后重复 SKU 与 SKU/档口冲突仍拒绝;原始值不被修改;完整 sybinnercode 回归及采购/退货回归通过。生产发布按既有目录切换/重启/健康检查流程,保持已回写记录不变。真实回写仍由人工确认触发。 设计证据:恢复已有文本匹配行为,无 UI 变化,复用本单既有设计;长期文档仅更新 Business-Rules-and-Glossary 中的比较归一化边界。Gitea MCP 不可用,回退项目配置 API。
Author
Owner

#350 实施完成,待验收(2026-09-29)

按用户要求先执行线上两条异常状态的定点恢复,再完成代码。恢复只修复状态:旧 worker 已退出、未完成项没有匹配计划或 apply 执行记录;精确条件事务收敛旧 running 批次和两条 pending。恢复后 56 条 updated 的状态及更新时间完全未变,2 条 failed 可重试,SYB 远端写入 0。两条尚未匹配成功,不伪造计划,不调用已知会崩溃的旧接口;真实重试需修复发布后执行。

实现与设计

  • 以 main dd9160e 为基线,分支 fix/350-inner-code-matching。源码 9c5e20e,文档 5729ba048f0073320419c2423d518b99f75afbd9,均提交/推送并回读远端。
  • 空 SKU/档口候选和空分配明确受限,禁止读取空数组;只读单条规划异常隔离且继续后项,不扩大原匹配证据,不访问 SYB 写接口。
  • 超时/取消通过独立 10 秒上下文恢复任务终态和未完成 pending/matching;启动恢复同一范围,成功记录和外部范围保留,不自动执行业务。
  • rematch 允许同日 pending/failed/skipped;行锁事务检查活动匹配占用,排队改为 matching,重放原 requestId 返回原任务,新 requestId 重叠与受保护状态拒绝。matching 新增删除阻塞,避免执行中记录被删除。
  • 页面首次默认浏览器本地今天范围;清除仍清空所有日期筛选。原工具栏新增“匹配 N”(回写之前),只取当前页已选合格记录;跨日期提示分批,不增加确认框;禁用、加载、失败、进度与原行内重试复用现有组件。成功只成为可回写,不自动回写。
  • ui-ux-pro-max 用于现有样式一致性、反馈与重试禁用检查;隔离 mock 浏览器截图已检查,未新增独立页面或原型演示导航。

实际验证

  • go test ./app/goauto/sybinnercode ./app/goauto/returnmatch ./app/goauto/purchase -count=1:通过。新增 6 项 Server 用例覆盖空候选继续下一条、单条 panic、取消后独立清理、重启恢复保留成功/范围外、pending/failed/skipped 批量与幂等、活动导入占用和保护状态;同时验证 matching 不能删除及已排队记录实际执行。最后补充断言后 sybinnercode 全包再跑通过。
  • go build ./...:通过。
  • Web 单元 5/5:默认日期/清除、混选过滤不自动回写、忙碌/加载/错误/空选、跨日期、失败释放状态。
  • 浏览器隔离 mock 5/5:默认今天请求、混选批量/进度、清除范围、跨日期、提交冲突保留重试与无自动重试、列表失败禁用(各用例含多个断言)。此前失败仅测试 mock 缺 avatar 与点击隐藏 checkbox;修正 mock 和点击可见 checkbox 后全部通过,未为测试修改业务逻辑。
  • 受影响页面 ESLint、pnpm build:prod、git diff --check 通过;既有 CSS/包体积警告未处理。
  • Wiki 在线写入回读、一次 sync 和一次 sync --check:17 页一致。strict 仍因基线 #277 已有未登记镜像 docs/evidence/pdd-home-35727-summary.md 失败,未扩大范围处理。

长期文档 revisions

Architecture-and-Code-Map 1e87b8832cecd454e58f0ff49dbe05bbf8d61544
Business-Rules-and-Glossary 214ac317abfef23d71362968d5b30f078fa528b6
Android-Agent-API-Contract da26af9e01087c4970b01783a4807c689fd79d51
Deployment-and-Operations 6d3c599a45813ad844395e93a02832f0d28dd3f5
同步另暴露 docs/12-syb-erp-interface.md 的既有无关 Wiki 差异;没有提交该文件,也未改它的线上页面。

未执行与边界

未合并 main、未发布或重启线上/本地正式实例;无 schema 迁移、新增权限、Android、采购或付款。未对两条记录进行真实匹配/回写,未验证生产 MySQL 高并发和真实浏览器业务操作。工单保持打开待验收,后续合并发布及真实重试需另行授权。Gitea MCP 不可用,按规则回退 API,凭据/原始生产记录未写入工单、源码或文档。

## #350 实施完成,待验收(2026-09-29) 按用户要求先执行线上两条异常状态的定点恢复,再完成代码。恢复只修复状态:旧 worker 已退出、未完成项没有匹配计划或 apply 执行记录;精确条件事务收敛旧 running 批次和两条 pending。恢复后 56 条 updated 的状态及更新时间完全未变,2 条 failed 可重试,SYB 远端写入 0。两条尚未匹配成功,不伪造计划,不调用已知会崩溃的旧接口;真实重试需修复发布后执行。 ### 实现与设计 - 以 main dd9160e 为基线,分支 fix/350-inner-code-matching。源码 9c5e20e,文档 5729ba048f0073320419c2423d518b99f75afbd9,均提交/推送并回读远端。 - 空 SKU/档口候选和空分配明确受限,禁止读取空数组;只读单条规划异常隔离且继续后项,不扩大原匹配证据,不访问 SYB 写接口。 - 超时/取消通过独立 10 秒上下文恢复任务终态和未完成 pending/matching;启动恢复同一范围,成功记录和外部范围保留,不自动执行业务。 - rematch 允许同日 pending/failed/skipped;行锁事务检查活动匹配占用,排队改为 matching,重放原 requestId 返回原任务,新 requestId 重叠与受保护状态拒绝。matching 新增删除阻塞,避免执行中记录被删除。 - 页面首次默认浏览器本地今天范围;清除仍清空所有日期筛选。原工具栏新增“匹配 N”(回写之前),只取当前页已选合格记录;跨日期提示分批,不增加确认框;禁用、加载、失败、进度与原行内重试复用现有组件。成功只成为可回写,不自动回写。 - ui-ux-pro-max 用于现有样式一致性、反馈与重试禁用检查;隔离 mock 浏览器截图已检查,未新增独立页面或原型演示导航。 ### 实际验证 - go test ./app/goauto/sybinnercode ./app/goauto/returnmatch ./app/goauto/purchase -count=1:通过。新增 6 项 Server 用例覆盖空候选继续下一条、单条 panic、取消后独立清理、重启恢复保留成功/范围外、pending/failed/skipped 批量与幂等、活动导入占用和保护状态;同时验证 matching 不能删除及已排队记录实际执行。最后补充断言后 sybinnercode 全包再跑通过。 - go build ./...:通过。 - Web 单元 5/5:默认日期/清除、混选过滤不自动回写、忙碌/加载/错误/空选、跨日期、失败释放状态。 - 浏览器隔离 mock 5/5:默认今天请求、混选批量/进度、清除范围、跨日期、提交冲突保留重试与无自动重试、列表失败禁用(各用例含多个断言)。此前失败仅测试 mock 缺 avatar 与点击隐藏 checkbox;修正 mock 和点击可见 checkbox 后全部通过,未为测试修改业务逻辑。 - 受影响页面 ESLint、pnpm build:prod、git diff --check 通过;既有 CSS/包体积警告未处理。 - Wiki 在线写入回读、一次 sync 和一次 sync --check:17 页一致。strict 仍因基线 #277 已有未登记镜像 docs/evidence/pdd-home-35727-summary.md 失败,未扩大范围处理。 ### 长期文档 revisions Architecture-and-Code-Map 1e87b8832cecd454e58f0ff49dbe05bbf8d61544 Business-Rules-and-Glossary 214ac317abfef23d71362968d5b30f078fa528b6 Android-Agent-API-Contract da26af9e01087c4970b01783a4807c689fd79d51 Deployment-and-Operations 6d3c599a45813ad844395e93a02832f0d28dd3f5 同步另暴露 docs/12-syb-erp-interface.md 的既有无关 Wiki 差异;没有提交该文件,也未改它的线上页面。 ### 未执行与边界 未合并 main、未发布或重启线上/本地正式实例;无 schema 迁移、新增权限、Android、采购或付款。未对两条记录进行真实匹配/回写,未验证生产 MySQL 高并发和真实浏览器业务操作。工单保持打开待验收,后续合并发布及真实重试需另行授权。Gitea MCP 不可用,按规则回退 API,凭据/原始生产记录未写入工单、源码或文档。
Author
Owner

#350 合并与线上发布完成,待验收(2026-09-29)

用户本轮确认先合并发布 #350;#340 未合并。Gitea MCP 当前不可用,继续采用项目配置的 API,凭据不输出、不入库。

  • main 合并提交:897c1817d28c4cb98c32ca92d553c387cb40c6b0;已推送并核对远端一致。
  • 重新验证:go test ./app/goauto/sybinnercode ./app/goauto/returnmatch ./app/goauto/purchase -count=1 通过;Web 5/5 单元测试、受影响页面 ESLint、pnpm build:prod 通过;Linux amd64 服务端交叉构建通过。此前实施时浏览器 mock 5/5 已通过;本轮未重新做浏览器交互验收。既有 CSS/包体积警告仍在,未扩大修复。
  • 发布目录:/home/goauto/releases/20260929-350-897c181;原版本保留于 /home/goauto/releases/20260928-345-e7c049d。复制线上原配置并保留 static/temp 链接;未修改凭据、权限、定时开关或数据库 schema,未执行迁移。
  • 服务端 SHA-256:db16470a95790434a9a7d239b5ccb32de8b320977d849ae852d9cd72d77e8b2f;发布包 SHA-256:3e7bb155095cce0e5de8e19e81ae3589a00a461376ad8da38734e00c2288eed1。上传后校验一致,原子切换 current,重启 goauto.service;nginx -t 与 reload 通过。
  • 发布前没有 running 采集/采购任务。启动恢复仅收敛原有中断匹配任务及其未完成记录为 failed;所有 updated 记录的状态与更新时间前后完全相同。没有人工 SQL 状态修改、没有新匹配、没有 SYB 远程回写。
  • 外部入口 http://122.228.200.167:9527:首页与 /login、/syb-inner-codes/index 均为 Admin SPA,不是 go-admin 欢迎页;index.html 与本地构建逐字节一致,引用的 10 项入口 JS/CSS 均 200,入库码模块 JS 与新构建一致并包含匹配入口。
  • captcha API 健康、匿名业务访问返回 401、管理员今天范围列表返回业务码 200;服务 active,发布后日志未发现 panic/fatal/1146/1054。
  • 长期规则/API/运维已在本单实现阶段完成 Wiki-first 更新、回读及 sync/check;此次按既有运维流程发布,没有新增长期契约,不重复同步。工单保持开放待验收。

请人工强刷档口入库码页,确认默认今天、匹配按钮及失败项可勾选重新匹配。没有唯一候选时仍须明确失败,不保证重试必然匹配成功;匹配成功也不自动回写。

## #350 合并与线上发布完成,待验收(2026-09-29) 用户本轮确认先合并发布 #350;#340 未合并。Gitea MCP 当前不可用,继续采用项目配置的 API,凭据不输出、不入库。 - main 合并提交:897c1817d28c4cb98c32ca92d553c387cb40c6b0;已推送并核对远端一致。 - 重新验证:go test ./app/goauto/sybinnercode ./app/goauto/returnmatch ./app/goauto/purchase -count=1 通过;Web 5/5 单元测试、受影响页面 ESLint、pnpm build:prod 通过;Linux amd64 服务端交叉构建通过。此前实施时浏览器 mock 5/5 已通过;本轮未重新做浏览器交互验收。既有 CSS/包体积警告仍在,未扩大修复。 - 发布目录:/home/goauto/releases/20260929-350-897c181;原版本保留于 /home/goauto/releases/20260928-345-e7c049d。复制线上原配置并保留 static/temp 链接;未修改凭据、权限、定时开关或数据库 schema,未执行迁移。 - 服务端 SHA-256:db16470a95790434a9a7d239b5ccb32de8b320977d849ae852d9cd72d77e8b2f;发布包 SHA-256:3e7bb155095cce0e5de8e19e81ae3589a00a461376ad8da38734e00c2288eed1。上传后校验一致,原子切换 current,重启 goauto.service;nginx -t 与 reload 通过。 - 发布前没有 running 采集/采购任务。启动恢复仅收敛原有中断匹配任务及其未完成记录为 failed;所有 updated 记录的状态与更新时间前后完全相同。没有人工 SQL 状态修改、没有新匹配、没有 SYB 远程回写。 - 外部入口 http://122.228.200.167:9527:首页与 /login、/syb-inner-codes/index 均为 Admin SPA,不是 go-admin 欢迎页;index.html 与本地构建逐字节一致,引用的 10 项入口 JS/CSS 均 200,入库码模块 JS 与新构建一致并包含匹配入口。 - captcha API 健康、匿名业务访问返回 401、管理员今天范围列表返回业务码 200;服务 active,发布后日志未发现 panic/fatal/1146/1054。 - 长期规则/API/运维已在本单实现阶段完成 Wiki-first 更新、回读及 sync/check;此次按既有运维流程发布,没有新增长期契约,不重复同步。工单保持开放待验收。 请人工强刷档口入库码页,确认默认今天、匹配按钮及失败项可勾选重新匹配。没有唯一候选时仍须明确失败,不保证重试必然匹配成功;匹配成功也不自动回写。
Author
Owner

#350 v2 实施、合并及线上发布完成,待验收

  • 范围仅匹配比较:新增 normalizeMatchLayout,双方去除 CR/LF/TAB 并保留原有首尾 trim;普通内部空格、大小写、货号/标点不变。用于 sourceSKU 对 sku/variationSku、strictStall 与 stallMatches;不改解析、原始数据、规格/数量/占用/唯一候选及回写逻辑。
  • 新增 3 个测试入口,覆盖源端/候选端 CR/LF/CRLF/TAB、原始 sku、不同档口/货号及长码、普通空格/大小写、归一化重复 SKU、SKU/档口冲突,以及完整唯一匹配计划且原始值不变。
  • go test ./app/goauto/sybinnercode ./app/goauto/purchase ./app/goauto/returnmatch -count=1 全部通过;合并后 3 个新增测试再次通过;gofmt、git diff --check、Linux amd64 服务端构建通过。本次无 Web/Android 改动,复用上一发布已验证的 Web 资源,不重复构建。
  • 实现提交 15d331b;main 合并提交 4959f3d17f7aaf4f11deb15484ee8ec8f8c5378d;已推送并回读远端一致。#340 未合并。
  • Wiki Business-Rules-and-Glossary 更新并在线回读 revision c483a1f3fff3144dfad1ae24e6ca0b1de643ac12;一次 sync 与一次 sync --check 通过,17 页一致。仅提交本次规则镜像;docs/12-syb-erp-interface.md 原有无关镜像差异未提交或回写。
  • 线上目录 /home/goauto/releases/20260929-350-v2-4959f3d;原 20260929-350-897c181 保留回滚。服务端 SHA-256 4a980df95a6e27429b62e82f6cbea2646642e6f262ba307243e7a6a82f5cfd59;发布包 SHA-256 dee5056120e7e119fcdb99fd41a238f3e2e92ba6ce38052b1a25308921b2ece4。上传后均回读校验一致,复制原 config/dist/static/temp,不改凭据。
  • 发布前采集、采购和入库码匹配无活动任务;原子切换 current,重启 goauto.service,nginx -t/reload 通过。无需迁移,不改权限、定时开关,不执行订单或付款。
  • 对全部入库码记录做只读前后比较,状态及更新时间完全不变;目标原始换行仍保留。未启动真实重新匹配或 SYB 回写,所以原匹配受限状态暂不自动变化。
  • 外部 Admin SPA 正确且前端 index 与已验证构建相同;captcha 与管理员详情接口正常;服务 active,启动后日志未见 panic/fatal/1146/1054。

人工验收:对原受限记录点击“重新匹配”;唯一候选完整时应转为“可回写”,随后由人工确认回写。真实 SYB 回写与线上高并发未在本轮执行;工单保持开放。Gitea MCP 不可用,按已记录原因使用配置的 API。

## #350 v2 实施、合并及线上发布完成,待验收 - 范围仅匹配比较:新增 normalizeMatchLayout,双方去除 CR/LF/TAB 并保留原有首尾 trim;普通内部空格、大小写、货号/标点不变。用于 sourceSKU 对 sku/variationSku、strictStall 与 stallMatches;不改解析、原始数据、规格/数量/占用/唯一候选及回写逻辑。 - 新增 3 个测试入口,覆盖源端/候选端 CR/LF/CRLF/TAB、原始 sku、不同档口/货号及长码、普通空格/大小写、归一化重复 SKU、SKU/档口冲突,以及完整唯一匹配计划且原始值不变。 - go test ./app/goauto/sybinnercode ./app/goauto/purchase ./app/goauto/returnmatch -count=1 全部通过;合并后 3 个新增测试再次通过;gofmt、git diff --check、Linux amd64 服务端构建通过。本次无 Web/Android 改动,复用上一发布已验证的 Web 资源,不重复构建。 - 实现提交 15d331b;main 合并提交 4959f3d17f7aaf4f11deb15484ee8ec8f8c5378d;已推送并回读远端一致。#340 未合并。 - Wiki Business-Rules-and-Glossary 更新并在线回读 revision c483a1f3fff3144dfad1ae24e6ca0b1de643ac12;一次 sync 与一次 sync --check 通过,17 页一致。仅提交本次规则镜像;docs/12-syb-erp-interface.md 原有无关镜像差异未提交或回写。 - 线上目录 /home/goauto/releases/20260929-350-v2-4959f3d;原 20260929-350-897c181 保留回滚。服务端 SHA-256 4a980df95a6e27429b62e82f6cbea2646642e6f262ba307243e7a6a82f5cfd59;发布包 SHA-256 dee5056120e7e119fcdb99fd41a238f3e2e92ba6ce38052b1a25308921b2ece4。上传后均回读校验一致,复制原 config/dist/static/temp,不改凭据。 - 发布前采集、采购和入库码匹配无活动任务;原子切换 current,重启 goauto.service,nginx -t/reload 通过。无需迁移,不改权限、定时开关,不执行订单或付款。 - 对全部入库码记录做只读前后比较,状态及更新时间完全不变;目标原始换行仍保留。未启动真实重新匹配或 SYB 回写,所以原匹配受限状态暂不自动变化。 - 外部 Admin SPA 正确且前端 index 与已验证构建相同;captcha 与管理员详情接口正常;服务 active,启动后日志未见 panic/fatal/1146/1054。 人工验收:对原受限记录点击“重新匹配”;唯一候选完整时应转为“可回写”,随后由人工确认回写。真实 SYB 回写与线上高并发未在本轮执行;工单保持开放。Gitea MCP 不可用,按已记录原因使用配置的 API。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#350