微信小程序页面迁移校验之前 P5任务处理之前

This commit is contained in:
Neo
2026-03-09 01:19:21 +08:00
parent 263bf96035
commit 6e20987d2f
1112 changed files with 153824 additions and 219694 deletions

View File

@@ -0,0 +1,87 @@
# group_buy_package_details 团购套餐详情
> 生成时间2026-03-05
## 表信息
| 属性 | 值 |
|------|-----|
| Schema | ods |
| 表名 | group_buy_package_details |
| 主键 | coupon_id |
| 数据来源 | `QueryPackageCouponInfo` 详情接口(二级拉取) |
| DDL 路径 | `db/etl_feiqiu/ods/group_buy_package_details.sql` |
| 说明 | 团购套餐详情 ODS 层,存储每个 couponId 的详情原始数据 |
## 数据获取方式
本表数据通过 `ODS_GROUP_PACKAGE` 任务的 **detail_endpoint 二级详情拉取** 子流程获取:
1. 主流程先从 `QueryPackageCouponList` 拉取团购列表写入 `ods.group_buy_packages`
2. 子流程遍历列表中每个 `id`,串行调用 `QueryPackageCouponInfo` 获取详情
3. 详情数据写入本表,采用全量快照模式(`SnapshotMode.FULL_TABLE`UPSERT on `coupon_id`
## 字段说明
| 序号 | 字段名 | 类型 | 可空 | 说明 |
|------|--------|------|------|------|
| 1 | coupon_id | BIGINT | NOPK | 团购套餐 ID= groupPurchasePackage.id |
| 2 | package_name | TEXT | YES | 团购套餐名称 |
| 3 | duration | INTEGER | YES | 台费计时时长(秒) |
| 4 | start_time | TIMESTAMPTZ | YES | 可用日期开始 |
| 5 | end_time | TIMESTAMPTZ | YES | 可用日期结束 |
| 6 | add_start_clock | TEXT | YES | 可用时段开始(如 "00:00:00" |
| 7 | add_end_clock | TEXT | YES | 可用时段结束(如 "1.00:00:00" |
| 8 | is_enabled | INTEGER | YES | 是否启用1=启用, 0=禁用) |
| 9 | is_delete | INTEGER | YES | 是否已删除1=已删除, 0=正常) |
| 10 | site_id | BIGINT | YES | 店铺 ID |
| 11 | tenant_id | BIGINT | YES | 租户 ID |
| 12 | create_time | TIMESTAMPTZ | YES | 创建时间 |
| 13 | creator_name | TEXT | YES | 创建人 |
| 14 | table_area_ids | JSONB | YES | 可用台区 ID 列表(来自 groupPurchasePackage.tableAreaId |
| 15 | table_area_names | JSONB | YES | 可用台区名称列表(来自 groupPurchasePackage.tableAreaNameList |
| 16 | assistant_services | JSONB | YES | 助教服务关联数组(来自 packageCouponAssistants |
| 17 | groupon_site_infos | JSONB | YES | 关联门店信息数组(来自 grouponSiteInfos |
| 18 | package_services | JSONB | YES | 套餐服务数组(来自 packagePackageService待调研 |
| 19 | coupon_details_list | JSONB | YES | 券明细数组(来自 packageCouponDetailsList待调研 |
| 20 | content_hash | TEXT | YES | 业务字段内容哈希,用于变更检测 |
| 21 | payload | JSONB | YES | 详情接口完整原始 JSON 响应 |
| 22 | fetched_at | TIMESTAMPTZ | YES | ETL 拉取时间戳 |
## 与列表表的关系
```
ods.group_buy_packages (列表)
└── ods.group_buy_package_details (详情)
关联字段group_buy_packages.id = group_buy_package_details.coupon_id
关系1:1每个列表记录对应一条详情
```
## 下游消费
DWD 层 `dwd.dim_groupbuy_package_ex` 在加载时通过 LEFT JOIN 本表,将 `table_area_ids``table_area_names``assistant_services``groupon_site_infos` 四个 JSONB 字段合并到扩展表。
## 使用说明
```sql
-- 查询最新入库的详情记录
SELECT coupon_id, package_name, table_area_names, assistant_services
FROM ods.group_buy_package_details
ORDER BY fetched_at DESC
LIMIT 10;
```
```sql
-- 关联列表表查看完整信息
SELECT p.id, p.package_name, p.selling_price,
d.table_area_names, d.assistant_services, d.groupon_site_infos
FROM ods.group_buy_packages p
LEFT JOIN ods.group_buy_package_details d ON p.id = d.coupon_id
WHERE p.is_delete IS DISTINCT FROM 1;
```
## 可回溯性
| 项目 | 说明 |
|------|------|
| 可回溯 | ✅ 完全可回溯(保留 payload 原始 JSON |
| 数据来源 | `PackageCoupon/QueryPackageCouponInfo` API |

View File

@@ -0,0 +1,89 @@
# 团购套餐详情QueryPackageCouponInfo → group_buy_package_details 字段映射
> 生成时间2026-03-05
## 端点信息
| 属性 | 值 |
|------|-----|
| 接口路径 | `PackageCoupon/QueryPackageCouponInfo` |
| 请求方法 | POST |
| 请求参数 | `{ "couponId": <id> }`(从 `ods.group_buy_packages.id` 获取) |
| ODS 对应表 | `ods.group_buy_package_details` |
| JSON 数据路径 | `data` |
| 调用方式 | 二级详情拉取(`ODS_GROUP_PACKAGE` 任务的 `detail_endpoint` 子流程) |
## 响应结构
```json
{
"data": {
"groupPurchasePackage": {
"id": 123,
"packageName": "...",
"duration": 3600,
"startTime": "...",
"endTime": "...",
"addStartClock": "00:00:00",
"addEndClock": "1.00:00:00",
"isEnabled": 1,
"isDelete": 0,
"siteId": 456,
"tenantId": 789,
"createTime": "...",
"creatorName": "...",
"tableAreaId": [1, 2, 3],
"tableAreaNameList": ["A区", "B区"]
},
"packageCouponAssistants": [...],
"grouponSiteInfos": [...],
"packagePackageService": [...],
"packageCouponDetailsList": [...]
}
}
```
## 字段映射
### 结构化字段(来自 data.groupPurchasePackage
| JSON 路径 | ODS 列名 | 类型转换 | 说明 |
|-----------|----------|----------|------|
| data.groupPurchasePackage.id | coupon_id | int→BIGINT | 团购套餐 ID主键 |
| data.groupPurchasePackage.packageName | package_name | string→TEXT | 套餐名称 |
| data.groupPurchasePackage.duration | duration | int→INTEGER | 台费计时时长(秒) |
| data.groupPurchasePackage.startTime | start_time | string→TIMESTAMPTZ | 可用日期开始 |
| data.groupPurchasePackage.endTime | end_time | string→TIMESTAMPTZ | 可用日期结束 |
| data.groupPurchasePackage.addStartClock | add_start_clock | string→TEXT | 可用时段开始 |
| data.groupPurchasePackage.addEndClock | add_end_clock | string→TEXT | 可用时段结束 |
| data.groupPurchasePackage.isEnabled | is_enabled | int→INTEGER | 是否启用 |
| data.groupPurchasePackage.isDelete | is_delete | int→INTEGER | 是否已删除 |
| data.groupPurchasePackage.siteId | site_id | int→BIGINT | 店铺 ID |
| data.groupPurchasePackage.tenantId | tenant_id | int→BIGINT | 租户 ID |
| data.groupPurchasePackage.createTime | create_time | string→TIMESTAMPTZ | 创建时间 |
| data.groupPurchasePackage.creatorName | creator_name | string→TEXT | 创建人 |
### JSONB 数组字段
| JSON 路径 | ODS 列名 | 类型转换 | 说明 |
|-----------|----------|----------|------|
| data.groupPurchasePackage.tableAreaId | table_area_ids | array→JSONB | 可用台区 ID 列表 |
| data.groupPurchasePackage.tableAreaNameList | table_area_names | array→JSONB | 可用台区名称列表 |
| data.packageCouponAssistants | assistant_services | array→JSONB | 助教服务关联(含 skillId/assistantLevel/assistantDuration |
| data.grouponSiteInfos | groupon_site_infos | array→JSONB | 关联门店信息(含 siteId/siteName |
| data.packagePackageService | package_services | array→JSONB | 套餐服务数组(待调研,可能为空) |
| data.packageCouponDetailsList | coupon_details_list | array→JSONB | 券明细数组(待调研,可能为空) |
## ETL 补充字段
| ODS 列名 | 生成逻辑 |
|-----------|----------|
| content_hash | 基于原始 payload + is_delete 计算 SHA-256 |
| payload | 完整原始 JSON 响应(`data` 节点) |
| fetched_at | ETL 拉取时间戳(`DEFAULT now()` |
## 写入策略
- 全量快照模式(`SnapshotMode.FULL_TABLE`
- UPSERT on `coupon_id`,每次运行覆盖全部记录
- 通过 `content_hash` 去重,内容未变则跳过写入