# 团购核销记录（GetSiteTableUseDetails） → group_buy_redemption_records 字段映射

> 生成时间：2026-02-14

## 端点信息

| 属性 | 值 |
|------|-----|
| 接口路径 | `Site/GetSiteTableUseDetails` |
| 请求方法 | POST |
| ODS 对应表 | `ods.group_buy_redemption_records` |
| JSON 数据路径 | `data.siteTableUseDetailsList` |

## 字段映射

| JSON 字段 | ODS 列名 | 类型转换 | 说明 |
|-----------|----------|----------|------|
| id | id | int→BIGINT（`parse_int`） | 本条“团购套餐流水”记录的 主键 ID |
| tenant_id | tenant_id | int→BIGINT（`parse_int`） | 租户/品牌 ID |
| site_id | site_id | int→BIGINT（`parse_int`） | 门店 ID，与其它 JSON 中一致 |
| siteName | siteName | string→TEXT（原样） | 门店名称，冗余展示用 |
| table_id | table_id | int→BIGINT（`parse_int`） | 球台 ID |
| tableName | tableName | string→TEXT（原样） | 本次使用券所关联的 球台名称/台号 |
| tableAreaName | tableAreaName | string→TEXT（原样） | 该球台所属的 台区名称 |
| tenant_table_area_id | tenant_table_area_id | int→BIGINT（`parse_int`） | 租户级台区分组 ID，表示当前使用券的台桌所属的区域组合 |
| order_trade_no | order_trade_no | string→TEXT（原样） | 订单交易号，和其它消费明细（台费、商品、助教、团购）共用的订单主键 |
| order_settle_id | order_settle_id | int→BIGINT（`parse_int`） | 结算单 ID（小票结账主键） |
| order_pay_id | order_pay_id | int→BIGINT（`parse_int`） | 指向支付记录表中的支付流水 ID |
| order_coupon_id | order_coupon_id | int→BIGINT（`parse_int`） | 订单中“券使用记录”的 ID |
| order_coupon_channel | order_coupon_channel | int→INT（`parse_int`） | 来自 JSON 导出的原始字段，用于保留业务取值 |
| coupon_code | coupon_code | string→TEXT（原样） | 团购券券码，核销时扫描/录入的字符串 |
| coupon_money | coupon_money | float→NUMERIC(18,2)（`parse_decimal`） | 本次核销时，这张券在门店侧对应的金额额度（“可抵扣金额”） |
| coupon_origin_id | coupon_origin_id | int→BIGINT（`parse_int`） | 平台/上游系统中的券记录主键 ID，“券来源 ID” |
| ledger_name | ledger_name | string→TEXT（原样） | 台费侧关联的“团购项目名称”（记账名） |
| ledger_group_name | ledger_group_name | string→TEXT（原样） | 团购项目所属的“记账分组名称”（例如“团购台费”“团购包厢”等） |
| ledger_amount | ledger_amount | float→NUMERIC(18,2)（`parse_decimal`） | 本次券实际冲抵台费的金额 |
| ledger_count | ledger_count | float→NUMERIC(18,4)（`parse_decimal(scale=4)`） | 按此次优惠实际计算的“核销秒数” |
| ledger_unit_price | ledger_unit_price | float→NUMERIC(18,4)（`parse_decimal(scale=4)`） | 对应台费的标准单价，单位元/小时（从数值来看是类似29.9/小时这种定价） |
| ledger_status | ledger_status | int→INT（`parse_int`） | 流水状态 |
| table_charge_seconds | table_charge_seconds | int→INT（`parse_int`） | 本次结算中该球台总计计费的秒数（整台的台费计费时间） |
| promotion_activity_id | promotion_activity_id | int→BIGINT（`parse_int`） | 团购/促销活动 ID |
| promotion_coupon_id | promotion_coupon_id | int→BIGINT（`parse_int`） | 团购套餐定义 ID |
| promotion_seconds | promotion_seconds | int→INT（`parse_int`） | 团购套餐定义的“标准时长”（券本身标称的可用时长） |
| offer_type | offer_type | int→INT（`parse_int`） | 优惠类型 |
| assistant_promotion_money | assistant_promotion_money | float→NUMERIC(18,2)（`parse_decimal`） | 分摊到“助教服务”的促销金额 |
| assistant_service_promotion_money | assistant_service_promotion_money | float→NUMERIC(18,2)（`parse_decimal`） | 进一步细分助教服务的促销金额 |
| table_service_promotion_money | table_service_promotion_money | float→NUMERIC(18,2)（`parse_decimal`） | 本次券使用中，分摊到“台费服务费”部分的促销金额 |
| goods_promotion_money | goods_promotion_money | float→NUMERIC(18,2)（`parse_decimal`） | 本次券使用中，分摊到“商品”部分的促销金额 |
| recharge_promotion_money | recharge_promotion_money | float→NUMERIC(18,2)（`parse_decimal`） | 来自“充值类优惠”的分摊金额（例如储值赠送部分） |
| reward_promotion_money | reward_promotion_money | float→NUMERIC(18,2)（`parse_decimal`） | 本次促销中，属于“奖励金/积分抵扣”的金额 |
| goodsOptionPrice | goodsOptionPrice | float→NUMERIC(18,2)（`parse_decimal`） | 商品规格价格，用于商品类促销分摊时使用 |
| salesman_name | salesman_name | string→TEXT（原样） | 营业员姓名 |
| sales_man_org_id | sales_man_org_id | int→BIGINT（`parse_int`） | 营业员所属组织 ID |
| salesman_role_id | salesman_role_id | int→BIGINT（`parse_int`） | 营业员角色 ID |
| salesman_user_id | salesman_user_id | int→BIGINT（`parse_int`） | 营业员/业务员用户 ID |
| operator_id | operator_id | int→BIGINT（`parse_int`） | 执行本次核销/结算操作的 操作员 ID |
| operator_name | operator_name | string→TEXT（原样） | 操作员名称（包含角色说明），与 operator_id 对应的冗余展示字段 |
| is_single_order | is_single_order | int→INT（`parse_int`） | 是否单独作为一条订单行 |
| is_delete | is_delete | int→INT（`parse_int`） | 逻辑删除标记（0=否，1=是） |
| create_time | create_time | string→TIMESTAMP（`parse_timestamp`） | 本条团购套餐使用流水创建时间（即券核销时间，或与结账时间接近） |
| assistant_service_share_money | assistant_service_share_money | float→NUMERIC(18,2)（`parse_decimal`） | 助教服务分摊金额（新增字段） |
| assistant_share_money | assistant_share_money | float→NUMERIC(18,2)（`parse_decimal`） | 助教分摊金额（新增字段） |
| coupon_sale_id | coupon_sale_id | int→BIGINT（`parse_int`） | 券销售 ID（新增字段） |
| good_service_share_money | good_service_share_money | float→NUMERIC(18,2)（`parse_decimal`） | 商品服务分摊金额（新增字段） |
| goods_share_money | goods_share_money | float→NUMERIC(18,2)（`parse_decimal`） | 商品分摊金额（新增字段） |
| member_discount_money | member_discount_money | float→NUMERIC(18,2)（`parse_decimal`） | 会员折扣金额（新增字段） |
| recharge_share_money | recharge_share_money | float→NUMERIC(18,2)（`parse_decimal`） | 充值分摊金额（新增字段） |
| table_service_share_money | table_service_share_money | float→NUMERIC(18,2)（`parse_decimal`） | 台费服务分摊金额（新增字段） |
| table_share_money | table_share_money | float→NUMERIC(18,2)（`parse_decimal`） | 台费分摊金额（新增字段） |

