Files
ZQYY.FQ-ETL/docs/api-reference/endpoints/group_buy_packages.md

20 KiB
Raw Permalink Blame History

团购套餐定义QueryPackageCouponList

自动生成于 2026-02-13 | 数据来源:本地 JSON 样本

基本信息

属性
接口路径 PackageCoupon/QueryPackageCouponList
完整 URL https://pc.ficoo.vip/apiprod/admin/v1/PackageCoupon/QueryPackageCouponList
请求方法 POST
Content-Type application/json
鉴权方式 Bearer TokenAuthorization 头)
ODS 对应表 group_buy_packages
分页方式 page + limit(最大 100
时间范围 不需要

请求参数

参数名 类型 示例值 说明
areaId array [] 区域 ID 列表(空=全部)
commonShowStatus int 1 展示状态1=展示中)
offlineCouponChannel int 0 线下券渠道0=全部)
systemGroupType int 1 系统分组类型1=默认)
page int 1 页码(从 1 开始)
limit int 100 每页条数(最大 100

响应字段(共 35 个)

# 字段名 类型 示例值
1 site_name string '朗朗桌球'
2 effective_status int 1
3 id int 2939215004469573
4 site_id int 2790685415443269
5 tenant_id int 2790683160709957
6 package_name string '早场特惠一小时'
7 table_area_id string '0'
8 table_area_name string 'A区'
9 selling_price float 0.0
10 duration int 3600
11 start_time string '2025-10-27 00:00:00'
12 end_time string '2026-10-28 00:00:00'
13 is_enabled int 1
14 is_delete int 0
15 type int 2
16 package_id int 1814707240811572
17 usable_count int 9999999
18 create_time string '2025-10-27 18:24:09'
19 creator_name string '店长:郑丽珊'
20 tenant_table_area_id string '0'
21 table_area_id_list string ''
22 tenant_table_area_id_list string '2791960001957765'
23 start_clock string '00:00:00'
24 end_clock string '1.00:00:00'
25 add_start_clock string '00:00:00'
26 add_end_clock string '1.00:00:00'
27 date_info string ''
28 date_type int 1
29 group_type int 1
30 usable_range string ''
31 coupon_money float 0.0
32 area_tag_type int 1
33 system_group_type int 1
34 max_selectable_categories int 0
35 card_type_ids string '0'

新增字段(相对本地 JSON 样本)

以下字段在最新 API 响应中出现,但本地 JSON 样本中不存在:

字段名 类型
is_first_limit int
sort int
tableAreaNameList array
tenantCouponSaleOrderItemId int
tenantTableAreaIdList array

详细字段分析

以下内容迁移自旧版 group_buy_packages-Analysis.md,包含字段的业务含义、枚举值、跨表关联等详细说明。

一、文件整体内容与结构

内容类型:

该文件记录的是 “团购套餐定义列表”即门店可用的各类团购套餐早场一小时、斯诺克两小时、KTV 四小时等)的配置。

每一条记录对应一种团购套餐的“规则定义”,包括:

套餐名称;

面值coupon_money

有效起止日期;

每日可用时间段;

限定台区;

状态(上架/下架/是否过期)等

二、记录级字段完整说明

下面对 packageCouponList 中每条记录的 35 个字段逐一说明,按业务逻辑分组。

  1. 基本信息与主键类字段

id

类型int

含义:门店侧套餐 ID本文件内部的主键。

特点17 条记录中均为不同的大整数 ID。

关联(结构推断):

平台验券记录表中常见 group_package_id 字段,通常会指向这里的 id平台券核销记录指向哪一个团购套餐配置。

tenant_id

类型int

含义:租户 ID品牌/商户 ID

特点:全表值相同,说明所有套餐定义属于同一商户(同一品牌)。

site_id

类型int

含义:门店 ID。

特点:全表值相同,且与其他 JSON 文件中的 site_id 一致,对应“朗朗桌球”这家门店。

site_name

类型string

含义:门店名称。

观测值:全部为 "朗朗桌球"。

说明:这是对 site_id 的冗余,可直接展示门店名称。

package_id

类型int

含义:“上层套餐 ID” 或“总部/系统级套餐 ID”。

特点:

多个 id 不同的记录可能共享同一个 package_id表示同一种业务套餐在不同门店或不同版本下的本地配置。

在本门店数据里package_id 和 id 不是一一对应的,有复用情况。

package_name

类型string

含义:团购套餐名称,用于前台展示和核销界面。

示例:

"早场特惠一小时"

"B区桌球一小时"

"午夜一小时"

"中八、斯诺克包厢两小时"

"助理教练竞技教学两小时"

"KTV欢唱四小时"

"麻将 、掼蛋包厢四小时"

说明可以从名称直观看出这是台费类、包厢类、助教教学类、KTV 类等不同套餐。

