修复档口入库码匹配空候选崩溃及中断恢复,增加今天默认筛选与批量匹配 #350
Open
opened 2026-09-29 11:33:05 +08:00 by ila
·
3 comments
No Branch/Tag Specified
main
fix/352-syb-source-created
fix/348-reveal-swipe
feat/340-syb-excluded-products
fix/351-inner-code-apply-selection
fix/350-match-layout
fix/350-inner-code-matching
feat/349-batch-return-use
feat/347-batch-return-cancel
feat/345-yeeke-reship
fix/346-root-serves-spa
fix/344-inner-code-stall-match
fix/343-syb-writeback-session
feat/339-syb-page-size
feat/338-return-match
feat/337-yeeke-admin-ui
feat/336-yeeke-return-sync
fix/335-bottom-submit-node
fix/334-spec-probe-top-swipe
fix/333-purchaser-device-owner
fix/331-spec-panel-recognition
fix/330-syb-writeback-session
feat/327-syb-writeback-filter
feat/326-order-information
fix/325-order-result
feat/316-chrome-order-backfill
fix/307-backfill-entry
feat/305-syb-order-writeback
feat/306-order-paid-amount
release/283
fix/283-purchase-mapping-consistency
fix/230-horizontal-spec-selection
feat/263-spec-rematch
fix/262-purchase-handoff
fix/260-261-purchase-readiness
fix/259-partial-collection-link
feat/258-one-click-replace
fix/257-color-normalized-match
fix/256-collection-single-dimension
fix/255-current-page-reidentify
feat/253-one-click-link
fix/254-match-loading
fix/251-syb-spec-candidates
feat/250-continuous-collection
fix/249-local-purchase-diagnostics
fix/248-bottom-submit
fix/247-short-address-panel
fix/246-address-return-panel
fix/245-purchase-failure-diagnostics
fix/244-selected-card-duplicates
fix/243-spec-entry-recovery
feat/242-agent-order-backfill
feat/241-order-backfill-endpoint
fix/239-syb-partial-sync
fix/238-spec-panel-preswipe
feat/237-client-api-keys
feat/236-purchaser-syb-sync
fix/235-syb-pagination-overlap
release/234-integrated
fix/229-address-entry-dedup
fix/228-selection-proof-panel-transition
fix/227-address-panel-return
fix/226-reopen-pdd-on-manual-retry
fix/225-in-place-purchase-retry
fix/224-final-spec-revalidation
fix/223-probed-confirmed-mapping
chore/221-devharness-sync
feat/218-purchase-result-bubble
fix/217-agent-retry-current-spec
fix/216-syb-spec-role-order
feat/215-mandatory-live-spec-probe
feat/214-verified-purchase-actions
fix/212-syb-sync-shop-snapshot
feat/211-spec-entry-ready-wait
feat/210-order-result-payment-transition
feat/209-pdd-bottom-spec-entry
feat/200-ai-match-result-purchase-ready
feat/199-job-execution-logs
feat/198-syb-ai-parse
feat/195-scheduled-spec-auto-match
fix/197-ai-write-timeout
feat/190-syb-inline-correction
fix/193-address-entry-reveal
feat/194-one-click-spec-match
fix/192-order-result-scroll
No results found.
Labels
No items
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: OPC/goauto#350
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
当前状态
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 未恢复。记录缺少候选不是网络超时,不以延长等待或强行匹配处理。顺序、依赖与范围
前置:线上恢复必须在任何旧接口重试前完成;Server 与 Web 共用现有 rematch 契约,不并行处理同条任务。
轻量设计证据 v1(复用现有规范)
既有 Element Plus toolbar 内:文件选择/导入|营业日期范围(今天~今天)|订单/入库码关键字|清除|搜索|匹配 N|回写 N|删除 N;表格复选框保留,以匹配资格过滤勾选,按钮复用原样式,行内重新匹配保留。
正常:勾选有效记录显示数量,单击排队;空/未选:禁用;加载/失败:禁用并保留列表错误;执行中:加载/进度、禁重复;无权限:沿用现有模块访问边界。跨日期提示分日期处理,失败不丢失恢复入口。用户本轮已批准上述最小范围实施,不新增独立页面/完整原型。
验收与验证
风险与授权边界
已授权这两条线上异常数据的定点恢复;未授权任意匹配证据改写、真实回写或采购/付款。正式发布/重启与合并 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。
#350 实施完成,待验收(2026-09-29)
按用户要求先执行线上两条异常状态的定点恢复,再完成代码。恢复只修复状态:旧 worker 已退出、未完成项没有匹配计划或 apply 执行记录;精确条件事务收敛旧 running 批次和两条 pending。恢复后 56 条 updated 的状态及更新时间完全未变,2 条 failed 可重试,SYB 远端写入 0。两条尚未匹配成功,不伪造计划,不调用已知会崩溃的旧接口;真实重试需修复发布后执行。
实现与设计
dd9160e为基线,分支 fix/350-inner-code-matching。源码 9c5e20e,文档 5729ba048f0073320419c2423d518b99f75afbd9,均提交/推送并回读远端。实际验证
长期文档 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)
用户本轮确认先合并发布 #350;#340 未合并。Gitea MCP 当前不可用,继续采用项目配置的 API,凭据不输出、不入库。
请人工强刷档口入库码页,确认默认今天、匹配按钮及失败项可勾选重新匹配。没有唯一候选时仍须明确失败,不保证重试必然匹配成功;匹配成功也不自动回写。
#350 v2 实施、合并及线上发布完成,待验收
人工验收:对原受限记录点击“重新匹配”;唯一候选完整时应转为“可回写”,随后由人工确认回写。真实 SYB 回写与线上高并发未在本轮执行;工单保持开放。Gitea MCP 不可用,按已记录原因使用配置的 API。