ListReturnPackages (app/goauto/yeeke/list.go) gains a single bounded LEFT JOIN onto return_match (active match only) and syb_product, plus a matchStatus query param (unmatched/matched/confirmed — invalid values are rejected, not ignored). ReturnItemRowDTO now carries matchId/matchStatus/occupyingSybProductId/occupyingSybOrderCode/ occupyingSybStage(+Label). The occupying SYB product's current stage label is filled from one extra bounded purchase.NewService(db). ProcessStages call over the page's distinct occupying SYB ids — not a per-row lookup — so the yeeke returns page's new 匹配状态 filter and 被占用 SYB 订单商品 column need no N+1 query. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NTDbDcwbDw1TSAcE6wfh2F