SYB 商品展示取消状态,并将退货列改名“匹配退货”及缩窄 #357
Open
opened 2026-10-05 17:13:09 +08:00 by ila
·
5 comments
No Branch/Tag Specified
main
feat/357-syb-cancel-status
feat/356-purchase-order-filter
fix/355-syb-list-timeout
feat/353-syb-shop-multiselect
fix/354-syb-top-pagination
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#357
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.
状态、来源与确认
已实现并部署线上,待用户验收。2026-10-05 用户另行授权合并 main、发布及线上迁移;main
4567a24已发布至 122.228.200.167,迁移 1791200000000 已回读确认。本机业务库未迁移。2026-10-05 用户授权将最新评论整合到标题和正文,并按“只展示状态”实施 #357。本正文 v2 取代原采购拦截方案;历史评论 8803 的采购风险分析保留供后续独立任务参考,8804/8805 与 SynapBus #32 的范围和布局已合入。原始需求:SYB 网站订单取消后,本系统缺少来源状态展示;用户要求“匹配到的退货商品”改名“匹配退货”、宽度缩到当前的 80%,空出宽度用于“SYB状态”。后续确认先不改采购,仅展示;取消判据用 isCancel,允许少量横向滚动。
目标、非目标与影响
基线与代码事实
main e4d4a6fa797c17dab9e7779962cc0ededae10149,2026-10-05 核验。
确定的最小契约
轻量设计 v2(已确认范围,复用现有组件)
确认人:用户;确认时间:2026-10-05;证据:评论 8804/8805 及本轮明确实施授权。小范围列调整,复用现有 Element Plus 表格、标签、加载/失败/空态,无新页面,无需导出独立原型。
前置依赖与顺序
以包含 #353/#354/#355 的 main 为基线;无新增前置单。顺序:同步字段/幂等迁移与接口 → Web → 单测/构建/浏览器 → Wiki/提交/证据。避免与其他分支同时改商品页,不合入无关 #356。实现与测试可在隔离测试库进行;本机业务库、线上库迁移执行及发布需另外授权。
验收与验证(实现验证见评论,用户验收待进行)
文档与安全
长期数据/API/UI说明变化:更新 Architecture-and-Code-Map、Business-Rules-and-Glossary、Android-Agent-API-Contract 对应管理端契约;线上回读 revision,再一轮 sync 与 sync --check。无本地任务快照。历史采购拦截风险留在评论,不纳入实现。
不记录账号/订单原始生产信息;只用脱敏只读状态样本及 mock 测试。本次仅线上迁移与发布已取得授权并执行;本机业务库未迁移。本会话无 Gitea MCP,按规则使用私有安全配置访问 REST API,不暴露凭据。
方案审核意见(2026-10-05,Claude Code,基于 main
e4d4a6f)审核由用户授权,经 SynapBus #goauto 发起;只做方案与范围审核,未改代码。
结论:方向正确,但有 2 个阻塞项,须先修订方案;另有 3 项需要用户决定。 工单引用的代码事实已逐条核对无误(
sybclient/columns.go:27-28,69已请求order_status/is_cancel;sybimport/sync.go组装OrderInput时未带入状态;采购校验中没有取消检查)。阻塞项
B1. 拦截点不能放在提交订单边界(
order-submit-started);在不改 Android 的前提下,这样做会让设备卡死。beforeOrderSubmit中先purchaseStore.markOrderSubmitStarted(...)写本地边界标记,再调用api.markPurchaseOrderSubmitStarted(...)(AgentForegroundService.kt:632-633)。服务端拒绝时,AgentApiException不是执行器捕获的PurchaseLiveException(PurchaseRehearsalExecutor.kt:154-161),会跳出执行流程。订单不会被提交,但本地标记会保留下来。recoverInterruptedPurchases都会重放同一个请求(AgentForegroundService.kt:721-745);服务端再次拒绝时,catch (_: AgentApiException)会继续保留标记(注释说明这是为断网场景设计的)。activeTaskId()会持续返回这个任务(PurchaseTaskStore.kt:227-230),设备一直处于执行中,不再领取新任务。Claim、Start。Android 在 claim/start 成功之后才调用recordRunning(AgentForegroundService.kt:581-588),被拒时由外层catch (AgentApiException)处理,不会留下本地标记。Claim事务里先把任务改成终态、再返回错误,事务回滚会撤销这个修改,设备会反复拿到同一个任务。正确做法:failed加新错误码(例如SYB_ORDER_CANCELLED),不新增状态机状态;Claim/Start只做兜底拒绝。B2. 「明确取消」的判定字段和状态显示的来源尚未确定。
status、order_status、is_cancel三个字段,工单没有确定以哪一个判定取消,也没有orderStatus数字到文字的映射来源。工单写「显示源状态文字」,但上游返回的是数字。is_cancel作为唯一的取消判据。实施前用脱敏的只读样本确认它的取值,例如 1 表示已取消。order_status原值只存档,可放在悬浮提示里。列中只显示三种状态:已取消 / 未取消 / 未获取,不显示没有映射的数字。需要用户决定
width="88"(不用min-width,避免被挤宽),放在订单号后;「匹配退货」改为min-width="160"。表格总宽多出约 48px,靠横向滚动解决。是否接受需要用户确认,不应视为已通过。上游查询时机与失败处理(建议补入方案)
OrderInput带入is_cancel/order_status,同一货运单下的所有明细一起更新,覆盖近期订单。ListByOrderNumber一次只能查一个订单号,批量最多 100 条(purchase/batch.go:21、retry.go:19),所以要限制并发(3~4)、单次超时(约 5 秒)和总预算(约 20 秒)。超出预算的按「核验失败」处理(见 D1)。SYBSessionAuthLease,不新增并发登录。Claim/Start只读已存储的状态,不在事务内调用上游,否则会在持有行锁时发外部请求。可后续优化(不阻塞本单)
测试补充建议
Claim/Start兜底拒绝且不出现回滚陷阱;批量核验的去重、预算超时、核验失败放行或拦截(依 D1)。结论
先修订 B1、B2,并由用户确认 D1~D3 后再实施。其余部分(迁移字段、同步带入状态、已下单事实保留、状态与处理阶段分开表达、Wiki 影响)同意工单原方案。
范围调整(2026-10-05,用户确认)
用户原话:「先不要管采购,先把列加上去。尽量不要横向滚动。」
本单范围改为:仅展示 SYB 状态
is_cancel,实施前用脱敏只读样本核实取值;order_status原值只存档。列中只显示「已取消 / 未取消 / 未获取」三态。D2 按同步结果覆盖,以上游为准;同步失败或缺失时不改动已有状态。布局(替代原 88px 草案)
min-width改为 160(−40);width="72",使用小号标签,表头文字为「SYB状态」;用户确认(2026-10-05)
用户原话:「用isCancel字段来判断是否取消。横向滚动一些也没关系。」
isCancel(t_stock.is_cancel),不使用status/orderStatus判定取消;orderStatus原值可存档。实施前仍用脱敏只读样本核实isCancel的取值含义(哪个值表示已取消),并在实现说明中记录。列中显示「已取消 / 未取消 / 未获取」三态。min-width160、状态列width72,必要时最多 80)。1920 下无横向滚动不再作为硬性验收项,改为在实施说明中记录 1920 和 1440 下的实测效果和截图。SYB 订单取消状态同步与采购拦截,新增 SYB状态列并压缩匹配退货列to SYB 商品展示取消状态,并将退货列改名“匹配退货”及缩窄实现交付与验证(2026-10-05,待验收)
实现与范围
按正文 v2 严格只做展示,无采购/重试/Claim/Start/Android 代码变化,无权限、任务状态或外部订单写入。分支
feat/357-syb-cancel-status已提交推送,工作区干净。d6639a4a0d6954b678822fbc1ce2a9603105073f90e9fa7e79a298de362d0c0168ac5b7bfd583f3bserver/cmd/migrate/migration/version-local/1791200000000_syb_cancel_status.go;仅在隔离 SQLite 测试中执行,未执行本机业务库或线上库迁移。sybIsCancelled/sybStatusSyncedAt随正常同步导入,JSON 明确返回 false/null;有效 0 可覆盖 1,缺失/无效值不更新旧状态与时间。isCancel=1、类型数值;既有本地 HAR/am/stock/list中 20 条为数值 0。没有重新登录、触发同步或写生产数据库,也未保存原始响应。测试结果
go test ./app/goauto/sybclient ./cmd/migrate/migration/version-local -count=1通过;go build ./...通过。e4d4a6f复跑,失败名称完全一致;并非宣称全包通过。排除这 12 项后,sybimport、sybclient、version-local 三包测试通过。既有失败涉及角色纠正/AI 解析/旧 uncertain 预期/重解析与查询预期,本单未修改:pnpm run build:prod通过;既有 CSS minifier / chunk size 警告保留。受改 Vue 文件 ESLint 为 0 error / 0 warning,与 main 一致;未声称全仓 lint 通过。syb-cancel-status、syb-product-layout、syb-return-cancel、syb-return-confirm共 29 项:28 通过,1 项既有失败。唯一失败“去重后超过100个PDD商品”预期按钮启用,但当前 main 已禁用超限按钮;重新构建 main 后单独复现同一失败,不修改无关测试/功能。原批量使用、取消、混选、权限、分页回归通过。git diff --check通过。harness.py check --strict仍有 main 既有问题:未登记镜像docs/evidence/pdd-home-35727-summary.md,本单不修旁支问题。Wikisync和sync --check各执行一轮,17 个映射页面一致。实测截图(全部 mock,无生产/个人数据)
截图为指定视口下的 full-page 截图,长文本会增加行高。1920 下表格可完整展示,1440 下沿用表格内部横向滚动。表头和“已取消”标签均单行完整显示。
Wiki revision
f38dbf924894686f3ac1f91b669163ea11fc862bbfb8d7abd4d11466fc107ef8f26e0abf5ab13f41730ddd7a4596a1ff3ed20395f84a9f0760af1d23镜像遵循线上事实完整同步,包含此前线上已存在、明确标记分支未发布的 #356 文档;没有合入 #356 代码。
未执行与下一步
未合并 main、未重启业务服务、未发布、未执行本机/线上 MySQL 迁移、未触发真实 SYB 同步或采购;临时 mock 预览服务已停止。正式 MySQL 迁移及真实同步页面仍需后续授权验证。仅重启旧服务不会生效;需后续合并、迁移、构建发布。旧订单状态只在同步到对应创建日期范围后更新,未获取记录显示“未获取”。用户验收前保持开放。
授权合并、线上迁移与发布完成(2026-10-05,待用户验收)
用户先授权“#357合并main,发布到线上”,后明确“授权迁移”。本次只针对 122.228.200.167 线上 Server/Web 和 #357 追加迁移;本机业务库、Android 和真实业务执行不在范围。
4567a24f05c9307d66d189a1fd28225b98b2a16e,Server/Linux amd64 与 Web 从该提交构建;原实现与回归结果见评论 8811,既有失败没有隐去。合并后相关 Go 定向测试、Linux 构建、Web 生产构建通过。/home/goauto/releases/20261005-4567a24-357,current 已切换,goauto.service 重启 active。旧发布/home/goauto/releases/20261005-ddc18f5-353-355保留用于代码回滚;共享 static/temp/var 未删除或覆盖。1791200000000。使用 MySQL 8.4.8 mysqldump 完成服务器内 single-transaction 备份,目录/home/goauto/backups/20261005-3570700、database.sql 0600。迁移返回0,使用新数据库会话回读确认 sys_migration 和 nullable tinyint(1)/datetime(3) 两列,待迁移集合为空。没有执行其他版本或历史状态补值。73f169cc8091c34dac29f76b6125e68596b54517a18c4e1c7507a3f02f1dbd5d;Web包 SHA2563edd072d0e44a8ea9768ba906f603c84ca872fad3f553ee91aff0815b58ab488。文档闭环
线上 Wiki 已更新并回读,sync / sync --check 各一轮通过(17页),镜像提交
b787473429a21069eb929eacc1a088800c43250a已推送 main;该提交仅文档,不需重新发布运行包。570383858b934c4d0550f2dff7b755f1dd9628888ee23d9c80ebba3cb6cff51e8e25eb1579ab9ac75818776a54c3784fbe5d691d830920f9b8f8b88884231a25479bb6563645f5b8104805d4f5336349待验收与限制
刷新线上 SYB 商品页检查状态列和缩窄的“匹配退货”。历史数据先显示“未获取”,只有正常同步覆盖对应来源日期、取得有效 isCancel 后才更新;本次没有额外触发真实同步,所以不宣称线上真实三态端到端已验收。只展示状态,不阻止已取消订单采购。未做本机业务库迁移,未修改或安装 Android。用户确认前保持工单开放。