初始提交:飞球 ETL 系统全量代码
This commit is contained in:
731
docs/api-reference/endpoints/group_buy_packages.md
Normal file
731
docs/api-reference/endpoints/group_buy_packages.md
Normal file
@@ -0,0 +1,731 @@
|
||||
# 团购套餐定义(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,枚举。
|
||||
|
||||
观测值:
|
||||
|
||||
1:13 条
|
||||
|
||||
3:4 条
|
||||
|
||||
含义(结合命名和数据特征推断):
|
||||
|
||||
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,枚举。
|
||||
|
||||
观测值:
|
||||
|
||||
1:13 条
|
||||
|
||||
2:4 条
|
||||
|
||||
含义(推测):
|
||||
|
||||
内部业务子类型,具体含义需要结合系统文档;仅从数据无法确定是“台费类 vs 包厢类”还是“平台套餐 vs 自定义套餐”。
|
||||
|
||||
结构上:此字段用来进一步细分团购套餐类别,有两种子类型。
|
||||
|
||||
8. 其他字段
|
||||
|
||||
duration
|
||||
|
||||
类型:int
|
||||
|
||||
观测值(秒):
|
||||
|
||||
3600(1 小时)
|
||||
|
||||
7200(2 小时)
|
||||
|
||||
14400(4 小时)
|
||||
|
||||
含义:套餐内包含的时长(秒)。
|
||||
|
||||
与名称一致:
|
||||
|
||||
“一小时”类套餐 → 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”的模式(如台区、门店、套餐名称),有利于在不做联表查询的情况下直接展示内容。
|
||||
Reference in New Issue
Block a user