## ETL 补充字段

| ODS 列名 | 生成逻辑 |
|-----------|----------|
| content_hash | 对业务字段（排除 ETL 元数据列）计算 SHA-256，用于变更检测与去重 |
| source_file | 固定值：`group_buy_redemption_records.json`，标识原始导出文件 |
| source_endpoint | API 端点路径，如 `Site/GetSiteTableUseDetails` |
| fetched_at | ETL 入库时间戳（`TIMESTAMPTZ DEFAULT now()`） |
| payload | 完整原始 JSON 记录快照（`JSONB NOT NULL`），用于回溯与二次解析 |

## 类型转换规则

- **时间戳**：通过 `TypeParser.parse_timestamp()` 转换，支持 ISO 字符串和 Unix 毫秒时间戳，自动处理时区
- **金额**：通过 `TypeParser.parse_decimal(value, scale=2)` 转换，`ROUND_HALF_UP` 四舍五入
- **整数**：通过 `TypeParser.parse_int()` 转换，`None` 保持为 `NULL`
- **字符串**：原样保留，`None` / 空字符串均存为 `NULL` 或空文本
- **布尔值**：API 返回 `true/false`，ODS 存为 `BOOLEAN` 或 `INT`（0/1）
- **JSONB**：`siteProfile`、`payload` 等复合对象直接以 `JSONB` 类型存储