creator_name

类型string

含义:创建人信息,一般包含“角色:姓名”。

示例:"管理员:郑丽珊"

说明:用于追溯是谁在后台创建了该团购套餐,方便权限追踪。

create_time

类型string格式 YYYY-MM-DD HH:MM:SS

含义:该套餐在系统中创建的时间。

特点:每条记录各不相同,覆盖了 2025-07 至 2025-10 的创建时间。

  1. 金额与价值字段

selling_price

类型float

观测值:所有记录均为 0.0。

含义(结合字段命名):

语义上应该是“团购售卖价”(顾客在平台购买券时的成交价格)。

本门店这份导出中全部为 0说明

要么平台实际售卖价保存在别的表/平台侧,并未在本地落地;

要么这个字段在当前版本中未被使用。

结构结论:这是一个预留的价格字段,但当前数据源没有真实值。

coupon_money

类型float

含义:券面值或内部结算面值,表示该套餐在门店侧对应的金额额度。

示例(对应套餐名称):

早场特惠一小时 → coupon_money = 40.0

全天A区中八一小时 → 80.0

KTV欢唱四小时 → 200.0

麻将 、掼蛋包厢四小时 → 160.0

使用方式(结构层面):

当平台验券或套餐流水使用该套餐时,会根据这个金额执行抵扣记账,即“本券在店内能抵扣多少金额”。

usable_count

类型int

观测值:所有记录均为 9999999。

含义:可使用次数上限。

数据特征说明:

9999999 典型用法是当作“无限次”的哨兵值。

即当前所有套餐在配置上不限制使用次数(只受时间、日期等条件限制)。

  1. 有效期与日期限制相关字段

start_time

类型string格式 YYYY-MM-DD HH:MM:SS

含义:套餐开始生效的日期时间。

示例:"2025-07-20 00:00:00" 等。

说明:一般是某天的 00:00:00表示从该日开始可以使用此套餐。

end_time

类型string格式同上。

含义:套餐失效的日期时间(到这个时间点后不可使用)。

示例:形如 "2025-11-30 23:59:59",部分记录使用 9999-12-31 23:59:59 风格的极大日期表示长期有效(本数据中如有这种值,可解读为“长期有效”)。

date_type

类型int枚举。

观测值:全部为 1。

含义(推测):

典型用法:区分“全部日期可用 / 工作日 / 周末 / 指定日期”等。

当前数据全部为 1可能表示“通用每天都可以使用”。

结构上:这是一个日期限制类型枚举字段,但本门店所有套餐统一设置为同一类型。

usable_range

类型string

观测值:全部为空字符串 ""。

含义(推测):

一般用于文字描述可用日期范围(例如“周一至周五”)。

当前全部为空,说明没有填写文字说明,只依赖 date_type 或其他逻辑限制。

date_info

类型string

观测值:绝大多数为 "",只有一条为 "0"。

含义(推测):

预留字段,通常用来存储更细粒度的日期信息,如具体日期列表、节假日特殊规则(可能是 JSON 字符串或编码)。

当前几乎空置,说明本门店在团购套餐上并未配置复杂日期规则。

结构意义:这是将来可以支持“指定日期才能使用”的扩展字段。

  1. 每日时段限制相关字段

这几个字段控制“每天什么时间段可以使用该套餐”。

start_clock

类型string

观测值示例:

"10:00:00"

"00:00:00"

含义:每日可用起始时间点(第一段)。

说明:配合 end_clock 使用,定义一个日内时段。

end_clock

类型string

观测值示例:

"18:00:00"

"23:59:00"

"23:59:59"

含义:每日可用的结束时间点(第一段)。

结构说明:

与 start_clock 一起构成 [start_clock, end_clock] 这段时间内可以核销使用该券。

add_start_clock

类型string

观测值:

"00:00:00"15条

"10:00:00"2条

含义(推测):附加可用时间段的起始时间(第二段)。

例如有的套餐可以在两个不连续的时段使用:早场 + 夜场,则可用第一段 start_clock / end_clock 和第二段 add_start_clock / add_end_clock 组合。

add_end_clock

类型string

观测值:

"1.00:00:00"15条

"18:00:00"1条

"23:59:00"1条

特别注意:

"1.00:00:00" 这种格式明显是 “天.时:分:秒” 的表示方式,即“第 1 天的 00:00:00”也就是跨日截止比 00:00:00+1天

用来定义“跨午夜”的可用区间,比如从晚上 18:00 一直用到第二天 0 点。

含义:附加时段结束时间,多数情况配合 "00:00:00" 或 "10:00:00" 使用。

整体理解:

start_clock / end_clock第一时间段。

add_start_clock / add_end_clock第二时间段当 add_end_clock 是 "1.00:00:00" 时,可以认为是从当天某时刻到次日凌晨。

