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

732 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 团购套餐定义QueryPackageCouponList
> 自动生成于 2026-02-13 | 数据来源:本地 JSON 样本
## 基本信息
| 属性 | 值 |
|------|-----|
| 接口路径 | `PackageCoupon/QueryPackageCouponList` |
| 完整 URL | `https://pc.ficoo.vip/apiprod/admin/v1/PackageCoupon/QueryPackageCouponList` |
| 请求方法 | `POST` |
| Content-Type | `application/json` |
| 鉴权方式 | Bearer Token`Authorization` 头) |
| 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 的创建时间。
2. 金额与价值字段
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 典型用法是当作“无限次”的哨兵值。
即当前所有套餐在配置上不限制使用次数(只受时间、日期等条件限制)。
3. 有效期与日期限制相关字段
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 字符串或编码)。
当前几乎空置,说明本门店在团购套餐上并未配置复杂日期规则。
结构意义:这是将来可以支持“指定日期才能使用”的扩展字段。
4. 每日时段限制相关字段
这几个字段控制“每天什么时间段可以使用该套餐”。
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 这样的组合。
5. 区域 / 台桌限制相关字段
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 / 空串)。
6. 适用卡种相关字段
card_type_ids
类型int
观测值:全部为 0。
含义(推测):
原意是“适用会员卡类型 ID 列表”,例如某套餐只允许某几种会员卡使用,可以在此配置。
当前统一为 0说明未限定卡种任何顾客/任何会员卡均可按平台规则使用该团购券。
结构上:这是一个“未来可以细化到卡种”的扩展字段,本店目前未用。
7. 状态 / 类型类字段
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 自定义套餐”。
结构上:此字段用来进一步细分团购套餐类别,有两种子类型。
8. 其他字段
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”的模式如台区、门店、套餐名称有利于在不做联表查询的情况下直接展示内容。