Files
shaguabijia-app-server/docs/api/meituan/meituan-top-sales.md
T
左辰勇 a2270ee1b2 功能:新手引导视频 + 美团券首页分页索引
新手引导视频:运营后台上传 MP4(上限 100MB,魔数校验只认 ISO BMFF),
App 端在领券等候浮层前 N 次以引导视频替代广告。新增 guide_video
的 model/schema/repository/router(App 侧 + 后台侧)与播放记录表迁移。

美团券:首页「销量最高 / 智能推荐」两个 tab 改游标分页,配套两条
(city_id, dedup_key, 排序键 DESC) 复合索引,让 Postgres 顺着索引流式
去重,免掉每翻一页重排整城券的开销。美团 CPS client 在 lifespan 预热
并在关闭时释放连接池。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 22:50:44 +08:00

2.3 KiB
Raw Blame History

POST /api/v1/meituan/top-sales — 销量最高(离线库)

所属:美团 CPS 组(前缀 /api/v1/meituan,全部无鉴权) | 鉴权:无 | ← 返回 API 索引

数据来自离线库 database/meituan_coupon;不实时打美团(美团搜索对销量排序支持差、且有 402 限流)。

入参

字段 类型 必填 默认 说明
page int 1 ≥1
page_size int 20 150
platform int | null null 1 只外卖 / 2 只到店 / 不填=全部
longitude / latitude float | null (实际必带) null 设备坐标(#116):服务端离线反查城市(utils/geo + meituan_city)→ 只返回同城券;老客户端不带坐标 → 返空 + status=degraded(不 422、不误返全城)

出参

响应 200:{ items: CouponCard[], has_next: bool, search_id: null, status: "ok"|"empty"|"degraded" }CouponCardAPI 索引;status 语义见 feed 接口

说明

  • meituan_couponsale_volume_num 非空 city_id = 反查城市 的券(#116,同城销量榜),DISTINCT ON(dedup_key) 跨源去重(每个「品牌|名|价」只留销量最高一条,同销量再按佣金),按销量降序分页;每页只对当前 ~20 条做 from_raw 解析(翻页快,不全表拉取)。
  • 分页查询分两步(与 rec 共用 _paged_dedup_ids):① 只在 id + 排序键 这几个小列上去重/排序/分页,② 再按 id 回表取本页 rawraw 是整条美团原始返回(JSONB,每行数 KB),让它参与排序会把整城数据推过 work_mem、落盘做外部归并,而且每翻一页都重来一遍 —— 这是此前「滑到底越来越慢」的主因之一。配套索引 ix_meituan_coupon_city_dedup_sales / ..._comm(见 alembic/versions/meituan_coupon_feed_indexes.py)让 DISTINCT ON 顺着索引流式去重,免掉排序。
  • 不依赖 MT 凭证(纯库查询)。库为空(prod 刚部署 / ETL 未跑完)→ status=empty;库查询异常 → status=degraded。均返 200、不抛 5xx。
  • 仅 PostgreSQL(DISTINCT ON 为 PG 专用)。

错误码

无业务级错误码:库空 / 异常都返 200 + 空 items + 对应 status