当前配置中,大部分套餐是“全天可用 + 夜场延伸”的模式,因此看到 00:00:00 → 1.00:00:00 这样的组合。

  1. 区域 / 台桌限制相关字段

area_tag_type

类型int枚举。

观测值:全部为 1。

含义(推测):区域标记类型:

1 很可能代表“按台区标签限制”,例如 A区、中八区、包厢、KTV 等。

由于没有看到其它值,具体枚举含义需结合系统配置,但可以确认:这个字段是“区域约束的模式选择”。

table_area_name

类型string

观测值:(举例)

"A区中八"、"B区中八"、"斯诺克"、"包厢"、"KTV" 等。

含义:套餐适用的“门店台区名称”,用于显示和筛选。

说明:这个字段是对区域 ID 维度的文字描述,便于直观理解。

table_area_id

类型int

观测值:全部为 0。

含义(推测):

原始设计应为“单一台区 ID”当套餐只限一个区域可以用这个字段存储。

但当前版本已经使用“列表字段”进行多选,导致单值字段全部为 0未启用

tenant_table_area_id

类型int

观测值:全部为 0。

含义(推测):

与 table_area_id 类似,是租户层级的台区 ID原本用于单区选择。

由于引入多选逻辑后,实际使用转移到 tenant_table_area_id_list 字段,这里被弃用。

tenant_table_area_id_list

类型:在导出中为 int 类型(严格看是数字,但语义上是“多选集合”)。

观测值:每条记录都是一个不同的大整数(例如 2791960001957765, 2791960521691013 等)。

含义(推测):

实际代表“台区集合 ID”或“租户台区配置 ID”用来限制套餐可用的台区范围。

设计上是可以支持多个区域因此字段名用了“list”但在当前数据中每个套餐只有一组区域组合所以存的是单一 ID。

结构逻辑:

套餐定义 → tenant_table_area_id_list → 台区分组表(未在本次导出中看到,但可推断存在),该分组中包含实际的一个或多个 table_area_id。

table_area_id_list

类型string

观测值:全部为空字符串 ""。

含义(推测):

用来存放具体台区 ID 列表(例如 "1,2,3"),实现更细粒度的台桌限制。

当前门店的配置可能只用了“台区分组”而没有配置到具体单个台号,因此留空。

总结区域字段结构:

area_tag_type选择约束方式这里统一为 1表示按台区标签

table_area_name文字名称给人看的。

tenant_table_area_id_list真正起约束作用的 ID指向台区分组

table_area_id / tenant_table_area_id / table_area_id_list历史单选/多选字段,当前配置中未实际使用(全部为 0 / 空串)。

  1. 适用卡种相关字段

card_type_ids

类型int

观测值:全部为 0。

含义(推测):

原意是“适用会员卡类型 ID 列表”,例如某套餐只允许某几种会员卡使用,可以在此配置。

当前统一为 0说明未限定卡种任何顾客/任何会员卡均可按平台规则使用该团购券。

结构上:这是一个“未来可以细化到卡种”的扩展字段,本店目前未用。

  1. 状态 / 类型类字段

is_enabled

类型int枚举。

观测值:全部为 1。

含义:启用状态。

从其他表的统一风格来看1 一般表示“启用 / 上架”2 表示“停用 / 下架”。

当前数据全部为 1说明导出时所有 17 个套餐处于“启用”状态(但是否“有效”,还要看 effective_status

is_delete

类型int枚举。

观测值:全部为 0。

含义:逻辑删除标志。

0正常

1已删除仅逻辑删除数据仍保留

当前没有任何套餐被标记为删除。

effective_status

类型int枚举。

观测值:

113 条

34 条

含义(结合命名和数据特征推断):

1有效在当前时间区间内、配置正常可核销使用

3已过期或失效虽然 is_enabled 仍为 1但由于 end_time 已过期,或其他原因,被标记为不可用)。

说明is_enabled 更偏向“是否上架配置”effective_status 是动态计算出的“当前是否处于可用状态”。

group_type

类型int枚举。

观测值:全部为 1。

含义(推测):

团购类型,例如:

1计时类/台费类套餐;

其他值:可能用于区别商品类、代金券类等。

本门店所有 17 个套餐的 group_type 均为 1说明都归于同一大类。

system_group_type

类型int枚举。

观测值:全部为 1。

含义(推测):

系统内对团购类型更底层的划分,比如:

1券码类团购需要凭码核销

其它类型:如卡内套餐、内部套餐等。

当前全部为 1说明这些套餐都属于同一系统团购类型标准券类

type

类型int枚举。

观测值:

113 条

24 条

含义(推测):

内部业务子类型,具体含义需要结合系统文档;仅从数据无法确定是“台费类 vs 包厢类”还是“平台套餐 vs 自定义套餐”。

结构上:此字段用来进一步细分团购套餐类别,有两种子类型。

  1. 其他字段

duration

类型int

观测值(秒):

36001 小时)

72002 小时)

144004 小时)

含义:套餐内包含的时长(秒)。

与名称一致:

“一小时”类套餐 → 3600

“两小时”类 → 7200

“四小时”类 → 14400

结构用途:当券被核销时,可以用 duration 直接换算成应赠送/应抵扣的台费时间。

usable_range

已在日期部分说明(文字描述),这里只列入清单。

三、与其他 JSON 文件的结构关联(字段层面)

虽然你这次只问这一个文件,但按照结构分析的习惯,简单标一下这个“团购套餐定义表”和其它数据之间的关系:

与门店/租户维度:

tenant_id、site_id、site_name

与所有其他 JSON台费流水、助教流水、门店销售记录、库存、会员等的同名字段一致。

用于在多门店部署场景下按门店过滤数据。

site_name 冗余,但在所有记录中保持为“朗朗桌球”。

与平台验券记录(平台验券记录.json

验券记录中有 group_package_id 字段(我们之前已分析过),对应这里的 id

platform_coupon_use.group_package_id = 团购套餐.id

这样,验券记录知道:某张券是按照哪一个“团购套餐配置”被核销的,从而可以根据这里的 duration、coupon_money、时段限制等字段判断是否符合规则。

与团购套餐流水(团购套餐流水.json

团购套餐流水记录单笔订单中某个券/套餐的使用情况。

从字段命名风格看,流水记录会引用:

套餐名称(冗余 ledger_name / package_name

券码 coupon_code 与验券记录相连;

通过验券记录的 group_package_id 再指向本表的 id。

结构链路大致为:

团购套餐定义(本文件) → 平台验券记录券码与套餐ID → 团购套餐流水(订单明细里的券使用记录)。

与台桌/台区配置(台桌列表、台区配置相关 JSON

tenant_table_area_id_list 与台区配置表中的“台区组合 ID”关联。

table_area_name 与台区配置中 area_name 字段含义吻合A区中八/B区中八/斯诺克/KTV/包厢等)。

通过该关联,系统在核销时可以校验:

当前使用的台桌所属区域是否在该套餐允许的区域范围内。

与会员卡/储值卡体系:

card_type_ids 字段设计上用来限制“哪些卡种可以用这个团购套餐”。

当前值均为 0表示不限卡种。但一旦 >0则应该可以通过该字段与“卡类型定义表”关联本次导出中没有单独的卡种定义 JSON只有储值卡列表此处只能从结构上推断

四、结构层面的一些重要线索(非业务/盈利分析)

从字段设计和实际值可以看出一些系统设计上的特点和潜在规则:

“无限次”通过大数哨兵实现:

usable_count = 9999999 明显是一个“无限使用次数”的标记,而不是一个有业务意义的真实上限。

这类字段如果未来要限制使用次数,只需把这个值改成有限数即可。

时间段支持跨日和双时段:

start_clock / end_clock + add_start_clock / add_end_clock 的组合,以及 add_end_clock 中的 "1.00:00:00",表明系统支持:

单日内多段时间限制;

跨午夜的可用时间段,比如“晚场到第二天凌晨”的场景。

这种设计比简单的 HH:MM 模式更灵活,但也更复杂。

区域限制采用“分组 ID + 名称”双层设计:

单值字段 table_area_id、tenant_table_area_id 已基本弃用全为0实际使用的是 tenant_table_area_id_list 配合 table_area_name。

这种设计允许一个套餐适用多个具体区域,而不仅仅是一个;只是本数据中每个套餐只有一个区域组合 ID尚未用到真正的“多选”能力。

状态字段拆成“启用/删除/有效”:

is_enabled是否上架配置层面

is_delete是否逻辑删除数据层面

effective_status是否在当前时间点视为有效动态计算结果

这种三层拆分便于保留历史配置is_delete和允许“预设但未到期/已过期”的套餐effective_status

价格字段“selling_price”目前未落地

所有记录 selling_price = 0.0,但 coupon_money 有实际金额。

这说明在门店数据里只关心“券在店内的抵扣价值”coupon_money而“平台对顾客的售卖价格”可能在外部系统团购平台或其他表中维护。

从结构上看,这保留了未来把平台售价同步到本地的扩展空间。

卡种限制预留但未使用:

card_type_ids = 0 表明目前团购套餐未限制特定卡种。

一旦业务需要特定会员卡才能享用某些团购,可以通过非零值(以及列表编码)实现,同样是结构级扩展。

字段命名的一致性与冗余:

site_id + site_name 的组合和其他 JSON 一致,说明整个系统在多模快数据里都采用相同的门店维度标识。

多个字段采用“xxx_id + xxx_name”的模式如台区、门店、套餐名称有利于在不做联表查询的情况下直接展示内容。