diff --git a/etl_billiards/database/schema_ODS_doc.sql b/etl_billiards/database/schema_ODS_doc.sql index 514f931..c4d024c 100644 --- a/etl_billiards/database/schema_ODS_doc.sql +++ b/etl_billiards/database/schema_ODS_doc.sql @@ -1,6 +1,3 @@ --- 文件:schema_ODS_doc.sql --- 说明:ODS 层 DDL,表名与示例 JSON 前缀对应,用于本地回放/调试。 --- 编码:UTF-8 SET client_encoding TO "UTF8"; DROP SCHEMA IF EXISTS billiards_ods CASCADE; @@ -28,26 +25,27 @@ CREATE TABLE IF NOT EXISTS billiards_ods.member_profiles ( payload JSONB NOT NULL ); -COMMENT ON TABLE billiards_ods.member_profiles IS '对应JSON字段:member_profiles.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 member_profiles-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_profiles.tenant_id IS '对应JSON字段:tenant_id,说明::,示例值及对应分析:租户/品牌 ID。'; -COMMENT ON COLUMN billiards_ods.member_profiles.register_site_id IS '对应JSON字段:register_site_id,说明::,示例值及对应分析:会员的注册门店 ID。'; -COMMENT ON COLUMN billiards_ods.member_profiles.site_name IS '对应JSON字段:site_name,说明::,示例值及对应分析:注册门店名称,属于冗余字段,用于直接展示。'; -COMMENT ON COLUMN billiards_ods.member_profiles.id IS '对应JSON字段:id,说明::,示例值及对应分析:这是“租户内会员账户”的主键 ID。'; -COMMENT ON COLUMN billiards_ods.member_profiles.system_member_id IS '对应JSON字段:system_member_id,说明:(结合其它文件):,示例值及对应分析:这是“系统级会员 ID”,在全平台唯一,用来把一个会员在不同门店/不同卡类型下的账户统一到一个“人”的维度上。'; -COMMENT ON COLUMN billiards_ods.member_profiles.member_card_grade_code IS '对应JSON字段:member_card_grade_code,说明:类型:int,示例值及对应分析:唯一值个数:4'; -COMMENT ON COLUMN billiards_ods.member_profiles.member_card_grade_name IS '对应JSON字段:member_card_grade_name,说明::,示例值及对应分析:这是“会员卡种类/等级”的定义字段。'; -COMMENT ON COLUMN billiards_ods.member_profiles.mobile IS '对应JSON字段:mobile,说明::,示例值及对应分析:会员绑定的手机号码。'; -COMMENT ON COLUMN billiards_ods.member_profiles.nickname IS '对应JSON字段:nickname,说明::,示例值及对应分析:会员在当前租户下的显示名称(可以是姓名,也可以是昵称)。'; -COMMENT ON COLUMN billiards_ods.member_profiles.point IS '对应JSON字段:point,说明::,示例值及对应分析:当前积分余额(这条会员账户的积分值)。'; -COMMENT ON COLUMN billiards_ods.member_profiles.growth_value IS '对应JSON字段:growth_value,说明:(按常见会员体系设计):,示例值及对应分析:成长值 / 经验值,用于会员等级晋升的累计指标。'; -COMMENT ON COLUMN billiards_ods.member_profiles.referrer_member_id IS '对应JSON字段:referrer_member_id,说明:(按命名推断):,示例值及对应分析:推荐人会员 ID,用于记录该会员是由哪位老会员推荐。'; -COMMENT ON COLUMN billiards_ods.member_profiles.status IS '对应JSON字段:status,说明:(按命名推断):,示例值及对应分析:帐户状态(偏“卡状态/档案状态”)。'; -COMMENT ON COLUMN billiards_ods.member_profiles.user_status IS '对应JSON字段:user_status,说明:(结合行业惯例):,示例值及对应分析:用户账号状态(偏“用户逻辑”层面的状态)。'; -COMMENT ON COLUMN billiards_ods.member_profiles.create_time IS '对应JSON字段:create_time,说明::,示例值及对应分析:会员账户的创建时间(即这条档案/这张卡在系统中被创建的时间)。'; -COMMENT ON COLUMN billiards_ods.member_profiles.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.member_profiles.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.member_profiles.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.member_profiles.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; +COMMENT ON TABLE billiards_ods.member_profiles IS 'ODS 原始明细表:会员档案/会员账户信息。来源:C:/dev/LLTQ/export/test-json-doc/member_profiles.json;分析:member_profiles-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.member_profiles.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【ODS来源】member_profiles - tenant_id。 【JSON字段】member_profiles.json - data.tenantMemberInfos - tenant_id。'; +COMMENT ON COLUMN billiards_ods.member_profiles.register_site_id IS '【说明】会员的注册门店 ID。 【示例】2790685415443269(用于会员的注册门店 ID)。 【ODS来源】member_profiles - register_site_id。 【JSON字段】member_profiles.json - data.tenantMemberInfos - register_site_id。'; +COMMENT ON COLUMN billiards_ods.member_profiles.site_name IS '【说明】注册门店名称,属于冗余字段,用于直接展示。 【示例】朗朗桌球(注册门店名称,属于冗余字段,用于直接展示)。 【ODS来源】member_profiles - site_name。 【JSON字段】member_profiles.json - data.tenantMemberInfos - site_name。'; +COMMENT ON COLUMN billiards_ods.member_profiles.id IS '【说明】这是“租户内会员账户”的主键 ID。 【示例】2955204541320325(用于这是“租户内会员账户”的主键 ID)。 【ODS来源】member_profiles - id。 【JSON字段】member_profiles.json - data.tenantMemberInfos - id。'; +COMMENT ON COLUMN billiards_ods.member_profiles.system_member_id IS '【说明】这是“系统级会员 ID”,在全平台唯一,用来把一个会员在不同门店/不同卡类型下的账户统一到一个“人”的维度上。 【示例】2955204540009605(用于这是“系统级会员 ID”,在全平台唯一,用来把一个会员在不同门店/不同卡类型下的账户统一到一个“人”的维度上)。 【ODS来源】member_profiles - system_member_id。 【JSON字段】member_profiles.json - data.tenantMemberInfos - system_member_id。'; +COMMENT ON COLUMN billiards_ods.member_profiles.member_card_grade_code IS '【说明】这两个字段是成对出现的:一个数值码,一个中文名称。 【示例】2790683528022853(用于这两个字段是成对出现的:一个数值码,一个中文名称)。 【ODS来源】member_profiles - member_card_grade_code。 【JSON字段】member_profiles.json - data.tenantMemberInfos - member_card_grade_code。'; +COMMENT ON COLUMN billiards_ods.member_profiles.member_card_grade_name IS '【说明】这是“会员卡种类/等级”的定义字段。 【示例】储值卡(用于这是“会员卡种类/等级”的定义字段)。 【ODS来源】member_profiles - member_card_grade_name。 【JSON字段】member_profiles.json - data.tenantMemberInfos - member_card_grade_name。'; +COMMENT ON COLUMN billiards_ods.member_profiles.mobile IS '【说明】会员绑定的手机号码。 【示例】18620043391(用于会员绑定的手机号码)。 【ODS来源】member_profiles - mobile。 【JSON字段】member_profiles.json - data.tenantMemberInfos - mobile。'; +COMMENT ON COLUMN billiards_ods.member_profiles.nickname IS '【说明】会员在当前租户下的显示名称(可以是姓名,也可以是昵称)。 【示例】胡先生(用于会员在当前租户下的显示名称(可以是姓名,也可以是昵称))。 【ODS来源】member_profiles - nickname。 【JSON字段】member_profiles.json - data.tenantMemberInfos - nickname。'; +COMMENT ON COLUMN billiards_ods.member_profiles.point IS '【说明】当前积分余额(这条会员账户的积分值)。 【示例】0.0(用于当前积分余额(这条会员账户的积分值))。 【ODS来源】member_profiles - point。 【JSON字段】member_profiles.json - data.tenantMemberInfos - point。'; +COMMENT ON COLUMN billiards_ods.member_profiles.growth_value IS '【说明】成长值 / 经验值,用于会员等级晋升的累计指标。 【示例】0.0(成长值 / 经验值,用于会员等级晋升的累计指标)。 【ODS来源】member_profiles - growth_value。 【JSON字段】member_profiles.json - data.tenantMemberInfos - growth_value。'; +COMMENT ON COLUMN billiards_ods.member_profiles.referrer_member_id IS '【说明】推荐人会员 ID,用于记录该会员是由哪位老会员推荐。 【示例】0(推荐人会员 ID,用于记录该会员是由哪位老会员推荐)。 【ODS来源】member_profiles - referrer_member_id。 【JSON字段】member_profiles.json - data.tenantMemberInfos - referrer_member_id。'; +COMMENT ON COLUMN billiards_ods.member_profiles.status IS '【说明】帐户状态(偏“卡状态/档案状态”)。 【示例】1(用于帐户状态(偏“卡状态/档案状态”))。 【ODS来源】member_profiles - status。 【JSON字段】member_profiles.json - data.tenantMemberInfos - status。'; +COMMENT ON COLUMN billiards_ods.member_profiles.user_status IS '【说明】用户账号状态(偏“用户逻辑”层面的状态)。 【示例】1(用于用户账号状态(偏“用户逻辑”层面的状态))。 【ODS来源】member_profiles - user_status。 【JSON字段】member_profiles.json - data.tenantMemberInfos - user_status。'; +COMMENT ON COLUMN billiards_ods.member_profiles.create_time IS '【说明】会员账户的创建时间(即这条档案/这张卡在系统中被创建的时间)。 【示例】2025-11-08 01:29:33(用于会员账户的创建时间(即这条档案/这张卡在系统中被创建的时间))。 【ODS来源】member_profiles - create_time。 【JSON字段】member_profiles.json - data.tenantMemberInfos - create_time。'; +COMMENT ON COLUMN billiards_ods.member_profiles.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】member_profiles.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【ODS来源】member_profiles - source_file(ETL补充)。 【JSON字段】member_profiles.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.member_profiles.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/member_profiles.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【ODS来源】member_profiles - source_endpoint(ETL补充)。 【JSON字段】member_profiles.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.member_profiles.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【ODS来源】member_profiles - fetched_at(ETL补充)。 【JSON字段】member_profiles.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.member_profiles.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【ODS来源】member_profiles - payload。 【JSON字段】member_profiles.json - data.tenantMemberInfos - $。'; + CREATE TABLE IF NOT EXISTS billiards_ods.member_balance_changes ( tenant_id BIGINT, @@ -81,36 +79,37 @@ CREATE TABLE IF NOT EXISTS billiards_ods.member_balance_changes ( payload JSONB NOT NULL ); -COMMENT ON TABLE billiards_ods.member_balance_changes IS '对应JSON字段:member_balance_changes.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 member_balance_changes-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.tenant_id IS '对应JSON字段:tenant_id,说明::租户/商户 ID,本数据中是固定值(同一品牌/商户)。,示例值及对应分析:?? member_balance_changes-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.site_id IS '对应JSON字段:site_id,说明:表示本次余额变动的发生门店,绝大多数也在“朗朗桌球”,少数特殊业务(活动抵用券结算)显示为 site_id=0、paySiteName 为空。,示例值及对应分析:?? member_balance_changes-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.register_site_id IS '对应JSON字段:register_site_id,说明:已在前文说明:办卡门店的 ID 与名称,所有记录一致,说明所有卡均在“朗朗桌球”注册。,示例值及对应分析:?? member_balance_changes-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.registerSiteName IS '对应JSON字段:registerSiteName,说明:已在前文说明:办卡门店的 ID 与名称,所有记录一致,说明所有卡均在“朗朗桌球”注册。,示例值及对应分析:?? member_balance_changes-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.paySiteName IS '对应JSON字段:paySiteName,说明:表示本次余额变动的发生门店,绝大多数也在“朗朗桌球”,少数特殊业务(活动抵用券结算)显示为 site_id=0、paySiteName 为空。,示例值及对应分析:?? member_balance_changes-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.id IS '对应JSON字段:id,说明::余额变更记录的主键 ID,唯一标识这一条“账户余额变化事件”。,示例值及对应分析:?? member_balance_changes-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.tenant_member_id IS '对应JSON字段:tenant_member_id,说明::商户维度的会员 ID(租户内会员主键)。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.tenant_member_card_id IS '对应JSON字段:tenant_member_card_id,说明::会员卡账户 ID,在租户内唯一标识某张卡。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.system_member_id IS '对应JSON字段:system_member_id,说明::系统级(全局)会员 ID。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.memberName IS '对应JSON字段:memberName,说明::会员姓名或称呼(非昵称字段)。,示例值及对应分析:说明:例如“陈腾鑫”“胡先生”“江先生”等,多为中文姓名或带“先生”称呼。'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.memberMobile IS '对应JSON字段:memberMobile,说明::会员手机号。,示例值及对应分析:说明:字符型存储,完整手机号,用来识别会员与联系客户。'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.card_type_id IS '对应JSON字段:card_type_id,说明::卡种类型 ID,用于区分不同卡种。,示例值及对应分析:?? member_balance_changes-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.memberCardTypeName IS '对应JSON字段:memberCardTypeName,说明::卡种名称,与 card_type_id 一一对应,是一个 卡种枚举名称。,示例值及对应分析:?? member_balance_changes-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.account_data IS '对应JSON字段:account_data,说明::本次变动的金额(元),正数表示增加,负数表示减少。,示例值及对应分析:特点:'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.before IS '对应JSON字段:before,说明::本次变动前,该卡账户的余额(元)。,示例值及对应分析:说明:'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.after IS '对应JSON字段:after,说明::本次变动后,该卡账户的余额(元)。,示例值及对应分析:重要关系:'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.refund_amount IS '对应JSON字段:refund_amount,说明:(推测):与退款业务相关的金额字段,但在当前这份导出中实际未使用:,示例值及对应分析:可能用于标记“其中有多少金额是以‘退款’形式回流的”,或区分“退回余额”和“原路退回”两种模式。'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.from_type IS '对应JSON字段:from_type,说明:(根据金额符号与 remark 综合推断):,示例值及对应分析:1:日常消费扣款'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.payment_method IS '对应JSON字段:payment_method,说明:类型:int,枚举,示例值及对应分析:值分布:'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.relate_id IS '对应JSON字段:relate_id,说明:(推测):关联业务记录的 ID:,示例值及对应分析:例如某次充值记录的 ID、某张订单/结算单 ID、某次活动抵用券核销记录 ID 等。'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.remark IS '对应JSON字段:remark,说明::,示例值及对应分析:当为空时,说明这条变动没有额外备注说明。'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.operator_id IS '对应JSON字段:operator_id,说明::执行此次余额变更操作的员工 ID。,示例值及对应分析:?? member_balance_changes-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.operator_name IS '对应JSON字段:operator_name,说明::操作员姓名(带职位前缀),是对 operator_id 的可读冗余字段。,示例值及对应分析:9. 状态字段与标志'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.is_delete IS '对应JSON字段:is_delete,说明::逻辑删除标记:,示例值及对应分析:0:正常;'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.create_time IS '对应JSON字段:create_time,说明::本条余额变更记录的创建时间,通常接近交易发生时间。,示例值及对应分析:说明:可与订单、支付记录的时间做对齐,构造时序链路(但你现在不要求做时序分析,这里只说明结构)。'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.member_balance_changes.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; +COMMENT ON TABLE billiards_ods.member_balance_changes IS 'ODS 原始明细表:会员余额变更流水。来源:C:/dev/LLTQ/export/test-json-doc/member_balance_changes.json;分析:member_balance_changes-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.tenant_id IS '【说明】租户/商户 ID,本数据中是固定值(同一品牌/商户)。 【示例】2790683160709957(用于租户/商户 ID,本数据中是固定值(同一品牌/商户))。 【ODS来源】member_balance_changes - tenant_id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - tenant_id。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.site_id IS '【说明】非 0:记录所属的具体门店 ID(与其他 JSON 内的 site_id 一致)。 【示例】2790685415443269(用于非 0:记录所属的具体门店 ID(与其他 JSON 内的 site_id 一致))。 【ODS来源】member_balance_changes - site_id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - site_id。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.register_site_id IS '【说明】会员卡的“注册门店 ID”,即办卡所在门店。 【示例】2790685415443269(用于会员卡的“注册门店 ID”,即办卡所在门店)。 【ODS来源】member_balance_changes - register_site_id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - register_site_id。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.registerSiteName IS '【说明】卡片的注册门店名称(办卡地点),和 register_site_id 配套。 【示例】朗朗桌球(用于卡片的注册门店名称(办卡地点),和 register_site_id 配套)。 【ODS来源】member_balance_changes - registerSiteName。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - registerSiteName。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.paySiteName IS '【说明】发生本次余额变更的门店名称(即本次消费/充值所在门店)。 【示例】朗朗桌球(用于发生本次余额变更的门店名称(即本次消费/充值所在门店))。 【ODS来源】member_balance_changes - paySiteName。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - paySiteName。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.id IS '【说明】余额变更记录的主键 ID,唯一标识这一条“账户余额变化事件”。 【示例】2957881605869253(用于余额变更记录的主键 ID,唯一标识这一条“账户余额变化事件”)。 【ODS来源】member_balance_changes - id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - id。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.tenant_member_id IS '【说明】商户维度的会员 ID(租户内会员主键)。 【示例】2799212845565701(用于商户维度的会员 ID(租户内会员主键))。 【ODS来源】member_balance_changes - tenant_member_id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - tenant_member_id。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.tenant_member_card_id IS '【说明】会员卡账户 ID,在租户内唯一标识某张卡。 【示例】2799219999295237(用于会员卡账户 ID,在租户内唯一标识某张卡)。 【ODS来源】member_balance_changes - tenant_member_card_id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - tenant_member_card_id。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.system_member_id IS '【说明】系统级(全局)会员 ID。 【示例】2799212844549893(用于系统级(全局)会员 ID)。 【ODS来源】member_balance_changes - system_member_id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - system_member_id。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.memberName IS '【说明】会员姓名或称呼(非昵称字段)。 【示例】曾丹烨(用于会员姓名或称呼(非昵称字段))。 【ODS来源】member_balance_changes - memberName。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - memberName。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.memberMobile IS '【说明】会员手机号。 【示例】13922213242(用于会员手机号)。 【ODS来源】member_balance_changes - memberMobile。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - memberMobile。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.card_type_id IS '【说明】卡种类型 ID,用于区分不同卡种。 【示例】2793249295533893(卡种类型 ID,用于区分不同卡种)。 【ODS来源】member_balance_changes - card_type_id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - card_type_id。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.memberCardTypeName IS '【说明】卡种名称,与 card_type_id 一一对应,是一个 卡种枚举名称。 【示例】储值卡(用于卡种名称,与 card_type_id 一一对应,是一个 卡种枚举名称)。 【ODS来源】member_balance_changes - memberCardTypeName。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - memberCardTypeName。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.account_data IS '【说明】本次变动的金额(元),正数表示增加,负数表示减少。 【示例】-120.0(用于本次变动的金额(元),正数表示增加,负数表示减少)。 【ODS来源】member_balance_changes - account_data。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - account_data。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.before IS '【说明】本次变动前,该卡账户的余额(元)。 【示例】816.3(用于本次变动前,该卡账户的余额(元))。 【ODS来源】member_balance_changes - before。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - before。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.after IS '【说明】本次变动后,该卡账户的余额(元)。 【示例】696.3(用于本次变动后,该卡账户的余额(元))。 【ODS来源】member_balance_changes - after。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - after。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.refund_amount IS '【说明】可能用于标记“其中有多少金额是以‘退款’形式回流的”,或区分“退回余额”和“原路退回”两种模式。 【示例】0.0(可能用于标记“其中有多少金额是以‘退款’形式回流的”,或区分“退回余额”和“原路退回”两种模式)。 【ODS来源】member_balance_changes - refund_amount。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - refund_amount。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.from_type IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【ODS来源】member_balance_changes - from_type。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - from_type。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.payment_method IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】0(来自 JSON 导出的原始字段,用于保留业务取值。)。 【ODS来源】member_balance_changes - payment_method。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - payment_method。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.relate_id IS '【说明】例如某次充值记录的 ID、某张订单/结算单 ID、某次活动抵用券核销记录 ID 等。 【示例】2957881518788421(用于例如某次充值记录的 ID、某张订单/结算单 ID、某次活动抵用券核销记录 ID 等)。 【ODS来源】member_balance_changes - relate_id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - relate_id。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.remark IS '【说明】当为空时,说明这条变动没有额外备注说明。 【示例】充值退款(用于当为空时,说明这条变动没有额外备注说明)。 【ODS来源】member_balance_changes - remark。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - remark。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.operator_id IS '【说明】执行此次余额变更操作的员工 ID。 【示例】2790687322443013(用于执行此次余额变更操作的员工 ID)。 【ODS来源】member_balance_changes - operator_id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - operator_id。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.operator_name IS '【说明】操作员姓名(带职位前缀),是对 operator_id 的可读冗余字段。 【示例】收银员:郑丽珊(用于操作员姓名(带职位前缀),是对 operator_id 的可读冗余字段)。 【ODS来源】member_balance_changes - operator_name。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - operator_name。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.is_delete IS '【说明】逻辑删除标记(0=否,1=是)。。 【示例】0(用于逻辑删除标记(0=否,1=是))。 【ODS来源】member_balance_changes - is_delete。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - is_delete。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.create_time IS '【说明】本条余额变更记录的创建时间,通常接近交易发生时间。 【示例】2025-11-09 22:52:48(用于本条余额变更记录的创建时间,通常接近交易发生时间)。 【ODS来源】member_balance_changes - create_time。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - create_time。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】member_balance_changes.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【ODS来源】member_balance_changes - source_file(ETL补充)。 【JSON字段】member_balance_changes.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/member_balance_changes.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【ODS来源】member_balance_changes - source_endpoint(ETL补充)。 【JSON字段】member_balance_changes.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【ODS来源】member_balance_changes - fetched_at(ETL补充)。 【JSON字段】member_balance_changes.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【ODS来源】member_balance_changes - payload。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - $。'; + CREATE TABLE IF NOT EXISTS billiards_ods.member_stored_value_cards ( tenant_id BIGINT, @@ -188,80 +187,81 @@ CREATE TABLE IF NOT EXISTS billiards_ods.member_stored_value_cards ( payload JSONB NOT NULL ); -COMMENT ON TABLE billiards_ods.member_stored_value_cards IS '对应JSON字段:member_stored_value_cards.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 member_stored_value_cards-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenant_id IS '对应JSON字段:tenant_id,说明::租户/品牌 ID,与其他 JSON 中 tenant_id 一致。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenant_member_id IS '对应JSON字段:tenant_member_id,说明::当前商户(品牌/租户)中会员的主键 ID。,示例值及对应分析:枚举特征:'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.system_member_id IS '对应JSON字段:system_member_id,说明::系统级会员 ID(跨门店统一主键)。,示例值及对应分析:枚举特征:'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.register_site_id IS '对应JSON字段:register_site_id,说明::卡首次办理的门店 ID。,示例值及对应分析:对应门店的 site_id;本数据中所有卡都是在同一家门店开卡。'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.site_name IS '对应JSON字段:site_name,说明::卡归属门店名称(视图中的展示字段)。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.id IS '对应JSON字段:id,说明:?????? member_stored_value_cards-Analysis.md,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_card_grade_code IS '对应JSON字段:member_card_grade_code,说明::卡等级/卡类代码,和下面两个名称字段一一对应。,示例值及对应分析:枚举:'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_card_grade_code_name IS '对应JSON字段:member_card_grade_code_name,说明::卡等级/卡类名称。,示例值及对应分析:枚举值(与上面 code 一一对应):'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_card_type_name IS '对应JSON字段:member_card_type_name,说明::卡类型名称,实际与 member_card_grade_code_name 一致。,示例值及对应分析:枚举值同上。'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_name IS '对应JSON字段:member_name,说明::持卡会员姓名快照。,示例值及对应分析:特点:存在 null(20 张卡没有绑定会员名字)。'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_mobile IS '对应JSON字段:member_mobile,说明::持卡会员手机号快照。,示例值及对应分析:特点:与 member_name 对应,多数有值,少量为 null。'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.card_type_id IS '对应JSON字段:card_type_id,说明::卡种 ID(定义“这是哪一种卡”)。,示例值及对应分析:枚举(按数据分布):'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.card_no IS '对应JSON字段:card_no,说明:(推测):实体卡物理卡号/条码号。当前这批卡看起来全部为“无物理卡号”(可能是全部虚拟卡或卡号隐藏不导出)。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.card_physics_type IS '对应JSON字段:card_physics_type,说明::物理卡类型。,示例值及对应分析:当前数据:全部为 1。'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.balance IS '对应JSON字段:balance,说明::当前卡内余额(主要针对储值卡、部分券卡)。,示例值及对应分析:特征:'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.denomination IS '对应JSON字段:denomination,说明:(推测):面额/初始储值额度。,示例值及对应分析:本页数据未填充此字段;可能在分类型卡(如次卡/券)中才有意义,或者另有配置表。'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_discount IS '对应JSON字段:table_discount,说明::,示例值及对应分析:采用“几折”的记法:10=不打折,9=九折,8=八折。'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_discount IS '对应JSON字段:goods_discount,说明::,示例值及对应分析:采用“几折”的记法:10=不打折,9=九折,8=八折。'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_discount IS '对应JSON字段:assistant_discount,说明::,示例值及对应分析:采用“几折”的记法:10=不打折,9=九折,8=八折。'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_reward_discount IS '对应JSON字段:assistant_reward_discount,说明::,示例值及对应分析:采用“几折”的记法:10=不打折,9=九折,8=八折。'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_service_discount IS '对应JSON字段:table_service_discount,说明::,示例值及对应分析:采用“几折”的记法:10=不打折,9=九折,8=八折。'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_service_discount IS '对应JSON字段:assistant_service_discount,说明::,示例值及对应分析:采用“几折”的记法:10=不打折,9=九折,8=八折。'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.coupon_discount IS '对应JSON字段:coupon_discount,说明:?????? member_stored_value_cards-Analysis.md,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_service_discount IS '对应JSON字段:goods_service_discount,说明::,示例值及对应分析:采用“几折”的记法:10=不打折,9=九折,8=八折。'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_discount_sub_switch IS '对应JSON字段:assistant_discount_sub_switch,说明:(推测):“折扣是否叠加/替换其他折扣”的开关。,示例值及对应分析:可能枚举:'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_discount_sub_switch IS '对应JSON字段:table_discount_sub_switch,说明:(推测):“折扣是否叠加/替换其他折扣”的开关。,示例值及对应分析:可能枚举:'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_discount_sub_switch IS '对应JSON字段:goods_discount_sub_switch,说明:(推测):“折扣是否叠加/替换其他折扣”的开关。,示例值及对应分析:可能枚举:'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_reward_discount_sub_switch IS '对应JSON字段:assistant_reward_discount_sub_switch,说明:(推测):“折扣是否叠加/替换其他折扣”的开关。,示例值及对应分析:可能枚举:'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_service_deduct_radio IS '对应JSON字段:table_service_deduct_radio,说明::允许从该卡余额中抵扣的比例(百分比)。,示例值及对应分析:100.0 表示允许 100% 用卡余额支付该类消费;'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_service_deduct_radio IS '对应JSON字段:assistant_service_deduct_radio,说明::允许从该卡余额中抵扣的比例(百分比)。,示例值及对应分析:100.0 表示允许 100% 用卡余额支付该类消费;'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_service_deduct_radio IS '对应JSON字段:goods_service_deduct_radio,说明::允许从该卡余额中抵扣的比例(百分比)。,示例值及对应分析:100.0 表示允许 100% 用卡余额支付该类消费;'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_deduct_radio IS '对应JSON字段:assistant_deduct_radio,说明::允许从该卡余额中抵扣的比例(百分比)。,示例值及对应分析:100.0 表示允许 100% 用卡余额支付该类消费;'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_deduct_radio IS '对应JSON字段:table_deduct_radio,说明::允许从该卡余额中抵扣的比例(百分比)。,示例值及对应分析:100.0 表示允许 100% 用卡余额支付该类消费;'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_deduct_radio IS '对应JSON字段:goods_deduct_radio,说明::允许从该卡余额中抵扣的比例(百分比)。,示例值及对应分析:100.0 表示允许 100% 用卡余额支付该类消费;'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.coupon_deduct_radio IS '对应JSON字段:coupon_deduct_radio,说明::允许从该卡余额中抵扣的比例(百分比)。,示例值及对应分析:100.0 表示允许 100% 用卡余额支付该类消费;'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_reward_deduct_radio IS '对应JSON字段:assistant_reward_deduct_radio,说明:?????? member_stored_value_cards-Analysis.md,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tableCardDeduct IS '对应JSON字段:tableCardDeduct,说明::针对台费/商品/助教三类消费的扣卡金额配置(类似“每小时从卡里扣 xx 元”或“每次抵扣 xx 元”的规则)。,示例值及对应分析:当前:所有为 0,说明在卡定义层面并没有指定固定扣卡金额,而是按照一般储值逻辑消费。'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tableServiceCardDeduct IS '对应JSON字段:tableServiceCardDeduct,说明::如果系统中区分“储值金、服务金、奖励金”等子账户,这三个字段对应“服务金”子账户的扣款配置。,示例值及对应分析:当前未启用。'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goodsCarDeduct IS '对应JSON字段:goodsCarDeduct,说明::针对台费/商品/助教三类消费的扣卡金额配置(类似“每小时从卡里扣 xx 元”或“每次抵扣 xx 元”的规则)。,示例值及对应分析:当前:所有为 0,说明在卡定义层面并没有指定固定扣卡金额,而是按照一般储值逻辑消费。'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goodsServiceCardDeduct IS '对应JSON字段:goodsServiceCardDeduct,说明::如果系统中区分“储值金、服务金、奖励金”等子账户,这三个字段对应“服务金”子账户的扣款配置。,示例值及对应分析:当前未启用。'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistantCardDeduct IS '对应JSON字段:assistantCardDeduct,说明::针对台费/商品/助教三类消费的扣卡金额配置(类似“每小时从卡里扣 xx 元”或“每次抵扣 xx 元”的规则)。,示例值及对应分析:当前:所有为 0,说明在卡定义层面并没有指定固定扣卡金额,而是按照一般储值逻辑消费。'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistantServiceCardDeduct IS '对应JSON字段:assistantServiceCardDeduct,说明::如果系统中区分“储值金、服务金、奖励金”等子账户,这三个字段对应“服务金”子账户的扣款配置。,示例值及对应分析:当前未启用。'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistantRewardCardDeduct IS '对应JSON字段:assistantRewardCardDeduct,说明::助教奖励金方向扣款的配置。,示例值及对应分析:当前未启用。'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.cardSettleDeduct IS '对应JSON字段:cardSettleDeduct,说明:已在扣卡规则部分说明,当前为 0。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.couponCardDeduct IS '对应JSON字段:couponCardDeduct,说明::与卡绑定的“券额度扣除配置”。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.deliveryFeeDeduct IS '对应JSON字段:deliveryFeeDeduct,说明::配送费可否/多少从卡中抵扣,目前无业务发生。,示例值及对应分析:综合来看:本门店的卡片在“规则配置层”预留了大量细粒度控制字段,但目前实际使用只体现在“balance”和“可用范围”,折扣和具体扣卡规则基本都未启用(全部保持默认值 10 折、100%比例、0 扣款),真正扣款逻辑在交易流水中体现。'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.use_scene IS '对应JSON字段:use_scene,说明::卡使用场景说明(比如“仅店内使用”“仅团建”等),本门店尚未使用此字段。,示例值及对应分析:2. 会员信息与关联字段'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.able_cross_site IS '对应JSON字段:able_cross_site,说明::是否允许跨店使用。,示例值及对应分析:1:可以跨门店使用;'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.able_site_transfer IS '对应JSON字段:able_site_transfer,说明:?????? member_stored_value_cards-Analysis.md,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.is_allow_give IS '对应JSON字段:is_allow_give,说明::是否允许转赠/转让给其他会员。,示例值及对应分析:0:不允许;'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.is_allow_order_deduct IS '对应JSON字段:is_allow_order_deduct,说明::是否允许在“订单层面统一扣款”。,示例值及对应分析:0:不允许(仅按项目扣卡);'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.is_delete IS '对应JSON字段:is_delete,说明::逻辑删除标志。,示例值及对应分析:0:未删除;'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.bind_password IS '对应JSON字段:bind_password,说明::卡绑定密码,用于消费或查询验证(目前未启用)。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_discount_range_type IS '对应JSON字段:goods_discount_range_type,说明:?????? member_stored_value_cards-Analysis.md,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goodsCategoryId IS '对应JSON字段:goodsCategoryId,说明:已上文说明:均为扩展限定维度,当前全部为空列表。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tableAreaId IS '对应JSON字段:tableAreaId,说明:已上文说明:均为扩展限定维度,当前全部为空列表。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.effect_site_id IS '对应JSON字段:effect_site_id,说明:(推测):卡片限定生效门店 ID。,示例值及对应分析:为 0 时,配合 able_cross_site=1,可解释为“所有门店可用”。'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.start_time IS '对应JSON字段:start_time,说明::卡片生效开始时间(有效期起始)。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.end_time IS '对应JSON字段:end_time,说明::卡片有效期结束时间。,示例值及对应分析:start_time / end_time 组合就是卡的有效期。不同卡种有效期配置不同,如储值卡长效、月卡固定一个月等。'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.disable_start_time IS '对应JSON字段:disable_start_time,说明::停用时间段(比如临时冻结卡的起止时间)。,示例值及对应分析:当前未启用,所有卡都是“未进入停用窗口”。'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.disable_end_time IS '对应JSON字段:disable_end_time,说明::停用时间段(比如临时冻结卡的起止时间)。,示例值及对应分析:当前未启用,所有卡都是“未进入停用窗口”。'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.last_consume_time IS '对应JSON字段:last_consume_time,说明::最近一次消费时间。,示例值及对应分析:特点:'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.create_time IS '对应JSON字段:create_time,说明::卡片创建时间(开卡时间)。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.status IS '对应JSON字段:status,说明:(推测):,示例值及对应分析:1:正常可用;'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.sort IS '对应JSON字段:sort,说明::在前端展示或某些列表中的排序权重。,示例值及对应分析:具体取值分布不重要,主要反映展示优先级。'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenantAvatar IS '对应JSON字段:tenantAvatar,说明::品牌头像 URL(未配置)。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenantName IS '对应JSON字段:tenantName,说明::租户/品牌名称(当前导出为空)。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.pdAssisnatLevel IS '对应JSON字段:pdAssisnatLevel,说明:已上文说明:均为扩展限定维度,当前全部为空列表。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.cxAssisnatLevel IS '对应JSON字段:cxAssisnatLevel,说明:已上文说明:均为扩展限定维度,当前全部为空列表。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.member_stored_value_cards.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; +COMMENT ON TABLE billiards_ods.member_stored_value_cards IS 'ODS 原始明细表:会员储值/卡券账户列表。来源:C:/dev/LLTQ/export/test-json-doc/member_stored_value_cards.json;分析:member_stored_value_cards-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenant_id IS '【说明】租户/品牌 ID,与其他 JSON 中 tenant_id 一致。 【示例】2790683160709957(用于租户/品牌 ID,与其他 JSON 中 tenant_id 一致)。 【ODS来源】member_stored_value_cards - tenant_id。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tenant_id。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenant_member_id IS '【说明】当前商户(品牌/租户)中会员的主键 ID。 【示例】2955204541320325(用于当前商户(品牌/租户)中会员的主键 ID)。 【ODS来源】member_stored_value_cards - tenant_member_id。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tenant_member_id。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.system_member_id IS '【说明】系统级会员 ID(跨门店统一主键)。 【示例】2955204540009605(用于系统级会员 ID(跨门店统一主键))。 【ODS来源】member_stored_value_cards - system_member_id。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - system_member_id。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.register_site_id IS '【说明】卡首次办理的门店 ID。 【示例】2790685415443269(用于卡首次办理的门店 ID)。 【ODS来源】member_stored_value_cards - register_site_id。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - register_site_id。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.site_name IS '【说明】卡归属门店名称(视图中的展示字段)。 【示例】朗朗桌球(用于卡归属门店名称(视图中的展示字段))。 【ODS来源】member_stored_value_cards - site_name。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - site_name。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.id IS '【说明】本表主键 ID,用于唯一标识一条记录。 【示例】2955206162843781(本表主键 ID,用于唯一标识一条记录)。 【ODS来源】member_stored_value_cards - id。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - id。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_card_grade_code IS '【说明】卡等级/卡类代码,和下面两个名称字段一一对应。 【示例】2790683528022856(用于卡等级/卡类代码,和下面两个名称字段一一对应)。 【ODS来源】member_stored_value_cards - member_card_grade_code。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - member_card_grade_code。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_card_grade_code_name IS '【说明】卡等级/卡类名称。 【示例】活动抵用券(用于卡等级/卡类名称)。 【ODS来源】member_stored_value_cards - member_card_grade_code_name。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - member_card_grade_code_name。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_card_type_name IS '【说明】卡类型名称,实际与 member_card_grade_code_name 一致。 【示例】活动抵用券(用于卡类型名称,实际与 member_card_grade_code_name 一致)。 【ODS来源】member_stored_value_cards - member_card_type_name。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - member_card_type_name。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_name IS '【说明】持卡会员姓名快照。 【示例】胡先生(用于持卡会员姓名快照)。 【ODS来源】member_stored_value_cards - member_name。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - member_name。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_mobile IS '【说明】持卡会员手机号快照。 【示例】18620043391(用于持卡会员手机号快照)。 【ODS来源】member_stored_value_cards - member_mobile。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - member_mobile。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.card_type_id IS '【说明】卡种 ID(定义“这是哪一种卡”)。 【示例】2793266846533445(用于卡种 ID(定义“这是哪一种卡”))。 【ODS来源】member_stored_value_cards - card_type_id。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - card_type_id。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.card_no IS '【说明】实体卡物理卡号/条码号。 【示例】NULL(用于实体卡物理卡号/条码号)。 【ODS来源】member_stored_value_cards - card_no。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - card_no。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.card_physics_type IS '【说明】物理卡类型。 【示例】1(用于物理卡类型)。 【ODS来源】member_stored_value_cards - card_physics_type。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - card_physics_type。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.balance IS '【说明】当前卡内余额(主要针对储值卡、部分券卡)。 【示例】0.0(用于当前卡内余额(主要针对储值卡、部分券卡))。 【ODS来源】member_stored_value_cards - balance。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - balance。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.denomination IS '【说明】采用“几折”的记法:10=不打折,9=九折,8=八折。 【示例】0.0(用于采用“几折”的记法:10=不打折,9=九折,8=八折)。 【ODS来源】member_stored_value_cards - denomination。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - denomination。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - table_discount。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - table_discount。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - goods_discount。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_discount。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - assistant_discount。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_discount。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_reward_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - assistant_reward_discount。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_reward_discount。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_service_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - table_service_discount。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - table_service_discount。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_service_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - assistant_service_discount。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_service_discount。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.coupon_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - coupon_discount。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - coupon_discount。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_service_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - goods_service_discount。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_service_discount。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_discount_sub_switch IS '【说明】数量/时长字段,用于统计与计量。 【示例】2(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - assistant_discount_sub_switch。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_discount_sub_switch。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_discount_sub_switch IS '【说明】数量/时长字段,用于统计与计量。 【示例】2(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - table_discount_sub_switch。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - table_discount_sub_switch。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_discount_sub_switch IS '【说明】数量/时长字段,用于统计与计量。 【示例】2(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - goods_discount_sub_switch。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_discount_sub_switch。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_reward_discount_sub_switch IS '【说明】数量/时长字段,用于统计与计量。 【示例】2(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - assistant_reward_discount_sub_switch。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_reward_discount_sub_switch。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_service_deduct_radio IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】100.0(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】member_stored_value_cards - table_service_deduct_radio。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - table_service_deduct_radio。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_service_deduct_radio IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】100.0(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】member_stored_value_cards - assistant_service_deduct_radio。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_service_deduct_radio。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_service_deduct_radio IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】100.0(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】member_stored_value_cards - goods_service_deduct_radio。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_service_deduct_radio。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_deduct_radio IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】100.0(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】member_stored_value_cards - assistant_deduct_radio。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_deduct_radio。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_deduct_radio IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】100.0(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】member_stored_value_cards - table_deduct_radio。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - table_deduct_radio。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_deduct_radio IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】100.0(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】member_stored_value_cards - goods_deduct_radio。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_deduct_radio。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.coupon_deduct_radio IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】100.0(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】member_stored_value_cards - coupon_deduct_radio。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - coupon_deduct_radio。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_reward_deduct_radio IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】100.0(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】member_stored_value_cards - assistant_reward_deduct_radio。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_reward_deduct_radio。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tableCardDeduct IS '【说明】针对台费/商品/助教三类消费的扣卡金额配置(类似“每小时从卡里扣 xx 元”或“每次抵扣 xx 元”的规则)。 【示例】0.0(用于针对台费/商品/助教三类消费的扣卡金额配置(类似“每小时从卡里扣 xx 元”或“每次抵扣 xx 元”的规则))。 【ODS来源】member_stored_value_cards - tableCardDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tableCardDeduct。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tableServiceCardDeduct IS '【说明】如果系统中区分“储值金、服务金、奖励金”等子账户,这三个字段对应“服务金”子账户的扣款配置。 【示例】0.0(用于如果系统中区分“储值金、服务金、奖励金”等子账户,这三个字段对应“服务金”子账户的扣款配置)。 【ODS来源】member_stored_value_cards - tableServiceCardDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tableServiceCardDeduct。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goodsCarDeduct IS '【说明】针对台费/商品/助教三类消费的扣卡金额配置(类似“每小时从卡里扣 xx 元”或“每次抵扣 xx 元”的规则)。 【示例】0.0(用于针对台费/商品/助教三类消费的扣卡金额配置(类似“每小时从卡里扣 xx 元”或“每次抵扣 xx 元”的规则))。 【ODS来源】member_stored_value_cards - goodsCarDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goodsCarDeduct。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goodsServiceCardDeduct IS '【说明】如果系统中区分“储值金、服务金、奖励金”等子账户,这三个字段对应“服务金”子账户的扣款配置。 【示例】0.0(用于如果系统中区分“储值金、服务金、奖励金”等子账户,这三个字段对应“服务金”子账户的扣款配置)。 【ODS来源】member_stored_value_cards - goodsServiceCardDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goodsServiceCardDeduct。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistantCardDeduct IS '【说明】针对台费/商品/助教三类消费的扣卡金额配置(类似“每小时从卡里扣 xx 元”或“每次抵扣 xx 元”的规则)。 【示例】0.0(用于针对台费/商品/助教三类消费的扣卡金额配置(类似“每小时从卡里扣 xx 元”或“每次抵扣 xx 元”的规则))。 【ODS来源】member_stored_value_cards - assistantCardDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistantCardDeduct。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistantServiceCardDeduct IS '【说明】如果系统中区分“储值金、服务金、奖励金”等子账户,这三个字段对应“服务金”子账户的扣款配置。 【示例】0.0(用于如果系统中区分“储值金、服务金、奖励金”等子账户,这三个字段对应“服务金”子账户的扣款配置)。 【ODS来源】member_stored_value_cards - assistantServiceCardDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistantServiceCardDeduct。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistantRewardCardDeduct IS '【说明】助教奖励金方向扣款的配置。 【示例】0.0(用于助教奖励金方向扣款的配置)。 【ODS来源】member_stored_value_cards - assistantRewardCardDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistantRewardCardDeduct。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.cardSettleDeduct IS '【说明】结算时从卡中扣除的金额上限/规则配置(视图级。 【示例】0.0(用于结算时从卡中扣除的金额上限/规则配置(视图级)。 【ODS来源】member_stored_value_cards - cardSettleDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - cardSettleDeduct。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.couponCardDeduct IS '【说明】与卡绑定的“券额度扣除配置”。 【示例】0.0(用于与卡绑定的“券额度扣除配置”)。 【ODS来源】member_stored_value_cards - couponCardDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - couponCardDeduct。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.deliveryFeeDeduct IS '【说明】配送费可否/多少从卡中抵扣,目前无业务发生。 【示例】0.0(用于配送费可否/多少从卡中抵扣,目前无业务发生)。 【ODS来源】member_stored_value_cards - deliveryFeeDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - deliveryFeeDeduct。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.use_scene IS '【说明】卡使用场景说明(比如“仅店内使用”“仅团建”等),本门店尚未使用此字段。 【示例】NULL(用于卡使用场景说明(比如“仅店内使用”“仅团建”等),本门店尚未使用此字段)。 【ODS来源】member_stored_value_cards - use_scene。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - use_scene。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.able_cross_site IS '【说明】是否允许跨店使用。 【示例】1(用于是否允许跨店使用)。 【ODS来源】member_stored_value_cards - able_cross_site。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - able_cross_site。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.able_site_transfer IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。 【示例】NULL(布尔/开关字段,用于表示权限、可用性或状态开关)。 【ODS来源】member_stored_value_cards - able_site_transfer。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - able_site_transfer。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.is_allow_give IS '【说明】是否允许转赠/转让给其他会员。 【示例】0(用于是否允许转赠/转让给其他会员)。 【ODS来源】member_stored_value_cards - is_allow_give。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - is_allow_give。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.is_allow_order_deduct IS '【说明】是否允许在“订单层面统一扣款”。 【示例】0(用于是否允许在“订单层面统一扣款”)。 【ODS来源】member_stored_value_cards - is_allow_order_deduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - is_allow_order_deduct。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.is_delete IS '【说明】逻辑删除标志。 【示例】0(用于逻辑删除标志)。 【ODS来源】member_stored_value_cards - is_delete。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - is_delete。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.bind_password IS '【说明】卡绑定密码,用于消费或查询验证(目前未启用)。 【示例】NULL(卡绑定密码,用于消费或查询验证(目前未启用))。 【ODS来源】member_stored_value_cards - bind_password。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - bind_password。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_discount_range_type IS '【说明】数量/时长字段,用于统计与计量。 【示例】1(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - goods_discount_range_type。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_discount_range_type。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goodsCategoryId IS '【说明】可用的商品分类 ID 列表。 【示例】[](用于可用的商品分类 ID 列表)。 【ODS来源】member_stored_value_cards - goodsCategoryId。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goodsCategoryId。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tableAreaId IS '【说明】限定可使用的台区 ID 列表。 【示例】[](用于限定可使用的台区 ID 列表)。 【ODS来源】member_stored_value_cards - tableAreaId。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tableAreaId。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.effect_site_id IS '【说明】卡片限定生效门店 ID。 【示例】0(用于卡片限定生效门店 ID)。 【ODS来源】member_stored_value_cards - effect_site_id。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - effect_site_id。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.start_time IS '【说明】卡片生效开始时间(有效期起始)。 【示例】2025-11-08 01:31:12(用于卡片生效开始时间(有效期起始))。 【ODS来源】member_stored_value_cards - start_time。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - start_time。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.end_time IS '【说明】卡片有效期结束时间。 【示例】2225-01-01 00:00:00(用于卡片有效期结束时间)。 【ODS来源】member_stored_value_cards - end_time。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - end_time。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.disable_start_time IS '【说明】停用时间段(比如临时冻结卡的起止时间)。 【示例】0001-01-01 00:00:00(用于停用时间段(比如临时冻结卡的起止时间))。 【ODS来源】member_stored_value_cards - disable_start_time。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - disable_start_time。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.disable_end_time IS '【说明】停用时间段(比如临时冻结卡的起止时间)。 【示例】0001-01-01 00:00:00(用于停用时间段(比如临时冻结卡的起止时间))。 【ODS来源】member_stored_value_cards - disable_end_time。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - disable_end_time。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.last_consume_time IS '【说明】最近一次消费时间。 【示例】2025-11-09 07:48:23(用于最近一次消费时间)。 【ODS来源】member_stored_value_cards - last_consume_time。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - last_consume_time。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.create_time IS '【说明】卡片创建时间(开卡时间)。 【示例】2025-11-08 01:31:12(用于卡片创建时间(开卡时间))。 【ODS来源】member_stored_value_cards - create_time。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - create_time。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.status IS '【说明】状态枚举,用于标识记录当前业务状态。。 【示例】1(状态枚举,用于标识记录当前业务状态。)。 【ODS来源】member_stored_value_cards - status。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - status。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.sort IS '【说明】在前端展示或某些列表中的排序权重。 【示例】1(用于在前端展示或某些列表中的排序权重)。 【ODS来源】member_stored_value_cards - sort。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - sort。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenantAvatar IS '【说明】品牌头像 URL(未配置)。 【示例】NULL(用于品牌头像 URL(未配置))。 【ODS来源】member_stored_value_cards - tenantAvatar。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tenantAvatar。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenantName IS '【说明】租户/品牌名称(当前导出为空)。 【示例】NULL(用于租户/品牌名称(当前导出为空))。 【ODS来源】member_stored_value_cards - tenantName。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tenantName。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.pdAssisnatLevel IS '【说明】允许使用的“陪打/助教等级”列表。 【示例】[](用于允许使用的“陪打/助教等级”列表)。 【ODS来源】member_stored_value_cards - pdAssisnatLevel。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - pdAssisnatLevel。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.cxAssisnatLevel IS '【说明】可能是“促销活动中的助教等级限制”(命名中 cx 多为“促销”缩写)。 【示例】[](用于可能是“促销活动中的助教等级限制”(命名中 cx 多为“促销”缩写))。 【ODS来源】member_stored_value_cards - cxAssisnatLevel。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - cxAssisnatLevel。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】member_stored_value_cards.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【ODS来源】member_stored_value_cards - source_file(ETL补充)。 【JSON字段】member_stored_value_cards.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/member_stored_value_cards.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【ODS来源】member_stored_value_cards - source_endpoint(ETL补充)。 【JSON字段】member_stored_value_cards.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【ODS来源】member_stored_value_cards - fetched_at(ETL补充)。 【JSON字段】member_stored_value_cards.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【ODS来源】member_stored_value_cards - payload。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - $。'; + CREATE TABLE IF NOT EXISTS billiards_ods.recharge_settlements ( id BIGINT PRIMARY KEY, @@ -331,72 +331,73 @@ CREATE TABLE IF NOT EXISTS billiards_ods.recharge_settlements ( payload JSONB NOT NULL ); -COMMENT ON TABLE billiards_ods.recharge_settlements IS '对应JSON字段:recharge_settlements.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.id IS '对应JSON字段:id,说明::本条充值结算记录的主键 ID(唯一标识一条充值/撤销记录)。,示例值及对应分析:唯一性:74 条记录全部不同。'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.tenantid IS '对应JSON字段:tenantid,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.siteid IS '对应JSON字段:siteid,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.sitename IS '对应JSON字段:sitename,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.balanceamount IS '对应JSON字段:balanceamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.cardamount IS '对应JSON字段:cardamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.cashamount IS '对应JSON字段:cashamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.couponamount IS '对应JSON字段:couponamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.createtime IS '对应JSON字段:createtime,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.memberid IS '对应JSON字段:memberid,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.membername IS '对应JSON字段:membername,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.tenantmembercardid IS '对应JSON字段:tenantmembercardid,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.membercardtypename IS '对应JSON字段:membercardtypename,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.memberphone IS '对应JSON字段:memberphone,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.tableid IS '对应JSON字段:tableid,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.consumemoney IS '对应JSON字段:consumemoney,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.onlineamount IS '对应JSON字段:onlineamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.operatorid IS '对应JSON字段:operatorid,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.operatorname IS '对应JSON字段:operatorname,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.revokeorderid IS '对应JSON字段:revokeorderid,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.revokeordername IS '对应JSON字段:revokeordername,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.revoketime IS '对应JSON字段:revoketime,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.payamount IS '对应JSON字段:payamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.pointamount IS '对应JSON字段:pointamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.refundamount IS '对应JSON字段:refundamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.settlename IS '对应JSON字段:settlename,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.settlerelateid IS '对应JSON字段:settlerelateid,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.settlestatus IS '对应JSON字段:settlestatus,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.settletype IS '对应JSON字段:settletype,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.paytime IS '对应JSON字段:paytime,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.roundingamount IS '对应JSON字段:roundingamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.paymentmethod IS '对应JSON字段:paymentmethod,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.adjustamount IS '对应JSON字段:adjustamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.assistantcxmoney IS '对应JSON字段:assistantcxmoney,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.assistantpdmoney IS '对应JSON字段:assistantpdmoney,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.couponsaleamount IS '对应JSON字段:couponsaleamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.memberdiscountamount IS '对应JSON字段:memberdiscountamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.tablechargemoney IS '对应JSON字段:tablechargemoney,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.goodsmoney IS '对应JSON字段:goodsmoney,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.realgoodsmoney IS '对应JSON字段:realgoodsmoney,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.servicemoney IS '对应JSON字段:servicemoney,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.prepaymoney IS '对应JSON字段:prepaymoney,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.salesmanname IS '对应JSON字段:salesmanname,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.orderremark IS '对应JSON字段:orderremark,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.salesmanuserid IS '对应JSON字段:salesmanuserid,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.canberevoked IS '对应JSON字段:canberevoked,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.pointdiscountprice IS '对应JSON字段:pointdiscountprice,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.pointdiscountcost IS '对应JSON字段:pointdiscountcost,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.activitydiscount IS '对应JSON字段:activitydiscount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.serialnumber IS '对应JSON字段:serialnumber,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.assistantmanualdiscount IS '对应JSON字段:assistantmanualdiscount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.allcoupondiscount IS '对应JSON字段:allcoupondiscount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.goodspromotionmoney IS '对应JSON字段:goodspromotionmoney,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.assistantpromotionmoney IS '对应JSON字段:assistantpromotionmoney,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.isusecoupon IS '对应JSON字段:isusecoupon,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.isusediscount IS '对应JSON字段:isusediscount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.isactivity IS '对应JSON字段:isactivity,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.isbindmember IS '对应JSON字段:isbindmember,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.isfirst IS '对应JSON字段:isfirst,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.rechargecardamount IS '对应JSON字段:rechargecardamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.giftcardamount IS '对应JSON字段:giftcardamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.recharge_settlements.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; +COMMENT ON TABLE billiards_ods.recharge_settlements IS 'ODS 原始明细表:充值结算记录。来源:C:/dev/LLTQ/export/test-json-doc/recharge_settlements.json;分析:recharge_settlements-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.id IS '【说明】门店 ID。 【示例】NULL(用于门店 ID)。 【ODS来源】recharge_settlements - id。 【JSON字段】recharge_settlements.json - $ - id。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.tenantid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】recharge_settlements - tenantid。 【JSON字段】recharge_settlements.json - $ - tenantid。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.siteid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】recharge_settlements - siteid。 【JSON字段】recharge_settlements.json - $ - siteid。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.sitename IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】recharge_settlements - sitename。 【JSON字段】recharge_settlements.json - $ - sitename。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.balanceamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】recharge_settlements - balanceamount。 【JSON字段】recharge_settlements.json - $ - balanceamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.cardamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】recharge_settlements - cardamount。 【JSON字段】recharge_settlements.json - $ - cardamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.cashamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】recharge_settlements - cashamount。 【JSON字段】recharge_settlements.json - $ - cashamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.couponamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】recharge_settlements - couponamount。 【JSON字段】recharge_settlements.json - $ - couponamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.createtime IS '【说明】时间字段,用于记录业务时间点/发生时间。 【示例】NULL(时间字段,用于记录业务时间点/发生时间)。 【ODS来源】recharge_settlements - createtime。 【JSON字段】recharge_settlements.json - $ - createtime。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.memberid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】recharge_settlements - memberid。 【JSON字段】recharge_settlements.json - $ - memberid。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.membername IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】recharge_settlements - membername。 【JSON字段】recharge_settlements.json - $ - membername。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.tenantmembercardid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】recharge_settlements - tenantmembercardid。 【JSON字段】recharge_settlements.json - $ - tenantmembercardid。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.membercardtypename IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】recharge_settlements - membercardtypename。 【JSON字段】recharge_settlements.json - $ - membercardtypename。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.memberphone IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】recharge_settlements - memberphone。 【JSON字段】recharge_settlements.json - $ - memberphone。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.tableid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】recharge_settlements - tableid。 【JSON字段】recharge_settlements.json - $ - tableid。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.consumemoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】recharge_settlements - consumemoney。 【JSON字段】recharge_settlements.json - $ - consumemoney。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.onlineamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】recharge_settlements - onlineamount。 【JSON字段】recharge_settlements.json - $ - onlineamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.operatorid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】recharge_settlements - operatorid。 【JSON字段】recharge_settlements.json - $ - operatorid。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.operatorname IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】recharge_settlements - operatorname。 【JSON字段】recharge_settlements.json - $ - operatorname。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.revokeorderid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】recharge_settlements - revokeorderid。 【JSON字段】recharge_settlements.json - $ - revokeorderid。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.revokeordername IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】recharge_settlements - revokeordername。 【JSON字段】recharge_settlements.json - $ - revokeordername。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.revoketime IS '【说明】时间字段,用于记录业务时间点/发生时间。 【示例】NULL(时间字段,用于记录业务时间点/发生时间)。 【ODS来源】recharge_settlements - revoketime。 【JSON字段】recharge_settlements.json - $ - revoketime。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.payamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】recharge_settlements - payamount。 【JSON字段】recharge_settlements.json - $ - payamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.pointamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】recharge_settlements - pointamount。 【JSON字段】recharge_settlements.json - $ - pointamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.refundamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】recharge_settlements - refundamount。 【JSON字段】recharge_settlements.json - $ - refundamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.settlename IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】recharge_settlements - settlename。 【JSON字段】recharge_settlements.json - $ - settlename。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.settlerelateid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】recharge_settlements - settlerelateid。 【JSON字段】recharge_settlements.json - $ - settlerelateid。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.settlestatus IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】recharge_settlements - settlestatus。 【JSON字段】recharge_settlements.json - $ - settlestatus。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.settletype IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】recharge_settlements - settletype。 【JSON字段】recharge_settlements.json - $ - settletype。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.paytime IS '【说明】时间字段,用于记录业务时间点/发生时间。 【示例】NULL(时间字段,用于记录业务时间点/发生时间)。 【ODS来源】recharge_settlements - paytime。 【JSON字段】recharge_settlements.json - $ - paytime。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.roundingamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】recharge_settlements - roundingamount。 【JSON字段】recharge_settlements.json - $ - roundingamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.paymentmethod IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】recharge_settlements - paymentmethod。 【JSON字段】recharge_settlements.json - $ - paymentmethod。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.adjustamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】recharge_settlements - adjustamount。 【JSON字段】recharge_settlements.json - $ - adjustamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.assistantcxmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】recharge_settlements - assistantcxmoney。 【JSON字段】recharge_settlements.json - $ - assistantcxmoney。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.assistantpdmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】recharge_settlements - assistantpdmoney。 【JSON字段】recharge_settlements.json - $ - assistantpdmoney。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.couponsaleamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】recharge_settlements - couponsaleamount。 【JSON字段】recharge_settlements.json - $ - couponsaleamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.memberdiscountamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】recharge_settlements - memberdiscountamount。 【JSON字段】recharge_settlements.json - $ - memberdiscountamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.tablechargemoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】recharge_settlements - tablechargemoney。 【JSON字段】recharge_settlements.json - $ - tablechargemoney。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.goodsmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】recharge_settlements - goodsmoney。 【JSON字段】recharge_settlements.json - $ - goodsmoney。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.realgoodsmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】recharge_settlements - realgoodsmoney。 【JSON字段】recharge_settlements.json - $ - realgoodsmoney。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.servicemoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】recharge_settlements - servicemoney。 【JSON字段】recharge_settlements.json - $ - servicemoney。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.prepaymoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】recharge_settlements - prepaymoney。 【JSON字段】recharge_settlements.json - $ - prepaymoney。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.salesmanname IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】recharge_settlements - salesmanname。 【JSON字段】recharge_settlements.json - $ - salesmanname。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.orderremark IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】recharge_settlements - orderremark。 【JSON字段】recharge_settlements.json - $ - orderremark。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.salesmanuserid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】recharge_settlements - salesmanuserid。 【JSON字段】recharge_settlements.json - $ - salesmanuserid。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.canberevoked IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】recharge_settlements - canberevoked。 【JSON字段】recharge_settlements.json - $ - canberevoked。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.pointdiscountprice IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】recharge_settlements - pointdiscountprice。 【JSON字段】recharge_settlements.json - $ - pointdiscountprice。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.pointdiscountcost IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】recharge_settlements - pointdiscountcost。 【JSON字段】recharge_settlements.json - $ - pointdiscountcost。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.activitydiscount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】recharge_settlements - activitydiscount。 【JSON字段】recharge_settlements.json - $ - activitydiscount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.serialnumber IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】recharge_settlements - serialnumber。 【JSON字段】recharge_settlements.json - $ - serialnumber。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.assistantmanualdiscount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】recharge_settlements - assistantmanualdiscount。 【JSON字段】recharge_settlements.json - $ - assistantmanualdiscount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.allcoupondiscount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】recharge_settlements - allcoupondiscount。 【JSON字段】recharge_settlements.json - $ - allcoupondiscount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.goodspromotionmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】recharge_settlements - goodspromotionmoney。 【JSON字段】recharge_settlements.json - $ - goodspromotionmoney。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.assistantpromotionmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】recharge_settlements - assistantpromotionmoney。 【JSON字段】recharge_settlements.json - $ - assistantpromotionmoney。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.isusecoupon IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】recharge_settlements - isusecoupon。 【JSON字段】recharge_settlements.json - $ - isusecoupon。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.isusediscount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】recharge_settlements - isusediscount。 【JSON字段】recharge_settlements.json - $ - isusediscount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.isactivity IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】recharge_settlements - isactivity。 【JSON字段】recharge_settlements.json - $ - isactivity。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.isbindmember IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】recharge_settlements - isbindmember。 【JSON字段】recharge_settlements.json - $ - isbindmember。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.isfirst IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】recharge_settlements - isfirst。 【JSON字段】recharge_settlements.json - $ - isfirst。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.rechargecardamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】recharge_settlements - rechargecardamount。 【JSON字段】recharge_settlements.json - $ - rechargecardamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.giftcardamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】recharge_settlements - giftcardamount。 【JSON字段】recharge_settlements.json - $ - giftcardamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】recharge_settlements.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【ODS来源】recharge_settlements - source_file(ETL补充)。 【JSON字段】recharge_settlements.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/recharge_settlements.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【ODS来源】recharge_settlements - source_endpoint(ETL补充)。 【JSON字段】recharge_settlements.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【ODS来源】recharge_settlements - fetched_at(ETL补充)。 【JSON字段】recharge_settlements.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【ODS来源】recharge_settlements - payload。 【JSON字段】recharge_settlements.json - $ - $。'; + CREATE TABLE IF NOT EXISTS billiards_ods.settlement_records ( id BIGINT PRIMARY KEY, @@ -466,72 +467,73 @@ CREATE TABLE IF NOT EXISTS billiards_ods.settlement_records ( payload JSONB NOT NULL ); -COMMENT ON TABLE billiards_ods.settlement_records IS '对应JSON字段:settlement_records.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.id IS '对应JSON字段:id,说明::结账记录主键 ID(订单结算 ID)。,示例值及对应分析:结构关联:'; -COMMENT ON COLUMN billiards_ods.settlement_records.tenantid IS '对应JSON字段:tenantid,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.siteid IS '对应JSON字段:siteid,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.sitename IS '对应JSON字段:sitename,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.balanceamount IS '对应JSON字段:balanceamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.cardamount IS '对应JSON字段:cardamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.cashamount IS '对应JSON字段:cashamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.couponamount IS '对应JSON字段:couponamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.createtime IS '对应JSON字段:createtime,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.memberid IS '对应JSON字段:memberid,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.membername IS '对应JSON字段:membername,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.tenantmembercardid IS '对应JSON字段:tenantmembercardid,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.membercardtypename IS '对应JSON字段:membercardtypename,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.memberphone IS '对应JSON字段:memberphone,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.tableid IS '对应JSON字段:tableid,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.consumemoney IS '对应JSON字段:consumemoney,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.onlineamount IS '对应JSON字段:onlineamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.operatorid IS '对应JSON字段:operatorid,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.operatorname IS '对应JSON字段:operatorname,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.revokeorderid IS '对应JSON字段:revokeorderid,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.revokeordername IS '对应JSON字段:revokeordername,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.revoketime IS '对应JSON字段:revoketime,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.payamount IS '对应JSON字段:payamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.pointamount IS '对应JSON字段:pointamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.refundamount IS '对应JSON字段:refundamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.settlename IS '对应JSON字段:settlename,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.settlerelateid IS '对应JSON字段:settlerelateid,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.settlestatus IS '对应JSON字段:settlestatus,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.settletype IS '对应JSON字段:settletype,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.paytime IS '对应JSON字段:paytime,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.roundingamount IS '对应JSON字段:roundingamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.paymentmethod IS '对应JSON字段:paymentmethod,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.adjustamount IS '对应JSON字段:adjustamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.assistantcxmoney IS '对应JSON字段:assistantcxmoney,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.assistantpdmoney IS '对应JSON字段:assistantpdmoney,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.couponsaleamount IS '对应JSON字段:couponsaleamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.memberdiscountamount IS '对应JSON字段:memberdiscountamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.tablechargemoney IS '对应JSON字段:tablechargemoney,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.goodsmoney IS '对应JSON字段:goodsmoney,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.realgoodsmoney IS '对应JSON字段:realgoodsmoney,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.servicemoney IS '对应JSON字段:servicemoney,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.prepaymoney IS '对应JSON字段:prepaymoney,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.salesmanname IS '对应JSON字段:salesmanname,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.orderremark IS '对应JSON字段:orderremark,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.salesmanuserid IS '对应JSON字段:salesmanuserid,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.canberevoked IS '对应JSON字段:canberevoked,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.pointdiscountprice IS '对应JSON字段:pointdiscountprice,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.pointdiscountcost IS '对应JSON字段:pointdiscountcost,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.activitydiscount IS '对应JSON字段:activitydiscount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.serialnumber IS '对应JSON字段:serialnumber,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.assistantmanualdiscount IS '对应JSON字段:assistantmanualdiscount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.allcoupondiscount IS '对应JSON字段:allcoupondiscount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.goodspromotionmoney IS '对应JSON字段:goodspromotionmoney,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.assistantpromotionmoney IS '对应JSON字段:assistantpromotionmoney,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.isusecoupon IS '对应JSON字段:isusecoupon,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.isusediscount IS '对应JSON字段:isusediscount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.isactivity IS '对应JSON字段:isactivity,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.isbindmember IS '对应JSON字段:isbindmember,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.isfirst IS '对应JSON字段:isfirst,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.rechargecardamount IS '对应JSON字段:rechargecardamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.giftcardamount IS '对应JSON字段:giftcardamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_records.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.settlement_records.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.settlement_records.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.settlement_records.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; +COMMENT ON TABLE billiards_ods.settlement_records IS 'ODS 原始明细表:结账/结算记录。来源:C:/dev/LLTQ/export/test-json-doc/settlement_records.json;分析:settlement_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.settlement_records.id IS '【说明】结账记录主键 ID(订单结算 ID)。 【示例】NULL(用于结账记录主键 ID(订单结算 ID))。 【ODS来源】settlement_records - id。 【JSON字段】settlement_records.json - $ - id。'; +COMMENT ON COLUMN billiards_ods.settlement_records.tenantid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】settlement_records - tenantid。 【JSON字段】settlement_records.json - $ - tenantid。'; +COMMENT ON COLUMN billiards_ods.settlement_records.siteid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】settlement_records - siteid。 【JSON字段】settlement_records.json - $ - siteid。'; +COMMENT ON COLUMN billiards_ods.settlement_records.sitename IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】settlement_records - sitename。 【JSON字段】settlement_records.json - $ - sitename。'; +COMMENT ON COLUMN billiards_ods.settlement_records.balanceamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】settlement_records - balanceamount。 【JSON字段】settlement_records.json - $ - balanceamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.cardamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】settlement_records - cardamount。 【JSON字段】settlement_records.json - $ - cardamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.cashamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】settlement_records - cashamount。 【JSON字段】settlement_records.json - $ - cashamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.couponamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】settlement_records - couponamount。 【JSON字段】settlement_records.json - $ - couponamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.createtime IS '【说明】时间字段,用于记录业务时间点/发生时间。 【示例】NULL(时间字段,用于记录业务时间点/发生时间)。 【ODS来源】settlement_records - createtime。 【JSON字段】settlement_records.json - $ - createtime。'; +COMMENT ON COLUMN billiards_ods.settlement_records.memberid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】settlement_records - memberid。 【JSON字段】settlement_records.json - $ - memberid。'; +COMMENT ON COLUMN billiards_ods.settlement_records.membername IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】settlement_records - membername。 【JSON字段】settlement_records.json - $ - membername。'; +COMMENT ON COLUMN billiards_ods.settlement_records.tenantmembercardid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】settlement_records - tenantmembercardid。 【JSON字段】settlement_records.json - $ - tenantmembercardid。'; +COMMENT ON COLUMN billiards_ods.settlement_records.membercardtypename IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】settlement_records - membercardtypename。 【JSON字段】settlement_records.json - $ - membercardtypename。'; +COMMENT ON COLUMN billiards_ods.settlement_records.memberphone IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】settlement_records - memberphone。 【JSON字段】settlement_records.json - $ - memberphone。'; +COMMENT ON COLUMN billiards_ods.settlement_records.tableid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】settlement_records - tableid。 【JSON字段】settlement_records.json - $ - tableid。'; +COMMENT ON COLUMN billiards_ods.settlement_records.consumemoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】settlement_records - consumemoney。 【JSON字段】settlement_records.json - $ - consumemoney。'; +COMMENT ON COLUMN billiards_ods.settlement_records.onlineamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】settlement_records - onlineamount。 【JSON字段】settlement_records.json - $ - onlineamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.operatorid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】settlement_records - operatorid。 【JSON字段】settlement_records.json - $ - operatorid。'; +COMMENT ON COLUMN billiards_ods.settlement_records.operatorname IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】settlement_records - operatorname。 【JSON字段】settlement_records.json - $ - operatorname。'; +COMMENT ON COLUMN billiards_ods.settlement_records.revokeorderid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】settlement_records - revokeorderid。 【JSON字段】settlement_records.json - $ - revokeorderid。'; +COMMENT ON COLUMN billiards_ods.settlement_records.revokeordername IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】settlement_records - revokeordername。 【JSON字段】settlement_records.json - $ - revokeordername。'; +COMMENT ON COLUMN billiards_ods.settlement_records.revoketime IS '【说明】时间字段,用于记录业务时间点/发生时间。 【示例】NULL(时间字段,用于记录业务时间点/发生时间)。 【ODS来源】settlement_records - revoketime。 【JSON字段】settlement_records.json - $ - revoketime。'; +COMMENT ON COLUMN billiards_ods.settlement_records.payamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】settlement_records - payamount。 【JSON字段】settlement_records.json - $ - payamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.pointamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】settlement_records - pointamount。 【JSON字段】settlement_records.json - $ - pointamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.refundamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】settlement_records - refundamount。 【JSON字段】settlement_records.json - $ - refundamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.settlename IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】settlement_records - settlename。 【JSON字段】settlement_records.json - $ - settlename。'; +COMMENT ON COLUMN billiards_ods.settlement_records.settlerelateid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】settlement_records - settlerelateid。 【JSON字段】settlement_records.json - $ - settlerelateid。'; +COMMENT ON COLUMN billiards_ods.settlement_records.settlestatus IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】settlement_records - settlestatus。 【JSON字段】settlement_records.json - $ - settlestatus。'; +COMMENT ON COLUMN billiards_ods.settlement_records.settletype IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】settlement_records - settletype。 【JSON字段】settlement_records.json - $ - settletype。'; +COMMENT ON COLUMN billiards_ods.settlement_records.paytime IS '【说明】时间字段,用于记录业务时间点/发生时间。 【示例】NULL(时间字段,用于记录业务时间点/发生时间)。 【ODS来源】settlement_records - paytime。 【JSON字段】settlement_records.json - $ - paytime。'; +COMMENT ON COLUMN billiards_ods.settlement_records.roundingamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】settlement_records - roundingamount。 【JSON字段】settlement_records.json - $ - roundingamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.paymentmethod IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】settlement_records - paymentmethod。 【JSON字段】settlement_records.json - $ - paymentmethod。'; +COMMENT ON COLUMN billiards_ods.settlement_records.adjustamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】settlement_records - adjustamount。 【JSON字段】settlement_records.json - $ - adjustamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.assistantcxmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】settlement_records - assistantcxmoney。 【JSON字段】settlement_records.json - $ - assistantcxmoney。'; +COMMENT ON COLUMN billiards_ods.settlement_records.assistantpdmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】settlement_records - assistantpdmoney。 【JSON字段】settlement_records.json - $ - assistantpdmoney。'; +COMMENT ON COLUMN billiards_ods.settlement_records.couponsaleamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】settlement_records - couponsaleamount。 【JSON字段】settlement_records.json - $ - couponsaleamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.memberdiscountamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】settlement_records - memberdiscountamount。 【JSON字段】settlement_records.json - $ - memberdiscountamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.tablechargemoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】settlement_records - tablechargemoney。 【JSON字段】settlement_records.json - $ - tablechargemoney。'; +COMMENT ON COLUMN billiards_ods.settlement_records.goodsmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】settlement_records - goodsmoney。 【JSON字段】settlement_records.json - $ - goodsmoney。'; +COMMENT ON COLUMN billiards_ods.settlement_records.realgoodsmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】settlement_records - realgoodsmoney。 【JSON字段】settlement_records.json - $ - realgoodsmoney。'; +COMMENT ON COLUMN billiards_ods.settlement_records.servicemoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】settlement_records - servicemoney。 【JSON字段】settlement_records.json - $ - servicemoney。'; +COMMENT ON COLUMN billiards_ods.settlement_records.prepaymoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】settlement_records - prepaymoney。 【JSON字段】settlement_records.json - $ - prepaymoney。'; +COMMENT ON COLUMN billiards_ods.settlement_records.salesmanname IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】settlement_records - salesmanname。 【JSON字段】settlement_records.json - $ - salesmanname。'; +COMMENT ON COLUMN billiards_ods.settlement_records.orderremark IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】settlement_records - orderremark。 【JSON字段】settlement_records.json - $ - orderremark。'; +COMMENT ON COLUMN billiards_ods.settlement_records.salesmanuserid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】settlement_records - salesmanuserid。 【JSON字段】settlement_records.json - $ - salesmanuserid。'; +COMMENT ON COLUMN billiards_ods.settlement_records.canberevoked IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】settlement_records - canberevoked。 【JSON字段】settlement_records.json - $ - canberevoked。'; +COMMENT ON COLUMN billiards_ods.settlement_records.pointdiscountprice IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】settlement_records - pointdiscountprice。 【JSON字段】settlement_records.json - $ - pointdiscountprice。'; +COMMENT ON COLUMN billiards_ods.settlement_records.pointdiscountcost IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】settlement_records - pointdiscountcost。 【JSON字段】settlement_records.json - $ - pointdiscountcost。'; +COMMENT ON COLUMN billiards_ods.settlement_records.activitydiscount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】settlement_records - activitydiscount。 【JSON字段】settlement_records.json - $ - activitydiscount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.serialnumber IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】settlement_records - serialnumber。 【JSON字段】settlement_records.json - $ - serialnumber。'; +COMMENT ON COLUMN billiards_ods.settlement_records.assistantmanualdiscount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】settlement_records - assistantmanualdiscount。 【JSON字段】settlement_records.json - $ - assistantmanualdiscount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.allcoupondiscount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】settlement_records - allcoupondiscount。 【JSON字段】settlement_records.json - $ - allcoupondiscount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.goodspromotionmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】settlement_records - goodspromotionmoney。 【JSON字段】settlement_records.json - $ - goodspromotionmoney。'; +COMMENT ON COLUMN billiards_ods.settlement_records.assistantpromotionmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】settlement_records - assistantpromotionmoney。 【JSON字段】settlement_records.json - $ - assistantpromotionmoney。'; +COMMENT ON COLUMN billiards_ods.settlement_records.isusecoupon IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】settlement_records - isusecoupon。 【JSON字段】settlement_records.json - $ - isusecoupon。'; +COMMENT ON COLUMN billiards_ods.settlement_records.isusediscount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】settlement_records - isusediscount。 【JSON字段】settlement_records.json - $ - isusediscount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.isactivity IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】settlement_records - isactivity。 【JSON字段】settlement_records.json - $ - isactivity。'; +COMMENT ON COLUMN billiards_ods.settlement_records.isbindmember IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】settlement_records - isbindmember。 【JSON字段】settlement_records.json - $ - isbindmember。'; +COMMENT ON COLUMN billiards_ods.settlement_records.isfirst IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】settlement_records - isfirst。 【JSON字段】settlement_records.json - $ - isfirst。'; +COMMENT ON COLUMN billiards_ods.settlement_records.rechargecardamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】settlement_records - rechargecardamount。 【JSON字段】settlement_records.json - $ - rechargecardamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.giftcardamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【ODS来源】settlement_records - giftcardamount。 【JSON字段】settlement_records.json - $ - giftcardamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】settlement_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【ODS来源】settlement_records - source_file(ETL补充)。 【JSON字段】settlement_records.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.settlement_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/settlement_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【ODS来源】settlement_records - source_endpoint(ETL补充)。 【JSON字段】settlement_records.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.settlement_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【ODS来源】settlement_records - fetched_at(ETL补充)。 【JSON字段】settlement_records.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.settlement_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【ODS来源】settlement_records - payload。 【JSON字段】settlement_records.json - $ - $。'; + CREATE TABLE IF NOT EXISTS billiards_ods.assistant_cancellation_records ( id BIGINT PRIMARY KEY, @@ -553,24 +555,25 @@ CREATE TABLE IF NOT EXISTS billiards_ods.assistant_cancellation_records ( payload JSONB NOT NULL ); -COMMENT ON TABLE billiards_ods.assistant_cancellation_records IS '对应JSON字段:assistant_cancellation_records.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 assistant_cancellation_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.id IS '对应JSON字段:id,说明:?????? assistant_cancellation_records-Analysis.md,示例值及对应分析:?? assistant_cancellation_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.siteId IS '对应JSON字段:siteId,说明:?????? assistant_cancellation_records-Analysis.md,示例值及对应分析:?? assistant_cancellation_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.siteProfile IS '对应JSON字段:siteProfile,说明:?????? assistant_cancellation_records-Analysis.md,示例值及对应分析:?? assistant_cancellation_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.assistantName IS '对应JSON字段:assistantName,说明:?????? assistant_cancellation_records-Analysis.md,示例值及对应分析:?? assistant_cancellation_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.assistantAbolishAmount IS '对应JSON字段:assistantAbolishAmount,说明:?????? assistant_cancellation_records-Analysis.md,示例值及对应分析:?? assistant_cancellation_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.assistantOn IS '对应JSON字段:assistantOn,说明:?????? assistant_cancellation_records-Analysis.md,示例值及对应分析:?? assistant_cancellation_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.pdChargeMinutes IS '对应JSON字段:pdChargeMinutes,说明:?????? assistant_cancellation_records-Analysis.md,示例值及对应分析:?? assistant_cancellation_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.tableAreaId IS '对应JSON字段:tableAreaId,说明:?????? assistant_cancellation_records-Analysis.md,示例值及对应分析:?? assistant_cancellation_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.tableArea IS '对应JSON字段:tableArea,说明:?????? assistant_cancellation_records-Analysis.md,示例值及对应分析:?? assistant_cancellation_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.tableId IS '对应JSON字段:tableId,说明:?????? assistant_cancellation_records-Analysis.md,示例值及对应分析:?? assistant_cancellation_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.tableName IS '对应JSON字段:tableName,说明:?????? assistant_cancellation_records-Analysis.md,示例值及对应分析:?? assistant_cancellation_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.trashReason IS '对应JSON字段:trashReason,说明:?????? assistant_cancellation_records-Analysis.md,示例值及对应分析:?? assistant_cancellation_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.createTime IS '对应JSON字段:createTime,说明:?????? assistant_cancellation_records-Analysis.md,示例值及对应分析:?? assistant_cancellation_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; +COMMENT ON TABLE billiards_ods.assistant_cancellation_records IS 'ODS 原始明细表:助教作废/取消记录。来源:C:/dev/LLTQ/export/test-json-doc/assistant_cancellation_records.json;分析:assistant_cancellation_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.id IS '【说明】本表主键 ID,用于唯一标识一条记录。 【示例】2957675849518789(本表主键 ID,用于唯一标识一条记录)。 【ODS来源】assistant_cancellation_records - id。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - id。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.siteId IS '【说明】门店 ID,即该废除记录所在门店。 【示例】2790685415443269(用于门店 ID,即该废除记录所在门店)。 【ODS来源】assistant_cancellation_records - siteId。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - siteId。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.siteProfile IS '【说明】门店信息快照。 【示例】{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "avatar": "https://oss.ficoo.vip/admin/hXcE4E…(用于门店信息快照)。 【ODS来源】assistant_cancellation_records - siteProfile。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - siteProfile。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.assistantName IS '【说明】助教姓名/对外展示名称。 【示例】泡芙(用于助教姓名/对外展示名称)。 【ODS来源】assistant_cancellation_records - assistantName。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - assistantName。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.assistantAbolishAmount IS '【说明】与“助教废除”关联的金额字段。 【示例】5.83(用于与“助教废除”关联的金额字段)。 【ODS来源】assistant_cancellation_records - assistantAbolishAmount。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - assistantAbolishAmount。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.assistantOn IS '【说明】助教编号(工号/序号)。 【示例】27(用于助教编号(工号/序号))。 【ODS来源】assistant_cancellation_records - assistantOn。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - assistantOn。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.pdChargeMinutes IS '【说明】“已发生的计费时长(分钟)”,即这次助教服务在被废除前已经累计了多少分钟。 【示例】214(用于“已发生的计费时长(分钟)”,即这次助教服务在被废除前已经累计了多少分钟)。 【ODS来源】assistant_cancellation_records - pdChargeMinutes。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - pdChargeMinutes。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.tableAreaId IS '【说明】台桌所在区域 ID。 【示例】2791963816579205(用于台桌所在区域 ID)。 【ODS来源】assistant_cancellation_records - tableAreaId。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - tableAreaId。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.tableArea IS '【说明】台桌所属区域名称。 【示例】C区(用于台桌所属区域名称)。 【ODS来源】assistant_cancellation_records - tableArea。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - tableArea。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.tableId IS '【说明】球台/桌子的 ID。 【示例】2793016660660357(用于球台/桌子的 ID)。 【ODS来源】assistant_cancellation_records - tableId。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - tableId。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.tableName IS '【说明】台桌名称/编号,供人阅读。 【示例】C1(用于台桌名称/编号,供人阅读)。 【ODS来源】assistant_cancellation_records - tableName。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - tableName。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.trashReason IS '【说明】用于记录“废除原因”的文本描述,例如“顾客临时有事取消”“录入错误”“更换助教”等。 【示例】NULL(用于记录“废除原因”的文本描述,例如“顾客临时有事取消”“录入错误”“更换助教”等)。 【ODS来源】assistant_cancellation_records - trashReason。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - trashReason。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.createTime IS '【说明】这条“助教废除记录”被创建的时间,即系统正式记录“废除”操作的时刻。 【示例】2025-11-09 19:23:29(用于这条“助教废除记录”被创建的时间,即系统正式记录“废除”操作的时刻)。 【ODS来源】assistant_cancellation_records - createTime。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - createTime。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】assistant_cancellation_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【ODS来源】assistant_cancellation_records - source_file(ETL补充)。 【JSON字段】assistant_cancellation_records.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/assistant_cancellation_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【ODS来源】assistant_cancellation_records - source_endpoint(ETL补充)。 【JSON字段】assistant_cancellation_records.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【ODS来源】assistant_cancellation_records - fetched_at(ETL补充)。 【JSON字段】assistant_cancellation_records.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【ODS来源】assistant_cancellation_records - payload。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - $。'; + CREATE TABLE IF NOT EXISTS billiards_ods.assistant_accounts_master ( id BIGINT PRIMARY KEY, @@ -641,71 +644,74 @@ CREATE TABLE IF NOT EXISTS billiards_ods.assistant_accounts_master ( payload JSONB NOT NULL ); -COMMENT ON TABLE billiards_ods.assistant_accounts_master IS '对应JSON字段:assistant_accounts_master.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 assistant_accounts_master-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.id IS '对应JSON字段:id,说明::助教账号主键 ID,在“助教流水.json”中对应 site_assistant_id。,示例值及对应分析:作用:所有与助教相关的事实表(助教流水、助教排班等)都会通过这个 ID 关联到该维表。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.tenant_id IS '对应JSON字段:tenant_id,说明::品牌/租户 ID,对应“非球科技”系统中该商户的唯一标识。,示例值及对应分析:用途:多门店时用来区分不同商户。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.site_id IS '对应JSON字段:site_id,说明::门店 ID,对应本次数据的这家球房(朗朗桌球)。,示例值及对应分析:关联:与其它 JSON(台费流水、库存、销售等)中的 site_id 一致。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.assistant_no IS '对应JSON字段:assistant_no,说明:(结合字段名推测):助教工号 / 编号,便于业务侧识别。,示例值及对应分析:关联:在“助教流水.json”中有 assistantNo,与此字段对应。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.nickname IS '对应JSON字段:nickname,说明::助教在前台展示的昵称,如“佳怡”“周周”“球球”等。,示例值及对应分析:用途:与真实姓名区分,用于顾客侧展示。如在助教流水中 nickname 就是这个值。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.real_name IS '对应JSON字段:real_name,说明::助教真实姓名,如“何海婷”“梁婷婷”等。,示例值及对应分析:关联:在“助教流水.json”的 assistantName 与此一致。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.mobile IS '对应JSON字段:mobile,说明::助教手机号,用于登录绑定、通知、钉钉同步等。,示例值及对应分析:?? assistant_accounts_master-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.team_id IS '对应JSON字段:team_id,说明::助教所属团队 ID。,示例值及对应分析:关联:在“助教流水.json”中 assistant_team_id 与此一致。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.team_name IS '对应JSON字段:team_name,说明::团队名称,展示用,和 team_id 一一对应。,示例值及对应分析:group_id'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.level IS '对应JSON字段:level,说明:(结合“助教流水中的 assistant_level / levelName 推测”):,示例值及对应分析:8:助教管理/管理员(和流水里的 "助教管理" 对应)'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.assistant_status IS '对应JSON字段:assistant_status,说明:(推测):账号启用状态:,示例值及对应分析:1:启用'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.work_status IS '对应JSON字段:work_status,说明::,示例值及对应分析:1:在岗/可排班'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.leave_status IS '对应JSON字段:leave_status,说明:类型:int,枚举。,示例值及对应分析:观测:'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.entry_time IS '对应JSON字段:entry_time,说明::入职时间。,示例值及对应分析:?? assistant_accounts_master-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.resign_time IS '对应JSON字段:resign_time,说明::离职日期;使用“远未来日期”作为“未离职”的占位。,示例值及对应分析:entry_type'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.start_time IS '对应JSON字段:start_time,说明:(推测):当前配置生效的开始日期。,示例值及对应分析:?? assistant_accounts_master-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.end_time IS '对应JSON字段:end_time,说明::当前配置生效的结束日期(例如一个周期性的排班/合同周期)。,示例值及对应分析:last_table_id'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.create_time IS '对应JSON字段:create_time,说明::账号创建时间。,示例值及对应分析:?? assistant_accounts_master-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.update_time IS '对应JSON字段:update_time,说明::账号最近一次被修改的时间(例如修改等级、昵称等)。,示例值及对应分析:?? assistant_accounts_master-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.order_trade_no IS '对应JSON字段:order_trade_no,说明:(推测):该助教最近一次关联的订单号,用于快速跳转或回溯最近服务行为。,示例值及对应分析:9. 灯控、钉钉等系统集成相关字段'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.staff_id IS '对应JSON字段:staff_id,说明:(推测):预留给“人事系统员工 ID”的字段,目前未接入或未启用。,示例值及对应分析:?? assistant_accounts_master-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.staff_profile_id IS '对应JSON字段:staff_profile_id,说明:(推测):人事档案 ID,与第三方 HR 系统或内部员工档案集成使用,当前未启用。,示例值及对应分析:4. 等级、计费与薪资配置字段'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.system_role_id IS '对应JSON字段:system_role_id,说明:?????? assistant_accounts_master-Analysis.md,示例值及对应分析:?? assistant_accounts_master-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.avatar IS '对应JSON字段:avatar,说明::助教头像地址。,示例值及对应分析:introduce'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.gender IS '对应JSON字段:gender,说明:(结合常见约定与值分布推测):,示例值及对应分析:0:未填/保密'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.show_status IS '对应JSON字段:show_status,说明:(推测):前台展示状态:,示例值及对应分析:1:在助教选择界面展示。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.show_sort IS '对应JSON字段:show_sort,说明::前台展示排序权重,值越小/越大对应不同的排序策略(当前看起来与 assistant_no 有一定对应关系)。,示例值及对应分析:online_status'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.sum_grade IS '对应JSON字段:sum_grade,说明::评分总和,用于计算平均分(assistant_grade = sum_grade / get_grade_times),当前为 0。,示例值及对应分析:?? assistant_accounts_master-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.get_grade_times IS '对应JSON字段:get_grade_times,说明::累计被评分次数。,示例值及对应分析:charge_way'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.video_introduction_url IS '对应JSON字段:video_introduction_url,说明::助教个人视频介绍地址。,示例值及对应分析:height'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.user_id IS '对应JSON字段:user_id,说明:账号对应的用户 ID/员工 ID,用于跨表关联。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.height IS '对应JSON字段:height,说明:身高(数值),可空。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.weight IS '对应JSON字段:weight,说明:体重(数值),可空。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.job_num IS '对应JSON字段:job_num,说明:工号/岗位编号,保留原始取值。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.assistant_grade IS '对应JSON字段:assistant_grade,说明:平均评分,通常 = sum_grade/get_grade_times。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.introduce IS '对应JSON字段:introduce,说明:个人简介/自我介绍,可空。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.group_id IS '对应JSON字段:group_id,说明:分组/自定义分组 ID。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.group_name IS '对应JSON字段:group_name,说明:分组名称。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.shop_name IS '对应JSON字段:shop_name,说明:门店名称冗余。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.charge_way IS '对应JSON字段:charge_way,说明:收费方式枚举,保留原值。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.entry_type IS '对应JSON字段:entry_type,说明:入职类型枚举,保留原值。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.allow_cx IS '对应JSON字段:allow_cx,说明:是否允许超休/冲销(0/1)。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.is_guaranteed IS '对应JSON字段:is_guaranteed,说明:是否保底(0/1)。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.salary_grant_enabled IS '对应JSON字段:salary_grant_enabled,说明:薪资发放/补贴开关,枚举。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.light_status IS '对应JSON字段:light_status,说明:灯控状态/模式,保留原值。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.online_status IS '对应JSON字段:online_status,说明:在线状态标记(0/1等)。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.is_delete IS '对应JSON字段:is_delete,说明:逻辑删除标记(0=有效,1=删除)。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.cx_unit_price IS '对应JSON字段:cx_unit_price,说明:超休单价/冲销单价,金额类。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.pd_unit_price IS '对应JSON字段:pd_unit_price,说明:排钟/点钟单价,金额类。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.last_table_id IS '对应JSON字段:last_table_id,说明:最近服务桌台 ID。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.last_table_name IS '对应JSON字段:last_table_name,说明:最近服务桌台名称。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.person_org_id IS '对应JSON字段:person_org_id,说明:人员组织 ID/部门 ID。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.serial_number IS '对应JSON字段:serial_number,说明:序列号/排序号,保留原值。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.is_team_leader IS '对应JSON字段:is_team_leader,说明:是否组长(0/1)。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.criticism_status IS '对应JSON字段:criticism_status,说明:处罚/警告状态标记,枚举。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.ding_talk_synced IS '对应JSON字段:ding_talk_synced,说明:是否已同步钉钉(0/1)。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.site_light_cfg_id IS '对应JSON字段:site_light_cfg_id,说明:门店灯控配置 ID。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.light_equipment_id IS '对应JSON字段:light_equipment_id,说明:灯控设备 ID/硬件编号。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.entry_sign_status IS '对应JSON字段:entry_sign_status,说明:入职签署状态,枚举。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.resign_sign_status IS '对应JSON字段:resign_sign_status,说明:离职签署状态,枚举。'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.assistant_accounts_master.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; +COMMENT ON TABLE billiards_ods.assistant_accounts_master IS 'ODS 原始明细表:助教档案主数据。来源:C:/dev/LLTQ/export/test-json-doc/assistant_accounts_master.json;分析:assistant_accounts_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.id IS '【说明】助教账号主键 ID,在“助教流水.json”中对应 site_assistant_id。 【示例】2947562271297029(用于助教账号主键 ID,在“助教流水.json”中对应 site_assistant_id)。 【ODS来源】assistant_accounts_master - id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - id。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.tenant_id IS '【说明】品牌/租户 ID,对应“非球科技”系统中该商户的唯一标识。 【示例】2790683160709957(用于品牌/租户 ID,对应“非球科技”系统中该商户的唯一标识)。 【ODS来源】assistant_accounts_master - tenant_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - tenant_id。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.site_id IS '【说明】门店 ID,对应本次数据的这家球房(朗朗桌球)。 【示例】2790685415443269(用于门店 ID,对应本次数据的这家球房(朗朗桌球))。 【ODS来源】assistant_accounts_master - site_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - site_id。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.assistant_no IS '【说明】助教工号 / 编号,便于业务侧识别。 【示例】31(用于助教工号 / 编号,便于业务侧识别)。 【ODS来源】assistant_accounts_master - assistant_no。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - assistant_no。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.nickname IS '【说明】助教在前台展示的昵称,如“佳怡”“周周”“球球”等。 【示例】小然(用于助教在前台展示的昵称,如“佳怡”“周周”“球球”等)。 【ODS来源】assistant_accounts_master - nickname。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - nickname。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.real_name IS '【说明】助教真实姓名,如“何海婷”“梁婷婷”等。 【示例】张静然(用于助教真实姓名,如“何海婷”“梁婷婷”等)。 【ODS来源】assistant_accounts_master - real_name。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - real_name。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.mobile IS '【说明】助教手机号,用于登录绑定、通知、钉钉同步等。 【示例】15119679931(助教手机号,用于登录绑定、通知、钉钉同步等)。 【ODS来源】assistant_accounts_master - mobile。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - mobile。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.team_id IS '【说明】助教所属团队 ID。 【示例】2792011585884037(用于助教所属团队 ID)。 【ODS来源】assistant_accounts_master - team_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - team_id。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.team_name IS '【说明】团队名称,展示用,和 team_id 一一对应。 【示例】1组(用于团队名称,展示用,和 team_id 一一对应)。 【ODS来源】assistant_accounts_master - team_name。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - team_name。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.user_id IS '【说明】系统级“用户账号 ID”,通常对应登录账号。 【示例】2947562270838277(用于系统级“用户账号 ID”,通常对应登录账号)。 【ODS来源】assistant_accounts_master - user_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - user_id。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.level IS '【说明】10 × 24。 【示例】20(用于10 × 24)。 【ODS来源】assistant_accounts_master - level。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - level。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.assistant_status IS '【说明】1 × 48。 【示例】1(用于1 × 48)。 【ODS来源】assistant_accounts_master - assistant_status。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - assistant_status。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.work_status IS '【说明】当 leave_status = 0 时,work_status = 1。 【示例】2(用于当 leave_status = 0 时,work_status = 1)。 【ODS来源】assistant_accounts_master - work_status。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - work_status。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.leave_status IS '【说明】0 × 21。 【示例】1(用于0 × 21)。 【ODS来源】assistant_accounts_master - leave_status。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - leave_status。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.entry_time IS '【说明】入职时间。 【示例】2025-11-02 08:00:00(用于入职时间)。 【ODS来源】assistant_accounts_master - entry_time。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - entry_time。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.resign_time IS '【说明】离职日期。 【示例】2025-11-03 08:00:00(用于离职日期)。 【ODS来源】assistant_accounts_master - resign_time。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - resign_time。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.start_time IS '【说明】当前配置生效的开始日期。 【示例】2025-11-01 08:00:00(用于当前配置生效的开始日期)。 【ODS来源】assistant_accounts_master - start_time。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - start_time。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.end_time IS '【说明】当前配置生效的结束日期(例如一个周期性的排班/合同周期)。 【示例】2025-12-01 08:00:00(用于当前配置生效的结束日期(例如一个周期性的排班/合同周期))。 【ODS来源】assistant_accounts_master - end_time。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - end_time。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.create_time IS '【说明】账号创建时间。 【示例】2025-11-02 15:55:26(用于账号创建时间)。 【ODS来源】assistant_accounts_master - create_time。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - create_time。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.update_time IS '【说明】账号最近一次被修改的时间(例如修改等级、昵称等)。 【示例】2025-11-03 18:32:07(用于账号最近一次被修改的时间(例如修改等级、昵称等))。 【ODS来源】assistant_accounts_master - update_time。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - update_time。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.order_trade_no IS '【说明】该助教最近一次关联的订单号,用于快速跳转或回溯最近服务行为。 【示例】0(该助教最近一次关联的订单号,用于快速跳转或回溯最近服务行为)。 【ODS来源】assistant_accounts_master - order_trade_no。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - order_trade_no。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.staff_id IS '【说明】预留给“人事系统员工 ID”的字段,目前未接入或未启用。 【示例】0(用于预留给“人事系统员工 ID”的字段,目前未接入或未启用)。 【ODS来源】assistant_accounts_master - staff_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - staff_id。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.staff_profile_id IS '【说明】人事档案 ID,与第三方 HR 系统或内部员工档案集成使用,当前未启用。 【示例】0(用于人事档案 ID,与第三方 HR 系统或内部员工档案集成使用,当前未启用)。 【ODS来源】assistant_accounts_master - staff_profile_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - staff_profile_id。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.system_role_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】10(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_accounts_master - system_role_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - system_role_id。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.avatar IS '【说明】助教头像地址。 【示例】https://oss.ficoo.vip/maUiImages/images/defaultAvatar.png(用于助教头像地址)。 【ODS来源】assistant_accounts_master - avatar。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - avatar。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.birth_date IS '【说明】助教出生日期。 【示例】0001-01-01 00:00:00(用于助教出生日期)。 【ODS来源】assistant_accounts_master - birth_date。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - birth_date。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.gender IS '【说明】0 × 40。 【示例】0(用于0 × 40)。 【ODS来源】assistant_accounts_master - gender。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - gender。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.height IS '【说明】身高(单位:厘米)。 【示例】0.0(用于身高(单位:厘米))。 【ODS来源】assistant_accounts_master - height。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - height。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.weight IS '【说明】体重(单位:公斤)。 【示例】0.0(用于体重(单位:公斤))。 【ODS来源】assistant_accounts_master - weight。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - weight。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.job_num IS '【说明】备用工号字段,目前未在该门店启用。 【示例】NULL(用于备用工号字段,目前未在该门店启用)。 【ODS来源】assistant_accounts_master - job_num。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - job_num。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.show_status IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【ODS来源】assistant_accounts_master - show_status。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - show_status。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.show_sort IS '【说明】前台展示排序权重,值越小/越大对应不同的排序策略(当前看起来与 assistant_no 有一定对应关系)。 【示例】31(用于前台展示排序权重,值越小/越大对应不同的排序策略(当前看起来与 assistant_no 有一定对应关系))。 【ODS来源】assistant_accounts_master - show_sort。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - show_sort。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.sum_grade IS '【说明】评分总和,用于计算平均分(assistant_grade = sum_grade / get_grade_times),当前为 0。 【示例】0.0(评分总和,用于计算平均分(assistant_grade = sum_grade / get_grade_times),当前为 0)。 【ODS来源】assistant_accounts_master - sum_grade。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - sum_grade。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.assistant_grade IS '【说明】助教综合评分(员工维度的平均分 snapshot),当前尚未启用评分。 【示例】0.0(用于助教综合评分(员工维度的平均分 snapshot),当前尚未启用评分)。 【ODS来源】assistant_accounts_master - assistant_grade。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - assistant_grade。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.get_grade_times IS '【说明】累计被评分次数。 【示例】0(用于累计被评分次数)。 【ODS来源】assistant_accounts_master - get_grade_times。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - get_grade_times。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.introduce IS '【说明】个人简介文案,预留给助教自我介绍使用。 【示例】NULL(用于个人简介文案,预留给助教自我介绍使用)。 【ODS来源】assistant_accounts_master - introduce。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - introduce。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.video_introduction_url IS '【说明】助教个人视频介绍地址。 【示例】https://oss.ficoo.vip/cbb/userVideo/1753096246308/175309624630830.mp4(用于助教个人视频介绍地址)。 【ODS来源】assistant_accounts_master - video_introduction_url。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - video_introduction_url。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.group_id IS '【说明】上层“分组 ID”预留字段(例如集团/事业部),本门店未使用。 【示例】0(用于上层“分组 ID”预留字段(例如集团/事业部),本门店未使用)。 【ODS来源】assistant_accounts_master - group_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - group_id。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.group_name IS '【说明】group_id 对应的名称,目前为空。 【示例】NULL(用于group_id 对应的名称,目前为空)。 【ODS来源】assistant_accounts_master - group_name。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - group_name。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.shop_name IS '【说明】门店名称,冗余字段,用于展示。 【示例】朗朗桌球(门店名称,冗余字段,用于展示)。 【ODS来源】assistant_accounts_master - shop_name。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - shop_name。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.charge_way IS '【说明】2 代表当前门店为“计时收费”,其他值(1、3 等)可能对应按局、按课时等,当前未出现。 【示例】2(用于2 代表当前门店为“计时收费”,其他值(1、3 等)可能对应按局、按课时等,当前未出现)。 【ODS来源】assistant_accounts_master - charge_way。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - charge_way。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.entry_type IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【ODS来源】assistant_accounts_master - entry_type。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - entry_type。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.allow_cx IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【ODS来源】assistant_accounts_master - allow_cx。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - allow_cx。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.is_guaranteed IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。。 【示例】1(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【ODS来源】assistant_accounts_master - is_guaranteed。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - is_guaranteed。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.salary_grant_enabled IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】2(来自 JSON 导出的原始字段,用于保留业务取值。)。 【ODS来源】assistant_accounts_master - salary_grant_enabled。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - salary_grant_enabled。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.light_status IS '【说明】灯光控制状态,如 1=启用控制、2=不启用 或相反。 【示例】2(用于灯光控制状态,如 1=启用控制、2=不启用 或相反)。 【ODS来源】assistant_accounts_master - light_status。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - light_status。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.online_status IS '【说明】在线状态。 【示例】1(用于在线状态)。 【ODS来源】assistant_accounts_master - online_status。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - online_status。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.is_delete IS '【说明】逻辑删除标记(0=否,1=是)。。 【示例】0(用于逻辑删除标记(0=否,1=是))。 【ODS来源】assistant_accounts_master - is_delete。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - is_delete。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.cx_unit_price IS '【说明】促销时段的单价,本门店未在账号表层面设置。 【示例】0.0(用于促销时段的单价,本门店未在账号表层面设置)。 【ODS来源】assistant_accounts_master - cx_unit_price。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - cx_unit_price。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.pd_unit_price IS '【说明】某种标准单价(例如“普通时段单价”),这里未在账号上配置(实际单价在助教商品或套餐配置中)。 【示例】0.0(用于某种标准单价(例如“普通时段单价”),这里未在账号上配置(实际单价在助教商品或套餐配置中))。 【ODS来源】assistant_accounts_master - pd_unit_price。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - pd_unit_price。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.last_table_id IS '【说明】该助教最近一次服务的球台 ID。 【示例】0(用于该助教最近一次服务的球台 ID)。 【ODS来源】assistant_accounts_master - last_table_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - last_table_id。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.last_table_name IS '【说明】最近服务球台名称(展示用)。 【示例】TV(用于最近服务球台名称(展示用))。 【ODS来源】assistant_accounts_master - last_table_name。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - last_table_name。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.person_org_id IS '【说明】人事组织 ID,通常表示“某某门店-助教部-某小组”等层级组织。 【示例】2947562271215109(用于人事组织 ID,通常表示“某某门店-助教部-某小组”等层级组织)。 【ODS来源】assistant_accounts_master - person_org_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - person_org_id。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.serial_number IS '【说明】系统内部生成的序列号或排序标识,用于全局排序或迁移。 【示例】0(系统内部生成的序列号或排序标识,用于全局排序或迁移)。 【ODS来源】assistant_accounts_master - serial_number。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - serial_number。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.is_team_leader IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。。 【示例】0(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【ODS来源】assistant_accounts_master - is_team_leader。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - is_team_leader。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.criticism_status IS '【说明】1 × 49。 【示例】1(用于1 × 49)。 【ODS来源】assistant_accounts_master - criticism_status。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - criticism_status。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.last_update_name IS '【说明】最近修改该账号配置的管理员名称。 【示例】管理员:郑丽珊(用于最近修改该账号配置的管理员名称)。 【ODS来源】assistant_accounts_master - last_update_name。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - last_update_name。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.ding_talk_synced IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【ODS来源】assistant_accounts_master - ding_talk_synced。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - ding_talk_synced。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.site_light_cfg_id IS '【说明】门店灯控配置 ID,本门店未在助教账号维度启用。 【示例】0(用于门店灯控配置 ID,本门店未在助教账号维度启用)。 【ODS来源】assistant_accounts_master - site_light_cfg_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - site_light_cfg_id。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.light_equipment_id IS '【说明】灯控设备 ID,如果开启“助教开台自动控制灯”,会通过该字段关联到灯控硬件。 【示例】NULL(用于灯控设备 ID,如果开启“助教开台自动控制灯”,会通过该字段关联到灯控硬件)。 【ODS来源】assistant_accounts_master - light_equipment_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - light_equipment_id。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.entry_sign_status IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】0(来自 JSON 导出的原始字段,用于保留业务取值。)。 【ODS来源】assistant_accounts_master - entry_sign_status。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - entry_sign_status。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.resign_sign_status IS '【说明】离职协议签署状态,类似上面。 【示例】0(用于离职协议签署状态,类似上面)。 【ODS来源】assistant_accounts_master - resign_sign_status。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - resign_sign_status。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】assistant_accounts_master.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【ODS来源】assistant_accounts_master - source_file(ETL补充)。 【JSON字段】assistant_accounts_master.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/assistant_accounts_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【ODS来源】assistant_accounts_master - source_endpoint(ETL补充)。 【JSON字段】assistant_accounts_master.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【ODS来源】assistant_accounts_master - fetched_at(ETL补充)。 【JSON字段】assistant_accounts_master.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【ODS来源】assistant_accounts_master - payload。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - $。'; + CREATE TABLE IF NOT EXISTS billiards_ods.assistant_service_records ( id BIGINT PRIMARY KEY, @@ -778,67 +784,76 @@ CREATE TABLE IF NOT EXISTS billiards_ods.assistant_service_records ( fetched_at TIMESTAMPTZ DEFAULT now() ); -COMMENT ON TABLE billiards_ods.assistant_service_records IS '对应JSON字段:assistant_service_records.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 assistant_service_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.id IS '对应JSON字段:id,说明::本条助教流水记录的主键 ID(流水唯一标识)。,示例值及对应分析:作用:在系统内部唯一定位这一条助教服务记录。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.tenant_id IS '对应JSON字段:tenant_id,说明::租户/品牌 ID;你这份数据中是固定值(同一个商户)。,示例值及对应分析:关联:全库所有表都有,作为“商户维度”的过滤键。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.site_id IS '对应JSON字段:site_id,说明::门店 ID,本数据中指“朗朗桌球”这一家门店。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.siteProfile IS '对应JSON字段:siteProfile,说明::门店信息快照,包括 id、shop_name、address 等,和其他 JSON 里的 siteProfile 一致。,示例值及对应分析:作用:冗余门店信息,方便查看(而不是每次都联表看门店档案)。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.site_table_id IS '对应JSON字段:site_table_id,说明::球台 ID。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.order_settle_id IS '对应JSON字段:order_settle_id,说明::订单结算 ID,相当于“结账单号”的内部主键。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.order_trade_no IS '对应JSON字段:order_trade_no,说明::订单交易号,整个订单层面的编号。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.order_pay_id IS '对应JSON字段:order_pay_id,说明::关联到“支付记录”的主键 ID。,示例值及对应分析:作用:可以和支付记录中的 id / relate_id 等字段对应,找到这条助教服务对应的支付流水。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.order_assistant_id IS '对应JSON字段:order_assistant_id,说明::订单中“助教项目明细”的内部 ID。,示例值及对应分析:作用:如果订单里有多条助教项目(比如换助教、多个时间段),此字段唯一标识这一条助教明细。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.order_assistant_type IS '对应JSON字段:order_assistant_type,说明:(推测):,示例值及对应分析:1:常规助教服务(主课/基础课)。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.assistantName IS '对应JSON字段:assistantName,说明::助教姓名,如“何海婷”“胡敏”等。,示例值及对应分析:备注:和助教账号档案里的 real_name 一致。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.assistantNo IS '对应JSON字段:assistantNo,说明::助教编号,例如 "27"。,示例值及对应分析:关联:在助教账号表里也有 assistant_no 字段,对应工号/编号。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.assistant_level IS '对应JSON字段:assistant_level,说明::助教等级名称,与 assistant_level 一一对应(初级/中级/高级/助教管理)。,示例值及对应分析:备注:属于展示用的冗余字段。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.assistant_team_id IS '对应JSON字段:assistant_team_id,说明::当前这条助教服务所对应的“课程/技能名称”。,示例值及对应分析:当 order_assistant_type = 1 时,多为“基础课”。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.nickname IS '对应JSON字段:nickname,说明::助教对外昵称,如“佳怡”“周周”“球球”等。,示例值及对应分析:说明:从数据看,这个 nickname 是“助教昵称”,不是顾客昵称(容易混淆)。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_name IS '对应JSON字段:ledger_name,说明:?????? assistant_service_records-Analysis.md,示例值及对应分析:?? assistant_service_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_group_name IS '对应JSON字段:ledger_group_name,说明:(推测):助教项目所属的“计费分组/套餐分组名称”,例如某种助教套餐或业务组名称。,示例值及对应分析:目前未被实际使用。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_amount IS '对应JSON字段:ledger_amount,说明::按标准单价计算出来的应收金额(近似 = ledger_unit_price × income_seconds / 3600)。,示例值及对应分析:说明:从数据看,这个金额对应“按原价计费”的金额,未扣除各种优惠。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_count IS '对应JSON字段:ledger_count,说明::台账记录的计时总秒数。,示例值及对应分析:特点:'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_unit_price IS '对应JSON字段:ledger_unit_price,说明::助教服务 标准单价(通常是标价:每小时、每节课的单价)。,示例值及对应分析:特点:如 98.0、108.0、190.0 等。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_status IS '对应JSON字段:ledger_status,说明:(推测):助教流水记录状态:,示例值及对应分析:1:正常有效。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_start_time IS '对应JSON字段:ledger_start_time,说明::台账层面记录的开始时间。,示例值及对应分析:说明:与 start_use_time 在当前数据中完全一致,可以视为“计费起始时间”。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_end_time IS '对应JSON字段:ledger_end_time,说明::台账层面的结束时间。,示例值及对应分析:说明:与 last_use_time 一致,可以视为“计费结束时间”。对于 real_use_seconds = 0 的记录,开始和结束时间相同,说明只是预约/录入,并未实际服务。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.manual_discount_amount IS '对应JSON字段:manual_discount_amount,说明::收银员手动给予的减免金额(人工改价)。,示例值及对应分析:当前导出时间段内暂未出现手动打折的情况。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.member_discount_amount IS '对应JSON字段:member_discount_amount,说明::由会员卡折扣产生的优惠金额。,示例值及对应分析:说明:尽管字段里是 0,但实际折扣可能已经体现在 projected_income 与 ledger_amount 的差额中,这里只是未单独拆出。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.coupon_deduct_money IS '对应JSON字段:coupon_deduct_money,说明::由“优惠券/代金券/团购券”等 直接抵扣到这条助教服务上的金额。,示例值及对应分析:说明:'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.service_money IS '对应JSON字段:service_money,说明:(推测):用于记录与助教结算的金额(平台预留的“成本/分成”字段)。,示例值及对应分析:当前数据中未启用这个机制,所以全为 0。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.projected_income IS '对应JSON字段:projected_income,说明::实际结算计入门店的金额(已经考虑折扣、卡权益、券等后的结果)。,示例值及对应分析:从数据:projected_income 明显低于 ledger_amount,说明中间有折扣,但折扣的明细并不全由下面几个字段体现(很多是卡权益内生折扣)。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.real_use_seconds IS '对应JSON字段:real_use_seconds,说明::实际使用时长(秒)。,示例值及对应分析:特点:'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.income_seconds IS '对应JSON字段:income_seconds,说明::计费秒数 / 应计收入对应的时间。,示例值及对应分析:特点:'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.start_use_time IS '对应JSON字段:start_use_time,说明::助教实际开始服务时间。,示例值及对应分析:特点:正常情况下与 ledger_start_time 相同。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.last_use_time IS '对应JSON字段:last_use_time,说明::最后一次使用(实际服务)时间。,示例值及对应分析:特点:正常结束时与 ledger_end_time 相同;如果服务还未真正开始或立即结束,开始/结束时间可能相同。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.create_time IS '对应JSON字段:create_time,说明::这条助教流水记录创建时间(一般接近结算/下单时间)。,示例值及对应分析:?? assistant_service_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.is_single_order IS '对应JSON字段:is_single_order,说明:(推测):是否单独订单:,示例值及对应分析:1:本助教服务作为单独订单结算(或单独拆项)。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.is_delete IS '对应JSON字段:is_delete,说明::逻辑删除标志。,示例值及对应分析:0:未删除;'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.is_trash IS '对应JSON字段:is_trash,说明::是否已废除/作废:,示例值及对应分析:0:正常有效;'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.trash_reason IS '对应JSON字段:trash_reason,说明::废除原因(文本说明),例如“顾客取消”“录入错误”等。,示例值及对应分析:当前数据为空字符串,说明当前导出时间段没有被废除的助教流水记录。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.trash_applicant_id IS '对应JSON字段:trash_applicant_id,说明::提出废除申请的员工 ID(通常是操作员/管理员)。,示例值及对应分析:当前数据全为 0,因此短期内没有发生废除操作。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.trash_applicant_name IS '对应JSON字段:trash_applicant_name,说明::废除申请人姓名。,示例值及对应分析:?? assistant_service_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.operator_id IS '对应JSON字段:operator_id,说明::操作员 ID(录入/结算这条助教服务的员工)。,示例值及对应分析:关联:可与员工/账号表对应(本次导出未单独给员工表,但其他 JSON 里多处出现该 ID)。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.operator_name IS '对应JSON字段:operator_name,说明::操作员姓名,与 operator_id 一起使用,便于直接阅读。,示例值及对应分析:user_id'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.salesman_name IS '对应JSON字段:salesman_name,说明::关联的“营业员/销售员姓名”,用于提成归属。,示例值及对应分析:观测:本数据中多数为空字符串,说明助教流水没有配置单独的营业员。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.salesman_org_id IS '对应JSON字段:salesman_org_id,说明::营业员所属组织/部门 ID。,示例值及对应分析:观测:多为 0。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.salesman_user_id IS '对应JSON字段:salesman_user_id,说明::营业员用户 ID。,示例值及对应分析:观测:多为 0,代表未指定。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.person_org_id IS '对应JSON字段:person_org_id,说明:同样在上文说明:助教所属人事组织 ID。,示例值及对应分析:9. 作废 / 废除相关字段'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.add_clock IS '对应JSON字段:add_clock,说明:(推测):加钟秒数,即在原有预约/服务基础上临时追加的时长。,示例值及对应分析:说明:值均为 60 的倍数(分钟级加钟),如 600 秒=10 分钟。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.returns_clock IS '对应JSON字段:returns_clock,说明:(推测):退钟秒数(取消加钟或提前结束退回的时间)。,示例值及对应分析:当前数据里没有退钟场景,所以全为 0,但字段设计已经预留。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.composite_grade IS '对应JSON字段:composite_grade,说明::综合评分(例如技能+服务加权后的平均分),当前数据没有实际评分。,示例值及对应分析:?? assistant_service_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.composite_grade_time IS '对应JSON字段:composite_grade_time,说明:(推测):最近一次评价时间/综合评分更新时间。现在都是默认“无效时间”。,示例值及对应分析:3. 桌台 / 门店维度字段'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.skill_grade IS '对应JSON字段:skill_grade,说明:(推测):顾客对“技能表现”的评分(整数或打分等级)。,示例值及对应分析:当前数据中还未产生评分记录,所以都是默认值 0。'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.service_grade IS '对应JSON字段:service_grade,说明:(推测):顾客对“服务态度”的评分。,示例值及对应分析:?? assistant_service_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.sum_grade IS '对应JSON字段:sum_grade,说明::累计评分总和(可能用于计算平均分),当前为 0。,示例值及对应分析:?? assistant_service_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.grade_status IS '对应JSON字段:grade_status,说明:(推测):评价状态,比如:,示例值及对应分析:1 = 未评价/正常;'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.get_grade_times IS '对应JSON字段:get_grade_times,说明::该条记录对应的评价次数(或该助教被评价次数快照)。,示例值及对应分析:?? assistant_service_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.is_not_responding IS '对应JSON字段:is_not_responding,说明:(推测):是否存在“爽约/未响应”情况:,示例值及对应分析:0:正常;'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.is_confirm IS '对应JSON字段:is_confirm,说明:(推测):确认状态,例如:,示例值及对应分析:1:待确认;'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.assistant_service_records.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; +COMMENT ON TABLE billiards_ods.assistant_service_records IS 'ODS 原始明细表:助教服务流水。来源:C:/dev/LLTQ/export/test-json-doc/assistant_service_records.json;分析:assistant_service_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.id IS '【说明】本条助教流水记录的主键 ID(流水唯一标识)。 【示例】2957913441292165(用于本条助教流水记录的主键 ID(流水唯一标识))。 【ODS来源】assistant_service_records - id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【ODS来源】assistant_service_records - tenant_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - tenant_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.site_id IS '【说明】门店 ID,本数据中指“朗朗桌球”这一家门店。 【示例】2790685415443269(用于门店 ID,本数据中指“朗朗桌球”这一家门店)。 【ODS来源】assistant_service_records - site_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - site_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.siteProfile IS '【说明】门店信息快照,包括 id、shop_name、address 等,和其他 JSON 里的 siteProfile 一致。 【示例】{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "avatar": "https://oss.ficoo.vip/admin/hXcE4E…(用于门店信息快照,包括 id、shop_name、address 等,和其他 JSON 里的 siteProfile 一致)。 【ODS来源】assistant_service_records - siteProfile。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - siteProfile。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.site_table_id IS '【说明】球台 ID。 【示例】2793020259897413(用于球台 ID)。 【ODS来源】assistant_service_records - site_table_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - site_table_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.order_settle_id IS '【说明】订单结算 ID,相当于“结账单号”的内部主键。 【示例】2957913171693253(用于订单结算 ID,相当于“结账单号”的内部主键)。 【ODS来源】assistant_service_records - order_settle_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_settle_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.order_trade_no IS '【说明】订单交易号,整个订单层面的编号。 【示例】2957784612605829(用于订单交易号,整个订单层面的编号)。 【ODS来源】assistant_service_records - order_trade_no。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_trade_no。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.order_pay_id IS '【说明】关联到“支付记录”的主键 ID。 【示例】0(用于关联到“支付记录”的主键 ID)。 【ODS来源】assistant_service_records - order_pay_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_pay_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.order_assistant_id IS '【说明】订单中“助教项目明细”的内部 ID。 【示例】2957788717240005(用于订单中“助教项目明细”的内部 ID)。 【ODS来源】assistant_service_records - order_assistant_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_assistant_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.order_assistant_type IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【ODS来源】assistant_service_records - order_assistant_type。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_assistant_type。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.assistantName IS '【说明】助教姓名,如“何海婷”“胡敏”等。 【示例】何海婷(用于助教姓名,如“何海婷”“胡敏”等)。 【ODS来源】assistant_service_records - assistantName。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - assistantName。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.assistantNo IS '【说明】助教编号,例如 "27"。 【示例】27(用于助教编号,例如 "27")。 【ODS来源】assistant_service_records - assistantNo。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - assistantNo。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.assistant_level IS '【说明】助教等级名称,与 assistant_level 一一对应(初级/中级/高级/助教管理)。 【示例】10(用于助教等级名称,与 assistant_level 一一对应(初级/中级/高级/助教管理))。 【ODS来源】assistant_service_records - assistant_level。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - assistant_level。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.levelname IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_service_records - levelname。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - levelName。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.site_assistant_id IS '【说明】门店维度的助教 ID。 【示例】2946266869435205(用于门店维度的助教 ID)。 【ODS来源】assistant_service_records - site_assistant_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - site_assistant_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.skill_id IS '【说明】助教服务“课程/技能”ID。 【示例】2790683529513797(用于助教服务“课程/技能”ID)。 【ODS来源】assistant_service_records - skill_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - skill_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.skillname IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_service_records - skillname。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - skillName。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.system_member_id IS '【说明】系统级会员 ID(全集团统一 ID)。 【示例】0(用于系统级会员 ID(全集团统一 ID))。 【ODS来源】assistant_service_records - system_member_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - system_member_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.tablename IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_service_records - tablename。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - tableName。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.tenant_member_id IS '【说明】商户维度会员 ID(门店/品牌内的会员主键)。 【示例】0(用于商户维度会员 ID(门店/品牌内的会员主键))。 【ODS来源】assistant_service_records - tenant_member_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - tenant_member_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.user_id IS '【说明】助教对应的“用户账号 ID”(系统级用户)。 【示例】2946266868976453(用于助教对应的“用户账号 ID”(系统级用户))。 【ODS来源】assistant_service_records - user_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - user_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.assistant_team_id IS '【说明】助教所属团队 ID。 【示例】2792011585884037(用于助教所属团队 ID)。 【ODS来源】assistant_service_records - assistant_team_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - assistant_team_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.nickname IS '【说明】助教对外昵称,如“佳怡”“周周”“球球”等。 【示例】泡芙(用于助教对外昵称,如“佳怡”“周周”“球球”等)。 【ODS来源】assistant_service_records - nickname。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - nickname。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】27-泡芙(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_service_records - ledger_name。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_name。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_group_name IS '【说明】助教项目所属的“计费分组/套餐分组名称”,例如某种助教套餐或业务组名称。 【示例】NULL(用于助教项目所属的“计费分组/套餐分组名称”,例如某种助教套餐或业务组名称)。 【ODS来源】assistant_service_records - ledger_group_name。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_group_name。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_amount IS '【说明】按标准单价计算出来的应收金额(近似 = ledger_unit_price × income_seconds / 3600)。 【示例】206.67(用于按标准单价计算出来的应收金额(近似 = ledger_unit_price × income_seconds / 3600))。 【ODS来源】assistant_service_records - ledger_amount。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_amount。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_count IS '【说明】台账记录的计时总秒数。 【示例】7592(用于台账记录的计时总秒数)。 【ODS来源】assistant_service_records - ledger_count。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_count。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_unit_price IS '【说明】助教服务 标准单价(通常是标价:每小时、每节课的单价)。 【示例】98.0(用于助教服务 标准单价(通常是标价:每小时、每节课的单价))。 【ODS来源】assistant_service_records - ledger_unit_price。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_unit_price。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_status IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【ODS来源】assistant_service_records - ledger_status。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_status。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_start_time IS '【说明】台账层面记录的开始时间。 【示例】2025-11-09 21:18:18(用于台账层面记录的开始时间)。 【ODS来源】assistant_service_records - ledger_start_time。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_start_time。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_end_time IS '【说明】台账层面的结束时间。 【示例】2025-11-09 23:24:50(用于台账层面的结束时间)。 【ODS来源】assistant_service_records - ledger_end_time。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_end_time。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.manual_discount_amount IS '【说明】收银员手动给予的减免金额(人工改价)。 【示例】0.0(用于收银员手动给予的减免金额(人工改价))。 【ODS来源】assistant_service_records - manual_discount_amount。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - manual_discount_amount。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.member_discount_amount IS '【说明】由会员卡折扣产生的优惠金额。 【示例】0.0(用于由会员卡折扣产生的优惠金额)。 【ODS来源】assistant_service_records - member_discount_amount。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - member_discount_amount。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.coupon_deduct_money IS '【说明】由“优惠券/代金券/团购券”等 直接抵扣到这条助教服务上的金额。 【示例】0.0(用于由“优惠券/代金券/团购券”等 直接抵扣到这条助教服务上的金额)。 【ODS来源】assistant_service_records - coupon_deduct_money。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - coupon_deduct_money。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.service_money IS '【说明】用于记录与助教结算的金额(平台预留的“成本/分成”字段)。 【示例】0.0(用于记录与助教结算的金额(平台预留的“成本/分成”字段))。 【ODS来源】assistant_service_records - service_money。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - service_money。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.projected_income IS '【说明】实际结算计入门店的金额(已经考虑折扣、卡权益、券等后的结果)。 【示例】168.0(用于实际结算计入门店的金额(已经考虑折扣、卡权益、券等后的结果))。 【ODS来源】assistant_service_records - projected_income。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - projected_income。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.real_use_seconds IS '【说明】实际使用时长(秒)。 【示例】7592(用于实际使用时长(秒))。 【ODS来源】assistant_service_records - real_use_seconds。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - real_use_seconds。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.income_seconds IS '【说明】计费秒数 / 应计收入对应的时间。 【示例】7560(用于计费秒数 / 应计收入对应的时间)。 【ODS来源】assistant_service_records - income_seconds。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - income_seconds。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.start_use_time IS '【说明】助教实际开始服务时间。 【示例】2025-11-09 21:18:18(用于助教实际开始服务时间)。 【ODS来源】assistant_service_records - start_use_time。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - start_use_time。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.last_use_time IS '【说明】最后一次使用(实际服务)时间。 【示例】2025-11-09 23:24:50(用于最后一次使用(实际服务)时间)。 【ODS来源】assistant_service_records - last_use_time。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - last_use_time。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.create_time IS '【说明】这条助教流水记录创建时间(一般接近结算/下单时间)。 【示例】2025-11-09 23:25:11(用于这条助教流水记录创建时间(一般接近结算/下单时间))。 【ODS来源】assistant_service_records - create_time。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - create_time。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.is_single_order IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。。 【示例】1(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【ODS来源】assistant_service_records - is_single_order。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - is_single_order。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.is_delete IS '【说明】逻辑删除标志。 【示例】0(用于逻辑删除标志)。 【ODS来源】assistant_service_records - is_delete。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - is_delete。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.is_trash IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。。 【示例】0(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【ODS来源】assistant_service_records - is_trash。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - is_trash。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.trash_reason IS '【说明】废除原因(文本说明),例如“顾客取消”“录入错误”等。 【示例】NULL(用于废除原因(文本说明),例如“顾客取消”“录入错误”等)。 【ODS来源】assistant_service_records - trash_reason。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - trash_reason。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.trash_applicant_id IS '【说明】提出废除申请的员工 ID(通常是操作员/管理员)。 【示例】0(用于提出废除申请的员工 ID(通常是操作员/管理员))。 【ODS来源】assistant_service_records - trash_applicant_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - trash_applicant_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.trash_applicant_name IS '【说明】废除申请人姓名。 【示例】NULL(用于废除申请人姓名)。 【ODS来源】assistant_service_records - trash_applicant_name。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - trash_applicant_name。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.operator_id IS '【说明】操作员 ID(录入/结算这条助教服务的员工)。 【示例】2790687322443013(用于操作员 ID(录入/结算这条助教服务的员工))。 【ODS来源】assistant_service_records - operator_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - operator_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.operator_name IS '【说明】操作员姓名,与 operator_id 一起使用,便于直接阅读。 【示例】收银员:郑丽珊(用于操作员姓名,与 operator_id 一起使用,便于直接阅读)。 【ODS来源】assistant_service_records - operator_name。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - operator_name。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.salesman_name IS '【说明】关联的“营业员/销售员姓名”,用于提成归属。 【示例】NULL(关联的“营业员/销售员姓名”,用于提成归属)。 【ODS来源】assistant_service_records - salesman_name。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - salesman_name。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.salesman_org_id IS '【说明】营业员所属组织/部门 ID。 【示例】0(用于营业员所属组织/部门 ID)。 【ODS来源】assistant_service_records - salesman_org_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - salesman_org_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.salesman_user_id IS '【说明】营业员用户 ID。 【示例】0(用于营业员用户 ID)。 【ODS来源】assistant_service_records - salesman_user_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - salesman_user_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.person_org_id IS '【说明】助教所属“人事组织/部门 ID”。 【示例】2946266869336901(用于助教所属“人事组织/部门 ID”)。 【ODS来源】assistant_service_records - person_org_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - person_org_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.add_clock IS '【说明】加钟秒数,即在原有预约/服务基础上临时追加的时长。 【示例】0(用于加钟秒数,即在原有预约/服务基础上临时追加的时长)。 【ODS来源】assistant_service_records - add_clock。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - add_clock。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.returns_clock IS '【说明】退钟秒数(取消加钟或提前结束退回的时间)。 【示例】0(用于退钟秒数(取消加钟或提前结束退回的时间))。 【ODS来源】assistant_service_records - returns_clock。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - returns_clock。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.composite_grade IS '【说明】综合评分(例如技能+服务加权后的平均分),当前数据没有实际评分。 【示例】0.0(用于综合评分(例如技能+服务加权后的平均分),当前数据没有实际评分)。 【ODS来源】assistant_service_records - composite_grade。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - composite_grade。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.composite_grade_time IS '【说明】助教服务所在的球台名称(如 "A17"、"S1")。 【示例】0001-01-01 00:00:00(用于助教服务所在的球台名称(如 "A17"、"S1"))。 【ODS来源】assistant_service_records - composite_grade_time。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - composite_grade_time。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.skill_grade IS '【说明】顾客对“技能表现”的评分(整数或打分等级)。 【示例】0(用于顾客对“技能表现”的评分(整数或打分等级))。 【ODS来源】assistant_service_records - skill_grade。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - skill_grade。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.service_grade IS '【说明】顾客对“服务态度”的评分。 【示例】0(用于顾客对“服务态度”的评分)。 【ODS来源】assistant_service_records - service_grade。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - service_grade。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.sum_grade IS '【说明】累计评分总和(可能用于计算平均分),当前为 0。 【示例】0.0(累计评分总和(可能用于计算平均分),当前为 0)。 【ODS来源】assistant_service_records - sum_grade。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - sum_grade。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.grade_status IS '【说明】1 = 未评价/正常。 【示例】1(用于1 = 未评价/正常)。 【ODS来源】assistant_service_records - grade_status。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - grade_status。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.get_grade_times IS '【说明】该条记录对应的评价次数(或该助教被评价次数快照)。 【示例】0(用于该条记录对应的评价次数(或该助教被评价次数快照))。 【ODS来源】assistant_service_records - get_grade_times。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - get_grade_times。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.is_not_responding IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。。 【示例】0(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【ODS来源】assistant_service_records - is_not_responding。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - is_not_responding。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.is_confirm IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。。 【示例】2(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【ODS来源】assistant_service_records - is_confirm。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - is_confirm。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【ODS来源】assistant_service_records - payload。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - $。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】assistant_service_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【ODS来源】assistant_service_records - source_file(ETL补充)。 【JSON字段】assistant_service_records.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/assistant_service_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【ODS来源】assistant_service_records - source_endpoint(ETL补充)。 【JSON字段】assistant_service_records.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【ODS来源】assistant_service_records - fetched_at(ETL补充)。 【JSON字段】assistant_service_records.json - ETL元数据 - 无。'; + CREATE TABLE IF NOT EXISTS billiards_ods.site_tables_master ( id BIGINT PRIMARY KEY, @@ -872,36 +887,36 @@ CREATE TABLE IF NOT EXISTS billiards_ods.site_tables_master ( payload JSONB NOT NULL ); -COMMENT ON TABLE billiards_ods.site_tables_master IS '对应JSON字段:site_tables_master.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 site_tables_master-Analysis.md'; -COMMENT ON COLUMN billiards_ods.site_tables_master.id IS '对应JSON字段:id,说明::台桌主键 ID。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.site_tables_master.site_id IS '对应JSON字段:site_id,说明::门店 ID。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.site_tables_master.siteName IS '对应JSON字段:siteName,说明::门店名称快照,冗余字段,配合 site_id 使用。,示例值及对应分析:?? site_tables_master-Analysis.md'; -COMMENT ON COLUMN billiards_ods.site_tables_master."appletQrCodeUrl" IS '对应JSON字段:appletQrCodeUrl,说明::小程序二维码 URL。 一般用于:,示例值及对应分析:打印二维码贴在台上,顾客扫码可呼叫服务、查看账单或发起线上预约;'; -COMMENT ON COLUMN billiards_ods.site_tables_master.areaName IS '对应JSON字段:areaName,说明::区域名称,用于前台展示和区域维度管理。,示例值及对应分析:结构特征:'; -COMMENT ON COLUMN billiards_ods.site_tables_master.audit_status IS '对应JSON字段:audit_status,说明:(结合命名惯例):,示例值及对应分析:2:已审核/已启用;'; -COMMENT ON COLUMN billiards_ods.site_tables_master.charge_free IS '对应JSON字段:charge_free,说明:(推测):,示例值及对应分析:0:正常计费;'; -COMMENT ON COLUMN billiards_ods.site_tables_master.create_time IS '对应JSON字段:create_time,说明::台桌配置的创建时间或最近一次创建/复制时间。,示例值及对应分析:三、与其它 JSON 的字段级关联关系(结构视角)'; -COMMENT ON COLUMN billiards_ods.site_tables_master.delay_lights_time IS '对应JSON字段:delay_lights_time,说明:(推测):台灯熄灭延迟时间(单位多半是秒或分钟),用于结账后延时关灯。,示例值及对应分析:本门店未启用延迟关灯功能(全部为 0)。'; -COMMENT ON COLUMN billiards_ods.site_tables_master.is_online_reservation IS '对应JSON字段:is_online_reservation,说明:(结合值分布推断):,示例值及对应分析:1:允许线上预约(可在小程序/线上平台预约这张台);'; -COMMENT ON COLUMN billiards_ods.site_tables_master.is_rest_area IS '对应JSON字段:is_rest_area,说明:(推测):,示例值及对应分析:0:正常计费区域;'; -COMMENT ON COLUMN billiards_ods.site_tables_master.light_status IS '对应JSON字段:light_status,说明:(结合命名推断):,示例值及对应分析:该字段是台灯/灯光状态开关位:'; -COMMENT ON COLUMN billiards_ods.site_tables_master.only_allow_groupon IS '对应JSON字段:only_allow_groupon,说明:(结合命名推断):,示例值及对应分析:1:仅允许团购/券预约使用(团购专用台);'; -COMMENT ON COLUMN billiards_ods.site_tables_master.order_delay_time IS '对应JSON字段:order_delay_time,说明:(推测):订单层面允许的“自动延时时长”(例如到点后自动延长多少时间继续计费)。,示例值及对应分析:本门店未使用此功能。'; -COMMENT ON COLUMN billiards_ods.site_tables_master.self_table IS '对应JSON字段:self_table,说明:(推测):,示例值及对应分析:1:“本门店自有台”,非共享或外部配置;'; -COMMENT ON COLUMN billiards_ods.site_tables_master.show_status IS '对应JSON字段:show_status,说明:(推测):,示例值及对应分析:1:正常在前台“开台列表”中展示;'; -COMMENT ON COLUMN billiards_ods.site_tables_master.site_table_area_id IS '对应JSON字段:site_table_area_id,说明::门店维度的“台桌区域 ID”。,示例值及对应分析:关系:'; -COMMENT ON COLUMN billiards_ods.site_tables_master.tableStatusName IS '对应JSON字段:tableStatusName,说明::table_status 的中文名称,仅为展示用途。,示例值及对应分析:?? site_tables_master-Analysis.md'; -COMMENT ON COLUMN billiards_ods.site_tables_master.table_cloth_use_Cycle IS '对应JSON字段:table_cloth_use_Cycle,说明:(推测):,示例值及对应分析:台呢使用周期阈值,例如达到某个秒数后提醒更换;'; -COMMENT ON COLUMN billiards_ods.site_tables_master.table_cloth_use_time IS '对应JSON字段:table_cloth_use_time,说明:(结合命名和数值特征):,示例值及对应分析:台呢使用累计时长,单位极大概率为“秒”:'; -COMMENT ON COLUMN billiards_ods.site_tables_master.table_name IS '对应JSON字段:table_name,说明::台号/台名称,用于前台操作界面展示,也出现在小票和各种流水中的 ledger_name 或 tableName 字段。,示例值及对应分析:?? site_tables_master-Analysis.md'; -COMMENT ON COLUMN billiards_ods.site_tables_master.table_price IS '对应JSON字段:table_price,说明:(结构角度):,示例值及对应分析:设计上应为“台的基础单价”字段(例如按小时或按局单价);'; -COMMENT ON COLUMN billiards_ods.site_tables_master.table_status IS '对应JSON字段:table_status,说明::台当前运行状态,真实反映某一时刻台的占用/暂停情况。,示例值及对应分析:?? site_tables_master-Analysis.md'; -COMMENT ON COLUMN billiards_ods.site_tables_master.temporary_light_second IS '对应JSON字段:temporary_light_second,说明:(推测):临时点灯时长(秒),例如手动临时开灯一段时间。,示例值及对应分析:本门店未使用。'; -COMMENT ON COLUMN billiards_ods.site_tables_master.virtual_table IS '对应JSON字段:virtual_table,说明:(推测):,示例值及对应分析:0:物理台(实体存在的桌);'; -COMMENT ON COLUMN billiards_ods.site_tables_master.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.site_tables_master.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.site_tables_master.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.site_tables_master.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; +COMMENT ON TABLE billiards_ods.site_tables_master IS 'ODS 原始明细表:门店桌台主数据。来源:C:/dev/LLTQ/export/test-json-doc/site_tables_master.json;分析:site_tables_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.id IS '【说明】台桌主键 ID。 【示例】2791964216463493(用于台桌主键 ID)。 【ODS来源】site_tables_master - id。 【JSON字段】site_tables_master.json - data.siteTables - id。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.site_id IS '【说明】门店 ID。 【示例】2790685415443269(用于门店 ID)。 【ODS来源】site_tables_master - site_id。 【JSON字段】site_tables_master.json - data.siteTables - site_id。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.siteName IS '【说明】门店名称快照,冗余字段,配合 site_id 使用。 【示例】朗朗桌球(用于门店名称快照,冗余字段,配合 site_id 使用)。 【ODS来源】site_tables_master - siteName。 【JSON字段】site_tables_master.json - data.siteTables - siteName。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.areaName IS '【说明】区域名称,用于前台展示和区域维度管理。 【示例】A区(区域名称,用于前台展示和区域维度管理)。 【ODS来源】site_tables_master - areaName。 【JSON字段】site_tables_master.json - data.siteTables - areaName。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.audit_status IS '【说明】当前值:全部为 2。 【示例】2(用于当前值:全部为 2)。 【ODS来源】site_tables_master - audit_status。 【JSON字段】site_tables_master.json - data.siteTables - audit_status。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.charge_free IS '【说明】当前值:全部为 0。 【示例】0(用于当前值:全部为 0)。 【ODS来源】site_tables_master - charge_free。 【JSON字段】site_tables_master.json - data.siteTables - charge_free。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.create_time IS '【说明】台桌配置的创建时间或最近一次创建/复制时间。 【示例】2025-07-15 17:52:54(用于台桌配置的创建时间或最近一次创建/复制时间)。 【ODS来源】site_tables_master - create_time。 【JSON字段】site_tables_master.json - data.siteTables - create_time。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.delay_lights_time IS '【说明】台灯熄灭延迟时间(单位多半是秒或分钟),用于结账后延时关灯。 【示例】0(台灯熄灭延迟时间(单位多半是秒或分钟),用于结账后延时关灯)。 【ODS来源】site_tables_master - delay_lights_time。 【JSON字段】site_tables_master.json - data.siteTables - delay_lights_time。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.is_online_reservation IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。。 【示例】2(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【ODS来源】site_tables_master - is_online_reservation。 【JSON字段】site_tables_master.json - data.siteTables - is_online_reservation。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.is_rest_area IS '【说明】当前值:全部为 0。 【示例】0(用于当前值:全部为 0)。 【ODS来源】site_tables_master - is_rest_area。 【JSON字段】site_tables_master.json - data.siteTables - is_rest_area。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.light_status IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】2(来自 JSON 导出的原始字段,用于保留业务取值。)。 【ODS来源】site_tables_master - light_status。 【JSON字段】site_tables_master.json - data.siteTables - light_status。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.only_allow_groupon IS '【说明】小程序二维码 URL。 【示例】2(用于小程序二维码 URL)。 【ODS来源】site_tables_master - only_allow_groupon。 【JSON字段】site_tables_master.json - data.siteTables - only_allow_groupon。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.order_delay_time IS '【说明】订单层面允许的“自动延时时长”(例如到点后自动延长多少时间继续计费)。 【示例】0(用于订单层面允许的“自动延时时长”(例如到点后自动延长多少时间继续计费))。 【ODS来源】site_tables_master - order_delay_time。 【JSON字段】site_tables_master.json - data.siteTables - order_delay_time。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.self_table IS '【说明】当前值:全部为 1。 【示例】1(用于当前值:全部为 1)。 【ODS来源】site_tables_master - self_table。 【JSON字段】site_tables_master.json - data.siteTables - self_table。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.show_status IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【ODS来源】site_tables_master - show_status。 【JSON字段】site_tables_master.json - data.siteTables - show_status。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.site_table_area_id IS '【说明】门店维度的“台桌区域 ID”。 【示例】2791963794329671(用于门店维度的“台桌区域 ID”)。 【ODS来源】site_tables_master - site_table_area_id。 【JSON字段】site_tables_master.json - data.siteTables - site_table_area_id。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.tableStatusName IS '【说明】table_status 的中文名称,仅为展示用途。 【示例】空闲中(用于table_status 的中文名称,仅为展示用途)。 【ODS来源】site_tables_master - tableStatusName。 【JSON字段】site_tables_master.json - data.siteTables - tableStatusName。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.table_cloth_use_Cycle IS '【说明】台呢使用周期阈值,例如达到某个秒数后提醒更换。 【示例】0(用于台呢使用周期阈值,例如达到某个秒数后提醒更换)。 【ODS来源】site_tables_master - table_cloth_use_Cycle。 【JSON字段】site_tables_master.json - data.siteTables - table_cloth_use_Cycle。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.table_cloth_use_time IS '【说明】时间字段,用于记录业务时间点/发生时间。。 【示例】1863727(时间字段,用于记录业务时间点/发生时间。)。 【ODS来源】site_tables_master - table_cloth_use_time。 【JSON字段】site_tables_master.json - data.siteTables - table_cloth_use_time。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.table_name IS '【说明】台号/台名称,用于前台操作界面展示,也出现在小票和各种流水中的 ledger_name 或 tableName 字段。 【示例】A1(台号/台名称,用于前台操作界面展示,也出现在小票和各种流水中的 ledger_name 或 tableName 字段)。 【ODS来源】site_tables_master - table_name。 【JSON字段】site_tables_master.json - data.siteTables - table_name。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.table_price IS '【说明】设计上应为“台的基础单价”字段(例如按小时或按局单价)。 【示例】0.0(用于设计上应为“台的基础单价”字段(例如按小时或按局单价))。 【ODS来源】site_tables_master - table_price。 【JSON字段】site_tables_master.json - data.siteTables - table_price。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.table_status IS '【说明】台当前运行状态,真实反映某一时刻台的占用/暂停情况。 【示例】1(用于台当前运行状态,真实反映某一时刻台的占用/暂停情况)。 【ODS来源】site_tables_master - table_status。 【JSON字段】site_tables_master.json - data.siteTables - table_status。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.temporary_light_second IS '【说明】临时点灯时长(秒),例如手动临时开灯一段时间。 【示例】0(用于临时点灯时长(秒),例如手动临时开灯一段时间)。 【ODS来源】site_tables_master - temporary_light_second。 【JSON字段】site_tables_master.json - data.siteTables - temporary_light_second。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.virtual_table IS '【说明】当前值:全部为 0。 【示例】0(用于当前值:全部为 0)。 【ODS来源】site_tables_master - virtual_table。 【JSON字段】site_tables_master.json - data.siteTables - virtual_table。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】site_tables_master.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【ODS来源】site_tables_master - source_file(ETL补充)。 【JSON字段】site_tables_master.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/site_tables_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【ODS来源】site_tables_master - source_endpoint(ETL补充)。 【JSON字段】site_tables_master.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【ODS来源】site_tables_master - fetched_at(ETL补充)。 【JSON字段】site_tables_master.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【ODS来源】site_tables_master - payload。 【JSON字段】site_tables_master.json - data.siteTables - $。'; + CREATE TABLE IF NOT EXISTS billiards_ods.table_fee_discount_records ( id BIGINT PRIMARY KEY, @@ -930,31 +945,32 @@ CREATE TABLE IF NOT EXISTS billiards_ods.table_fee_discount_records ( payload JSONB NOT NULL ); -COMMENT ON TABLE billiards_ods.table_fee_discount_records IS '对应JSON字段:table_fee_discount_records.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 table_fee_discount_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.table_fee_discount_records.id IS '对应JSON字段:id,说明::台费打折 / 调整流水主键 ID。,示例值及对应分析:作用:在“台费调账表”中唯一标识一条折扣/调账操作。'; -COMMENT ON COLUMN billiards_ods.table_fee_discount_records.tenant_id IS '对应JSON字段:tenant_id,说明::租户/品牌 ID。,示例值及对应分析:作用:标识记录属于哪一个商户(同一个“非球科技”租户)。'; -COMMENT ON COLUMN billiards_ods.table_fee_discount_records.site_id IS '对应JSON字段:site_id,说明::门店 ID,本批数据全部为同一家门店(朗朗桌球)。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.table_fee_discount_records.siteProfile IS '对应JSON字段:siteProfile,说明::门店信息快照,用于报表时直接读取,无需再联门店档案。,示例值及对应分析:?? table_fee_discount_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.table_fee_discount_records.site_table_id IS '对应JSON字段:site_table_id,说明::台桌 ID。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.table_fee_discount_records.tableProfile IS '对应JSON字段:tableProfile,说明::折扣发生时,对应台桌的配置信息快照。,示例值及对应分析:?? table_fee_discount_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.table_fee_discount_records.tenant_table_area_id IS '对应JSON字段:tenant_table_area_id,说明::租户维度的“台桌区域 ID”。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.table_fee_discount_records.adjust_type IS '对应JSON字段:adjust_type,说明:(根据文件含义 + 命名 + 数据):,示例值及对应分析:文件名是“台费打折”,字段名为“调整类型”,当前所有记录都是 1,即“台费打折/台费减免”这一种调整类型。'; -COMMENT ON COLUMN billiards_ods.table_fee_discount_records.ledger_amount IS '对应JSON字段:ledger_amount,说明:(关键点):,示例值及对应分析:通过与 台费流水.json 做对比,可以明确:'; -COMMENT ON COLUMN billiards_ods.table_fee_discount_records.ledger_count IS '对应JSON字段:ledger_count,说明::,示例值及对应分析:这里不是“秒数”,而是“调整次数/条数”的量化,目前固定为 1,表示“一次调账事件”。'; -COMMENT ON COLUMN billiards_ods.table_fee_discount_records.ledger_name IS '对应JSON字段:ledger_name,说明:(推测):,示例值及对应分析:设计上应该用于记录“调账项目名称”或“打折原因描述”(例如某种优惠规则名称),但当前门店并未使用该字段。'; -COMMENT ON COLUMN billiards_ods.table_fee_discount_records.ledger_status IS '对应JSON字段:ledger_status,说明::,示例值及对应分析:1:生效调整(当前有效的台费打折 / 调账记录);'; -COMMENT ON COLUMN billiards_ods.table_fee_discount_records.applicant_id IS '对应JSON字段:applicant_id,说明::打折/调账申请人 ID。,示例值及对应分析:作用:记录谁发起了这次台费调整。 本时段内所有调整均由同一位员工发起。'; -COMMENT ON COLUMN billiards_ods.table_fee_discount_records.applicant_name IS '对应JSON字段:applicant_name,说明::申请人姓名(带角色描述),为 applicant_id 的冗余显示字段。,示例值及对应分析:?? table_fee_discount_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.table_fee_discount_records.operator_id IS '对应JSON字段:operator_id,说明::实际执行调账操作的操作员 ID。,示例值及对应分析:说明:这段时间内,“申请人”和“操作员”是同一个人。'; -COMMENT ON COLUMN billiards_ods.table_fee_discount_records.operator_name IS '对应JSON字段:operator_name,说明::操作员姓名。,示例值及对应分析:?? table_fee_discount_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.table_fee_discount_records.order_settle_id IS '对应JSON字段:order_settle_id,说明::结算单/小票 ID。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.table_fee_discount_records.order_trade_no IS '对应JSON字段:order_trade_no,说明::订单交易号。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.table_fee_discount_records.is_delete IS '对应JSON字段:is_delete,说明::逻辑删除标志:,示例值及对应分析:0:未删除(有效记录);'; -COMMENT ON COLUMN billiards_ods.table_fee_discount_records.create_time IS '对应JSON字段:create_time,说明::台费调整记录的创建时间,即打折操作被执行的时间戳。,示例值及对应分析:说明:与台费流水中的 create_time(结算时间)相互配合,可以还原调整发生于结账之前还是之后。'; -COMMENT ON COLUMN billiards_ods.table_fee_discount_records.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.table_fee_discount_records.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.table_fee_discount_records.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.table_fee_discount_records.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; +COMMENT ON TABLE billiards_ods.table_fee_discount_records IS 'ODS 原始明细表:台费折扣记录。来源:C:/dev/LLTQ/export/test-json-doc/table_fee_discount_records.json;分析:table_fee_discount_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.id IS '【说明】台费打折 / 调整流水主键 ID。 【示例】2957913441881989(用于台费打折 / 调整流水主键 ID)。 【ODS来源】table_fee_discount_records - id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - id。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【ODS来源】table_fee_discount_records - tenant_id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - tenant_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.site_id IS '【说明】门店 ID,本批数据全部为同一家门店(朗朗桌球)。 【示例】2790685415443269(用于门店 ID,本批数据全部为同一家门店(朗朗桌球))。 【ODS来源】table_fee_discount_records - site_id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - site_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.siteProfile IS '【说明】门店信息快照,用于报表时直接读取,无需再联门店档案。 【示例】{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "avatar": "https://oss.ficoo.vip/admin/hXcE4E…(门店信息快照,用于报表时直接读取,无需再联门店档案)。 【ODS来源】table_fee_discount_records - siteProfile。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - siteProfile。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.site_table_id IS '【说明】台桌 ID。 【示例】2793020259897413(用于台桌 ID)。 【ODS来源】table_fee_discount_records - site_table_id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - site_table_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.tableProfile IS '【说明】折扣发生时,对应台桌的配置信息快照。 【示例】{"id": 2793020259897413, "tenant_id": 2790683160709957, "tenant_name": "", "siteName": "", "table_name": "S1", "site_ta…(用于折扣发生时,对应台桌的配置信息快照)。 【ODS来源】table_fee_discount_records - tableProfile。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - tableProfile。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.tenant_table_area_id IS '【说明】租户维度的“台桌区域 ID”。 【示例】2791961347968901(用于租户维度的“台桌区域 ID”)。 【ODS来源】table_fee_discount_records - tenant_table_area_id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - tenant_table_area_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.adjust_type IS '【说明】文件名是“台费打折”,字段名为“调整类型”,当前所有记录都是 1,即“台费打折/台费减免”这一种调整类型。 【示例】1(用于文件名是“台费打折”,字段名为“调整类型”,当前所有记录都是 1,即“台费打折/台费减免”这一种调整类型)。 【ODS来源】table_fee_discount_records - adjust_type。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - adjust_type。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.ledger_amount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。。 【示例】148.15(金额字段,用于计费/结算/分摊等金额计算。)。 【ODS来源】table_fee_discount_records - ledger_amount。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - ledger_amount。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.ledger_count IS '【说明】这里不是“秒数”,而是“调整次数/条数”的量化,目前固定为 1,表示“一次调账事件”。 【示例】1(用于这里不是“秒数”,而是“调整次数/条数”的量化,目前固定为 1,表示“一次调账事件”)。 【ODS来源】table_fee_discount_records - ledger_count。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - ledger_count。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.ledger_name IS '【说明】设计上应该用于记录“调账项目名称”或“打折原因描述”(例如某种优惠规则名称),但当前门店并未使用该字段。 【示例】NULL(设计上应该用于记录“调账项目名称”或“打折原因描述”(例如某种优惠规则名称),但当前门店并未使用该字段)。 【ODS来源】table_fee_discount_records - ledger_name。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - ledger_name。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.ledger_status IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【ODS来源】table_fee_discount_records - ledger_status。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - ledger_status。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.applicant_id IS '【说明】打折/调账申请人 ID。 【示例】2790687322443013(用于打折/调账申请人 ID)。 【ODS来源】table_fee_discount_records - applicant_id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - applicant_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.applicant_name IS '【说明】申请人姓名(带角色描述),为 applicant_id 的冗余显示字段。 【示例】收银员:郑丽珊(用于申请人姓名(带角色描述),为 applicant_id 的冗余显示字段)。 【ODS来源】table_fee_discount_records - applicant_name。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - applicant_name。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.operator_id IS '【说明】实际执行调账操作的操作员 ID。 【示例】2790687322443013(用于实际执行调账操作的操作员 ID)。 【ODS来源】table_fee_discount_records - operator_id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - operator_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.operator_name IS '【说明】操作员姓名。 【示例】收银员:郑丽珊(用于操作员姓名)。 【ODS来源】table_fee_discount_records - operator_name。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - operator_name。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.order_settle_id IS '【说明】结算单/小票 ID。 【示例】2957913171693253(用于结算单/小票 ID)。 【ODS来源】table_fee_discount_records - order_settle_id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - order_settle_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.order_trade_no IS '【说明】订单交易号。 【示例】2957784612605829(用于订单交易号)。 【ODS来源】table_fee_discount_records - order_trade_no。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - order_trade_no。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.is_delete IS '【说明】逻辑删除标记(0=否,1=是)。。 【示例】0(用于逻辑删除标记(0=否,1=是))。 【ODS来源】table_fee_discount_records - is_delete。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - is_delete。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.create_time IS '【说明】台费调整记录的创建时间,即打折操作被执行的时间戳。 【示例】2025-11-09 23:25:11(用于台费调整记录的创建时间,即打折操作被执行的时间戳)。 【ODS来源】table_fee_discount_records - create_time。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - create_time。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】table_fee_discount_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【ODS来源】table_fee_discount_records - source_file(ETL补充)。 【JSON字段】table_fee_discount_records.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/table_fee_discount_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【ODS来源】table_fee_discount_records - source_endpoint(ETL补充)。 【JSON字段】table_fee_discount_records.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【ODS来源】table_fee_discount_records - fetched_at(ETL补充)。 【JSON字段】table_fee_discount_records.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【ODS来源】table_fee_discount_records - payload。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - $。'; + CREATE TABLE IF NOT EXISTS billiards_ods.table_fee_transactions ( id BIGINT PRIMARY KEY, @@ -1002,50 +1018,51 @@ CREATE TABLE IF NOT EXISTS billiards_ods.table_fee_transactions ( fetched_at TIMESTAMPTZ DEFAULT now() ); -COMMENT ON TABLE billiards_ods.table_fee_transactions IS '对应JSON字段:table_fee_transactions.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 table_fee_transactions-Analysis.md'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.id IS '对应JSON字段:id,说明::台费流水记录主键(事实表主键)。,示例值及对应分析:?? table_fee_transactions-Analysis.md'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.tenant_id IS '对应JSON字段:tenant_id,说明::租户/品牌 ID。本文件所有记录都属于同一租户。,示例值及对应分析:关联:与所有其它 JSON 中的 tenant_id 一致,用于跨表做“商户维度”的过滤。'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.site_id IS '对应JSON字段:site_id,说明::门店 ID,本次数据全部来自同一门店(朗朗桌球)。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.siteProfile IS '对应JSON字段:siteProfile,说明::当前门店的完整档案快照,冗余到流水表中,便于报表直接读取而无需再联表门店档案。,示例值及对应分析:三、与其它 JSON 的结构关联关系(从字段层面)'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.site_table_id IS '对应JSON字段:site_table_id,说明::球台 ID。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.site_table_area_id IS '对应JSON字段:site_table_area_id,说明::门店内“台桌区域” ID(站在门店物理布局的角度)。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.site_table_area_name IS '对应JSON字段:site_table_area_name,说明::台桌区域的名称,用于门店表现和区域统计。,示例值及对应分析:4. 会员维度与相关字段'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.tenant_table_area_id IS '对应JSON字段:tenant_table_area_id,说明::租户维度的台桌区域 ID(品牌层面的同一类区域)。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.order_trade_no IS '对应JSON字段:order_trade_no,说明::订单交易号,是整笔订单的主编号。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.order_pay_id IS '对应JSON字段:order_pay_id,说明::订单支付记录 ID。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.order_settle_id IS '对应JSON字段:order_settle_id,说明::结算单号/结账 ID,对应一次结账操作。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_name IS '对应JSON字段:ledger_name,说明::台号名称,实际展示给员工/顾客看的桌台编号。,示例值及对应分析:备注:与 site_table_id 一一对应,是桌台维表中的名称字段冗余到流水里的快照。'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_amount IS '对应JSON字段:ledger_amount,说明::按单价与计费时长计算出的原始应收台费金额。,示例值及对应分析:近似关系:ledger_amount ≈ ledger_unit_price × ledger_count / 3600,考虑到四舍五入会有小数差。'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_count IS '对应JSON字段:ledger_count,说明::台账记录的计费秒数,计费用秒数(应收时长)。,示例值及对应分析:特点:'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_unit_price IS '对应JSON字段:ledger_unit_price,说明::台费结算时设置的 每小时单价/计费单价。,示例值及对应分析:用途:与 ledger_count 共同决定原始应收额。'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_status IS '对应JSON字段:ledger_status,说明:(推测):,示例值及对应分析:1:正常已结算台费;'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_start_time IS '对应JSON字段:ledger_start_time,说明::台账上的计费起始时间。,示例值及对应分析:关系:'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_end_time IS '对应JSON字段:ledger_end_time,说明::台账上的计费结束时间。,示例值及对应分析:关系:'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.start_use_time IS '对应JSON字段:start_use_time,说明::台开始使用的时间(实际开台时间)。,示例值及对应分析:特点:在数据中,与 ledger_start_time 完全相同(见下)。'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.last_use_time IS '对应JSON字段:last_use_time,说明::最后使用/操作时间。,示例值及对应分析:特点:'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.real_table_use_seconds IS '对应JSON字段:real_table_use_seconds,说明::实际使用的总秒数(系统真实统计的使用时长)。,示例值及对应分析:关系:'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.real_table_charge_money IS '对应JSON字段:real_table_charge_money,说明::台费中实际向顾客收取的金额(现金/实付维度,未含券方承担或内部调账的那一部分)。,示例值及对应分析:特点:'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.add_clock_seconds IS '对应JSON字段:add_clock_seconds,说明::加钟秒数,在原有使用基础上追加的时长。,示例值及对应分析:观测:'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.adjust_amount IS '对应JSON字段:adjust_amount,说明::调整金额/调账金额,用于将台费金额转移或冲减到其它项目,或手工调整。,示例值及对应分析:特点:'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.coupon_promotion_amount IS '对应JSON字段:coupon_promotion_amount,说明::由优惠券/活动/团购(平台/门店促销)承担的优惠金额,直接抵扣在台费上。,示例值及对应分析:特点:当 real_table_charge_money = 0 且该字段为 ledger_amount 时,说明整笔台费是由券促销全额承担。'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.member_discount_amount IS '对应JSON字段:member_discount_amount,说明:上文已说明,这里补充与金额的结构关系:,示例值及对应分析:功能:表示由会员折扣或会员权益承担的那部分金额。'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.used_card_amount IS '对应JSON字段:used_card_amount,说明::由储值卡、次卡等“卡内余额”抵扣的金额。,示例值及对应分析:说明:字段设计已预留,但本段时间内台费没有通过储值卡扣款,或者卡扣款在其他表体现。'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.mgmt_fee IS '对应JSON字段:mgmt_fee,说明:(推测):管理费字段,用于未来支持“台费附加管理费/服务费”的功能。,示例值及对应分析:当前未启用。'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.service_money IS '对应JSON字段:service_money,说明:(推测):门店用于记录“服务费/成本/分成金额”的字段,类似助教流水里的 service_money。,示例值及对应分析:说明:当前门店未启用此字段结算台费。'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.fee_total IS '对应JSON字段:fee_total,说明::各种附加费用(如管理费、服务费)合计值。,示例值及对应分析:说明:和 mgmt_fee 一样,目前作为预留字段,没有实际使用。'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.is_single_order IS '对应JSON字段:is_single_order,说明:(推测):,示例值及对应分析:1:该台费记录对应的是一个独立计费单元(单独结算的桌费);'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.is_delete IS '对应JSON字段:is_delete,说明::逻辑删除标志:,示例值及对应分析:0:未删除(有效记录);'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.member_id IS '对应JSON字段:member_id,说明::门店/租户内的会员 ID。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.operator_id IS '对应JSON字段:operator_id,说明::操作员 ID,负责开台/结账的员工账号 ID。,示例值及对应分析:关联:与员工/账号体系中的用户 ID 对应(与助教账号的 user_id 属于同一种 ID 体系)。'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.operator_name IS '对应JSON字段:operator_name,说明::操作员姓名(冗余字段),便于直接阅读,不必再联表员工档案。,示例值及对应分析:?? table_fee_transactions-Analysis.md'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.salesman_name IS '对应JSON字段:salesman_name,说明::业务员/营业员姓名,如果台费有单独提成员工,这里记录归属人。,示例值及对应分析:当前门店未启用该字段做提成归属。'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.salesman_org_id IS '对应JSON字段:salesman_org_id,说明::营业员所属机构/部门 ID。,示例值及对应分析:8. 状态 / 标记类字段'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.salesman_user_id IS '对应JSON字段:salesman_user_id,说明::营业员的用户 ID(与 salesman_name 搭配)。,示例值及对应分析:?? table_fee_transactions-Analysis.md'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.create_time IS '对应JSON字段:create_time,说明::这条台费流水记录的创建时间,通常接近结账时间。,示例值及对应分析:?? table_fee_transactions-Analysis.md'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.table_fee_transactions.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; +COMMENT ON TABLE billiards_ods.table_fee_transactions IS 'ODS 原始明细表:台费流水。来源:C:/dev/LLTQ/export/test-json-doc/table_fee_transactions.json;分析:table_fee_transactions-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.id IS '【说明】台费流水记录主键(事实表主键)。 【示例】2957924029058885(用于台费流水记录主键(事实表主键))。 【ODS来源】table_fee_transactions - id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - id。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【ODS来源】table_fee_transactions - tenant_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - tenant_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.site_id IS '【说明】门店 ID,本次数据全部来自同一门店(朗朗桌球)。 【示例】2790685415443269(用于门店 ID,本次数据全部来自同一门店(朗朗桌球))。 【ODS来源】table_fee_transactions - site_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - site_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.siteProfile IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "avatar": "https://oss.ficoo.vip/admin/hXcE4E…(来自 JSON 导出的原始字段,用于保留业务取值。)。 【ODS来源】table_fee_transactions - siteProfile。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - siteProfile。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.site_table_id IS '【说明】球台 ID。 【示例】2793003705192517(用于球台 ID)。 【ODS来源】table_fee_transactions - site_table_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - site_table_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.site_table_area_id IS '【说明】门店内“台桌区域” ID(站在门店物理布局的角度)。 【示例】2791963794329671(用于门店内“台桌区域” ID(站在门店物理布局的角度))。 【ODS来源】table_fee_transactions - site_table_area_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - site_table_area_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.site_table_area_name IS '【说明】台桌区域的名称,用于门店表现和区域统计。 【示例】A区(台桌区域的名称,用于门店表现和区域统计)。 【ODS来源】table_fee_transactions - site_table_area_name。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - site_table_area_name。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.tenant_table_area_id IS '【说明】租户维度的台桌区域 ID(品牌层面的同一类区域)。 【示例】2791960001957765(用于租户维度的台桌区域 ID(品牌层面的同一类区域))。 【ODS来源】table_fee_transactions - tenant_table_area_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - tenant_table_area_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.order_trade_no IS '【说明】订单交易号,是整笔订单的主编号。 【示例】2957858167230149(用于订单交易号,是整笔订单的主编号)。 【ODS来源】table_fee_transactions - order_trade_no。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - order_trade_no。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.order_pay_id IS '【说明】订单支付记录 ID。 【示例】0(用于订单支付记录 ID)。 【ODS来源】table_fee_transactions - order_pay_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - order_pay_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.order_settle_id IS '【说明】结算单号/结账 ID,对应一次结账操作。 【示例】2957922914357125(用于结算单号/结账 ID,对应一次结账操作)。 【ODS来源】table_fee_transactions - order_settle_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - order_settle_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_name IS '【说明】台号名称,实际展示给员工/顾客看的桌台编号。 【示例】A17(用于台号名称,实际展示给员工/顾客看的桌台编号)。 【ODS来源】table_fee_transactions - ledger_name。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_name。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_amount IS '【说明】按单价与计费时长计算出的原始应收台费金额。 【示例】48.0(用于按单价与计费时长计算出的原始应收台费金额)。 【ODS来源】table_fee_transactions - ledger_amount。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_amount。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_count IS '【说明】台账记录的计费秒数,计费用秒数(应收时长)。 【示例】3600(用于台账记录的计费秒数,计费用秒数(应收时长))。 【ODS来源】table_fee_transactions - ledger_count。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_count。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_unit_price IS '【说明】台费结算时设置的 每小时单价/计费单价。 【示例】48.0(用于台费结算时设置的 每小时单价/计费单价)。 【ODS来源】table_fee_transactions - ledger_unit_price。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_unit_price。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_status IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【ODS来源】table_fee_transactions - ledger_status。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_status。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_start_time IS '【说明】台账上的计费起始时间。 【示例】2025-11-09 22:28:57(用于台账上的计费起始时间)。 【ODS来源】table_fee_transactions - ledger_start_time。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_start_time。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_end_time IS '【说明】台账上的计费结束时间。 【示例】2025-11-09 23:28:57(用于台账上的计费结束时间)。 【ODS来源】table_fee_transactions - ledger_end_time。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_end_time。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.start_use_time IS '【说明】台开始使用的时间(实际开台时间)。 【示例】2025-11-09 22:28:57(用于台开始使用的时间(实际开台时间))。 【ODS来源】table_fee_transactions - start_use_time。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - start_use_time。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.last_use_time IS '【说明】最后使用/操作时间。 【示例】2025-11-09 23:28:57(用于最后使用/操作时间)。 【ODS来源】table_fee_transactions - last_use_time。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - last_use_time。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.real_table_use_seconds IS '【说明】实际使用的总秒数(系统真实统计的使用时长)。 【示例】3600(用于实际使用的总秒数(系统真实统计的使用时长))。 【ODS来源】table_fee_transactions - real_table_use_seconds。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - real_table_use_seconds。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.real_table_charge_money IS '【说明】台费中实际向顾客收取的金额(现金/实付维度,未含券方承担或内部调账的那一部分)。 【示例】0.0(用于台费中实际向顾客收取的金额(现金/实付维度,未含券方承担或内部调账的那一部分))。 【ODS来源】table_fee_transactions - real_table_charge_money。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - real_table_charge_money。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.add_clock_seconds IS '【说明】加钟秒数,在原有使用基础上追加的时长。 【示例】0(用于加钟秒数,在原有使用基础上追加的时长)。 【ODS来源】table_fee_transactions - add_clock_seconds。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - add_clock_seconds。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.adjust_amount IS '【说明】调整金额/调账金额,用于将台费金额转移或冲减到其它项目,或手工调整。 【示例】0.0(调整金额/调账金额,用于将台费金额转移或冲减到其它项目,或手工调整)。 【ODS来源】table_fee_transactions - adjust_amount。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - adjust_amount。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.coupon_promotion_amount IS '【说明】由优惠券/活动/团购(平台/门店促销)承担的优惠金额,直接抵扣在台费上。 【示例】48.0(用于由优惠券/活动/团购(平台/门店促销)承担的优惠金额,直接抵扣在台费上)。 【ODS来源】table_fee_transactions - coupon_promotion_amount。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - coupon_promotion_amount。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.member_discount_amount IS '【说明】由会员权益产生的优惠金额,例如会员折扣、会员价等。 【示例】0.0(用于由会员权益产生的优惠金额,例如会员折扣、会员价等)。 【ODS来源】table_fee_transactions - member_discount_amount。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - member_discount_amount。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.used_card_amount IS '【说明】由储值卡、次卡等“卡内余额”抵扣的金额。 【示例】0.0(用于由储值卡、次卡等“卡内余额”抵扣的金额)。 【ODS来源】table_fee_transactions - used_card_amount。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - used_card_amount。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.mgmt_fee IS '【说明】管理费字段,用于未来支持“台费附加管理费/服务费”的功能。 【示例】0.0(管理费字段,用于未来支持“台费附加管理费/服务费”的功能)。 【ODS来源】table_fee_transactions - mgmt_fee。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - mgmt_fee。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.service_money IS '【说明】门店用于记录“服务费/成本/分成金额”的字段,类似助教流水里的 service_money。 【示例】0.0(门店用于记录“服务费/成本/分成金额”的字段,类似助教流水里的 service_money)。 【ODS来源】table_fee_transactions - service_money。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - service_money。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.fee_total IS '【说明】各种附加费用(如管理费、服务费)合计值。 【示例】0.0(用于各种附加费用(如管理费、服务费)合计值)。 【ODS来源】table_fee_transactions - fee_total。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - fee_total。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.is_single_order IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。。 【示例】1(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【ODS来源】table_fee_transactions - is_single_order。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - is_single_order。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.is_delete IS '【说明】逻辑删除标记(0=否,1=是)。。 【示例】0(用于逻辑删除标记(0=否,1=是))。 【ODS来源】table_fee_transactions - is_delete。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - is_delete。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.member_id IS '【说明】门店/租户内的会员 ID。 【示例】0(用于门店/租户内的会员 ID)。 【ODS来源】table_fee_transactions - member_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - member_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.operator_id IS '【说明】操作员 ID,负责开台/结账的员工账号 ID。 【示例】2790687322443013(用于操作员 ID,负责开台/结账的员工账号 ID)。 【ODS来源】table_fee_transactions - operator_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - operator_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.operator_name IS '【说明】操作员姓名(冗余字段),便于直接阅读,不必再联表员工档案。 【示例】收银员:郑丽珊(用于操作员姓名(冗余字段),便于直接阅读,不必再联表员工档案)。 【ODS来源】table_fee_transactions - operator_name。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - operator_name。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.salesman_name IS '【说明】业务员/营业员姓名,如果台费有单独提成员工,这里记录归属人。 【示例】NULL(用于业务员/营业员姓名,如果台费有单独提成员工,这里记录归属人)。 【ODS来源】table_fee_transactions - salesman_name。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - salesman_name。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.salesman_org_id IS '【说明】营业员所属机构/部门 ID。 【示例】0(用于营业员所属机构/部门 ID)。 【ODS来源】table_fee_transactions - salesman_org_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - salesman_org_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.salesman_user_id IS '【说明】营业员的用户 ID(与 salesman_name 搭配)。 【示例】0(用于营业员的用户 ID(与 salesman_name 搭配))。 【ODS来源】table_fee_transactions - salesman_user_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - salesman_user_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.create_time IS '【说明】这条台费流水记录的创建时间,通常接近结账时间。 【示例】2025-11-09 23:35:57(用于这条台费流水记录的创建时间,通常接近结账时间)。 【ODS来源】table_fee_transactions - create_time。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - create_time。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【ODS来源】table_fee_transactions - payload。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - $。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】table_fee_transactions.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【ODS来源】table_fee_transactions - source_file(ETL补充)。 【JSON字段】table_fee_transactions.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/table_fee_transactions.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【ODS来源】table_fee_transactions - source_endpoint(ETL补充)。 【JSON字段】table_fee_transactions.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【ODS来源】table_fee_transactions - fetched_at(ETL补充)。 【JSON字段】table_fee_transactions.json - ETL元数据 - 无。'; + CREATE TABLE IF NOT EXISTS billiards_ods.goods_stock_movements ( siteGoodsStockId BIGINT PRIMARY KEY, @@ -1073,30 +1090,31 @@ CREATE TABLE IF NOT EXISTS billiards_ods.goods_stock_movements ( payload JSONB NOT NULL ); -COMMENT ON TABLE billiards_ods.goods_stock_movements IS '对应JSON字段:goods_stock_movements.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 goods_stock_movements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.goods_stock_movements.siteGoodsStockId IS '对应JSON字段:siteGoodsStockId,说明::门店某个“商品库存记录”的主键 ID。,示例值及对应分析:特点:每条库存变动记录对应一个 siteGoodsStockId,同一个商品可能在不同库存记录中出现(例如不同仓位或不同批次)。'; -COMMENT ON COLUMN billiards_ods.goods_stock_movements.tenantId IS '对应JSON字段:tenantId,说明::租户/品牌 ID。,示例值及对应分析:观测:全部记录相同值,说明属于同一商户。'; -COMMENT ON COLUMN billiards_ods.goods_stock_movements.siteId IS '对应JSON字段:siteId,说明::门店 ID。,示例值及对应分析:观测:本文件中所有记录的 siteId 都相同,对应“朗朗桌球”这家门店。'; -COMMENT ON COLUMN billiards_ods.goods_stock_movements.siteGoodsId IS '对应JSON字段:siteGoodsId,说明::门店维度的商品 ID。,示例值及对应分析:特点:'; -COMMENT ON COLUMN billiards_ods.goods_stock_movements.goodsName IS '对应JSON字段:goodsName,说明::商品名称。,示例值及对应分析:示例值:'; -COMMENT ON COLUMN billiards_ods.goods_stock_movements.goodsCategoryId IS '对应JSON字段:goodsCategoryId,说明::商品一级分类 ID。,示例值及对应分析:观测:当前 100 条样本中约有 5 个不同 ID,对应如“酒水类”“食品小吃类”“香烟类”等大类(仅从命名与商品名推断)。'; -COMMENT ON COLUMN billiards_ods.goods_stock_movements.goodsSecondCategoryId IS '对应JSON字段:goodsSecondCategoryId,说明::商品二级分类 ID。,示例值及对应分析:观测:样本中约有 7 个不同 ID,如饮料中的“矿泉水/功能饮料/碳酸饮料”等。'; -COMMENT ON COLUMN billiards_ods.goods_stock_movements.unit IS '对应JSON字段:unit,说明::库存计量单位。,示例值及对应分析:说明:库存数量(startNum、endNum、changeNum)均以这里的单位计数。'; -COMMENT ON COLUMN billiards_ods.goods_stock_movements.price IS '对应JSON字段:price,说明::商品单价(单位金额)。,示例值及对应分析:观测特征:'; -COMMENT ON COLUMN billiards_ods.goods_stock_movements.stockType IS '对应JSON字段:stockType,说明:(基于数据行为推断):,示例值及对应分析:1:出库类变动 典型情况是销售出库,库存减少 1 或 2;例如顾客点了一瓶饮料,对应一条 stockType=1, changeNum=-1 的记录。'; -COMMENT ON COLUMN billiards_ods.goods_stock_movements.changeNum IS '对应JSON字段:changeNum,说明::本次库存数量变化值。,示例值及对应分析:特点及取值:'; -COMMENT ON COLUMN billiards_ods.goods_stock_movements.startNum IS '对应JSON字段:startNum,说明::变动前(这次出入库之前)的库存数量。,示例值及对应分析:示例: 如记录:startNum = 28, changeNum = -1, endNum = 27。'; -COMMENT ON COLUMN billiards_ods.goods_stock_movements.endNum IS '对应JSON字段:endNum,说明::变动后(出入库之后)的库存数量。,示例值及对应分析:结构关系:'; -COMMENT ON COLUMN billiards_ods.goods_stock_movements.changeNumA IS '对应JSON字段:changeNumA,说明::辅助单位的变化量(与 changeNum 对应的第二计量单位变化),当前未使用。,示例值及对应分析:结论: startNumA / endNumA / changeNumA 是为“一个商品有两种计量单位(如箱与瓶)”而设计的预留字段。 目前门店只在单一单位层面管理库存,故全部为 0。'; -COMMENT ON COLUMN billiards_ods.goods_stock_movements.startNumA IS '对应JSON字段:startNumA,说明:(推测):辅助计量单位的起始库存(例如件/箱等第二单位)。,示例值及对应分析:当前门店在样本时间段内没有启用多单位库存管理,因此全部为 0。'; -COMMENT ON COLUMN billiards_ods.goods_stock_movements.endNumA IS '对应JSON字段:endNumA,说明::辅助单位的变动后库存,同样未启用。,示例值及对应分析:?? goods_stock_movements-Analysis.md'; -COMMENT ON COLUMN billiards_ods.goods_stock_movements.remark IS '对应JSON字段:remark,说明::备注信息,用于手工记录本次变更的特殊原因说明(例如“盘点差异调整”“报损”)。,示例值及对应分析:当前样本中没有填入任何备注,但字段已预留,适用于盘点或手工调整场景。'; -COMMENT ON COLUMN billiards_ods.goods_stock_movements.operatorName IS '对应JSON字段:operatorName,说明::执行此次库存变动的操作人。,示例值及对应分析:观测值:'; -COMMENT ON COLUMN billiards_ods.goods_stock_movements.createTime IS '对应JSON字段:createTime,说明::这条库存变动记录的创建时间,即发生库存变更的时间点。,示例值及对应分析:特点:'; -COMMENT ON COLUMN billiards_ods.goods_stock_movements.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.goods_stock_movements.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.goods_stock_movements.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.goods_stock_movements.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; +COMMENT ON TABLE billiards_ods.goods_stock_movements IS 'ODS 原始明细表:商品库存变动流水。来源:C:/dev/LLTQ/export/test-json-doc/goods_stock_movements.json;分析:goods_stock_movements-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.siteGoodsStockId IS '【说明】门店某个“商品库存记录”的主键 ID。 【示例】2957911857581957(用于门店某个“商品库存记录”的主键 ID)。 【ODS来源】goods_stock_movements - siteGoodsStockId。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - siteGoodsStockId。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.tenantId IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【ODS来源】goods_stock_movements - tenantId。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - tenantId。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.siteId IS '【说明】门店 ID。 【示例】2790685415443269(用于门店 ID)。 【ODS来源】goods_stock_movements - siteId。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - siteId。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.siteGoodsId IS '【说明】门店维度的商品 ID。 【示例】2793026183532613(用于门店维度的商品 ID)。 【ODS来源】goods_stock_movements - siteGoodsId。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - siteGoodsId。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.goodsName IS '【说明】商品名称。 【示例】阿萨姆(用于商品名称)。 【ODS来源】goods_stock_movements - goodsName。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - goodsName。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.goodsCategoryId IS '【说明】商品一级分类 ID。 【示例】2790683528350539(用于商品一级分类 ID)。 【ODS来源】goods_stock_movements - goodsCategoryId。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - goodsCategoryId。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.goodsSecondCategoryId IS '【说明】商品二级分类 ID。 【示例】2790683528350540(用于商品二级分类 ID)。 【ODS来源】goods_stock_movements - goodsSecondCategoryId。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - goodsSecondCategoryId。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.unit IS '【说明】库存计量单位。 【示例】瓶(用于库存计量单位)。 【ODS来源】goods_stock_movements - unit。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - unit。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.price IS '【说明】商品单价(单位金额)。 【示例】8.0(用于商品单价(单位金额))。 【ODS来源】goods_stock_movements - price。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - price。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.stockType IS '【说明】1:89 条。 【示例】1(用于1:89 条)。 【ODS来源】goods_stock_movements - stockType。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - stockType。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.changeNum IS '【说明】本次库存数量变化值。 【示例】-1(用于本次库存数量变化值)。 【ODS来源】goods_stock_movements - changeNum。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - changeNum。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.startNum IS '【说明】变动前(这次出入库之前)的库存数量。 【示例】28(用于变动前(这次出入库之前)的库存数量)。 【ODS来源】goods_stock_movements - startNum。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - startNum。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.endNum IS '【说明】变动后(出入库之后)的库存数量。 【示例】27(用于变动后(出入库之后)的库存数量)。 【ODS来源】goods_stock_movements - endNum。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - endNum。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.changeNumA IS '【说明】辅助单位的变化量(与 changeNum 对应的第二计量单位变化),当前未使用。 【示例】0(用于辅助单位的变化量(与 changeNum 对应的第二计量单位变化),当前未使用)。 【ODS来源】goods_stock_movements - changeNumA。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - changeNumA。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.startNumA IS '【说明】辅助计量单位的起始库存(例如件/箱等第二单位)。 【示例】0(用于辅助计量单位的起始库存(例如件/箱等第二单位))。 【ODS来源】goods_stock_movements - startNumA。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - startNumA。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.endNumA IS '【说明】辅助单位的变动后库存,同样未启用。 【示例】0(用于辅助单位的变动后库存,同样未启用)。 【ODS来源】goods_stock_movements - endNumA。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - endNumA。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.remark IS '【说明】备注信息,用于手工记录本次变更的特殊原因说明(例如“盘点差异调整”“报损”)。 【示例】NULL(备注信息,用于手工记录本次变更的特殊原因说明(例如“盘点差异调整”“报损”))。 【ODS来源】goods_stock_movements - remark。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - remark。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.operatorName IS '【说明】执行此次库存变动的操作人。 【示例】收银员:郑丽珊(用于执行此次库存变动的操作人)。 【ODS来源】goods_stock_movements - operatorName。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - operatorName。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.createTime IS '【说明】这条库存变动记录的创建时间,即发生库存变更的时间点。 【示例】2025-11-09 23:23:34(用于这条库存变动记录的创建时间,即发生库存变更的时间点)。 【ODS来源】goods_stock_movements - createTime。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - createTime。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】goods_stock_movements.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【ODS来源】goods_stock_movements - source_file(ETL补充)。 【JSON字段】goods_stock_movements.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/goods_stock_movements.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【ODS来源】goods_stock_movements - source_endpoint(ETL补充)。 【JSON字段】goods_stock_movements.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【ODS来源】goods_stock_movements - fetched_at(ETL补充)。 【JSON字段】goods_stock_movements.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【ODS来源】goods_stock_movements - payload。 【JSON字段】goods_stock_movements.json - data.queryDeliveryRecordsList - $。'; + CREATE TABLE IF NOT EXISTS billiards_ods.stock_goods_category_tree ( id BIGINT PRIMARY KEY, @@ -1116,22 +1134,23 @@ CREATE TABLE IF NOT EXISTS billiards_ods.stock_goods_category_tree ( payload JSONB NOT NULL ); -COMMENT ON TABLE billiards_ods.stock_goods_category_tree IS '对应JSON字段:stock_goods_category_tree.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 stock_goods_category_tree-Analysis.md'; -COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.id IS '对应JSON字段:id,说明:?????? stock_goods_category_tree-Analysis.md,示例值及对应分析:?? stock_goods_category_tree-Analysis.md'; -COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.tenant_id IS '对应JSON字段:tenant_id,说明:?????? stock_goods_category_tree-Analysis.md,示例值及对应分析:?? stock_goods_category_tree-Analysis.md'; -COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.category_name IS '对应JSON字段:category_name,说明:?????? stock_goods_category_tree-Analysis.md,示例值及对应分析:?? stock_goods_category_tree-Analysis.md'; -COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.alias_name IS '对应JSON字段:alias_name,说明:?????? stock_goods_category_tree-Analysis.md,示例值及对应分析:?? stock_goods_category_tree-Analysis.md'; -COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.pid IS '对应JSON字段:pid,说明:?????? stock_goods_category_tree-Analysis.md,示例值及对应分析:?? stock_goods_category_tree-Analysis.md'; -COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.business_name IS '对应JSON字段:business_name,说明:?????? stock_goods_category_tree-Analysis.md,示例值及对应分析:?? stock_goods_category_tree-Analysis.md'; -COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.tenant_goods_business_id IS '对应JSON字段:tenant_goods_business_id,说明:?????? stock_goods_category_tree-Analysis.md,示例值及对应分析:?? stock_goods_category_tree-Analysis.md'; -COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.open_salesman IS '对应JSON字段:open_salesman,说明:?????? stock_goods_category_tree-Analysis.md,示例值及对应分析:?? stock_goods_category_tree-Analysis.md'; -COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.categoryBoxes IS '对应JSON字段:categoryBoxes,说明:?????? stock_goods_category_tree-Analysis.md,示例值及对应分析:?? stock_goods_category_tree-Analysis.md'; -COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.sort IS '对应JSON字段:sort,说明:?????? stock_goods_category_tree-Analysis.md,示例值及对应分析:?? stock_goods_category_tree-Analysis.md'; -COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.is_warehousing IS '对应JSON字段:is_warehousing,说明::分类节点主键 ID(在商品分类维度中的唯一标识)。,示例值及对应分析:特征:'; -COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; +COMMENT ON TABLE billiards_ods.stock_goods_category_tree IS 'ODS 原始明细表:商品分类树。来源:C:/dev/LLTQ/export/test-json-doc/stock_goods_category_tree.json;分析:stock_goods_category_tree-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.id IS '【说明】分类节点主键 ID(在商品分类维度中的唯一标识)。 【示例】2790683528350533(用于分类节点主键 ID(在商品分类维度中的唯一标识))。 【ODS来源】stock_goods_category_tree - id。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - id。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.tenant_id IS '【说明】租户 ID(品牌/商户 ID)。 【示例】2790683160709957(用于租户 ID(品牌/商户 ID))。 【ODS来源】stock_goods_category_tree - tenant_id。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - tenant_id。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.category_name IS '【说明】分类名称(实际业务分类名称)。 【示例】槟榔(用于分类名称(实际业务分类名称))。 【ODS来源】stock_goods_category_tree - category_name。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - category_name。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.alias_name IS '【说明】名称字段,用于展示与辅助识别。。 【示例】NULL(名称字段,用于展示与辅助识别。)。 【ODS来源】stock_goods_category_tree - alias_name。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - alias_name。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.pid IS '【说明】父级分类 ID。 【示例】0(用于父级分类 ID)。 【ODS来源】stock_goods_category_tree - pid。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - pid。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.business_name IS '【说明】业务大类名称。 【示例】槟榔(用于业务大类名称)。 【ODS来源】stock_goods_category_tree - business_name。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - business_name。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.tenant_goods_business_id IS '【说明】业务大类 ID。 【示例】2790683528317766(用于业务大类 ID)。 【ODS来源】stock_goods_category_tree - tenant_goods_business_id。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - tenant_goods_business_id。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.open_salesman IS '【说明】是否启用“营业员”或“导购提成”相关的功能开关。 【示例】2(用于是否启用“营业员”或“导购提成”相关的功能开关)。 【ODS来源】stock_goods_category_tree - open_salesman。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - open_salesman。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.categoryBoxes IS '【说明】子分类数组。 【示例】[{"id": 2790683528350534, "tenant_id": 2790683160709957, "category_name": "槟榔", "alias_name": "", "pid": 27906835283505…(用于子分类数组)。 【ODS来源】stock_goods_category_tree - categoryBoxes。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - categoryBoxes。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.sort IS '【说明】分类的排序序号,用于前端展示顺序的控制。 【示例】1(分类的排序序号,用于前端展示顺序的控制)。 【ODS来源】stock_goods_category_tree - sort。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - sort。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.is_warehousing IS '【说明】本文件可视为“所有参与库存管理的商品分类清单”,因此均为 1。 【示例】1(用于本文件可视为“所有参与库存管理的商品分类清单”,因此均为 1)。 【ODS来源】stock_goods_category_tree - is_warehousing。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - is_warehousing。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】stock_goods_category_tree.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【ODS来源】stock_goods_category_tree - source_file(ETL补充)。 【JSON字段】stock_goods_category_tree.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/stock_goods_category_tree.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【ODS来源】stock_goods_category_tree - source_endpoint(ETL补充)。 【JSON字段】stock_goods_category_tree.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【ODS来源】stock_goods_category_tree - fetched_at(ETL补充)。 【JSON字段】stock_goods_category_tree.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【ODS来源】stock_goods_category_tree - payload。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - $。'; + CREATE TABLE IF NOT EXISTS billiards_ods.goods_stock_summary ( siteGoodsId BIGINT PRIMARY KEY, @@ -1154,25 +1173,26 @@ CREATE TABLE IF NOT EXISTS billiards_ods.goods_stock_summary ( payload JSONB NOT NULL ); -COMMENT ON TABLE billiards_ods.goods_stock_summary IS '对应JSON字段:goods_stock_summary.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 goods_stock_summary-Analysis.md'; -COMMENT ON COLUMN billiards_ods.goods_stock_summary.siteGoodsId IS '对应JSON字段:siteGoodsId,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; -COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsName IS '对应JSON字段:goodsName,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; -COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsUnit IS '对应JSON字段:goodsUnit,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; -COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsCategoryId IS '对应JSON字段:goodsCategoryId,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; -COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsCategorySecondId IS '对应JSON字段:goodsCategorySecondId,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; -COMMENT ON COLUMN billiards_ods.goods_stock_summary.categoryName IS '对应JSON字段:categoryName,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; -COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeStartStock IS '对应JSON字段:rangeStartStock,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; -COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeEndStock IS '对应JSON字段:rangeEndStock,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; -COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeIn IS '对应JSON字段:rangeIn,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; -COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeOut IS '对应JSON字段:rangeOut,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; -COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeSale IS '对应JSON字段:rangeSale,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; -COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeSaleMoney IS '对应JSON字段:rangeSaleMoney,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; -COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeInventory IS '对应JSON字段:rangeInventory,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; -COMMENT ON COLUMN billiards_ods.goods_stock_summary.currentStock IS '对应JSON字段:currentStock,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; -COMMENT ON COLUMN billiards_ods.goods_stock_summary.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.goods_stock_summary.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.goods_stock_summary.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.goods_stock_summary.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; +COMMENT ON TABLE billiards_ods.goods_stock_summary IS 'ODS 原始明细表:商品库存汇总。来源:C:/dev/LLTQ/export/test-json-doc/goods_stock_summary.json;分析:goods_stock_summary-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.siteGoodsId IS '【说明】门店商品 ID,本库存汇总表的主键,对应某个具体商品在本店的唯一标识。 【示例】2791953867886725(用于门店商品 ID,本库存汇总表的主键,对应某个具体商品在本店的唯一标识)。 【ODS来源】goods_stock_summary - siteGoodsId。 【JSON字段】goods_stock_summary.json - $ - siteGoodsId。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsName IS '【说明】商品名称,冗余于门店商品档案的 goods_name。 【示例】东方树叶(用于商品名称,冗余于门店商品档案的 goods_name)。 【ODS来源】goods_stock_summary - goodsName。 【JSON字段】goods_stock_summary.json - $ - goodsName。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsUnit IS '【说明】商品的计量单位(售卖单位)。 【示例】瓶(用于商品的计量单位(售卖单位))。 【ODS来源】goods_stock_summary - goodsUnit。 【JSON字段】goods_stock_summary.json - $ - goodsUnit。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsCategoryId IS '【说明】一级商品分类 ID。 【示例】2790683528350539(用于一级商品分类 ID)。 【ODS来源】goods_stock_summary - goodsCategoryId。 【JSON字段】goods_stock_summary.json - $ - goodsCategoryId。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsCategorySecondId IS '【说明】二级(次级)商品分类 ID,是 goodsCategoryId 的下级分类。 【示例】2790683528350540(用于二级(次级)商品分类 ID,是 goodsCategoryId 的下级分类)。 【ODS来源】goods_stock_summary - goodsCategorySecondId。 【JSON字段】goods_stock_summary.json - $ - goodsCategorySecondId。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.categoryName IS '【说明】一级分类名称,属于冗余字段,用于直接展示。 【示例】酒水(一级分类名称,属于冗余字段,用于直接展示)。 【ODS来源】goods_stock_summary - categoryName。 【JSON字段】goods_stock_summary.json - $ - categoryName。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeStartStock IS '【说明】查询区间 起始时刻 的库存数量(期初库存)。 【示例】165(用于查询区间 起始时刻 的库存数量(期初库存))。 【ODS来源】goods_stock_summary - rangeStartStock。 【JSON字段】goods_stock_summary.json - $ - rangeStartStock。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeEndStock IS '【说明】查询区间 结束时刻 的库存数量(期末库存)。 【示例】118(用于查询区间 结束时刻 的库存数量(期末库存))。 【ODS来源】goods_stock_summary - rangeEndStock。 【JSON字段】goods_stock_summary.json - $ - rangeEndStock。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeIn IS '【说明】查询区间内的 入库数量汇总(正值),包括采购入库、调拨入库等。 【示例】450(用于查询区间内的 入库数量汇总(正值),包括采购入库、调拨入库等)。 【ODS来源】goods_stock_summary - rangeIn。 【JSON字段】goods_stock_summary.json - $ - rangeIn。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeOut IS '【说明】查询区间内的 出库数量汇总,以 负数 表示从库存扣减(出库/销售)。 【示例】-497(用于查询区间内的 出库数量汇总,以 负数 表示从库存扣减(出库/销售))。 【ODS来源】goods_stock_summary - rangeOut。 【JSON字段】goods_stock_summary.json - $ - rangeOut。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeSale IS '【说明】查询区间内,该商品的 销售数量汇总(售出多少“包/瓶/份”等)。 【示例】488(用于查询区间内,该商品的 销售数量汇总(售出多少“包/瓶/份”等))。 【ODS来源】goods_stock_summary - rangeSale。 【JSON字段】goods_stock_summary.json - $ - rangeSale。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeSaleMoney IS '【说明】查询区间内,该商品销售的 金额小计(按商品维度汇总)。 【示例】3904.0(用于查询区间内,该商品销售的 金额小计(按商品维度汇总))。 【ODS来源】goods_stock_summary - rangeSaleMoney。 【JSON字段】goods_stock_summary.json - $ - rangeSaleMoney。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeInventory IS '【说明】查询区间内的 盘点调整净变动量(盘盈–盘亏)。 【示例】0(用于查询区间内的 盘点调整净变动量(盘盈–盘亏))。 【ODS来源】goods_stock_summary - rangeInventory。 【JSON字段】goods_stock_summary.json - $ - rangeInventory。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.currentStock IS '【说明】导出时刻的实时库存数量。 【示例】118(用于导出时刻的实时库存数量)。 【ODS来源】goods_stock_summary - currentStock。 【JSON字段】goods_stock_summary.json - $ - currentStock。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】goods_stock_summary.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【ODS来源】goods_stock_summary - source_file(ETL补充)。 【JSON字段】goods_stock_summary.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/goods_stock_summary.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【ODS来源】goods_stock_summary - source_endpoint(ETL补充)。 【JSON字段】goods_stock_summary.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【ODS来源】goods_stock_summary - fetched_at(ETL补充)。 【JSON字段】goods_stock_summary.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【ODS来源】goods_stock_summary - payload。 【JSON字段】goods_stock_summary.json - $ - $。'; + CREATE TABLE IF NOT EXISTS billiards_ods.payment_transactions ( id BIGINT PRIMARY KEY, @@ -1192,22 +1212,23 @@ CREATE TABLE IF NOT EXISTS billiards_ods.payment_transactions ( payload JSONB NOT NULL ); -COMMENT ON TABLE billiards_ods.payment_transactions IS '对应JSON字段:payment_transactions.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 payment_transactions-Analysis.md'; -COMMENT ON COLUMN billiards_ods.payment_transactions.id IS '对应JSON字段:id,说明:?????? payment_transactions-Analysis.md,示例值及对应分析:?? payment_transactions-Analysis.md'; -COMMENT ON COLUMN billiards_ods.payment_transactions.site_id IS '对应JSON字段:site_id,说明:?????? payment_transactions-Analysis.md,示例值及对应分析:?? payment_transactions-Analysis.md'; -COMMENT ON COLUMN billiards_ods.payment_transactions.siteProfile IS '对应JSON字段:siteProfile,说明:?????? payment_transactions-Analysis.md,示例值及对应分析:?? payment_transactions-Analysis.md'; -COMMENT ON COLUMN billiards_ods.payment_transactions.relate_type IS '对应JSON字段:relate_type,说明:?????? payment_transactions-Analysis.md,示例值及对应分析:?? payment_transactions-Analysis.md'; -COMMENT ON COLUMN billiards_ods.payment_transactions.relate_id IS '对应JSON字段:relate_id,说明:?????? payment_transactions-Analysis.md,示例值及对应分析:?? payment_transactions-Analysis.md'; -COMMENT ON COLUMN billiards_ods.payment_transactions.pay_amount IS '对应JSON字段:pay_amount,说明:?????? payment_transactions-Analysis.md,示例值及对应分析:?? payment_transactions-Analysis.md'; -COMMENT ON COLUMN billiards_ods.payment_transactions.pay_status IS '对应JSON字段:pay_status,说明:?????? payment_transactions-Analysis.md,示例值及对应分析:?? payment_transactions-Analysis.md'; -COMMENT ON COLUMN billiards_ods.payment_transactions.pay_time IS '对应JSON字段:pay_time,说明:?????? payment_transactions-Analysis.md,示例值及对应分析:?? payment_transactions-Analysis.md'; -COMMENT ON COLUMN billiards_ods.payment_transactions.create_time IS '对应JSON字段:create_time,说明:?????? payment_transactions-Analysis.md,示例值及对应分析:?? payment_transactions-Analysis.md'; -COMMENT ON COLUMN billiards_ods.payment_transactions.payment_method IS '对应JSON字段:payment_method,说明:?????? payment_transactions-Analysis.md,示例值及对应分析:?? payment_transactions-Analysis.md'; -COMMENT ON COLUMN billiards_ods.payment_transactions.online_pay_channel IS '对应JSON字段:online_pay_channel,说明:?????? payment_transactions-Analysis.md,示例值及对应分析:?? payment_transactions-Analysis.md'; -COMMENT ON COLUMN billiards_ods.payment_transactions.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.payment_transactions.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.payment_transactions.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.payment_transactions.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; +COMMENT ON TABLE billiards_ods.payment_transactions IS 'ODS 原始明细表:支付流水。来源:C:/dev/LLTQ/export/test-json-doc/payment_transactions.json;分析:payment_transactions-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.id IS '【说明】支付流水记录的主键 ID。 【示例】2957924026486597(用于支付流水记录的主键 ID)。 【ODS来源】payment_transactions - id。 【JSON字段】payment_transactions.json - $ - id。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.site_id IS '【说明】支付记录所属的门店 ID。 【示例】2790685415443269(用于支付记录所属的门店 ID)。 【ODS来源】payment_transactions - site_id。 【JSON字段】payment_transactions.json - $ - site_id。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.siteProfile IS '【说明】门店信息快照,与其他 JSON 中的 siteProfile 结构一致。 【示例】{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "avatar": "https://oss.ficoo.vip/admin/hXcE4E…(用于门店信息快照,与其他 JSON 中的 siteProfile 结构一致)。 【ODS来源】payment_transactions - siteProfile。 【JSON字段】payment_transactions.json - $ - siteProfile。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.relate_type IS '【说明】表示“这条支付记录关联的业务类型”。 【示例】2(用于表示“这条支付记录关联的业务类型”)。 【ODS来源】payment_transactions - relate_type。 【JSON字段】payment_transactions.json - $ - relate_type。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.relate_id IS '【说明】关联业务记录的主键 ID(按 relate_type 不同指向不同表)。 【示例】2957922914357125(用于关联业务记录的主键 ID(按 relate_type 不同指向不同表))。 【ODS来源】payment_transactions - relate_id。 【JSON字段】payment_transactions.json - $ - relate_id。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.pay_amount IS '【说明】本条支付流水的“支付金额”,单位为元。 【示例】10.0(用于本条支付流水的“支付金额”,单位为元)。 【ODS来源】payment_transactions - pay_amount。 【JSON字段】payment_transactions.json - $ - pay_amount。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.pay_status IS '【说明】支付状态枚举字段。 【示例】2(用于支付状态枚举字段)。 【ODS来源】payment_transactions - pay_status。 【JSON字段】payment_transactions.json - $ - pay_status。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.pay_time IS '【说明】实际支付完成时间(支付状态变为成功的时间戳)。 【示例】2025-11-09 23:35:57(用于实际支付完成时间(支付状态变为成功的时间戳))。 【ODS来源】payment_transactions - pay_time。 【JSON字段】payment_transactions.json - $ - pay_time。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.create_time IS '【说明】支付记录创建时间,通常与发起支付请求的时间一致(创建支付流水的时间戳)。 【示例】2025-11-09 23:35:57(用于支付记录创建时间,通常与发起支付请求的时间一致(创建支付流水的时间戳))。 【ODS来源】payment_transactions - create_time。 【JSON字段】payment_transactions.json - $ - create_time。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.payment_method IS '【说明】支付方式枚举,例如微信、支付宝、现金、银行卡、储值卡等某一种。 【示例】4(用于支付方式枚举,例如微信、支付宝、现金、银行卡、储值卡等某一种)。 【ODS来源】payment_transactions - payment_method。 【JSON字段】payment_transactions.json - $ - payment_method。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.online_pay_channel IS '【说明】每一笔结账单(settleList.id)对应一条支付记录(当前样本中是一条记录,relate_id 唯一)。 【示例】0(用于每一笔结账单(settleList.id)对应一条支付记录(当前样本中是一条记录,relate_id 唯一))。 【ODS来源】payment_transactions - online_pay_channel。 【JSON字段】payment_transactions.json - $ - online_pay_channel。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】payment_transactions.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【ODS来源】payment_transactions - source_file(ETL补充)。 【JSON字段】payment_transactions.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/payment_transactions.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【ODS来源】payment_transactions - source_endpoint(ETL补充)。 【JSON字段】payment_transactions.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【ODS来源】payment_transactions - fetched_at(ETL补充)。 【JSON字段】payment_transactions.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【ODS来源】payment_transactions - payload。 【JSON字段】payment_transactions.json - $ - $。'; + CREATE TABLE IF NOT EXISTS billiards_ods.refund_transactions ( id BIGINT PRIMARY KEY, @@ -1248,43 +1269,44 @@ CREATE TABLE IF NOT EXISTS billiards_ods.refund_transactions ( payload JSONB NOT NULL ); -COMMENT ON TABLE billiards_ods.refund_transactions IS '对应JSON字段:refund_transactions.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 refund_transactions-Analysis.md'; -COMMENT ON COLUMN billiards_ods.refund_transactions.id IS '对应JSON字段:id,说明::本条 退款流水 的唯一 ID。,示例值及对应分析:特点:'; -COMMENT ON COLUMN billiards_ods.refund_transactions.tenant_id IS '对应JSON字段:tenant_id,说明::租户/品牌 ID,全系统维度标识该商户。,示例值及对应分析:特点:本文件中所有记录相同。'; -COMMENT ON COLUMN billiards_ods.refund_transactions.tenantName IS '对应JSON字段:tenantName,说明::租户(商户)名称。,示例值及对应分析:特点:本文件中固定为“朗朗桌球”,完全冗余于 siteProfile.shop_name。'; -COMMENT ON COLUMN billiards_ods.refund_transactions.site_id IS '对应JSON字段:site_id,说明::门店 ID。,示例值及对应分析:特点:本文件中所有记录相同(单门店)。'; -COMMENT ON COLUMN billiards_ods.refund_transactions.siteProfile IS '对应JSON字段:siteProfile,说明::门店信息快照,结构与其他 JSON 中的 siteProfile 完全一致。包含字段包括但不限于:,示例值及对应分析:id:门店 ID(= site_id);'; -COMMENT ON COLUMN billiards_ods.refund_transactions.relate_type IS '对应JSON字段:relate_type,说明::本退款对应的“业务类型”。,示例值及对应分析:结合支付记录的 relate_type 推测:'; -COMMENT ON COLUMN billiards_ods.refund_transactions.relate_id IS '对应JSON字段:relate_id,说明::本次退款关联的业务 ID。,示例值及对应分析:对于 relate_type = 2:应该对应某个订单/结算的主键;'; -COMMENT ON COLUMN billiards_ods.refund_transactions.pay_sn IS '对应JSON字段:pay_sn,说明:?????? refund_transactions-Analysis.md,示例值及对应分析:?? refund_transactions-Analysis.md'; -COMMENT ON COLUMN billiards_ods.refund_transactions.pay_amount IS '对应JSON字段:pay_amount,说明::本次退款的 资金变动金额。,示例值及对应分析:特征很重要:'; -COMMENT ON COLUMN billiards_ods.refund_transactions.refund_amount IS '对应JSON字段:refund_amount,说明:(推测):,示例值及对应分析:设计上本应显示“实际退款金额”(正数),与 pay_amount 配合使用;'; -COMMENT ON COLUMN billiards_ods.refund_transactions.round_amount IS '对应JSON字段:round_amount,说明:(推测):,示例值及对应分析:舍入金额/抹零金额;'; -COMMENT ON COLUMN billiards_ods.refund_transactions.pay_status IS '对应JSON字段:pay_status,说明:(推测):,示例值及对应分析:支付/退款状态枚举:'; -COMMENT ON COLUMN billiards_ods.refund_transactions.pay_time IS '对应JSON字段:pay_time,说明::退款在支付渠道层面实际发生的时间。,示例值及对应分析:特点:'; -COMMENT ON COLUMN billiards_ods.refund_transactions.create_time IS '对应JSON字段:create_time,说明::本条退款流水在系统内创建时间。,示例值及对应分析:特点:'; -COMMENT ON COLUMN billiards_ods.refund_transactions.payment_method IS '对应JSON字段:payment_method,说明:(推测):,示例值及对应分析:支付/退款的 方式类型:'; -COMMENT ON COLUMN billiards_ods.refund_transactions.pay_terminal IS '对应JSON字段:pay_terminal,说明:(推测):,示例值及对应分析:退款所使用的 终端类型:'; -COMMENT ON COLUMN billiards_ods.refund_transactions.pay_config_id IS '对应JSON字段:pay_config_id,说明:(推测):,示例值及对应分析:支付配置 ID,例如商户在“非球科技”内配置的某一条支付通道(某个微信商户号、银联通道)的主键。'; -COMMENT ON COLUMN billiards_ods.refund_transactions.online_pay_channel IS '对应JSON字段:online_pay_channel,说明:(推测):,示例值及对应分析:线上支付的 渠道编号,例如:'; -COMMENT ON COLUMN billiards_ods.refund_transactions.online_pay_type IS '对应JSON字段:online_pay_type,说明:(推测):,示例值及对应分析:在线退款的类型:'; -COMMENT ON COLUMN billiards_ods.refund_transactions.channel_fee IS '对应JSON字段:channel_fee,说明:(推测):,示例值及对应分析:第三方支付渠道对本次退款收取的手续费;'; -COMMENT ON COLUMN billiards_ods.refund_transactions.channel_payer_id IS '对应JSON字段:channel_payer_id,说明:(推测):,示例值及对应分析:支付渠道侧的 payer ID,例如微信 openid、银行卡号掩码等。'; -COMMENT ON COLUMN billiards_ods.refund_transactions.channel_pay_no IS '对应JSON字段:channel_pay_no,说明:(推测):,示例值及对应分析:第三方支付平台的交易号(如微信支付单号、支付宝交易号等)。'; -COMMENT ON COLUMN billiards_ods.refund_transactions.member_id IS '对应JSON字段:member_id,说明::,示例值及对应分析:租户内部的会员 ID(对应会员档案中的某个主键)。'; -COMMENT ON COLUMN billiards_ods.refund_transactions.member_card_id IS '对应JSON字段:member_card_id,说明::,示例值及对应分析:关联的会员卡账户 ID(对应“储值卡列表”或“会员档案”中的某一张卡)。'; -COMMENT ON COLUMN billiards_ods.refund_transactions.cashier_point_id IS '对应JSON字段:cashier_point_id,说明:(推测):,示例值及对应分析:收银点 ID,例如前台 1、前台 2、自助机等。'; -COMMENT ON COLUMN billiards_ods.refund_transactions.operator_id IS '对应JSON字段:operator_id,说明::,示例值及对应分析:执行该退款操作的操作员 ID。'; -COMMENT ON COLUMN billiards_ods.refund_transactions.action_type IS '对应JSON字段:action_type,说明:(推测):,示例值及对应分析:行为类型:'; -COMMENT ON COLUMN billiards_ods.refund_transactions.check_status IS '对应JSON字段:check_status,说明:(推测):,示例值及对应分析:审核状态:'; -COMMENT ON COLUMN billiards_ods.refund_transactions.is_revoke IS '对应JSON字段:is_revoke,说明:(推测):,示例值及对应分析:是否撤销型退款/撤销原支付:'; -COMMENT ON COLUMN billiards_ods.refund_transactions.is_delete IS '对应JSON字段:is_delete,说明::逻辑删除标志。,示例值及对应分析:0:未删除;'; -COMMENT ON COLUMN billiards_ods.refund_transactions.balance_frozen_amount IS '对应JSON字段:balance_frozen_amount,说明:(推测):,示例值及对应分析:涉及会员储值卡退款时,暂时冻结的余额金额;'; -COMMENT ON COLUMN billiards_ods.refund_transactions.card_frozen_amount IS '对应JSON字段:card_frozen_amount,说明::与上一个类似,偏向“某张卡的被冻结金额”,也与会员卡/储值账户相关。,示例值及对应分析:状态同上:本数据中未发生“卡冻结退款”。'; -COMMENT ON COLUMN billiards_ods.refund_transactions.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.refund_transactions.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.refund_transactions.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.refund_transactions.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; +COMMENT ON TABLE billiards_ods.refund_transactions IS 'ODS 原始明细表:退款流水。来源:C:/dev/LLTQ/export/test-json-doc/refund_transactions.json;分析:refund_transactions-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.id IS '【说明】本条 退款流水 的唯一 ID。 【示例】2955202296416389(用于本条 退款流水 的唯一 ID)。 【ODS来源】refund_transactions - id。 【JSON字段】refund_transactions.json - $ - id。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.tenant_id IS '【说明】租户/品牌 ID,全系统维度标识该商户。 【示例】2790683160709957(用于租户/品牌 ID,全系统维度标识该商户)。 【ODS来源】refund_transactions - tenant_id。 【JSON字段】refund_transactions.json - $ - tenant_id。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.tenantName IS '【说明】租户(商户)名称。 【示例】朗朗桌球(用于租户(商户)名称)。 【ODS来源】refund_transactions - tenantName。 【JSON字段】refund_transactions.json - $ - tenantName。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.site_id IS '【说明】门店 ID。 【示例】2790685415443269(用于门店 ID)。 【ODS来源】refund_transactions - site_id。 【JSON字段】refund_transactions.json - $ - site_id。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.siteProfile IS '【说明】门店信息快照,结构与其他 JSON 中的 siteProfile 完全一致。 【示例】{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "avatar": "https://oss.ficoo.vip/admin/hXcE4E…(用于门店信息快照,结构与其他 JSON 中的 siteProfile 完全一致)。 【ODS来源】refund_transactions - siteProfile。 【JSON字段】refund_transactions.json - $ - siteProfile。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.relate_type IS '【说明】本退款对应的“业务类型”。 【示例】5(用于本退款对应的“业务类型”)。 【ODS来源】refund_transactions - relate_type。 【JSON字段】refund_transactions.json - $ - relate_type。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.relate_id IS '【说明】本次退款关联的业务 ID。 【示例】2955078219057349(用于本次退款关联的业务 ID)。 【ODS来源】refund_transactions - relate_id。 【JSON字段】refund_transactions.json - $ - relate_id。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.pay_sn IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】0(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】refund_transactions - pay_sn。 【JSON字段】refund_transactions.json - $ - pay_sn。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.pay_amount IS '【说明】本次退款的 资金变动金额。 【示例】-5000.0(用于本次退款的 资金变动金额)。 【ODS来源】refund_transactions - pay_amount。 【JSON字段】refund_transactions.json - $ - pay_amount。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.refund_amount IS '【说明】设计上本应显示“实际退款金额”(正数),与 pay_amount 配合使用。 【示例】0.0(用于设计上本应显示“实际退款金额”(正数),与 pay_amount 配合使用)。 【ODS来源】refund_transactions - refund_amount。 【JSON字段】refund_transactions.json - $ - refund_amount。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.round_amount IS '【说明】舍入金额/抹零金额。 【示例】0.0(用于舍入金额/抹零金额)。 【ODS来源】refund_transactions - round_amount。 【JSON字段】refund_transactions.json - $ - round_amount。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.pay_status IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】2(来自 JSON 导出的原始字段,用于保留业务取值。)。 【ODS来源】refund_transactions - pay_status。 【JSON字段】refund_transactions.json - $ - pay_status。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.pay_time IS '【说明】退款在支付渠道层面实际发生的时间。 【示例】2025-11-08 01:27:16(用于退款在支付渠道层面实际发生的时间)。 【ODS来源】refund_transactions - pay_time。 【JSON字段】refund_transactions.json - $ - pay_time。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.create_time IS '【说明】本条退款流水在系统内创建时间。 【示例】2025-11-08 01:27:16(用于本条退款流水在系统内创建时间)。 【ODS来源】refund_transactions - create_time。 【JSON字段】refund_transactions.json - $ - create_time。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.payment_method IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】4(来自 JSON 导出的原始字段,用于保留业务取值。)。 【ODS来源】refund_transactions - payment_method。 【JSON字段】refund_transactions.json - $ - payment_method。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.pay_terminal IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【ODS来源】refund_transactions - pay_terminal。 【JSON字段】refund_transactions.json - $ - pay_terminal。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.pay_config_id IS '【说明】支付配置 ID,例如商户在“非球科技”内配置的某一条支付通道(某个微信商户号、银联通道)的主键。 【示例】0(用于支付配置 ID,例如商户在“非球科技”内配置的某一条支付通道(某个微信商户号、银联通道)的主键)。 【ODS来源】refund_transactions - pay_config_id。 【JSON字段】refund_transactions.json - $ - pay_config_id。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.online_pay_channel IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】0(来自 JSON 导出的原始字段,用于保留业务取值。)。 【ODS来源】refund_transactions - online_pay_channel。 【JSON字段】refund_transactions.json - $ - online_pay_channel。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.online_pay_type IS '【说明】当前:全部 0。 【示例】0(用于当前:全部 0)。 【ODS来源】refund_transactions - online_pay_type。 【JSON字段】refund_transactions.json - $ - online_pay_type。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.channel_fee IS '【说明】第三方支付渠道对本次退款收取的手续费。 【示例】0.0(用于第三方支付渠道对本次退款收取的手续费)。 【ODS来源】refund_transactions - channel_fee。 【JSON字段】refund_transactions.json - $ - channel_fee。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.channel_payer_id IS '【说明】支付渠道侧的 payer ID,例如微信 openid、银行卡号掩码等。 【示例】NULL(用于支付渠道侧的 payer ID,例如微信 openid、银行卡号掩码等)。 【ODS来源】refund_transactions - channel_payer_id。 【JSON字段】refund_transactions.json - $ - channel_payer_id。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.channel_pay_no IS '【说明】第三方支付平台的交易号(如微信支付单号、支付宝交易号等)。 【示例】NULL(用于第三方支付平台的交易号(如微信支付单号、支付宝交易号等))。 【ODS来源】refund_transactions - channel_pay_no。 【JSON字段】refund_transactions.json - $ - channel_pay_no。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.member_id IS '【说明】租户内部的会员 ID(对应会员档案中的某个主键)。 【示例】0(用于租户内部的会员 ID(对应会员档案中的某个主键))。 【ODS来源】refund_transactions - member_id。 【JSON字段】refund_transactions.json - $ - member_id。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.member_card_id IS '【说明】关联的会员卡账户 ID(对应“储值卡列表”或“会员档案”中的某一张卡)。 【示例】0(用于关联的会员卡账户 ID(对应“储值卡列表”或“会员档案”中的某一张卡))。 【ODS来源】refund_transactions - member_card_id。 【JSON字段】refund_transactions.json - $ - member_card_id。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.cashier_point_id IS '【说明】收银点 ID,例如前台 1、前台 2、自助机等。 【示例】0(用于收银点 ID,例如前台 1、前台 2、自助机等)。 【ODS来源】refund_transactions - cashier_point_id。 【JSON字段】refund_transactions.json - $ - cashier_point_id。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.operator_id IS '【说明】执行该退款操作的操作员 ID。 【示例】0(用于执行该退款操作的操作员 ID)。 【ODS来源】refund_transactions - operator_id。 【JSON字段】refund_transactions.json - $ - operator_id。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.action_type IS '【说明】当前:全部 2。 【示例】2(用于当前:全部 2)。 【ODS来源】refund_transactions - action_type。 【JSON字段】refund_transactions.json - $ - action_type。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.check_status IS '【说明】当前:全部 1。 【示例】1(用于当前:全部 1)。 【ODS来源】refund_transactions - check_status。 【JSON字段】refund_transactions.json - $ - check_status。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.is_revoke IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。。 【示例】0(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【ODS来源】refund_transactions - is_revoke。 【JSON字段】refund_transactions.json - $ - is_revoke。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.is_delete IS '【说明】逻辑删除标志。 【示例】0(用于逻辑删除标志)。 【ODS来源】refund_transactions - is_delete。 【JSON字段】refund_transactions.json - $ - is_delete。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.balance_frozen_amount IS '【说明】涉及会员储值卡退款时,暂时冻结的余额金额。 【示例】0.0(用于涉及会员储值卡退款时,暂时冻结的余额金额)。 【ODS来源】refund_transactions - balance_frozen_amount。 【JSON字段】refund_transactions.json - $ - balance_frozen_amount。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.card_frozen_amount IS '【说明】与上一个类似,偏向“某张卡的被冻结金额”,也与会员卡/储值账户相关。 【示例】0.0(用于与上一个类似,偏向“某张卡的被冻结金额”,也与会员卡/储值账户相关)。 【ODS来源】refund_transactions - card_frozen_amount。 【JSON字段】refund_transactions.json - $ - card_frozen_amount。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】refund_transactions.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【ODS来源】refund_transactions - source_file(ETL补充)。 【JSON字段】refund_transactions.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/refund_transactions.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【ODS来源】refund_transactions - source_endpoint(ETL补充)。 【JSON字段】refund_transactions.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【ODS来源】refund_transactions - fetched_at(ETL补充)。 【JSON字段】refund_transactions.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【ODS来源】refund_transactions - payload。 【JSON字段】refund_transactions.json - $ - $。'; + CREATE TABLE IF NOT EXISTS billiards_ods.platform_coupon_redemption_records ( id BIGINT PRIMARY KEY, @@ -1319,37 +1341,38 @@ CREATE TABLE IF NOT EXISTS billiards_ods.platform_coupon_redemption_records ( payload JSONB NOT NULL ); -COMMENT ON TABLE billiards_ods.platform_coupon_redemption_records IS '对应JSON字段:platform_coupon_redemption_records.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 platform_coupon_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.id IS '对应JSON字段:id,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.verify_id IS '对应JSON字段:verify_id,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.certificate_id IS '对应JSON字段:certificate_id,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_code IS '对应JSON字段:coupon_code,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_name IS '对应JSON字段:coupon_name,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_channel IS '对应JSON字段:coupon_channel,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.groupon_type IS '对应JSON字段:groupon_type,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.group_package_id IS '对应JSON字段:group_package_id,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.sale_price IS '对应JSON字段:sale_price,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_money IS '对应JSON字段:coupon_money,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_free_time IS '对应JSON字段:coupon_free_time,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_cover IS '对应JSON字段:coupon_cover,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_remark IS '对应JSON字段:coupon_remark,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.use_status IS '对应JSON字段:use_status,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.consume_time IS '对应JSON字段:consume_time,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.create_time IS '对应JSON字段:create_time,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.deal_id IS '对应JSON字段:deal_id,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.channel_deal_id IS '对应JSON字段:channel_deal_id,说明:任意一个 ID 字段缺失时(如部分记录 deal_id=0),仍然可以通过其他字段(coupon_name + sale_price + coupon_money + channel_deal_id)唯一识别该产品。,示例值及对应分析:这种多字段冗余,结构上提升了抗“配置缺失”的能力。'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.site_id IS '对应JSON字段:site_id,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.site_order_id IS '对应JSON字段:site_order_id,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.table_id IS '对应JSON字段:table_id,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.tenant_id IS '对应JSON字段:tenant_id,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.operator_id IS '对应JSON字段:operator_id,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.operator_name IS '对应JSON字段:operator_name,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.is_delete IS '对应JSON字段:is_delete,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.siteProfile IS '对应JSON字段:siteProfile,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; +COMMENT ON TABLE billiards_ods.platform_coupon_redemption_records IS 'ODS 原始明细表:平台券核销/使用记录。来源:C:/dev/LLTQ/export/test-json-doc/platform_coupon_redemption_records.json;分析:platform_coupon_redemption_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.id IS '【说明】本条平台验券记录在本系统内的主键 ID。 【示例】2957929042218501(用于本条平台验券记录在本系统内的主键 ID)。 【ODS来源】platform_coupon_redemption_records - id。 【JSON字段】platform_coupon_redemption_records.json - $ - id。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.verify_id IS '【说明】平台核销记录 ID(某些平台会为每一次核销生成一个唯一 ID)。 【示例】7570689090418149418(用于平台核销记录 ID(某些平台会为每一次核销生成一个唯一 ID))。 【ODS来源】platform_coupon_redemption_records - verify_id。 【JSON字段】platform_coupon_redemption_records.json - $ - verify_id。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.certificate_id IS '【说明】平台侧的凭证 ID(通常由第三方团购平台生成的券实例 ID)。 【示例】5008024789379597447(用于平台侧的凭证 ID(通常由第三方团购平台生成的券实例 ID))。 【ODS来源】platform_coupon_redemption_records - certificate_id。 【JSON字段】platform_coupon_redemption_records.json - $ - certificate_id。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_code IS '【说明】券码,顾客出示的团购券密码/编号。 【示例】0102701209726(用于券码,顾客出示的团购券密码/编号)。 【ODS来源】platform_coupon_redemption_records - coupon_code。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_code。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_name IS '【说明】团购券产品名称(即第三方平台上向顾客展示的名称)。 【示例】【全天可用】中八桌球一小时(A区)(用于团购券产品名称(即第三方平台上向顾客展示的名称))。 【ODS来源】platform_coupon_redemption_records - coupon_name。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_name。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_channel IS '【说明】券来源渠道(第三方平台渠道编号)。 【示例】1(用于券来源渠道(第三方平台渠道编号))。 【ODS来源】platform_coupon_redemption_records - coupon_channel。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_channel。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.groupon_type IS '【说明】团购券类型。 【示例】1(用于团购券类型)。 【ODS来源】platform_coupon_redemption_records - groupon_type。 【JSON字段】platform_coupon_redemption_records.json - $ - groupon_type。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.group_package_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。。 【示例】0(标识类 ID 字段,用于关联/定位相关实体。)。 【ODS来源】platform_coupon_redemption_records - group_package_id。 【JSON字段】platform_coupon_redemption_records.json - $ - group_package_id。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.sale_price IS '【说明】顾客在第三方平台上实际支付的价格(团购售价)。 【示例】29.9(用于顾客在第三方平台上实际支付的价格(团购售价))。 【ODS来源】platform_coupon_redemption_records - sale_price。 【JSON字段】platform_coupon_redemption_records.json - $ - sale_price。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_money IS '【说明】券面值 / 套餐价值(系统层面的“可抵扣金额或对应套餐价值”)。 【示例】48.0(用于券面值 / 套餐价值(系统层面的“可抵扣金额或对应套餐价值”))。 【ODS来源】platform_coupon_redemption_records - coupon_money。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_money。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_free_time IS '【说明】券附带的“免费时长”字段(例如送多少分钟台费)。 【示例】0(用于券附带的“免费时长”字段(例如送多少分钟台费))。 【ODS来源】platform_coupon_redemption_records - coupon_free_time。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_free_time。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_cover IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】platform_coupon_redemption_records - coupon_cover。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_cover。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_remark IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】617547ec-9697-4f58-a700-b30a49e88904||CgYIASAHKAESLgos9ZhHDryhHb0z3RpdBZ0dVoaQbkldBcx/XTXPV8Te+9SEqYOa7aDp8nbKOpsaAA==(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】platform_coupon_redemption_records - coupon_remark。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_remark。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.use_status IS '【说明】值 1:198 条。 【示例】1(用于值 1:198 条)。 【ODS来源】platform_coupon_redemption_records - use_status。 【JSON字段】platform_coupon_redemption_records.json - $ - use_status。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.consume_time IS '【说明】券被核销/使用的业务时间。 【示例】2025-11-09 23:41:04(用于券被核销/使用的业务时间)。 【ODS来源】platform_coupon_redemption_records - consume_time。 【JSON字段】platform_coupon_redemption_records.json - $ - consume_time。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.create_time IS '【说明】验券记录在本系统中创建的时间(记录入库时间)。 【示例】2025-11-09 23:41:03(用于验券记录在本系统中创建的时间(记录入库时间))。 【ODS来源】platform_coupon_redemption_records - create_time。 【JSON字段】platform_coupon_redemption_records.json - $ - create_time。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.deal_id IS '【说明】另一个层次的团购产品 ID。 【示例】1345108507(用于另一个层次的团购产品 ID)。 【ODS来源】platform_coupon_redemption_records - deal_id。 【JSON字段】platform_coupon_redemption_records.json - $ - deal_id。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.channel_deal_id IS '【说明】渠道侧 dealId / 产品 ID,一般是第三方平台给该团购商品定义的主键。 【示例】1128411555(用于渠道侧 dealId / 产品 ID,一般是第三方平台给该团购商品定义的主键)。 【ODS来源】platform_coupon_redemption_records - channel_deal_id。 【JSON字段】platform_coupon_redemption_records.json - $ - channel_deal_id。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.site_id IS '【说明】门店 ID。 【示例】2790685415443269(用于门店 ID)。 【ODS来源】platform_coupon_redemption_records - site_id。 【JSON字段】platform_coupon_redemption_records.json - $ - site_id。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.site_order_id IS '【说明】门店内部的订单 ID(平台券核销时对应的店内订单)。 【示例】2957929043037702(用于门店内部的订单 ID(平台券核销时对应的店内订单))。 【ODS来源】platform_coupon_redemption_records - site_order_id。 【JSON字段】platform_coupon_redemption_records.json - $ - site_order_id。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.table_id IS '【说明】使用券的球台 ID。 【示例】2793001904918661(用于使用券的球台 ID)。 【ODS来源】platform_coupon_redemption_records - table_id。 【JSON字段】platform_coupon_redemption_records.json - $ - table_id。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.tenant_id IS '【说明】商户/租户 ID(品牌级别)。 【示例】2790683160709957(用于商户/租户 ID(品牌级别))。 【ODS来源】platform_coupon_redemption_records - tenant_id。 【JSON字段】platform_coupon_redemption_records.json - $ - tenant_id。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.operator_id IS '【说明】操作员 ID(执行验券操作的收银员/员工)。 【示例】2790687322443013(用于操作员 ID(执行验券操作的收银员/员工))。 【ODS来源】platform_coupon_redemption_records - operator_id。 【JSON字段】platform_coupon_redemption_records.json - $ - operator_id。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.operator_name IS '【说明】操作员姓名,例如 "收银员:郑丽珊"。 【示例】收银员:郑丽珊(用于操作员姓名,例如 "收银员:郑丽珊")。 【ODS来源】platform_coupon_redemption_records - operator_name。 【JSON字段】platform_coupon_redemption_records.json - $ - operator_name。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.is_delete IS '【说明】把平台验券记录挂到本门店的一条订单上。 【示例】0(用于把平台验券记录挂到本门店的一条订单上)。 【ODS来源】platform_coupon_redemption_records - is_delete。 【JSON字段】platform_coupon_redemption_records.json - $ - is_delete。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.siteProfile IS '【说明】门店信息快照。 【示例】{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "avatar": "https://oss.ficoo.vip/admin/hXcE4E…(用于门店信息快照)。 【ODS来源】platform_coupon_redemption_records - siteProfile。 【JSON字段】platform_coupon_redemption_records.json - $ - siteProfile。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】platform_coupon_redemption_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【ODS来源】platform_coupon_redemption_records - source_file(ETL补充)。 【JSON字段】platform_coupon_redemption_records.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/platform_coupon_redemption_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【ODS来源】platform_coupon_redemption_records - source_endpoint(ETL补充)。 【JSON字段】platform_coupon_redemption_records.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【ODS来源】platform_coupon_redemption_records - fetched_at(ETL补充)。 【JSON字段】platform_coupon_redemption_records.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【ODS来源】platform_coupon_redemption_records - payload。 【JSON字段】platform_coupon_redemption_records.json - $ - $。'; + CREATE TABLE IF NOT EXISTS billiards_ods.tenant_goods_master ( id BIGINT PRIMARY KEY, @@ -1389,41 +1412,43 @@ CREATE TABLE IF NOT EXISTS billiards_ods.tenant_goods_master ( fetched_at TIMESTAMPTZ DEFAULT now() ); -COMMENT ON TABLE billiards_ods.tenant_goods_master IS '对应JSON字段:tenant_goods_master.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 tenant_goods_master-Analysis.md'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.id IS '对应JSON字段:id,说明::商品档案主键 ID,唯一标识一条商品。,示例值及对应分析:作用:作为其他业务表(销售明细、库存流水、门店商品表等)的外键,通常以 tenant_goods_id 或类似字段出现。'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.tenant_id IS '对应JSON字段:tenant_id,说明::租户/品牌 ID。,示例值及对应分析:作用:和其它 JSON 中的 tenant_id / tenantId 一致,用于区分不同商户(本次数据只包含同一租户)。'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_name IS '对应JSON字段:goods_name,说明::商品名称(前台展示名称)。,示例值及对应分析:特征:'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_bar_code IS '对应JSON字段:goods_bar_code,说明::商品条码(EAN 等),目前未维护。,示例值及对应分析:说明:'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_category_id IS '对应JSON字段:goods_category_id,说明::商品一级分类 ID。,示例值及对应分析:取值情况:'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_second_category_id IS '对应JSON字段:goods_second_category_id,说明::商品二级分类 ID。,示例值及对应分析:取值情况:'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.categoryName IS '对应JSON字段:categoryName,说明::商品一级分类名称(业务可读)。,示例值及对应分析:取值情况:'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.unit IS '对应JSON字段:unit,说明::计量单位。,示例值及对应分析:取值(共 12 种左右):'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_number IS '对应JSON字段:goods_number,说明::商品内部编码(自定义货号/系统货号)。,示例值及对应分析:特征:'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_state IS '对应JSON字段:goods_state,说明:(推测):商品状态(上架/下架等)。,示例值及对应分析:1:正常/上架;'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.sale_channel IS '对应JSON字段:sale_channel,说明:(推测):销售渠道类型,如“门店堂食/线下零售/线上小程序”等的一种编码。,示例值及对应分析:现有数据只有一个值,说明本门店目前仅通过一种渠道销售这些商品。'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.able_discount IS '对应JSON字段:able_discount,说明:(推测):是否允许参与折扣/打折。,示例值及对应分析:1:允许折扣;'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.able_site_transfer IS '对应JSON字段:able_site_transfer,说明:(推测):,示例值及对应分析:字面意思是“是否允许门店间调拨/门店级操作”:'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.is_delete IS '对应JSON字段:is_delete,说明::逻辑删除标志。,示例值及对应分析:0:未删除(有效商品);'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.is_warehousing IS '对应JSON字段:is_warehousing,说明:(推测):是否启用库存管理。,示例值及对应分析:1:该商品纳入库存管理;'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.isInSite IS '对应JSON字段:isInSite,说明:(从命名推测):是否在当前门店启用/上架。,示例值及对应分析:现象:'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.cost_price IS '对应JSON字段:cost_price,说明::成本价格。,示例值及对应分析:特征:'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.cost_price_type IS '对应JSON字段:cost_price_type,说明:(推测):,示例值及对应分析:不同的成本价格来源或计算方式,如:'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.market_price IS '对应JSON字段:market_price,说明::商品标价 / 售价(标准销售单价)。,示例值及对应分析:特征:'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.min_discount_price IS '对应JSON字段:min_discount_price,说明::该商品允许售卖的最低价格(底价)。,示例值及对应分析:特征:'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.common_sale_royalty IS '对应JSON字段:common_sale_royalty,说明:(推测):普通销售提成比例或提成金额的配置字段。,示例值及对应分析:当前门店未在商品档案上配置员工提成规则,全部为 0。'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.point_sale_royalty IS '对应JSON字段:point_sale_royalty,说明:(推测):积分销售提成/积分赠送规则相关配置。,示例值及对应分析:当前同样未启用。'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.pinyin_initial IS '对应JSON字段:pinyin_initial,说明::拼音首字母/助记码。,示例值及对应分析:特征:'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.commodityCode IS '对应JSON字段:commodityCode,说明::,示例值及对应分析:与 commodity_code 是同一信息的数组形式(冗余存储),便于支持一个商品对应多个编码的场景。'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.commodity_code IS '对应JSON字段:commodity_code,说明::商品编码(通常为对外商品编码或条码)。,示例值及对应分析:特征:'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_cover IS '对应JSON字段:goods_cover,说明::商品封面图片 URL 地址。,示例值及对应分析:特征:'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.supplier_id IS '对应JSON字段:supplier_id,说明::供应商 ID,用于关联到供应商档案。,示例值及对应分析:当前所有商品都未挂接具体供应商(或门店未使用供应链管理模块)。'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.remark_name IS '对应JSON字段:remark_name,说明:(从命名推断):商品备注名/别名,通常用来配置简写或特殊显示名称。,示例值及对应分析:当前门店尚未使用该字段,字段设计为将来扩展预留。'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.create_time IS '对应JSON字段:create_time,说明::商品档案创建时间。,示例值及对应分析:特征:'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.update_time IS '对应JSON字段:update_time,说明::商品档案最近一次修改时间。,示例值及对应分析:分布:'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.tenant_goods_master.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; +COMMENT ON TABLE billiards_ods.tenant_goods_master IS 'ODS 原始明细表:租户商品主数据。来源:C:/dev/LLTQ/export/test-json-doc/tenant_goods_master.json;分析:tenant_goods_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.id IS '【说明】商品档案主键 ID,唯一标识一条商品。 【示例】2791925230096261(用于商品档案主键 ID,唯一标识一条商品)。 【ODS来源】tenant_goods_master - id。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - id。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【ODS来源】tenant_goods_master - tenant_id。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - tenant_id。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_name IS '【说明】商品名称(前台展示名称)。 【示例】东方树叶(用于商品名称(前台展示名称))。 【ODS来源】tenant_goods_master - goods_name。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_name。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_bar_code IS '【说明】商品条码(EAN 等),目前未维护。 【示例】NULL(用于商品条码(EAN 等),目前未维护)。 【ODS来源】tenant_goods_master - goods_bar_code。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_bar_code。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_category_id IS '【说明】商品一级分类 ID。 【示例】2790683528350539(用于商品一级分类 ID)。 【ODS来源】tenant_goods_master - goods_category_id。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_category_id。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_second_category_id IS '【说明】商品二级分类 ID。 【示例】2790683528350540(用于商品二级分类 ID)。 【ODS来源】tenant_goods_master - goods_second_category_id。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_second_category_id。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.categoryName IS '【说明】商品一级分类名称(业务可读)。 【示例】饮料(用于商品一级分类名称(业务可读))。 【ODS来源】tenant_goods_master - categoryName。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - categoryName。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.unit IS '【说明】计量单位。 【示例】瓶(用于计量单位)。 【ODS来源】tenant_goods_master - unit。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - unit。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_number IS '【说明】商品内部编码(自定义货号/系统货号)。 【示例】1(用于商品内部编码(自定义货号/系统货号))。 【ODS来源】tenant_goods_master - goods_number。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_number。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.out_goods_id IS '【说明】外部系统商品 ID(对接第三方平台使用,如外卖、线上商城等)。 【示例】0(用于外部系统商品 ID(对接第三方平台使用,如外卖、线上商城等))。 【ODS来源】tenant_goods_master - out_goods_id。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - out_goods_id。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_state IS '【说明】商品状态(上架/下架等)。 【示例】1(用于商品状态(上架/下架等))。 【ODS来源】tenant_goods_master - goods_state。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_state。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.sale_channel IS '【说明】销售渠道类型,如“门店堂食/线下零售/线上小程序”等的一种编码。 【示例】1(用于销售渠道类型,如“门店堂食/线下零售/线上小程序”等的一种编码)。 【ODS来源】tenant_goods_master - sale_channel。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - sale_channel。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.able_discount IS '【说明】是否允许参与折扣/打折。 【示例】1(用于是否允许参与折扣/打折)。 【ODS来源】tenant_goods_master - able_discount。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - able_discount。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.able_site_transfer IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。。 【示例】2(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【ODS来源】tenant_goods_master - able_site_transfer。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - able_site_transfer。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.is_delete IS '【说明】逻辑删除标志。 【示例】0(用于逻辑删除标志)。 【ODS来源】tenant_goods_master - is_delete。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - is_delete。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.is_warehousing IS '【说明】是否启用库存管理。 【示例】1(用于是否启用库存管理)。 【ODS来源】tenant_goods_master - is_warehousing。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - is_warehousing。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.isInSite IS '【说明】是否在当前门店启用/上架。 【示例】false(用于是否在当前门店启用/上架)。 【ODS来源】tenant_goods_master - isInSite。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - isInSite。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.cost_price IS '【说明】成本价格。 【示例】0.0(用于成本价格)。 【ODS来源】tenant_goods_master - cost_price。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - cost_price。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.cost_price_type IS '【说明】金额字段,用于计费/结算/分摊等金额计算。。 【示例】1(金额字段,用于计费/结算/分摊等金额计算。)。 【ODS来源】tenant_goods_master - cost_price_type。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - cost_price_type。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.market_price IS '【说明】商品标价 / 售价(标准销售单价)。 【示例】8.0(用于商品标价 / 售价(标准销售单价))。 【ODS来源】tenant_goods_master - market_price。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - market_price。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.min_discount_price IS '【说明】该商品允许售卖的最低价格(底价)。 【示例】0.0(用于该商品允许售卖的最低价格(底价))。 【ODS来源】tenant_goods_master - min_discount_price。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - min_discount_price。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.common_sale_royalty IS '【说明】普通销售提成比例或提成金额的配置字段。 【示例】0(用于普通销售提成比例或提成金额的配置字段)。 【ODS来源】tenant_goods_master - common_sale_royalty。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - common_sale_royalty。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.point_sale_royalty IS '【说明】积分销售提成/积分赠送规则相关配置。 【示例】0(用于积分销售提成/积分赠送规则相关配置)。 【ODS来源】tenant_goods_master - point_sale_royalty。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - point_sale_royalty。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.pinyin_initial IS '【说明】拼音首字母/助记码。 【示例】DFSY,DFSX(用于拼音首字母/助记码)。 【ODS来源】tenant_goods_master - pinyin_initial。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - pinyin_initial。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.commodityCode IS '【说明】与 commodity_code 是同一信息的数组形式(冗余存储),便于支持一个商品对应多个编码的场景。 【示例】["10000028"](用于与 commodity_code 是同一信息的数组形式(冗余存储),便于支持一个商品对应多个编码的场景)。 【ODS来源】tenant_goods_master - commodityCode。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - commodityCode。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.commodity_code IS '【说明】商品编码(通常为对外商品编码或条码)。 【示例】10000028(用于商品编码(通常为对外商品编码或条码))。 【ODS来源】tenant_goods_master - commodity_code。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - commodity_code。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_cover IS '【说明】商品封面图片 URL 地址。 【示例】https://oss.ficoo.vip/admin/ZwS8fj_1753175129443.jpg(用于商品封面图片 URL 地址)。 【ODS来源】tenant_goods_master - goods_cover。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_cover。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.supplier_id IS '【说明】供应商 ID,用于关联到供应商档案。 【示例】0(供应商 ID,用于关联到供应商档案)。 【ODS来源】tenant_goods_master - supplier_id。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - supplier_id。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.remark_name IS '【说明】商品备注名/别名,通常用来配置简写或特殊显示名称。 【示例】NULL(用于商品备注名/别名,通常用来配置简写或特殊显示名称)。 【ODS来源】tenant_goods_master - remark_name。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - remark_name。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.create_time IS '【说明】商品档案创建时间。 【示例】2025-07-15 17:13:15(用于商品档案创建时间)。 【ODS来源】tenant_goods_master - create_time。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - create_time。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.update_time IS '【说明】商品档案最近一次修改时间。 【示例】2025-10-29 23:51:38(用于商品档案最近一次修改时间)。 【ODS来源】tenant_goods_master - update_time。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - update_time。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【ODS来源】tenant_goods_master - payload。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - $。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】tenant_goods_master.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【ODS来源】tenant_goods_master - source_file(ETL补充)。 【JSON字段】tenant_goods_master.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/tenant_goods_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【ODS来源】tenant_goods_master - source_endpoint(ETL补充)。 【JSON字段】tenant_goods_master.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【ODS来源】tenant_goods_master - fetched_at(ETL补充)。 【JSON字段】tenant_goods_master.json - ETL元数据 - 无。'; + CREATE TABLE IF NOT EXISTS billiards_ods.group_buy_packages ( id BIGINT PRIMARY KEY, @@ -1467,46 +1492,47 @@ CREATE TABLE IF NOT EXISTS billiards_ods.group_buy_packages ( payload JSONB NOT NULL ); -COMMENT ON TABLE billiards_ods.group_buy_packages IS '对应JSON字段:group_buy_packages.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 group_buy_packages-Analysis.md'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.id IS '对应JSON字段:id,说明::门店侧套餐 ID,本文件内部的主键。,示例值及对应分析:特点:17 条记录中均为不同的大整数 ID。'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.package_id IS '对应JSON字段:package_id,说明::“上层套餐 ID” 或“总部/系统级套餐 ID”。,示例值及对应分析:特点:'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.package_name IS '对应JSON字段:package_name,说明::团购套餐名称,用于前台展示和核销界面。,示例值及对应分析:示例:'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.selling_price IS '对应JSON字段:selling_price,说明:(结合字段命名):,示例值及对应分析:语义上应该是“团购售卖价”(顾客在平台购买券时的成交价格)。'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.coupon_money IS '对应JSON字段:coupon_money,说明::券面值或内部结算面值,表示该套餐在门店侧对应的金额额度。,示例值及对应分析:示例(对应套餐名称):'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.date_type IS '对应JSON字段:date_type,说明:(推测):,示例值及对应分析:典型用法:区分“全部日期可用 / 工作日 / 周末 / 指定日期”等。'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.date_info IS '对应JSON字段:date_info,说明:(推测):,示例值及对应分析:预留字段,通常用来存储更细粒度的日期信息,如具体日期列表、节假日特殊规则(可能是 JSON 字符串或编码)。'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.start_time IS '对应JSON字段:start_time,说明::套餐开始生效的日期时间。,示例值及对应分析:示例:"2025-07-20 00:00:00" 等。'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.end_time IS '对应JSON字段:end_time,说明::套餐失效的日期时间(到这个时间点后不可使用)。,示例值及对应分析:示例:形如 "2025-11-30 23:59:59",部分记录使用 9999-12-31 23:59:59 风格的极大日期表示长期有效(本数据中如有这种值,可解读为“长期有效”)。'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.start_clock IS '对应JSON字段:start_clock,说明::每日可用起始时间点(第一段)。,示例值及对应分析:说明:配合 end_clock 使用,定义一个日内时段。'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.end_clock IS '对应JSON字段:end_clock,说明::每日可用的结束时间点(第一段)。,示例值及对应分析:结构说明:'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.add_start_clock IS '对应JSON字段:add_start_clock,说明:(推测):附加可用时间段的起始时间(第二段)。,示例值及对应分析:例如有的套餐可以在两个不连续的时段使用:早场 + 夜场,则可用第一段 start_clock / end_clock 和第二段 add_start_clock / add_end_clock 组合。'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.add_end_clock IS '对应JSON字段:add_end_clock,说明::附加时段结束时间,多数情况配合 "00:00:00" 或 "10:00:00" 使用。,示例值及对应分析:整体理解:'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.duration IS '对应JSON字段:duration,说明::套餐内包含的时长(秒)。,示例值及对应分析:与名称一致:'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.usable_count IS '对应JSON字段:usable_count,说明::可使用次数上限。,示例值及对应分析:数据特征说明:'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.usable_range IS '对应JSON字段:usable_range,说明:吻合(A区中八/B区中八/斯诺克/KTV/包厢等)。,示例值及对应分析:通过该关联,系统在核销时可以校验:'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.table_area_id IS '对应JSON字段:table_area_id,说明:(推测):,示例值及对应分析:原始设计应为“单一台区 ID”,当套餐只限一个区域可以用这个字段存储。'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.table_area_name IS '对应JSON字段:table_area_name,说明::套餐适用的“门店台区名称”,用于显示和筛选。,示例值及对应分析:说明:这个字段是对区域 ID 维度的文字描述,便于直观理解。'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.table_area_id_list IS '对应JSON字段:table_area_id_list,说明:(推测):,示例值及对应分析:用来存放具体台区 ID 列表(例如 "1,2,3"),实现更细粒度的台桌限制。'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.tenant_table_area_id IS '对应JSON字段:tenant_table_area_id,说明:(推测):,示例值及对应分析:与 table_area_id 类似,是租户层级的台区 ID,原本用于单区选择。'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.tenant_table_area_id_list IS '对应JSON字段:tenant_table_area_id_list,说明:(推测):,示例值及对应分析:实际代表“台区集合 ID”或“租户台区配置 ID”,用来限制套餐可用的台区范围。'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.site_id IS '对应JSON字段:site_id,说明::门店 ID。,示例值及对应分析:特点:全表值相同,且与其他 JSON 文件中的 site_id 一致,对应“朗朗桌球”这家门店。'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.site_name IS '对应JSON字段:site_name,说明::门店名称。,示例值及对应分析:观测值:全部为 "朗朗桌球"。'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.tenant_id IS '对应JSON字段:tenant_id,说明::租户 ID(品牌/商户 ID)。,示例值及对应分析:特点:全表值相同,说明所有套餐定义属于同一商户(同一品牌)。'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.card_type_ids IS '对应JSON字段:card_type_ids,说明:(推测):,示例值及对应分析:原意是“适用会员卡类型 ID 列表”,例如某套餐只允许某几种会员卡使用,可以在此配置。'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.group_type IS '对应JSON字段:group_type,说明:(推测):,示例值及对应分析:团购类型,例如:'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.system_group_type IS '对应JSON字段:system_group_type,说明:(推测):,示例值及对应分析:系统内对团购类型更底层的划分,比如:'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.type IS '对应JSON字段:type,说明:(推测):,示例值及对应分析:内部业务子类型,具体含义需要结合系统文档;仅从数据无法确定是“台费类 vs 包厢类”还是“平台套餐 vs 自定义套餐”。'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.effective_status IS '对应JSON字段:effective_status,说明:(结合命名和数据特征推断):,示例值及对应分析:1:有效(在当前时间区间内、配置正常,可核销使用)。'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.is_enabled IS '对应JSON字段:is_enabled,说明::启用状态。,示例值及对应分析:从其他表的统一风格来看,1 一般表示“启用 / 上架”,2 表示“停用 / 下架”。'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.is_delete IS '对应JSON字段:is_delete,说明::逻辑删除标志。,示例值及对应分析:0:正常;'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.max_selectable_categories IS '对应JSON字段:max_selectable_categories,说明:?????? group_buy_packages-Analysis.md,示例值及对应分析:?? group_buy_packages-Analysis.md'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.area_tag_type IS '对应JSON字段:area_tag_type,说明:(推测):区域标记类型:,示例值及对应分析:1 很可能代表“按台区标签限制”,例如 A区、中八区、包厢、KTV 等。'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.creator_name IS '对应JSON字段:creator_name,说明::创建人信息,一般包含“角色:姓名”。,示例值及对应分析:示例:"管理员:郑丽珊"'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.create_time IS '对应JSON字段:create_time,说明::该套餐在系统中创建的时间。,示例值及对应分析:特点:每条记录各不相同,覆盖了 2025-07 至 2025-10 的创建时间。'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.group_buy_packages.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; +COMMENT ON TABLE billiards_ods.group_buy_packages IS 'ODS 原始明细表:团购套餐主数据。来源:C:/dev/LLTQ/export/test-json-doc/group_buy_packages.json;分析:group_buy_packages-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.id IS '【说明】门店侧套餐 ID,本文件内部的主键。 【示例】2939215004469573(用于门店侧套餐 ID,本文件内部的主键)。 【ODS来源】group_buy_packages - id。 【JSON字段】group_buy_packages.json - data.packageCouponList - id。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.package_id IS '【说明】“上层套餐 ID” 或“总部/系统级套餐 ID”。 【示例】1814707240811572(用于“上层套餐 ID” 或“总部/系统级套餐 ID”)。 【ODS来源】group_buy_packages - package_id。 【JSON字段】group_buy_packages.json - data.packageCouponList - package_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.package_name IS '【说明】团购套餐名称,用于前台展示和核销界面。 【示例】早场特惠一小时(团购套餐名称,用于前台展示和核销界面)。 【ODS来源】group_buy_packages - package_name。 【JSON字段】group_buy_packages.json - data.packageCouponList - package_name。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.selling_price IS '【说明】语义上应该是“团购售卖价”(顾客在平台购买券时的成交价格)。 【示例】0.0(用于语义上应该是“团购售卖价”(顾客在平台购买券时的成交价格))。 【ODS来源】group_buy_packages - selling_price。 【JSON字段】group_buy_packages.json - data.packageCouponList - selling_price。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.coupon_money IS '【说明】券面值或内部结算面值,表示该套餐在门店侧对应的金额额度。 【示例】0.0(用于券面值或内部结算面值,表示该套餐在门店侧对应的金额额度)。 【ODS来源】group_buy_packages - coupon_money。 【JSON字段】group_buy_packages.json - data.packageCouponList - coupon_money。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.date_type IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【ODS来源】group_buy_packages - date_type。 【JSON字段】group_buy_packages.json - data.packageCouponList - date_type。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.date_info IS '【说明】预留字段,通常用来存储更细粒度的日期信息,如具体日期列表、节假日特殊规则(可能是 JSON 字符串或编码)。 【示例】0(用于预留字段,通常用来存储更细粒度的日期信息,如具体日期列表、节假日特殊规则(可能是 JSON 字符串或编码))。 【ODS来源】group_buy_packages - date_info。 【JSON字段】group_buy_packages.json - data.packageCouponList - date_info。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.start_time IS '【说明】套餐开始生效的日期时间。 【示例】2025-10-27 00:00:00(用于套餐开始生效的日期时间)。 【ODS来源】group_buy_packages - start_time。 【JSON字段】group_buy_packages.json - data.packageCouponList - start_time。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.end_time IS '【说明】套餐失效的日期时间(到这个时间点后不可使用)。 【示例】2026-10-28 00:00:00(用于套餐失效的日期时间(到这个时间点后不可使用))。 【ODS来源】group_buy_packages - end_time。 【JSON字段】group_buy_packages.json - data.packageCouponList - end_time。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.start_clock IS '【说明】每日可用起始时间点(第一段)。 【示例】00:00:00(用于每日可用起始时间点(第一段))。 【ODS来源】group_buy_packages - start_clock。 【JSON字段】group_buy_packages.json - data.packageCouponList - start_clock。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.end_clock IS '【说明】每日可用的结束时间点(第一段)。 【示例】1.00:00:00(用于每日可用的结束时间点(第一段))。 【ODS来源】group_buy_packages - end_clock。 【JSON字段】group_buy_packages.json - data.packageCouponList - end_clock。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.add_start_clock IS '【说明】附加可用时间段的起始时间(第二段)。 【示例】00:00:00(用于附加可用时间段的起始时间(第二段))。 【ODS来源】group_buy_packages - add_start_clock。 【JSON字段】group_buy_packages.json - data.packageCouponList - add_start_clock。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.add_end_clock IS '【说明】附加时段结束时间,多数情况配合 "00:00:00" 或 "10:00:00" 使用。 【示例】1.00:00:00(用于附加时段结束时间,多数情况配合 "00:00:00" 或 "10:00:00" 使用)。 【ODS来源】group_buy_packages - add_end_clock。 【JSON字段】group_buy_packages.json - data.packageCouponList - add_end_clock。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.duration IS '【说明】套餐内包含的时长(秒)。 【示例】3600(用于套餐内包含的时长(秒))。 【ODS来源】group_buy_packages - duration。 【JSON字段】group_buy_packages.json - data.packageCouponList - duration。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.usable_count IS '【说明】可使用次数上限。 【示例】9999999(用于可使用次数上限)。 【ODS来源】group_buy_packages - usable_count。 【JSON字段】group_buy_packages.json - data.packageCouponList - usable_count。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.usable_range IS '【说明】一般用于文字描述可用日期范围(例如“周一至周五”)。 【示例】NULL(一般用于文字描述可用日期范围(例如“周一至周五”))。 【ODS来源】group_buy_packages - usable_range。 【JSON字段】group_buy_packages.json - data.packageCouponList - usable_range。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.table_area_id IS '【说明】原始设计应为“单一台区 ID”,当套餐只限一个区域可以用这个字段存储。 【示例】0(用于原始设计应为“单一台区 ID”,当套餐只限一个区域可以用这个字段存储)。 【ODS来源】group_buy_packages - table_area_id。 【JSON字段】group_buy_packages.json - data.packageCouponList - table_area_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.table_area_name IS '【说明】套餐适用的“门店台区名称”,用于显示和筛选。 【示例】A区(套餐适用的“门店台区名称”,用于显示和筛选)。 【ODS来源】group_buy_packages - table_area_name。 【JSON字段】group_buy_packages.json - data.packageCouponList - table_area_name。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.table_area_id_list IS '【说明】用来存放具体台区 ID 列表(例如 "1,2,3"),实现更细粒度的台桌限制。 【示例】NULL(用于用来存放具体台区 ID 列表(例如 "1,2,3"),实现更细粒度的台桌限制)。 【ODS来源】group_buy_packages - table_area_id_list。 【JSON字段】group_buy_packages.json - data.packageCouponList - table_area_id_list。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.tenant_table_area_id IS '【说明】与 table_area_id 类似,是租户层级的台区 ID,原本用于单区选择。 【示例】0(与 table_area_id 类似,是租户层级的台区 ID,原本用于单区选择)。 【ODS来源】group_buy_packages - tenant_table_area_id。 【JSON字段】group_buy_packages.json - data.packageCouponList - tenant_table_area_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.tenant_table_area_id_list IS '【说明】实际代表“台区集合 ID”或“租户台区配置 ID”,用来限制套餐可用的台区范围。 【示例】2791960001957765(用于实际代表“台区集合 ID”或“租户台区配置 ID”,用来限制套餐可用的台区范围)。 【ODS来源】group_buy_packages - tenant_table_area_id_list。 【JSON字段】group_buy_packages.json - data.packageCouponList - tenant_table_area_id_list。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.site_id IS '【说明】门店 ID。 【示例】2790685415443269(用于门店 ID)。 【ODS来源】group_buy_packages - site_id。 【JSON字段】group_buy_packages.json - data.packageCouponList - site_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.site_name IS '【说明】门店名称。 【示例】朗朗桌球(用于门店名称)。 【ODS来源】group_buy_packages - site_name。 【JSON字段】group_buy_packages.json - data.packageCouponList - site_name。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.tenant_id IS '【说明】租户 ID(品牌/商户 ID)。 【示例】2790683160709957(用于租户 ID(品牌/商户 ID))。 【ODS来源】group_buy_packages - tenant_id。 【JSON字段】group_buy_packages.json - data.packageCouponList - tenant_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.card_type_ids IS '【说明】原意是“适用会员卡类型 ID 列表”,例如某套餐只允许某几种会员卡使用,可以在此配置。 【示例】0(用于原意是“适用会员卡类型 ID 列表”,例如某套餐只允许某几种会员卡使用,可以在此配置)。 【ODS来源】group_buy_packages - card_type_ids。 【JSON字段】group_buy_packages.json - data.packageCouponList - card_type_ids。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.group_type IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【ODS来源】group_buy_packages - group_type。 【JSON字段】group_buy_packages.json - data.packageCouponList - group_type。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.system_group_type IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【ODS来源】group_buy_packages - system_group_type。 【JSON字段】group_buy_packages.json - data.packageCouponList - system_group_type。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.type IS '【说明】内部业务子类型,具体含义需要结合系统文档。 【示例】2(用于内部业务子类型,具体含义需要结合系统文档)。 【ODS来源】group_buy_packages - type。 【JSON字段】group_buy_packages.json - data.packageCouponList - type。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.effective_status IS '【说明】1:13 条。 【示例】1(用于1:13 条)。 【ODS来源】group_buy_packages - effective_status。 【JSON字段】group_buy_packages.json - data.packageCouponList - effective_status。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.is_enabled IS '【说明】启用状态。 【示例】1(用于启用状态)。 【ODS来源】group_buy_packages - is_enabled。 【JSON字段】group_buy_packages.json - data.packageCouponList - is_enabled。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.is_delete IS '【说明】逻辑删除标志。 【示例】0(用于逻辑删除标志)。 【ODS来源】group_buy_packages - is_delete。 【JSON字段】group_buy_packages.json - data.packageCouponList - is_delete。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.max_selectable_categories IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】0(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】group_buy_packages - max_selectable_categories。 【JSON字段】group_buy_packages.json - data.packageCouponList - max_selectable_categories。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.area_tag_type IS '【说明】1 很可能代表“按台区标签限制”,例如 A区、中八区、包厢、KTV 等。 【示例】1(用于1 很可能代表“按台区标签限制”,例如 A区、中八区、包厢、KTV 等)。 【ODS来源】group_buy_packages - area_tag_type。 【JSON字段】group_buy_packages.json - data.packageCouponList - area_tag_type。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.creator_name IS '【说明】创建人信息,一般包含“角色:姓名”。 【示例】店长:郑丽珊(用于创建人信息,一般包含“角色:姓名”)。 【ODS来源】group_buy_packages - creator_name。 【JSON字段】group_buy_packages.json - data.packageCouponList - creator_name。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.create_time IS '【说明】该套餐在系统中创建的时间。 【示例】2025-10-27 18:24:09(用于该套餐在系统中创建的时间)。 【ODS来源】group_buy_packages - create_time。 【JSON字段】group_buy_packages.json - data.packageCouponList - create_time。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】group_buy_packages.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【ODS来源】group_buy_packages - source_file(ETL补充)。 【JSON字段】group_buy_packages.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/group_buy_packages.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【ODS来源】group_buy_packages - source_endpoint(ETL补充)。 【JSON字段】group_buy_packages.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【ODS来源】group_buy_packages - fetched_at(ETL补充)。 【JSON字段】group_buy_packages.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【ODS来源】group_buy_packages - payload。 【JSON字段】group_buy_packages.json - data.packageCouponList - $。'; + CREATE TABLE IF NOT EXISTS billiards_ods.group_buy_redemption_records ( id BIGINT PRIMARY KEY, @@ -1558,54 +1584,55 @@ CREATE TABLE IF NOT EXISTS billiards_ods.group_buy_redemption_records ( fetched_at TIMESTAMPTZ DEFAULT now() ); -COMMENT ON TABLE billiards_ods.group_buy_redemption_records IS '对应JSON字段:group_buy_redemption_records.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 group_buy_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.id IS '对应JSON字段:id,说明::本条“团购套餐流水”记录的 主键 ID。,示例值及对应分析:作用:唯一标识一条券使用到台费上的记录。'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.tenant_id IS '对应JSON字段:tenant_id,说明::租户/品牌 ID。,示例值及对应分析:特点:全表值相同,说明所有记录属于同一租户。'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.site_id IS '对应JSON字段:site_id,说明::门店 ID,与其它 JSON 中一致。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.siteName IS '对应JSON字段:siteName,说明::门店名称,冗余展示用。,示例值及对应分析:?? group_buy_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.table_id IS '对应JSON字段:table_id,说明::球台 ID。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.tableName IS '对应JSON字段:tableName,说明::本次使用券所关联的 球台名称/台号。,示例值及对应分析:关联:对应台桌列表中的 table_name / table_no,通过 table_id 进一步关联。'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.tableAreaName IS '对应JSON字段:tableAreaName,说明::该球台所属的 台区名称。,示例值及对应分析:关联:与台区配置中的 area_name 含义一致,与团购套餐定义中的 table_area_name 一致。'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.tenant_table_area_id IS '对应JSON字段:tenant_table_area_id,说明::租户级台区分组 ID,表示当前使用券的台桌所属的区域组合。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_trade_no IS '对应JSON字段:order_trade_no,说明::订单交易号,和其它消费明细(台费、商品、助教、团购)共用的订单主键。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_settle_id IS '对应JSON字段:order_settle_id,说明::结算单 ID(小票结账主键)。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_pay_id IS '对应JSON字段:order_pay_id,说明:(推测):,示例值及对应分析:指向支付记录表中的支付流水 ID。'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_coupon_id IS '对应JSON字段:order_coupon_id,说明::订单中“券使用记录”的 ID。,示例值及对应分析:结构特点:'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_coupon_channel IS '对应JSON字段:order_coupon_channel,说明:(推测):,示例值及对应分析:券渠道类型,例如:'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.coupon_code IS '对应JSON字段:coupon_code,说明::团购券券码,核销时扫描/录入的字符串。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.coupon_money IS '对应JSON字段:coupon_money,说明::本次核销时,这张券在门店侧对应的金额额度(“可抵扣金额”)。,示例值及对应分析:结构关系:'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.coupon_origin_id IS '对应JSON字段:coupon_origin_id,说明:(推测):,示例值及对应分析:平台/上游系统中的券记录主键 ID,“券来源 ID”。'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_name IS '对应JSON字段:ledger_name,说明::台费侧关联的“团购项目名称”(记账名)。,示例值及对应分析:结构上通常来源于团购套餐定义的 package_name,或由系统在创建活动时生成。'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_group_name IS '对应JSON字段:ledger_group_name,说明:(推测):团购项目所属的“记账分组名称”(例如“团购台费”“团购包厢”等)。,示例值及对应分析:当前门店未对团购项目做进一步分组。'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_amount IS '对应JSON字段:ledger_amount,说明::本次券实际冲抵台费的金额。,示例值及对应分析:结构关系:'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_count IS '对应JSON字段:ledger_count,说明::按此次优惠实际计算的“核销秒数”。,示例值及对应分析:结构观察:'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_unit_price IS '对应JSON字段:ledger_unit_price,说明::对应台费的标准单价,单位元/小时(从数值来看是类似29.9/小时这种定价)。,示例值及对应分析:作用:配合 ledger_count 用于计算这一条券在台费层面对应的金额(理论上应接近 = 单价 × 秒数/3600)。'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_status IS '对应JSON字段:ledger_status,说明:(推测):流水状态。,示例值及对应分析:1:正常有效;'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.table_charge_seconds IS '对应JSON字段:table_charge_seconds,说明::本次结算中该球台总计计费的秒数(整台的台费计费时间)。,示例值及对应分析:结构特点:'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.promotion_activity_id IS '对应JSON字段:promotion_activity_id,说明:(推测):团购/促销活动 ID。,示例值及对应分析:对应平台或内部促销活动的主键,每个活动通常绑定一个或多个具体套餐(promotion_coupon_id)。'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.promotion_coupon_id IS '对应JSON字段:promotion_coupon_id,说明::团购套餐定义 ID。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.promotion_seconds IS '对应JSON字段:promotion_seconds,说明::团购套餐定义的“标准时长”(券本身标称的可用时长)。,示例值及对应分析:结构关系:'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.offer_type IS '对应JSON字段:offer_type,说明:(推测):优惠类型。,示例值及对应分析:在券适用多个优惠方式的系统中,一般用来区分“满减/折扣/代金券/套餐券”等。'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.assistant_promotion_money IS '对应JSON字段:assistant_promotion_money,说明::分摊到“助教服务”的促销金额。,示例值及对应分析:当前场景下,团购券只与台费相关,未涉及助教的金额抵扣。'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.assistant_service_promotion_money IS '对应JSON字段:assistant_service_promotion_money,说明::进一步细分助教服务的促销金额。,示例值及对应分析:当前未使用。'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.table_service_promotion_money IS '对应JSON字段:table_service_promotion_money,说明::本次券使用中,分摊到“台费服务费”部分的促销金额。,示例值及对应分析:当前样本中,促销金额都在 ledger_amount 中体现,该字段未单独拆出。'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.goods_promotion_money IS '对应JSON字段:goods_promotion_money,说明::本次券使用中,分摊到“商品”部分的促销金额。,示例值及对应分析:当前数据中,所有团购券都只用于抵扣台费,没有用来抵扣商品,因此该字段为 0。'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.recharge_promotion_money IS '对应JSON字段:recharge_promotion_money,说明::来自“充值类优惠”的分摊金额(例如储值赠送部分)。,示例值及对应分析:当前所有数据为 0,但结构上已经预留了“多来源促销金额分摊”的能力。'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.reward_promotion_money IS '对应JSON字段:reward_promotion_money,说明::本次促销中,属于“奖励金/积分抵扣”的金额。,示例值及对应分析:当前没有使用此维度的促销。'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.goodsOptionPrice IS '对应JSON字段:goodsOptionPrice,说明:(按命名推测):商品规格价格,用于商品类促销分摊时使用。,示例值及对应分析:当前在“团购套餐流水”中未被实际使用。'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.salesman_name IS '对应JSON字段:salesman_name,说明::营业员姓名。,示例值及对应分析:?? group_buy_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.sales_man_org_id IS '对应JSON字段:sales_man_org_id,说明::营业员所属组织 ID。,示例值及对应分析:以上 4 个销售相关字段在当前门店的团购套餐使用中都未启用,仅作为结构预留。'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.salesman_role_id IS '对应JSON字段:salesman_role_id,说明::营业员角色 ID。,示例值及对应分析:?? group_buy_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.salesman_user_id IS '对应JSON字段:salesman_user_id,说明::营业员/业务员用户 ID。,示例值及对应分析:当前所有团购套餐流水都未指定独立的营业员。'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.operator_id IS '对应JSON字段:operator_id,说明::执行本次核销/结算操作的 操作员 ID。,示例值及对应分析:关联:可以与员工档案表中的 id 对应(当前导出中员工表未单独给出,但风格和其它表一致)。'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.operator_name IS '对应JSON字段:operator_name,说明::操作员名称(包含角色说明),与 operator_id 对应的冗余展示字段。,示例值及对应分析:?? group_buy_redemption_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.is_single_order IS '对应JSON字段:is_single_order,说明:(推测):是否单独作为一条订单行。,示例值及对应分析:1:以独立条目方式进行结算(绝大部分记录如此)。'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.is_delete IS '对应JSON字段:is_delete,说明::逻辑删除标志:,示例值及对应分析:0:正常;'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.create_time IS '对应JSON字段:create_time,说明::本条团购套餐使用流水创建时间(即券核销时间,或与结账时间接近)。,示例值及对应分析:用法:可用于按时间范围过滤团购使用记录。'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; +COMMENT ON TABLE billiards_ods.group_buy_redemption_records IS 'ODS 原始明细表:团购核销记录。来源:C:/dev/LLTQ/export/test-json-doc/group_buy_redemption_records.json;分析:group_buy_redemption_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.id IS '【说明】本条“团购套餐流水”记录的 主键 ID。 【示例】2957924029615941(用于本条“团购套餐流水”记录的 主键 ID)。 【ODS来源】group_buy_redemption_records - id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【ODS来源】group_buy_redemption_records - tenant_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - tenant_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.site_id IS '【说明】门店 ID,与其它 JSON 中一致。 【示例】2790685415443269(用于门店 ID,与其它 JSON 中一致)。 【ODS来源】group_buy_redemption_records - site_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - site_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.siteName IS '【说明】门店名称,冗余展示用。 【示例】朗朗桌球(用于门店名称,冗余展示用)。 【ODS来源】group_buy_redemption_records - siteName。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - siteName。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.table_id IS '【说明】球台 ID。 【示例】2793003705192517(用于球台 ID)。 【ODS来源】group_buy_redemption_records - table_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - table_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.tableName IS '【说明】本次使用券所关联的 球台名称/台号。 【示例】A17(用于本次使用券所关联的 球台名称/台号)。 【ODS来源】group_buy_redemption_records - tableName。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - tableName。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.tableAreaName IS '【说明】该球台所属的 台区名称。 【示例】A区(用于该球台所属的 台区名称)。 【ODS来源】group_buy_redemption_records - tableAreaName。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - tableAreaName。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.tenant_table_area_id IS '【说明】租户级台区分组 ID,表示当前使用券的台桌所属的区域组合。 【示例】2791960001957765(用于租户级台区分组 ID,表示当前使用券的台桌所属的区域组合)。 【ODS来源】group_buy_redemption_records - tenant_table_area_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - tenant_table_area_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_trade_no IS '【说明】订单交易号,和其它消费明细(台费、商品、助教、团购)共用的订单主键。 【示例】2957858167230149(用于订单交易号,和其它消费明细(台费、商品、助教、团购)共用的订单主键)。 【ODS来源】group_buy_redemption_records - order_trade_no。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - order_trade_no。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_settle_id IS '【说明】结算单 ID(小票结账主键)。 【示例】2957922914357125(用于结算单 ID(小票结账主键))。 【ODS来源】group_buy_redemption_records - order_settle_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - order_settle_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_pay_id IS '【说明】指向支付记录表中的支付流水 ID。 【示例】0(用于指向支付记录表中的支付流水 ID)。 【ODS来源】group_buy_redemption_records - order_pay_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - order_pay_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_coupon_id IS '【说明】订单中“券使用记录”的 ID。 【示例】2957858168229573(用于订单中“券使用记录”的 ID)。 【ODS来源】group_buy_redemption_records - order_coupon_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - order_coupon_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_coupon_channel IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【ODS来源】group_buy_redemption_records - order_coupon_channel。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - order_coupon_channel。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.coupon_code IS '【说明】团购券券码,核销时扫描/录入的字符串。 【示例】0107892475999(用于团购券券码,核销时扫描/录入的字符串)。 【ODS来源】group_buy_redemption_records - coupon_code。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - coupon_code。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.coupon_money IS '【说明】本次核销时,这张券在门店侧对应的金额额度(“可抵扣金额”)。 【示例】48.0(用于本次核销时,这张券在门店侧对应的金额额度(“可抵扣金额”))。 【ODS来源】group_buy_redemption_records - coupon_money。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - coupon_money。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.coupon_origin_id IS '【说明】平台/上游系统中的券记录主键 ID,“券来源 ID”。 【示例】2957858168229573(用于平台/上游系统中的券记录主键 ID,“券来源 ID”)。 【ODS来源】group_buy_redemption_records - coupon_origin_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - coupon_origin_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_name IS '【说明】台费侧关联的“团购项目名称”(记账名)。 【示例】全天A区中八一小时(用于台费侧关联的“团购项目名称”(记账名))。 【ODS来源】group_buy_redemption_records - ledger_name。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_name。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_group_name IS '【说明】团购项目所属的“记账分组名称”(例如“团购台费”“团购包厢”等)。 【示例】NULL(用于团购项目所属的“记账分组名称”(例如“团购台费”“团购包厢”等))。 【ODS来源】group_buy_redemption_records - ledger_group_name。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_group_name。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_amount IS '【说明】本次券实际冲抵台费的金额。 【示例】48.0(用于本次券实际冲抵台费的金额)。 【ODS来源】group_buy_redemption_records - ledger_amount。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_amount。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_count IS '【说明】按此次优惠实际计算的“核销秒数”。 【示例】3600(用于按此次优惠实际计算的“核销秒数”)。 【ODS来源】group_buy_redemption_records - ledger_count。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_count。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_unit_price IS '【说明】对应台费的标准单价,单位元/小时(从数值来看是类似29.9/小时这种定价)。 【示例】29.9(用于对应台费的标准单价,单位元/小时(从数值来看是类似29.9/小时这种定价))。 【ODS来源】group_buy_redemption_records - ledger_unit_price。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_unit_price。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_status IS '【说明】流水状态。 【示例】1(用于流水状态)。 【ODS来源】group_buy_redemption_records - ledger_status。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_status。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.table_charge_seconds IS '【说明】本次结算中该球台总计计费的秒数(整台的台费计费时间)。 【示例】3600(用于本次结算中该球台总计计费的秒数(整台的台费计费时间))。 【ODS来源】group_buy_redemption_records - table_charge_seconds。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - table_charge_seconds。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.promotion_activity_id IS '【说明】团购/促销活动 ID。 【示例】2957858166460101(用于团购/促销活动 ID)。 【ODS来源】group_buy_redemption_records - promotion_activity_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - promotion_activity_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.promotion_coupon_id IS '【说明】团购套餐定义 ID。 【示例】2798727423528005(用于团购套餐定义 ID)。 【ODS来源】group_buy_redemption_records - promotion_coupon_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - promotion_coupon_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.promotion_seconds IS '【说明】团购套餐定义的“标准时长”(券本身标称的可用时长)。 【示例】3600(用于团购套餐定义的“标准时长”(券本身标称的可用时长))。 【ODS来源】group_buy_redemption_records - promotion_seconds。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - promotion_seconds。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.offer_type IS '【说明】优惠类型。 【示例】1(用于优惠类型)。 【ODS来源】group_buy_redemption_records - offer_type。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - offer_type。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.assistant_promotion_money IS '【说明】分摊到“助教服务”的促销金额。 【示例】0.0(用于分摊到“助教服务”的促销金额)。 【ODS来源】group_buy_redemption_records - assistant_promotion_money。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - assistant_promotion_money。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.assistant_service_promotion_money IS '【说明】进一步细分助教服务的促销金额。 【示例】0.0(用于进一步细分助教服务的促销金额)。 【ODS来源】group_buy_redemption_records - assistant_service_promotion_money。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - assistant_service_promotion_money。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.table_service_promotion_money IS '【说明】本次券使用中,分摊到“台费服务费”部分的促销金额。 【示例】0.0(用于本次券使用中,分摊到“台费服务费”部分的促销金额)。 【ODS来源】group_buy_redemption_records - table_service_promotion_money。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - table_service_promotion_money。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.goods_promotion_money IS '【说明】本次券使用中,分摊到“商品”部分的促销金额。 【示例】0.0(用于本次券使用中,分摊到“商品”部分的促销金额)。 【ODS来源】group_buy_redemption_records - goods_promotion_money。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - goods_promotion_money。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.recharge_promotion_money IS '【说明】来自“充值类优惠”的分摊金额(例如储值赠送部分)。 【示例】0.0(用于来自“充值类优惠”的分摊金额(例如储值赠送部分))。 【ODS来源】group_buy_redemption_records - recharge_promotion_money。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - recharge_promotion_money。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.reward_promotion_money IS '【说明】本次促销中,属于“奖励金/积分抵扣”的金额。 【示例】0.0(用于本次促销中,属于“奖励金/积分抵扣”的金额)。 【ODS来源】group_buy_redemption_records - reward_promotion_money。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - reward_promotion_money。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.goodsOptionPrice IS '【说明】商品规格价格,用于商品类促销分摊时使用。 【示例】0.0(商品规格价格,用于商品类促销分摊时使用)。 【ODS来源】group_buy_redemption_records - goodsOptionPrice。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - goodsOptionPrice。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.salesman_name IS '【说明】营业员姓名。 【示例】NULL(用于营业员姓名)。 【ODS来源】group_buy_redemption_records - salesman_name。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - salesman_name。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.sales_man_org_id IS '【说明】营业员所属组织 ID。 【示例】0(用于营业员所属组织 ID)。 【ODS来源】group_buy_redemption_records - sales_man_org_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - sales_man_org_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.salesman_role_id IS '【说明】营业员角色 ID。 【示例】0(用于营业员角色 ID)。 【ODS来源】group_buy_redemption_records - salesman_role_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - salesman_role_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.salesman_user_id IS '【说明】营业员/业务员用户 ID。 【示例】0(用于营业员/业务员用户 ID)。 【ODS来源】group_buy_redemption_records - salesman_user_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - salesman_user_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.operator_id IS '【说明】执行本次核销/结算操作的 操作员 ID。 【示例】2790687322443013(用于执行本次核销/结算操作的 操作员 ID)。 【ODS来源】group_buy_redemption_records - operator_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - operator_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.operator_name IS '【说明】操作员名称(包含角色说明),与 operator_id 对应的冗余展示字段。 【示例】收银员:郑丽珊(用于操作员名称(包含角色说明),与 operator_id 对应的冗余展示字段)。 【ODS来源】group_buy_redemption_records - operator_name。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - operator_name。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.is_single_order IS '【说明】是否单独作为一条订单行。 【示例】1(用于是否单独作为一条订单行)。 【ODS来源】group_buy_redemption_records - is_single_order。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - is_single_order。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.is_delete IS '【说明】逻辑删除标记(0=否,1=是)。。 【示例】0(用于逻辑删除标记(0=否,1=是))。 【ODS来源】group_buy_redemption_records - is_delete。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - is_delete。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.create_time IS '【说明】本条团购套餐使用流水创建时间(即券核销时间,或与结账时间接近)。 【示例】2025-11-09 23:35:57(用于本条团购套餐使用流水创建时间(即券核销时间,或与结账时间接近))。 【ODS来源】group_buy_redemption_records - create_time。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - create_time。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【ODS来源】group_buy_redemption_records - payload。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - $。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】group_buy_redemption_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【ODS来源】group_buy_redemption_records - source_file(ETL补充)。 【JSON字段】group_buy_redemption_records.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/group_buy_redemption_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【ODS来源】group_buy_redemption_records - source_endpoint(ETL补充)。 【JSON字段】group_buy_redemption_records.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【ODS来源】group_buy_redemption_records - fetched_at(ETL补充)。 【JSON字段】group_buy_redemption_records.json - ETL元数据 - 无。'; + CREATE TABLE IF NOT EXISTS billiards_ods.settlement_ticket_details ( orderSettleId BIGINT PRIMARY KEY, @@ -1652,49 +1679,50 @@ CREATE TABLE IF NOT EXISTS billiards_ods.settlement_ticket_details ( fetched_at TIMESTAMPTZ DEFAULT now() ); -COMMENT ON TABLE billiards_ods.settlement_ticket_details IS '对应JSON字段:settlement_ticket_details.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 settlement_ticket_details-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderSettleId IS '对应JSON字段:orderSettleId,说明::同 data.data.orderSettleId,为结算单 ID 的冗余。,示例值及对应分析:orderType'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.actualPayment IS '对应JSON字段:actualPayment,说明::本单实际支付金额总和(顾客本次实际付出:现金 + 线上 + 会员余额等)。,示例值及对应分析:一般应与支付记录中各支付流水金额汇总相匹配。'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.adjustAmount IS '对应JSON字段:adjustAmount,说明::台费层面的人工调价金额(仅台费部分)。,示例值及对应分析:memberDiscountAmount'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.assistantManualDiscount IS '对应JSON字段:assistantManualDiscount,说明::针对“助教项目”的人工减免金额汇总(整单维度)。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.balanceAmount IS '对应JSON字段:balanceAmount,说明::本单通过“会员余额/储值卡”支付的金额(从余额中扣除的总额)。,示例值及对应分析:对应 结账记录.json 的同名字段。'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.cashierName IS '对应JSON字段:cashierName,说明::本单结算操作员名称(带角色前缀文字)。,示例值及对应分析:对应员工维表中的某个账号,便于小票上展示“收银员:XXX”。'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.consumeMoney IS '对应JSON字段:consumeMoney,说明::本单“消费金额总计”(原价层面),即台费 + 商品 + 助教 + 服务等消费项目的金额总和(未扣除各类优惠)。,示例值及对应分析:对应 结账记录.json 的 consumeMoney 字段。'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.couponAmount IS '对应JSON字段:couponAmount,说明::本单由优惠券抵扣的金额汇总。,示例值及对应分析:结构上:应与 orderCouponLedgers.discountAmount 的合计存在关系,但当前导出未填充。'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.deliveryAddress IS '对应JSON字段:deliveryAddress,说明::配送地址(若存在外送业务时使用)。,示例值及对应分析:对于球房场景,当前时间范围内未使用。'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.deliveryFee IS '对应JSON字段:deliveryFee,说明::配送费金额(如果支持外送业务)。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.ledgerAmount IS '对应JSON字段:ledgerAmount,说明::按台账口径对应的金额,一般与 discountAmount 一致或有固定关系。,示例值及对应分析:rewardPromotionMoney'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.memberDeductAmount IS '对应JSON字段:memberDeductAmount,说明:(结构上):会员抵扣的某种数量或金额(例如积分抵现金额、次卡次数抵扣等),当前数据未启用。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.memberOfferAmount IS '对应JSON字段:memberOfferAmount,说明::由“会员权益/折扣”产生的优惠金额总计(整单维度)。,示例值及对应分析:与 memberProfile 以及台费/商品明细中的 memberDiscountAmount 有对应关系。'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.onlineReturnAmount IS '对应JSON字段:onlineReturnAmount,说明::本单通过线上支付渠道退回的金额(如微信/支付宝退款)。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderRemark IS '对应JSON字段:orderRemark,说明::订单备注,由收银员录入,用于记录与本单相关的特殊说明。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderSettleNumber IS '对应JSON字段:orderSettleNumber,说明:(推测):结算单编号(与 ID 独立的一套编号体系,如流水号)。当前导出时间段内未启用。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.payMemberBalance IS '对应JSON字段:payMemberBalance,说明:(结构上):使用会员余额支付的金额,用于区分与 balanceAmount 的不同维度(如“本次支付使用余额部分”与“余额本身变化”等),当前未实际使用。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.payTime IS '对应JSON字段:payTime,说明::本单最终支付成功时间。,示例值及对应分析:和 结账记录.json 中的 payTime 对应,一般与 支付记录.create_time/pay_time 在同一时间段。'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.paymentMethod IS '对应JSON字段:paymentMethod,说明::结算主支付方式编码(汇总视角)。,示例值及对应分析:对应 结账记录.json 中的 paymentMethod 字段;'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.pointDiscountCost IS '对应JSON字段:pointDiscountCost,说明::积分抵扣对应的成本金额(成本侧)。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.pointDiscountPrice IS '对应JSON字段:pointDiscountPrice,说明::积分抵扣对应的金额(售价侧)。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.prepayMoney IS '对应JSON字段:prepayMoney,说明::预付金/定金在本单中使用的金额。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.refundAmount IS '对应JSON字段:refundAmount,说明::本单涉及的退款金额(汇总)。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.returnGoodsAmount IS '对应JSON字段:returnGoodsAmount,说明::本单涉及的退货金额汇总。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.rewardName IS '对应JSON字段:rewardName,说明:(结构上):用于标识本单适用的激励方案名称,可能用于内部绩效或活动名称展示。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.settleType IS '对应JSON字段:settleType,说明::结算类型字符串标识。,示例值及对应分析:"SiteOrder":店内消费订单结算。'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.siteAddress IS '对应JSON字段:siteAddress,说明::门店地址(详细地址)。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.siteBusinessTel IS '对应JSON字段:siteBusinessTel,说明::门店电话。,示例值及对应分析:用途:用于小票打印上的客服电话。'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.siteId IS '对应JSON字段:siteId,说明::门店 ID。,示例值及对应分析:关联:'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.siteName IS '对应JSON字段:siteName,说明::门店名称,如“朗朗桌球”。,示例值及对应分析:用途:小票上展示门店名。'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.tenantId IS '对应JSON字段:tenantId,说明::租户 / 商户 ID(品牌维度)。,示例值及对应分析:当前数据:恒定为同一值,表示所有记录都来自同一商户。'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.tenantName IS '对应JSON字段:tenantName,说明::租户名称,如“朗朗桌球”。,示例值及对应分析:当前数据:全表统一一个值。'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.ticketCustomContent IS '对应JSON字段:ticketCustomContent,说明::自定义小票内容,如商家自定义宣传语、条款等。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.ticketRemark IS '对应JSON字段:ticketRemark,说明::小票备注内容,可用于打印在小票底部或顶部(例如活动说明、特别提示)。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.voucherMoney IS '对应JSON字段:voucherMoney,说明::代金券类金额字段(可能用于某类“代金券余额”或“券面值”记录)。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.memberProfile IS '对应JSON字段:memberProfile,说明::,示例值及对应分析:不是会员卡主键,而是本次结账时的会员信息快照;'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderItem IS '对应JSON字段:orderItem,说明::本次结算对应的“订单明细列表”,这部分是连接“台费流水 / 商品出库 / 券使用”等多个子领域的关键结构。,示例值及对应分析:下面专门展开 orderItem 及其子结构。'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.tenantMemberCardLogs IS '对应JSON字段:tenantMemberCardLogs,说明:?????? settlement_ticket_details-Analysis.md,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.settlement_ticket_details.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; +COMMENT ON TABLE billiards_ods.settlement_ticket_details IS 'ODS 原始明细表:结算小票明细。来源:C:/dev/LLTQ/export/test-json-doc/settlement_ticket_details.json;分析:settlement_ticket_details-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderSettleId IS '【说明】结算单 ID(和顶层字段相同,再次冗余)。 【示例】2957922914357125(用于结算单 ID(和顶层字段相同,再次冗余))。 【ODS来源】settlement_ticket_details - orderSettleId。 【JSON字段】settlement_ticket_details.json - $ - orderSettleId。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.actualPayment IS '【说明】本单实际支付金额总和(顾客本次实际付出:现金 + 线上 + 会员余额等)。 【示例】NULL(用于本单实际支付金额总和(顾客本次实际付出:现金 + 线上 + 会员余额等))。 【ODS来源】settlement_ticket_details - actualPayment。 【JSON字段】settlement_ticket_details.json - $ - actualPayment。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.adjustAmount IS '【说明】人工调价/整单调整金额(例如手工改价、折扣调整),是所有类型的手工调整合计。 【示例】NULL(用于人工调价/整单调整金额(例如手工改价、折扣调整),是所有类型的手工调整合计)。 【ODS来源】settlement_ticket_details - adjustAmount。 【JSON字段】settlement_ticket_details.json - $ - adjustAmount。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.assistantManualDiscount IS '【说明】针对“助教项目”的人工减免金额汇总(整单维度)。 【示例】NULL(用于针对“助教项目”的人工减免金额汇总(整单维度))。 【ODS来源】settlement_ticket_details - assistantManualDiscount。 【JSON字段】settlement_ticket_details.json - $ - assistantManualDiscount。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.balanceAmount IS '【说明】本单通过“会员余额/储值卡”支付的金额(从余额中扣除的总额)。 【示例】NULL(用于本单通过“会员余额/储值卡”支付的金额(从余额中扣除的总额))。 【ODS来源】settlement_ticket_details - balanceAmount。 【JSON字段】settlement_ticket_details.json - $ - balanceAmount。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.cashierName IS '【说明】本单结算操作员名称(带角色前缀文字)。 【示例】NULL(用于本单结算操作员名称(带角色前缀文字))。 【ODS来源】settlement_ticket_details - cashierName。 【JSON字段】settlement_ticket_details.json - $ - cashierName。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.consumeMoney IS '【说明】本单“消费金额总计”(原价层面),即台费 + 商品 + 助教 + 服务等消费项目的金额总和(未扣除各类优惠)。 【示例】NULL(用于本单“消费金额总计”(原价层面),即台费 + 商品 + 助教 + 服务等消费项目的金额总和(未扣除各类优惠))。 【ODS来源】settlement_ticket_details - consumeMoney。 【JSON字段】settlement_ticket_details.json - $ - consumeMoney。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.couponAmount IS '【说明】本单由优惠券抵扣的金额汇总。 【示例】NULL(用于本单由优惠券抵扣的金额汇总)。 【ODS来源】settlement_ticket_details - couponAmount。 【JSON字段】settlement_ticket_details.json - $ - couponAmount。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.deliveryAddress IS '【说明】配送地址(若存在外送业务时使用)。 【示例】NULL(用于配送地址(若存在外送业务时使用))。 【ODS来源】settlement_ticket_details - deliveryAddress。 【JSON字段】settlement_ticket_details.json - $ - deliveryAddress。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.deliveryFee IS '【说明】配送费金额(如果支持外送业务)。 【示例】NULL(用于配送费金额(如果支持外送业务))。 【ODS来源】settlement_ticket_details - deliveryFee。 【JSON字段】settlement_ticket_details.json - $ - deliveryFee。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.ledgerAmount IS '【说明】商品小计金额(通常 = 单价 × 数量,未考虑其他折扣)。 【示例】NULL(用于商品小计金额(通常 = 单价 × 数量,未考虑其他折扣))。 【ODS来源】settlement_ticket_details - ledgerAmount。 【JSON字段】settlement_ticket_details.json - $ - ledgerAmount。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.memberDeductAmount IS '【说明】会员抵扣的某种数量或金额(例如积分抵现金额、次卡次数抵扣等),当前数据未启用。 【示例】NULL(用于会员抵扣的某种数量或金额(例如积分抵现金额、次卡次数抵扣等),当前数据未启用)。 【ODS来源】settlement_ticket_details - memberDeductAmount。 【JSON字段】settlement_ticket_details.json - $ - memberDeductAmount。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.memberOfferAmount IS '【说明】由“会员权益/折扣”产生的优惠金额总计(整单维度)。 【示例】NULL(用于由“会员权益/折扣”产生的优惠金额总计(整单维度))。 【ODS来源】settlement_ticket_details - memberOfferAmount。 【JSON字段】settlement_ticket_details.json - $ - memberOfferAmount。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.onlineReturnAmount IS '【说明】本单通过线上支付渠道退回的金额(如微信/支付宝退款)。 【示例】NULL(用于本单通过线上支付渠道退回的金额(如微信/支付宝退款))。 【ODS来源】settlement_ticket_details - onlineReturnAmount。 【JSON字段】settlement_ticket_details.json - $ - onlineReturnAmount。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderRemark IS '【说明】订单备注,由收银员录入,用于记录与本单相关的特殊说明。 【示例】NULL(订单备注,由收银员录入,用于记录与本单相关的特殊说明)。 【ODS来源】settlement_ticket_details - orderRemark。 【JSON字段】settlement_ticket_details.json - $ - orderRemark。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderSettleNumber IS '【说明】结算单编号(与 ID 独立的一套编号体系,如流水号)。 【示例】NULL(用于结算单编号(与 ID 独立的一套编号体系,如流水号))。 【ODS来源】settlement_ticket_details - orderSettleNumber。 【JSON字段】settlement_ticket_details.json - $ - orderSettleNumber。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.payMemberBalance IS '【说明】使用会员余额支付的金额,用于区分与 balanceAmount 的不同维度(如“本次支付使用余额部分”与“余额本身变化”等),当前未实际使用。 【示例】NULL(使用会员余额支付的金额,用于区分与 balanceAmount 的不同维度(如“本次支付使用余额部分”与“余额本身变化”等),当前未实际使用)。 【ODS来源】settlement_ticket_details - payMemberBalance。 【JSON字段】settlement_ticket_details.json - $ - payMemberBalance。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.payTime IS '【说明】本单最终支付成功时间。 【示例】NULL(用于本单最终支付成功时间)。 【ODS来源】settlement_ticket_details - payTime。 【JSON字段】settlement_ticket_details.json - $ - payTime。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.paymentMethod IS '【说明】结算主支付方式编码(汇总视角)。 【示例】NULL(用于结算主支付方式编码(汇总视角))。 【ODS来源】settlement_ticket_details - paymentMethod。 【JSON字段】settlement_ticket_details.json - $ - paymentMethod。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.pointDiscountCost IS '【说明】积分抵扣对应的成本金额(成本侧)。 【示例】NULL(用于积分抵扣对应的成本金额(成本侧))。 【ODS来源】settlement_ticket_details - pointDiscountCost。 【JSON字段】settlement_ticket_details.json - $ - pointDiscountCost。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.pointDiscountPrice IS '【说明】积分抵扣对应的金额(售价侧)。 【示例】NULL(用于积分抵扣对应的金额(售价侧))。 【ODS来源】settlement_ticket_details - pointDiscountPrice。 【JSON字段】settlement_ticket_details.json - $ - pointDiscountPrice。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.prepayMoney IS '【说明】预付金/定金在本单中使用的金额。 【示例】NULL(用于预付金/定金在本单中使用的金额)。 【ODS来源】settlement_ticket_details - prepayMoney。 【JSON字段】settlement_ticket_details.json - $ - prepayMoney。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.refundAmount IS '【说明】本单涉及的退款金额(汇总)。 【示例】NULL(用于本单涉及的退款金额(汇总))。 【ODS来源】settlement_ticket_details - refundAmount。 【JSON字段】settlement_ticket_details.json - $ - refundAmount。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.returnGoodsAmount IS '【说明】本单涉及的退货金额汇总。 【示例】NULL(用于本单涉及的退货金额汇总)。 【ODS来源】settlement_ticket_details - returnGoodsAmount。 【JSON字段】settlement_ticket_details.json - $ - returnGoodsAmount。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.rewardName IS '【说明】用于标识本单适用的激励方案名称,可能用于内部绩效或活动名称展示。 【示例】NULL(用于标识本单适用的激励方案名称,可能用于内部绩效或活动名称展示)。 【ODS来源】settlement_ticket_details - rewardName。 【JSON字段】settlement_ticket_details.json - $ - rewardName。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.settleType IS '【说明】结算类型字符串标识。 【示例】NULL(用于结算类型字符串标识)。 【ODS来源】settlement_ticket_details - settleType。 【JSON字段】settlement_ticket_details.json - $ - settleType。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.siteAddress IS '【说明】门店地址(详细地址)。 【示例】NULL(用于门店地址(详细地址))。 【ODS来源】settlement_ticket_details - siteAddress。 【JSON字段】settlement_ticket_details.json - $ - siteAddress。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.siteBusinessTel IS '【说明】门店电话。 【示例】NULL(用于门店电话)。 【ODS来源】settlement_ticket_details - siteBusinessTel。 【JSON字段】settlement_ticket_details.json - $ - siteBusinessTel。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.siteId IS '【说明】门店 ID。 【示例】NULL(用于门店 ID)。 【ODS来源】settlement_ticket_details - siteId。 【JSON字段】settlement_ticket_details.json - $ - siteId。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.siteName IS '【说明】门店名称,如“朗朗桌球”。 【示例】NULL(用于门店名称,如“朗朗桌球”)。 【ODS来源】settlement_ticket_details - siteName。 【JSON字段】settlement_ticket_details.json - $ - siteName。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.tenantId IS '【说明】租户 / 商户 ID(品牌维度)。 【示例】NULL(用于租户 / 商户 ID(品牌维度))。 【ODS来源】settlement_ticket_details - tenantId。 【JSON字段】settlement_ticket_details.json - $ - tenantId。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.tenantName IS '【说明】租户名称,如“朗朗桌球”。 【示例】NULL(用于租户名称,如“朗朗桌球”)。 【ODS来源】settlement_ticket_details - tenantName。 【JSON字段】settlement_ticket_details.json - $ - tenantName。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.ticketCustomContent IS '【说明】自定义小票内容,如商家自定义宣传语、条款等。 【示例】NULL(用于自定义小票内容,如商家自定义宣传语、条款等)。 【ODS来源】settlement_ticket_details - ticketCustomContent。 【JSON字段】settlement_ticket_details.json - $ - ticketCustomContent。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.ticketRemark IS '【说明】小票备注内容,可用于打印在小票底部或顶部(例如活动说明、特别提示)。 【示例】NULL(小票备注内容,可用于打印在小票底部或顶部(例如活动说明、特别提示))。 【ODS来源】settlement_ticket_details - ticketRemark。 【JSON字段】settlement_ticket_details.json - $ - ticketRemark。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.voucherMoney IS '【说明】代金券类金额字段(可能用于某类“代金券余额”或“券面值”记录)。 【示例】NULL(代金券类金额字段(可能用于某类“代金券余额”或“券面值”记录))。 【ODS来源】settlement_ticket_details - voucherMoney。 【JSON字段】settlement_ticket_details.json - $ - voucherMoney。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.memberProfile IS '【说明】不是会员卡主键,而是本次结账时的会员信息快照。 【示例】NULL(用于不是会员卡主键,而是本次结账时的会员信息快照)。 【ODS来源】settlement_ticket_details - memberProfile。 【JSON字段】settlement_ticket_details.json - $ - memberProfile。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderItem IS '【说明】本次结算对应的“订单明细列表”,这部分是连接“台费流水 / 商品出库 / 券使用”等多个子领域的关键结构。 【示例】NULL(用于本次结算对应的“订单明细列表”,这部分是连接“台费流水 / 商品出库 / 券使用”等多个子领域的关键结构)。 【ODS来源】settlement_ticket_details - orderItem。 【JSON字段】settlement_ticket_details.json - $ - orderItem。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.tenantMemberCardLogs IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】settlement_ticket_details - tenantMemberCardLogs。 【JSON字段】settlement_ticket_details.json - $ - tenantMemberCardLogs。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【ODS来源】settlement_ticket_details - payload。 【JSON字段】settlement_ticket_details.json - $ - $。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】settlement_ticket_details.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【ODS来源】settlement_ticket_details - source_file(ETL补充)。 【JSON字段】settlement_ticket_details.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/settlement_ticket_details.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【ODS来源】settlement_ticket_details - source_endpoint(ETL补充)。 【JSON字段】settlement_ticket_details.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【ODS来源】settlement_ticket_details - fetched_at(ETL补充)。 【JSON字段】settlement_ticket_details.json - ETL元数据 - 无。'; + CREATE TABLE IF NOT EXISTS billiards_ods.store_goods_master ( id BIGINT PRIMARY KEY, @@ -1748,53 +1776,56 @@ CREATE TABLE IF NOT EXISTS billiards_ods.store_goods_master ( fetched_at TIMESTAMPTZ DEFAULT now() ); -COMMENT ON TABLE billiards_ods.store_goods_master IS '对应JSON字段:store_goods_master.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 store_goods_master-Analysis.md'; -COMMENT ON COLUMN billiards_ods.store_goods_master.id IS '对应JSON字段:id,说明::门店商品 ID,门店维度的商品主键。,示例值及对应分析:用途:在其它文件中经常以 site_goods_id 的名字出现,与这里的 id 一致,用来关联库存记录、销售记录等。'; -COMMENT ON COLUMN billiards_ods.store_goods_master.tenant_id IS '对应JSON字段:tenant_id,说明::租户/品牌 ID。同一品牌下多个门店共享一个 tenant_id。,示例值及对应分析:枚举情况:本文件中为单一固定值(同一品牌)。'; -COMMENT ON COLUMN billiards_ods.store_goods_master.site_id IS '对应JSON字段:site_id,说明::门店 ID。,示例值及对应分析:枚举情况:本文件中为单一固定值(同一家门店“朗朗桌球”),和其它 JSON 中的 site_id 一致。'; -COMMENT ON COLUMN billiards_ods.store_goods_master.siteName IS '对应JSON字段:siteName,说明::门店名称,是对 site_id 的冗余展示,方便直接阅读,无需再去关联门店档案。,示例值及对应分析:2. 商品标识和分类维度'; -COMMENT ON COLUMN billiards_ods.store_goods_master.tenant_goods_id IS '对应JSON字段:tenant_goods_id,说明::租户/品牌维度的商品 ID,相当于“全局商品 ID”。,示例值及对应分析:用途:用于跨门店或与“商品档案(商品档案.json)”对齐时使用。'; -COMMENT ON COLUMN billiards_ods.store_goods_master.goods_name IS '对应JSON字段:goods_name,说明::商品名称,例如“合味道泡面”“地道肠”“麻将房茶位费”等。,示例值及对应分析:用途:业务展示字段,历史流水里也会冗余存一份商品名。'; -COMMENT ON COLUMN billiards_ods.store_goods_master.goods_bar_code IS '对应JSON字段:goods_bar_code,说明::商品条形码(如 EAN-13 编码),用于扫码销售。此字段设计为可填,但此店目前未配置。,示例值及对应分析:?? store_goods_master-Analysis.md'; -COMMENT ON COLUMN billiards_ods.store_goods_master.goods_category_id IS '对应JSON字段:goods_category_id,说明::商品一级分类 ID。,示例值及对应分析:用途:'; -COMMENT ON COLUMN billiards_ods.store_goods_master.goods_second_category_id IS '对应JSON字段:goods_second_category_id,说明::商品二级分类 ID。,示例值及对应分析:用途:'; -COMMENT ON COLUMN billiards_ods.store_goods_master.oneCategoryName IS '对应JSON字段:oneCategoryName,说明::一级分类名称,如“零食”“酒水”“服务费”等。,示例值及对应分析:说明:与 goods_category_id 一一对应,是易读文本字段。'; -COMMENT ON COLUMN billiards_ods.store_goods_master.twoCategoryName IS '对应JSON字段:twoCategoryName,说明::二级分类名称,如“面”“洋酒”“纸巾”等。,示例值及对应分析:说明:与 goods_second_category_id 对应。'; -COMMENT ON COLUMN billiards_ods.store_goods_master.unit IS '对应JSON字段:unit,说明::商品计量单位(销售单位)。,示例值及对应分析:?? store_goods_master-Analysis.md'; -COMMENT ON COLUMN billiards_ods.store_goods_master.sale_price IS '对应JSON字段:sale_price,说明::商品标准销售价(挂牌价),单位为元。,示例值及对应分析:说明:实际结算时可能会打折或用券抵扣,但这个字段表示“定价”。'; -COMMENT ON COLUMN billiards_ods.store_goods_master.cost_price IS '对应JSON字段:cost_price,说明::商品成本价(单件成本)。,示例值及对应分析:观察:'; -COMMENT ON COLUMN billiards_ods.store_goods_master.cost_price_type IS '对应JSON字段:cost_price_type,说明:(结合成本字段推测):,示例值及对应分析:1 代表使用“固定成本价”(手工维护的 cost_price),provisional_total_cost 按“数量 × cost_price”算。'; -COMMENT ON COLUMN billiards_ods.store_goods_master.min_discount_price IS '对应JSON字段:min_discount_price,说明::最低允许成交价(限价)。,示例值及对应分析:用法逻辑(推测):'; -COMMENT ON COLUMN billiards_ods.store_goods_master.safe_stock IS '对应JSON字段:safe_stock,说明::安全库存量(阈值),低于该值时系统可以提示补货。,示例值及对应分析:当前门店尚未设置安全库存,所以全部为 0,仅起到结构占位作用。'; -COMMENT ON COLUMN billiards_ods.store_goods_master.stock IS '对应JSON字段:stock,说明::当前可用库存数量(以 unit 为单位)。,示例值及对应分析:特征:可以是 0(库存卖完),也可以非常大(例如纸巾、茶位费这种按“份”计的虚拟库存设定)。'; -COMMENT ON COLUMN billiards_ods.store_goods_master.stock_A IS '对应JSON字段:stock_A,说明:(系统设计):副单位库存数量。如果商品存在双单位(例如箱/瓶),stock_A 通常用于记录副单位库存。当前门店没有启用副单位库存管理,因此为 0。,示例值及对应分析:batch_stock_quantity'; -COMMENT ON COLUMN billiards_ods.store_goods_master.sale_num IS '对应JSON字段:sale_num,说明::在当前统计口径下的销售数量(总销量,单位同 unit)。,示例值及对应分析:特征:和 total_sales 完全一致(当前导出时的统计口径下),说明两者是同一统计周期。'; -COMMENT ON COLUMN billiards_ods.store_goods_master.total_purchase_cost IS '对应JSON字段:total_purchase_cost,说明::总采购成本,单位为元。,示例值及对应分析:当前数据:与 provisional_total_cost 完全相等。'; -COMMENT ON COLUMN billiards_ods.store_goods_master.total_sales IS '对应JSON字段:total_sales,说明:(从命名看):累计销售数量。,示例值及对应分析:实际:当前数据中 total_sales == sale_num,说明此接口的统计区间 = “截至当前的全部历史”,因此数量一致。'; -COMMENT ON COLUMN billiards_ods.store_goods_master.average_monthly_sales IS '对应JSON字段:average_monthly_sales,说明::平均月销量(件/月),根据某个统计周期内的销售数据折算而来。,示例值及对应分析:结构特征:'; -COMMENT ON COLUMN billiards_ods.store_goods_master.enable_status IS '对应JSON字段:enable_status,说明:(结合名称与常见编码):,示例值及对应分析:1:启用。'; -COMMENT ON COLUMN billiards_ods.store_goods_master.audit_status IS '对应JSON字段:audit_status,说明:(典型业务语义):,示例值及对应分析:2:审核通过。'; -COMMENT ON COLUMN billiards_ods.store_goods_master.goods_state IS '对应JSON字段:goods_state,说明:类型:int,枚举,示例值及对应分析:观察值:'; -COMMENT ON COLUMN billiards_ods.store_goods_master.is_delete IS '对应JSON字段:is_delete,说明::逻辑删除标志。,示例值及对应分析:0:未删除(有效档案);'; -COMMENT ON COLUMN billiards_ods.store_goods_master.is_warehousing IS '对应JSON字段:is_warehousing,说明::是否纳入库存管理。,示例值及对应分析:1:启用库存管理(会有出入库流水)。'; -COMMENT ON COLUMN billiards_ods.store_goods_master.able_discount IS '对应JSON字段:able_discount,说明:(结合命名):,示例值及对应分析:是否允许参与折扣。当前全部为 1,说明所有商品都允许打折。'; -COMMENT ON COLUMN billiards_ods.store_goods_master.able_site_transfer IS '对应JSON字段:able_site_transfer,说明:(结合命名与值分布):,示例值及对应分析:表示是否允许跨门店调拨或跨站点共享库存。'; -COMMENT ON COLUMN billiards_ods.store_goods_master.forbid_sell_status IS '对应JSON字段:forbid_sell_status,说明:类型:int,枚举,示例值及对应分析:观察值:全部为 1。'; -COMMENT ON COLUMN billiards_ods.store_goods_master."freeze" IS '对应JSON字段:freeze,说明::冻结状态。,示例值及对应分析:0:未冻结;'; -COMMENT ON COLUMN billiards_ods.store_goods_master.send_state IS '对应JSON字段:send_state,说明:(命名趋近“上架状态/可售状态”):,示例值及对应分析:1:可销售/可下单。'; -COMMENT ON COLUMN billiards_ods.store_goods_master.custom_label_type IS '对应JSON字段:custom_label_type,说明:(推测):自定义标签类型。,示例值及对应分析:1:使用系统默认标签(未出现);'; -COMMENT ON COLUMN billiards_ods.store_goods_master.option_required IS '对应JSON字段:option_required,说明:(推测):是否需要在销售时选择规格/选项。,示例值及对应分析:1:不要求额外选项(单规格商品);'; -COMMENT ON COLUMN billiards_ods.store_goods_master.sale_channel IS '对应JSON字段:sale_channel,说明::销售渠道类型。,示例值及对应分析:常见模式:'; -COMMENT ON COLUMN billiards_ods.store_goods_master.sort IS '对应JSON字段:sort,说明::前端展示或内部配置的排序号,数值越小/越大排前取决于业务约定。'; -COMMENT ON COLUMN billiards_ods.store_goods_master.remark IS '对应JSON字段:remark,说明::商品备注(可以写口味说明、供应商、注意事项等)。当前尚未使用。,示例值及对应分析:sort'; -COMMENT ON COLUMN billiards_ods.store_goods_master.pinyin_initial IS '对应JSON字段:pinyin_initial,说明::商品名称的拼音首字母缩写,有时多个别名用逗号分隔。,示例值及对应分析:作用:'; -COMMENT ON COLUMN billiards_ods.store_goods_master.goods_cover IS '对应JSON字段:goods_cover,说明::商品图片 URL(如 OSS 对象存储地址),用于前端展示商品图片。,示例值及对应分析:?? store_goods_master-Analysis.md'; -COMMENT ON COLUMN billiards_ods.store_goods_master.create_time IS '对应JSON字段:create_time,说明::门店商品档案创建时间(商品在门店建立档案的时间点)。,示例值及对应分析:?? store_goods_master-Analysis.md'; -COMMENT ON COLUMN billiards_ods.store_goods_master.update_time IS '对应JSON字段:update_time,说明::最后一次修改该商品档案的时间(包括价格调整、状态变更等)。,示例值及对应分析:days_available'; -COMMENT ON COLUMN billiards_ods.store_goods_master.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.store_goods_master.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.store_goods_master.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.store_goods_master.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; +COMMENT ON TABLE billiards_ods.store_goods_master IS 'ODS 原始明细表:门店商品主数据。来源:C:/dev/LLTQ/export/test-json-doc/store_goods_master.json;分析:store_goods_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.id IS '【说明】门店商品 ID,门店维度的商品主键。 【示例】2793025851560005(用于门店商品 ID,门店维度的商品主键)。 【ODS来源】store_goods_master - id。 【JSON字段】store_goods_master.json - data.orderGoodsList - id。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【ODS来源】store_goods_master - tenant_id。 【JSON字段】store_goods_master.json - data.orderGoodsList - tenant_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.site_id IS '【说明】门店 ID。 【示例】2790685415443269(用于门店 ID)。 【ODS来源】store_goods_master - site_id。 【JSON字段】store_goods_master.json - data.orderGoodsList - site_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.siteName IS '【说明】门店名称,是对 site_id 的冗余展示,方便直接阅读,无需再去关联门店档案。 【示例】朗朗桌球(用于门店名称,是对 site_id 的冗余展示,方便直接阅读,无需再去关联门店档案)。 【ODS来源】store_goods_master - siteName。 【JSON字段】store_goods_master.json - data.orderGoodsList - siteName。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.tenant_goods_id IS '【说明】租户/品牌维度的商品 ID,相当于“全局商品 ID”。 【示例】2792178593255301(用于租户/品牌维度的商品 ID,相当于“全局商品 ID”)。 【ODS来源】store_goods_master - tenant_goods_id。 【JSON字段】store_goods_master.json - data.orderGoodsList - tenant_goods_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.goods_name IS '【说明】商品名称,例如“合味道泡面”“地道肠”“麻将房茶位费”等。 【示例】合味道泡面(用于商品名称,例如“合味道泡面”“地道肠”“麻将房茶位费”等)。 【ODS来源】store_goods_master - goods_name。 【JSON字段】store_goods_master.json - data.orderGoodsList - goods_name。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.goods_bar_code IS '【说明】商品条形码(如 EAN-13 编码),用于扫码销售。 【示例】NULL(商品条形码(如 EAN-13 编码),用于扫码销售)。 【ODS来源】store_goods_master - goods_bar_code。 【JSON字段】store_goods_master.json - data.orderGoodsList - goods_bar_code。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.goods_category_id IS '【说明】商品一级分类 ID。 【示例】2791941988405125(用于商品一级分类 ID)。 【ODS来源】store_goods_master - goods_category_id。 【JSON字段】store_goods_master.json - data.orderGoodsList - goods_category_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.goods_second_category_id IS '【说明】商品二级分类 ID。 【示例】2793236829620037(用于商品二级分类 ID)。 【ODS来源】store_goods_master - goods_second_category_id。 【JSON字段】store_goods_master.json - data.orderGoodsList - goods_second_category_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.oneCategoryName IS '【说明】一级分类名称,如“零食”“酒水”“服务费”等。 【示例】零食(用于一级分类名称,如“零食”“酒水”“服务费”等)。 【ODS来源】store_goods_master - oneCategoryName。 【JSON字段】store_goods_master.json - data.orderGoodsList - oneCategoryName。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.twoCategoryName IS '【说明】二级分类名称,如“面”“洋酒”“纸巾”等。 【示例】面(用于二级分类名称,如“面”“洋酒”“纸巾”等)。 【ODS来源】store_goods_master - twoCategoryName。 【JSON字段】store_goods_master.json - data.orderGoodsList - twoCategoryName。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.unit IS '【说明】商品计量单位(销售单位)。 【示例】桶(用于商品计量单位(销售单位))。 【ODS来源】store_goods_master - unit。 【JSON字段】store_goods_master.json - data.orderGoodsList - unit。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.sale_price IS '【说明】商品标准销售价(挂牌价),单位为元。 【示例】12.0(用于商品标准销售价(挂牌价),单位为元)。 【ODS来源】store_goods_master - sale_price。 【JSON字段】store_goods_master.json - data.orderGoodsList - sale_price。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.cost_price IS '【说明】商品成本价(单件成本)。 【示例】0.0(用于商品成本价(单件成本))。 【ODS来源】store_goods_master - cost_price。 【JSON字段】store_goods_master.json - data.orderGoodsList - cost_price。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.cost_price_type IS '【说明】1 代表使用“固定成本价”(手工维护的 cost_price),provisional_total_cost 按“数量 × cost_price”算。 【示例】1(用于1 代表使用“固定成本价”(手工维护的 cost_price),provisional_total_cost 按“数量 × cost_price”算)。 【ODS来源】store_goods_master - cost_price_type。 【JSON字段】store_goods_master.json - data.orderGoodsList - cost_price_type。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.min_discount_price IS '【说明】最低允许成交价(限价)。 【示例】7.0(用于最低允许成交价(限价))。 【ODS来源】store_goods_master - min_discount_price。 【JSON字段】store_goods_master.json - data.orderGoodsList - min_discount_price。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.safe_stock IS '【说明】安全库存量(阈值),低于该值时系统可以提示补货。 【示例】0(用于安全库存量(阈值),低于该值时系统可以提示补货)。 【ODS来源】store_goods_master - safe_stock。 【JSON字段】store_goods_master.json - data.orderGoodsList - safe_stock。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.stock IS '【说明】当前可用库存数量(以 unit 为单位)。 【示例】18(用于当前可用库存数量(以 unit 为单位))。 【ODS来源】store_goods_master - stock。 【JSON字段】store_goods_master.json - data.orderGoodsList - stock。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.stock_A IS '【说明】副单位库存数量。 【示例】0(用于副单位库存数量)。 【ODS来源】store_goods_master - stock_A。 【JSON字段】store_goods_master.json - data.orderGoodsList - stock_A。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.sale_num IS '【说明】在当前统计口径下的销售数量(总销量,单位同 unit)。 【示例】104(用于在当前统计口径下的销售数量(总销量,单位同 unit))。 【ODS来源】store_goods_master - sale_num。 【JSON字段】store_goods_master.json - data.orderGoodsList - sale_num。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.total_purchase_cost IS '【说明】总采购成本,单位为元。 【示例】0.0(用于总采购成本,单位为元)。 【ODS来源】store_goods_master - total_purchase_cost。 【JSON字段】store_goods_master.json - data.orderGoodsList - total_purchase_cost。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.total_sales IS '【说明】累计销售数量。 【示例】104(用于累计销售数量)。 【ODS来源】store_goods_master - total_sales。 【JSON字段】store_goods_master.json - data.orderGoodsList - total_sales。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.average_monthly_sales IS '【说明】平均月销量(件/月),根据某个统计周期内的销售数据折算而来。 【示例】1.32(用于平均月销量(件/月),根据某个统计周期内的销售数据折算而来)。 【ODS来源】store_goods_master - average_monthly_sales。 【JSON字段】store_goods_master.json - data.orderGoodsList - average_monthly_sales。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.batch_stock_quantity IS '【说明】当前“批次”的库存数量(主单位)。 【示例】43(用于当前“批次”的库存数量(主单位))。 【ODS来源】store_goods_master - batch_stock_quantity。 【JSON字段】store_goods_master.json - data.orderGoodsList - batch_stock_quantity。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.days_available IS '【说明】商品“在架天数”或“可售天数”,大致等于当前时间减去首次上架时间。 【示例】13(用于商品“在架天数”或“可售天数”,大致等于当前时间减去首次上架时间)。 【ODS来源】store_goods_master - days_available。 【JSON字段】store_goods_master.json - data.orderGoodsList - days_available。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.provisional_total_cost IS '【说明】暂估总成本,单位为元。 【示例】0.0(用于暂估总成本,单位为元)。 【ODS来源】store_goods_master - provisional_total_cost。 【JSON字段】store_goods_master.json - data.orderGoodsList - provisional_total_cost。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.enable_status IS '【说明】控制商品档案是否参与任何业务(库存、销售等)。 【示例】1(用于控制商品档案是否参与任何业务(库存、销售等))。 【ODS来源】store_goods_master - enable_status。 【JSON字段】store_goods_master.json - data.orderGoodsList - enable_status。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.audit_status IS '【说明】观察值:全部为 2。 【示例】2(用于观察值:全部为 2)。 【ODS来源】store_goods_master - audit_status。 【JSON字段】store_goods_master.json - data.orderGoodsList - audit_status。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.goods_state IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【ODS来源】store_goods_master - goods_state。 【JSON字段】store_goods_master.json - data.orderGoodsList - goods_state。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.is_delete IS '【说明】逻辑删除标志。 【示例】0(用于逻辑删除标志)。 【ODS来源】store_goods_master - is_delete。 【JSON字段】store_goods_master.json - data.orderGoodsList - is_delete。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.is_warehousing IS '【说明】是否纳入库存管理。 【示例】1(用于是否纳入库存管理)。 【ODS来源】store_goods_master - is_warehousing。 【JSON字段】store_goods_master.json - data.orderGoodsList - is_warehousing。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.able_discount IS '【说明】是否允许参与折扣。 【示例】1(用于是否允许参与折扣)。 【ODS来源】store_goods_master - able_discount。 【JSON字段】store_goods_master.json - data.orderGoodsList - able_discount。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.able_site_transfer IS '【说明】表示是否允许跨门店调拨或跨站点共享库存。 【示例】2(用于表示是否允许跨门店调拨或跨站点共享库存)。 【ODS来源】store_goods_master - able_site_transfer。 【JSON字段】store_goods_master.json - data.orderGoodsList - able_site_transfer。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.forbid_sell_status IS '【说明】观察值:全部为 1。 【示例】1(用于观察值:全部为 1)。 【ODS来源】store_goods_master - forbid_sell_status。 【JSON字段】store_goods_master.json - data.orderGoodsList - forbid_sell_status。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.send_state IS '【说明】观察值:全部为 1。 【示例】1(用于观察值:全部为 1)。 【ODS来源】store_goods_master - send_state。 【JSON字段】store_goods_master.json - data.orderGoodsList - send_state。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.custom_label_type IS '【说明】自定义标签类型。 【示例】2(用于自定义标签类型)。 【ODS来源】store_goods_master - custom_label_type。 【JSON字段】store_goods_master.json - data.orderGoodsList - custom_label_type。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.option_required IS '【说明】是否需要在销售时选择规格/选项。 【示例】1(用于是否需要在销售时选择规格/选项)。 【ODS来源】store_goods_master - option_required。 【JSON字段】store_goods_master.json - data.orderGoodsList - option_required。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.sale_channel IS '【说明】销售渠道类型。 【示例】1(用于销售渠道类型)。 【ODS来源】store_goods_master - sale_channel。 【JSON字段】store_goods_master.json - data.orderGoodsList - sale_channel。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.sort IS '【说明】排序权重,用于前端商品列表展示时的排版顺序,数值越小/越大哪个优先,具体规则看系统设定(一般是数值越小排序越靠前)。 【示例】100(排序权重,用于前端商品列表展示时的排版顺序,数值越小/越大哪个优先,具体规则看系统设定(一般是数值越小排序越靠前))。 【ODS来源】store_goods_master - sort。 【JSON字段】store_goods_master.json - data.orderGoodsList - sort。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.remark IS '【说明】商品备注(可以写口味说明、供应商、注意事项等)。 【示例】NULL(用于商品备注(可以写口味说明、供应商、注意事项等))。 【ODS来源】store_goods_master - remark。 【JSON字段】store_goods_master.json - data.orderGoodsList - remark。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.pinyin_initial IS '【说明】商品名称的拼音首字母缩写,有时多个别名用逗号分隔。 【示例】HWDPM,GWDPM(用于商品名称的拼音首字母缩写,有时多个别名用逗号分隔)。 【ODS来源】store_goods_master - pinyin_initial。 【JSON字段】store_goods_master.json - data.orderGoodsList - pinyin_initial。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.goods_cover IS '【说明】商品图片 URL(如 OSS 对象存储地址),用于前端展示商品图片。 【示例】https://oss.ficoo.vip/admin/8M1WM7_1753204221337.jpg(商品图片 URL(如 OSS 对象存储地址),用于前端展示商品图片)。 【ODS来源】store_goods_master - goods_cover。 【JSON字段】store_goods_master.json - data.orderGoodsList - goods_cover。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.create_time IS '【说明】门店商品档案创建时间(商品在门店建立档案的时间点)。 【示例】2025-07-16 11:52:51(用于门店商品档案创建时间(商品在门店建立档案的时间点))。 【ODS来源】store_goods_master - create_time。 【JSON字段】store_goods_master.json - data.orderGoodsList - create_time。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.update_time IS '【说明】最后一次修改该商品档案的时间(包括价格调整、状态变更等)。 【示例】2025-11-09 07:23:47(用于最后一次修改该商品档案的时间(包括价格调整、状态变更等))。 【ODS来源】store_goods_master - update_time。 【JSON字段】store_goods_master.json - data.orderGoodsList - update_time。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【ODS来源】store_goods_master - payload。 【JSON字段】store_goods_master.json - data.orderGoodsList - $。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】store_goods_master.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【ODS来源】store_goods_master - source_file(ETL补充)。 【JSON字段】store_goods_master.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/store_goods_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【ODS来源】store_goods_master - source_endpoint(ETL补充)。 【JSON字段】store_goods_master.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【ODS来源】store_goods_master - fetched_at(ETL补充)。 【JSON字段】store_goods_master.json - ETL元数据 - 无。'; + CREATE TABLE IF NOT EXISTS billiards_ods.store_goods_sales_records ( id BIGINT PRIMARY KEY, @@ -1854,54 +1885,61 @@ CREATE TABLE IF NOT EXISTS billiards_ods.store_goods_sales_records ( fetched_at TIMESTAMPTZ DEFAULT now() ); -COMMENT ON TABLE billiards_ods.store_goods_sales_records IS '对应JSON字段:store_goods_sales_records.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 store_goods_sales_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.id IS '对应JSON字段:id,说明::本条「门店销售流水」记录的主键 ID。,示例值及对应分析:用途:在系统内部唯一标识这一条销售明细。'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_id IS '对应JSON字段:tenant_id,说明::租户/品牌 ID。,示例值及对应分析:特征:所有记录为同一个值,对应「非球科技系统中你的商户」。'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.site_id IS '对应JSON字段:site_id,说明::门店 ID(系统主键)。,示例值及对应分析:关系:'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.site_goods_id IS '对应JSON字段:site_goods_id,说明::门店商品 ID。,示例值及对应分析:关系:'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_goods_id IS '对应JSON字段:tenant_goods_id,说明::租户(品牌)级商品 ID(全局商品 ID)。,示例值及对应分析:关系:'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_settle_id IS '对应JSON字段:order_settle_id,说明:与台费、助教、团购套餐流水等表共享,形成「订单主表(结算)– 多种明细表」的结构。,示例值及对应分析:如果结账记录表有数据,order_settle_id 对应那里的主键,create_time 与订单结束时间基本一致。'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_trade_no IS '对应JSON字段:order_trade_no,说明:与台费、助教、团购套餐流水等表共享,形成「订单主表(结算)– 多种明细表」的结构。,示例值及对应分析:如果结账记录表有数据,order_settle_id 对应那里的主键,create_time 与订单结束时间基本一致。'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_goods_id IS '对应JSON字段:order_goods_id,说明::订单商品明细 ID(订单内部的商品行主键)。,示例值及对应分析:关系:'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_pay_id IS '对应JSON字段:order_pay_id,说明:连接到「支付记录」中的一条支付流水,再通过支付的 relate_type/relate_id 把支付和订单、充值等业务区分开。,示例值及对应分析:对于退款,则通过退款记录里的 relate_type/relate_id 反向关联到原来的订单或支付。'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_coupon_id IS '对应JSON字段:order_coupon_id,说明::订单级优惠券 ID。,示例值及对应分析:关系:'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_name IS '对应JSON字段:ledger_name,说明::销售项目名称(商品名称),例如 “哇哈哈矿泉水”“地道肠”“东方树叶”等。,示例值及对应分析:说明:业务展示用字段,历史流水即使商品改名,这里会保留当时的名字。'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_group_name IS '对应JSON字段:ledger_group_name,说明::销售项目所属的「门店内部分组名称」,类似前台菜单分组或大类标签。,示例值及对应分析:关系:'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_amount IS '对应JSON字段:ledger_amount,说明::原始应收金额,公式上接近 ledger_unit_price × ledger_count。,示例值及对应分析:说明:这是未考虑优惠前的金额基础,用于后续计算折扣和抵扣。'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_count IS '对应JSON字段:ledger_count,说明::销售数量(以 unit 为单位,unit 字段在门店商品档案中)。,示例值及对应分析:观测值:如 1, 2, 3, 6, 36 等。'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_unit_price IS '对应JSON字段:ledger_unit_price,说明::商品在该次销售中的「结算单价」(元/单位)。,示例值及对应分析:观测值示例:5.0, 8.0, 2.0, 10.0, 72.0 等。'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_status IS '对应JSON字段:ledger_status,说明::销售流水状态。,示例值及对应分析:1:正常有效。'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.discount_money IS '对应JSON字段:discount_money,说明::本条销售明细的「价格优惠金额」,即原价部分被减免掉的金额。,示例值及对应分析:典型关系:'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.coupon_deduct_money IS '对应JSON字段:coupon_deduct_money,说明::被优惠券 / 团购券直接抵扣到这条商品明细上的金额。,示例值及对应分析:说明:'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.member_discount_amount IS '对应JSON字段:member_discount_amount,说明::由会员身份(会员折扣)针对这一行商品产生的优惠金额。,示例值及对应分析:说明:尽管字段存在,但当前实际折扣可能合并反映在 discount_money 中,这个字段没有拆开体现。'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_coupon_deduct_money IS '对应JSON字段:option_coupon_deduct_money,说明::由优惠券抵扣“选项价格”的金额。,示例值及对应分析:上面这三个 option_* 字段,是为“主商品 + 选项”的更复杂计价方式预留的,本店当前所有记录都是单规格,选项体系未启用。'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_member_discount_money IS '对应JSON字段:option_member_discount_money,说明::由会员折扣作用在“选项价格”上的优惠金额。,示例值及对应分析:?? store_goods_sales_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.point_discount_money IS '对应JSON字段:point_discount_money,说明::由积分抵扣的金额(顾客兑换积分抵现金额)。,示例值及对应分析:?? store_goods_sales_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.point_discount_money_cost IS '对应JSON字段:point_discount_money_cost,说明::积分抵扣对应的“成本金额”(后台核算用),例如按积分成本来计提费用。,示例值及对应分析:?? store_goods_sales_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.real_goods_money IS '对应JSON字段:real_goods_money,说明::商品实际入账金额(考虑折扣、可能还会考虑其它抵扣后的实际销售金额)。,示例值及对应分析:观测值:5.0, 10.0, 8.0, 6.0, 4.0 等。'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.cost_money IS '对应JSON字段:cost_money,说明::本条销售对应的成本金额(以元计)。,示例值及对应分析:观测示例:0.01, 0.00, 3.58, 1.79, 0.64 等。'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.push_money IS '对应JSON字段:push_money,说明::本条销售对应的提成金额(给营业员/促销员的提成)。,示例值及对应分析:在启用营业员体系时,这里才会出现正数。'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.sales_type IS '对应JSON字段:sales_type,说明::销售类型。,示例值及对应分析:1:正常销售;'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.is_single_order IS '对应JSON字段:is_single_order,说明::是否单独订单标识。,示例值及对应分析:1:作为独立明细参与某个订单结算;'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.is_delete IS '对应JSON字段:is_delete,说明::逻辑删除标志。,示例值及对应分析:0:正常有效;'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.goods_remark IS '对应JSON字段:goods_remark,说明::商品备注/口味说明/特殊说明。,示例值及对应分析:用途:点单时如果需要额外说明,可以写在这里。'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_price IS '对应JSON字段:option_price,说明::商品选项(规格/加料)的附加价格。,示例值及对应分析:说明:如加冰、加料、升级大杯等产生附加费用时,理论上应该体现到这里。当前门店未使用此功能。'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_value_name IS '对应JSON字段:option_value_name,说明::商品选项名称(如规格、口味:大杯/小杯,不加冰等)。,示例值及对应分析:结构用途:'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_name IS '对应JSON字段:option_name,说明:?????? store_goods_sales_records-Analysis.md,示例值及对应分析:?? store_goods_sales_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.member_coupon_id IS '对应JSON字段:member_coupon_id,说明::会员券 ID(比如会员专享优惠券)。,示例值及对应分析:当前数据未使用,属于为会员权益预留的字段。'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.package_coupon_id IS '对应JSON字段:package_coupon_id,说明::套餐券 ID。,示例值及对应分析:关系:'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.sales_man_org_id IS '对应JSON字段:sales_man_org_id,说明::营业员所属组织/部门 ID。,示例值及对应分析:当前门店全部为 0,说明未启用这套销售员分组织的体系。'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.salesman_name IS '对应JSON字段:salesman_name,说明::营业员姓名(如果有为具体销售员记业绩,则在此填姓名)。,示例值及对应分析:?? store_goods_sales_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.salesman_role_id IS '对应JSON字段:salesman_role_id,说明::营业员的系统角色 ID(例如某个角色代码表示“销售员”)。,示例值及对应分析:?? store_goods_sales_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.salesman_user_id IS '对应JSON字段:salesman_user_id,说明::营业员用户 ID(系统账号 ID)。,示例值及对应分析:?? store_goods_sales_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.operator_id IS '对应JSON字段:operator_id,说明::操作员 ID(录入这笔销售的员工)。,示例值及对应分析:关系:'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.operator_name IS '对应JSON字段:operator_name,说明::操作员姓名,文字冗余。,示例值及对应分析:?? store_goods_sales_records-Analysis.md'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.openSalesman IS '对应JSON字段:openSalesman,说明:(结合系统其它文件推断):,示例值及对应分析:1:启用“营业员/销售员”机制(要指定 salesman);'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.site_table_id IS '对应JSON字段:site_table_id,说明::球台 ID。,示例值及对应分析:非 0:销售记录关联到具体某张桌台(例如顾客在台上点饮料)。'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_goods_business_id IS '对应JSON字段:tenant_goods_business_id,说明::租户级商品「业务大类」ID(例如“零食类”“酒水类”等更高维度)。,示例值及对应分析:2.2 门店 / 球台维度字段'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_goods_category_id IS '对应JSON字段:tenant_goods_category_id,说明::租户级商品一级分类 ID。,示例值及对应分析:关系:'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.create_time IS '对应JSON字段:create_time,说明::销售记录创建时间,通常就是结账时间或录入时间。,示例值及对应分析:用途:用于按时间维度查询销售流水,与订单层的时间字段对齐。'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; -COMMENT ON COLUMN billiards_ods.store_goods_sales_records.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; +COMMENT ON TABLE billiards_ods.store_goods_sales_records IS 'ODS 原始明细表:门店商品销售流水。来源:C:/dev/LLTQ/export/test-json-doc/store_goods_sales_records.json;分析:store_goods_sales_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.id IS '【说明】本条「门店销售流水」记录的主键 ID。 【示例】2957924029550406(用于本条「门店销售流水」记录的主键 ID)。 【ODS来源】store_goods_sales_records - id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【ODS来源】store_goods_sales_records - tenant_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - tenant_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.site_id IS '【说明】门店 ID(系统主键)。 【示例】2790685415443269(用于门店 ID(系统主键))。 【ODS来源】store_goods_sales_records - site_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - site_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.siteid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】store_goods_sales_records - siteid。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - site_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.sitename IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】store_goods_sales_records - sitename。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - siteName。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.site_goods_id IS '【说明】门店商品 ID。 【示例】2793026176012357(用于门店商品 ID)。 【ODS来源】store_goods_sales_records - site_goods_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - site_goods_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_goods_id IS '【说明】租户(品牌)级商品 ID(全局商品 ID)。 【示例】2792115932417925(用于租户(品牌)级商品 ID(全局商品 ID))。 【ODS来源】store_goods_sales_records - tenant_goods_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - tenant_goods_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_settle_id IS '【说明】订单结算 ID(结账单主键)。 【示例】2957922914357125(用于订单结算 ID(结账单主键))。 【ODS来源】store_goods_sales_records - order_settle_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_settle_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_trade_no IS '【说明】订单交易号(业务单号)。 【示例】2957858167230149(用于订单交易号(业务单号))。 【ODS来源】store_goods_sales_records - order_trade_no。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_trade_no。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_goods_id IS '【说明】订单商品明细 ID(订单内部的商品行主键)。 【示例】2957858456391557(用于订单商品明细 ID(订单内部的商品行主键))。 【ODS来源】store_goods_sales_records - order_goods_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_goods_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ordergoodsid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【ODS来源】store_goods_sales_records - ordergoodsid。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_goods_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_pay_id IS '【说明】关联支付记录的 ID。 【示例】0(用于关联支付记录的 ID)。 【ODS来源】store_goods_sales_records - order_pay_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_pay_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_coupon_id IS '【说明】订单级优惠券 ID。 【示例】0(用于订单级优惠券 ID)。 【ODS来源】store_goods_sales_records - order_coupon_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_coupon_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_name IS '【说明】销售项目名称(商品名称),例如 “哇哈哈矿泉水”“地道肠”“东方树叶”等。 【示例】哇哈哈矿泉水(用于销售项目名称(商品名称),例如 “哇哈哈矿泉水”“地道肠”“东方树叶”等)。 【ODS来源】store_goods_sales_records - ledger_name。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_name。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_group_name IS '【说明】销售项目所属的「门店内部分组名称」,类似前台菜单分组或大类标签。 【示例】酒水(用于销售项目所属的「门店内部分组名称」,类似前台菜单分组或大类标签)。 【ODS来源】store_goods_sales_records - ledger_group_name。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_group_name。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_amount IS '【说明】原始应收金额,公式上接近 ledger_unit_price × ledger_count。 【示例】5.0(用于原始应收金额,公式上接近 ledger_unit_price × ledger_count)。 【ODS来源】store_goods_sales_records - ledger_amount。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_amount。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_count IS '【说明】销售数量(以 unit 为单位,unit 字段在门店商品档案中)。 【示例】1(用于销售数量(以 unit 为单位,unit 字段在门店商品档案中))。 【ODS来源】store_goods_sales_records - ledger_count。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_count。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_unit_price IS '【说明】商品在该次销售中的「结算单价」(元/单位)。 【示例】5.0(用于商品在该次销售中的「结算单价」(元/单位))。 【ODS来源】store_goods_sales_records - ledger_unit_price。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_unit_price。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_status IS '【说明】销售流水状态。 【示例】1(用于销售流水状态)。 【ODS来源】store_goods_sales_records - ledger_status。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_status。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.discount_money IS '【说明】本条销售明细的「价格优惠金额」,即原价部分被减免掉的金额。 【示例】0.0(用于本条销售明细的「价格优惠金额」,即原价部分被减免掉的金额)。 【ODS来源】store_goods_sales_records - discount_money。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - discount_money。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.discount_price IS '【说明】折后单价(元/单位)。 【示例】5.0(用于折后单价(元/单位))。 【ODS来源】store_goods_sales_records - discount_price。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - discount_price。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.coupon_deduct_money IS '【说明】被优惠券 / 团购券直接抵扣到这条商品明细上的金额。 【示例】0.0(用于被优惠券 / 团购券直接抵扣到这条商品明细上的金额)。 【ODS来源】store_goods_sales_records - coupon_deduct_money。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - coupon_deduct_money。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.member_discount_amount IS '【说明】由会员身份(会员折扣)针对这一行商品产生的优惠金额。 【示例】0.0(用于由会员身份(会员折扣)针对这一行商品产生的优惠金额)。 【ODS来源】store_goods_sales_records - member_discount_amount。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - member_discount_amount。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_coupon_deduct_money IS '【说明】由优惠券抵扣“选项价格”的金额。 【示例】0.0(用于由优惠券抵扣“选项价格”的金额)。 【ODS来源】store_goods_sales_records - option_coupon_deduct_money。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - option_coupon_deduct_money。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_member_discount_money IS '【说明】由会员折扣作用在“选项价格”上的优惠金额。 【示例】0.0(用于由会员折扣作用在“选项价格”上的优惠金额)。 【ODS来源】store_goods_sales_records - option_member_discount_money。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - option_member_discount_money。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.point_discount_money IS '【说明】由积分抵扣的金额(顾客兑换积分抵现金额)。 【示例】0.0(用于由积分抵扣的金额(顾客兑换积分抵现金额))。 【ODS来源】store_goods_sales_records - point_discount_money。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - point_discount_money。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.point_discount_money_cost IS '【说明】积分抵扣对应的“成本金额”(后台核算用),例如按积分成本来计提费用。 【示例】0.0(用于积分抵扣对应的“成本金额”(后台核算用),例如按积分成本来计提费用)。 【ODS来源】store_goods_sales_records - point_discount_money_cost。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - point_discount_money_cost。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.real_goods_money IS '【说明】商品实际入账金额(考虑折扣、可能还会考虑其它抵扣后的实际销售金额)。 【示例】5.0(用于商品实际入账金额(考虑折扣、可能还会考虑其它抵扣后的实际销售金额))。 【ODS来源】store_goods_sales_records - real_goods_money。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - real_goods_money。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.cost_money IS '【说明】本条销售对应的成本金额(以元计)。 【示例】0.01(用于本条销售对应的成本金额(以元计))。 【ODS来源】store_goods_sales_records - cost_money。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - cost_money。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.push_money IS '【说明】本条销售对应的提成金额(给营业员/促销员的提成)。 【示例】0.0(用于本条销售对应的提成金额(给营业员/促销员的提成))。 【ODS来源】store_goods_sales_records - push_money。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - push_money。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.sales_type IS '【说明】销售类型。 【示例】1(用于销售类型)。 【ODS来源】store_goods_sales_records - sales_type。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - sales_type。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.is_single_order IS '【说明】是否单独订单标识。 【示例】1(用于是否单独订单标识)。 【ODS来源】store_goods_sales_records - is_single_order。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - is_single_order。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.is_delete IS '【说明】逻辑删除标志。 【示例】0(用于逻辑删除标志)。 【ODS来源】store_goods_sales_records - is_delete。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - is_delete。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.goods_remark IS '【说明】商品备注/口味说明/特殊说明。 【示例】哇哈哈矿泉水(用于商品备注/口味说明/特殊说明)。 【ODS来源】store_goods_sales_records - goods_remark。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - goods_remark。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_price IS '【说明】商品选项(规格/加料)的附加价格。 【示例】0.0(用于商品选项(规格/加料)的附加价格)。 【ODS来源】store_goods_sales_records - option_price。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - option_price。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_value_name IS '【说明】商品选项名称(如规格、口味:大杯/小杯,不加冰等)。 【示例】NULL(用于商品选项名称(如规格、口味:大杯/小杯,不加冰等))。 【ODS来源】store_goods_sales_records - option_value_name。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - option_value_name。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】store_goods_sales_records - option_name。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - option_name。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.member_coupon_id IS '【说明】会员券 ID(比如会员专享优惠券)。 【示例】0(用于会员券 ID(比如会员专享优惠券))。 【ODS来源】store_goods_sales_records - member_coupon_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - member_coupon_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.package_coupon_id IS '【说明】套餐券 ID。 【示例】0(用于套餐券 ID)。 【ODS来源】store_goods_sales_records - package_coupon_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - package_coupon_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.sales_man_org_id IS '【说明】营业员所属组织/部门 ID。 【示例】0(用于营业员所属组织/部门 ID)。 【ODS来源】store_goods_sales_records - sales_man_org_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - sales_man_org_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.salesman_name IS '【说明】营业员姓名(如果有为具体销售员记业绩,则在此填姓名)。 【示例】NULL(用于营业员姓名(如果有为具体销售员记业绩,则在此填姓名))。 【ODS来源】store_goods_sales_records - salesman_name。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - salesman_name。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.salesman_role_id IS '【说明】营业员的系统角色 ID(例如某个角色代码表示“销售员”)。 【示例】0(用于营业员的系统角色 ID(例如某个角色代码表示“销售员”))。 【ODS来源】store_goods_sales_records - salesman_role_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - salesman_role_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.salesman_user_id IS '【说明】营业员用户 ID(系统账号 ID)。 【示例】0(用于营业员用户 ID(系统账号 ID))。 【ODS来源】store_goods_sales_records - salesman_user_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - salesman_user_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.operator_id IS '【说明】操作员 ID(录入这笔销售的员工)。 【示例】2790687322443013(用于操作员 ID(录入这笔销售的员工))。 【ODS来源】store_goods_sales_records - operator_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - operator_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.operator_name IS '【说明】操作员姓名,文字冗余。 【示例】收银员:郑丽珊(用于操作员姓名,文字冗余)。 【ODS来源】store_goods_sales_records - operator_name。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - operator_name。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.openSalesman IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】2(来自 JSON 导出的原始字段,用于保留业务取值。)。 【ODS来源】store_goods_sales_records - openSalesman。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - openSalesman。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.returns_number IS '【说明】退货数量(如果这条明细做了退货,会记录退货数量)。 【示例】0(用于退货数量(如果这条明细做了退货,会记录退货数量))。 【ODS来源】store_goods_sales_records - returns_number。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - returns_number。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.site_table_id IS '【说明】球台 ID。 【示例】2793003705192517(用于球台 ID)。 【ODS来源】store_goods_sales_records - site_table_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - site_table_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_goods_business_id IS '【说明】租户级商品「业务大类」ID(例如“零食类”“酒水类”等更高维度)。 【示例】2790683528317768(用于租户级商品「业务大类」ID(例如“零食类”“酒水类”等更高维度))。 【ODS来源】store_goods_sales_records - tenant_goods_business_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - tenant_goods_business_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_goods_category_id IS '【说明】租户级商品一级分类 ID。 【示例】2790683528350540(用于租户级商品一级分类 ID)。 【ODS来源】store_goods_sales_records - tenant_goods_category_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - tenant_goods_category_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.create_time IS '【说明】销售记录创建时间,通常就是结账时间或录入时间。 【示例】2025-11-09 23:35:57(用于销售记录创建时间,通常就是结账时间或录入时间)。 【ODS来源】store_goods_sales_records - create_time。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - create_time。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【ODS来源】store_goods_sales_records - payload。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - $。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】store_goods_sales_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【ODS来源】store_goods_sales_records - source_file(ETL补充)。 【JSON字段】store_goods_sales_records.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/store_goods_sales_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【ODS来源】store_goods_sales_records - source_endpoint(ETL补充)。 【JSON字段】store_goods_sales_records.json - ETL元数据 - 无。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【ODS来源】store_goods_sales_records - fetched_at(ETL补充)。 【JSON字段】store_goods_sales_records.json - ETL元数据 - 无。'; + + diff --git a/etl_billiards/database/schema_dwd_doc.sql b/etl_billiards/database/schema_dwd_doc.sql index b4d2d3d..17d5955 100644 --- a/etl_billiards/database/schema_dwd_doc.sql +++ b/etl_billiards/database/schema_dwd_doc.sql @@ -1,15 +1,12 @@ --- Generated from DWD?????.docx; includes column comments from?? CREATE SCHEMA IF NOT EXISTS billiards_dwd; SET search_path TO billiards_dwd; --- SCD2 字段统一默认值、中文注释、唯一性(业务键 + 时间段不重叠)控制 CREATE EXTENSION IF NOT EXISTS btree_gist; DO $$ DECLARE rec RECORD; BEGIN - -- 统一 SCD2 默认值与注释,避免后续手工遗漏 FOR rec IN SELECT table_name FROM information_schema.columns @@ -21,13 +18,8 @@ BEGIN EXECUTE format('ALTER TABLE billiards_dwd.%I ALTER COLUMN scd2_is_current SET DEFAULT 1', rec.table_name); EXECUTE format('ALTER TABLE billiards_dwd.%I ALTER COLUMN scd2_version SET DEFAULT 1', rec.table_name); - EXECUTE format('COMMENT ON COLUMN billiards_dwd.%I.scd2_start_time IS ''SCD2 开始时间(版本生效起点)''', rec.table_name); - EXECUTE format('COMMENT ON COLUMN billiards_dwd.%I.scd2_end_time IS ''SCD2 结束时间(默认 9999-12-31,表示当前版本仍有效)''', rec.table_name); - EXECUTE format('COMMENT ON COLUMN billiards_dwd.%I.scd2_is_current IS ''SCD2 当前版本标记:1=当前版本,0=历史版本''', rec.table_name); - EXECUTE format('COMMENT ON COLUMN billiards_dwd.%I.scd2_version IS ''SCD2 版本号,自增,配合时间段避免重叠''', rec.table_name); END LOOP; - -- 约束:同一业务键时间段不重叠,且仅有一条当前版本 FOR rec IN ( SELECT tc.table_name, string_agg(format('%I WITH =', kcu.column_name), ', ' ORDER BY kcu.ordinal_position) AS pk_eq_expr, @@ -73,13 +65,7 @@ BEGIN END $$; --- SCD2 统一约定(DIM 表使用): --- SCD2_start_time TIMESTAMPTZ DEFAULT now() -- 版本开始时间 --- SCD2_end_time TIMESTAMPTZ DEFAULT '9999-12-31' -- 版本结束时间 --- SCD2_is_current INT DEFAULT 1 -- 当前版本标记(1当前/0历史) --- SCD2_version INT DEFAULT 1 -- 版本号,自增 --- dim_site CREATE TABLE IF NOT EXISTS dim_site ( site_id BIGINT, org_id BIGINT, @@ -100,21 +86,27 @@ CREATE TABLE IF NOT EXISTS dim_site ( SCD2_version INT DEFAULT 1, PRIMARY KEY (site_id) ); -COMMENT ON COLUMN dim_site.site_id IS '???? ID?????????????????? site_id ??? | ??: siteProfile.id | ??: ??'; -COMMENT ON COLUMN dim_site.org_id IS '???? ID?????????? | ??: siteProfile.org_id | ??: ??'; -COMMENT ON COLUMN dim_site.tenant_id IS '?? ID????? tenant_id ??? | ??: siteProfile.tenant_id | ??: ??'; -COMMENT ON COLUMN dim_site.shop_name IS '????????? | ??: siteProfile.shop_name'; -COMMENT ON COLUMN dim_site.site_label IS '???????????????? | ??: siteProfile.site_label'; -COMMENT ON COLUMN dim_site.full_address IS '??????? | ??: siteProfile.full_address'; -COMMENT ON COLUMN dim_site.address IS '???????????? | ??: siteProfile.address'; -COMMENT ON COLUMN dim_site.longitude IS '???????? | ??: siteProfile.longitude'; -COMMENT ON COLUMN dim_site.latitude IS '???????? | ??: siteProfile.latitude'; -COMMENT ON COLUMN dim_site.tenant_site_region_id IS '????/?????????? | ??: siteProfile.tenant_site_region_id'; -COMMENT ON COLUMN dim_site.business_tel IS '????? | ??: siteProfile.business_tel'; -COMMENT ON COLUMN dim_site.site_type IS '??????????????????? | ??: siteProfile.site_type'; -COMMENT ON COLUMN dim_site.shop_status IS '??????????????????? | ??: siteProfile.shop_status'; --- dim_site_Ex +COMMENT ON TABLE billiards_dwd.dim_site IS 'DWD 维度表:dim_site。ODS 来源表:billiards_ods.table_fee_transactions(对应 JSON:table_fee_transactions.json;分析:table_fee_transactions-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dim_site.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - site_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - site_id。'; +COMMENT ON COLUMN billiards_dwd.dim_site.org_id IS '【说明】组织/机构 ID,用于组织维度归属。 【示例】2790684179467077(组织/机构 ID,用于组织维度归属)。 【ODS来源】table_fee_transactions - siteProfile.org_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - org_id。'; +COMMENT ON COLUMN billiards_dwd.dim_site.tenant_id IS '【说明】租户/品牌 ID,用于商户维度过滤与关联。 【示例】2790683160709957(租户/品牌 ID,用于商户维度过滤与关联)。 【ODS来源】table_fee_transactions - siteProfile.tenant_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - tenant_id。'; +COMMENT ON COLUMN billiards_dwd.dim_site.shop_name IS '【说明】门店名称,用于展示与查询。 【示例】朗朗桌球(门店名称,用于展示与查询)。 【ODS来源】table_fee_transactions - siteProfile.shop_name。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - shop_name。'; +COMMENT ON COLUMN billiards_dwd.dim_site.site_label IS '【说明】门店标签(如 A/B 店),用于展示与分组。 【示例】A(门店标签(如 A/B 店),用于展示与分组)。 【ODS来源】table_fee_transactions - siteProfile.site_label。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - site_label。'; +COMMENT ON COLUMN billiards_dwd.dim_site.full_address IS '【说明】门店详细地址,用于展示与地理信息。 【示例】广东省广州市天河区丽阳街12号(门店详细地址,用于展示与地理信息)。 【ODS来源】table_fee_transactions - siteProfile.full_address。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - full_address。'; +COMMENT ON COLUMN billiards_dwd.dim_site.address IS '【说明】门店地址简称/快照,用于展示。 【示例】广东省广州市天河区天园街道朗朗桌球(门店地址简称/快照,用于展示)。 【ODS来源】table_fee_transactions - siteProfile.address。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - address。'; +COMMENT ON COLUMN billiards_dwd.dim_site.longitude IS '【说明】经度,用于定位与地图展示。 【示例】113.360321(经度,用于定位与地图展示)。 【ODS来源】table_fee_transactions - siteProfile.longitude。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - longitude(派生:CAST(longitude AS numeric))。'; +COMMENT ON COLUMN billiards_dwd.dim_site.latitude IS '【说明】纬度,用于定位与地图展示。 【示例】23.133629(纬度,用于定位与地图展示)。 【ODS来源】table_fee_transactions - siteProfile.latitude。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - latitude(派生:CAST(latitude AS numeric))。'; +COMMENT ON COLUMN billiards_dwd.dim_site.tenant_site_region_id IS '【说明】租户下门店区域 ID,用于区域维度分析。 【示例】156440100(租户下门店区域 ID,用于区域维度分析)。 【ODS来源】table_fee_transactions - siteProfile.tenant_site_region_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - tenant_site_region_id。'; +COMMENT ON COLUMN billiards_dwd.dim_site.business_tel IS '【说明】门店电话,用于联系信息展示。 【示例】13316068642(门店电话,用于联系信息展示)。 【ODS来源】table_fee_transactions - siteProfile.business_tel。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - business_tel。'; +COMMENT ON COLUMN billiards_dwd.dim_site.site_type IS '【说明】门店类型枚举,用于门店分类。 【示例】1(门店类型枚举,用于门店分类)。 【ODS来源】table_fee_transactions - siteProfile.site_type。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - site_type。'; +COMMENT ON COLUMN billiards_dwd.dim_site.shop_status IS '【说明】门店状态枚举,用于营业状态标识。 【示例】1(门店状态枚举,用于营业状态标识)。 【ODS来源】table_fee_transactions - siteProfile.shop_status。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - shop_status。'; +COMMENT ON COLUMN billiards_dwd.dim_site.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】table_fee_transactions - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_site.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】table_fee_transactions - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_site.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】table_fee_transactions - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_site.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】table_fee_transactions - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; + + CREATE TABLE IF NOT EXISTS dim_site_Ex ( site_id BIGINT, avatar TEXT, @@ -143,29 +135,35 @@ CREATE TABLE IF NOT EXISTS dim_site_Ex ( SCD2_version INT DEFAULT 1, PRIMARY KEY (site_id) ); -COMMENT ON COLUMN dim_site_Ex.site_id IS '门店主键 ID,唯一标识一家门店。与所有事实表中的 site_id 对应。 | 来源: siteProfile.id | 角色: 主键'; -COMMENT ON COLUMN dim_site_Ex.avatar IS '门店头像 URL。 | 来源: siteProfile.avatar'; -COMMENT ON COLUMN dim_site_Ex.address IS '地址简写。 | 来源: siteProfile.address'; -COMMENT ON COLUMN dim_site_Ex.longitude IS '经度。 | 来源: siteProfile.longitude'; -COMMENT ON COLUMN dim_site_Ex.latitude IS '纬度。 | 来源: siteProfile.latitude'; -COMMENT ON COLUMN dim_site_Ex.tenant_site_region_id IS '地区编码。 | 来源: siteProfile.tenant_site_region_id'; -COMMENT ON COLUMN dim_site_Ex.auto_light IS '是否自动控制灯光:1=是,2=否(根据系统约定)。 | 来源: siteProfile.auto_light'; -COMMENT ON COLUMN dim_site_Ex.light_status IS '灯光状态,系统预留字段。 | 来源: siteProfile.light_status'; -COMMENT ON COLUMN dim_site_Ex.light_type IS '灯光类型,预留字段。 | 来源: siteProfile.light_type'; -COMMENT ON COLUMN dim_site_Ex.light_token IS '灯光控制令牌。 | 来源: siteProfile.light_token'; -COMMENT ON COLUMN dim_site_Ex.site_type IS '门店类型枚举(未在导出中说明,视系统配置)。 | 来源: siteProfile.site_type'; -COMMENT ON COLUMN dim_site_Ex.site_label IS '门店标签,展示用。 | 来源: siteProfile.site_label'; -COMMENT ON COLUMN dim_site_Ex.attendance_enabled IS '门店是否启用考勤功能:1=启用,2=不启用。 | 来源: siteProfile.attendance_enabled'; -COMMENT ON COLUMN dim_site_Ex.attendance_distance IS '考勤打卡距离限制(米)。 | 来源: siteProfile.attendance_distance'; -COMMENT ON COLUMN dim_site_Ex.customer_service_qrcode IS '客服二维码 URL。 | 来源: siteProfile.customer_service_qrcode'; -COMMENT ON COLUMN dim_site_Ex.customer_service_wechat IS '客服微信号。 | 来源: siteProfile.customer_service_wechat'; -COMMENT ON COLUMN dim_site_Ex.fixed_pay_qrCode IS '固定收款二维码。 | 来源: siteProfile.fixed_pay_qrCode'; -COMMENT ON COLUMN dim_site_Ex.prod_env IS '环境标记(生产/测试)。 | 来源: siteProfile.prod_env'; -COMMENT ON COLUMN dim_site_Ex.shop_status IS '门店状态,未在文档解释。 | 来源: siteProfile.shop_status'; -COMMENT ON COLUMN dim_site_Ex.create_time IS '门店创建时间。 | 来源: siteProfile.create_time'; -COMMENT ON COLUMN dim_site_Ex.update_time IS '门店最近更新时间。 | 来源: siteProfile.update_time'; --- dim_table +COMMENT ON TABLE billiards_dwd.dim_site_ex IS 'DWD 维度表(扩展字段表):dim_site_ex。ODS 来源表:billiards_ods.table_fee_transactions(对应 JSON:table_fee_transactions.json;分析:table_fee_transactions-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dim_site_ex.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - site_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - site_id。'; +COMMENT ON COLUMN billiards_dwd.dim_site_ex.avatar IS '【说明】门店头像/图片 URL,用于展示。 【示例】https://oss.ficoo.vip/admin/hXcE4E_1752495052016.jpg(门店头像/图片 URL,用于展示)。 【ODS来源】table_fee_transactions - siteProfile.avatar。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - avatar。'; +COMMENT ON COLUMN billiards_dwd.dim_site_ex.address IS '【说明】门店地址简称/快照,用于展示。 【示例】广东省广州市天河区天园街道朗朗桌球(门店地址简称/快照,用于展示)。 【ODS来源】table_fee_transactions - siteProfile.address。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - address。'; +COMMENT ON COLUMN billiards_dwd.dim_site_ex.longitude IS '【说明】经度,用于定位与地图展示。 【示例】113.360321(经度,用于定位与地图展示)。 【ODS来源】table_fee_transactions - siteProfile.longitude。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - longitude(派生:CAST(longitude AS numeric))。'; +COMMENT ON COLUMN billiards_dwd.dim_site_ex.latitude IS '【说明】纬度,用于定位与地图展示。 【示例】23.133629(纬度,用于定位与地图展示)。 【ODS来源】table_fee_transactions - siteProfile.latitude。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - latitude(派生:CAST(latitude AS numeric))。'; +COMMENT ON COLUMN billiards_dwd.dim_site_ex.tenant_site_region_id IS '【说明】租户下门店区域 ID,用于区域维度分析。 【示例】156440100(租户下门店区域 ID,用于区域维度分析)。 【ODS来源】table_fee_transactions - siteProfile.tenant_site_region_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - tenant_site_region_id。'; +COMMENT ON COLUMN billiards_dwd.dim_site_ex.auto_light IS '【说明】是否启用自动灯控配置,用于门店设备策略。 【示例】1(是否启用自动灯控配置,用于门店设备策略)。 【ODS来源】table_fee_transactions - siteProfile.auto_light。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - auto_light。'; +COMMENT ON COLUMN billiards_dwd.dim_site_ex.light_status IS '【说明】灯控状态/开关,用于灯控设备管理。 【示例】1(灯控状态/开关,用于灯控设备管理)。 【ODS来源】table_fee_transactions - siteProfile.light_status。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - light_status。'; +COMMENT ON COLUMN billiards_dwd.dim_site_ex.light_type IS '【说明】灯控类型,用于设备类型区分。 【示例】0(灯控类型,用于设备类型区分)。 【ODS来源】table_fee_transactions - siteProfile.light_type。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - light_type。'; +COMMENT ON COLUMN billiards_dwd.dim_site_ex.light_token IS '【说明】灯控控制令牌,用于对接灯控服务。 【示例】NULL(灯控控制令牌,用于对接灯控服务)。 【ODS来源】table_fee_transactions - siteProfile.light_token。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - light_token。'; +COMMENT ON COLUMN billiards_dwd.dim_site_ex.site_type IS '【说明】门店类型枚举,用于门店分类。 【示例】1(门店类型枚举,用于门店分类)。 【ODS来源】table_fee_transactions - siteProfile.site_type。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - site_type。'; +COMMENT ON COLUMN billiards_dwd.dim_site_ex.site_label IS '【说明】门店标签(如 A/B 店),用于展示与分组。 【示例】A(门店标签(如 A/B 店),用于展示与分组)。 【ODS来源】table_fee_transactions - siteProfile.site_label。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - site_label。'; +COMMENT ON COLUMN billiards_dwd.dim_site_ex.attendance_enabled IS '【说明】是否启用考勤功能,用于门店考勤配置。 【示例】1(是否启用考勤功能,用于门店考勤配置)。 【ODS来源】table_fee_transactions - siteProfile.attendance_enabled。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - attendance_enabled。'; +COMMENT ON COLUMN billiards_dwd.dim_site_ex.attendance_distance IS '【说明】考勤允许距离(米),用于考勤打卡限制。 【示例】0(考勤允许距离(米),用于考勤打卡限制)。 【ODS来源】table_fee_transactions - siteProfile.attendance_distance。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - attendance_distance。'; +COMMENT ON COLUMN billiards_dwd.dim_site_ex.customer_service_qrcode IS '【说明】客服二维码 URL,用于引导联系。 【示例】NULL(客服二维码 URL,用于引导联系)。 【ODS来源】table_fee_transactions - siteProfile.customer_service_qrcode。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - customer_service_qrcode。'; +COMMENT ON COLUMN billiards_dwd.dim_site_ex.customer_service_wechat IS '【说明】客服微信号,用于引导联系。 【示例】NULL(客服微信号,用于引导联系)。 【ODS来源】table_fee_transactions - siteProfile.customer_service_wechat。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - customer_service_wechat。'; +COMMENT ON COLUMN billiards_dwd.dim_site_ex.fixed_pay_qrcode IS '【说明】固定收款码(二维码)URL,用于收款引导。 【示例】NULL(固定收款码(二维码)URL,用于收款引导)。 【ODS来源】table_fee_transactions - siteProfile.fixed_pay_qrCode。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - fixed_pay_qrCode。'; +COMMENT ON COLUMN billiards_dwd.dim_site_ex.prod_env IS '【说明】环境标识(生产/测试),用于区分配置环境。 【示例】1(环境标识(生产/测试),用于区分配置环境)。 【ODS来源】table_fee_transactions - siteProfile.prod_env。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - prod_env。'; +COMMENT ON COLUMN billiards_dwd.dim_site_ex.shop_status IS '【说明】门店状态枚举,用于营业状态标识。 【示例】1(门店状态枚举,用于营业状态标识)。 【ODS来源】table_fee_transactions - siteProfile.shop_status。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - shop_status。'; +COMMENT ON COLUMN billiards_dwd.dim_site_ex.create_time IS '【说明】门店创建时间(快照字段)。 【示例】NULL(用于门店创建时间(快照字段))。 【ODS来源】table_fee_transactions - siteProfile.create_time。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - create_time(派生:CAST(create_time AS timestamptz))。'; +COMMENT ON COLUMN billiards_dwd.dim_site_ex.update_time IS '【说明】门店更新时间(快照字段)。 【示例】NULL(用于门店更新时间(快照字段))。 【ODS来源】table_fee_transactions - siteProfile.update_time。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList.siteProfile - update_time(派生:CAST(update_time AS timestamptz))。'; +COMMENT ON COLUMN billiards_dwd.dim_site_ex.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】table_fee_transactions - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_site_ex.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】table_fee_transactions - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_site_ex.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】table_fee_transactions - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_site_ex.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】table_fee_transactions - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; + + CREATE TABLE IF NOT EXISTS dim_table ( table_id BIGINT, site_id BIGINT, @@ -180,15 +178,21 @@ CREATE TABLE IF NOT EXISTS dim_table ( SCD2_version INT DEFAULT 1, PRIMARY KEY (table_id) ); -COMMENT ON COLUMN dim_table.table_id IS '台桌主键,唯一标识一张台或包厢。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dim_table.site_id IS '门店 ID。 | 来源: siteId | 角色: 外键'; -COMMENT ON COLUMN dim_table.table_name IS '台桌名称/编号,如 A17、888。 | 来源: tableName'; -COMMENT ON COLUMN dim_table.site_table_area_id IS '门店区 ID,用于区分 A区/B区/补时区等。 | 来源: siteTableAreaId | 角色: 外键'; -COMMENT ON COLUMN dim_table.site_table_area_name IS '区域名称,如 “A区”“补时长”。 | 来源: siteTableAreaName'; -COMMENT ON COLUMN dim_table.tenant_table_area_id IS '租户级区域 ID。 | 来源: tenantTableAreaId | 角色: 外键'; -COMMENT ON COLUMN dim_table.table_price IS '台桌基础单价,从table_fee_transactions取值。方法:对应本表id,table_fee_transactions表的site_table_id。'; --- dim_table_Ex +COMMENT ON TABLE billiards_dwd.dim_table IS 'DWD 维度表:dim_table。ODS 来源表:billiards_ods.site_tables_master(对应 JSON:site_tables_master.json;分析:site_tables_master-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dim_table.table_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2791964216463493(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】site_tables_master - id。 【JSON字段】site_tables_master.json - data.siteTables - id。'; +COMMENT ON COLUMN billiards_dwd.dim_table.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】site_tables_master - site_id。 【JSON字段】site_tables_master.json - data.siteTables - site_id。'; +COMMENT ON COLUMN billiards_dwd.dim_table.table_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】A1(名称字段,用于展示与辅助识别)。 【ODS来源】site_tables_master - table_name。 【JSON字段】site_tables_master.json - data.siteTables - table_name。'; +COMMENT ON COLUMN billiards_dwd.dim_table.site_table_area_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2791963794329671(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】site_tables_master - site_table_area_id。 【JSON字段】site_tables_master.json - data.siteTables - site_table_area_id。'; +COMMENT ON COLUMN billiards_dwd.dim_table.site_table_area_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】A区(名称字段,用于展示与辅助识别)。 【ODS来源】site_tables_master - areaName。 【JSON字段】site_tables_master.json - data.siteTables - areaName。'; +COMMENT ON COLUMN billiards_dwd.dim_table.tenant_table_area_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2791963794329671(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】site_tables_master - site_table_area_id。 【JSON字段】site_tables_master.json - data.siteTables - site_table_area_id。'; +COMMENT ON COLUMN billiards_dwd.dim_table.table_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】site_tables_master - table_price。 【JSON字段】site_tables_master.json - data.siteTables - table_price。'; +COMMENT ON COLUMN billiards_dwd.dim_table.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】site_tables_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_table.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】site_tables_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_table.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】site_tables_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_table.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】site_tables_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; + + CREATE TABLE IF NOT EXISTS dim_table_Ex ( table_id BIGINT, show_status INTEGER, @@ -202,14 +206,20 @@ CREATE TABLE IF NOT EXISTS dim_table_Ex ( SCD2_version INT DEFAULT 1, PRIMARY KEY (table_id) ); -COMMENT ON COLUMN dim_table_Ex.table_id IS '台桌主键,唯一标识一张台或包厢。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dim_table_Ex.show_status IS '显示状态:1=正常台;其他值=特殊用途(包厢、补时长等)。 | 来源: showStatus'; -COMMENT ON COLUMN dim_table_Ex.is_online_reservation IS '是否可线上预约:1=是,2=否。 | 来源: isOnlineReservation'; -COMMENT ON COLUMN dim_table_Ex.table_cloth_use_time IS '已使用台呢时长(秒)。 | 来源: tableClothUseTime'; -COMMENT ON COLUMN dim_table_Ex.table_cloth_use_cycle IS '台呢更换周期阈值(秒)。 | 来源: tableClothUseCycle'; -COMMENT ON COLUMN dim_table_Ex.table_status IS '当前台桌状态:1=空闲,2=使用中,3=暂停中,4=锁定。 | 来源: tableStatus'; --- dim_assistant +COMMENT ON TABLE billiards_dwd.dim_table_ex IS 'DWD 维度表(扩展字段表):dim_table_ex。ODS 来源表:billiards_ods.site_tables_master(对应 JSON:site_tables_master.json;分析:site_tables_master-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dim_table_ex.table_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2791964216463493(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】site_tables_master - id。 【JSON字段】site_tables_master.json - data.siteTables - id。'; +COMMENT ON COLUMN billiards_dwd.dim_table_ex.show_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】site_tables_master - show_status。 【JSON字段】site_tables_master.json - data.siteTables - show_status。'; +COMMENT ON COLUMN billiards_dwd.dim_table_ex.is_online_reservation IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】2(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】site_tables_master - is_online_reservation。 【JSON字段】site_tables_master.json - data.siteTables - is_online_reservation。'; +COMMENT ON COLUMN billiards_dwd.dim_table_ex.table_cloth_use_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】1863727(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】site_tables_master - table_cloth_use_time。 【JSON字段】site_tables_master.json - data.siteTables - table_cloth_use_time。'; +COMMENT ON COLUMN billiards_dwd.dim_table_ex.table_cloth_use_cycle IS '【说明】维度字段,用于补充维度属性。 【示例】0(维度字段,用于补充维度属性)。 【ODS来源】site_tables_master - table_cloth_use_Cycle。 【JSON字段】site_tables_master.json - data.siteTables - table_cloth_use_Cycle。'; +COMMENT ON COLUMN billiards_dwd.dim_table_ex.table_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】site_tables_master - table_status。 【JSON字段】site_tables_master.json - data.siteTables - table_status。'; +COMMENT ON COLUMN billiards_dwd.dim_table_ex.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】site_tables_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_table_ex.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】site_tables_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_table_ex.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】site_tables_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_table_ex.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】site_tables_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; + + CREATE TABLE IF NOT EXISTS dim_assistant ( assistant_id BIGINT, user_id BIGINT, @@ -232,23 +242,29 @@ CREATE TABLE IF NOT EXISTS dim_assistant ( SCD2_version INT, PRIMARY KEY (assistant_id) ); -COMMENT ON COLUMN dim_assistant.assistant_id IS '助教账号 ID,关联助教服务流水表。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dim_assistant.user_id IS '系统用户 ID,用于统一跨模块身份。 | 来源: user_id | 角色: 外键'; -COMMENT ON COLUMN dim_assistant.assistant_no IS '助教工号/编号,业务识别用。 | 来源: assistant_no'; -COMMENT ON COLUMN dim_assistant.real_name IS '助教真实姓名。 | 来源: real_name'; -COMMENT ON COLUMN dim_assistant.nickname IS '前台展示昵称。 | 来源: nickname'; -COMMENT ON COLUMN dim_assistant.mobile IS '手机号码。 | 来源: mobile'; -COMMENT ON COLUMN dim_assistant.tenant_id IS '租户 ID。 | 来源: tenant_id | 角色: 外键'; -COMMENT ON COLUMN dim_assistant.site_id IS '门店 ID。 | 来源: site_id | 角色: 外键'; -COMMENT ON COLUMN dim_assistant.team_id IS '助教团队 ID。 | 来源: team_id | 角色: 外键'; -COMMENT ON COLUMN dim_assistant.team_name IS '团队名称。 | 来源: team_name'; -COMMENT ON COLUMN dim_assistant.level IS '助教等级:8=管理员、10=初级、20=中级、30=高级、40=专家。 | 来源: level'; -COMMENT ON COLUMN dim_assistant.entry_time IS '入职时间。 | 来源: entry_time'; -COMMENT ON COLUMN dim_assistant.resign_time IS '离职时间;远未来日期表示在职。 | 来源: resign_time'; -COMMENT ON COLUMN dim_assistant.leave_status IS '在职状态:0=在职,1=已离职。 | 来源: leave_status'; -COMMENT ON COLUMN dim_assistant.assistant_status IS '账号启用状态:1=启用,2=停用/冻结。 | 来源: assistant_status'; --- dim_assistant_Ex +COMMENT ON TABLE billiards_dwd.dim_assistant IS 'DWD 维度表:dim_assistant。ODS 来源表:billiards_ods.assistant_accounts_master(对应 JSON:assistant_accounts_master.json;分析:assistant_accounts_master-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant.assistant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2947562271297029(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_accounts_master - id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - id。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant.user_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_accounts_master - staff_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - staff_id。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant.assistant_no IS '【说明】维度字段,用于补充维度属性。 【示例】31(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - assistant_no。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - assistant_no。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant.real_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】张静然(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_accounts_master - real_name。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - real_name。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant.nickname IS '【说明】名称字段,用于展示与辅助识别。 【示例】小然(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_accounts_master - nickname。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - nickname。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant.mobile IS '【说明】维度字段,用于补充维度属性。 【示例】15119679931(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - mobile。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - mobile。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_accounts_master - tenant_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - tenant_id。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_accounts_master - site_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - site_id。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant.team_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2792011585884037(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_accounts_master - team_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - team_id。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant.team_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】1组(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_accounts_master - team_name。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - team_name。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant.level IS '【说明】维度字段,用于补充维度属性。 【示例】20(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - level。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - level。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant.entry_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-02 08:00:00(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_accounts_master - entry_time。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - entry_time。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant.resign_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-03 08:00:00(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_accounts_master - resign_time。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - resign_time。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant.leave_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】assistant_accounts_master - leave_status。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - leave_status。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant.assistant_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】assistant_accounts_master - assistant_status。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - assistant_status。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】assistant_accounts_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】assistant_accounts_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】assistant_accounts_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】assistant_accounts_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; + + CREATE TABLE IF NOT EXISTS dim_assistant_Ex ( assistant_id BIGINT, gender INTEGER, @@ -300,52 +316,58 @@ CREATE TABLE IF NOT EXISTS dim_assistant_Ex ( SCD2_version INT, PRIMARY KEY (assistant_id) ); -COMMENT ON COLUMN dim_assistant_Ex.assistant_id IS '助教账号 ID,关联助教服务流水表。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dim_assistant_Ex.gender IS '性别枚举:0=未填/保密,1=男,2=女。 | 来源: gender'; -COMMENT ON COLUMN dim_assistant_Ex.birth_date IS '出生日期,默认为 0001-01-01 表示未设置。 | 来源: birth_date'; -COMMENT ON COLUMN dim_assistant_Ex.avatar IS '头像 URL。 | 来源: avatar'; -COMMENT ON COLUMN dim_assistant_Ex.introduce IS '个人简介文案(目前为空)。 | 来源: introduce'; -COMMENT ON COLUMN dim_assistant_Ex.video_introduction_url IS '视频介绍 URL。 | 来源: video_introduction_url'; -COMMENT ON COLUMN dim_assistant_Ex.height IS '身高(厘米),0 表示未填。 | 来源: height'; -COMMENT ON COLUMN dim_assistant_Ex.weight IS '体重(公斤),0 表示未填。 | 来源: weight'; -COMMENT ON COLUMN dim_assistant_Ex.shop_name IS '门店名称。 | 来源: shop_name'; -COMMENT ON COLUMN dim_assistant_Ex.group_id IS '上级分组 ID,未使用。 | 来源: group_id'; -COMMENT ON COLUMN dim_assistant_Ex.group_name IS '上级分组名称,空。 | 来源: group_name'; -COMMENT ON COLUMN dim_assistant_Ex.person_org_id IS '人事组织 ID,用于权限和报表分组。 | 来源: person_org_id'; -COMMENT ON COLUMN dim_assistant_Ex.staff_id IS '预留员工 ID(全部为0)。 | 来源: staff_id'; -COMMENT ON COLUMN dim_assistant_Ex.staff_profile_id IS '外部人事档案 ID(全部为0)。 | 来源: staff_profile_id'; -COMMENT ON COLUMN dim_assistant_Ex.assistant_grade IS '平均评分(0 表示暂无)。 | 来源: assistant_grade'; -COMMENT ON COLUMN dim_assistant_Ex.sum_grade IS '总评分累加值。 | 来源: sum_grade'; -COMMENT ON COLUMN dim_assistant_Ex.get_grade_times IS '累计评分次数。 | 来源: get_grade_times'; -COMMENT ON COLUMN dim_assistant_Ex.charge_way IS '计费方式:2=计时,其他未出现。 | 来源: charge_way'; -COMMENT ON COLUMN dim_assistant_Ex.allow_cx IS '是否允许促销计费:1=允许。 | 来源: allow_cx'; -COMMENT ON COLUMN dim_assistant_Ex.is_guaranteed IS '是否有保底:1=是。 | 来源: is_guaranteed'; -COMMENT ON COLUMN dim_assistant_Ex.salary_grant_enabled IS '薪资发放开关(值2,具体含义未知)。 | 来源: salary_grant_enabled'; -COMMENT ON COLUMN dim_assistant_Ex.entry_type IS '入职类型:1=正式;其他未出现。 | 来源: entry_type'; -COMMENT ON COLUMN dim_assistant_Ex.entry_sign_status IS '入职签约状态:0=未签约,1=已签约(未出现)。 | 来源: entry_sign_status'; -COMMENT ON COLUMN dim_assistant_Ex.resign_sign_status IS '离职签约状态,未出现非 0。 | 来源: resign_sign_status'; -COMMENT ON COLUMN dim_assistant_Ex.work_status IS '工作状态:1=在岗,2=离岗。与 leave_status 呼应。 | 来源: work_status'; -COMMENT ON COLUMN dim_assistant_Ex.show_status IS '前台展示状态:1=显示;其他值未出现。 | 来源: show_status'; -COMMENT ON COLUMN dim_assistant_Ex.show_sort IS '前端排序序号。 | 来源: show_sort'; -COMMENT ON COLUMN dim_assistant_Ex.online_status IS '在线状态:1=在线。 | 来源: online_status'; -COMMENT ON COLUMN dim_assistant_Ex.is_delete IS '逻辑删除标记:0=未删除,1=已删除。 | 来源: is_delete'; -COMMENT ON COLUMN dim_assistant_Ex.criticism_status IS '投诉状态:1=正常,2=有投诉。 | 来源: criticism_status'; -COMMENT ON COLUMN dim_assistant_Ex.create_time IS '账号创建时间。 | 来源: create_time'; -COMMENT ON COLUMN dim_assistant_Ex.update_time IS '账号最近修改时间。 | 来源: update_time'; -COMMENT ON COLUMN dim_assistant_Ex.start_time IS '配置生效开始时间。 | 来源: start_time'; -COMMENT ON COLUMN dim_assistant_Ex.end_time IS '配置生效结束时间。 | 来源: end_time'; -COMMENT ON COLUMN dim_assistant_Ex.last_table_id IS '最近服务的台桌 ID(未必存在)。 | 来源: last_table_id'; -COMMENT ON COLUMN dim_assistant_Ex.last_table_name IS '最近服务球台名称。 | 来源: last_table_name'; -COMMENT ON COLUMN dim_assistant_Ex.last_update_name IS '最近更新该账号的管理员。 | 来源: last_update_name'; -COMMENT ON COLUMN dim_assistant_Ex.order_trade_no IS '最近关联的订单号(非外键,仅做展示)。 | 来源: order_trade_no'; -COMMENT ON COLUMN dim_assistant_Ex.ding_talk_synced IS '是否同步钉钉:1=已同步。 | 来源: ding_talk_synced'; -COMMENT ON COLUMN dim_assistant_Ex.site_light_cfg_id IS '灯控配置 ID(未启用)。 | 来源: site_light_cfg_id'; -COMMENT ON COLUMN dim_assistant_Ex.light_equipment_id IS '灯控设备 ID(未启用)。 | 来源: light_equipment_id'; -COMMENT ON COLUMN dim_assistant_Ex.light_status IS '灯控状态(值2,具体含义未知)。 | 来源: light_status'; -COMMENT ON COLUMN dim_assistant_Ex.is_team_leader IS '是否团队长:0=否,1=是。 | 来源: is_team_leader'; -COMMENT ON COLUMN dim_assistant_Ex.serial_number IS '来源: serial_number'; --- dim_member +COMMENT ON TABLE billiards_dwd.dim_assistant_ex IS 'DWD 维度表(扩展字段表):dim_assistant_ex。ODS 来源表:billiards_ods.assistant_accounts_master(对应 JSON:assistant_accounts_master.json;分析:assistant_accounts_master-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.assistant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2947562271297029(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_accounts_master - id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - id。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.gender IS '【说明】维度字段,用于补充维度属性。 【示例】0(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - gender。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - gender。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.birth_date IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】0001-01-01 00:00:00(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_accounts_master - birth_date。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - birth_date。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.avatar IS '【说明】维度字段,用于补充维度属性。 【示例】https://oss.ficoo.vip/maUiImages/images/defaultAvatar.png(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - avatar。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - avatar。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.introduce IS '【说明】维度字段,用于补充维度属性。 【示例】NULL(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - introduce。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - introduce。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.video_introduction_url IS '【说明】维度字段,用于补充维度属性。 【示例】https://oss.ficoo.vip/cbb/userVideo/1753096246308/175309624630830.mp4(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - video_introduction_url。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - video_introduction_url。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.height IS '【说明】维度字段,用于补充维度属性。 【示例】0.0(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - height。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - height。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.weight IS '【说明】维度字段,用于补充维度属性。 【示例】0.0(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - weight。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - weight。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.shop_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】朗朗桌球(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_accounts_master - shop_name。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - shop_name。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.group_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_accounts_master - group_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - group_id。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.group_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_accounts_master - group_name。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - group_name。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.person_org_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2947562271215109(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_accounts_master - person_org_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - person_org_id。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.staff_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_accounts_master - staff_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - staff_id。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.staff_profile_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_accounts_master - staff_profile_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - staff_profile_id。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.assistant_grade IS '【说明】维度字段,用于补充维度属性。 【示例】0.0(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - assistant_grade。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - assistant_grade。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.sum_grade IS '【说明】维度字段,用于补充维度属性。 【示例】0.0(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - sum_grade。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - sum_grade。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.get_grade_times IS '【说明】维度字段,用于补充维度属性。 【示例】0(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - get_grade_times。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - get_grade_times。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.charge_way IS '【说明】维度字段,用于补充维度属性。 【示例】2(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - charge_way。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - charge_way。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.allow_cx IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - allow_cx。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - allow_cx。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.is_guaranteed IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】1(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】assistant_accounts_master - is_guaranteed。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - is_guaranteed。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.salary_grant_enabled IS '【说明】维度字段,用于补充维度属性。 【示例】2(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - salary_grant_enabled。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - salary_grant_enabled。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.entry_type IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - entry_type。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - entry_type。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.entry_sign_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】0(状态枚举字段,用于标识业务状态)。 【ODS来源】assistant_accounts_master - entry_sign_status。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - entry_sign_status。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.resign_sign_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】0(状态枚举字段,用于标识业务状态)。 【ODS来源】assistant_accounts_master - resign_sign_status。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - resign_sign_status。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.work_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】2(状态枚举字段,用于标识业务状态)。 【ODS来源】assistant_accounts_master - work_status。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - work_status。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.show_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】assistant_accounts_master - show_status。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - show_status。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.show_sort IS '【说明】维度字段,用于补充维度属性。 【示例】31(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - show_sort。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - show_sort。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.online_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】assistant_accounts_master - online_status。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - online_status。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.is_delete IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】assistant_accounts_master - is_delete。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - is_delete。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.criticism_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】assistant_accounts_master - criticism_status。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - criticism_status。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-02 15:55:26(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_accounts_master - create_time。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - create_time。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.update_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-03 18:32:07(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_accounts_master - update_time。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - update_time。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.start_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-01 08:00:00(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_accounts_master - start_time。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - start_time。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.end_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-12-01 08:00:00(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_accounts_master - end_time。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - end_time。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.last_table_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_accounts_master - last_table_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - last_table_id。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.last_table_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】TV(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_accounts_master - last_table_name。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - last_table_name。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.last_update_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】管理员:郑丽珊(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_accounts_master - last_update_name。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - last_update_name。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.order_trade_no IS '【说明】维度字段,用于补充维度属性。 【示例】0(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - order_trade_no。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - order_trade_no。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.ding_talk_synced IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】assistant_accounts_master - ding_talk_synced。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - ding_talk_synced。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.site_light_cfg_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_accounts_master - site_light_cfg_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - site_light_cfg_id。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.light_equipment_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_accounts_master - light_equipment_id。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - light_equipment_id。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.light_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】2(状态枚举字段,用于标识业务状态)。 【ODS来源】assistant_accounts_master - light_status。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - light_status。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.is_team_leader IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】assistant_accounts_master - is_team_leader。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - is_team_leader。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.serial_number IS '【说明】数量/时长字段,用于统计与计量。 【示例】0(数量/时长字段,用于统计与计量)。 【ODS来源】assistant_accounts_master - serial_number。 【JSON字段】assistant_accounts_master.json - data.assistantInfos - serial_number。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】assistant_accounts_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】assistant_accounts_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】assistant_accounts_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_assistant_ex.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】assistant_accounts_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; + + CREATE TABLE IF NOT EXISTS dim_member ( member_id BIGINT, system_member_id BIGINT, @@ -363,17 +385,24 @@ CREATE TABLE IF NOT EXISTS dim_member ( SCD2_version INT, PRIMARY KEY (member_id) ); -COMMENT ON COLUMN dim_member.member_id IS '租户内会员主键。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dim_member.system_member_id IS '跨租户全局会员 ID。 | 来源: system_member_id | 角色: 外键'; -COMMENT ON COLUMN dim_member.tenant_id IS '租户 ID。 | 来源: tenant_id | 角色: 外键'; -COMMENT ON COLUMN dim_member.register_site_id IS '注册门店 ID。 | 来源: register_site_id | 角色: 外键'; -COMMENT ON COLUMN dim_member.mobile IS '会员手机号。 | 来源: mobile'; -COMMENT ON COLUMN dim_member.nickname IS '昵称(未必是真实姓名)。 | 来源: nickname'; -COMMENT ON COLUMN dim_member.member_card_grade_code IS '会员等级代码:1=金卡?2=银卡?3=钻石卡?4=黑卡?(按照 MD 文档枚举)。 | 来源: member_card_grade_code'; -COMMENT ON COLUMN dim_member.member_card_grade_name IS '等级名称,中文描述。 | 来源: member_card_grade_name'; -COMMENT ON COLUMN dim_member.create_time IS '会员档案创建时间。 | 来源: create_time'; --- dim_member_Ex +COMMENT ON TABLE billiards_dwd.dim_member IS 'DWD 维度表:dim_member。ODS 来源表:billiards_ods.member_profiles(对应 JSON:member_profiles.json;分析:member_profiles-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dim_member.member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2955204541320325(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_profiles - id。 【JSON字段】member_profiles.json - data.tenantMemberInfos - id。'; +COMMENT ON COLUMN billiards_dwd.dim_member.system_member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2955204540009605(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_profiles - system_member_id。 【JSON字段】member_profiles.json - data.tenantMemberInfos - system_member_id。'; +COMMENT ON COLUMN billiards_dwd.dim_member.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_profiles - tenant_id。 【JSON字段】member_profiles.json - data.tenantMemberInfos - tenant_id。'; +COMMENT ON COLUMN billiards_dwd.dim_member.register_site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_profiles - register_site_id。 【JSON字段】member_profiles.json - data.tenantMemberInfos - register_site_id。'; +COMMENT ON COLUMN billiards_dwd.dim_member.mobile IS '【说明】维度字段,用于补充维度属性。 【示例】18620043391(维度字段,用于补充维度属性)。 【ODS来源】member_profiles - mobile。 【JSON字段】member_profiles.json - data.tenantMemberInfos - mobile。'; +COMMENT ON COLUMN billiards_dwd.dim_member.nickname IS '【说明】名称字段,用于展示与辅助识别。 【示例】胡先生(名称字段,用于展示与辅助识别)。 【ODS来源】member_profiles - nickname。 【JSON字段】member_profiles.json - data.tenantMemberInfos - nickname。'; +COMMENT ON COLUMN billiards_dwd.dim_member.member_card_grade_code IS '【说明】维度字段,用于补充维度属性。 【示例】2790683528022853(维度字段,用于补充维度属性)。 【ODS来源】member_profiles - member_card_grade_code。 【JSON字段】member_profiles.json - data.tenantMemberInfos - member_card_grade_code。'; +COMMENT ON COLUMN billiards_dwd.dim_member.member_card_grade_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】储值卡(名称字段,用于展示与辅助识别)。 【ODS来源】member_profiles - member_card_grade_name。 【JSON字段】member_profiles.json - data.tenantMemberInfos - member_card_grade_name。'; +COMMENT ON COLUMN billiards_dwd.dim_member.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-08 01:29:33(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】member_profiles - create_time。 【JSON字段】member_profiles.json - data.tenantMemberInfos - create_time。'; +COMMENT ON COLUMN billiards_dwd.dim_member.update_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】NULL(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】member_profiles - update_time。 【JSON字段】member_profiles.json - data.tenantMemberInfos - update_time。'; +COMMENT ON COLUMN billiards_dwd.dim_member.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】member_profiles - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_member.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】member_profiles - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_member.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】member_profiles - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_member.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】member_profiles - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; + + CREATE TABLE IF NOT EXISTS dim_member_Ex ( member_id BIGINT, referrer_member_id BIGINT, @@ -388,15 +417,21 @@ CREATE TABLE IF NOT EXISTS dim_member_Ex ( SCD2_version INT, PRIMARY KEY (member_id) ); -COMMENT ON COLUMN dim_member_Ex.member_id IS '租户内会员主键。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dim_member_Ex.referrer_member_id IS '推荐人会员 ID,营销分析用。 | 来源: referrer_member_id'; -COMMENT ON COLUMN dim_member_Ex.point IS '积分余额(暂未启用)。 | 来源: point'; -COMMENT ON COLUMN dim_member_Ex.register_site_name IS '注册门店名称。 | 来源: site_name'; -COMMENT ON COLUMN dim_member_Ex.growth_value IS '成长值,暂未启用。 | 来源: growth_value'; -COMMENT ON COLUMN dim_member_Ex.user_status IS '会员状态枚举:1=正常,其它值未出现。 | 来源: user_status'; -COMMENT ON COLUMN dim_member_Ex.status IS '帐户状态:1=正常;其它值未出现。 | 来源: status'; --- dim_member_card_account +COMMENT ON TABLE billiards_dwd.dim_member_ex IS 'DWD 维度表(扩展字段表):dim_member_ex。ODS 来源表:billiards_ods.member_profiles(对应 JSON:member_profiles.json;分析:member_profiles-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dim_member_ex.member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2955204541320325(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_profiles - id。 【JSON字段】member_profiles.json - data.tenantMemberInfos - id。'; +COMMENT ON COLUMN billiards_dwd.dim_member_ex.referrer_member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_profiles - referrer_member_id。 【JSON字段】member_profiles.json - data.tenantMemberInfos - referrer_member_id。'; +COMMENT ON COLUMN billiards_dwd.dim_member_ex.point IS '【说明】维度字段,用于补充维度属性。 【示例】0.0(维度字段,用于补充维度属性)。 【ODS来源】member_profiles - point。 【JSON字段】member_profiles.json - data.tenantMemberInfos - point。'; +COMMENT ON COLUMN billiards_dwd.dim_member_ex.register_site_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】朗朗桌球(名称字段,用于展示与辅助识别)。 【ODS来源】member_profiles - site_name。 【JSON字段】member_profiles.json - data.tenantMemberInfos - site_name。'; +COMMENT ON COLUMN billiards_dwd.dim_member_ex.growth_value IS '【说明】维度字段,用于补充维度属性。 【示例】0.0(维度字段,用于补充维度属性)。 【ODS来源】member_profiles - growth_value。 【JSON字段】member_profiles.json - data.tenantMemberInfos - growth_value。'; +COMMENT ON COLUMN billiards_dwd.dim_member_ex.user_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】member_profiles - user_status。 【JSON字段】member_profiles.json - data.tenantMemberInfos - user_status。'; +COMMENT ON COLUMN billiards_dwd.dim_member_ex.status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】member_profiles - status。 【JSON字段】member_profiles.json - data.tenantMemberInfos - status。'; +COMMENT ON COLUMN billiards_dwd.dim_member_ex.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】member_profiles - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_member_ex.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】member_profiles - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_member_ex.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】member_profiles - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_member_ex.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】member_profiles - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; + + CREATE TABLE IF NOT EXISTS dim_member_card_account ( member_card_id BIGINT, tenant_id BIGINT, @@ -421,25 +456,31 @@ CREATE TABLE IF NOT EXISTS dim_member_card_account ( SCD2_version INT, PRIMARY KEY (member_card_id) ); -COMMENT ON COLUMN dim_member_card_account.member_card_id IS '会员卡账户主键,唯一标识一张具体卡。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dim_member_card_account.tenant_id IS '租户/品牌 ID,用于分隔不同业务主体。 | 来源: tenant_id | 角色: 外键'; -COMMENT ON COLUMN dim_member_card_account.register_site_id IS '开卡门店 ID,对应 dim_site.site_id。 | 来源: register_site_id | 角色: 外键'; -COMMENT ON COLUMN dim_member_card_account.tenant_member_id IS '对应会员档案中的 member_id(本租户内)。0 表示未绑定会员。 | 来源: tenant_member_id | 角色: 外键'; -COMMENT ON COLUMN dim_member_card_account.system_member_id IS '全局会员 ID,用于跨租户统一会员身份。0 表示未绑定会员。 | 来源: system_member_id | 角色: 外键'; -COMMENT ON COLUMN dim_member_card_account.card_type_id IS '卡种 ID,指向卡种配置表。与下面的 grade_code 共同定义卡类别。 | 来源: card_type_id | 角色: 外键'; -COMMENT ON COLUMN dim_member_card_account.member_card_grade_code IS '卡等级/卡类代码,区别不同类别卡。2790683528022853=储值卡,2790683528022856=活动抵用券,2790683528022855=台费卡,2790683528022858=酒水卡,2790683528022857=月卡'; -COMMENT ON COLUMN dim_member_card_account.member_card_grade_code_name IS '卡等级中文名称,与 member_card_grade_code 一一对应。 | 来源: member_card_grade_code_name'; -COMMENT ON COLUMN dim_member_card_account.member_card_type_name IS '卡类型名称,通常与 grade_code_name 相同,纯展示字段。 | 来源: member_card_type_name'; -COMMENT ON COLUMN dim_member_card_account.member_name IS '持卡会员姓名快照,部分为空表示未绑定。 | 来源: member_name'; -COMMENT ON COLUMN dim_member_card_account.member_mobile IS '持卡会员手机号快照。 | 来源: member_mobile'; -COMMENT ON COLUMN dim_member_card_account.balance IS '当前余额或额度。对储值卡表示余额,对其他卡表示剩余金额或次数。 | 来源: balance'; -COMMENT ON COLUMN dim_member_card_account.start_time IS '卡片有效期开始时间。 | 来源: start_time'; -COMMENT ON COLUMN dim_member_card_account.end_time IS '卡片有效期结束时间。 | 来源: end_time'; -COMMENT ON COLUMN dim_member_card_account.last_consume_time IS '最近一次消费时间;若为 "1970-01-01" 表示未消费过。 | 来源: last_consume_time'; -COMMENT ON COLUMN dim_member_card_account.status IS '卡状态:1=正常可用;4=过期/停用。其他值在数据中未出现。 | 来源: status'; -COMMENT ON COLUMN dim_member_card_account.is_delete IS '逻辑删除标记:0=未删除;1=已删除。 | 来源: is_delete'; --- dim_member_card_account_Ex +COMMENT ON TABLE billiards_dwd.dim_member_card_account IS 'DWD 维度表:dim_member_card_account。ODS 来源表:billiards_ods.member_stored_value_cards(对应 JSON:member_stored_value_cards.json;分析:member_stored_value_cards-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account.member_card_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2955206162843781(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_stored_value_cards - id。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - id。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_stored_value_cards - tenant_id。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tenant_id。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account.register_site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_stored_value_cards - register_site_id。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - register_site_id。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account.tenant_member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2955204541320325(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_stored_value_cards - tenant_member_id。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tenant_member_id。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account.system_member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2955204540009605(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_stored_value_cards - system_member_id。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - system_member_id。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account.card_type_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2793266846533445(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_stored_value_cards - card_type_id。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - card_type_id。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account.member_card_grade_code IS '【说明】维度字段,用于补充维度属性。 【示例】2790683528022856(维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - member_card_grade_code。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - member_card_grade_code。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account.member_card_grade_code_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】活动抵用券(名称字段,用于展示与辅助识别)。 【ODS来源】member_stored_value_cards - member_card_grade_code_name。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - member_card_grade_code_name。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account.member_card_type_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】活动抵用券(名称字段,用于展示与辅助识别)。 【ODS来源】member_stored_value_cards - member_card_type_name。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - member_card_type_name。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account.member_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】胡先生(名称字段,用于展示与辅助识别)。 【ODS来源】member_stored_value_cards - member_name。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - member_name。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account.member_mobile IS '【说明】维度字段,用于补充维度属性。 【示例】18620043391(维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - member_mobile。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - member_mobile。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account.balance IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - balance。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - balance。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account.start_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-08 01:31:12(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】member_stored_value_cards - start_time。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - start_time。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account.end_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2225-01-01 00:00:00(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】member_stored_value_cards - end_time。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - end_time。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account.last_consume_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 07:48:23(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】member_stored_value_cards - last_consume_time。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - last_consume_time。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account.status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】member_stored_value_cards - status。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - status。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account.is_delete IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】member_stored_value_cards - is_delete。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - is_delete。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】member_stored_value_cards - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】member_stored_value_cards - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】member_stored_value_cards - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】member_stored_value_cards - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; + + CREATE TABLE IF NOT EXISTS dim_member_card_account_Ex ( member_card_id BIGINT, site_name TEXT, @@ -499,60 +540,66 @@ CREATE TABLE IF NOT EXISTS dim_member_card_account_Ex ( SCD2_version INT, PRIMARY KEY (member_card_id) ); -COMMENT ON COLUMN dim_member_card_account_Ex.member_card_id IS '会员卡账户主键,唯一标识一张具体卡。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dim_member_card_account_Ex.site_name IS '门店名称展示字段(全部相同)。 | 来源: site_name'; -COMMENT ON COLUMN dim_member_card_account_Ex.tenant_name IS '租户名称(当前导出为空)。 | 来源: tenantName'; -COMMENT ON COLUMN dim_member_card_account_Ex.tenantAvatar IS '租户头像 URL(当前导出为空)。 | 来源: tenantAvatar'; -COMMENT ON COLUMN dim_member_card_account_Ex.effect_site_id IS '卡片限定生效门店 ID。0 表示不限门店,配合 able_cross_site=1 表示全店通用。 | 来源: effect_site_id'; -COMMENT ON COLUMN dim_member_card_account_Ex.able_cross_site IS '是否允许跨门店使用该卡:1=允许跨店;0=仅限开卡门店。 | 来源: able_cross_site'; -COMMENT ON COLUMN dim_member_card_account_Ex.card_physics_type IS '物理卡类型:1=实体/标准卡;其他值未出现,含义未知。 | 来源: card_physics_type'; -COMMENT ON COLUMN dim_member_card_account_Ex.card_no IS '物理卡号或条码(当前全部为空)。 | 来源: card_no'; -COMMENT ON COLUMN dim_member_card_account_Ex.bind_password IS '卡绑定密码(未启用)。 | 来源: bind_password'; -COMMENT ON COLUMN dim_member_card_account_Ex.use_scene IS '使用场景说明(当前为空)。 | 来源: use_scene'; -COMMENT ON COLUMN dim_member_card_account_Ex.denomination IS '面额或初始储值额度(当前均为 0.0,未启用)。 | 来源: denomination'; -COMMENT ON COLUMN dim_member_card_account_Ex.create_time IS '卡片创建时间。 | 来源: create_time'; -COMMENT ON COLUMN dim_member_card_account_Ex.disable_start_time IS '卡片禁用开始时间,当前为默认值表示未禁用。 | 来源: disable_start_time'; -COMMENT ON COLUMN dim_member_card_account_Ex.disable_end_time IS '卡片禁用结束时间,当前为默认值表示未禁用。 | 来源: disable_end_time'; -COMMENT ON COLUMN dim_member_card_account_Ex.is_allow_give IS '是否允许转赠给他人:0=不允许;1=允许。 | 来源: is_allow_give'; -COMMENT ON COLUMN dim_member_card_account_Ex.is_allow_order_deduct IS '是否允许在订单层面统一扣款:0=不允许;1=允许。 | 来源: is_allow_order_deduct'; -COMMENT ON COLUMN dim_member_card_account_Ex.sort IS '前端排序序号。 | 来源: sort'; -COMMENT ON COLUMN dim_member_card_account_Ex.table_discount IS '台费折扣率(折扣百分比,10.0=不打折,9.0=九折等)。当前全部 10.0。 | 来源: table_discount'; -COMMENT ON COLUMN dim_member_card_account_Ex.goods_discount IS '商品折扣率,当前为 10.0 表示无折扣。 | 来源: goods_discount'; -COMMENT ON COLUMN dim_member_card_account_Ex.assistant_discount IS '助教服务折扣率,当前为 10.0。 | 来源: assistant_discount'; -COMMENT ON COLUMN dim_member_card_account_Ex.assistant_reward_discount IS '助教奖励折扣率,当前为 10.0(未启用)。 | 来源: assistant_reward_discount'; -COMMENT ON COLUMN dim_member_card_account_Ex.table_service_discount IS '台费服务类折扣率,当前为 10.0。 | 来源: table_service_discount'; -COMMENT ON COLUMN dim_member_card_account_Ex.goods_service_discount IS '商品服务折扣率,当前为 10.0。 | 来源: goods_service_discount'; -COMMENT ON COLUMN dim_member_card_account_Ex.assistant_service_discount IS '助教服务类折扣率,当前为 10.0。 | 来源: assistant_service_discount'; -COMMENT ON COLUMN dim_member_card_account_Ex.coupon_discount IS '使用券的折扣比例(全部 10.0,未使用)。 | 来源: coupon_discount'; -COMMENT ON COLUMN dim_member_card_account_Ex.table_discount_sub_switch IS '台费折扣叠加开关:1=叠加其他折扣;2=不叠加,仅用卡折扣。 | 来源: table_discount_sub_switch'; -COMMENT ON COLUMN dim_member_card_account_Ex.goods_discount_sub_switch IS '商品折扣叠加开关,意义同上。 | 来源: goods_discount_sub_switch'; -COMMENT ON COLUMN dim_member_card_account_Ex.assistant_discount_sub_switch IS '助教折扣叠加开关,意义同上。 | 来源: assistant_discount_sub_switch'; -COMMENT ON COLUMN dim_member_card_account_Ex.assistant_reward_discount_sub_switch IS '助教奖励折扣叠加开关(未启用)。 | 来源: assistant_reward_discount_sub_switch'; -COMMENT ON COLUMN dim_member_card_account_Ex.goods_discount_range_type IS '商品折扣范围类型,未在文档说明具体含义。 | 来源: goods_discount_range_type'; -COMMENT ON COLUMN dim_member_card_account_Ex.table_deduct_radio IS '台费抵扣比例(百分比)。100.0 表示允许全额抵扣;0=不允许。 | 来源: table_deduct_radio'; -COMMENT ON COLUMN dim_member_card_account_Ex.goods_deduct_radio IS '商品抵扣比例,意义同上。 | 来源: goods_deduct_radio'; -COMMENT ON COLUMN dim_member_card_account_Ex.assistant_deduct_radio IS '助教抵扣比例,意义同上。 | 来源: assistant_deduct_radio'; -COMMENT ON COLUMN dim_member_card_account_Ex.table_service_deduct_radio IS '台费服务金抵扣比例。 | 来源: table_service_deduct_radio'; -COMMENT ON COLUMN dim_member_card_account_Ex.goods_service_deduct_radio IS '商品服务金抵扣比例。 | 来源: goods_service_deduct_radio'; -COMMENT ON COLUMN dim_member_card_account_Ex.assistant_service_deduct_radio IS '助教服务金抵扣比例。 | 来源: assistant_service_deduct_radio'; -COMMENT ON COLUMN dim_member_card_account_Ex.assistant_reward_deduct_radio IS '助教奖励金抵扣比例(未启用)。 | 来源: assistant_reward_deduct_radio'; -COMMENT ON COLUMN dim_member_card_account_Ex.coupon_deduct_radio IS '券抵扣比例(未启用)。 | 来源: coupon_deduct_radio'; -COMMENT ON COLUMN dim_member_card_account_Ex.cardSettleDeduct IS '结算时统一扣卡金额配置(当前为 0.0,未使用)。 | 来源: cardSettleDeduct'; -COMMENT ON COLUMN dim_member_card_account_Ex.tableCardDeduct IS '台费扣卡金额配置,当前 0.0。 | 来源: tableCardDeduct'; -COMMENT ON COLUMN dim_member_card_account_Ex.tableServiceCardDeduct IS '台费服务金扣卡金额配置。 | 来源: tableServiceCardDeduct'; -COMMENT ON COLUMN dim_member_card_account_Ex.goodsCarDeduct IS '商品扣卡金额配置。 | 来源: goodsCarDeduct'; -COMMENT ON COLUMN dim_member_card_account_Ex.goodsServiceCardDeduct IS '商品服务金扣卡金额配置。 | 来源: goodsServiceCardDeduct'; -COMMENT ON COLUMN dim_member_card_account_Ex.assistantCardDeduct IS '助教扣卡金额配置。 | 来源: assistantCardDeduct'; -COMMENT ON COLUMN dim_member_card_account_Ex.assistantServiceCardDeduct IS '助教服务金扣卡金额配置。 | 来源: assistantServiceCardDeduct'; -COMMENT ON COLUMN dim_member_card_account_Ex.assistantRewardCardDeduct IS '助教奖励金扣卡金额配置(未启用)。 | 来源: assistantRewardCardDeduct'; -COMMENT ON COLUMN dim_member_card_account_Ex.couponCardDeduct IS '使用券扣卡金额配置。 | 来源: couponCardDeduct'; -COMMENT ON COLUMN dim_member_card_account_Ex.deliveryFeeDeduct IS '配送费扣卡金额配置(未启用)。 | 来源: deliveryFeeDeduct'; -COMMENT ON COLUMN dim_member_card_account_Ex.tableAreaId IS '可用台区 ID 列表,空表示不限台区。 | 来源: tableAreaId'; -COMMENT ON COLUMN dim_member_card_account_Ex.goodsCategoryId IS '可用商品分类 ID 列表,空表示不限制商品类别。 | 来源: goodsCategoryId'; -COMMENT ON COLUMN dim_member_card_account_Ex.pdAssisnatLevel IS '允许的陪打助教等级列表,空表示不限。 | 来源: pdAssisnatLevel'; -COMMENT ON COLUMN dim_member_card_account_Ex.cxAssisnatLevel IS '允许的促销助教等级列表,空表示不限。 | 来源: cxAssisnatLevel'; --- dim_tenant_goods +COMMENT ON TABLE billiards_dwd.dim_member_card_account_ex IS 'DWD 维度表(扩展字段表):dim_member_card_account_ex。ODS 来源表:billiards_ods.member_stored_value_cards(对应 JSON:member_stored_value_cards.json;分析:member_stored_value_cards-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.member_card_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2955206162843781(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_stored_value_cards - id。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - id。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.site_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】朗朗桌球(名称字段,用于展示与辅助识别)。 【ODS来源】member_stored_value_cards - site_name。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - site_name。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.tenant_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】member_stored_value_cards - tenantName。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tenantName。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.tenantavatar IS '【说明】维度字段,用于补充维度属性。 【示例】NULL(维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - tenantAvatar。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tenantAvatar。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.effect_site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_stored_value_cards - effect_site_id。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - effect_site_id。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.able_cross_site IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - able_cross_site。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - able_cross_site。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.card_physics_type IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - card_physics_type。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - card_physics_type。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.card_no IS '【说明】维度字段,用于补充维度属性。 【示例】NULL(维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - card_no。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - card_no。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.bind_password IS '【说明】维度字段,用于补充维度属性。 【示例】NULL(维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - bind_password。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - bind_password。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.use_scene IS '【说明】维度字段,用于补充维度属性。 【示例】NULL(维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - use_scene。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - use_scene。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.denomination IS '【说明】维度字段,用于补充维度属性。 【示例】0.0(维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - denomination。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - denomination。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-08 01:31:12(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】member_stored_value_cards - create_time。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - create_time。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.disable_start_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】0001-01-01 00:00:00(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】member_stored_value_cards - disable_start_time。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - disable_start_time。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.disable_end_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】0001-01-01 00:00:00(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】member_stored_value_cards - disable_end_time。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - disable_end_time。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.is_allow_give IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】member_stored_value_cards - is_allow_give。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - is_allow_give。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.is_allow_order_deduct IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - is_allow_order_deduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - is_allow_order_deduct。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.sort IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - sort。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - sort。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.table_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - table_discount。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - table_discount。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.goods_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - goods_discount。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_discount。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistant_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - assistant_discount。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_discount。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistant_reward_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - assistant_reward_discount。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_reward_discount。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.table_service_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - table_service_discount。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - table_service_discount。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.goods_service_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - goods_service_discount。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_service_discount。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistant_service_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - assistant_service_discount。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_service_discount。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.coupon_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - coupon_discount。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - coupon_discount。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.table_discount_sub_switch IS '【说明】数量/时长字段,用于统计与计量。 【示例】2(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - table_discount_sub_switch。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - table_discount_sub_switch。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.goods_discount_sub_switch IS '【说明】数量/时长字段,用于统计与计量。 【示例】2(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - goods_discount_sub_switch。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_discount_sub_switch。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistant_discount_sub_switch IS '【说明】数量/时长字段,用于统计与计量。 【示例】2(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - assistant_discount_sub_switch。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_discount_sub_switch。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistant_reward_discount_sub_switch IS '【说明】数量/时长字段,用于统计与计量。 【示例】2(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - assistant_reward_discount_sub_switch。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_reward_discount_sub_switch。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.goods_discount_range_type IS '【说明】数量/时长字段,用于统计与计量。 【示例】1(数量/时长字段,用于统计与计量)。 【ODS来源】member_stored_value_cards - goods_discount_range_type。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_discount_range_type。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.table_deduct_radio IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】100.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - table_deduct_radio。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - table_deduct_radio。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.goods_deduct_radio IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】100.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - goods_deduct_radio。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_deduct_radio。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistant_deduct_radio IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】100.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - assistant_deduct_radio。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_deduct_radio。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.table_service_deduct_radio IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】100.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - table_service_deduct_radio。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - table_service_deduct_radio。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.goods_service_deduct_radio IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】100.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - goods_service_deduct_radio。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goods_service_deduct_radio。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistant_service_deduct_radio IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】100.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - assistant_service_deduct_radio。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_service_deduct_radio。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistant_reward_deduct_radio IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】100.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - assistant_reward_deduct_radio。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistant_reward_deduct_radio。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.coupon_deduct_radio IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】100.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - coupon_deduct_radio。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - coupon_deduct_radio。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.cardsettlededuct IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - cardSettleDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - cardSettleDeduct。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.tablecarddeduct IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - tableCardDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tableCardDeduct。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.tableservicecarddeduct IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - tableServiceCardDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tableServiceCardDeduct。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.goodscardeduct IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - goodsCarDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goodsCarDeduct。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.goodsservicecarddeduct IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - goodsServiceCardDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goodsServiceCardDeduct。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistantcarddeduct IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - assistantCardDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistantCardDeduct。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistantservicecarddeduct IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - assistantServiceCardDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistantServiceCardDeduct。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.assistantrewardcarddeduct IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - assistantRewardCardDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - assistantRewardCardDeduct。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.couponcarddeduct IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - couponCardDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - couponCardDeduct。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.deliveryfeededuct IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_stored_value_cards - deliveryFeeDeduct。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - deliveryFeeDeduct。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.tableareaid IS '【说明】维度字段,用于补充维度属性。 【示例】[](维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - tableAreaId。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - tableAreaId。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.goodscategoryid IS '【说明】维度字段,用于补充维度属性。 【示例】[](维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - goodsCategoryId。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - goodsCategoryId。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.pdassisnatlevel IS '【说明】维度字段,用于补充维度属性。 【示例】[](维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - pdAssisnatLevel。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - pdAssisnatLevel。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.cxassisnatlevel IS '【说明】维度字段,用于补充维度属性。 【示例】[](维度字段,用于补充维度属性)。 【ODS来源】member_stored_value_cards - cxAssisnatLevel。 【JSON字段】member_stored_value_cards.json - data.tenantMemberCards - cxAssisnatLevel。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】member_stored_value_cards - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】member_stored_value_cards - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】member_stored_value_cards - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_member_card_account_ex.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】member_stored_value_cards - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; + + CREATE TABLE IF NOT EXISTS dim_tenant_goods ( tenant_goods_id BIGINT, tenant_id BIGINT, @@ -574,22 +621,28 @@ CREATE TABLE IF NOT EXISTS dim_tenant_goods ( SCD2_version INT, PRIMARY KEY (tenant_goods_id) ); -COMMENT ON COLUMN dim_tenant_goods.tenant_goods_id IS '租户级商品档案主键 ID,唯一标识一条商品档案。所有业务事实表(销售、库存等)中引用租户级商品时应指向此字段。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dim_tenant_goods.tenant_id IS '租户/品牌 ID,用于区分不同商户。当前样本中全表同一值,但模型上应作为维表外键,用于关联租户维度。 | 来源: tenant_id | 角色: 外键'; -COMMENT ON COLUMN dim_tenant_goods.supplier_id IS '供应商 ID,用于关联供应商档案维度。当前样本全部为 0,说明门店尚未维护供应商信息或导出视图未包含真实供应商关联,但字段含义明确。 | 来源: supplier_id | 角色: 外键'; -COMMENT ON COLUMN dim_tenant_goods.category_name IS '商品一级分类名称(可读名称),例如:零食、饮料、香烟、雪糕、小吃、酒水、面、槟榔等。真实分类关联通过 goods_category_id 与 goods_second_category_id 实现,此字段主要用于展示和直观分析。 | 来源: categoryName'; -COMMENT ON COLUMN dim_tenant_goods.goods_category_id IS '商品一级分类 ID。与分类维表(例如 dim_goods_category)关联,构成商品分类的第一层。一个 goods_category_id 对应一个 category_name。 | 来源: goods_category_id | 角色: 外键'; -COMMENT ON COLUMN dim_tenant_goods.goods_second_category_id IS '商品二级分类 ID。与分类维表的二级节点关联,用于更细粒度的品类统计。取值数目约十四种,每个值属于某个一级分类之下。 | 来源: goods_second_category_id | 角色: 外键'; -COMMENT ON COLUMN dim_tenant_goods.goods_name IS '商品名称(前台展示名),如 “东方树叶”“红烧牛肉面”“百威 235 毫升”等。当前样本中基本唯一。作为用户认知的主显示名称,用于报表、前台展示、小票打印。 | 来源: goods_name'; -COMMENT ON COLUMN dim_tenant_goods.goods_number IS '商品内部编号或自定义货号。当前样本中各记录不重复,如 “1”“2”“10”“11” 等。可用于与其他系统对接或人工查找,有一定对账和排错价值。 | 来源: goods_number'; -COMMENT ON COLUMN dim_tenant_goods.unit IS '商品计量单位,例如:瓶、包、个、份、根、盒、杯、桶、盘、支等。用于解释数量含义,是销售数量与库存数量的度量单位。 | 来源: unit'; -COMMENT ON COLUMN dim_tenant_goods.market_price IS '商品标价或标准销售单价。例如 2、5、6、8、10、12、15、18、20、28 元。POS 默认销售价格,结算时的基础金额字段。 | 来源: market_price'; -COMMENT ON COLUMN dim_tenant_goods.goods_state IS '商品状态枚举。当前样本全部为 1,推测含义为“正常”“已上架”或“有效”。其他值(数据中未出现)通常表示下架、停用或草稿状态。用于控制商品是否可销售。 | 来源: goods_state'; -COMMENT ON COLUMN dim_tenant_goods.create_time IS '商品档案创建时间,格式为 “YYYY-MM-DD HH:MM:SS”。每条记录唯一。用于增量抽取和审计,也可用于分析商品生命周期。 | 来源: create_time'; -COMMENT ON COLUMN dim_tenant_goods.update_time IS '商品档案最近一次修改时间,可为空(表示自创建后未修改)。用于增量同步、变化跟踪和审计分析。 | 来源: update_time'; -COMMENT ON COLUMN dim_tenant_goods.is_delete IS '逻辑删除标志。枚举:0 表示未删除(有效商品);1 表示已逻辑删除(在前台不再展示)。当前样本全部为 0。用于软删除控制和历史数据保留。 | 来源: is_delete'; --- dim_tenant_goods_Ex +COMMENT ON TABLE billiards_dwd.dim_tenant_goods IS 'DWD 维度表:dim_tenant_goods。ODS 来源表:billiards_ods.tenant_goods_master(对应 JSON:tenant_goods_master.json;分析:tenant_goods_master-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.tenant_goods_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2791925230096261(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】tenant_goods_master - id。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - id。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】tenant_goods_master - tenant_id。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - tenant_id。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.supplier_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】tenant_goods_master - supplier_id。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - supplier_id。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.category_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】饮料(名称字段,用于展示与辅助识别)。 【ODS来源】tenant_goods_master - categoryName。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - categoryName。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.goods_category_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683528350539(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】tenant_goods_master - goods_category_id。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_category_id。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.goods_second_category_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683528350540(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】tenant_goods_master - goods_second_category_id。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_second_category_id。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.goods_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】东方树叶(名称字段,用于展示与辅助识别)。 【ODS来源】tenant_goods_master - goods_name。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_name。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.goods_number IS '【说明】数量/时长字段,用于统计与计量。 【示例】1(数量/时长字段,用于统计与计量)。 【ODS来源】tenant_goods_master - goods_number。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_number。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.unit IS '【说明】维度字段,用于补充维度属性。 【示例】瓶(维度字段,用于补充维度属性)。 【ODS来源】tenant_goods_master - unit。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - unit。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.market_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】8.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】tenant_goods_master - market_price。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - market_price。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.goods_state IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】tenant_goods_master - goods_state。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_state。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-07-15 17:13:15(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】tenant_goods_master - create_time。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - create_time。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.update_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-10-29 23:51:38(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】tenant_goods_master - update_time。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - update_time。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.is_delete IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】tenant_goods_master - is_delete。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - is_delete。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】tenant_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】tenant_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】tenant_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】tenant_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; + + CREATE TABLE IF NOT EXISTS dim_tenant_goods_Ex ( tenant_goods_id BIGINT, remark_name VARCHAR(128), @@ -615,26 +668,32 @@ CREATE TABLE IF NOT EXISTS dim_tenant_goods_Ex ( SCD2_version INT, PRIMARY KEY (tenant_goods_id) ); -COMMENT ON COLUMN dim_tenant_goods_Ex.tenant_goods_id IS '租户级商品档案主键 ID,唯一标识一条商品档案。所有业务事实表(销售、库存等)中引用租户级商品时应指向此字段。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dim_tenant_goods_Ex.remark_name IS '商品备注名或别名,目前样本中均为空。设计用途为简写名、特殊展示名或内部备注,在当前门店尚未启用。 | 来源: remark_name'; -COMMENT ON COLUMN dim_tenant_goods_Ex.pinyin_initial IS '商品拼音首字母或助记码,用于前台按拼音检索,如 “DFSY,DFSX”“HSNRM,GSNRM”“SP” 等。主要为操作便利,对经营分析影响较小。 | 来源: pinyin_initial'; -COMMENT ON COLUMN dim_tenant_goods_Ex.goods_cover IS '商品封面图片 URL,用于前端展示商品图片。多个商品可能共用同一图片。对经营和结算逻辑无直接影响。 | 来源: goods_cover'; -COMMENT ON COLUMN dim_tenant_goods_Ex.goods_bar_code IS '商品条码(如 EAN 码)。当前样本全部为空。含义明确但尚未使用,未来可用于扫码收银或与第三方商品库对接。 | 来源: goods_bar_code'; -COMMENT ON COLUMN dim_tenant_goods_Ex.commodity_code IS '对外商品编码或系列编码,用于与外部系统或其他内部模块对接。例如 “10000”“100000”“10000028”等。一个编码在多条商品上复用,说明它不是主键而是“系列标识”或“外部编码”。具体业务含义依赖上游系统定义。 | 来源: commodity_code'; -COMMENT ON COLUMN dim_tenant_goods_Ex.commodity_code_list IS '商品编码列表的序列化形式,对应源 JSON 的数组字段(当前每条记录仅一个元素)。设计上支持 “一个商品多个编码” 场景,目前仅为 commodity_code 的冗余表现形式。 | 来源: commodityCode'; -COMMENT ON COLUMN dim_tenant_goods_Ex.min_discount_price IS '商品可售最低价(底价)。部分记录为 0.00,表示未设置底价或沿用系统默认规则。用于限制打折或手动改价的下限,防止亏损销售。 | 来源: min_discount_price'; -COMMENT ON COLUMN dim_tenant_goods_Ex.cost_price IS '商品成本价,当前大多数为 0.00,仅少数录入 2.0、2.5、3.0 等。用于成本核算与毛利分析。虽当前门店未完整维护,但字段含义清晰,属于成本分析必备结构。 | 来源: cost_price'; -COMMENT ON COLUMN dim_tenant_goods_Ex.cost_price_type IS '成本价格类型枚举,用于标识成本价的来源或计算方式。已知取值:1 和 2。常见推测:1 表示手工录入成本;2 表示按最近进货价或加权平均价生成。具体含义需结合系统枚举字典确认。 | 来源: cost_price_type'; -COMMENT ON COLUMN dim_tenant_goods_Ex.able_discount IS '是否允许该商品参与折扣的标志。已知取值:1。按命名推断枚举约定为:1 表示允许参与打折;0 表示不允许参与打折(当前样本未出现)。配合活动、整单折扣等控制哪些商品可享优惠。 | 来源: able_discount'; -COMMENT ON COLUMN dim_tenant_goods_Ex.sale_channel IS '销售渠道类型枚举。当前样本全部为 1,推测为“线下门店正常销售渠道”。理论上可扩展为不同渠道值,例如外卖、小程序、电商等,用于渠道维度分析。具体枚举说明依赖系统配置。 | 来源: sale_channel'; -COMMENT ON COLUMN dim_tenant_goods_Ex.is_warehousing IS '是否纳入库存管理的标志。已知取值:1,表示纳入库存管理;0 则表示不纳入库存管理(虚拟商品等,当前未出现)。本门店所有商品均启用库存管理。 | 来源: is_warehousing'; -COMMENT ON COLUMN dim_tenant_goods_Ex.is_in_site IS '是否在当前门店启用或上架。当前样本全部为 false。由于该文件是租户级商品档案视图,且 isInSite 全为 false,该字段在本视图的实际含义存在不确定性,可能仅在门店级商品表中才有明确业务意义。 | 来源: isInSite'; -COMMENT ON COLUMN dim_tenant_goods_Ex.able_site_transfer IS '是否允许门店间调拨或门店级操作的枚举。已知取值:2 为绝大多数,0 为少数一条。按命名推测大致含义为:2 表示允许调拨或默认允许;0 表示禁止调拨。实际枚举定义需查阅系统配置,当前无法完全确定具体业务规则。 | 来源: able_site_transfer'; -COMMENT ON COLUMN dim_tenant_goods_Ex.common_sale_royalty IS '普通销售提成或佣金配置字段,单位和含义需结合上游系统(可能为金额或比例)。当前样本全部为 0,说明未启用商品级提成配置。 | 来源: common_sale_royalty'; -COMMENT ON COLUMN dim_tenant_goods_Ex.point_sale_royalty IS '积分销售相关的提成或赠送规则配置字段。当前样本全部为 0,同样未启用该功能。具体数值含义(百分比或固定值)需结合系统定义。 | 来源: point_sale_royalty'; -COMMENT ON COLUMN dim_tenant_goods_Ex.out_goods_id IS '外部系统商品 ID,用于对接第三方平台或统一商品库时作为映射主键。目前样本全部为 0,说明尚未配置外部商品映射,具体对接规则依赖上游系统。 | 来源: out_goods_id'; --- dim_store_goods +COMMENT ON TABLE billiards_dwd.dim_tenant_goods_ex IS 'DWD 维度表(扩展字段表):dim_tenant_goods_ex。ODS 来源表:billiards_ods.tenant_goods_master(对应 JSON:tenant_goods_master.json;分析:tenant_goods_master-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.tenant_goods_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2791925230096261(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】tenant_goods_master - id。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - id。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.remark_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】tenant_goods_master - remark_name。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - remark_name。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.pinyin_initial IS '【说明】维度字段,用于补充维度属性。 【示例】DFSY,DFSX(维度字段,用于补充维度属性)。 【ODS来源】tenant_goods_master - pinyin_initial。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - pinyin_initial。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.goods_cover IS '【说明】维度字段,用于补充维度属性。 【示例】https://oss.ficoo.vip/admin/ZwS8fj_1753175129443.jpg(维度字段,用于补充维度属性)。 【ODS来源】tenant_goods_master - goods_cover。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_cover。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.goods_bar_code IS '【说明】维度字段,用于补充维度属性。 【示例】NULL(维度字段,用于补充维度属性)。 【ODS来源】tenant_goods_master - goods_bar_code。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - goods_bar_code。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.commodity_code IS '【说明】维度字段,用于补充维度属性。 【示例】10000028(维度字段,用于补充维度属性)。 【ODS来源】tenant_goods_master - commodity_code。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - commodity_code。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.commodity_code_list IS '【说明】维度字段,用于补充维度属性。 【示例】10000028(维度字段,用于补充维度属性)。 【ODS来源】tenant_goods_master - commodity_code。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - commodity_code。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.min_discount_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】tenant_goods_master - min_discount_price。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - min_discount_price。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.cost_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】tenant_goods_master - cost_price。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - cost_price。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.cost_price_type IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】1(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】tenant_goods_master - cost_price_type。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - cost_price_type。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.able_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】1(数量/时长字段,用于统计与计量)。 【ODS来源】tenant_goods_master - able_discount。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - able_discount。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.sale_channel IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】tenant_goods_master - sale_channel。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - sale_channel。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.is_warehousing IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】1(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】tenant_goods_master - is_warehousing。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - is_warehousing。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.is_in_site IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】false(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】tenant_goods_master - isInSite(派生:BOOLEAN(isInSite))。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - isInSite(派生:BOOLEAN(isInSite))。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.able_site_transfer IS '【说明】维度字段,用于补充维度属性。 【示例】2(维度字段,用于补充维度属性)。 【ODS来源】tenant_goods_master - able_site_transfer。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - able_site_transfer。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.common_sale_royalty IS '【说明】维度字段,用于补充维度属性。 【示例】0(维度字段,用于补充维度属性)。 【ODS来源】tenant_goods_master - common_sale_royalty。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - common_sale_royalty。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.point_sale_royalty IS '【说明】维度字段,用于补充维度属性。 【示例】0(维度字段,用于补充维度属性)。 【ODS来源】tenant_goods_master - point_sale_royalty。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - point_sale_royalty。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.out_goods_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】tenant_goods_master - out_goods_id。 【JSON字段】tenant_goods_master.json - data.tenantGoodsList - out_goods_id。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】tenant_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】tenant_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】tenant_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_tenant_goods_ex.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】tenant_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; + + CREATE TABLE IF NOT EXISTS dim_store_goods ( site_goods_id BIGINT, tenant_id BIGINT, @@ -662,28 +721,34 @@ CREATE TABLE IF NOT EXISTS dim_store_goods ( SCD2_version INT, PRIMARY KEY (site_goods_id) ); -COMMENT ON COLUMN dim_store_goods.site_goods_id IS '门店级商品 ID,本表主键;其它业务表中的 site_goods_id 与此对应,用于库存、销售等关联。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dim_store_goods.tenant_id IS '租户/品牌 ID,同一品牌下多个门店共享,用于跨门店汇总分析。 | 来源: tenant_id | 角色: 外键'; -COMMENT ON COLUMN dim_store_goods.site_id IS '门店 ID,对应门店维度表主键。 | 来源: site_id | 角色: 外键'; -COMMENT ON COLUMN dim_store_goods.tenant_goods_id IS '租户级(品牌级)商品 ID,用于关联 dim_tenant_goods,实现跨门店统一商品档案。 | 来源: tenant_goods_id | 角色: 外键'; -COMMENT ON COLUMN dim_store_goods.goods_name IS '商品名称,例如“合味道泡面”“地道肠”“茶位费”。 | 来源: goods_name'; -COMMENT ON COLUMN dim_store_goods.goods_category_id IS '商品一级分类 ID,对应商品分类维表主键,与 category_level1_name 一一对应。 | 来源: goods_category_id | 角色: 外键'; -COMMENT ON COLUMN dim_store_goods.goods_second_category_id IS '商品二级分类 ID,其父分类为 goods_category_id。 | 来源: goods_second_category_id | 角色: 外键'; -COMMENT ON COLUMN dim_store_goods.category_level1_name IS '一级分类名称,如“零食”“酒水”“服务费”,用于报表维度展示。 | 来源: oneCategoryName'; -COMMENT ON COLUMN dim_store_goods.category_level2_name IS '二级分类名称,如“面”“洋酒”“纸巾”,用于更细粒度分类分析。 | 来源: twoCategoryName'; -COMMENT ON COLUMN dim_store_goods.batch_stock_qty IS '当前成本批次的库存数量,用于按 cost_price 估算库存价值。 | 来源: batch_stock_quantity'; -COMMENT ON COLUMN dim_store_goods.sale_qty IS '截至导出时的销售数量(件),当前数据中与 total_sales_qty 相同。 | 来源: sale_num'; -COMMENT ON COLUMN dim_store_goods.total_sales_qty IS '累计销售数量;当前导出周期下与 sale_qty 一致,为历史全量口径。 | 来源: total_sales'; -COMMENT ON COLUMN dim_store_goods.sale_price IS '商品标准销售价(挂牌价),单位为元。实际结算可能有折扣或券抵扣。 | 来源: sale_price'; -COMMENT ON COLUMN dim_store_goods.created_at IS '门店商品档案创建时间(在门店建立该商品档案时的时间点)。 | 来源: create_time'; -COMMENT ON COLUMN dim_store_goods.updated_at IS '最近一次修改商品档案的时间(包括价格调整、状态变更等)。 | 来源: update_time'; -COMMENT ON COLUMN dim_store_goods.avg_monthly_sales IS '平均月销量(件/月),由某个统计周期内销售数据折算而来,用于补货和品类管理分析。 | 来源: average_monthly_sales'; -COMMENT ON COLUMN dim_store_goods.goods_state IS '商品基础状态枚举:1=正常状态(主流值),2=特殊状态(如新建未完全启用或停售但未彻底下架,通常伴随 stock=0、days_on_shelf=0)。 | 来源: goods_state'; -COMMENT ON COLUMN dim_store_goods.enable_status IS '档案启用状态:1=启用;2=停用(推测,样本中未出现);控制商品档案是否参与业务处理。 | 来源: enable_status'; -COMMENT ON COLUMN dim_store_goods.send_state IS '销售端可售状态:1=可销售/可下单;其他值可能代表停售或仅内部使用(当前样本全部为 1)。 | 来源: send_state'; -COMMENT ON COLUMN dim_store_goods.is_delete IS '逻辑删除标志:0=未删除(有效档案);1=已删除(逻辑删除,不再参与业务但保留历史引用)。 | 来源: is_delete'; --- dim_store_goods_Ex +COMMENT ON TABLE billiards_dwd.dim_store_goods IS 'DWD 维度表:dim_store_goods。ODS 来源表:billiards_ods.store_goods_master(对应 JSON:store_goods_master.json;分析:store_goods_master-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods.site_goods_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2793025851560005(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_master - id。 【JSON字段】store_goods_master.json - data.orderGoodsList - id。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_master - tenant_id。 【JSON字段】store_goods_master.json - data.orderGoodsList - tenant_id。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_master - site_id。 【JSON字段】store_goods_master.json - data.orderGoodsList - site_id。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods.tenant_goods_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2792178593255301(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_master - tenant_goods_id。 【JSON字段】store_goods_master.json - data.orderGoodsList - tenant_goods_id。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods.goods_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】合味道泡面(名称字段,用于展示与辅助识别)。 【ODS来源】store_goods_master - goods_name。 【JSON字段】store_goods_master.json - data.orderGoodsList - goods_name。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods.goods_category_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2791941988405125(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_master - goods_category_id。 【JSON字段】store_goods_master.json - data.orderGoodsList - goods_category_id。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods.goods_second_category_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2793236829620037(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_master - goods_second_category_id。 【JSON字段】store_goods_master.json - data.orderGoodsList - goods_second_category_id。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods.category_level1_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】零食(名称字段,用于展示与辅助识别)。 【ODS来源】store_goods_master - oneCategoryName。 【JSON字段】store_goods_master.json - data.orderGoodsList - oneCategoryName。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods.category_level2_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】面(名称字段,用于展示与辅助识别)。 【ODS来源】store_goods_master - twoCategoryName。 【JSON字段】store_goods_master.json - data.orderGoodsList - twoCategoryName。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods.batch_stock_qty IS '【说明】数量/时长字段,用于统计与计量。 【示例】18(数量/时长字段,用于统计与计量)。 【ODS来源】store_goods_master - stock。 【JSON字段】store_goods_master.json - data.orderGoodsList - stock。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods.sale_qty IS '【说明】数量/时长字段,用于统计与计量。 【示例】104(数量/时长字段,用于统计与计量)。 【ODS来源】store_goods_master - sale_num。 【JSON字段】store_goods_master.json - data.orderGoodsList - sale_num。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods.total_sales_qty IS '【说明】数量/时长字段,用于统计与计量。 【示例】104(数量/时长字段,用于统计与计量)。 【ODS来源】store_goods_master - total_sales。 【JSON字段】store_goods_master.json - data.orderGoodsList - total_sales。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods.sale_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】12.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_master - sale_price。 【JSON字段】store_goods_master.json - data.orderGoodsList - sale_price。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods.created_at IS '【说明】维度字段,用于补充维度属性。 【示例】2025-07-16 11:52:51(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - create_time。 【JSON字段】store_goods_master.json - data.orderGoodsList - create_time。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods.updated_at IS '【说明】维度字段,用于补充维度属性。 【示例】2025-11-09 07:23:47(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - update_time。 【JSON字段】store_goods_master.json - data.orderGoodsList - update_time。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods.avg_monthly_sales IS '【说明】维度字段,用于补充维度属性。 【示例】1.32(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - average_monthly_sales。 【JSON字段】store_goods_master.json - data.orderGoodsList - average_monthly_sales。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods.goods_state IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - goods_state。 【JSON字段】store_goods_master.json - data.orderGoodsList - goods_state。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods.enable_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】store_goods_master - enable_status。 【JSON字段】store_goods_master.json - data.orderGoodsList - enable_status。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods.send_state IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - send_state。 【JSON字段】store_goods_master.json - data.orderGoodsList - send_state。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods.is_delete IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】store_goods_master - is_delete。 【JSON字段】store_goods_master.json - data.orderGoodsList - is_delete。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】store_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】store_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】store_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】store_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; + + CREATE TABLE IF NOT EXISTS dim_store_goods_Ex ( site_goods_id BIGINT, site_name TEXT, @@ -717,34 +782,40 @@ CREATE TABLE IF NOT EXISTS dim_store_goods_Ex ( SCD2_version INT, PRIMARY KEY (site_goods_id) ); -COMMENT ON COLUMN dim_store_goods_Ex.site_goods_id IS '门店级商品 ID,本表主键;其它业务表中的 site_goods_id 与此对应,用于库存、销售等关联。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dim_store_goods_Ex.site_name IS '门店名称,例如“朗朗桌球”,是对 site_id 的冗余展示,方便直接阅读。 | 来源: siteName'; -COMMENT ON COLUMN dim_store_goods_Ex.unit IS '销售计量单位,如“包”“瓶”“个”“份”“杯”等。 | 来源: unit'; -COMMENT ON COLUMN dim_store_goods_Ex.goods_barcode IS '商品条形码,用于扫码销售;当前样本多为空。 | 来源: goods_bar_code'; -COMMENT ON COLUMN dim_store_goods_Ex.goods_cover_url IS '商品图片 URL,用于前端展示商品图片。 | 来源: goods_cover'; -COMMENT ON COLUMN dim_store_goods_Ex.pinyin_initial IS '商品名称拼音首字母缩写,有时多个别名用逗号分隔,用于按字母快速检索和排序。 | 来源: pinyin_initial'; -COMMENT ON COLUMN dim_store_goods_Ex.stock_qty IS '当前主单位可用库存数量,以 unit 为单位。 | 来源: stock'; -COMMENT ON COLUMN dim_store_goods_Ex.stock_secondary_qty IS '副单位库存数量;若商品存在双单位(如箱/瓶),用于记录副单位库存;当前门店未启用双单位库存,样本中为 0。 | 来源: stock_A'; -COMMENT ON COLUMN dim_store_goods_Ex.safety_stock_qty IS '安全库存阈值,低于该值时系统可提示补货;当前门店尚未配置,样本中为 0。 | 来源: safe_stock'; -COMMENT ON COLUMN dim_store_goods_Ex.cost_price IS '商品单件成本价,单位元;部分商品为 0,表示未录入或由其它模块结转成本。 | 来源: cost_price'; -COMMENT ON COLUMN dim_store_goods_Ex.cost_price_type IS '成本类型枚举:1=固定成本价(按 cost_price 计),2=动态成本价(按采购单等方式结转,当前多数仍为暂估)。 | 来源: cost_price_type'; -COMMENT ON COLUMN dim_store_goods_Ex.provisional_total_cost IS '当前库存暂估总成本,单位元;通常约等于 batch_stock_qty × cost_price。 | 来源: provisional_total_cost'; -COMMENT ON COLUMN dim_store_goods_Ex.total_purchase_cost IS '当前库存总采购成本,单位元;当前样本中与 provisional_total_cost 相等,为后续精算成本预留。 | 来源: total_purchase_cost'; -COMMENT ON COLUMN dim_store_goods_Ex.min_discount_price IS '最低允许成交价(限价),单位元;收银改价时需保证成交价 ≥ 此值,为 0 时表示未设置限价或由其它规则控制。 | 来源: min_discount_price'; -COMMENT ON COLUMN dim_store_goods_Ex.is_discountable IS '是否允许参与折扣的标志:1=允许参与折扣;0=不参与任何折扣策略。当前样本全部为 1。 | 来源: able_discount'; -COMMENT ON COLUMN dim_store_goods_Ex.days_on_shelf IS '商品在架天数或可售天数,大致等于当前时间减去首次上架时间;0 通常表示刚建档或刚启用。 | 来源: days_available'; -COMMENT ON COLUMN dim_store_goods_Ex.audit_status IS '审核状态枚举:2=审核通过(当前唯一值);其他值可能代表待提交、待审核、审核不通过等。 | 来源: audit_status'; -COMMENT ON COLUMN dim_store_goods_Ex.sale_channel IS '销售渠道枚举:当前样本全部为 1 表示线下门店渠道;其他值可用于区分外卖、线上商城等渠道。 | 来源: sale_channel'; -COMMENT ON COLUMN dim_store_goods_Ex.is_warehousing IS '是否纳入库存管理:1=参与库存管理(有出入库流水);0 或其他值可能表示不计库存(样本中全部为 1)。 | 来源: is_warehousing'; -COMMENT ON COLUMN dim_store_goods_Ex.freeze_status IS '冻结状态:0=未冻结;非 0 可能表示锁定库存或禁止出库,具体业务规则需系统确认。 | 来源: freeze'; -COMMENT ON COLUMN dim_store_goods_Ex.forbid_sell_status IS '禁止销售状态:1=未禁止,允许销售;2=被禁止销售,即使上架也不能卖(含义基于命名和行业惯例推测)。 | 来源: forbid_sell_status'; -COMMENT ON COLUMN dim_store_goods_Ex.able_site_transfer IS '是否允许跨门店调拨或跨站点共享库存:2=不允许跨店调拨(当前主流值);0=未配置(个别记录),含义为是否参与跨店调拨功能。 | 来源: able_site_transfer'; -COMMENT ON COLUMN dim_store_goods_Ex.custom_label_type IS '自定义标签类型(基于字段名和取值推测):2=使用自定义标签;1 可能表示使用系统默认标签。具体影响哪些标签功能需业务确认。 | 来源: custom_label_type'; -COMMENT ON COLUMN dim_store_goods_Ex.option_required IS '是否需要额外选项或规格(基于字段名和取值推测):1=不需要额外选项,按单规格销售;其他值可能表示必须选择配料或口味。当前样本全部为 1。 | 来源: option_required'; -COMMENT ON COLUMN dim_store_goods_Ex.remark IS '商品备注,可填写口味说明、供应商信息、注意事项等;当前样本全部为空。 | 来源: remark'; -COMMENT ON COLUMN dim_store_goods_Ex.sort_order IS '前端展示排序权重,控制商品在列表中的显示顺序,具体规则(数值越大还是越小排前)由业务配置决定。 | 来源: sort'; --- dim_goods_category +COMMENT ON TABLE billiards_dwd.dim_store_goods_ex IS 'DWD 维度表(扩展字段表):dim_store_goods_ex。ODS 来源表:billiards_ods.store_goods_master(对应 JSON:store_goods_master.json;分析:store_goods_master-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.site_goods_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2793025851560005(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_master - id。 【JSON字段】store_goods_master.json - data.orderGoodsList - id。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.site_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】朗朗桌球(名称字段,用于展示与辅助识别)。 【ODS来源】store_goods_master - siteName。 【JSON字段】store_goods_master.json - data.orderGoodsList - siteName。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.unit IS '【说明】维度字段,用于补充维度属性。 【示例】桶(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - unit。 【JSON字段】store_goods_master.json - data.orderGoodsList - unit。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.goods_barcode IS '【说明】维度字段,用于补充维度属性。 【示例】NULL(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - goods_bar_code。 【JSON字段】store_goods_master.json - data.orderGoodsList - goods_bar_code。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.goods_cover_url IS '【说明】维度字段,用于补充维度属性。 【示例】https://oss.ficoo.vip/admin/8M1WM7_1753204221337.jpg(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - goods_cover。 【JSON字段】store_goods_master.json - data.orderGoodsList - goods_cover。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.pinyin_initial IS '【说明】维度字段,用于补充维度属性。 【示例】HWDPM,GWDPM(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - pinyin_initial。 【JSON字段】store_goods_master.json - data.orderGoodsList - pinyin_initial。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.stock_qty IS '【说明】数量/时长字段,用于统计与计量。 【示例】18(数量/时长字段,用于统计与计量)。 【ODS来源】store_goods_master - stock。 【JSON字段】store_goods_master.json - data.orderGoodsList - stock。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.stock_secondary_qty IS '【说明】数量/时长字段,用于统计与计量。 【示例】0(数量/时长字段,用于统计与计量)。 【ODS来源】store_goods_master - stock_A。 【JSON字段】store_goods_master.json - data.orderGoodsList - stock_A。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.safety_stock_qty IS '【说明】数量/时长字段,用于统计与计量。 【示例】0(数量/时长字段,用于统计与计量)。 【ODS来源】store_goods_master - safe_stock。 【JSON字段】store_goods_master.json - data.orderGoodsList - safe_stock。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.cost_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_master - cost_price。 【JSON字段】store_goods_master.json - data.orderGoodsList - cost_price。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.cost_price_type IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】1(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_master - cost_price_type。 【JSON字段】store_goods_master.json - data.orderGoodsList - cost_price_type。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.provisional_total_cost IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_master - total_purchase_cost。 【JSON字段】store_goods_master.json - data.orderGoodsList - total_purchase_cost。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.total_purchase_cost IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_master - total_purchase_cost。 【JSON字段】store_goods_master.json - data.orderGoodsList - total_purchase_cost。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.min_discount_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】7.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_master - min_discount_price。 【JSON字段】store_goods_master.json - data.orderGoodsList - min_discount_price。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.is_discountable IS '【说明】数量/时长字段,用于统计与计量。 【示例】1(数量/时长字段,用于统计与计量)。 【ODS来源】store_goods_master - able_discount。 【JSON字段】store_goods_master.json - data.orderGoodsList - able_discount。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.days_on_shelf IS '【说明】维度字段,用于补充维度属性。 【示例】13(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - days_available。 【JSON字段】store_goods_master.json - data.orderGoodsList - days_available。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.audit_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】2(状态枚举字段,用于标识业务状态)。 【ODS来源】store_goods_master - audit_status。 【JSON字段】store_goods_master.json - data.orderGoodsList - audit_status。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.sale_channel IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - sale_channel。 【JSON字段】store_goods_master.json - data.orderGoodsList - sale_channel。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.is_warehousing IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】1(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】store_goods_master - is_warehousing。 【JSON字段】store_goods_master.json - data.orderGoodsList - is_warehousing。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.freeze_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】0(状态枚举字段,用于标识业务状态)。 【ODS来源】store_goods_master - freeze。 【JSON字段】store_goods_master.json - data.orderGoodsList - freeze。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.forbid_sell_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】store_goods_master - forbid_sell_status。 【JSON字段】store_goods_master.json - data.orderGoodsList - forbid_sell_status。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.able_site_transfer IS '【说明】维度字段,用于补充维度属性。 【示例】2(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - able_site_transfer。 【JSON字段】store_goods_master.json - data.orderGoodsList - able_site_transfer。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.custom_label_type IS '【说明】维度字段,用于补充维度属性。 【示例】2(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - custom_label_type。 【JSON字段】store_goods_master.json - data.orderGoodsList - custom_label_type。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.option_required IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - option_required。 【JSON字段】store_goods_master.json - data.orderGoodsList - option_required。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.remark IS '【说明】维度字段,用于补充维度属性。 【示例】NULL(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - remark。 【JSON字段】store_goods_master.json - data.orderGoodsList - remark。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.sort_order IS '【说明】维度字段,用于补充维度属性。 【示例】100(维度字段,用于补充维度属性)。 【ODS来源】store_goods_master - sort。 【JSON字段】store_goods_master.json - data.orderGoodsList - sort。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】store_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】store_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】store_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_store_goods_ex.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】store_goods_master - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; + + CREATE TABLE IF NOT EXISTS dim_goods_category ( category_id BIGINT, tenant_id BIGINT, @@ -764,20 +835,26 @@ CREATE TABLE IF NOT EXISTS dim_goods_category ( SCD2_version INT, PRIMARY KEY (category_id) ); -COMMENT ON COLUMN dim_goods_category.category_id IS '分类节点主键。来自分类树节点的 id,在整个商品分类维度内唯一。用于在事实表中作为商品分类外键引用。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dim_goods_category.tenant_id IS '租户 ID(商户/品牌 ID)。当前所有节点取值相同,表示同一个租户下的分类树。事实表可通过该字段与租户维度或门店维度间接关联。 | 来源: tenant_id | 角色: 外键'; -COMMENT ON COLUMN dim_goods_category.category_name IS '分类名称。一级大类示例:槟榔、器材、酒水、水果、零食、雪糕、香烟、其他、小吃。二级子类示例:槟榔、皮头、球杆、其他、饮料、酒水、茶水、咖啡、加料、洋酒、果盘、面、小吃等。用于前台展示和报表按细分类统计。 | 来源: category_name'; -COMMENT ON COLUMN dim_goods_category.alias_name IS '分类别名。当前样例数据全部为空字符串,预留给业务方做简称或别名展示。对现阶段经营分析无影响。 | 来源: alias_name'; -COMMENT ON COLUMN dim_goods_category.parent_category_id IS '父级分类 ID。根节点取值为 0,表示没有父分类;子节点取值为父分类的 id。与 category_id 共同形成树形层级关系。 | 来源: pid | 角色: 外键'; -COMMENT ON COLUMN dim_goods_category.business_name IS '业务大类名称。将多个细分类归入同一业务线。观测值与一级大类相同:槟榔、器材、酒水、水果、零食、雪糕、香烟、其他、小吃。子类的 business_name 继承所属根节点的大类名称。用于按业务线汇总库存和销售。 | 来源: business_name'; -COMMENT ON COLUMN dim_goods_category.tenant_goods_business_id IS '业务大类 ID。每个 business_name 对应唯一一个 tenant_goods_business_id,根节点和其下所有子节点共享同一取值。例如“酒水”大类及其子类饮料、茶水、咖啡、加料、洋酒拥有相同的业务 ID。可作为外键连接“业务线维度表”。 | 来源: tenant_goods_business_id | 角色: 外键'; -COMMENT ON COLUMN dim_goods_category.category_level IS '分类层级:1 表示一级大类(pid = 0),2 表示二级子类(pid ≠ 0)。方便在报表中区分大类与子类进行分组和展示层级控制。 | 来源: 由 pid 推导'; -COMMENT ON COLUMN dim_goods_category.is_leaf IS '是否叶子节点:1 表示叶子分类(categoryBoxes 为空列表),0 表示非叶子分类(存在子分类)。当前样例数据中,一级大类是非叶子节点,二级分类是叶子节点。用于树状导航或限制只能在叶子分类建商品。 | 来源: 由 categoryBoxes 推导'; -COMMENT ON COLUMN dim_goods_category.open_salesman IS '营业员开关控制。枚举含义根据业务系统定义,一般设计为:1 表示启用营业员/导购相关功能,2 表示关闭或不启用。当前样例所有分类取值为 2,说明这一套分类在库存模块中统一未启用营业员逻辑。对目前的经营分析影响较小。 | 来源: open_salesman'; -COMMENT ON COLUMN dim_goods_category.sort_order IS '分类排序序号。来自 sort 字段,用于前端展示顺序控制,数值越小越靠前。当前大部分分类为 0,仅少数为 1,说明排序配置较为粗略。对指标统计无实质影响。 | 来源: sort'; -COMMENT ON COLUMN dim_goods_category.is_warehousing IS '是否参与库存管理。枚举:1 表示参与库存管理,0 表示不参与(如服务类商品、手工费用)。当前文件中所有分类取值为 1,表示这一份分类树只包含“走库存”的商品分类。可在库存报表中用作过滤条件。 | 来源: is_warehousing'; --- dim_groupbuy_package +COMMENT ON TABLE billiards_dwd.dim_goods_category IS 'DWD 维度表:dim_goods_category。ODS 来源表:billiards_ods.stock_goods_category_tree(对应 JSON:stock_goods_category_tree.json;分析:stock_goods_category_tree-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dim_goods_category.category_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683528350533(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】stock_goods_category_tree - id。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - id。'; +COMMENT ON COLUMN billiards_dwd.dim_goods_category.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】stock_goods_category_tree - tenant_id。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - tenant_id。'; +COMMENT ON COLUMN billiards_dwd.dim_goods_category.category_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】槟榔(名称字段,用于展示与辅助识别)。 【ODS来源】stock_goods_category_tree - category_name。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - category_name。'; +COMMENT ON COLUMN billiards_dwd.dim_goods_category.alias_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】stock_goods_category_tree - alias_name。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - alias_name。'; +COMMENT ON COLUMN billiards_dwd.dim_goods_category.parent_category_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】stock_goods_category_tree - pid。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - pid。'; +COMMENT ON COLUMN billiards_dwd.dim_goods_category.business_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】槟榔(名称字段,用于展示与辅助识别)。 【ODS来源】stock_goods_category_tree - business_name。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - business_name。'; +COMMENT ON COLUMN billiards_dwd.dim_goods_category.tenant_goods_business_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683528317766(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】stock_goods_category_tree - tenant_goods_business_id。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - tenant_goods_business_id。'; +COMMENT ON COLUMN billiards_dwd.dim_goods_category.category_level IS '【说明】维度字段,用于补充维度属性。 【示例】NULL(维度字段,用于补充维度属性)。 【ODS来源】stock_goods_category_tree - CASE WHEN pid = 0 THEN 1 ELSE 2 END。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - CASE WHEN pid = 0 THEN 1 ELSE 2 END。'; +COMMENT ON COLUMN billiards_dwd.dim_goods_category.is_leaf IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】NULL(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】stock_goods_category_tree - CASE WHEN categoryboxes IS NULL OR jsonb_array_length(categoryboxes)=0 THEN 1 ELSE 0 END。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - CASE WHEN categoryboxes IS NULL OR jsonb_array_length(categoryboxes)=0 THEN 1 ELSE 0 END。'; +COMMENT ON COLUMN billiards_dwd.dim_goods_category.open_salesman IS '【说明】维度字段,用于补充维度属性。 【示例】2(维度字段,用于补充维度属性)。 【ODS来源】stock_goods_category_tree - open_salesman。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - open_salesman。'; +COMMENT ON COLUMN billiards_dwd.dim_goods_category.sort_order IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】stock_goods_category_tree - sort。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - sort。'; +COMMENT ON COLUMN billiards_dwd.dim_goods_category.is_warehousing IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】1(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】stock_goods_category_tree - is_warehousing。 【JSON字段】stock_goods_category_tree.json - data.goodsCategoryList - is_warehousing。'; +COMMENT ON COLUMN billiards_dwd.dim_goods_category.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】stock_goods_category_tree - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_goods_category.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】stock_goods_category_tree - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_goods_category.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】stock_goods_category_tree - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_goods_category.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】stock_goods_category_tree - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; + + CREATE TABLE IF NOT EXISTS dim_groupbuy_package ( groupbuy_package_id BIGINT, tenant_id BIGINT, @@ -801,24 +878,30 @@ CREATE TABLE IF NOT EXISTS dim_groupbuy_package ( SCD2_version INT, PRIMARY KEY (groupbuy_package_id) ); -COMMENT ON COLUMN dim_groupbuy_package.groupbuy_package_id IS '门店侧团购套餐主键。每条记录一个套餐定义,供团购券核销记录指向。平台验券记录中的 group_package_id 通常指向这里。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dim_groupbuy_package.tenant_id IS '租户(品牌/商户)ID。本数据集中全表相同,表示同一品牌。 | 来源: tenant_id | 角色: 外键(指向租户维)'; -COMMENT ON COLUMN dim_groupbuy_package.site_id IS '门店 ID,本表所有记录属于同一门店。与其他 JSON 的 site_id 一致。 | 来源: site_id | 角色: 外键(指向门店维)'; -COMMENT ON COLUMN dim_groupbuy_package.package_name IS '团购套餐名称,用于前台展示及核销界面,例如“早场特惠一小时”“KTV欢唱四小时”等。 | 来源: package_name'; -COMMENT ON COLUMN dim_groupbuy_package.package_template_id IS '上层套餐 ID 或总部/系统级套餐 ID。多个 groupbuy_package_id 可能共享同一个 package_template_id,表示同一业务套餐在不同门店或不同版本下的配置。 | 来源: package_id | 角色: 外键(指向套餐模板维,后续可建)'; -COMMENT ON COLUMN dim_groupbuy_package.selling_price IS '团购售卖价,面向顾客在外部平台的成交价格。当前样本全部为 0,实际平台售价可能在外部系统,不在本地落地。 | 来源: selling_price'; -COMMENT ON COLUMN dim_groupbuy_package.coupon_face_value IS '券面值或内部结算面值。表示此套餐在门店侧可以抵扣的金额,用于验券或套餐流水时记账。例如“早场特惠一小时”可配置为 40.00,“KTV欢唱四小时”可配置为 200.00。当前样本为 0 但字段设计上非常关键。 | 来源: coupon_money'; -COMMENT ON COLUMN dim_groupbuy_package.duration_seconds IS '套餐包含的时长,单位为秒。常见取值:3600 表示 1 小时,7200 表示 2 小时,14400 表示 4 小时。核销时可用于换算可用台费时长。 | 来源: duration'; -COMMENT ON COLUMN dim_groupbuy_package.start_time IS '套餐整体生效开始时间。例如“2025-07-20 00:00:00”。通常从某日零点开始。 | 来源: start_time'; -COMMENT ON COLUMN dim_groupbuy_package.end_time IS '套餐整体生效结束时间。在该时间点之后不可使用。极大日期(如 9999-12-31 23:59:59)可视为长期有效。 | 来源: end_time'; -COMMENT ON COLUMN dim_groupbuy_package.table_area_name IS '套餐适用的门店台区名称,例如“A区中八”“B区中八”“斯诺克”“包厢”“KTV”等。主要用于展示和过滤,配合区域 ID 列实现人类可读的说明。 | 来源: table_area_name'; -COMMENT ON COLUMN dim_groupbuy_package.is_enabled IS '启用状态枚举。1 表示启用或上架;2 表示停用或下架。侧重表示“配置是否上架”,与 effective_status 区分。 | 来源: is_enabled'; -COMMENT ON COLUMN dim_groupbuy_package.is_delete IS '逻辑删除标志。0 表示正常;1 表示逻辑删除(数据仍保留但不再使用)。当前样本全部为 0。 | 来源: is_delete'; -COMMENT ON COLUMN dim_groupbuy_package.create_time IS '套餐配置在系统中的创建时间,用于审计和版本追踪。 | 来源: create_time'; -COMMENT ON COLUMN dim_groupbuy_package.tenant_table_area_id_list IS '租户级台区分组 ID 列表。当前每条记录为一个大整数(例如 2791960001957765)字符串,表示“台区分组”主键。系统通过此分组再关联到具体多个台区。 | 来源: tenant_table_area_id_list | 角色: 外键(指向台区分组维,后续可建)'; -COMMENT ON COLUMN dim_groupbuy_package.card_type_ids IS '允许使用本套餐的会员卡类型 ID 列表。当前样本统一为字符串“0”,表示未限制卡种,任意顾客或任意会员卡都可使用。若未来启用,将以分隔的 ID 列表形式记录限定卡种。 | 来源: card_type_ids | 角色: 外键(潜在指向卡种维)'; --- dim_groupbuy_package_Ex +COMMENT ON TABLE billiards_dwd.dim_groupbuy_package IS 'DWD 维度表:dim_groupbuy_package。ODS 来源表:billiards_ods.group_buy_packages(对应 JSON:group_buy_packages.json;分析:group_buy_packages-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.groupbuy_package_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2939215004469573(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_packages - id。 【JSON字段】group_buy_packages.json - data.packageCouponList - id。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_packages - tenant_id。 【JSON字段】group_buy_packages.json - data.packageCouponList - tenant_id。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_packages - site_id。 【JSON字段】group_buy_packages.json - data.packageCouponList - site_id。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.package_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】早场特惠一小时(名称字段,用于展示与辅助识别)。 【ODS来源】group_buy_packages - package_name。 【JSON字段】group_buy_packages.json - data.packageCouponList - package_name。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.package_template_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】1814707240811572(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_packages - package_id。 【JSON字段】group_buy_packages.json - data.packageCouponList - package_id。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.selling_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】group_buy_packages - selling_price。 【JSON字段】group_buy_packages.json - data.packageCouponList - selling_price。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.coupon_face_value IS '【说明】维度字段,用于补充维度属性。 【示例】0.0(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - coupon_money。 【JSON字段】group_buy_packages.json - data.packageCouponList - coupon_money。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.duration_seconds IS '【说明】数量/时长字段,用于统计与计量。 【示例】3600(数量/时长字段,用于统计与计量)。 【ODS来源】group_buy_packages - duration。 【JSON字段】group_buy_packages.json - data.packageCouponList - duration。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.start_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-10-27 00:00:00(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】group_buy_packages - start_time。 【JSON字段】group_buy_packages.json - data.packageCouponList - start_time。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.end_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2026-10-28 00:00:00(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】group_buy_packages - end_time。 【JSON字段】group_buy_packages.json - data.packageCouponList - end_time。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.table_area_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】A区(名称字段,用于展示与辅助识别)。 【ODS来源】group_buy_packages - table_area_name。 【JSON字段】group_buy_packages.json - data.packageCouponList - table_area_name。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.is_enabled IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】1(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】group_buy_packages - is_enabled。 【JSON字段】group_buy_packages.json - data.packageCouponList - is_enabled。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.is_delete IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】group_buy_packages - is_delete。 【JSON字段】group_buy_packages.json - data.packageCouponList - is_delete。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-10-27 18:24:09(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】group_buy_packages - create_time。 【JSON字段】group_buy_packages.json - data.packageCouponList - create_time。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.tenant_table_area_id_list IS '【说明】维度字段,用于补充维度属性。 【示例】2791960001957765(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - tenant_table_area_id_list。 【JSON字段】group_buy_packages.json - data.packageCouponList - tenant_table_area_id_list。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.card_type_ids IS '【说明】维度字段,用于补充维度属性。 【示例】0(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - card_type_ids。 【JSON字段】group_buy_packages.json - data.packageCouponList - card_type_ids。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】group_buy_packages - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】group_buy_packages - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】group_buy_packages - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】group_buy_packages - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; + + CREATE TABLE IF NOT EXISTS dim_groupbuy_package_Ex ( groupbuy_package_id BIGINT, site_name VARCHAR(100), @@ -846,28 +929,34 @@ CREATE TABLE IF NOT EXISTS dim_groupbuy_package_Ex ( SCD2_version INT, PRIMARY KEY (groupbuy_package_id) ); -COMMENT ON COLUMN dim_groupbuy_package_Ex.groupbuy_package_id IS '门店侧团购套餐主键。每条记录一个套餐定义,供团购券核销记录指向。平台验券记录中的 group_package_id 通常指向这里。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dim_groupbuy_package_Ex.site_name IS '门店名称,当前均为“朗朗桌球”。属于冗余展示字段,可用于报表标题。 | 来源: site_name'; -COMMENT ON COLUMN dim_groupbuy_package_Ex.usable_count IS '可使用次数上限。当前全部为 9999999,用作“无限次使用”的哨兵值。若未来限制次数,只需配置为具体次数。 | 来源: usable_count'; -COMMENT ON COLUMN dim_groupbuy_package_Ex.date_type IS '日期限制类型枚举。当前样本全部为 1。推测常见含义:1 表示“全部日期可用”;其他值可用于区分工作日、周末或指定日期等模式。 | 来源: date_type'; -COMMENT ON COLUMN dim_groupbuy_package_Ex.usable_range IS '日期范围说明的文本,例如“周一至周五”等。当前全部为空字符串,实际规则由 date_type 与时间段字段控制。 | 来源: usable_range'; -COMMENT ON COLUMN dim_groupbuy_package_Ex.date_info IS '更细粒度的日期信息,可能用于存储具体日期列表或节假日规则,形式可能是编码或 JSON 字符串。当前几乎全部为空,仅有极少记录为“0”。 | 来源: date_info'; -COMMENT ON COLUMN dim_groupbuy_package_Ex.start_clock IS '每日可用时间段的起始时间(第一段),字符串格式 HH:MM:SS,例如“10:00:00”“00:00:00”。与 end_clock 组合定义日内时段。 | 来源: start_clock'; -COMMENT ON COLUMN dim_groupbuy_package_Ex.end_clock IS '每日可用时间段的结束时间(第一段),字符串格式 HH:MM:SS。与 start_clock 共同描述第一段可用时段。 | 来源: end_clock'; -COMMENT ON COLUMN dim_groupbuy_package_Ex.add_start_clock IS '附加可用时段的起始时间(第二段),格式 HH:MM:SS。当前样本常见值为“00:00:00”或“10:00:00”。用于配置早场加夜场等双时段场景。 | 来源: add_start_clock'; -COMMENT ON COLUMN dim_groupbuy_package_Ex.add_end_clock IS '附加可用时段的结束时间(第二段)。常见值如“1.00:00:00”“18:00:00”“23:59:00”。其中“1.00:00:00”表示跨至次日零点,用于表示“可用到第二天凌晨”的场景。 | 来源: add_end_clock'; -COMMENT ON COLUMN dim_groupbuy_package_Ex.area_tag_type IS '区域标记类型枚举。当前样本全部为 1。推测 1 表示“按台区标签限制”(如 A 区、B 区、中八、斯诺克、包厢、KTV 等)。其他取值可能对应按具体台桌或其它规则限用。 | 来源: area_tag_type'; -COMMENT ON COLUMN dim_groupbuy_package_Ex.table_area_id IS '单一台区 ID。当前样本全部为 0。原始设计用于限定只能在一个具体区域使用,但由于已引入多选逻辑,实际使用已迁移到 tenant_table_area_id_list。 | 来源: table_area_id'; -COMMENT ON COLUMN dim_groupbuy_package_Ex.tenant_table_area_id IS '租户级台区 ID,单值版本。当前样本全部为 0。与 table_area_id 类似,已被多选列表字段取代。 | 来源: tenant_table_area_id'; -COMMENT ON COLUMN dim_groupbuy_package_Ex.table_area_id_list IS '门店级台区 ID 列表。当前样本全部为空字符串。根据命名推测原本用于存储多个 table_area_id,实际实现已转向租户维度列表字段。 | 来源: table_area_id_list'; -COMMENT ON COLUMN dim_groupbuy_package_Ex.group_type IS '团购类型枚举。当前样本全部为 1。推测 1 表示“计时类/台费类套餐”。其他取值可能用于商品类套餐、代金券类等,需结合系统配置进一步确认。 | 来源: group_type'; -COMMENT ON COLUMN dim_groupbuy_package_Ex.system_group_type IS '系统级团购类型枚举。当前样本全部为 1。推测 1 表示“券码类团购”,即通过券码核销。其他取值可能为卡内套餐、内部套餐等,具体含义有待业务确认。 | 来源: system_group_type'; -COMMENT ON COLUMN dim_groupbuy_package_Ex.package_type IS '内部业务子类型枚举。样本中取值有 1 与 2,各占比不同。具体含义不明,可能区分不同产品线或套餐来源,例如“平台合作套餐”与“自定义套餐”等,需要参考业务文档。 | 来源: type'; -COMMENT ON COLUMN dim_groupbuy_package_Ex.effective_status IS '当前有效状态枚举,由系统根据时间及配置动态计算。观测值:1 表示当前有效,可正常核销;3 表示失效或已过期(即使 is_enabled 仍为 1,也不可使用)。可用于分析时过滤失效套餐。 | 来源: effective_status'; -COMMENT ON COLUMN dim_groupbuy_package_Ex.max_selectable_categories IS '最大可选择分类数或子项数,具体含义未在样本和说明中体现,当前值全部为 0。可能用于“组合型套餐”中限制可选项目数量。 | 来源: max_selectable_categories'; -COMMENT ON COLUMN dim_groupbuy_package_Ex.creator_name IS '创建人名称,例如“店长:郑丽珊”。主要用于审计追踪和后台展示。 | 来源: creator_name'; --- dwd_settlement_head +COMMENT ON TABLE billiards_dwd.dim_groupbuy_package_ex IS 'DWD 维度表(扩展字段表):dim_groupbuy_package_ex。ODS 来源表:billiards_ods.group_buy_packages(对应 JSON:group_buy_packages.json;分析:group_buy_packages-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.groupbuy_package_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2939215004469573(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_packages - id。 【JSON字段】group_buy_packages.json - data.packageCouponList - id。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.site_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】朗朗桌球(名称字段,用于展示与辅助识别)。 【ODS来源】group_buy_packages - site_name。 【JSON字段】group_buy_packages.json - data.packageCouponList - site_name。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.usable_count IS '【说明】数量/时长字段,用于统计与计量。 【示例】9999999(数量/时长字段,用于统计与计量)。 【ODS来源】group_buy_packages - usable_count。 【JSON字段】group_buy_packages.json - data.packageCouponList - usable_count。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.date_type IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - date_type。 【JSON字段】group_buy_packages.json - data.packageCouponList - date_type。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.usable_range IS '【说明】维度字段,用于补充维度属性。 【示例】NULL(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - usable_range。 【JSON字段】group_buy_packages.json - data.packageCouponList - usable_range。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.date_info IS '【说明】维度字段,用于补充维度属性。 【示例】0(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - date_info。 【JSON字段】group_buy_packages.json - data.packageCouponList - date_info。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.start_clock IS '【说明】维度字段,用于补充维度属性。 【示例】00:00:00(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - start_clock。 【JSON字段】group_buy_packages.json - data.packageCouponList - start_clock。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.end_clock IS '【说明】维度字段,用于补充维度属性。 【示例】1.00:00:00(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - end_clock。 【JSON字段】group_buy_packages.json - data.packageCouponList - end_clock。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.add_start_clock IS '【说明】维度字段,用于补充维度属性。 【示例】00:00:00(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - add_start_clock。 【JSON字段】group_buy_packages.json - data.packageCouponList - add_start_clock。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.add_end_clock IS '【说明】维度字段,用于补充维度属性。 【示例】1.00:00:00(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - add_end_clock。 【JSON字段】group_buy_packages.json - data.packageCouponList - add_end_clock。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.area_tag_type IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - area_tag_type。 【JSON字段】group_buy_packages.json - data.packageCouponList - area_tag_type。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.table_area_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_packages - table_area_id。 【JSON字段】group_buy_packages.json - data.packageCouponList - table_area_id。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.tenant_table_area_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_packages - tenant_table_area_id。 【JSON字段】group_buy_packages.json - data.packageCouponList - tenant_table_area_id。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.table_area_id_list IS '【说明】维度字段,用于补充维度属性。 【示例】NULL(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - table_area_id_list。 【JSON字段】group_buy_packages.json - data.packageCouponList - table_area_id_list。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.group_type IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - group_type。 【JSON字段】group_buy_packages.json - data.packageCouponList - group_type。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.system_group_type IS '【说明】维度字段,用于补充维度属性。 【示例】1(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - system_group_type。 【JSON字段】group_buy_packages.json - data.packageCouponList - system_group_type。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.package_type IS '【说明】维度字段,用于补充维度属性。 【示例】2(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - type。 【JSON字段】group_buy_packages.json - data.packageCouponList - type。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.effective_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】group_buy_packages - effective_status。 【JSON字段】group_buy_packages.json - data.packageCouponList - effective_status。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.max_selectable_categories IS '【说明】维度字段,用于补充维度属性。 【示例】0(维度字段,用于补充维度属性)。 【ODS来源】group_buy_packages - max_selectable_categories。 【JSON字段】group_buy_packages.json - data.packageCouponList - max_selectable_categories。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.creator_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】店长:郑丽珊(名称字段,用于展示与辅助识别)。 【ODS来源】group_buy_packages - creator_name。 【JSON字段】group_buy_packages.json - data.packageCouponList - creator_name。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.scd2_start_time IS '【说明】SCD2 开始时间(版本生效起点),用于维度慢变追踪。 【示例】2025-11-10T00:00:00+08:00(SCD2 开始时间(版本生效起点),用于维度慢变追踪)。 【ODS来源】group_buy_packages - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.scd2_end_time IS '【说明】SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。 【示例】9999-12-31T00:00:00+00:00(SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪)。 【ODS来源】group_buy_packages - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.scd2_is_current IS '【说明】SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。 【示例】1(SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录)。 【ODS来源】group_buy_packages - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; +COMMENT ON COLUMN billiards_dwd.dim_groupbuy_package_ex.scd2_version IS '【说明】SCD2 版本号(自增),用于与时间段一起避免版本重叠。 【示例】1(SCD2 版本号(自增),用于与时间段一起避免版本重叠)。 【ODS来源】group_buy_packages - 无(DWD慢变元数据)。 【JSON字段】无 - DWD慢变元数据 - 无。'; + + CREATE TABLE IF NOT EXISTS dwd_settlement_head ( order_settle_id BIGINT, tenant_id BIGINT, @@ -903,40 +992,42 @@ CREATE TABLE IF NOT EXISTS dwd_settlement_head ( point_amount NUMERIC(18,2), PRIMARY KEY (order_settle_id) ); -COMMENT ON COLUMN dwd_settlement_head.order_settle_id IS '结账记录主键 ID(订单结算 ID),全系统统一的结账单号,用于关联台费流水、助教流水、小票等明细表。 | 来源: settleList.id | 角色: 主键'; -COMMENT ON COLUMN dwd_settlement_head.tenant_id IS '租户/商户 ID(品牌维度),与各业务 JSON 中的 tenantId 一致。 | 来源: settleList.tenantId | 角色: 外键'; -COMMENT ON COLUMN dwd_settlement_head.site_id IS '门店 ID,用于关联门店维表 dim_site。 | 来源: settleList.siteId | 角色: 外键'; -COMMENT ON COLUMN dwd_settlement_head.site_name IS '门店名称快照,冗余展示字段,推荐通过 site_id 关联维表获取标准名称。 | 来源: settleList.siteName'; -COMMENT ON COLUMN dwd_settlement_head.table_id IS '结账关联的桌台 ID,对应台桌维表 dim_site_table 的主键。 | 来源: settleList.tableId | 角色: 外键'; -COMMENT ON COLUMN dwd_settlement_head.settle_name IS '结账对象名称,一般为 “区域 + 桌号”,如 “A区 A17”,便于报表展示。 | 来源: settleList.settleName'; -COMMENT ON COLUMN dwd_settlement_head.order_trade_no IS '交易号 / 订单流水号,与台费、助教等明细中的 order_trade_no 一致,用于按“交易维度”串联各业务明细。 | 来源: settleList.settleRelateId'; -COMMENT ON COLUMN dwd_settlement_head.create_time IS '结账创建时间(收银端点击“确认结账”的时间),格式:YYYY-MM-DD HH:MM:SS。 | 来源: settleList.createTime'; -COMMENT ON COLUMN dwd_settlement_head.pay_time IS '实际支付完成时间,通常晚于 create_time,用于资金结算及对账分析。 | 来源: settleList.payTime'; -COMMENT ON COLUMN dwd_settlement_head.settle_type IS '结账类型枚举。样本中主要有:1=正常结账;3=特殊类型结账(如挂账、补单、调整单等,具体需业务确认)。 | 来源: settleList.settleType'; -COMMENT ON COLUMN dwd_settlement_head.revoke_order_id IS '若当前记录属于撤销链路,记录对应的撤销单或原单的结账 ID,形成自关联关系。样本中为 0。 | 来源: settleList.revokeOrderId | 角色: 外键'; -COMMENT ON COLUMN dwd_settlement_head.member_id IS '会员主键 ID,一般对应租户维度的会员 ID,用于关联 dim_member。 | 来源: settleList.memberId | 角色: 外键'; -COMMENT ON COLUMN dwd_settlement_head.member_name IS '会员姓名快照,冗余展示字段;当前样本多为空,推荐通过关联会员维表获取标准姓名。 | 来源: settleList.memberName'; -COMMENT ON COLUMN dwd_settlement_head.member_phone IS '会员手机号快照,冗余展示字段,通常通过会员维表获取更可靠。 | 来源: settleList.memberPhone'; -COMMENT ON COLUMN dwd_settlement_head.member_card_account_id IS '会员卡账户 ID,对应 dim_member_card_account 主键;当前样本多为 0,但结构上是“结账 → 具体卡账户”的外键。 | 来源: settleList.tenantMemberCardId | 角色: 外键'; -COMMENT ON COLUMN dwd_settlement_head.member_card_type_name IS '会员卡类型名称快照,如“储值卡”“次卡”等,便于前端展示和报表查看。 | 来源: settleList.memberCardTypeName'; -COMMENT ON COLUMN dwd_settlement_head.is_bind_member IS '本单是否绑定会员。0=否(散客);1=是(存在 member_id)。样本中多为 0。 | 来源: settleList.isBindMember'; -COMMENT ON COLUMN dwd_settlement_head.member_discount_amount IS '会员折扣产生的优惠金额(元),例如会员卡折扣减免的台费/商品金额,参与整单优惠拆分。 | 来源: settleList.memberDiscountAmount'; -COMMENT ON COLUMN dwd_settlement_head.consume_money IS '本次结账消费总额(原价小计),约等于台费 + 商品 + 助教 + 服务等项目原价金额之和,未扣除任何优惠。 | 来源: settleList.consumeMoney'; -COMMENT ON COLUMN dwd_settlement_head.table_charge_money IS '本单台费(桌台计费部分)的金额(原价侧)。 | 来源: settleList.tableChargeMoney'; -COMMENT ON COLUMN dwd_settlement_head.goods_money IS '本单商品销售原价金额,对应酒水、小吃等商品类消费。 | 来源: settleList.goodsMoney'; -COMMENT ON COLUMN dwd_settlement_head.real_goods_money IS '商品实际计入金额,通常为 goods_money 扣除部分促销/折扣之后的金额。 | 来源: settleList.realGoodsMoney'; -COMMENT ON COLUMN dwd_settlement_head.assistant_pd_money IS '助教“排钟 / 点钟 / 按时长服务”等项目的应计金额(原价侧),与助教流水中的 ledger_amount 汇总对应。 | 来源: settleList.assistantPdMoney'; -COMMENT ON COLUMN dwd_settlement_head.assistant_cx_money IS '助教“超休”类助教项目金额(原价侧),是对助教收入的补充拆分维度,具体业务定义需结合助教模块确认。 | 来源: settleList.assistantCxMoney'; -COMMENT ON COLUMN dwd_settlement_head.adjust_amount IS '手动减免,人工调价金额汇总(整单减免或特殊价格调整),通常正值表示减免额度。 | 来源: settleList.adjustAmount'; -COMMENT ON COLUMN dwd_settlement_head.pay_amount IS '本单顾客“实付金额”(不含券面值这类虚拟抵扣),等于各支付渠道金额之和减去退款等调整。 | 来源: settleList.payAmount'; -COMMENT ON COLUMN dwd_settlement_head.balance_amount IS '从会员储值余额账户中扣除的金额(储值卡消费部分)。 | 来源: settleList.balanceAmount'; -COMMENT ON COLUMN dwd_settlement_head.recharge_card_amount IS '充值卡支付金额(使用充值类卡片余额支付的金额),与储值/充值型卡资金来源相关。 | 来源: settleList.rechargeCardAmount'; -COMMENT ON COLUMN dwd_settlement_head.gift_card_amount IS '礼品卡或代金卡支付金额。 | 来源: settleList.giftCardAmount'; -COMMENT ON COLUMN dwd_settlement_head.coupon_amount IS '本单由优惠券(团购券、代金券等)实际抵扣的金额。 | 来源: settleList.couponAmount'; -COMMENT ON COLUMN dwd_settlement_head.rounding_amount IS '抹零 / 四舍五入产生的金额差值,例如按角、分抹零。 | 来源: settleList.roundingAmount'; -COMMENT ON COLUMN dwd_settlement_head.point_amount IS '积分相关金额或数量。根据系统配置可能表示“使用积分抵扣的金额”或“本单获得的积分折算金额”,文档未给出唯一定义。 | 来源: settleList.pointAmount'; --- dwd_settlement_head_Ex +COMMENT ON TABLE billiards_dwd.dwd_settlement_head IS 'DWD 明细事实表:dwd_settlement_head。ODS 来源表:billiards_ods.settlement_records(对应 JSON:settlement_records.json;分析:settlement_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.order_settle_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】settlement_records - id。 【JSON字段】settlement_records.json - $ - id。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】settlement_records - tenantid。 【JSON字段】settlement_records.json - $ - tenantid。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】settlement_records - siteid。 【JSON字段】settlement_records.json - $ - siteid。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.site_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】settlement_records - sitename。 【JSON字段】settlement_records.json - $ - sitename。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.table_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】settlement_records - tableid。 【JSON字段】settlement_records.json - $ - tableid。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.settle_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】settlement_records - settlename。 【JSON字段】settlement_records.json - $ - settlename。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.order_trade_no IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】settlement_records - settlerelateid。 【JSON字段】settlement_records.json - $ - settlerelateid。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】NULL(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】settlement_records - createtime。 【JSON字段】settlement_records.json - $ - createtime。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.pay_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】NULL(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】settlement_records - paytime。 【JSON字段】settlement_records.json - $ - paytime。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.settle_type IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】settlement_records - settletype。 【JSON字段】settlement_records.json - $ - settletype。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.revoke_order_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】settlement_records - revokeorderid。 【JSON字段】settlement_records.json - $ - revokeorderid。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】settlement_records - memberid。 【JSON字段】settlement_records.json - $ - memberid。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.member_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】settlement_records - membername。 【JSON字段】settlement_records.json - $ - membername。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.member_phone IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】settlement_records - memberphone。 【JSON字段】settlement_records.json - $ - memberphone。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.member_card_account_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】settlement_records - tenantmembercardid。 【JSON字段】settlement_records.json - $ - tenantmembercardid。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.member_card_type_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】settlement_records - membercardtypename。 【JSON字段】settlement_records.json - $ - membercardtypename。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.is_bind_member IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】NULL(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】settlement_records - isbindmember。 【JSON字段】settlement_records.json - $ - isbindmember。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.member_discount_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - memberdiscountamount。 【JSON字段】settlement_records.json - $ - memberdiscountamount。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.consume_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - consumemoney。 【JSON字段】settlement_records.json - $ - consumemoney。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.table_charge_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - tablechargemoney。 【JSON字段】settlement_records.json - $ - tablechargemoney。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.goods_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - goodsmoney。 【JSON字段】settlement_records.json - $ - goodsmoney。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.real_goods_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - realgoodsmoney。 【JSON字段】settlement_records.json - $ - realgoodsmoney。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.assistant_pd_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - assistantpdmoney。 【JSON字段】settlement_records.json - $ - assistantpdmoney。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.assistant_cx_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - assistantcxmoney。 【JSON字段】settlement_records.json - $ - assistantcxmoney。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.adjust_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - adjustamount。 【JSON字段】settlement_records.json - $ - adjustamount。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.pay_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - payamount。 【JSON字段】settlement_records.json - $ - payamount。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.balance_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - balanceamount。 【JSON字段】settlement_records.json - $ - balanceamount。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.recharge_card_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - rechargecardamount。 【JSON字段】settlement_records.json - $ - rechargecardamount。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.gift_card_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - giftcardamount。 【JSON字段】settlement_records.json - $ - giftcardamount。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.coupon_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - couponamount。 【JSON字段】settlement_records.json - $ - couponamount。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.rounding_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - roundingamount。 【JSON字段】settlement_records.json - $ - roundingamount。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head.point_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - pointamount。 【JSON字段】settlement_records.json - $ - pointamount。'; + + CREATE TABLE IF NOT EXISTS dwd_settlement_head_Ex ( order_settle_id BIGINT, serial_number INTEGER, @@ -970,38 +1061,40 @@ CREATE TABLE IF NOT EXISTS dwd_settlement_head_Ex ( salesman_user_id BIGINT, PRIMARY KEY (order_settle_id) ); -COMMENT ON COLUMN dwd_settlement_head_Ex.order_settle_id IS '结账记录主键 ID(订单结算 ID),全系统统一的结账单号,用于关联台费流水、助教流水、小票等明细表。 | 来源: settleList.id | 角色: 主键'; -COMMENT ON COLUMN dwd_settlement_head_Ex.serial_number IS '结账序列号或打印序号,当前样本全部为 0,具体业务用途未在文档中明确。 | 来源: settleList.serialNumber'; -COMMENT ON COLUMN dwd_settlement_head_Ex.settle_status IS '结账状态枚举。当前样本值均为 2,表示“已结算/已完成”;其他取值及含义未在样本和文档中出现,需后续补充。 | 来源: settleList.settleStatus'; -COMMENT ON COLUMN dwd_settlement_head_Ex.can_be_revoked IS '本单是否仍允许撤销/冲正。0=否;1=是。样本中均为 0。主要用于运维控制,分析价值有限。 | 来源: settleList.canBeRevoked'; -COMMENT ON COLUMN dwd_settlement_head_Ex.revoke_order_name IS '撤销单名称/标识,用于人工识别撤销关系;当前样本为空。 | 来源: settleList.revokeOrderName'; -COMMENT ON COLUMN dwd_settlement_head_Ex.revoke_time IS '撤销时间。无撤销时通常为系统默认值(如 0001-01-01 00:00:00)。 | 来源: settleList.revokeTime'; -COMMENT ON COLUMN dwd_settlement_head_Ex.is_first_order IS '是否首单(新客首单)标记。0=否;1=是。当前样本全部为 0,且文档中说明为“推测用途”,具体业务定义需确认。 | 来源: settleList.isFirst'; -COMMENT ON COLUMN dwd_settlement_head_Ex.service_money IS '其他服务费金额(如包间服务费等),用于与台费、商品、助教金额区分。 | 来源: settleList.serviceMoney'; -COMMENT ON COLUMN dwd_settlement_head_Ex.cash_amount IS '现金支付金额。 | 来源: settleList.cashAmount'; -COMMENT ON COLUMN dwd_settlement_head_Ex.card_amount IS '刷卡类支付金额(如银行卡/信用卡等),具体包含哪些通道需结合支付模块确认。 | 来源: settleList.cardAmount'; -COMMENT ON COLUMN dwd_settlement_head_Ex.online_amount IS '线上支付金额汇总(如微信、支付宝、云闪付等),不区分具体通道。 | 来源: settleList.onlineAmount'; -COMMENT ON COLUMN dwd_settlement_head_Ex.refund_amount IS '本单涉及的退款金额(元)。普通正常结账为 0,退单或部分退款时为正数。 | 来源: settleList.refundAmount'; -COMMENT ON COLUMN dwd_settlement_head_Ex.prepay_money IS '本单使用的预付金/定金金额。 | 来源: settleList.prepayMoney'; -COMMENT ON COLUMN dwd_settlement_head_Ex.payment_method IS '支付方式整体标记(枚举)。当前样本值统一为 0,具体各枚举值对应的支付方式未在文档中说明,需业务确认。 | 来源: settleList.paymentMethod'; -COMMENT ON COLUMN dwd_settlement_head_Ex.coupon_sale_amount IS '优惠券本身的售卖金额/成本金额(例如顾客为购买套餐券支付的金额),当前样本多为 0。 | 来源: settleList.couponSaleAmount'; -COMMENT ON COLUMN dwd_settlement_head_Ex.all_coupon_discount IS '所有券类优惠折扣的汇总金额,用于统计“券优惠总额”。 | 来源: settleList.allCouponDiscount'; -COMMENT ON COLUMN dwd_settlement_head_Ex.goods_promotion_money IS '商品促销产生的优惠金额(如满减、买赠均摊到商品部分)。 | 来源: settleList.goodsPromotionMoney'; -COMMENT ON COLUMN dwd_settlement_head_Ex.assistant_promotion_money IS '助教项目参与活动/促销产生的优惠金额。 | 来源: settleList.assistantPromotionMoney'; -COMMENT ON COLUMN dwd_settlement_head_Ex.activity_discount IS '整单活动折扣金额(如整单打折、满减活动产生的优惠),不区分具体项目类别。 | 来源: settleList.activityDiscount'; -COMMENT ON COLUMN dwd_settlement_head_Ex.assistant_manual_discount IS '针对助教服务的人工减免金额,与一般商品/台费折扣区分开。 | 来源: settleList.assistantManualDiscount'; -COMMENT ON COLUMN dwd_settlement_head_Ex.point_discount_price IS '积分抵扣对应的金额(售价侧),记录因积分使用而减少的应收金额。 | 来源: settleList.pointDiscountPrice'; -COMMENT ON COLUMN dwd_settlement_head_Ex.point_discount_cost IS '积分抵扣对应的成本金额(成本侧),用于毛利和利润分析。 | 来源: settleList.pointDiscountCost'; -COMMENT ON COLUMN dwd_settlement_head_Ex.is_use_coupon IS '是否使用优惠券。0=未使用;1=使用。当前样本均为 0。 | 来源: settleList.isUseCoupon'; -COMMENT ON COLUMN dwd_settlement_head_Ex.is_use_discount IS '是否使用折扣(包括会员折扣或其他整单折扣)。0=未使用;1=使用。当前样本多为 0。 | 来源: settleList.isUseDiscount'; -COMMENT ON COLUMN dwd_settlement_head_Ex.is_activity IS '是否参与营销活动。0=未参与;1=参与。 | 来源: settleList.isActivity'; -COMMENT ON COLUMN dwd_settlement_head_Ex.operator_name IS '结账操作员名称快照(通常带角色前缀,如“收银员:张三”),用于报表展示。 | 来源: settleList.operatorName'; -COMMENT ON COLUMN dwd_settlement_head_Ex.salesman_name IS '营业员/业务员名称,用于业绩归属及提成分析;样本中多为空。 | 来源: settleList.salesManName'; -COMMENT ON COLUMN dwd_settlement_head_Ex.order_remark IS '订单备注,由收银员手工填写的文字说明,如特殊情况、赠送原因等,主要用于人工复盘。 | 来源: settleList.orderRemark'; -COMMENT ON COLUMN dwd_settlement_head_Ex.operator_id IS '结账操作员用户 ID,用于关联员工/账号维度(如 dim_staff)。 | 来源: settleList.operatorId | 角色: 外键'; -COMMENT ON COLUMN dwd_settlement_head_Ex.salesman_user_id IS '营业员用户 ID,可关联员工维度,用于业绩分析和提成计算。 | 来源: settleList.salesManUserId | 角色: 外键'; --- dwd_table_fee_log +COMMENT ON TABLE billiards_dwd.dwd_settlement_head_ex IS 'DWD 明细事实表(扩展字段表):dwd_settlement_head_ex。ODS 来源表:billiards_ods.settlement_records(对应 JSON:settlement_records.json;分析:settlement_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.order_settle_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】settlement_records - id。 【JSON字段】settlement_records.json - $ - id。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.serial_number IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】settlement_records - serialnumber。 【JSON字段】settlement_records.json - $ - serialnumber。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.settle_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】NULL(状态枚举字段,用于标识业务状态)。 【ODS来源】settlement_records - settlestatus。 【JSON字段】settlement_records.json - $ - settlestatus。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.can_be_revoked IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】NULL(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】settlement_records - canberevoked(派生:BOOLEAN(canberevoked))。 【JSON字段】settlement_records.json - $ - canberevoked(派生:BOOLEAN(canberevoked))。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.revoke_order_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】settlement_records - revokeordername。 【JSON字段】settlement_records.json - $ - revokeordername。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.revoke_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】NULL(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】settlement_records - revoketime。 【JSON字段】settlement_records.json - $ - revoketime。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.is_first_order IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】NULL(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】settlement_records - isfirst(派生:BOOLEAN(isfirst))。 【JSON字段】settlement_records.json - $ - isfirst(派生:BOOLEAN(isfirst))。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.service_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - servicemoney。 【JSON字段】settlement_records.json - $ - servicemoney。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.cash_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - cashamount。 【JSON字段】settlement_records.json - $ - cashamount。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.card_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - cardamount。 【JSON字段】settlement_records.json - $ - cardamount。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.online_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - onlineamount。 【JSON字段】settlement_records.json - $ - onlineamount。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.refund_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - refundamount。 【JSON字段】settlement_records.json - $ - refundamount。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.prepay_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - prepaymoney。 【JSON字段】settlement_records.json - $ - prepaymoney。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.payment_method IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】settlement_records - paymentmethod。 【JSON字段】settlement_records.json - $ - paymentmethod。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.coupon_sale_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - couponsaleamount。 【JSON字段】settlement_records.json - $ - couponsaleamount。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.all_coupon_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】settlement_records - allcoupondiscount。 【JSON字段】settlement_records.json - $ - allcoupondiscount。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.goods_promotion_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - goodspromotionmoney。 【JSON字段】settlement_records.json - $ - goodspromotionmoney。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.assistant_promotion_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - assistantpromotionmoney。 【JSON字段】settlement_records.json - $ - assistantpromotionmoney。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.activity_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】settlement_records - activitydiscount。 【JSON字段】settlement_records.json - $ - activitydiscount。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.assistant_manual_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】settlement_records - assistantmanualdiscount。 【JSON字段】settlement_records.json - $ - assistantmanualdiscount。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.point_discount_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - pointdiscountprice。 【JSON字段】settlement_records.json - $ - pointdiscountprice。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.point_discount_cost IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】settlement_records - pointdiscountcost。 【JSON字段】settlement_records.json - $ - pointdiscountcost。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.is_use_coupon IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】NULL(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】settlement_records - isusecoupon(派生:BOOLEAN(isusecoupon))。 【JSON字段】settlement_records.json - $ - isusecoupon(派生:BOOLEAN(isusecoupon))。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.is_use_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】settlement_records - isusediscount(派生:BOOLEAN(isusediscount))。 【JSON字段】settlement_records.json - $ - isusediscount(派生:BOOLEAN(isusediscount))。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.is_activity IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】NULL(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】settlement_records - isactivity(派生:BOOLEAN(isactivity))。 【JSON字段】settlement_records.json - $ - isactivity(派生:BOOLEAN(isactivity))。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.operator_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】settlement_records - operatorname。 【JSON字段】settlement_records.json - $ - operatorname。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.salesman_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】settlement_records - salesmanname。 【JSON字段】settlement_records.json - $ - salesmanname。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.order_remark IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】settlement_records - orderremark。 【JSON字段】settlement_records.json - $ - orderremark。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.operator_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】settlement_records - operatorid。 【JSON字段】settlement_records.json - $ - operatorid。'; +COMMENT ON COLUMN billiards_dwd.dwd_settlement_head_ex.salesman_user_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】settlement_records - salesmanuserid。 【JSON字段】settlement_records.json - $ - salesmanuserid。'; + + CREATE TABLE IF NOT EXISTS dwd_table_fee_log ( table_fee_log_id BIGINT, order_trade_no BIGINT, @@ -1032,35 +1125,37 @@ CREATE TABLE IF NOT EXISTS dwd_table_fee_log ( is_delete INTEGER, PRIMARY KEY (table_fee_log_id) ); -COMMENT ON COLUMN dwd_table_fee_log.table_fee_log_id IS '台费流水记录主键。每一条台费使用记录唯一一条。对应一次“台费计费单元”。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dwd_table_fee_log.order_trade_no IS '订单交易号。整笔订单的主编号,用于把同一订单下的台费、商品、助教等多种明细串联在一起。可与支付记录中的交易号对应。 | 来源: order_trade_no | 角色: 外键'; -COMMENT ON COLUMN dwd_table_fee_log.order_settle_id IS '结算单号 / 结账 ID。对应一次完整的结账操作。与 dwd_settlement_head 的主键关联。 | 来源: order_settle_id | 角色: 外键'; -COMMENT ON COLUMN dwd_table_fee_log.order_pay_id IS '订单支付记录 ID。对应支付记录中的 id 或 relate_id(视具体模型)。用于追踪这条台费最终对应哪一条支付流水。 | 来源: order_pay_id | 角色: 外键'; -COMMENT ON COLUMN dwd_table_fee_log.tenant_id IS '租户 / 品牌 ID。本文件内所有记录属于同一租户。与其他表的 tenant_id 一致,用于品牌级过滤。 | 来源: tenant_id | 角色: 外键'; -COMMENT ON COLUMN dwd_table_fee_log.site_id IS '门店 ID。当前样本为同一门店。与嵌套的 siteProfile.id 以及其他 JSON 中的 site_id 对应,用于门店维度关联。 | 来源: site_id | 角色: 外键'; -COMMENT ON COLUMN dwd_table_fee_log.site_table_id IS '桌台 ID。对应“台桌基础表”的主键。用于确定具体哪一张台或包厢。 | 来源: site_table_id | 角色: 外键'; -COMMENT ON COLUMN dwd_table_fee_log.site_table_area_id IS '门店内“台桌区域” ID(门店视角的区域,如 A 区、B 区、斯诺克区、包厢区)。与门店内部的区域维度对应。 | 来源: site_table_area_id | 角色: 外键'; -COMMENT ON COLUMN dwd_table_fee_log.site_table_area_name IS '台桌区域名称,如 “A区”“B区”“斯诺克区”“VIP包厢” 等。主要用于报表展示和人工阅读。 | 来源: site_table_area_name | 角色: 无'; -COMMENT ON COLUMN dwd_table_fee_log.tenant_table_area_id IS '租户层面的台桌区域 ID。用于品牌层统一定义的区域配置(一个区域可在多门店复用)。对应租户级区域维度。 | 来源: tenant_table_area_id | 角色: 外键'; -COMMENT ON COLUMN dwd_table_fee_log.member_id IS '会员 ID。多数为 0 表示散客。非 0 时表示关联会员:0 表示散客或未使用会员;>0 对应会员档案中的 id。用于将台费流水关联到 dim_member。 | 来源: member_id | 角色: 外键'; -COMMENT ON COLUMN dwd_table_fee_log.ledger_name IS '台号名称,例如 “A1”“A2”“S1”“VIP包厢” 等。等价于桌台维表中的展示名称,冗余在流水中作为快照。 | 来源: ledger_name | 角色: 无'; -COMMENT ON COLUMN dwd_table_fee_log.ledger_unit_price IS '台费结算时的计费单价(元/小时或元/单位时长)。与 ledger_count 配合计算原始应收台费。常见值如 48.0、58.0、68.0、88.0、98.0、116.0 等。 | 来源: ledger_unit_price | 角色: 无'; -COMMENT ON COLUMN dwd_table_fee_log.ledger_count IS '计费时长单位数。与 ledger_unit_price 共同决定原始应收额。可与 real_table_use_seconds 换算关系约为:时长秒数 ≈ ledger_count × 计费粒度(例如 30 分钟、60 分钟)。 | 来源: ledger_count | 角色: 无'; -COMMENT ON COLUMN dwd_table_fee_log.ledger_amount IS '原始应收台费金额,按单价与计费时长计算出来的台费金额,尚未考虑会员、券、调账等各类优惠拆分。 | 来源: ledger_amount | 角色: 无'; -COMMENT ON COLUMN dwd_table_fee_log.real_table_charge_money IS '实际向顾客收取的台费金额(现金 / 实付维度),不含券方承担、会员承担和内部调账部分。若为 0,则该笔台费完全由券、会员或内部调账承担。 | 来源: real_table_charge_money | 角色: 无'; -COMMENT ON COLUMN dwd_table_fee_log.coupon_promotion_amount IS '由优惠券、活动、团购等促销承担的优惠金额,直接抵扣在台费上。常见值为与单价或整倍数相同,例如 48.0、96.0、136.0、144.0 等。若 real_table_charge_money 为 0 且该字段等于 ledger_amount,说明台费完全由促销承担。 | 来源: coupon_promotion_amount | 角色: 无'; -COMMENT ON COLUMN dwd_table_fee_log.member_discount_amount IS '由会员权益产生的优惠金额,例如会员折扣、会员免费台等。若 ledger_amount = real_table_charge_money = member_discount_amount,表示这笔台费由会员权益承担,但仍作为台费收入进行记录。 | 来源: member_discount_amount | 角色: 无'; -COMMENT ON COLUMN dwd_table_fee_log.adjust_amount IS '手动减免,调整金额 / 调账金额。用于将台费金额转移或冲减到其他项目(例如套餐、包厢统一计费)或做手工调整。若 ledger_amount 完全被 adjust_amount 抵消,则说明该笔台费被整体调出当前台费科目。 | 来源: adjust_amount | 角色: 无'; -COMMENT ON COLUMN dwd_table_fee_log.real_table_use_seconds IS '台费实际计费时长(秒)。用于计算台费单价与费率分析。内部统一以秒为单位。 | 来源: real_table_use_seconds | 角色: 无'; -COMMENT ON COLUMN dwd_table_fee_log.add_clock_seconds IS '加钟时长(秒)。在原有使用基础上追加的累计加钟时长,常见为 2400、4200 等 60 的倍数(对应 40 分钟、70 分钟等)。 | 来源: add_clock_seconds | 角色: 无'; -COMMENT ON COLUMN dwd_table_fee_log.start_use_time IS '台开始使用时间,即实际开台时间。与 ledger_start_time 相同,表示计费起算点。 | 来源: start_use_time | 角色: 无'; -COMMENT ON COLUMN dwd_table_fee_log.ledger_end_time IS '台账计费结束时间。通常与 last_use_time 相差 1 秒。可理解为系统为计费进行的截断时刻。 | 来源: ledger_end_time | 角色: 无'; -COMMENT ON COLUMN dwd_table_fee_log.create_time IS '台费流水记录创建时间,通常接近结账时间。用于区分计费期间与结账时间。 | 来源: create_time | 角色: 无'; -COMMENT ON COLUMN dwd_table_fee_log.ledger_status IS '台费状态。样本中全部为 1。含义:1 表示正常已结算台费。按命名推断,0 可能表示未结算,2 可能表示作废或撤销,需要结合后续数据确认。 | 来源: ledger_status | 角色: 无'; -COMMENT ON COLUMN dwd_table_fee_log.is_single_order IS '是否独立计费单元。枚举:1 表示该记录是独立结算的桌费;0 表示非独立结算条目(可能是合并结账、转台过程中的占位记录)。is_single_order = 0 的记录通常 ledger_count 与 real_table_use_seconds 为 0。 | 来源: is_single_order | 角色: 无'; -COMMENT ON COLUMN dwd_table_fee_log.is_delete IS '逻辑删除标志。0 表示未删除(有效记录);1 表示已逻辑删除(一般不参与统计)。当前样本全部为 0。 | 来源: is_delete | 角色: 无'; --- dwd_table_fee_log_Ex +COMMENT ON TABLE billiards_dwd.dwd_table_fee_log IS 'DWD 明细事实表:dwd_table_fee_log。ODS 来源表:billiards_ods.table_fee_transactions(对应 JSON:table_fee_transactions.json;分析:table_fee_transactions-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.table_fee_log_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957924029058885(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - id。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.order_trade_no IS '【说明】明细字段,用于记录事实取值。 【示例】2957858167230149(明细字段,用于记录事实取值)。 【ODS来源】table_fee_transactions - order_trade_no。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - order_trade_no。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.order_settle_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957922914357125(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - order_settle_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - order_settle_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.order_pay_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - order_pay_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - order_pay_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - tenant_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - tenant_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - site_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - site_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.site_table_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2793003705192517(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - site_table_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - site_table_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.site_table_area_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2791963794329671(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - site_table_area_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - site_table_area_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.site_table_area_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】A区(名称字段,用于展示与辅助识别)。 【ODS来源】table_fee_transactions - site_table_area_name。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - site_table_area_name。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.tenant_table_area_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2791960001957765(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - tenant_table_area_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - tenant_table_area_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - member_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - member_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.ledger_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】A17(名称字段,用于展示与辅助识别)。 【ODS来源】table_fee_transactions - ledger_name。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_name。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.ledger_unit_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】48.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】table_fee_transactions - ledger_unit_price。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_unit_price。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.ledger_count IS '【说明】数量/时长字段,用于统计与计量。 【示例】3600(数量/时长字段,用于统计与计量)。 【ODS来源】table_fee_transactions - ledger_count。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_count。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.ledger_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】48.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】table_fee_transactions - ledger_amount。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_amount。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.real_table_charge_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】table_fee_transactions - real_table_charge_money。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - real_table_charge_money。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.coupon_promotion_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】48.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】table_fee_transactions - coupon_promotion_amount。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - coupon_promotion_amount。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.member_discount_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】table_fee_transactions - member_discount_amount。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - member_discount_amount。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.adjust_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】table_fee_transactions - adjust_amount。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - adjust_amount。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.real_table_use_seconds IS '【说明】数量/时长字段,用于统计与计量。 【示例】3600(数量/时长字段,用于统计与计量)。 【ODS来源】table_fee_transactions - real_table_use_seconds。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - real_table_use_seconds。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.add_clock_seconds IS '【说明】数量/时长字段,用于统计与计量。 【示例】0(数量/时长字段,用于统计与计量)。 【ODS来源】table_fee_transactions - add_clock_seconds。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - add_clock_seconds。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.start_use_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 22:28:57(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】table_fee_transactions - start_use_time。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - start_use_time。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.ledger_end_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:28:57(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】table_fee_transactions - ledger_end_time。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_end_time。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:35:57(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】table_fee_transactions - create_time。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - create_time。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.ledger_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】table_fee_transactions - ledger_status。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_status。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.is_single_order IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】1(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】table_fee_transactions - is_single_order。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - is_single_order。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log.is_delete IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】table_fee_transactions - is_delete。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - is_delete。'; + + CREATE TABLE IF NOT EXISTS dwd_table_fee_log_Ex ( table_fee_log_id BIGINT, operator_name VARCHAR(64), @@ -1076,20 +1171,22 @@ CREATE TABLE IF NOT EXISTS dwd_table_fee_log_Ex ( salesman_org_id BIGINT, PRIMARY KEY (table_fee_log_id) ); -COMMENT ON COLUMN dwd_table_fee_log_Ex.table_fee_log_id IS '台费流水记录主键。每一条台费使用记录唯一一条。对应一次“台费计费单元”。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dwd_table_fee_log_Ex.operator_name IS '操作员姓名。为冗余展示字段,便于直接阅读而不必联表员工档案。 | 来源: operator_name | 角色: 无'; -COMMENT ON COLUMN dwd_table_fee_log_Ex.salesman_name IS '营业员姓名。当前样本为空。用于需要对营业员维度做业绩统计时作为冗余展示。 | 来源: salesman_name | 角色: 无'; -COMMENT ON COLUMN dwd_table_fee_log_Ex.used_card_amount IS '由储值卡、次卡等“卡内余额”直接抵扣到台费的金额。当前样本为 0,但语义明确,用于区分“卡扣款”与“现金收款”。 | 来源: used_card_amount | 角色: 无'; -COMMENT ON COLUMN dwd_table_fee_log_Ex.service_money IS '服务费 / 成本 /分成金额字段,类似助教流水里的 service_money。当前样本全为 0,门店未启用该字段,未来可能用于台费附加服务费或分成计算。 | 来源: service_money | 角色: 无'; -COMMENT ON COLUMN dwd_table_fee_log_Ex.mgmt_fee IS '管理费字段。当前样本为 0。推测用于未来支持“台费附加管理费”功能。尚未实际启用。 | 来源: mgmt_fee | 角色: 无'; -COMMENT ON COLUMN dwd_table_fee_log_Ex.fee_total IS '附加费用合计值字段。当前样本为 0。设计上用于汇总管理费、服务费等附加费用。尚未实际启用。 | 来源: fee_total | 角色: 无'; -COMMENT ON COLUMN dwd_table_fee_log_Ex.ledger_start_time IS '台账计费起始时间。当前样本与 start_use_time 相同,表示计费与开台同时开始。 | 来源: ledger_start_time | 角色: 无'; -COMMENT ON COLUMN dwd_table_fee_log_Ex.last_use_time IS '最后使用 / 操作时间,通常略晚于 ledger_end_time。可视为客人最后一次用台或最后一次加钟/操作的时间点。 | 来源: last_use_time | 角色: 无'; -COMMENT ON COLUMN dwd_table_fee_log_Ex.operator_id IS '操作员 ID。负责开台 / 结账的员工账号 ID。与员工 / 账号体系中的用户 ID 对应。 | 来源: operator_id | 角色: 外键'; -COMMENT ON COLUMN dwd_table_fee_log_Ex.salesman_user_id IS '营业员用户 ID。目前样本值为 0,表示门店暂未使用此字段做提成员工归属,但语义清晰。 | 来源: salesman_user_id | 角色: 外键'; -COMMENT ON COLUMN dwd_table_fee_log_Ex.salesman_org_id IS '营业员所属机构 / 部门 ID。目前样本为 0。用于员工组织结构统计时的归属。 | 来源: salesman_org_id | 角色: 外键'; --- dwd_table_fee_adjust +COMMENT ON TABLE billiards_dwd.dwd_table_fee_log_ex IS 'DWD 明细事实表(扩展字段表):dwd_table_fee_log_ex。ODS 来源表:billiards_ods.table_fee_transactions(对应 JSON:table_fee_transactions.json;分析:table_fee_transactions-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.table_fee_log_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957924029058885(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - id。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.operator_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】收银员:郑丽珊(名称字段,用于展示与辅助识别)。 【ODS来源】table_fee_transactions - operator_name。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - operator_name。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.salesman_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】table_fee_transactions - salesman_name。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - salesman_name。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.used_card_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】table_fee_transactions - used_card_amount。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - used_card_amount。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.service_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】table_fee_transactions - service_money。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - service_money。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.mgmt_fee IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】table_fee_transactions - mgmt_fee。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - mgmt_fee。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.fee_total IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】table_fee_transactions - fee_total。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - fee_total。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.ledger_start_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 22:28:57(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】table_fee_transactions - ledger_start_time。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - ledger_start_time。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.last_use_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:28:57(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】table_fee_transactions - last_use_time。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - last_use_time。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.operator_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790687322443013(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - operator_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - operator_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.salesman_user_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - salesman_user_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - salesman_user_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_log_ex.salesman_org_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_transactions - salesman_org_id。 【JSON字段】table_fee_transactions.json - data.siteTableUseDetailsList - salesman_org_id。'; + + CREATE TABLE IF NOT EXISTS dwd_table_fee_adjust ( table_fee_adjust_id BIGINT, order_trade_no BIGINT, @@ -1106,21 +1203,23 @@ CREATE TABLE IF NOT EXISTS dwd_table_fee_adjust ( adjust_time TIMESTAMPTZ, PRIMARY KEY (table_fee_adjust_id) ); -COMMENT ON COLUMN dwd_table_fee_adjust.table_fee_adjust_id IS '台费折扣 / 调整流水主键;一条台费打折或调账操作对应一条记录。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dwd_table_fee_adjust.order_trade_no IS '订单交易号;与台费流水、结账记录等表中的同名字段一致,用于把本次台费调整挂到具体订单上。 | 来源: order_trade_no | 角色: 外键'; -COMMENT ON COLUMN dwd_table_fee_adjust.order_settle_id IS '结算单 / 小票 ID;与小票、结账头表中的 order_settle_id 对应,用于关联同一次结账。 | 来源: order_settle_id | 角色: 外键'; -COMMENT ON COLUMN dwd_table_fee_adjust.tenant_id IS '租户 / 品牌 ID;标识该记录属于哪一个商户。 | 来源: tenant_id | 角色: 外键'; -COMMENT ON COLUMN dwd_table_fee_adjust.site_id IS '门店 ID;与 dim_site、其它业务事实表中的 site_id 一致。 | 来源: site_id | 角色: 外键'; -COMMENT ON COLUMN dwd_table_fee_adjust.table_id IS '台桌 ID;与 dim_table(site_tables_master.id)以及各类台费、助教流水中的 site_table_id 对应,标识哪一张台发生了折扣/调账。 | 来源: site_table_id | 角色: 外键'; -COMMENT ON COLUMN dwd_table_fee_adjust.table_area_id IS '门店维度的台桌区域 ID;与 dim_table 中的 site_table_area_id 对应,例如 “斯诺克区”“VIP包厢”等区域。 | 来源: tableProfile.site_table_area_id | 角色: 外键'; -COMMENT ON COLUMN dwd_table_fee_adjust.table_area_name IS '台桌区域名称快照,例如 “斯诺克区”“A区”“VIP包厢”;冗余展示字段,可从 dim_table 通过 table_area_id 获取。 | 来源: tableProfile.site_table_area_name'; -COMMENT ON COLUMN dwd_table_fee_adjust.tenant_table_area_id IS '租户维度的“台桌区域 ID”;同一租户下跨门店复用的区域标识,用于在租户级别统计各区域的折扣分布。 | 来源: tenant_table_area_id | 角色: 外键'; -COMMENT ON COLUMN dwd_table_fee_adjust.ledger_amount IS '台费调整金额;等于台费流水中对应记录的 adjust_amount。正数表示被减免/调账掉的台费金额(本批数据全部为正);是衡量台费折扣规模的核心度量。 | 来源: ledger_amount'; -COMMENT ON COLUMN dwd_table_fee_adjust.ledger_status IS '调整记录状态(枚举)。1:生效调整(当前有效的折扣/调账记录);0:失效/被覆盖的历史记录(同一订单有多次调整时,旧记录会标记为 0,仅最新一条为 1)。 | 来源: ledger_status'; -COMMENT ON COLUMN dwd_table_fee_adjust.is_delete IS '逻辑删除标记(枚举)。0:未删除(有效记录);1:已逻辑删除(后台标记删除,不再参与业务统计)。当前数据全部为 0,但字段需保留以适配长期数据。 | 来源: is_delete'; -COMMENT ON COLUMN dwd_table_fee_adjust.adjust_time IS '台费调整记录创建时间,即打折/调账操作被系统写入的时间戳,用于时间分析和与结账时间对比(判断是事前折扣还是事后调账)。 | 来源: create_time'; --- dwd_table_fee_adjust_Ex +COMMENT ON TABLE billiards_dwd.dwd_table_fee_adjust IS 'DWD 明细事实表:dwd_table_fee_adjust。ODS 来源表:billiards_ods.table_fee_discount_records(对应 JSON:table_fee_discount_records.json;分析:table_fee_discount_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.table_fee_adjust_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957913441881989(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_discount_records - id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - id。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.order_trade_no IS '【说明】明细字段,用于记录事实取值。 【示例】2957784612605829(明细字段,用于记录事实取值)。 【ODS来源】table_fee_discount_records - order_trade_no。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - order_trade_no。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.order_settle_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957913171693253(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_discount_records - order_settle_id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - order_settle_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_discount_records - tenant_id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - tenant_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_discount_records - site_id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - site_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.table_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2793020259897413(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_discount_records - site_table_id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - site_table_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.table_area_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2791961347968901(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_discount_records - tenant_table_area_id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - tenant_table_area_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.table_area_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】table_fee_discount_records - tableprofile.table_area_name。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - tableprofile.table_area_name。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.tenant_table_area_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2791961347968901(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_discount_records - tenant_table_area_id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - tenant_table_area_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.ledger_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】148.15(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】table_fee_discount_records - ledger_amount。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - ledger_amount。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.ledger_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】table_fee_discount_records - ledger_status。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - ledger_status。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.is_delete IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】table_fee_discount_records - is_delete。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - is_delete。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust.adjust_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:25:11(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】table_fee_discount_records - create_time。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - create_time。'; + + CREATE TABLE IF NOT EXISTS dwd_table_fee_adjust_Ex ( table_fee_adjust_id BIGINT, adjust_type INTEGER, @@ -1132,16 +1231,18 @@ CREATE TABLE IF NOT EXISTS dwd_table_fee_adjust_Ex ( operator_id BIGINT, PRIMARY KEY (table_fee_adjust_id) ); -COMMENT ON COLUMN dwd_table_fee_adjust_Ex.table_fee_adjust_id IS '台费折扣 / 调整流水主键;一条台费打折或调账操作对应一条记录。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dwd_table_fee_adjust_Ex.adjust_type IS '调整类型(枚举)。当前数据全部为 1。取值示例:1:台费打折 / 台费减免(本门店实际使用的唯一类型);其他值:预留给台费转移、误操作恢复等其他类型(当前未出现,仅推测)。 | 来源: adjust_type'; -COMMENT ON COLUMN dwd_table_fee_adjust_Ex.ledger_count IS '调整次数计数,本数据中恒为 1,表示“一次调整事件”;与台费流水中的 ledger_count(计时长)含义不同。 | 来源: ledger_count'; -COMMENT ON COLUMN dwd_table_fee_adjust_Ex.ledger_name IS '调账项目名称或打折原因名称(设计意图);当前门店所有记录值为空字符串,未实际使用。作用暂不明确,保留以备后续业务启用。 | 来源: ledger_name'; -COMMENT ON COLUMN dwd_table_fee_adjust_Ex.applicant_name IS '申请人姓名快照,通常包含角色前缀(如 “收银员:张三”);是 applicant_id 的冗余展示字段,实际名称应以员工维表为准。 | 来源: applicant_name'; -COMMENT ON COLUMN dwd_table_fee_adjust_Ex.operator_name IS '操作员姓名快照;与 operator_id 对应的姓名冗余字段。 | 来源: operator_name'; -COMMENT ON COLUMN dwd_table_fee_adjust_Ex.applicant_id IS '申请人 ID;发起本次台费折扣/调账的员工账号 ID,用于按员工维度统计折扣行为。 | 来源: applicant_id | 角色: 外键'; -COMMENT ON COLUMN dwd_table_fee_adjust_Ex.operator_id IS '实际执行调账操作的操作员 ID;当前样本中与 applicant_id 相同,但模型上允许“申请人 ≠ 操作人”。 | 来源: operator_id | 角色: 外键'; --- dwd_store_goods_sale +COMMENT ON TABLE billiards_dwd.dwd_table_fee_adjust_ex IS 'DWD 明细事实表(扩展字段表):dwd_table_fee_adjust_ex。ODS 来源表:billiards_ods.table_fee_discount_records(对应 JSON:table_fee_discount_records.json;分析:table_fee_discount_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust_ex.table_fee_adjust_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957913441881989(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_discount_records - id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - id。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust_ex.adjust_type IS '【说明】明细字段,用于记录事实取值。 【示例】1(明细字段,用于记录事实取值)。 【ODS来源】table_fee_discount_records - adjust_type。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - adjust_type。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust_ex.ledger_count IS '【说明】数量/时长字段,用于统计与计量。 【示例】1(数量/时长字段,用于统计与计量)。 【ODS来源】table_fee_discount_records - ledger_count。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - ledger_count。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust_ex.ledger_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】table_fee_discount_records - ledger_name。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - ledger_name。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust_ex.applicant_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】收银员:郑丽珊(名称字段,用于展示与辅助识别)。 【ODS来源】table_fee_discount_records - applicant_name。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - applicant_name。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust_ex.operator_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】收银员:郑丽珊(名称字段,用于展示与辅助识别)。 【ODS来源】table_fee_discount_records - operator_name。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - operator_name。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust_ex.applicant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790687322443013(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_discount_records - applicant_id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - applicant_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_table_fee_adjust_ex.operator_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790687322443013(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】table_fee_discount_records - operator_id。 【JSON字段】table_fee_discount_records.json - data.taiFeeAdjustInfos - operator_id。'; + + CREATE TABLE IF NOT EXISTS dwd_store_goods_sale ( store_goods_sale_id BIGINT, order_trade_no BIGINT, @@ -1168,31 +1269,33 @@ CREATE TABLE IF NOT EXISTS dwd_store_goods_sale ( create_time TIMESTAMPTZ, PRIMARY KEY (store_goods_sale_id) ); -COMMENT ON COLUMN dwd_store_goods_sale.store_goods_sale_id IS '商品销售明细主键;每条记录代表一次订单中的一个商品行流水。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dwd_store_goods_sale.order_trade_no IS '订单交易号(业务单号);与台费、助教、团购等表的 order_trade_no 一致,用于把同一订单下各类消费串联起来。 | 来源: order_trade_no | 角色: 外键'; -COMMENT ON COLUMN dwd_store_goods_sale.order_settle_id IS '结账记录主键 ID;连接结账记录 / 结算头事实表。 | 来源: order_settle_id | 角色: 外键'; -COMMENT ON COLUMN dwd_store_goods_sale.order_pay_id IS '支付记录 ID;连接支付流水事实表,用于还原本条销售对应的收款信息。 | 来源: order_pay_id | 角色: 外键'; -COMMENT ON COLUMN dwd_store_goods_sale.order_goods_id IS '当前版本的订单内商品明细 ID;可在订单范围内唯一定位该商品行,用于与小票明细等做行级关联。 | 来源: order_goods_id | 角色: 外键'; -COMMENT ON COLUMN dwd_store_goods_sale.site_id IS '门店 ID(系统主键);与其它流水表中的 site_id 一致。 | 来源: site_id | 角色: 外键'; -COMMENT ON COLUMN dwd_store_goods_sale.tenant_id IS '租户/品牌 ID;同一品牌下多门店共享同一个 tenant_id。 | 来源: tenant_id | 角色: 外键'; -COMMENT ON COLUMN dwd_store_goods_sale.site_goods_id IS '门店级商品 ID;连接门店商品档案 dim_store_goods,与库存变动记录中的 siteGoodsId 一致。 | 来源: site_goods_id | 角色: 外键'; -COMMENT ON COLUMN dwd_store_goods_sale.tenant_goods_id IS '租户级(品牌级)商品 ID;连接租户级商品档案维度表,一个 tenant_goods_id 在不同门店可对应多个 site_goods_id。 | 来源: tenant_goods_id | 角色: 外键'; -COMMENT ON COLUMN dwd_store_goods_sale.tenant_goods_category_id IS '租户级商品一级分类 ID;连接商品分类维度(如酒水、零食等)。 | 来源: tenant_goods_category_id | 角色: 外键'; -COMMENT ON COLUMN dwd_store_goods_sale.tenant_goods_business_id IS '租户级商品业务大类 ID(更高一层的业务分类,如“零食类”“酒水类”等)。 | 来源: tenant_goods_business_id | 角色: 外键'; -COMMENT ON COLUMN dwd_store_goods_sale.site_table_id IS '球台 ID;非 0 表示该商品在某张台桌上点单,0 表示前台售卖或与台桌无关。连接台桌维度 dim_table。 | 来源: site_table_id | 角色: 外键'; -COMMENT ON COLUMN dwd_store_goods_sale.ledger_name IS '销售项目名称(商品名),如“哇哈哈矿泉水”“地道肠”等;为当时销售时刻的名称快照。 | 来源: ledger_name'; -COMMENT ON COLUMN dwd_store_goods_sale.ledger_group_name IS '门店前台菜单分组名称,如“酒水”“零食”“小吃”等;与品牌统一分类是两套维度。 | 来源: ledger_group_name'; -COMMENT ON COLUMN dwd_store_goods_sale.ledger_unit_price IS '结算单价(元/单位);本次销售实际使用的单价。 | 来源: ledger_unit_price'; -COMMENT ON COLUMN dwd_store_goods_sale.ledger_count IS '销售数量(以商品单位计),如 1、2、6、36 等。 | 来源: ledger_count'; -COMMENT ON COLUMN dwd_store_goods_sale.ledger_amount IS '原始应收金额(未考虑任何折扣/抵扣),通常接近 ledger_unit_price × ledger_count。 | 来源: ledger_amount'; -COMMENT ON COLUMN dwd_store_goods_sale.discount_price IS '折后单价(元/单位);无折扣时等于 ledger_unit_price,有折扣时小于 ledger_unit_price。 | 来源: discount_price'; -COMMENT ON COLUMN dwd_store_goods_sale.real_goods_money IS '本行商品实际入账金额(已考虑折扣及其他抵扣后,实际计入营业额的金额);一定不大于 ledger_amount。 | 来源: real_goods_money'; -COMMENT ON COLUMN dwd_store_goods_sale.cost_money IS '本行商品对应的成本金额,用于毛利和利润分析;源自商品档案成本价及成本核算逻辑。 | 来源: cost_money'; -COMMENT ON COLUMN dwd_store_goods_sale.ledger_status IS '销售流水状态:1=正常有效;其他数值(当前数据未出现)一般表示“待结算”“作废”等。 | 来源: ledger_status'; -COMMENT ON COLUMN dwd_store_goods_sale.is_delete IS '逻辑删除标志:0=正常有效;1=已删除(仅保留历史,不再参与前端展示及统计)(本批数据全部为 0)。 | 来源: is_delete'; -COMMENT ON COLUMN dwd_store_goods_sale.create_time IS '销售记录创建时间,通常为结账时间或录入时间;用于时间维度分析,与订单层时间字段对齐。 | 来源: create_time'; --- dwd_store_goods_sale_Ex +COMMENT ON TABLE billiards_dwd.dwd_store_goods_sale IS 'DWD 明细事实表:dwd_store_goods_sale。ODS 来源表:billiards_ods.store_goods_sales_records(对应 JSON:store_goods_sales_records.json;分析:store_goods_sales_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.store_goods_sale_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957924029550406(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - id。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.order_trade_no IS '【说明】明细字段,用于记录事实取值。 【示例】2957858167230149(明细字段,用于记录事实取值)。 【ODS来源】store_goods_sales_records - order_trade_no。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_trade_no。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.order_settle_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957922914357125(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - order_settle_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_settle_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.order_pay_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - order_pay_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_pay_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.order_goods_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957858456391557(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - order_goods_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_goods_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - site_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - site_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - tenant_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - tenant_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.site_goods_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2793026176012357(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - site_goods_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - site_goods_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.tenant_goods_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2792115932417925(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - tenant_goods_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - tenant_goods_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.tenant_goods_category_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683528350540(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - tenant_goods_category_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - tenant_goods_category_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.tenant_goods_business_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683528317768(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - tenant_goods_business_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - tenant_goods_business_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.site_table_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2793003705192517(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - site_table_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - site_table_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.ledger_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】哇哈哈矿泉水(名称字段,用于展示与辅助识别)。 【ODS来源】store_goods_sales_records - ledger_name。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_name。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.ledger_group_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】酒水(名称字段,用于展示与辅助识别)。 【ODS来源】store_goods_sales_records - ledger_group_name。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_group_name。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.ledger_unit_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】5.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - ledger_unit_price。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_unit_price。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.ledger_count IS '【说明】数量/时长字段,用于统计与计量。 【示例】1(数量/时长字段,用于统计与计量)。 【ODS来源】store_goods_sales_records - ledger_count。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_count。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.ledger_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】5.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - ledger_amount。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_amount。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.discount_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - discount_money。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - discount_money。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.real_goods_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】5.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - real_goods_money。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - real_goods_money。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.cost_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.01(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - cost_money。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - cost_money。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.ledger_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】store_goods_sales_records - ledger_status。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - ledger_status。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.is_delete IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】store_goods_sales_records - is_delete。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - is_delete。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:35:57(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】store_goods_sales_records - create_time。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - create_time。'; + + CREATE TABLE IF NOT EXISTS dwd_store_goods_sale_Ex ( store_goods_sale_id BIGINT, legacy_order_goods_id BIGINT, @@ -1223,36 +1326,38 @@ CREATE TABLE IF NOT EXISTS dwd_store_goods_sale_Ex ( sales_type INTEGER, operator_id BIGINT ); -COMMENT ON COLUMN dwd_store_goods_sale_Ex.store_goods_sale_id IS '商品销售明细主键;每条记录代表一次订单中的一个商品行流水。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dwd_store_goods_sale_Ex.legacy_order_goods_id IS '旧版订单商品明细 ID,兼容字段;当前接口已统一使用 order_goods_id,本批数据全部为 0。 | 来源: orderGoodsId'; -COMMENT ON COLUMN dwd_store_goods_sale_Ex.site_name IS '门店名称,对 site_id 的冗余文本(例如“朗朗桌球”),用于展示。 | 来源: siteName'; -COMMENT ON COLUMN dwd_store_goods_sale_Ex.legacy_site_id IS '历史兼容门店 ID;当前接口统一使用 site_id,本批数据 siteId 全部为 0。 | 来源: siteId'; -COMMENT ON COLUMN dwd_store_goods_sale_Ex.goods_remark IS '商品备注/口味说明/特殊说明;部分记录为空,部分与商品名相同。 | 来源: goods_remark'; -COMMENT ON COLUMN dwd_store_goods_sale_Ex.option_value_name IS '商品选项名称(规格/口味,如大杯/小杯、不加冰等);当前门店未启用多规格,样本中全部为空。 | 来源: option_value_name'; -COMMENT ON COLUMN dwd_store_goods_sale_Ex.operator_name IS '操作员姓名冗余,如“收银员:郑丽珊”;用于展示,不作为关联键。 | 来源: operator_name'; -COMMENT ON COLUMN dwd_store_goods_sale_Ex.open_salesman_flag IS '是否启用营业员机制标志:1=启用营业员/提成体系(需指定 salesman_* 字段);2=未启用营业员体系(本批数据全部为 2)。 | 来源: openSalesman'; -COMMENT ON COLUMN dwd_store_goods_sale_Ex.salesman_user_id IS '营业员用户 ID(系统账号 ID);当前样本全部为 0,说明门店未启用营业员业绩统计。 | 来源: salesman_user_id | 角色: 外键'; -COMMENT ON COLUMN dwd_store_goods_sale_Ex.salesman_name IS '营业员姓名;当前样本全部为空字符串。 | 来源: salesman_name'; -COMMENT ON COLUMN dwd_store_goods_sale_Ex.salesman_role_id IS '营业员角色 ID(例如某角色代码对应“销售员”角色);当前样本全部为 0。 | 来源: salesman_role_id | 角色: 外键'; -COMMENT ON COLUMN dwd_store_goods_sale_Ex.salesman_org_id IS '营业员所属组织/部门 ID;当前样本全部为 0,未启用按组织分组统计。 | 来源: sales_man_org_id | 角色: 外键'; -COMMENT ON COLUMN dwd_store_goods_sale_Ex.discount_money IS '本行商品的直接价格优惠金额(打折让利部分);在简单场景下满足:ledger_amount − discount_money ≈ real_goods_money(不含积分、券抵扣)。 | 来源: discount_money'; -COMMENT ON COLUMN dwd_store_goods_sale_Ex.returns_number IS '退货数量;当前样本全部为 0,如发生退货则记录退回的件数。 | 来源: returns_number'; -COMMENT ON COLUMN dwd_store_goods_sale_Ex.coupon_deduct_money IS '优惠券/团购券直接抵扣到本条商品明细上的金额;当前样本为 0,说明券更多在订单级处理。 | 来源: coupon_deduct_money'; -COMMENT ON COLUMN dwd_store_goods_sale_Ex.member_discount_amount IS '由会员折扣针对本行商品产生的优惠金额;当前样本全部为 0,折扣通常体现在 discount_money 中。 | 来源: member_discount_amount'; -COMMENT ON COLUMN dwd_store_goods_sale_Ex.point_discount_money IS '由积分抵扣的金额(顾客用积分兑换的抵现金额)。 | 来源: point_discount_money'; -COMMENT ON COLUMN dwd_store_goods_sale_Ex.point_discount_money_cost IS '积分抵扣对应的成本金额(积分成本、营销费用等核算用)。 | 来源: point_discount_money_cost'; -COMMENT ON COLUMN dwd_store_goods_sale_Ex.package_coupon_id IS '套餐券 ID;当商品来自套餐拆分或与套餐券关联时,用于追溯对应的套餐业务(当前样本为 0)。 | 来源: package_coupon_id'; -COMMENT ON COLUMN dwd_store_goods_sale_Ex.order_coupon_id IS '订单级优惠券 ID;整单使用某张券时,可用于记录该券对本行商品的分摊关系(当前样本为 0)。 | 来源: order_coupon_id'; -COMMENT ON COLUMN dwd_store_goods_sale_Ex.member_coupon_id IS '会员券 ID(如会员专享优惠券);当前样本为 0,为会员权益预留字段。 | 来源: member_coupon_id'; -COMMENT ON COLUMN dwd_store_goods_sale_Ex.option_price IS '商品选项(规格/加料等)的附加价格;当前门店未启用此功能,样本为 0。 | 来源: option_price'; -COMMENT ON COLUMN dwd_store_goods_sale_Ex.option_member_discount_money IS '由会员折扣作用在“选项价格”上的优惠金额;当前样本为 0。 | 来源: option_member_discount_money'; -COMMENT ON COLUMN dwd_store_goods_sale_Ex.option_coupon_deduct_money IS '由优惠券抵扣“选项价格”的金额;当前样本为 0。 | 来源: option_coupon_deduct_money'; -COMMENT ON COLUMN dwd_store_goods_sale_Ex.push_money IS '本行商品对应的提成金额(营业员/业务员提成);当前样本为 0,说明提成体系未启用。 | 来源: push_money'; -COMMENT ON COLUMN dwd_store_goods_sale_Ex.is_single_order IS '是否作为独立明细参与订单结算:1=作为独立明细参与订单;0=在特殊业务中可能合并为打包项目(当前样本全部为 1)。 | 来源: is_single_order'; -COMMENT ON COLUMN dwd_store_goods_sale_Ex.sales_type IS '销售类型:1=正常销售(当前样本全部为 1);常见扩展用法:2=赠品;3=内部消耗;4=盘点调整等。 | 来源: sales_type'; -COMMENT ON COLUMN dwd_store_goods_sale_Ex.operator_id IS '操作员 ID(录入本条销售的员工);与其它流水中的 operator_id 一致,可统一做员工维度分析。 | 来源: operator_id | 角色: 外键'; --- dwd_assistant_service_log +COMMENT ON TABLE billiards_dwd.dwd_store_goods_sale_ex IS 'DWD 明细事实表(扩展字段表):dwd_store_goods_sale_ex。ODS 来源表:billiards_ods.store_goods_sales_records(对应 JSON:store_goods_sales_records.json;分析:store_goods_sales_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.store_goods_sale_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957924029550406(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - id。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.legacy_order_goods_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957858456391557(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - order_goods_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_goods_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.site_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】朗朗桌球(名称字段,用于展示与辅助识别)。 【ODS来源】store_goods_sales_records - siteName。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - siteName。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.legacy_site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - site_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - site_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.goods_remark IS '【说明】明细字段,用于记录事实取值。 【示例】哇哈哈矿泉水(明细字段,用于记录事实取值)。 【ODS来源】store_goods_sales_records - goods_remark。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - goods_remark。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.option_value_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】store_goods_sales_records - option_value_name。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - option_value_name。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.operator_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】收银员:郑丽珊(名称字段,用于展示与辅助识别)。 【ODS来源】store_goods_sales_records - operator_name。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - operator_name。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.open_salesman_flag IS '【说明】明细字段,用于记录事实取值。 【示例】2(明细字段,用于记录事实取值)。 【ODS来源】store_goods_sales_records - openSalesman。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - openSalesman。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.salesman_user_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - salesman_user_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - salesman_user_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.salesman_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】store_goods_sales_records - salesman_name。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - salesman_name。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.salesman_role_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - salesman_role_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - salesman_role_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.salesman_org_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - sales_man_org_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - sales_man_org_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.discount_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - discount_money。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - discount_money。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.returns_number IS '【说明】数量/时长字段,用于统计与计量。 【示例】0(数量/时长字段,用于统计与计量)。 【ODS来源】store_goods_sales_records - returns_number。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - returns_number。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.coupon_deduct_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - coupon_deduct_money。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - coupon_deduct_money。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.member_discount_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - member_discount_amount。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - member_discount_amount。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.point_discount_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - point_discount_money。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - point_discount_money。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.point_discount_money_cost IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - point_discount_money_cost。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - point_discount_money_cost。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.package_coupon_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - package_coupon_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - package_coupon_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.order_coupon_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - order_coupon_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - order_coupon_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.member_coupon_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - member_coupon_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - member_coupon_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.option_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - option_price。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - option_price。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.option_member_discount_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - option_member_discount_money。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - option_member_discount_money。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.option_coupon_deduct_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - option_coupon_deduct_money。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - option_coupon_deduct_money。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.push_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】store_goods_sales_records - push_money。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - push_money。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.is_single_order IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】1(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】store_goods_sales_records - is_single_order。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - is_single_order。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.sales_type IS '【说明】明细字段,用于记录事实取值。 【示例】1(明细字段,用于记录事实取值)。 【ODS来源】store_goods_sales_records - sales_type。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - sales_type。'; +COMMENT ON COLUMN billiards_dwd.dwd_store_goods_sale_ex.operator_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790687322443013(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】store_goods_sales_records - operator_id。 【JSON字段】store_goods_sales_records.json - data.orderGoodsLedgers - operator_id。'; + + CREATE TABLE IF NOT EXISTS dwd_assistant_service_log ( assistant_service_id BIGINT, order_trade_no BIGINT, @@ -1288,40 +1393,42 @@ CREATE TABLE IF NOT EXISTS dwd_assistant_service_log ( is_delete INTEGER, PRIMARY KEY (assistant_service_id) ); -COMMENT ON COLUMN dwd_assistant_service_log.assistant_service_id IS '助教服务流水主键,系统内唯一标识一次助教服务记录。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dwd_assistant_service_log.order_trade_no IS '订单交易号,用于与台费、商品、支付等同一订单下的其他明细串联。 | 来源: order_trade_no | 角色: 外键'; -COMMENT ON COLUMN dwd_assistant_service_log.order_settle_id IS '结算单号,对应结账记录、小票中的结算主键。 | 来源: order_settle_id | 角色: 外键'; -COMMENT ON COLUMN dwd_assistant_service_log.order_pay_id IS '支付记录主键 ID,用于关联支付流水。 | 来源: order_pay_id | 角色: 外键'; -COMMENT ON COLUMN dwd_assistant_service_log.order_assistant_id IS '订单中“助教项目明细”的内部 ID,一笔订单中多段助教服务时用于区分。 | 来源: order_assistant_id | 角色: 外键'; -COMMENT ON COLUMN dwd_assistant_service_log.order_assistant_type IS '助教服务类型枚举:1 表示常规助教服务(如基础课);2 表示附加类助教服务(如附加课);其他值预留。 | 来源: order_assistant_type'; -COMMENT ON COLUMN dwd_assistant_service_log.tenant_id IS '租户/品牌 ID,用于区分商户。 | 来源: tenant_id | 角色: 外键'; -COMMENT ON COLUMN dwd_assistant_service_log.site_id IS '门店 ID,对应门店维表中的门店主键。 | 来源: site_id | 角色: 外键'; -COMMENT ON COLUMN dwd_assistant_service_log.site_table_id IS '球台/包厢 ID,对应台桌维表主键。 | 来源: site_table_id | 角色: 外键'; -COMMENT ON COLUMN dwd_assistant_service_log.tenant_member_id IS '商户维度会员 ID,对应会员档案主键;0 表示非会员或散客。 | 来源: tenant_member_id | 角色: 外键'; -COMMENT ON COLUMN dwd_assistant_service_log.system_member_id IS '系统级会员 ID,用于跨门店识别同一会员。 | 来源: system_member_id | 角色: 外键'; -COMMENT ON COLUMN dwd_assistant_service_log.assistant_no IS '助教编号/工号,如 “27”;与助教档案中的工号一致。 | 来源: assistantNo'; -COMMENT ON COLUMN dwd_assistant_service_log.nickname IS '助教对外昵称,如“佳怡”“周周”;用于展示,不参与业务逻辑。 | 来源: nickname'; -COMMENT ON COLUMN dwd_assistant_service_log.site_assistant_id IS '门店维度助教 ID,对应助教账号维表主键。 | 来源: site_assistant_id | 角色: 外键'; -COMMENT ON COLUMN dwd_assistant_service_log.user_id IS '助教对应的系统用户 ID,对应账号体系中的 user_id。 | 来源: user_id | 角色: 外键'; -COMMENT ON COLUMN dwd_assistant_service_log.assistant_team_id IS '助教团队 ID,用于分组统计团队业绩。 | 来源: assistant_team_id | 角色: 外键'; -COMMENT ON COLUMN dwd_assistant_service_log.person_org_id IS '助教所属人事组织/部门 ID,如“助教部”;用于组织维度分析。 | 来源: person_org_id | 角色: 外键'; -COMMENT ON COLUMN dwd_assistant_service_log.assistant_level IS '助教等级编码:8=助教管理;10=初级;20=中级;30=高级;用于薪酬/评价分层。 | 来源: assistant_level | 角色: 外键'; -COMMENT ON COLUMN dwd_assistant_service_log.level_name IS '助教等级名称,与 assistant_level 对应,如“初级”“中级”“高级”“助教管理”。 | 来源: levelName'; -COMMENT ON COLUMN dwd_assistant_service_log.skill_id IS '助教服务课程/技能 ID,应对应课程/技能配置表。 | 来源: skill_id | 角色: 外键'; -COMMENT ON COLUMN dwd_assistant_service_log.skill_name IS '助教服务课程/技能名称,如“基础课”“附加课”。 | 来源: skillName'; -COMMENT ON COLUMN dwd_assistant_service_log.ledger_unit_price IS '助教服务标准单价(原价),例如按小时或按节课的标价。 | 来源: ledger_unit_price'; -COMMENT ON COLUMN dwd_assistant_service_log.ledger_amount IS '按标准单价计算的应收金额,近似等于 ledger_unit_price×计费时长换算后的金额。 | 来源: ledger_amount'; -COMMENT ON COLUMN dwd_assistant_service_log.projected_income IS '实际计入门店收入的金额,已经考虑会员权益、券抵扣等后的结果。 | 来源: projected_income'; -COMMENT ON COLUMN dwd_assistant_service_log.coupon_deduct_money IS '由优惠券、团购券等直接抵扣到本次助教服务上的金额;0 表示未使用券。 | 来源: coupon_deduct_money'; -COMMENT ON COLUMN dwd_assistant_service_log.income_seconds IS '计费秒数(用于计算应收收入的时间长度),通常为按分钟取整的秒数。 | 来源: income_seconds'; -COMMENT ON COLUMN dwd_assistant_service_log.real_use_seconds IS '实际服务时长(秒),真实消耗的时间,用于分析助教工作量。 | 来源: real_use_seconds'; -COMMENT ON COLUMN dwd_assistant_service_log.add_clock IS '加钟秒数,在原有预约基础上临时增加的服务时间,数值为 60 的倍数。 | 来源: add_clock'; -COMMENT ON COLUMN dwd_assistant_service_log.create_time IS '助教流水记录创建时间,接近下单/结算时间。 | 来源: create_time'; -COMMENT ON COLUMN dwd_assistant_service_log.start_use_time IS '助教实际开始服务时间,通常与 ledger_start_time 一致。 | 来源: start_use_time'; -COMMENT ON COLUMN dwd_assistant_service_log.last_use_time IS '助教最后一次服务时间,通常与 ledger_end_time 一致。 | 来源: last_use_time'; -COMMENT ON COLUMN dwd_assistant_service_log.is_delete IS '逻辑删除标志:0 未删除;1 已逻辑删除,用于保留历史数据。 | 来源: is_delete'; --- dwd_assistant_service_log_Ex +COMMENT ON TABLE billiards_dwd.dwd_assistant_service_log IS 'DWD 明细事实表:dwd_assistant_service_log。ODS 来源表:billiards_ods.assistant_service_records(对应 JSON:assistant_service_records.json;分析:assistant_service_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.assistant_service_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957913441292165(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - id。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.order_trade_no IS '【说明】明细字段,用于记录事实取值。 【示例】2957784612605829(明细字段,用于记录事实取值)。 【ODS来源】assistant_service_records - order_trade_no。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_trade_no。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.order_settle_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957913171693253(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - order_settle_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_settle_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.order_pay_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - order_pay_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_pay_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.order_assistant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957788717240005(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - order_assistant_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_assistant_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.order_assistant_type IS '【说明】明细字段,用于记录事实取值。 【示例】1(明细字段,用于记录事实取值)。 【ODS来源】assistant_service_records - order_assistant_type。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_assistant_type。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - tenant_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - tenant_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - site_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - site_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.site_table_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2793020259897413(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - site_table_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - site_table_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.tenant_member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - tenant_member_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - tenant_member_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.system_member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - system_member_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - system_member_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.assistant_no IS '【说明】明细字段,用于记录事实取值。 【示例】27(明细字段,用于记录事实取值)。 【ODS来源】assistant_service_records - assistantNo。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - assistantNo。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.nickname IS '【说明】名称字段,用于展示与辅助识别。 【示例】泡芙(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_service_records - nickname。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - nickname。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.site_assistant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957788717240005(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - order_assistant_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - order_assistant_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.user_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2946266868976453(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - user_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - user_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.assistant_team_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2792011585884037(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - assistant_team_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - assistant_team_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.person_org_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2946266869336901(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - person_org_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - person_org_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.assistant_level IS '【说明】明细字段,用于记录事实取值。 【示例】10(明细字段,用于记录事实取值)。 【ODS来源】assistant_service_records - assistant_level。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - assistant_level。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.level_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】初级(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_service_records - levelName。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - levelName。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.skill_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683529513797(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - skill_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - skill_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.skill_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】基础课(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_service_records - skillName。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - skillName。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.ledger_unit_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】98.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】assistant_service_records - ledger_unit_price。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_unit_price。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.ledger_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】206.67(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】assistant_service_records - ledger_amount。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_amount。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.projected_income IS '【说明】明细字段,用于记录事实取值。 【示例】168.0(明细字段,用于记录事实取值)。 【ODS来源】assistant_service_records - projected_income。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - projected_income。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.coupon_deduct_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】assistant_service_records - coupon_deduct_money。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - coupon_deduct_money。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.income_seconds IS '【说明】数量/时长字段,用于统计与计量。 【示例】7560(数量/时长字段,用于统计与计量)。 【ODS来源】assistant_service_records - income_seconds。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - income_seconds。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.real_use_seconds IS '【说明】数量/时长字段,用于统计与计量。 【示例】7592(数量/时长字段,用于统计与计量)。 【ODS来源】assistant_service_records - real_use_seconds。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - real_use_seconds。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.add_clock IS '【说明】明细字段,用于记录事实取值。 【示例】0(明细字段,用于记录事实取值)。 【ODS来源】assistant_service_records - add_clock。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - add_clock。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:25:11(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_service_records - create_time。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - create_time。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.start_use_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 21:18:18(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_service_records - start_use_time。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - start_use_time。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.last_use_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:24:50(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_service_records - last_use_time。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - last_use_time。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log.is_delete IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】assistant_service_records - is_delete。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - is_delete。'; + + CREATE TABLE IF NOT EXISTS dwd_assistant_service_log_Ex ( assistant_service_id BIGINT, table_name VARCHAR(64), @@ -1355,38 +1462,40 @@ CREATE TABLE IF NOT EXISTS dwd_assistant_service_log_Ex ( composite_grade_time TIMESTAMPTZ, PRIMARY KEY (assistant_service_id) ); -COMMENT ON COLUMN dwd_assistant_service_log_Ex.assistant_service_id IS '助教服务流水主键,系统内唯一标识一次助教服务记录。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.table_name IS '球台名称,如 “A17”“S1”,与 site_table_id 冗余,用于展示。 | 来源: tableName'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.assistant_name IS '助教姓名,如“何海婷”;与助教档案中的真实姓名一致。 | 来源: assistantName'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.ledger_name IS '助教计费项目名称,如“2-佳怡”等,通常为展示用组合字段。 | 来源: ledger_name'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.ledger_group_name IS '助教项目所属的计费分组/套餐分组名称,目前导出数据中为空,未看到实际使用场景。 | 来源: ledger_group_name'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.ledger_count IS '台账计费时长(秒),通常与 real_use_seconds 接近或相等。取income_seconds TEXT'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.member_discount_amount IS '由会员卡折扣产生的优惠金额,当前样本中为 0,但字段语义明确。 | 来源: member_discount_amount'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.manual_discount_amount IS '收银员手动减免金额(人工改价);当前导出数据中为 0。 | 来源: manual_discount_amount'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.service_money IS '与助教结算的金额或服务成本金额,当前数据全部为 0,具体结算规则未见启用。 | 来源: service_money'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.returns_clock IS '退钟秒数(取消加钟或提前结束退回的时间),当前样本中全部为 0,未见业务使用。 | 来源: returns_clock'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.ledger_start_time IS '台账计费起始时间。 | 来源: ledger_start_time'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.ledger_end_time IS '台账计费结束时间,可作为本次服务结束时间。 | 来源: ledger_end_time'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.ledger_status IS '助教流水状态:当前数据为 1,表示正常有效;其他值预留给已作废、未结算等状态。 | 来源: ledger_status'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.is_confirm IS '确认状态:当前样本为 2,一般含义为 1=待确认,2=已确认/已完成(含义基于字段名和现有值推断)。 | 来源: is_confirm'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.is_single_order IS '是否单独订单:1 表示助教服务作为单独订单结算;0 表示与其他项目合单结算。当前样本全部为 1。 | 来源: is_single_order'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.is_not_responding IS '是否存在“未响应/爽约”等异常:0 表示正常;1 表示未响应或爽约(基于字段名推断,当前数据均为 0)。 | 来源: is_not_responding'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.is_trash IS '是否已废除:0 表示正常有效;1 表示已废除,与助教废除记录表(assistant_cancellation_records)对应。 | 来源: is_trash'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.trash_applicant_id IS '提出废除申请的员工 ID,用于追溯谁发起了废除操作。 | 来源: trash_applicant_id | 角色: 外键'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.trash_applicant_name IS '废除申请人姓名,仅用于展示,与 trash_applicant_id 冗余。 | 来源: trash_applicant_name'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.trash_reason IS '废除原因文案,如“顾客取消”“录入错误”,便于分析异常原因。 | 来源: trash_reason'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.salesman_user_id IS '营业员/销售员用户 ID,大多为 0,当前门店未明显使用此维度。 | 来源: salesman_user_id | 角色: 外键'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.salesman_name IS '营业员/销售员姓名,多数为空字符串。 | 来源: salesman_name'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.salesman_org_id IS '营业员所属组织/部门 ID,多数为 0,尚未看到实际业务使用。 | 来源: salesman_org_id | 角色: 外键'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.skill_grade IS '课程技能评分(整数),当前样本全为 0,评价功能尚未启用。 | 来源: skill_grade'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.service_grade IS '服务态度评分(整数),当前样本全为 0。 | 来源: service_grade'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.composite_grade IS '综合评分(技能+服务等加权结果),当前样本为 0。 | 来源: composite_grade'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.sum_grade IS '累计评分总和,用于计算平均分,当前样本为 0。 | 来源: sum_grade'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.get_grade_times IS '获得评价的次数,当前样本为 0。 | 来源: get_grade_times'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.grade_status IS '评价状态枚举:当前样本为 1,一般含义为“未评价/正常”,其他状态未见实际值。 | 来源: grade_status'; -COMMENT ON COLUMN dwd_assistant_service_log_Ex.composite_grade_time IS '最近一次综合评分时间或评价更新时间,当前为默认时间 “0001-01-01 00:00:00”。 | 来源: composite_grade_time'; --- dwd_assistant_trash_event +COMMENT ON TABLE billiards_dwd.dwd_assistant_service_log_ex IS 'DWD 明细事实表(扩展字段表):dwd_assistant_service_log_ex。ODS 来源表:billiards_ods.assistant_service_records(对应 JSON:assistant_service_records.json;分析:assistant_service_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.assistant_service_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957913441292165(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - id。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.table_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】S1(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_service_records - tableName。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - tableName。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.assistant_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】何海婷(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_service_records - assistantName。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - assistantName。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.ledger_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】27-泡芙(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_service_records - ledger_name。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_name。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.ledger_group_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_service_records - ledger_group_name。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_group_name。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.ledger_count IS '【说明】数量/时长字段,用于统计与计量。 【示例】7592(数量/时长字段,用于统计与计量)。 【ODS来源】assistant_service_records - ledger_count。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_count。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.member_discount_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】assistant_service_records - member_discount_amount。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - member_discount_amount。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.manual_discount_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】assistant_service_records - manual_discount_amount。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - manual_discount_amount。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.service_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】assistant_service_records - service_money。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - service_money。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.returns_clock IS '【说明】明细字段,用于记录事实取值。 【示例】0(明细字段,用于记录事实取值)。 【ODS来源】assistant_service_records - returns_clock。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - returns_clock。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.ledger_start_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 21:18:18(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_service_records - ledger_start_time。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_start_time。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.ledger_end_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:24:50(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_service_records - ledger_end_time。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_end_time。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.ledger_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】assistant_service_records - ledger_status。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - ledger_status。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.is_confirm IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】2(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】assistant_service_records - is_confirm。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - is_confirm。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.is_single_order IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】1(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】assistant_service_records - is_single_order。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - is_single_order。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.is_not_responding IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】assistant_service_records - is_not_responding。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - is_not_responding。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.is_trash IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】assistant_service_records - is_trash。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - is_trash。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.trash_applicant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - trash_applicant_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - trash_applicant_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.trash_applicant_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_service_records - trash_applicant_name。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - trash_applicant_name。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.trash_reason IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】assistant_service_records - trash_reason。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - trash_reason。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.salesman_user_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - salesman_user_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - salesman_user_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.salesman_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_service_records - salesman_name。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - salesman_name。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.salesman_org_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_service_records - salesman_org_id。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - salesman_org_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.skill_grade IS '【说明】明细字段,用于记录事实取值。 【示例】0(明细字段,用于记录事实取值)。 【ODS来源】assistant_service_records - skill_grade。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - skill_grade。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.service_grade IS '【说明】明细字段,用于记录事实取值。 【示例】0(明细字段,用于记录事实取值)。 【ODS来源】assistant_service_records - service_grade。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - service_grade。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.composite_grade IS '【说明】明细字段,用于记录事实取值。 【示例】0.0(明细字段,用于记录事实取值)。 【ODS来源】assistant_service_records - composite_grade。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - composite_grade。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.sum_grade IS '【说明】明细字段,用于记录事实取值。 【示例】0.0(明细字段,用于记录事实取值)。 【ODS来源】assistant_service_records - sum_grade。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - sum_grade。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.get_grade_times IS '【说明】明细字段,用于记录事实取值。 【示例】0(明细字段,用于记录事实取值)。 【ODS来源】assistant_service_records - get_grade_times。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - get_grade_times。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.grade_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】assistant_service_records - grade_status。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - grade_status。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_service_log_ex.composite_grade_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】0001-01-01 00:00:00(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_service_records - composite_grade_time。 【JSON字段】assistant_service_records.json - data.orderAssistantDetails - composite_grade_time。'; + + CREATE TABLE IF NOT EXISTS dwd_assistant_trash_event ( assistant_trash_event_id BIGINT, site_id BIGINT, @@ -1400,29 +1509,33 @@ CREATE TABLE IF NOT EXISTS dwd_assistant_trash_event ( create_time TIMESTAMPTZ, PRIMARY KEY (assistant_trash_event_id) ); -COMMENT ON COLUMN dwd_assistant_trash_event.assistant_trash_event_id IS '助教废除事件主键。与源 JSON 中 id 一一对应,单表内唯一。没有业务含义,只作为技术主键使用。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dwd_assistant_trash_event.site_id IS '门店 ID。与其他 JSON 中的 siteId / site_id 含义一致。用来关联 dim_site。当前样例全部为同一门店(朗朗桌球),但设计上支持多门店。 | 来源: siteId | 角色: 外键(指向 dim_site)'; -COMMENT ON COLUMN dwd_assistant_trash_event.table_id IS '台桌 ID。对应 site_tables_master.json 中的 id。用于定位哪一张球台发生了助教废除,用于后续软关联台费流水、助教流水时的重要条件。 | 来源: tableId | 角色: 外键(指向 dim_table)'; -COMMENT ON COLUMN dwd_assistant_trash_event.table_area_id IS '台桌区域 ID。应与台桌维或区域维中的 area_id 一致,用于按区域统计(A 区/B 区/VIP 包厢等)。 | 来源: tableAreaId | 角色: 外键(潜在指向 dim_table_area)'; -COMMENT ON COLUMN dwd_assistant_trash_event.assistant_no IS '助教编号(工号/序号),如 ''2''、''4''、''27'' 等。与助教档案表 assistant_accounts_master.assistant_no、助教流水中的 assistantNo 一致,用于标识哪位助教。枚举:在门店内是有限编号集合,但并非硬编码含义。 | 来源: assistantOn | 角色: 外键(指向 dim_assistant)'; -COMMENT ON COLUMN dwd_assistant_trash_event.assistant_name IS '助教姓名/昵称,如 “泡芙”“佳怡”等。为冗余展示字段,真实姓名以助教档案为准。当前数据中与档案一致。 | 来源: assistantName'; -COMMENT ON COLUMN dwd_assistant_trash_event.charge_minutes_raw IS '助教被废除前“已计费时长(分钟)”的原始值。单位为分钟。示例:214、3600、10800 等。0 表示尚未发生有效计费就被废除。当前数据中存在异常大值(例如 10800),这一业务含义需结合实际规则理解,但本字段原样保留。枚举:数值型,无固定枚举。 | 来源: pdChargeMinutes'; -COMMENT ON COLUMN dwd_assistant_trash_event.abolish_amount IS '与本次助教废除操作关联的金额,单位元。字面含义为“助教废除金额”。当前样例均为非负数,如 5.83、570.00、0.00 等。正负方向:按照 ODS/JSON 原样保留,暂不在数仓层赋予“收入/支出”的方向含义,后续在 DWS 层按业务规则解释(例如是退还顾客、扣除收益等)。 | 来源: assistantAbolishAmount'; -COMMENT ON COLUMN dwd_assistant_trash_event.trash_reason IS '废除原因的文本说明,例如可以写“顾客临时取消”“误操作”等。当前样例中全部为空字符串,说明前台并未使用该字段。但从结构上看,是一个自由文本字段,不是枚举。 | 来源: trashReason'; -COMMENT ON COLUMN dwd_assistant_trash_event.create_time IS '这条废除记录创建的时间,格式 YYYY-MM-DD HH:MM:SS。代表系统正式记录“废除操作”的时刻,用于和助教服务流水按时间窗口做软关联(结合 site、table、assistant 等条件)。 | 来源: createTime'; --- dwd_assistant_trash_event_Ex +COMMENT ON TABLE billiards_dwd.dwd_assistant_trash_event IS 'DWD 明细事实表:dwd_assistant_trash_event。ODS 来源表:billiards_ods.assistant_cancellation_records(对应 JSON:assistant_cancellation_records.json;分析:assistant_cancellation_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_trash_event.assistant_trash_event_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957675849518789(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_cancellation_records - id。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - id。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_trash_event.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_cancellation_records - siteId。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - siteId。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_trash_event.table_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2793016660660357(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_cancellation_records - tableId。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - tableId。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_trash_event.table_area_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2791963816579205(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_cancellation_records - tableAreaId。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - tableAreaId。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_trash_event.assistant_no IS '【说明】明细字段,用于记录事实取值。 【示例】泡芙(明细字段,用于记录事实取值)。 【ODS来源】assistant_cancellation_records - assistantName。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - assistantName。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_trash_event.assistant_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】泡芙(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_cancellation_records - assistantName。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - assistantName。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_trash_event.charge_minutes_raw IS '【说明】明细字段,用于记录事实取值。 【示例】214(明细字段,用于记录事实取值)。 【ODS来源】assistant_cancellation_records - pdChargeMinutes。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - pdChargeMinutes。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_trash_event.abolish_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】5.83(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】assistant_cancellation_records - assistantAbolishAmount。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - assistantAbolishAmount。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_trash_event.trash_reason IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】assistant_cancellation_records - trashReason。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - trashReason。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_trash_event.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 19:23:29(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】assistant_cancellation_records - createTime。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - createTime。'; + + CREATE TABLE IF NOT EXISTS dwd_assistant_trash_event_Ex ( assistant_trash_event_id BIGINT, table_name VARCHAR(64), table_area_name VARCHAR(64), PRIMARY KEY (assistant_trash_event_id) ); -COMMENT ON COLUMN dwd_assistant_trash_event_Ex.assistant_trash_event_id IS '助教废除事件主键。与源 JSON 中 id 一一对应,单表内唯一。没有业务含义,只作为技术主键使用。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dwd_assistant_trash_event_Ex.table_name IS '台桌名称/编号,便于直观看报表,如 “C1”“B9”“VIP1”等。文案冗余自台桌维度。枚举:在门店范围内是有限集合,但不是固定编码表。 | 来源: tableName'; -COMMENT ON COLUMN dwd_assistant_trash_event_Ex.table_area_name IS '台桌区域名称(中文),如 “A区”“B区”“C区”“VIP包厢”“补时长”等。展示用文本,具体层级信息由区域维表提供。 | 来源: tableArea'; --- dwd_member_balance_change +COMMENT ON TABLE billiards_dwd.dwd_assistant_trash_event_ex IS 'DWD 明细事实表(扩展字段表):dwd_assistant_trash_event_ex。ODS 来源表:billiards_ods.assistant_cancellation_records(对应 JSON:assistant_cancellation_records.json;分析:assistant_cancellation_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_trash_event_ex.assistant_trash_event_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957675849518789(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】assistant_cancellation_records - id。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - id。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_trash_event_ex.table_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】C1(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_cancellation_records - tableName。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - tableName。'; +COMMENT ON COLUMN billiards_dwd.dwd_assistant_trash_event_ex.table_area_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】C区(名称字段,用于展示与辅助识别)。 【ODS来源】assistant_cancellation_records - tableArea。 【JSON字段】assistant_cancellation_records.json - data.abolitionAssistants - tableArea。'; + + CREATE TABLE IF NOT EXISTS dwd_member_balance_change ( balance_change_id BIGINT, tenant_id BIGINT, @@ -1445,27 +1558,29 @@ CREATE TABLE IF NOT EXISTS dwd_member_balance_change ( remark VARCHAR(255), PRIMARY KEY (balance_change_id) ); -COMMENT ON COLUMN dwd_member_balance_change.balance_change_id IS '余额变动记录主键 ID,来源于源系统的余额变更流水 ID,唯一标识一条余额变动事件。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dwd_member_balance_change.tenant_id IS '租户/品牌 ID,在整体系统中唯一标识一家商户。当前样本中为同一值。 | 来源: tenant_id | 角色: 外键'; -COMMENT ON COLUMN dwd_member_balance_change.site_id IS '本次余额变动发生的门店 ID。通常对应具体门店;样本中:非 0 为“朗朗桌球”,0 代表平台级/虚拟门店场景(如活动抵用券结算)。 | 来源: site_id | 角色: 外键'; -COMMENT ON COLUMN dwd_member_balance_change.register_site_id IS '办卡门店 ID(卡注册门店)。与 site_id 区分:register_site_id=当初办卡门店,site_id=本次余额变动实际发生门店。当前样本中全部相同。 | 来源: register_site_id | 角色: 外键'; -COMMENT ON COLUMN dwd_member_balance_change.tenant_member_id IS '租户维度会员 ID(同一租户内的会员主键),用于关联会员档案。 | 来源: tenant_member_id | 角色: 外键'; -COMMENT ON COLUMN dwd_member_balance_change.system_member_id IS '系统全局会员 ID(跨租户统一的会员标识)。当前只有一个门店,但结构上允许同一人跨租户共享该 ID。 | 来源: system_member_id | 角色: 外键'; -COMMENT ON COLUMN dwd_member_balance_change.tenant_member_card_id IS '会员卡账户 ID(租户内唯一的一张具体卡,例如某人的储值卡/酒水卡/台费卡/活动抵用券等)。本次余额变动作用于这张卡。 | 来源: tenant_member_card_id | 角色: 外键'; -COMMENT ON COLUMN dwd_member_balance_change.card_type_id IS '卡种类型 ID。与 card_type_name 一一对应,用于区分不同卡种(储值卡/活动抵用券/酒水卡/台费卡)。 | 来源: card_type_id | 角色: 外键'; -COMMENT ON COLUMN dwd_member_balance_change.card_type_name IS '卡种名称(中文):• 储值卡:通用储值卡;• 活动抵用券:活动送券型卡;• 酒水卡:指定用于酒水类消费;• 台费卡:指定用于台费消费。 | 来源: memberCardTypeName'; -COMMENT ON COLUMN dwd_member_balance_change.member_name IS '会员姓名/称呼(如“曾丹烨”“葛先生”“胡先生”),主要用于运营、客服和人工识别。 | 来源: memberName'; -COMMENT ON COLUMN dwd_member_balance_change.member_mobile IS '会员手机号(完整号码字符串),是会员识别、营销触达的重要字段。 | 来源: memberMobile'; -COMMENT ON COLUMN dwd_member_balance_change.balance_before IS '本次变动前的卡内余额,单位:元。可为 0、数百、数千等。 | 来源: before'; -COMMENT ON COLUMN dwd_member_balance_change.change_amount IS '本次余额变动金额,单位:元:• 正数:余额增加(充值、赠送、调整加款等);• 负数:余额减少(消费扣款、退款冲减、活动抵扣等)。所有记录严格满足:balance_after = balance_before + change_amount(浮点精度内)。 | 来源: account_data'; -COMMENT ON COLUMN dwd_member_balance_change.balance_after IS '本次变动后的卡内余额,单位:元。由 before + account_data 计算而得,在源数据中已给出。 | 来源: after'; -COMMENT ON COLUMN dwd_member_balance_change.from_type IS '余额变动来源类型枚举(控制业务含义与方向):• 1:日常消费扣款 —— change_amount 为负数,payment_method=0,表示用卡支付消费被扣余额;• 3:充值增加 —— change_amount 为正数,payment_method=4,表示顾客通过外部支付为卡充值(扫码、银行卡等);• 4:调整/赠送增加 —— change_amount 为正数,payment_method=3,通常为后台赠送或手工加款;• 7:充值退款 —— change_amount 为负数,remark=''充值退款'',表示对历史充值做退款,以减少卡内余额方式体现;• 9:活动抵用券相关余额冲减 —— change_amount 为负数,卡种为“活动抵用券”,site_id=0,表示活动券额度被扣回或结算;• 2:其他增加 —— 当前仅 1 条正数样本(+1865.80),具体业务类型不明,但可确定为余额增加类。总体上:1/7/9 为减余额类,2/3/4 为加余额类。 | 来源: from_type'; -COMMENT ON COLUMN dwd_member_balance_change.payment_method IS '支付/变动渠道枚举(与源系统支付方式枚举一致):• 0:内部结算/无外部支付 —— 日常消费扣款、内部扣减、退款冲减等场景,新资金流不在本记录中产生;• 3:赠送/后台调整渠道 —— 与 from_type=4 搭配出现,表示此余额增加不是顾客付钱,而是后台发放或内部调账;• 4:充值外部支付渠道 —— 与 from_type=3 搭配出现,代表顾客通过某外部渠道完成充值(具体是微信/支付宝/银行卡等需要结合支付枚举表进一步映射)。 | 来源: payment_method'; -COMMENT ON COLUMN dwd_member_balance_change.change_time IS '余额变动时间(记录创建时间),格式 YYYY-MM-DD HH:MM:SS。通常紧邻实际交易发生时间,用于按时间线分析资金变动。 | 来源: create_time'; -COMMENT ON COLUMN dwd_member_balance_change.is_delete IS '逻辑删除标记:• 0:正常记录(当前样本全部为 0);• 1:逻辑删除(标记为删除但数据库保留,用于追溯)。分析时通常需要过滤掉 is_delete=1 的记录。 | 来源: is_delete'; -COMMENT ON COLUMN dwd_member_balance_change.remark IS '余额变动备注信息。当前样本中主要为:• 空字符串:无额外说明;• 充值退款:明确标记该条记录为“充值退款”业务,与 from_type=7 完全对应。后续可能出现其他业务备注。 | 来源: remark'; --- dwd_member_balance_change_EX +COMMENT ON TABLE billiards_dwd.dwd_member_balance_change IS 'DWD 明细事实表:dwd_member_balance_change。ODS 来源表:billiards_ods.member_balance_changes(对应 JSON:member_balance_changes.json;分析:member_balance_changes-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.balance_change_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957881605869253(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_balance_changes - id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - id。'; +COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_balance_changes - tenant_id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - tenant_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_balance_changes - site_id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - site_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.register_site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_balance_changes - register_site_id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - register_site_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.tenant_member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2799212845565701(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_balance_changes - tenant_member_id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - tenant_member_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.system_member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2799212844549893(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_balance_changes - system_member_id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - system_member_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.tenant_member_card_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2799219999295237(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_balance_changes - tenant_member_card_id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - tenant_member_card_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.card_type_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2793249295533893(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_balance_changes - card_type_id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - card_type_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.card_type_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】储值卡(名称字段,用于展示与辅助识别)。 【ODS来源】member_balance_changes - memberCardTypeName。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - memberCardTypeName。'; +COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.member_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】曾丹烨(名称字段,用于展示与辅助识别)。 【ODS来源】member_balance_changes - memberName。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - memberName。'; +COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.member_mobile IS '【说明】明细字段,用于记录事实取值。 【示例】13922213242(明细字段,用于记录事实取值)。 【ODS来源】member_balance_changes - memberMobile。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - memberMobile。'; +COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.balance_before IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】816.3(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_balance_changes - before。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - before。'; +COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.change_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】-120.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_balance_changes - account_data。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - account_data。'; +COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.balance_after IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】696.3(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_balance_changes - after。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - after。'; +COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.from_type IS '【说明】明细字段,用于记录事实取值。 【示例】1(明细字段,用于记录事实取值)。 【ODS来源】member_balance_changes - from_type。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - from_type。'; +COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.payment_method IS '【说明】明细字段,用于记录事实取值。 【示例】0(明细字段,用于记录事实取值)。 【ODS来源】member_balance_changes - payment_method。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - payment_method。'; +COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.change_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 22:52:48(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】member_balance_changes - create_time。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - create_time。'; +COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.is_delete IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】member_balance_changes - is_delete。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - is_delete。'; +COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change.remark IS '【说明】明细字段,用于记录事实取值。 【示例】充值退款(明细字段,用于记录事实取值)。 【ODS来源】member_balance_changes - remark。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - remark。'; + + CREATE TABLE IF NOT EXISTS dwd_member_balance_change_EX ( balance_change_id BIGINT, pay_site_name VARCHAR(64), @@ -1475,14 +1590,16 @@ CREATE TABLE IF NOT EXISTS dwd_member_balance_change_EX ( operator_name VARCHAR(64), PRIMARY KEY (balance_change_id) ); -COMMENT ON COLUMN dwd_member_balance_change_EX.balance_change_id IS '余额变动记录主键 ID,来源于源系统的余额变更流水 ID,唯一标识一条余额变动事件。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dwd_member_balance_change_EX.pay_site_name IS '余额变动发生门店名称,对应 site_id 的中文名。示例:朗朗桌球;当 site_id = 0 时通常为空字符串。纯展示冗余。 | 来源: paySiteName'; -COMMENT ON COLUMN dwd_member_balance_change_EX.register_site_name IS '办卡门店名称,对应 register_site_id 的中文名。当前样本全部为 朗朗桌球,属于冗余展示。 | 来源: registerSiteName'; -COMMENT ON COLUMN dwd_member_balance_change_EX.refund_amount IS '退款金额字段。在当前样本数据中全部为 0.00,推测用于区分“退回卡内余额”和“原路退回”等更细的退款模式,但目前未启用。 | 来源: refund_amount'; -COMMENT ON COLUMN dwd_member_balance_change_EX.operator_id IS '操作员 ID,执行本次余额变动操作的员工账号主键。可关联员工/账号维度。 | 来源: operator_id | 角色: 外键'; -COMMENT ON COLUMN dwd_member_balance_change_EX.operator_name IS '操作员名称及职位说明,例如:收银员:郑丽珊、店长:谢晓洪 等,是对 operator_id 的可读冗余。 | 来源: operator_name'; --- dwd_groupbuy_redemption +COMMENT ON TABLE billiards_dwd.dwd_member_balance_change_ex IS 'DWD 明细事实表(扩展字段表):dwd_member_balance_change_ex。ODS 来源表:billiards_ods.member_balance_changes(对应 JSON:member_balance_changes.json;分析:member_balance_changes-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change_ex.balance_change_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957881605869253(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_balance_changes - id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - id。'; +COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change_ex.pay_site_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】朗朗桌球(名称字段,用于展示与辅助识别)。 【ODS来源】member_balance_changes - paySiteName。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - paySiteName。'; +COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change_ex.register_site_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】朗朗桌球(名称字段,用于展示与辅助识别)。 【ODS来源】member_balance_changes - registerSiteName。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - registerSiteName。'; +COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change_ex.refund_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】member_balance_changes - refund_amount。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - refund_amount。'; +COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change_ex.operator_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790687322443013(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】member_balance_changes - operator_id。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - operator_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_member_balance_change_ex.operator_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】收银员:郑丽珊(名称字段,用于展示与辅助识别)。 【ODS来源】member_balance_changes - operator_name。 【JSON字段】member_balance_changes.json - data.tenantMemberCardLogs - operator_name。'; + + CREATE TABLE IF NOT EXISTS dwd_groupbuy_redemption ( redemption_id BIGINT, tenant_id BIGINT, @@ -1509,31 +1626,33 @@ CREATE TABLE IF NOT EXISTS dwd_groupbuy_redemption ( create_time TIMESTAMPTZ, PRIMARY KEY (redemption_id) ); -COMMENT ON COLUMN dwd_groupbuy_redemption.redemption_id IS '团购券核销流水主键。一条记录代表一次团购券使用在某次台费上的一条核销明细。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dwd_groupbuy_redemption.tenant_id IS '租户/品牌 ID。与其他表统一的租户标识,用于品牌维度聚合。 | 来源: tenant_id | 角色: 外键'; -COMMENT ON COLUMN dwd_groupbuy_redemption.site_id IS '门店 ID。与门店维度及其他业务事实中的 site_id 一致。 | 来源: site_id | 角色: 外键'; -COMMENT ON COLUMN dwd_groupbuy_redemption.table_id IS '球台 ID。与台桌维度表中的 id 对应,用于确定具体哪一张球台。 | 来源: table_id | 角色: 外键'; -COMMENT ON COLUMN dwd_groupbuy_redemption.tenant_table_area_id IS '租户级台区组合 ID。与团购套餐定义中的 tenant_table_area_id_list 元素对应,表示该券实际使用时所在的台区组合。用于校验券的适用台区是否匹配实际台桌。 | 来源: tenant_table_area_id | 角色: 外键'; -COMMENT ON COLUMN dwd_groupbuy_redemption.table_charge_seconds IS '本次结算中该球台总计计费的秒数(整台计费时间)。当台上除了券覆盖时长之外还有额外计费时间时,该值会大于券核销时长。 | 来源: table_charge_seconds'; -COMMENT ON COLUMN dwd_groupbuy_redemption.order_trade_no IS '订单交易号。与台费流水、商品销售、助教服务、小票详情等表的 order_trade_no 一致,用于将同一笔结账中的所有明细串联起来。 | 来源: order_trade_no | 角色: 外键'; -COMMENT ON COLUMN dwd_groupbuy_redemption.order_settle_id IS '结算单 ID。与结账记录和小票详情中的结算主键对应,用于从团购券核销记录跳转到整单结算。 | 来源: order_settle_id | 角色: 外键'; -COMMENT ON COLUMN dwd_groupbuy_redemption.order_coupon_id IS '订单中的“券使用记录 ID”。与平台或内部券核销表中的主键一致,用于在订单内部定位这条券使用记录。当前与 coupon_origin_id 数值相等。 | 来源: order_coupon_id | 角色: 外键'; -COMMENT ON COLUMN dwd_groupbuy_redemption.coupon_origin_id IS '上游系统或第三方平台中该券记录的主键 ID。可在平台验券记录中查到券的来源平台、原订单等。当前与 order_coupon_id 数值一致,但语义是“券来源 ID”。 | 来源: coupon_origin_id | 角色: 外键'; -COMMENT ON COLUMN dwd_groupbuy_redemption.promotion_activity_id IS '促销活动 ID。每条记录对应一个活动主键,用于识别券所属的促销活动或团购活动。 | 来源: promotion_activity_id | 角色: 外键'; -COMMENT ON COLUMN dwd_groupbuy_redemption.promotion_coupon_id IS '团购套餐定义 ID。与 group_buy_packages.json 中的 id 一一对应,表示当前使用的是哪一种团购套餐(例如某款“一小时套餐”“两小时套餐”)。 | 来源: promotion_coupon_id | 角色: 外键'; -COMMENT ON COLUMN dwd_groupbuy_redemption.order_coupon_channel IS '券渠道类型枚举。观测值:1(大量记录)、2(少量记录)。用于区分券的来源渠道,例如不同团购平台或内部券。具体数值与渠道名称的映射由业务配置决定。 | 来源: order_coupon_channel | 角色: 外键'; -COMMENT ON COLUMN dwd_groupbuy_redemption.ledger_unit_price IS '本次券在台费侧对应的标准单价,单位元/小时。典型值如 29.9、39.9、59.9、69.9 等。与门店台费计费规则中的单价相对应,用于计算券对应的金额。 | 来源: ledger_unit_price'; -COMMENT ON COLUMN dwd_groupbuy_redemption.ledger_count IS '本次券实际核销的计费秒数。大部分记录等于 promotion_seconds,少数略小于标准时长,表示这张券只覆盖了本次台费的一部分时长。 | 来源: ledger_count'; -COMMENT ON COLUMN dwd_groupbuy_redemption.ledger_amount IS '本次团购券实际冲抵台费的金额。大部分记录中该值与 coupon_money 相等,少数存在小数差异,来源于按单价与秒数换算的结果。 | 来源: ledger_amount'; -COMMENT ON COLUMN dwd_groupbuy_redemption.coupon_money IS '本次核销时,团购券在门店侧对应的金额额度(可抵扣金额)。同一种 promotion_coupon_id 下,该值固定,例如某套餐固定为 48.00 元、某套餐固定为 96.00 元等。 | 来源: coupon_money'; -COMMENT ON COLUMN dwd_groupbuy_redemption.promotion_seconds IS '团购套餐定义的标准时长权益,单位秒。观测枚举值为 3600、7200、14400,分别对应 1 小时、2 小时、4 小时。与团购套餐定义表中的 duration 字段一致。 | 来源: promotion_seconds'; -COMMENT ON COLUMN dwd_groupbuy_redemption.coupon_code IS '团购券券码字符串。每条记录一个唯一券码,例如“0107892475999”。用于与平台验券记录、券购买记录等做一一对应,追踪券的全生命周期。 | 来源: coupon_code | 角色: 外键'; -COMMENT ON COLUMN dwd_groupbuy_redemption.is_single_order IS '是否作为单独订单行。观测值:1 为主,表示以独立条目方式结算;0 为个别记录,表示嵌入某种组合结算结构。具体业务含义依赖上层订单结构设计。 | 来源: is_single_order'; -COMMENT ON COLUMN dwd_groupbuy_redemption.is_delete IS '逻辑删除标记。0 表示正常记录,1 表示逻辑删除但数据仍保留用于追溯。当前样本全部为 0,用于过滤有效记录。 | 来源: is_delete'; -COMMENT ON COLUMN dwd_groupbuy_redemption.ledger_name IS '团购项目记账名称,如“全天A区中八一小时”“B区桌球一小时”“中八、斯诺克包厢两小时”等。通常与团购套餐名称相近,用于报表展示和套餐维度分析。 | 来源: ledger_name'; -COMMENT ON COLUMN dwd_groupbuy_redemption.create_time IS '本条团购券核销流水的创建时间,通常即核销时间,格式为“YYYY-MM-DD HH:MM:SS”。用于时间维度分析和数据分区。 | 来源: create_time'; --- dwd_groupbuy_redemption_Ex +COMMENT ON TABLE billiards_dwd.dwd_groupbuy_redemption IS 'DWD 明细事实表:dwd_groupbuy_redemption。ODS 来源表:billiards_ods.group_buy_redemption_records(对应 JSON:group_buy_redemption_records.json;分析:group_buy_redemption_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.redemption_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957924029615941(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - id。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - tenant_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - tenant_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - site_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - site_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.table_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2793003705192517(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - table_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - table_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.tenant_table_area_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2791960001957765(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - tenant_table_area_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - tenant_table_area_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.table_charge_seconds IS '【说明】数量/时长字段,用于统计与计量。 【示例】3600(数量/时长字段,用于统计与计量)。 【ODS来源】group_buy_redemption_records - table_charge_seconds。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - table_charge_seconds。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.order_trade_no IS '【说明】明细字段,用于记录事实取值。 【示例】2957858167230149(明细字段,用于记录事实取值)。 【ODS来源】group_buy_redemption_records - order_trade_no。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - order_trade_no。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.order_settle_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957922914357125(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - order_settle_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - order_settle_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.order_coupon_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957858168229573(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - order_coupon_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - order_coupon_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.coupon_origin_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957858168229573(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - coupon_origin_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - coupon_origin_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.promotion_activity_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957858166460101(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - promotion_activity_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - promotion_activity_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.promotion_coupon_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2798727423528005(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - promotion_coupon_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - promotion_coupon_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.order_coupon_channel IS '【说明】明细字段,用于记录事实取值。 【示例】1(明细字段,用于记录事实取值)。 【ODS来源】group_buy_redemption_records - order_coupon_channel。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - order_coupon_channel。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.ledger_unit_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】29.9(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】group_buy_redemption_records - ledger_unit_price。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_unit_price。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.ledger_count IS '【说明】数量/时长字段,用于统计与计量。 【示例】3600(数量/时长字段,用于统计与计量)。 【ODS来源】group_buy_redemption_records - ledger_count。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_count。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.ledger_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】48.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】group_buy_redemption_records - ledger_amount。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_amount。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.coupon_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】48.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】group_buy_redemption_records - coupon_money。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - coupon_money。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.promotion_seconds IS '【说明】数量/时长字段,用于统计与计量。 【示例】3600(数量/时长字段,用于统计与计量)。 【ODS来源】group_buy_redemption_records - promotion_seconds。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - promotion_seconds。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.coupon_code IS '【说明】明细字段,用于记录事实取值。 【示例】0107892475999(明细字段,用于记录事实取值)。 【ODS来源】group_buy_redemption_records - coupon_code。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - coupon_code。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.is_single_order IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】1(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】group_buy_redemption_records - is_single_order。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - is_single_order。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.is_delete IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】group_buy_redemption_records - is_delete。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - is_delete。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.ledger_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】全天A区中八一小时(名称字段,用于展示与辅助识别)。 【ODS来源】group_buy_redemption_records - ledger_name。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_name。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:35:57(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】group_buy_redemption_records - create_time。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - create_time。'; + + CREATE TABLE IF NOT EXISTS dwd_groupbuy_redemption_Ex ( redemption_id BIGINT, site_name VARCHAR(64), @@ -1558,29 +1677,31 @@ CREATE TABLE IF NOT EXISTS dwd_groupbuy_redemption_Ex ( ledger_group_name VARCHAR(128), PRIMARY KEY (redemption_id) ); -COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.redemption_id IS '团购券核销流水主键。一条记录代表一次团购券使用在某次台费上的一条核销明细。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.site_name IS '门店名称。当前样本全部为同一门店,仅作冗余展示。 | 来源: siteName'; -COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.table_name IS '球台名称或台号。如 A7、A11、B1 等。用于业务报表展示与人工识别。 | 来源: tableName'; -COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.table_area_name IS '台区名称。观测枚举值包括 A区、B区、斯诺克区、麻将房。实际取值随门店台区配置变化。 | 来源: tableAreaName'; -COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.order_pay_id IS '支付流水 ID。部分记录为 0,表示未在当前导出范围内关联到具体支付记录。真实含义为“指向支付记录表中的支付流水”。 | 来源: order_pay_id | 角色: 外键'; -COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.goods_option_price IS '商品规格价格,用于商品类促销分摊时使用。当前在团购券核销场景中全部为 0,仅作为结构预留。 | 来源: goodsOptionPrice'; -COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.goods_promotion_money IS '本次券使用中分摊到“商品”部分的促销金额。当前所有记录为 0,说明本门店的团购券未用于商品抵扣。 | 来源: goods_promotion_money'; -COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.table_service_promotion_money IS '本次券使用中分摊到“台费服务费”部分的促销金额。当前样本全部为 0,结构上用于支持更细粒度的费用拆分。 | 来源: table_service_promotion_money'; -COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.assistant_promotion_money IS '本次券使用中分摊到“助教服务”的促销金额。当前全部为 0,说明团购券尚未用于助教服务的抵扣。 | 来源: assistant_promotion_money'; -COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.assistant_service_promotion_money IS '进一步细分助教服务对应的促销金额。当前为 0,仅预留结构以支持复杂场景。 | 来源: assistant_service_promotion_money'; -COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.reward_promotion_money IS '本次促销中属于“奖励金、积分”等来源的促销金额分摊。当前为 0,预留用于积分或奖励金同时参与活动时的金额拆分。 | 来源: reward_promotion_money'; -COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.recharge_promotion_money IS '来自“充值赠送”等储值优惠的促销金额分摊。当前为 0,预留用于将来区分“券优惠”和“充值赠送优惠”的场景。 | 来源: recharge_promotion_money'; -COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.offer_type IS '优惠类型枚举。当前样本值全部为 1,表示本门店使用的团购券均为同一类型(例如“套餐券”)。其他取值可能对应满减、折扣、代金券等优惠类型,在本数据中未出现。 | 来源: offer_type'; -COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.ledger_status IS '流水状态。观测值全部为 1。常规含义为:1 表示正常有效记录;其他值预留用于表示作废、撤销、未生效等状态。当前导出仅包含正常状态记录。 | 来源: ledger_status'; -COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.operator_id IS '执行本次券核销操作的操作员 ID。可与员工维度表对接,用于分析不同操作员的核销行为与绩效。 | 来源: operator_id | 角色: 外键'; -COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.operator_name IS '操作员名称及角色说明,例如“收银员:郑丽珊”。与 operator_id 冗余,对报表展示友好,但不参与模型关联。 | 来源: operator_name'; -COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.salesman_user_id IS '营业员用户 ID。当前全部为 0,表示本门店在团购券场景未单独记录营业员信息。 | 来源: salesman_user_id | 角色: 外键'; -COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.salesman_name IS '营业员姓名。当前为空字符串。结构上用于记录拉单或促销的业务员信息。 | 来源: salesman_name'; -COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.salesman_role_id IS '营业员角色 ID。当前为 0,预留用于标识营业员在组织中的角色类型。 | 来源: salesman_role_id'; -COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.salesman_org_id IS '营业员所属组织 ID。来源字段为 sales_man_org_id,DWD 层统一命名为 salesman_org_id。当前为 0,用于将来对接组织架构维度。 | 来源: sales_man_org_id'; -COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.ledger_group_name IS '团购项目的记账分组名称。当前全部为空,预留给将来按团购项目大类分组(例如“团购台费”“团购包厢”)使用。 | 来源: ledger_group_name'; --- dwd_platform_coupon_redemption +COMMENT ON TABLE billiards_dwd.dwd_groupbuy_redemption_ex IS 'DWD 明细事实表(扩展字段表):dwd_groupbuy_redemption_ex。ODS 来源表:billiards_ods.group_buy_redemption_records(对应 JSON:group_buy_redemption_records.json;分析:group_buy_redemption_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.redemption_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957924029615941(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - id。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.site_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】朗朗桌球(名称字段,用于展示与辅助识别)。 【ODS来源】group_buy_redemption_records - siteName。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - siteName。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.table_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】A17(名称字段,用于展示与辅助识别)。 【ODS来源】group_buy_redemption_records - tableName。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - tableName。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.table_area_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】A区(名称字段,用于展示与辅助识别)。 【ODS来源】group_buy_redemption_records - tableAreaName。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - tableAreaName。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.order_pay_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - order_pay_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - order_pay_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.goods_option_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】group_buy_redemption_records - goodsOptionPrice。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - goodsOptionPrice。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.goods_promotion_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】group_buy_redemption_records - goods_promotion_money。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - goods_promotion_money。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.table_service_promotion_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】group_buy_redemption_records - table_service_promotion_money。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - table_service_promotion_money。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.assistant_promotion_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】group_buy_redemption_records - assistant_promotion_money。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - assistant_promotion_money。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.assistant_service_promotion_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】group_buy_redemption_records - assistant_service_promotion_money。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - assistant_service_promotion_money。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.reward_promotion_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】group_buy_redemption_records - reward_promotion_money。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - reward_promotion_money。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.recharge_promotion_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】group_buy_redemption_records - recharge_promotion_money。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - recharge_promotion_money。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.offer_type IS '【说明】明细字段,用于记录事实取值。 【示例】1(明细字段,用于记录事实取值)。 【ODS来源】group_buy_redemption_records - offer_type。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - offer_type。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.ledger_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】group_buy_redemption_records - ledger_status。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_status。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.operator_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790687322443013(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - operator_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - operator_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.operator_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】收银员:郑丽珊(名称字段,用于展示与辅助识别)。 【ODS来源】group_buy_redemption_records - operator_name。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - operator_name。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.salesman_user_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - salesman_user_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - salesman_user_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.salesman_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】group_buy_redemption_records - salesman_name。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - salesman_name。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.salesman_role_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - salesman_role_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - salesman_role_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.salesman_org_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】group_buy_redemption_records - sales_man_org_id。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - sales_man_org_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_groupbuy_redemption_ex.ledger_group_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】group_buy_redemption_records - ledger_group_name。 【JSON字段】group_buy_redemption_records.json - data.siteTableUseDetailsList - ledger_group_name。'; + + CREATE TABLE IF NOT EXISTS dwd_platform_coupon_redemption ( platform_coupon_redemption_id BIGINT, tenant_id BIGINT, @@ -1604,28 +1725,30 @@ CREATE TABLE IF NOT EXISTS dwd_platform_coupon_redemption ( consume_time TIMESTAMPTZ, PRIMARY KEY (platform_coupon_redemption_id) ); -COMMENT ON COLUMN dwd_platform_coupon_redemption.platform_coupon_redemption_id IS '平台券核销记录在本系统内的主键 ID。长整型分布式 ID,用于唯一标识本次核销流水。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dwd_platform_coupon_redemption.tenant_id IS '租户 ID,品牌级别标识。例如整套系统中的“朗朗桌球”品牌。与其他表的 tenant_id 一致,用于划分租户数据域。 | 来源: tenant_id | 角色: 外键'; -COMMENT ON COLUMN dwd_platform_coupon_redemption.site_id IS '门店 ID。与门店维度 dim_site.site_id 对应,用于区分不同门店。siteProfile.id 与此字段相同,本表不再冗余门店快照。 | 来源: site_id | 角色: 外键'; -COMMENT ON COLUMN dwd_platform_coupon_redemption.coupon_code IS '第三方团购券券码,顾客出示的核销码。当前样本中全表唯一,可视为业务自然主键,用于验券、对账、查询。 | 来源: coupon_code'; -COMMENT ON COLUMN dwd_platform_coupon_redemption.coupon_channel IS '券来源渠道枚举,表示第三方平台渠道编号。观测值:1,2。具体含义需结合系统配置,一般可理解为:1 表示平台渠道 1(主平台),2 表示平台渠道 2(其他入口或子平台)。 | 来源: coupon_channel'; -COMMENT ON COLUMN dwd_platform_coupon_redemption.coupon_name IS '第三方团购券产品名称,例如“【全天可用】中八桌球一小时(A区)”“1小时中八台球【11月特惠】(A区)”等。用于报表展示和区分不同团购产品。 | 来源: coupon_name'; -COMMENT ON COLUMN dwd_platform_coupon_redemption.sale_price IS '顾客在第三方平台实际支付的团购售价,例如 11.11、29.90、39.90 等。始终小于 coupon_money,体现“折后价”。 | 来源: sale_price'; -COMMENT ON COLUMN dwd_platform_coupon_redemption.coupon_money IS '券面值或套餐价值,即系统认为该券可抵扣的金额,例如 48.00、58.00、68.00、96.00、116.00、288.00。与 coupon_name 有固定对应关系。 | 来源: coupon_money'; -COMMENT ON COLUMN dwd_platform_coupon_redemption.coupon_free_time IS '券附带的赠送时长,单位:秒。当前样本全部为 0,表示无独立赠送时长。若未来有赠送时间型券,则该字段存储赠送的秒数。 | 来源: coupon_free_time'; -COMMENT ON COLUMN dwd_platform_coupon_redemption.channel_deal_id IS '渠道侧团购商品 ID(第三方平台 dealId)。值域有限(约 9 个值),与 coupon_name 一一对应。用于对接第三方接口和按平台商品维度统计。 | 来源: channel_deal_id | 角色: - 或 外键(预留)'; -COMMENT ON COLUMN dwd_platform_coupon_redemption.deal_id IS '平台/系统侧团购商品 ID。多数记录为非 0 整数,也有部分为 0。与 coupon_name 存在稳定对应关系,0 表示内部未配置或未同步。未来可作为内部团购商品维度外键。 | 来源: deal_id | 角色: 外键(预留)'; -COMMENT ON COLUMN dwd_platform_coupon_redemption.group_package_id IS '内部“团购套餐”定义表主键 ID。当前样本中全部为 0,表示平台券尚未映射到自有团购套餐;从设计上是预留的外键字段。 | 来源: group_package_id | 角色: 外键'; -COMMENT ON COLUMN dwd_platform_coupon_redemption.site_order_id IS '门店内部订单 ID。本次平台券核销所挂靠的店内订单号。用于与结账记录、台费流水、商品销售等事实表通过订单维度关联。 | 来源: site_order_id | 角色: 外键'; -COMMENT ON COLUMN dwd_platform_coupon_redemption.table_id IS '使用团购券的球台 ID。与 dim_site_table.table_id 对应,用于统计每张球台的第三方平台引流情况。 | 来源: table_id | 角色: 外键'; -COMMENT ON COLUMN dwd_platform_coupon_redemption.certificate_id IS '第三方平台侧券实例 ID(凭证 ID),通常为 16–19 位数字字符串。用于与外部平台对账与查询核销结果。存在重复值,不能单独作为唯一键。 | 来源: certificate_id'; -COMMENT ON COLUMN dwd_platform_coupon_redemption.verify_id IS '第三方平台核销记录 ID。大部分记录为空,少量有值。存在时可用于精确反查平台侧核销记录。 | 来源: verify_id'; -COMMENT ON COLUMN dwd_platform_coupon_redemption.use_status IS '券使用状态枚举。观测值:1、2。1 表示已使用/已核销(正常消耗);2 表示已退款/已撤销或使用后反冲的状态。是判断券生命周期状态的核心字段。 | 来源: use_status'; -COMMENT ON COLUMN dwd_platform_coupon_redemption.is_delete IS '逻辑删除标志。0 表示未删除;1 表示已逻辑删除。与 use_status 独立:即便业务状态异常(如 use_status=2),也可能 is_delete 仍为 0 以保留记录。 | 来源: is_delete'; -COMMENT ON COLUMN dwd_platform_coupon_redemption.create_time IS '系统记录创建时间,即核销记录写入本系统的时间。格式为 YYYY-MM-DD HH:MM:SS。通常与 consume_time 相差约 1 秒。 | 来源: create_time'; -COMMENT ON COLUMN dwd_platform_coupon_redemption.consume_time IS '券被核销/使用的业务时间,代表实际团购券使用发生的时间点。后续按核销日期统计核销量时以该字段为准。 | 来源: consume_time'; --- dwd_platform_coupon_redemption_Ex +COMMENT ON TABLE billiards_dwd.dwd_platform_coupon_redemption IS 'DWD 明细事实表:dwd_platform_coupon_redemption。ODS 来源表:billiards_ods.platform_coupon_redemption_records(对应 JSON:platform_coupon_redemption_records.json;分析:platform_coupon_redemption_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.platform_coupon_redemption_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957929042218501(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】platform_coupon_redemption_records - id。 【JSON字段】platform_coupon_redemption_records.json - $ - id。'; +COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】platform_coupon_redemption_records - tenant_id。 【JSON字段】platform_coupon_redemption_records.json - $ - tenant_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】platform_coupon_redemption_records - site_id。 【JSON字段】platform_coupon_redemption_records.json - $ - site_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.coupon_code IS '【说明】明细字段,用于记录事实取值。 【示例】0102701209726(明细字段,用于记录事实取值)。 【ODS来源】platform_coupon_redemption_records - coupon_code。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_code。'; +COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.coupon_channel IS '【说明】明细字段,用于记录事实取值。 【示例】1(明细字段,用于记录事实取值)。 【ODS来源】platform_coupon_redemption_records - coupon_channel。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_channel。'; +COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.coupon_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】【全天可用】中八桌球一小时(A区)(名称字段,用于展示与辅助识别)。 【ODS来源】platform_coupon_redemption_records - coupon_name。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_name。'; +COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.sale_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】29.9(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】platform_coupon_redemption_records - sale_price。 【JSON字段】platform_coupon_redemption_records.json - $ - sale_price。'; +COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.coupon_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】48.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】platform_coupon_redemption_records - coupon_money。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_money。'; +COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.coupon_free_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】0(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】platform_coupon_redemption_records - coupon_free_time。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_free_time。'; +COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.channel_deal_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】1128411555(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】platform_coupon_redemption_records - channel_deal_id。 【JSON字段】platform_coupon_redemption_records.json - $ - channel_deal_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.deal_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】1345108507(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】platform_coupon_redemption_records - deal_id。 【JSON字段】platform_coupon_redemption_records.json - $ - deal_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.group_package_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】platform_coupon_redemption_records - group_package_id。 【JSON字段】platform_coupon_redemption_records.json - $ - group_package_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.site_order_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957929043037702(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】platform_coupon_redemption_records - site_order_id。 【JSON字段】platform_coupon_redemption_records.json - $ - site_order_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.table_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2793001904918661(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】platform_coupon_redemption_records - table_id。 【JSON字段】platform_coupon_redemption_records.json - $ - table_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.certificate_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】5008024789379597447(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】platform_coupon_redemption_records - certificate_id。 【JSON字段】platform_coupon_redemption_records.json - $ - certificate_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.verify_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】7570689090418149418(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】platform_coupon_redemption_records - verify_id。 【JSON字段】platform_coupon_redemption_records.json - $ - verify_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.use_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】platform_coupon_redemption_records - use_status。 【JSON字段】platform_coupon_redemption_records.json - $ - use_status。'; +COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.is_delete IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】platform_coupon_redemption_records - is_delete。 【JSON字段】platform_coupon_redemption_records.json - $ - is_delete。'; +COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:41:03(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】platform_coupon_redemption_records - create_time。 【JSON字段】platform_coupon_redemption_records.json - $ - create_time。'; +COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption.consume_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:41:04(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】platform_coupon_redemption_records - consume_time。 【JSON字段】platform_coupon_redemption_records.json - $ - consume_time。'; + + CREATE TABLE IF NOT EXISTS dwd_platform_coupon_redemption_Ex ( platform_coupon_redemption_id BIGINT, coupon_cover VARCHAR(255), @@ -1635,14 +1758,16 @@ CREATE TABLE IF NOT EXISTS dwd_platform_coupon_redemption_Ex ( operator_name VARCHAR(50), PRIMARY KEY (platform_coupon_redemption_id) ); -COMMENT ON COLUMN dwd_platform_coupon_redemption_Ex.platform_coupon_redemption_id IS '平台券核销记录在本系统内的主键 ID。长整型分布式 ID,用于唯一标识本次核销流水。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dwd_platform_coupon_redemption_Ex.coupon_cover IS '券封面图片地址 URL,用于前端展示团购券图片。对经营分析和结算逻辑无影响。 | 来源: coupon_cover'; -COMMENT ON COLUMN dwd_platform_coupon_redemption_Ex.coupon_remark IS '券描述或备注信息,用于展示券规则、说明文字。未参与计算和关联逻辑。 | 来源: coupon_remark'; -COMMENT ON COLUMN dwd_platform_coupon_redemption_Ex.groupon_type IS '团购券类型枚举。当前样本全部为 1。推断含义:1 表示标准团购券,其他值预留为次卡、套餐券、权益券等类型。 | 来源: groupon_type'; -COMMENT ON COLUMN dwd_platform_coupon_redemption_Ex.operator_id IS '执行验券操作的员工/收银员账号 ID。当前样本中多数为同一值。可与员工/账号维度表关联。 | 来源: operator_id | 角色: 外键'; -COMMENT ON COLUMN dwd_platform_coupon_redemption_Ex.operator_name IS '操作员姓名或显示名,例如“收银员:郑丽珊”。是 operator_id 的冗余展示字段,用于报表展示。 | 来源: operator_name'; --- dwd_recharge_order +COMMENT ON TABLE billiards_dwd.dwd_platform_coupon_redemption_ex IS 'DWD 明细事实表(扩展字段表):dwd_platform_coupon_redemption_ex。ODS 来源表:billiards_ods.platform_coupon_redemption_records(对应 JSON:platform_coupon_redemption_records.json;分析:platform_coupon_redemption_records-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption_ex.platform_coupon_redemption_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957929042218501(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】platform_coupon_redemption_records - id。 【JSON字段】platform_coupon_redemption_records.json - $ - id。'; +COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption_ex.coupon_cover IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】platform_coupon_redemption_records - coupon_cover。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_cover。'; +COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption_ex.coupon_remark IS '【说明】明细字段,用于记录事实取值。 【示例】617547ec-9697-4f58-a700-b30a49e88904||CgYIASAHKAESLgos9ZhHDryhHb0z3RpdBZ0dVoaQbkldBcx/XTXPV8Te+9SEqYOa7aDp8nbKOpsaAA==(明细字段,用于记录事实取值)。 【ODS来源】platform_coupon_redemption_records - coupon_remark。 【JSON字段】platform_coupon_redemption_records.json - $ - coupon_remark。'; +COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption_ex.groupon_type IS '【说明】明细字段,用于记录事实取值。 【示例】1(明细字段,用于记录事实取值)。 【ODS来源】platform_coupon_redemption_records - groupon_type。 【JSON字段】platform_coupon_redemption_records.json - $ - groupon_type。'; +COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption_ex.operator_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790687322443013(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】platform_coupon_redemption_records - operator_id。 【JSON字段】platform_coupon_redemption_records.json - $ - operator_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_platform_coupon_redemption_ex.operator_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】收银员:郑丽珊(名称字段,用于展示与辅助识别)。 【ODS来源】platform_coupon_redemption_records - operator_name。 【JSON字段】platform_coupon_redemption_records.json - $ - operator_name。'; + + CREATE TABLE IF NOT EXISTS dwd_recharge_order ( recharge_order_id BIGINT, tenant_id BIGINT, @@ -1665,27 +1790,29 @@ CREATE TABLE IF NOT EXISTS dwd_recharge_order ( pay_time TIMESTAMPTZ, PRIMARY KEY (recharge_order_id) ); -COMMENT ON COLUMN dwd_recharge_order.recharge_order_id IS '充值结算记录主键;唯一标识一条充值/撤销记录。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dwd_recharge_order.tenant_id IS '租户/品牌 ID;与其他 JSON 中 tenantId 含义一致。 | 来源: tenantId | 角色: 外键(dim_tenant)'; -COMMENT ON COLUMN dwd_recharge_order.site_id IS '门店 ID;与 siteProfile.id 一致,用于关联门店维度。 | 来源: siteId | 角色: 外键(dim_site)'; -COMMENT ON COLUMN dwd_recharge_order.member_id IS '会员 ID;对应会员档案中的 tenantMemberInfos.id。标识给哪个会员充值。 | 来源: memberId | 角色: 外键(dim_member)'; -COMMENT ON COLUMN dwd_recharge_order.member_name_snapshot IS '会员姓名/昵称快照,可能是名称或手机号字符串。 | 来源: memberName'; -COMMENT ON COLUMN dwd_recharge_order.member_phone_snapshot IS '会员手机号快照。 | 来源: memberPhone'; -COMMENT ON COLUMN dwd_recharge_order.tenant_member_card_id IS '会员卡实例 ID(某张具体卡);可关联 dim_member_card_account。 | 来源: tenantMemberCardId | 角色: 外键(dim_member_card_account)'; -COMMENT ON COLUMN dwd_recharge_order.member_card_type_name IS '会员卡类型名称;当前样例主要有:“储值卡”、“月卡”。 | 来源: memberCardTypeName'; -COMMENT ON COLUMN dwd_recharge_order.settle_relate_id IS '结算关联 ID;用于与支付记录等跨表关联(类似业务单 ID)。 | 来源: settleRelateId | 角色: 外键(与支付/结算域软关联)'; -COMMENT ON COLUMN dwd_recharge_order.settle_type IS '结算类型枚举:5=“充值订单”(正常充值);7=“充值撤销”(冲销记录)。 | 来源: settleType'; -COMMENT ON COLUMN dwd_recharge_order.settle_name IS '结算类型名称:"充值订单"、"充值撤销";前端展示用。 | 来源: settleName'; -COMMENT ON COLUMN dwd_recharge_order.is_first IS '是否首充标记。取值:1 或 2。理论含义类似“是否首充”,但 1/2 的精确定义需系统字典确认。 | 来源: isFirst'; -COMMENT ON COLUMN dwd_recharge_order.pay_amount IS '本条记录的充值金额(可为正/负):正数=实际充值金额;负数=撤销流水金额(settleType=7)。 | 来源: payAmount'; -COMMENT ON COLUMN dwd_recharge_order.refund_amount IS '对该充值订单的退款金额(通常为正数);原始充值单上为已退款金额,对应会有一条负数的“充值撤销”记录。 | 来源: refundAmount'; -COMMENT ON COLUMN dwd_recharge_order.point_amount IS '计入会员账户的储值/积分金额;多数情况下等于 pay_amount 的绝对值;撤销记录一般为 0。 | 来源: pointAmount'; -COMMENT ON COLUMN dwd_recharge_order.cash_amount IS '现金收款金额;样本中少数为 3000/5000,其余为 0。 | 来源: cashAmount'; -COMMENT ON COLUMN dwd_recharge_order.payment_method IS '支付方式编码。样本取值:1、2、4;具体对应渠道(现金/微信/支付宝/银行卡等)需系统“支付方式字典”确认。 | 来源: paymentMethod'; -COMMENT ON COLUMN dwd_recharge_order.create_time IS '充值记录创建时间(收银完成时间);用于时间分区、统计。 | 来源: createTime'; -COMMENT ON COLUMN dwd_recharge_order.pay_time IS '支付完成时间;通常与 create_time 接近或相同。 | 来源: payTime'; --- dwd_recharge_order_Ex +COMMENT ON TABLE billiards_dwd.dwd_recharge_order IS 'DWD 明细事实表:dwd_recharge_order。ODS 来源表:billiards_ods.recharge_settlements(对应 JSON:recharge_settlements.json;分析:recharge_settlements-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.recharge_order_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】recharge_settlements - id。 【JSON字段】recharge_settlements.json - $ - id。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】recharge_settlements - tenantid。 【JSON字段】recharge_settlements.json - $ - tenantid。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】recharge_settlements - siteid。 【JSON字段】recharge_settlements.json - $ - siteid。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】recharge_settlements - memberid。 【JSON字段】recharge_settlements.json - $ - memberid。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.member_name_snapshot IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】recharge_settlements - membername。 【JSON字段】recharge_settlements.json - $ - membername。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.member_phone_snapshot IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】recharge_settlements - memberphone。 【JSON字段】recharge_settlements.json - $ - memberphone。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.tenant_member_card_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】recharge_settlements - tenantmembercardid。 【JSON字段】recharge_settlements.json - $ - tenantmembercardid。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.member_card_type_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】recharge_settlements - membercardtypename。 【JSON字段】recharge_settlements.json - $ - membercardtypename。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.settle_relate_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】recharge_settlements - settlerelateid。 【JSON字段】recharge_settlements.json - $ - settlerelateid。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.settle_type IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】recharge_settlements - settletype。 【JSON字段】recharge_settlements.json - $ - settletype。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.settle_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】recharge_settlements - settlename。 【JSON字段】recharge_settlements.json - $ - settlename。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.is_first IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】NULL(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】recharge_settlements - isfirst。 【JSON字段】recharge_settlements.json - $ - isfirst。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.pay_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - payamount。 【JSON字段】recharge_settlements.json - $ - payamount。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.refund_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - refundamount。 【JSON字段】recharge_settlements.json - $ - refundamount。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.point_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - pointamount。 【JSON字段】recharge_settlements.json - $ - pointamount。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.cash_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - cashamount。 【JSON字段】recharge_settlements.json - $ - cashamount。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.payment_method IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】recharge_settlements - paymentmethod。 【JSON字段】recharge_settlements.json - $ - paymentmethod。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】NULL(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】recharge_settlements - createtime。 【JSON字段】recharge_settlements.json - $ - createtime。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order.pay_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】NULL(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】recharge_settlements - paytime。 【JSON字段】recharge_settlements.json - $ - paytime。'; + + CREATE TABLE IF NOT EXISTS dwd_recharge_order_Ex ( recharge_order_id BIGINT, site_name_snapshot TEXT, @@ -1732,51 +1859,53 @@ CREATE TABLE IF NOT EXISTS dwd_recharge_order_Ex ( revoke_time TIMESTAMPTZ, PRIMARY KEY (recharge_order_id) ); -COMMENT ON COLUMN dwd_recharge_order_Ex.recharge_order_id IS '充值结算记录主键;唯一标识一条充值/撤销记录。 | 来源: id | 角色: 主键'; -COMMENT ON COLUMN dwd_recharge_order_Ex.site_name_snapshot IS '门店名称快照,如“朗朗桌球”;仅用于展示,门店改名后本字段不变。 | 来源: siteName'; -COMMENT ON COLUMN dwd_recharge_order_Ex.settle_status IS '结算状态;当前数据全部为 2,推测 2=已完成。其它状态未出现在样本中。 | 来源: settleStatus'; -COMMENT ON COLUMN dwd_recharge_order_Ex.is_bind_member IS '是否绑定为会员/其他绑定标记;当前所有记录为 False,而又都有 memberId,实际业务含义不清。 | 来源: isBindMember'; -COMMENT ON COLUMN dwd_recharge_order_Ex.is_activity IS '是否关联营销活动;当前全部为 False,表示样本周期内充值未绑定活动。 | 来源: isActivity'; -COMMENT ON COLUMN dwd_recharge_order_Ex.is_use_coupon IS '本次充值是否使用优惠券;当前样本全部为 False。结构上预留“充值用券”的能力。 | 来源: isUseCoupon'; -COMMENT ON COLUMN dwd_recharge_order_Ex.is_use_discount IS '是否使用折扣(如充值折扣);样本中全为 False。 | 来源: isUseDiscount'; -COMMENT ON COLUMN dwd_recharge_order_Ex.can_be_revoked IS '当前记录是否仍可撤销;样本中全为 False(导出时均不可撤销)。 | 来源: canBeRevoked'; -COMMENT ON COLUMN dwd_recharge_order_Ex.online_amount IS '线上支付金额(如微信、支付宝等);当前样本为 0,但字段为支付渠道拆分预留。 | 来源: onlineAmount'; -COMMENT ON COLUMN dwd_recharge_order_Ex.balance_amount IS '从账户余额中支付的金额;充值场景通常为 0(用余额充值没有实际意义)。 | 来源: balanceAmount'; -COMMENT ON COLUMN dwd_recharge_order_Ex.card_amount IS '从其他储值卡或某种卡余额支付的金额;当前样本全为 0。 | 来源: cardAmount'; -COMMENT ON COLUMN dwd_recharge_order_Ex.coupon_amount IS '使用券直接支付的金额(如储值券);当前样本为 0。 | 来源: couponAmount'; -COMMENT ON COLUMN dwd_recharge_order_Ex.recharge_card_amount IS '充值到卡上的金额(与 point_amount 区分不同资金属性);样本为 0,结构预留。 | 来源: rechargeCardAmount'; -COMMENT ON COLUMN dwd_recharge_order_Ex.gift_card_amount IS '赠送卡金额(如买 1000 送 100 的赠送部分);当前样本为 0。 | 来源: giftCardAmount'; -COMMENT ON COLUMN dwd_recharge_order_Ex.prepay_money IS '预付款金额(订金);当前样本为 0,充值未启用此场景。 | 来源: prepayMoney'; -COMMENT ON COLUMN dwd_recharge_order_Ex.consume_money IS '消费总金额;在充值文件中全部为 0,实际用于消费场景(台费/商品)的结算模型复用字段。 | 来源: consumeMoney'; -COMMENT ON COLUMN dwd_recharge_order_Ex.goods_money IS '商品消费金额(充值记录中为 0)。 | 来源: goodsMoney'; -COMMENT ON COLUMN dwd_recharge_order_Ex.real_goods_money IS '实际应计商品金额(扣除折扣后);充值记录中为 0。 | 来源: realGoodsMoney'; -COMMENT ON COLUMN dwd_recharge_order_Ex.table_charge_money IS '台费金额;充值记录中为 0,来自通用结算模型。 | 来源: tableChargeMoney'; -COMMENT ON COLUMN dwd_recharge_order_Ex.service_money IS '服务项目金额(如助教、其他服务);充值中为 0。 | 来源: serviceMoney'; -COMMENT ON COLUMN dwd_recharge_order_Ex.activity_discount IS '营销活动折扣金额;当前样本为 0。 | 来源: activityDiscount'; -COMMENT ON COLUMN dwd_recharge_order_Ex.all_coupon_discount IS '各类优惠券、团购券综合折扣金额;样本为 0。 | 来源: allCouponDiscount'; -COMMENT ON COLUMN dwd_recharge_order_Ex.goods_promotion_money IS '商品促销优惠金额;样本为 0。 | 来源: goodsPromotionMoney'; -COMMENT ON COLUMN dwd_recharge_order_Ex.assistant_promotion_money IS '助教相关促销优惠金额;样本为 0。 | 来源: assistantPromotionMoney'; -COMMENT ON COLUMN dwd_recharge_order_Ex.assistant_pd_money IS '助教配单金额/相关费用;样本为 0。 | 来源: assistantPdMoney'; -COMMENT ON COLUMN dwd_recharge_order_Ex.assistant_cx_money IS '助教冲销/促销相关金额;样本为 0。 | 来源: assistantCxMoney'; -COMMENT ON COLUMN dwd_recharge_order_Ex.assistant_manual_discount IS '助教手工减免金额;样本为 0。 | 来源: assistantManualDiscount'; -COMMENT ON COLUMN dwd_recharge_order_Ex.coupon_sale_amount IS '券/套餐销售金额(售卖券时使用);充值场景中为 0。 | 来源: couponSaleAmount'; -COMMENT ON COLUMN dwd_recharge_order_Ex.member_discount_amount IS '因会员折扣产生的优惠金额;在充值样本中为 0。 | 来源: memberDiscountAmount'; -COMMENT ON COLUMN dwd_recharge_order_Ex.point_discount_price IS '积分抵扣产生的价差(价格部分);样本为 0。 | 来源: pointDiscountPrice'; -COMMENT ON COLUMN dwd_recharge_order_Ex.point_discount_cost IS '积分抵扣对应的成本金额;样本为 0。 | 来源: pointDiscountCost'; -COMMENT ON COLUMN dwd_recharge_order_Ex.adjust_amount IS '手工调整金额(非抹零);样本为 0。 | 来源: adjustAmount'; -COMMENT ON COLUMN dwd_recharge_order_Ex.rounding_amount IS '抹零金额(四舍五入产生的差额);样本为 0。 | 来源: roundingAmount'; -COMMENT ON COLUMN dwd_recharge_order_Ex.operator_id IS '操作该笔充值的收银员/员工 ID。 | 来源: operatorId | 角色: 外键(将来可关联 dim_staff)'; -COMMENT ON COLUMN dwd_recharge_order_Ex.operator_name_snapshot IS '操作员姓名快照,便于直接阅读;与 operator_id 对应。 | 来源: operatorName'; -COMMENT ON COLUMN dwd_recharge_order_Ex.salesman_user_id IS '营业员用户 ID;当前样本全部为 0。 | 来源: salesManUserId | 角色: 外键(潜在 dim_staff)'; -COMMENT ON COLUMN dwd_recharge_order_Ex.salesman_name IS '营业员/销售员姓名;样本为空字符串。 | 来源: salesManName'; -COMMENT ON COLUMN dwd_recharge_order_Ex.order_remark IS '充值订单备注,如手工说明;当前样本为空。 | 来源: orderRemark'; -COMMENT ON COLUMN dwd_recharge_order_Ex.table_id IS '台桌 ID;充值场景下全部是 0,表示该订单不挂具体球台。 | 来源: tableId'; -COMMENT ON COLUMN dwd_recharge_order_Ex.serial_number IS '流水/小票序号;当前样本全部为 0,本门店未启用。 | 来源: serialNumber'; -COMMENT ON COLUMN dwd_recharge_order_Ex.revoke_order_id IS '撤销相关订单 ID(被撤销原单或撤销单指针);样本中存在值但逻辑未完全启用。 | 来源: revokeOrderId'; -COMMENT ON COLUMN dwd_recharge_order_Ex.revoke_order_name IS '撤销单名称/说明;样本全为空。 | 来源: revokeOrderName'; -COMMENT ON COLUMN dwd_recharge_order_Ex.revoke_time IS '撤销时间;当前样本为空,撤销信息主要通过负数流水与 refund_amount 表达。 | 来源: revokeTime'; --- dwd_payment +COMMENT ON TABLE billiards_dwd.dwd_recharge_order_ex IS 'DWD 明细事实表(扩展字段表):dwd_recharge_order_ex。ODS 来源表:billiards_ods.recharge_settlements(对应 JSON:recharge_settlements.json;分析:recharge_settlements-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.recharge_order_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】recharge_settlements - id。 【JSON字段】recharge_settlements.json - $ - id。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.site_name_snapshot IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】recharge_settlements - sitename。 【JSON字段】recharge_settlements.json - $ - sitename。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.settle_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】NULL(状态枚举字段,用于标识业务状态)。 【ODS来源】recharge_settlements - settlestatus。 【JSON字段】recharge_settlements.json - $ - settlestatus。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.is_bind_member IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】NULL(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】recharge_settlements - isbindmember(派生:BOOLEAN(isbindmember))。 【JSON字段】recharge_settlements.json - $ - isbindmember(派生:BOOLEAN(isbindmember))。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.is_activity IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】NULL(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】recharge_settlements - isactivity(派生:BOOLEAN(isactivity))。 【JSON字段】recharge_settlements.json - $ - isactivity(派生:BOOLEAN(isactivity))。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.is_use_coupon IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】NULL(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】recharge_settlements - isusecoupon(派生:BOOLEAN(isusecoupon))。 【JSON字段】recharge_settlements.json - $ - isusecoupon(派生:BOOLEAN(isusecoupon))。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.is_use_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】recharge_settlements - isusediscount(派生:BOOLEAN(isusediscount))。 【JSON字段】recharge_settlements.json - $ - isusediscount(派生:BOOLEAN(isusediscount))。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.can_be_revoked IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】NULL(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】recharge_settlements - canberevoked(派生:BOOLEAN(canberevoked))。 【JSON字段】recharge_settlements.json - $ - canberevoked(派生:BOOLEAN(canberevoked))。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.online_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - onlineamount。 【JSON字段】recharge_settlements.json - $ - onlineamount。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.balance_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - balanceamount。 【JSON字段】recharge_settlements.json - $ - balanceamount。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.card_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - cardamount。 【JSON字段】recharge_settlements.json - $ - cardamount。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.coupon_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - couponamount。 【JSON字段】recharge_settlements.json - $ - couponamount。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.recharge_card_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - rechargecardamount。 【JSON字段】recharge_settlements.json - $ - rechargecardamount。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.gift_card_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - giftcardamount。 【JSON字段】recharge_settlements.json - $ - giftcardamount。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.prepay_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - prepaymoney。 【JSON字段】recharge_settlements.json - $ - prepaymoney。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.consume_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - consumemoney。 【JSON字段】recharge_settlements.json - $ - consumemoney。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.goods_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - goodsmoney。 【JSON字段】recharge_settlements.json - $ - goodsmoney。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.real_goods_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - realgoodsmoney。 【JSON字段】recharge_settlements.json - $ - realgoodsmoney。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.table_charge_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - tablechargemoney。 【JSON字段】recharge_settlements.json - $ - tablechargemoney。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.service_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - servicemoney。 【JSON字段】recharge_settlements.json - $ - servicemoney。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.activity_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】recharge_settlements - activitydiscount。 【JSON字段】recharge_settlements.json - $ - activitydiscount。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.all_coupon_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】recharge_settlements - allcoupondiscount。 【JSON字段】recharge_settlements.json - $ - allcoupondiscount。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.goods_promotion_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - goodspromotionmoney。 【JSON字段】recharge_settlements.json - $ - goodspromotionmoney。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.assistant_promotion_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - assistantpromotionmoney。 【JSON字段】recharge_settlements.json - $ - assistantpromotionmoney。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.assistant_pd_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - assistantpdmoney。 【JSON字段】recharge_settlements.json - $ - assistantpdmoney。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.assistant_cx_money IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - assistantcxmoney。 【JSON字段】recharge_settlements.json - $ - assistantcxmoney。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.assistant_manual_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】recharge_settlements - assistantmanualdiscount。 【JSON字段】recharge_settlements.json - $ - assistantmanualdiscount。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.coupon_sale_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - couponsaleamount。 【JSON字段】recharge_settlements.json - $ - couponsaleamount。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.member_discount_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - memberdiscountamount。 【JSON字段】recharge_settlements.json - $ - memberdiscountamount。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.point_discount_price IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - pointdiscountprice。 【JSON字段】recharge_settlements.json - $ - pointdiscountprice。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.point_discount_cost IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - pointdiscountcost。 【JSON字段】recharge_settlements.json - $ - pointdiscountcost。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.adjust_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - adjustamount。 【JSON字段】recharge_settlements.json - $ - adjustamount。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.rounding_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】NULL(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】recharge_settlements - roundingamount。 【JSON字段】recharge_settlements.json - $ - roundingamount。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.operator_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】recharge_settlements - operatorid。 【JSON字段】recharge_settlements.json - $ - operatorid。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.operator_name_snapshot IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】recharge_settlements - operatorname。 【JSON字段】recharge_settlements.json - $ - operatorname。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.salesman_user_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】recharge_settlements - salesmanuserid。 【JSON字段】recharge_settlements.json - $ - salesmanuserid。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.salesman_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】recharge_settlements - salesmanname。 【JSON字段】recharge_settlements.json - $ - salesmanname。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.order_remark IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】recharge_settlements - orderremark。 【JSON字段】recharge_settlements.json - $ - orderremark。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.table_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】recharge_settlements - tableid。 【JSON字段】recharge_settlements.json - $ - tableid。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.serial_number IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【ODS来源】recharge_settlements - serialnumber。 【JSON字段】recharge_settlements.json - $ - serialnumber。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.revoke_order_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】recharge_settlements - revokeorderid。 【JSON字段】recharge_settlements.json - $ - revokeorderid。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.revoke_order_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【ODS来源】recharge_settlements - revokeordername。 【JSON字段】recharge_settlements.json - $ - revokeordername。'; +COMMENT ON COLUMN billiards_dwd.dwd_recharge_order_ex.revoke_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】NULL(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】recharge_settlements - revoketime。 【JSON字段】recharge_settlements.json - $ - revoketime。'; + + CREATE TABLE IF NOT EXISTS dwd_payment ( payment_id BIGINT, site_id BIGINT, @@ -1791,19 +1920,21 @@ CREATE TABLE IF NOT EXISTS dwd_payment ( pay_date DATE, PRIMARY KEY (payment_id) ); -COMMENT ON COLUMN dwd_payment.payment_id IS '支付流水主键ID。与源系统 id 一致。每条支付流水唯一标识一条支付行为(包括金额为 0 的记录)。 | 来源: payment_transactions.id | 角色: 主键'; -COMMENT ON COLUMN dwd_payment.site_id IS '门店ID。当前样本中全部为同一门店 2790685415443269。在数仓中外键关联 dim_site.site_id。 | 来源: payment_transactions.site_id | 角色: 外键'; -COMMENT ON COLUMN dwd_payment.relate_type IS '业务关联类型枚举,用来区分这条支付流水对应哪一类业务单据:• 2:结账单支付,对应结账记录 settlement_records 中的结账单;• 5:会员卡充值/账户变动类支付,对应会员余额/充值业务单号,在会员余额变更或充值结算中复用;• 1:其他业务类型,目前样本中仅有 1 条记录,具体业务含义待业务侧补充。 | 来源: payment_transactions.relate_type | 角色: −'; -COMMENT ON COLUMN dwd_payment.relate_id IS '关联业务记录ID,配合 relate_type 使用,是一个“多态外键”:• 当 relate_type = 2 时:relate_id = settlement_records.settleList.id(结账记录主键,对应 dwd_settlement_head_di.order_settle_id);• 当 relate_type = 5 时:relate_id = 会员卡余额变动/充值业务单号,在会员余额变更流水中同名字段使用;• 当 relate_type = 1 时:关联具体业务尚未确认,仅可视为预留类型。 | 来源: payment_transactions.relate_id | 角色: 外键(多业务类型)'; -COMMENT ON COLUMN dwd_payment.pay_amount IS '本次支付金额,单位元。为收入类字段,当前样本全部为非负数:• 正数:实际通过该支付方式收取的金额;• 0:仍生成支付流水,但实收金额为 0(例如整单由会员优惠、团购券、余额等抵扣),当前样本中有 140 条记录金额为 0。 | 来源: payment_transactions.pay_amount | 角色: −'; -COMMENT ON COLUMN dwd_payment.pay_status IS '支付状态枚举。当前样本中仅出现:• 2:支付成功。其它可能的状态(未支付、支付中、失败、已退款等)在本次导出中未出现,需以后按系统支付状态配置补充。由于本 JSON 仅导出成功记录,可以视作“成功支付流水视图”。 | 来源: payment_transactions.pay_status | 角色: −'; -COMMENT ON COLUMN dwd_payment.payment_method IS '支付方式枚举。当前样本中出现的取值:• 2:共 140 条记录;• 4:共 60 条记录。具体取值与“支付方式配置表”对应,例如可能代表现金、扫码支付、银行卡等。由于配置表未导出,在数仓中应作为枚举码字段,通过后续 dim_payment_method 进行解码。不要在数仓层擅自写死“2=微信、4=支付宝”等含义。 | 来源: payment_transactions.payment_method | 角色: 外键(预期关联支付方式维度)'; -COMMENT ON COLUMN dwd_payment.online_pay_channel IS '线上支付通道枚举。用于进一步细分线上渠道,例如:• 0:无线上通道/线下,或未区分具体线上通道(当前样本全部为 0);• 1:微信(推测,未在样本中出现);• 2:支付宝(推测,未在样本中出现)。目前门店在当前时间段内尚未使用该字段进行实际区分,业务含义需结合正式配置确认。 | 来源: payment_transactions.online_pay_channel | 角色: −'; -COMMENT ON COLUMN dwd_payment.create_time IS '支付流水创建时间,格式 YYYY-MM-DD HH:MM:SS。通常是发起支付请求的时间。当前样本中 create_time 与 pay_time 多数相同,但模型上允许两者不同(例如异步支付)。 | 来源: payment_transactions.create_time | 角色: −'; -COMMENT ON COLUMN dwd_payment.pay_time IS '支付完成时间(支付成功时间戳),格式 YYYY-MM-DD HH:MM:SS。用于统计资金实际入账时间,以及与结账时间进行对齐分析。 | 来源: payment_transactions.pay_time | 角色: −'; -COMMENT ON COLUMN dwd_payment.pay_date IS '支付日期分区字段,从 pay_time 截取 YYYY-MM-DD 得到。例如 pay_time = ''2025-11-09 23:35:57'' 时,pay_date = ''2025-11-09''。用于 DWD 表按天分区和日粒度汇总。 | 来源: 由 payment_transactions.pay_time 派生 | 角色: −'; --- dwd_refund +COMMENT ON TABLE billiards_dwd.dwd_payment IS 'DWD 明细事实表:dwd_payment。ODS 来源表:billiards_ods.payment_transactions(对应 JSON:payment_transactions.json;分析:payment_transactions-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dwd_payment.payment_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957924026486597(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】payment_transactions - id。 【JSON字段】payment_transactions.json - $ - id。'; +COMMENT ON COLUMN billiards_dwd.dwd_payment.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】payment_transactions - site_id。 【JSON字段】payment_transactions.json - $ - site_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_payment.relate_type IS '【说明】明细字段,用于记录事实取值。 【示例】2(明细字段,用于记录事实取值)。 【ODS来源】payment_transactions - relate_type。 【JSON字段】payment_transactions.json - $ - relate_type。'; +COMMENT ON COLUMN billiards_dwd.dwd_payment.relate_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2957922914357125(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】payment_transactions - relate_id。 【JSON字段】payment_transactions.json - $ - relate_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_payment.pay_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】10.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】payment_transactions - pay_amount。 【JSON字段】payment_transactions.json - $ - pay_amount。'; +COMMENT ON COLUMN billiards_dwd.dwd_payment.pay_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】2(状态枚举字段,用于标识业务状态)。 【ODS来源】payment_transactions - pay_status。 【JSON字段】payment_transactions.json - $ - pay_status。'; +COMMENT ON COLUMN billiards_dwd.dwd_payment.payment_method IS '【说明】明细字段,用于记录事实取值。 【示例】4(明细字段,用于记录事实取值)。 【ODS来源】payment_transactions - payment_method。 【JSON字段】payment_transactions.json - $ - payment_method。'; +COMMENT ON COLUMN billiards_dwd.dwd_payment.online_pay_channel IS '【说明】明细字段,用于记录事实取值。 【示例】0(明细字段,用于记录事实取值)。 【ODS来源】payment_transactions - online_pay_channel。 【JSON字段】payment_transactions.json - $ - online_pay_channel。'; +COMMENT ON COLUMN billiards_dwd.dwd_payment.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:35:57(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】payment_transactions - create_time。 【JSON字段】payment_transactions.json - $ - create_time。'; +COMMENT ON COLUMN billiards_dwd.dwd_payment.pay_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:35:57(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】payment_transactions - pay_time。 【JSON字段】payment_transactions.json - $ - pay_time。'; +COMMENT ON COLUMN billiards_dwd.dwd_payment.pay_date IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-09 23:35:57(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】payment_transactions - pay_time(派生:DATE(pay_time))。 【JSON字段】payment_transactions.json - $ - pay_time(派生:DATE(pay_time))。'; + + CREATE TABLE IF NOT EXISTS dwd_refund ( refund_id BIGINT, tenant_id BIGINT, @@ -1819,18 +1950,20 @@ COMMENT ON COLUMN dwd_payment.pay_date IS '支付日期分区字段,从 pay_ti member_card_id BIGINT, PRIMARY KEY (refund_id) ); - COMMENT ON COLUMN dwd_refund.refund_id IS '退款流水主键。每条退款记录唯一 ID(雪花ID风格长整型) | 来源: id | 角色: 主键'; - COMMENT ON COLUMN dwd_refund.tenant_id IS '租户/品牌 ID,标识所属商户。与其他表中的 tenant_id 一致。 | 来源: tenant_id | 角色: 外键'; - COMMENT ON COLUMN dwd_refund.site_id IS '门店 ID。与门店维度 dim_site.site_id 对应,用于分门店分析。 | 来源: site_id | 角色: 外键'; - COMMENT ON COLUMN dwd_refund.relate_type IS '业务类型枚举,指示本退款对应哪类业务主单:当前样本值 {2, 5}:2=消费/结账类业务;5=充值/储值类业务(具体定义以业务字典为准)。与 relate_id 组合使用。 | 来源: relate_type'; - COMMENT ON COLUMN dwd_refund.relate_id IS '关联的业务主键 ID,含义依赖 relate_type:relate_type=2 时通常指结账主单 ID;relate_type=5 时通常指充值/储值业务单 ID。同一个 relate_id 可能有多笔退款(分批退款)。 | 来源: relate_id | 角色: 外键'; - COMMENT ON COLUMN dwd_refund.pay_amount IS '本次退款的资金金额,统一为负数。绝对值即退款金额,例如 -5000.00 表示退款 5000 元。 | 来源: pay_amount'; - COMMENT ON COLUMN dwd_refund.channel_fee IS '第三方支付渠道对本次退款收取的手续费。当前样本为 0.00,用于通道成本核算。 | 来源: channel_fee'; - COMMENT ON COLUMN dwd_refund.pay_time IS '退款在支付渠道/系统中发生的时间(退款完成时间),用于对账及按时间统计。 | 来源: pay_time'; - COMMENT ON COLUMN dwd_refund.create_time IS '本条退款流水在系统内创建时间,用于区分记录生成时间与渠道时间。 | 来源: create_time'; - COMMENT ON COLUMN dwd_refund.payment_method IS '支付方式枚举,指本次退款对应的原支付方式(如通道)。样本出现值 4,支付记录中有 {2,4},具体含义需参照支付方式配置表。 | 来源: payment_method'; - COMMENT ON COLUMN dwd_refund.member_id IS '关联的会员 ID,对应会员档案表主键。样本为 0,表示未绑定会员。 | 来源: member_id | 角色: 外键'; - COMMENT ON COLUMN dwd_refund.member_card_id IS '关联的会员卡账户 ID,对应会员卡账户/储值卡维度主键。样本为 0,当前没有“退到会员卡”的记录。 | 来源: member_card_id | 角色: 外键'; + +COMMENT ON TABLE billiards_dwd.dwd_refund IS 'DWD 明细事实表:dwd_refund。ODS 来源表:billiards_ods.refund_transactions(对应 JSON:refund_transactions.json;分析:refund_transactions-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund.refund_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2955202296416389(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】refund_transactions - id。 【JSON字段】refund_transactions.json - $ - id。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund.tenant_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790683160709957(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】refund_transactions - tenant_id。 【JSON字段】refund_transactions.json - $ - tenant_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund.site_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2790685415443269(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】refund_transactions - site_id。 【JSON字段】refund_transactions.json - $ - site_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund.relate_type IS '【说明】明细字段,用于记录事实取值。 【示例】5(明细字段,用于记录事实取值)。 【ODS来源】refund_transactions - relate_type。 【JSON字段】refund_transactions.json - $ - relate_type。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund.relate_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2955078219057349(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】refund_transactions - relate_id。 【JSON字段】refund_transactions.json - $ - relate_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund.pay_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】-5000.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】refund_transactions - pay_amount。 【JSON字段】refund_transactions.json - $ - pay_amount。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund.channel_fee IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】refund_transactions - channel_fee。 【JSON字段】refund_transactions.json - $ - channel_fee。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund.pay_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-08 01:27:16(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】refund_transactions - pay_time。 【JSON字段】refund_transactions.json - $ - pay_time。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund.create_time IS '【说明】时间/日期字段,用于记录业务时间与统计口径对齐。 【示例】2025-11-08 01:27:16(时间/日期字段,用于记录业务时间与统计口径对齐)。 【ODS来源】refund_transactions - create_time。 【JSON字段】refund_transactions.json - $ - create_time。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund.payment_method IS '【说明】明细字段,用于记录事实取值。 【示例】4(明细字段,用于记录事实取值)。 【ODS来源】refund_transactions - payment_method。 【JSON字段】refund_transactions.json - $ - payment_method。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund.member_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】refund_transactions - member_id。 【JSON字段】refund_transactions.json - $ - member_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund.member_card_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】refund_transactions - member_card_id。 【JSON字段】refund_transactions.json - $ - member_card_id。'; CREATE TABLE IF NOT EXISTS dwd_refund_Ex ( @@ -1856,23 +1989,27 @@ COMMENT ON COLUMN dwd_payment.pay_date IS '支付日期分区字段,从 pay_ti channel_pay_no VARCHAR(128), PRIMARY KEY (refund_id) ); - COMMENT ON COLUMN dwd_refund_Ex.refund_id IS '退款流水主键。每条退款记录唯一 ID(雪花ID风格长整型)。 | 来源: id | 角色: 主键'; - COMMENT ON COLUMN dwd_refund_Ex.tenant_name IS '租户名称,例如“朗朗桌球”。与租户维度中的名称冗余。 | 来源: tenantName'; - COMMENT ON COLUMN dwd_refund_Ex.pay_sn IS '支付流水内部序号。退款记录中样本全部为 0,未看到实际使用场景,含义未说明。 | 来源: pay_sn'; - COMMENT ON COLUMN dwd_refund_Ex.refund_amount IS '本次退款金额(正数)设计字段,样本为 0.00,实际使用 pay_amount。 | 来源: refund_amount'; - COMMENT ON COLUMN dwd_refund_Ex.round_amount IS '退款过程中的舍入/抹零金额。 | 来源: round_amount'; - COMMENT ON COLUMN dwd_refund_Ex.balance_frozen_amount IS '与会员余额相关的冻结金额,样本为 0。 | 来源: balance_frozen_amount'; - COMMENT ON COLUMN dwd_refund_Ex.card_frozen_amount IS '与某张会员卡余额相关的冻结金额,样本为 0。 | 来源: card_frozen_amount'; - COMMENT ON COLUMN dwd_refund_Ex.pay_status IS '退款状态枚举。样本中全部为 2(成功/已完成)。 | 来源: pay_status'; - COMMENT ON COLUMN dwd_refund_Ex.action_type IS '资金动作类型枚举。样本全部为 2(退款)。 | 来源: action_type'; - COMMENT ON COLUMN dwd_refund_Ex.is_revoke IS '是否为撤销型退款:0=正常退款;1=撤销原支付。 | 来源: is_revoke'; - COMMENT ON COLUMN dwd_refund_Ex.is_delete IS '逻辑删除标志:0=未删除;1=已逻辑删除。 | 来源: is_delete'; - COMMENT ON COLUMN dwd_refund_Ex.check_status IS '审核状态。样本全部为 1(已审核/通过)。 | 来源: check_status'; - COMMENT ON COLUMN dwd_refund_Ex.online_pay_channel IS '线上支付渠道枚举。样本中全部为 0(线下或默认)。 | 来源: online_pay_channel'; - COMMENT ON COLUMN dwd_refund_Ex.online_pay_type IS '在线退款类型。样本全部为 0(原路退回)。 | 来源: online_pay_type'; - COMMENT ON COLUMN dwd_refund_Ex.pay_terminal IS '退款终端类型。样本全部为 1(前台收银端)。 | 来源: pay_terminal'; - COMMENT ON COLUMN dwd_refund_Ex.pay_config_id IS '支付配置 ID,例如某个具体支付通道(微信商户号、银联通道等)的配置主键。样本全部为 0。 | 来源: pay_config_id | 角色: 外键'; - COMMENT ON COLUMN dwd_refund_Ex.cashier_point_id IS '收银点编号,例如前台1、前台2、自助机等。样本全部为 0。 | 来源: cashier_point_id'; - COMMENT ON COLUMN dwd_refund_Ex.operator_id IS '执行退款操作的操作员 ID。样本全部为 0。 | 来源: operator_id | 角色: 外键'; - COMMENT ON COLUMN dwd_refund_Ex.channel_payer_id IS '支付渠道侧的付款人标识,如 openid、银行卡号掩码等。样本全部为空字符串。 | 来源: channel_payer_id'; - COMMENT ON COLUMN dwd_refund_Ex.channel_pay_no IS '第三方支付平台交易号(如微信支付单号、支付宝交易号等)。当前样本全部为空。 | 来源: channel_pay_no'; + +COMMENT ON TABLE billiards_dwd.dwd_refund_ex IS 'DWD 明细事实表(扩展字段表):dwd_refund_ex。ODS 来源表:billiards_ods.refund_transactions(对应 JSON:refund_transactions.json;分析:refund_transactions-Analysis.md)。装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.refund_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】2955202296416389(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】refund_transactions - id。 【JSON字段】refund_transactions.json - $ - id。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.tenant_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】朗朗桌球(名称字段,用于展示与辅助识别)。 【ODS来源】refund_transactions - tenantName。 【JSON字段】refund_transactions.json - $ - tenantName。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.pay_sn IS '【说明】明细字段,用于记录事实取值。 【示例】0(明细字段,用于记录事实取值)。 【ODS来源】refund_transactions - pay_sn。 【JSON字段】refund_transactions.json - $ - pay_sn。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.refund_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】refund_transactions - refund_amount。 【JSON字段】refund_transactions.json - $ - refund_amount。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.round_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】refund_transactions - round_amount。 【JSON字段】refund_transactions.json - $ - round_amount。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.balance_frozen_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】refund_transactions - balance_frozen_amount。 【JSON字段】refund_transactions.json - $ - balance_frozen_amount。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.card_frozen_amount IS '【说明】金额字段,用于计费/结算/核算等金额计算。 【示例】0.0(金额字段,用于计费/结算/核算等金额计算)。 【ODS来源】refund_transactions - card_frozen_amount。 【JSON字段】refund_transactions.json - $ - card_frozen_amount。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.pay_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】2(状态枚举字段,用于标识业务状态)。 【ODS来源】refund_transactions - pay_status。 【JSON字段】refund_transactions.json - $ - pay_status。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.action_type IS '【说明】明细字段,用于记录事实取值。 【示例】2(明细字段,用于记录事实取值)。 【ODS来源】refund_transactions - action_type。 【JSON字段】refund_transactions.json - $ - action_type。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.is_revoke IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】refund_transactions - is_revoke。 【JSON字段】refund_transactions.json - $ - is_revoke。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.is_delete IS '【说明】布尔/开关字段,用于表示是否/可用性等业务开关。 【示例】0(布尔/开关字段,用于表示是否/可用性等业务开关)。 【ODS来源】refund_transactions - is_delete。 【JSON字段】refund_transactions.json - $ - is_delete。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.check_status IS '【说明】状态枚举字段,用于标识业务状态。 【示例】1(状态枚举字段,用于标识业务状态)。 【ODS来源】refund_transactions - check_status。 【JSON字段】refund_transactions.json - $ - check_status。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.online_pay_channel IS '【说明】明细字段,用于记录事实取值。 【示例】0(明细字段,用于记录事实取值)。 【ODS来源】refund_transactions - online_pay_channel。 【JSON字段】refund_transactions.json - $ - online_pay_channel。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.online_pay_type IS '【说明】明细字段,用于记录事实取值。 【示例】0(明细字段,用于记录事实取值)。 【ODS来源】refund_transactions - online_pay_type。 【JSON字段】refund_transactions.json - $ - online_pay_type。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.pay_terminal IS '【说明】明细字段,用于记录事实取值。 【示例】1(明细字段,用于记录事实取值)。 【ODS来源】refund_transactions - pay_terminal。 【JSON字段】refund_transactions.json - $ - pay_terminal。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.pay_config_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】refund_transactions - pay_config_id。 【JSON字段】refund_transactions.json - $ - pay_config_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.cashier_point_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】refund_transactions - cashier_point_id。 【JSON字段】refund_transactions.json - $ - cashier_point_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.operator_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】0(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】refund_transactions - operator_id。 【JSON字段】refund_transactions.json - $ - operator_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.channel_payer_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】NULL(标识类 ID 字段,用于关联/定位相关实体)。 【ODS来源】refund_transactions - channel_payer_id。 【JSON字段】refund_transactions.json - $ - channel_payer_id。'; +COMMENT ON COLUMN billiards_dwd.dwd_refund_ex.channel_pay_no IS '【说明】明细字段,用于记录事实取值。 【示例】NULL(明细字段,用于记录事实取值)。 【ODS来源】refund_transactions - channel_pay_no。 【JSON字段】refund_transactions.json - $ - channel_pay_no。'; + + diff --git a/etl_billiards/database/seed_ods_tasks.sql b/etl_billiards/database/seed_ods_tasks.sql index c40bcbf..756743a 100644 --- a/etl_billiards/database/seed_ods_tasks.sql +++ b/etl_billiards/database/seed_ods_tasks.sql @@ -1,10 +1,10 @@ --- 灏嗘柊鐨?ODS 浠诲姟娉ㄥ唽鍒?etl_admin.etl_task锛堟牴鎹渶瑕佹浛鎹?store_id锛? --- 浣跨敤鏂瑰紡锛堢ず渚嬶級锛? +-- 将新的 ODS 任务注册到 etl_admin.etl_task(按需替换 store_id)。 +-- 使用方式(示例): -- psql "$PG_DSN" -f etl_billiards/database/seed_ods_tasks.sql --- 鎴栬€呭湪 psql 涓墽琛屾湰鏂囦欢鍐呭銆? +-- 或在 psql 中直接执行本文件内容。 WITH target_store AS ( - SELECT 2790685415443269::bigint AS store_id -- TODO: 鏇挎崲涓哄疄闄?store_id + SELECT 2790685415443269::bigint AS store_id -- TODO: 替换为实际 store_id ), task_codes AS ( SELECT unnest(ARRAY[ @@ -37,5 +37,3 @@ SELECT t.task_code, s.store_id, TRUE FROM task_codes t CROSS JOIN target_store s ON CONFLICT (task_code, store_id) DO UPDATE SET enabled = EXCLUDED.enabled; - - diff --git a/tmp/etl_billiards_misc/tmp & Delete/schema_ODS_doc.sql.bak b/tmp/etl_billiards_misc/tmp & Delete/schema_ODS_doc.sql.bak new file mode 100644 index 0000000..20a45b2 --- /dev/null +++ b/tmp/etl_billiards_misc/tmp & Delete/schema_ODS_doc.sql.bak @@ -0,0 +1,1927 @@ +-- 文件:schema_ODS_doc.sql +-- 说明:ODS 层 DDL,表名与示例 JSON 前缀对应,用于本地回放/调试。 +-- 编码:UTF-8 +SET client_encoding TO "UTF8"; + +DROP SCHEMA IF EXISTS billiards_ods CASCADE; +CREATE SCHEMA IF NOT EXISTS billiards_ods; + +CREATE TABLE IF NOT EXISTS billiards_ods.member_profiles ( + tenant_id BIGINT, + register_site_id BIGINT, + site_name TEXT, + id BIGINT PRIMARY KEY, + system_member_id BIGINT, + member_card_grade_code BIGINT, + member_card_grade_name TEXT, + mobile TEXT, + nickname TEXT, + point NUMERIC(18,2), + growth_value NUMERIC(18,2), + referrer_member_id BIGINT, + status INT, + user_status INT, + create_time TIMESTAMP, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.member_profiles IS '表用途:ODS 原始明细,对应 JSON 文件 member_profiles.json,详见 member_profiles-Analysis.md;payload 保留原始记录便于追溯。'; +COMMENT ON COLUMN billiards_ods.member_profiles.tenant_id IS '说明:同名 JSON 字段,业务含义详见 member_profiles-Analysis.md;示例:2790683160709957(样例对照);JSON字段:tenant_id'; +COMMENT ON COLUMN billiards_ods.member_profiles.register_site_id IS '说明:同名 JSON 字段,业务含义详见 member_profiles-Analysis.md;示例:2790685415443269(样例对照);JSON字段:register_site_id'; +COMMENT ON COLUMN billiards_ods.member_profiles.site_name IS '说明:同名 JSON 字段,业务含义详见 member_profiles-Analysis.md;示例:朗朗桌球(样例对照);JSON字段:site_name'; +COMMENT ON COLUMN billiards_ods.member_profiles.id IS '说明:同名 JSON 字段,业务含义详见 member_profiles-Analysis.md;示例:2955204541320325(样例对照);JSON字段:id'; +COMMENT ON COLUMN billiards_ods.member_profiles.system_member_id IS '说明:同名 JSON 字段,业务含义详见 member_profiles-Analysis.md;示例:2955204540009605(样例对照);JSON字段:system_member_id'; +COMMENT ON COLUMN billiards_ods.member_profiles.member_card_grade_code IS '说明:同名 JSON 字段,业务含义详见 member_profiles-Analysis.md;示例:2790683528022853(样例对照);JSON字段:member_card_grade_code'; +COMMENT ON COLUMN billiards_ods.member_profiles.member_card_grade_name IS '说明:同名 JSON 字段,业务含义详见 member_profiles-Analysis.md;示例:储值卡(样例对照);JSON字段:member_card_grade_name'; +COMMENT ON COLUMN billiards_ods.member_profiles.mobile IS '说明:同名 JSON 字段,业务含义详见 member_profiles-Analysis.md;示例:18620043391(样例对照);JSON字段:mobile'; +COMMENT ON COLUMN billiards_ods.member_profiles.nickname IS '说明:同名 JSON 字段,业务含义详见 member_profiles-Analysis.md;示例:胡先生(样例对照);JSON字段:nickname'; +COMMENT ON COLUMN billiards_ods.member_profiles.point IS '说明:同名 JSON 字段,业务含义详见 member_profiles-Analysis.md;示例:0.0(样例对照);JSON字段:point'; +COMMENT ON COLUMN billiards_ods.member_profiles.growth_value IS '说明:同名 JSON 字段,业务含义详见 member_profiles-Analysis.md;示例:0.0(样例对照);JSON字段:growth_value'; +COMMENT ON COLUMN billiards_ods.member_profiles.referrer_member_id IS '说明:同名 JSON 字段,业务含义详见 member_profiles-Analysis.md;示例:0(样例对照);JSON字段:referrer_member_id'; +COMMENT ON COLUMN billiards_ods.member_profiles.status IS '说明:同名 JSON 字段,业务含义详见 member_profiles-Analysis.md;示例:1(样例对照);JSON字段:status'; +COMMENT ON COLUMN billiards_ods.member_profiles.user_status IS '说明:同名 JSON 字段,业务含义详见 member_profiles-Analysis.md;示例:1(样例对照);JSON字段:user_status'; +COMMENT ON COLUMN billiards_ods.member_profiles.create_time IS '说明:同名 JSON 字段,业务含义详见 member_profiles-Analysis.md;示例:2025-11-08 01:29:33(样例对照);JSON字段:create_time'; +COMMENT ON COLUMN billiards_ods.member_profiles.source_file IS '说明:ETL 元数据,记录原始导出文件名;示例:member_profiles.json(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.member_profiles.source_endpoint IS '说明:ETL 元数据,记录采集接口或下载 URL;示例:/api/xxx(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.member_profiles.fetched_at IS '说明:ETL 入库时间戳;示例:2025-11-10 00:00:00+08(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.member_profiles.payload IS '说明:完整原始 JSON 记录快照;示例:原文 JSON(样例对照);JSON字段:整条记录'; + +CREATE TABLE IF NOT EXISTS billiards_ods.member_balance_changes ( + tenant_id BIGINT, + site_id BIGINT, + register_site_id BIGINT, + registerSiteName TEXT, + paySiteName TEXT, + id BIGINT PRIMARY KEY, + tenant_member_id BIGINT, + tenant_member_card_id BIGINT, + system_member_id BIGINT, + memberName TEXT, + memberMobile TEXT, + card_type_id BIGINT, + memberCardTypeName TEXT, + account_data NUMERIC(18,2), + before NUMERIC(18,2), + after NUMERIC(18,2), + refund_amount NUMERIC(18,2), + from_type INT, + payment_method INT, + relate_id BIGINT, + remark TEXT, + operator_id BIGINT, + operator_name TEXT, + is_delete INT, + create_time TIMESTAMP, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.member_balance_changes IS '表用途:ODS 原始明细,对应 JSON 文件 member_balance_changes.json,详见 member_balance_changes-Analysis.md;payload 保留原始记录便于追溯。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.tenant_id IS '说明:同名 JSON 字段,业务含义详见 member_balance_changes-Analysis.md;示例:2790683160709957(样例对照);JSON字段:tenant_id'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.site_id IS '说明:同名 JSON 字段,业务含义详见 member_balance_changes-Analysis.md;示例:2790685415443269(样例对照);JSON字段:site_id'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.register_site_id IS '说明:同名 JSON 字段,业务含义详见 member_balance_changes-Analysis.md;示例:2790685415443269(样例对照);JSON字段:register_site_id'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.registerSiteName IS '说明:同名 JSON 字段,业务含义详见 member_balance_changes-Analysis.md;示例:朗朗桌球(样例对照);JSON字段:registerSiteName'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.paySiteName IS '说明:同名 JSON 字段,业务含义详见 member_balance_changes-Analysis.md;示例:朗朗桌球(样例对照);JSON字段:paySiteName'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.id IS '说明:同名 JSON 字段,业务含义详见 member_balance_changes-Analysis.md;示例:2957881605869253(样例对照);JSON字段:id'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.tenant_member_id IS '说明:同名 JSON 字段,业务含义详见 member_balance_changes-Analysis.md;示例:2799212845565701(样例对照);JSON字段:tenant_member_id'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.tenant_member_card_id IS '说明:同名 JSON 字段,业务含义详见 member_balance_changes-Analysis.md;示例:2799219999295237(样例对照);JSON字段:tenant_member_card_id'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.system_member_id IS '说明:同名 JSON 字段,业务含义详见 member_balance_changes-Analysis.md;示例:2799212844549893(样例对照);JSON字段:system_member_id'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.memberName IS '说明:同名 JSON 字段,业务含义详见 member_balance_changes-Analysis.md;示例:曾丹烨(样例对照);JSON字段:memberName'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.memberMobile IS '说明:同名 JSON 字段,业务含义详见 member_balance_changes-Analysis.md;示例:13922213242(样例对照);JSON字段:memberMobile'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.card_type_id IS '说明:同名 JSON 字段,业务含义详见 member_balance_changes-Analysis.md;示例:2793249295533893(样例对照);JSON字段:card_type_id'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.memberCardTypeName IS '说明:同名 JSON 字段,业务含义详见 member_balance_changes-Analysis.md;示例:储值卡(样例对照);JSON字段:memberCardTypeName'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.account_data IS '说明:同名 JSON 字段,业务含义详见 member_balance_changes-Analysis.md;示例:-120.0(样例对照);JSON字段:account_data'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.before IS '说明:同名 JSON 字段,业务含义详见 member_balance_changes-Analysis.md;示例:816.3(样例对照);JSON字段:before'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.after IS '说明:同名 JSON 字段,业务含义详见 member_balance_changes-Analysis.md;示例:696.3(样例对照);JSON字段:after'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.refund_amount IS '说明:同名 JSON 字段,业务含义详见 member_balance_changes-Analysis.md;示例:0.0(样例对照);JSON字段:refund_amount'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.from_type IS '说明:同名 JSON 字段,业务含义详见 member_balance_changes-Analysis.md;示例:1(样例对照);JSON字段:from_type'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.payment_method IS '说明:同名 JSON 字段,业务含义详见 member_balance_changes-Analysis.md;示例:0(样例对照);JSON字段:payment_method'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.relate_id IS '说明:同名 JSON 字段,业务含义详见 member_balance_changes-Analysis.md;示例:2957881518788421(样例对照);JSON字段:relate_id'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.remark IS '说明:同名 JSON 字段,业务含义详见 member_balance_changes-Analysis.md;示例:(样例对照);JSON字段:remark'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.operator_id IS '说明:同名 JSON 字段,业务含义详见 member_balance_changes-Analysis.md;示例:2790687322443013(样例对照);JSON字段:operator_id'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.operator_name IS '说明:同名 JSON 字段,业务含义详见 member_balance_changes-Analysis.md;示例:收银员:郑丽珊(样例对照);JSON字段:operator_name'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.is_delete IS '说明:同名 JSON 字段,业务含义详见 member_balance_changes-Analysis.md;示例:0(样例对照);JSON字段:is_delete'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.create_time IS '说明:同名 JSON 字段,业务含义详见 member_balance_changes-Analysis.md;示例:2025-11-09 22:52:48(样例对照);JSON字段:create_time'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.source_file IS '说明:ETL 元数据,记录原始导出文件名;示例:member_balance_changes.json(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.source_endpoint IS '说明:ETL 元数据,记录采集接口或下载 URL;示例:/api/xxx(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.fetched_at IS '说明:ETL 入库时间戳;示例:2025-11-10 00:00:00+08(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.payload IS '说明:完整原始 JSON 记录快照;示例:原文 JSON(样例对照);JSON字段:整条记录'; + +CREATE TABLE IF NOT EXISTS billiards_ods.member_stored_value_cards ( + tenant_id BIGINT, + tenant_member_id BIGINT, + system_member_id BIGINT, + register_site_id BIGINT, + site_name TEXT, + id BIGINT PRIMARY KEY, + member_card_grade_code BIGINT, + member_card_grade_code_name TEXT, + member_card_type_name TEXT, + member_name TEXT, + member_mobile TEXT, + card_type_id BIGINT, + card_no TEXT, + card_physics_type TEXT, + balance NUMERIC(18,2), + denomination NUMERIC(18,2), + table_discount NUMERIC(10,4), + goods_discount NUMERIC(10,4), + assistant_discount NUMERIC(10,4), + assistant_reward_discount NUMERIC(10,4), + table_service_discount NUMERIC(10,4), + assistant_service_discount NUMERIC(10,4), + coupon_discount NUMERIC(10,4), + goods_service_discount NUMERIC(10,4), + assistant_discount_sub_switch INT, + table_discount_sub_switch INT, + goods_discount_sub_switch INT, + assistant_reward_discount_sub_switch INT, + table_service_deduct_radio NUMERIC(10,4), + assistant_service_deduct_radio NUMERIC(10,4), + goods_service_deduct_radio NUMERIC(10,4), + assistant_deduct_radio NUMERIC(10,4), + table_deduct_radio NUMERIC(10,4), + goods_deduct_radio NUMERIC(10,4), + coupon_deduct_radio NUMERIC(10,4), + assistant_reward_deduct_radio NUMERIC(10,4), + tableCardDeduct NUMERIC(18,2), + tableServiceCardDeduct NUMERIC(18,2), + goodsCarDeduct NUMERIC(18,2), + goodsServiceCardDeduct NUMERIC(18,2), + assistantCardDeduct NUMERIC(18,2), + assistantServiceCardDeduct NUMERIC(18,2), + assistantRewardCardDeduct NUMERIC(18,2), + cardSettleDeduct NUMERIC(18,2), + couponCardDeduct NUMERIC(18,2), + deliveryFeeDeduct NUMERIC(18,2), + use_scene INT, + able_cross_site INT, + able_site_transfer INT, + is_allow_give INT, + is_allow_order_deduct INT, + is_delete INT, + bind_password TEXT, + goods_discount_range_type INT, + goodsCategoryId BIGINT, + tableAreaId BIGINT, + effect_site_id BIGINT, + start_time TIMESTAMP, + end_time TIMESTAMP, + disable_start_time TIMESTAMP, + disable_end_time TIMESTAMP, + last_consume_time TIMESTAMP, + create_time TIMESTAMP, + status INT, + sort INT, + tenantAvatar TEXT, + tenantName TEXT, + pdAssisnatLevel TEXT, + cxAssisnatLevel TEXT, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.member_stored_value_cards IS '表用途:ODS 原始明细,对应 JSON 文件 member_stored_value_cards.json,详见 member_stored_value_cards-Analysis.md;payload 保留原始记录便于追溯。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenant_id IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:2790683160709957(样例对照);JSON字段:tenant_id'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenant_member_id IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:2955204541320325(样例对照);JSON字段:tenant_member_id'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.system_member_id IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:2955204540009605(样例对照);JSON字段:system_member_id'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.register_site_id IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:2790685415443269(样例对照);JSON字段:register_site_id'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.site_name IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:朗朗桌球(样例对照);JSON字段:site_name'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.id IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:2955206162843781(样例对照);JSON字段:id'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_card_grade_code IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:2790683528022856(样例对照);JSON字段:member_card_grade_code'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_card_grade_code_name IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:活动抵用券(样例对照);JSON字段:member_card_grade_code_name'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_card_type_name IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:活动抵用券(样例对照);JSON字段:member_card_type_name'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_name IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:胡先生(样例对照);JSON字段:member_name'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_mobile IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:18620043391(样例对照);JSON字段:member_mobile'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.card_type_id IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:2793266846533445(样例对照);JSON字段:card_type_id'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.card_no IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:(样例对照);JSON字段:card_no'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.card_physics_type IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:1(样例对照);JSON字段:card_physics_type'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.balance IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:0.0(样例对照);JSON字段:balance'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.denomination IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:0.0(样例对照);JSON字段:denomination'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_discount IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:10.0(样例对照);JSON字段:table_discount'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_discount IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:10.0(样例对照);JSON字段:goods_discount'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_discount IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:10.0(样例对照);JSON字段:assistant_discount'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_reward_discount IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:10.0(样例对照);JSON字段:assistant_reward_discount'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_service_discount IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:10.0(样例对照);JSON字段:table_service_discount'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_service_discount IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:10.0(样例对照);JSON字段:assistant_service_discount'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.coupon_discount IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:10.0(样例对照);JSON字段:coupon_discount'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_service_discount IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:10.0(样例对照);JSON字段:goods_service_discount'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_discount_sub_switch IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:2(样例对照);JSON字段:assistant_discount_sub_switch'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_discount_sub_switch IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:2(样例对照);JSON字段:table_discount_sub_switch'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_discount_sub_switch IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:2(样例对照);JSON字段:goods_discount_sub_switch'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_reward_discount_sub_switch IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:2(样例对照);JSON字段:assistant_reward_discount_sub_switch'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_service_deduct_radio IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:100.0(样例对照);JSON字段:table_service_deduct_radio'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_service_deduct_radio IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:100.0(样例对照);JSON字段:assistant_service_deduct_radio'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_service_deduct_radio IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:100.0(样例对照);JSON字段:goods_service_deduct_radio'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_deduct_radio IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:100.0(样例对照);JSON字段:assistant_deduct_radio'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_deduct_radio IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:100.0(样例对照);JSON字段:table_deduct_radio'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_deduct_radio IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:100.0(样例对照);JSON字段:goods_deduct_radio'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.coupon_deduct_radio IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:100.0(样例对照);JSON字段:coupon_deduct_radio'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_reward_deduct_radio IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:100.0(样例对照);JSON字段:assistant_reward_deduct_radio'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tableCardDeduct IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:0.0(样例对照);JSON字段:tableCardDeduct'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tableServiceCardDeduct IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:0.0(样例对照);JSON字段:tableServiceCardDeduct'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goodsCarDeduct IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:0.0(样例对照);JSON字段:goodsCarDeduct'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goodsServiceCardDeduct IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:0.0(样例对照);JSON字段:goodsServiceCardDeduct'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistantCardDeduct IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:0.0(样例对照);JSON字段:assistantCardDeduct'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistantServiceCardDeduct IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:0.0(样例对照);JSON字段:assistantServiceCardDeduct'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistantRewardCardDeduct IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:0.0(样例对照);JSON字段:assistantRewardCardDeduct'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.cardSettleDeduct IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:0.0(样例对照);JSON字段:cardSettleDeduct'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.couponCardDeduct IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:0.0(样例对照);JSON字段:couponCardDeduct'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.deliveryFeeDeduct IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:0.0(样例对照);JSON字段:deliveryFeeDeduct'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.use_scene IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:(样例对照);JSON字段:use_scene'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.able_cross_site IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:1(样例对照);JSON字段:able_cross_site'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.able_site_transfer IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:无样例(样例对照);JSON字段:able_site_transfer'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.is_allow_give IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:0(样例对照);JSON字段:is_allow_give'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.is_allow_order_deduct IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:0(样例对照);JSON字段:is_allow_order_deduct'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.is_delete IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:0(样例对照);JSON字段:is_delete'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.bind_password IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:(样例对照);JSON字段:bind_password'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_discount_range_type IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:1(样例对照);JSON字段:goods_discount_range_type'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goodsCategoryId IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:[](样例对照);JSON字段:goodsCategoryId'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tableAreaId IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:[](样例对照);JSON字段:tableAreaId'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.effect_site_id IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:0(样例对照);JSON字段:effect_site_id'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.start_time IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:2025-11-08 01:31:12(样例对照);JSON字段:start_time'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.end_time IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:2225-01-01 00:00:00(样例对照);JSON字段:end_time'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.disable_start_time IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:0001-01-01 00:00:00(样例对照);JSON字段:disable_start_time'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.disable_end_time IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:0001-01-01 00:00:00(样例对照);JSON字段:disable_end_time'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.last_consume_time IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:2025-11-09 07:48:23(样例对照);JSON字段:last_consume_time'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.create_time IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:2025-11-08 01:31:12(样例对照);JSON字段:create_time'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.status IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:1(样例对照);JSON字段:status'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.sort IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:1(样例对照);JSON字段:sort'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenantAvatar IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:(样例对照);JSON字段:tenantAvatar'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenantName IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:(样例对照);JSON字段:tenantName'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.pdAssisnatLevel IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:[](样例对照);JSON字段:pdAssisnatLevel'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.cxAssisnatLevel IS '说明:同名 JSON 字段,业务含义详见 member_stored_value_cards-Analysis.md;示例:[](样例对照);JSON字段:cxAssisnatLevel'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.source_file IS '说明:ETL 元数据,记录原始导出文件名;示例:member_stored_value_cards.json(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.source_endpoint IS '说明:ETL 元数据,记录采集接口或下载 URL;示例:/api/xxx(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.fetched_at IS '说明:ETL 入库时间戳;示例:2025-11-10 00:00:00+08(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.payload IS '说明:完整原始 JSON 记录快照;示例:原文 JSON(样例对照);JSON字段:整条记录'; + +CREATE TABLE IF NOT EXISTS billiards_ods.recharge_settlements ( + id BIGINT PRIMARY KEY, + tenantid BIGINT, + siteid BIGINT, + sitename TEXT, + balanceamount NUMERIC(18,2), + cardamount NUMERIC(18,2), + cashamount NUMERIC(18,2), + couponamount NUMERIC(18,2), + createtime TIMESTAMPTZ, + memberid BIGINT, + membername TEXT, + tenantmembercardid BIGINT, + membercardtypename TEXT, + memberphone TEXT, + tableid BIGINT, + consumemoney NUMERIC(18,2), + onlineamount NUMERIC(18,2), + operatorid BIGINT, + operatorname TEXT, + revokeorderid BIGINT, + revokeordername TEXT, + revoketime TIMESTAMPTZ, + payamount NUMERIC(18,2), + pointamount NUMERIC(18,2), + refundamount NUMERIC(18,2), + settlename TEXT, + settlerelateid BIGINT, + settlestatus INT, + settletype INT, + paytime TIMESTAMPTZ, + roundingamount NUMERIC(18,2), + paymentmethod INT, + adjustamount NUMERIC(18,2), + assistantcxmoney NUMERIC(18,2), + assistantpdmoney NUMERIC(18,2), + couponsaleamount NUMERIC(18,2), + memberdiscountamount NUMERIC(18,2), + tablechargemoney NUMERIC(18,2), + goodsmoney NUMERIC(18,2), + realgoodsmoney NUMERIC(18,2), + servicemoney NUMERIC(18,2), + prepaymoney NUMERIC(18,2), + salesmanname TEXT, + orderremark TEXT, + salesmanuserid BIGINT, + canberevoked BOOLEAN, + pointdiscountprice NUMERIC(18,2), + pointdiscountcost NUMERIC(18,2), + activitydiscount NUMERIC(18,2), + serialnumber BIGINT, + assistantmanualdiscount NUMERIC(18,2), + allcoupondiscount NUMERIC(18,2), + goodspromotionmoney NUMERIC(18,2), + assistantpromotionmoney NUMERIC(18,2), + isusecoupon BOOLEAN, + isusediscount BOOLEAN, + isactivity BOOLEAN, + isbindmember BOOLEAN, + isfirst INT, + rechargecardamount NUMERIC(18,2), + giftcardamount NUMERIC(18,2), + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.recharge_settlements IS '表用途:ODS 原始明细,对应 JSON 文件 recharge_settlements.json,详见 recharge_settlements-Analysis.md;payload 保留原始记录便于追溯。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.id IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:id'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.tenantid IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:tenantid'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.siteid IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:siteid'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.sitename IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:sitename'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.balanceamount IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:balanceamount'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.cardamount IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:cardamount'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.cashamount IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:cashamount'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.couponamount IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:couponamount'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.createtime IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:createtime'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.memberid IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:memberid'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.membername IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:membername'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.tenantmembercardid IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:tenantmembercardid'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.membercardtypename IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:membercardtypename'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.memberphone IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:memberphone'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.tableid IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:tableid'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.consumemoney IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:consumemoney'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.onlineamount IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:onlineamount'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.operatorid IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:operatorid'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.operatorname IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:operatorname'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.revokeorderid IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:revokeorderid'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.revokeordername IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:revokeordername'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.revoketime IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:revoketime'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.payamount IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:payamount'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.pointamount IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:pointamount'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.refundamount IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:refundamount'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.settlename IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:settlename'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.settlerelateid IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:settlerelateid'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.settlestatus IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:settlestatus'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.settletype IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:settletype'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.paytime IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:paytime'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.roundingamount IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:roundingamount'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.paymentmethod IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:paymentmethod'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.adjustamount IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:adjustamount'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.assistantcxmoney IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:assistantcxmoney'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.assistantpdmoney IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:assistantpdmoney'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.couponsaleamount IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:couponsaleamount'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.memberdiscountamount IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:memberdiscountamount'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.tablechargemoney IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:tablechargemoney'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.goodsmoney IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:goodsmoney'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.realgoodsmoney IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:realgoodsmoney'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.servicemoney IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:servicemoney'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.prepaymoney IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:prepaymoney'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.salesmanname IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:salesmanname'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.orderremark IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:orderremark'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.salesmanuserid IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:salesmanuserid'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.canberevoked IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:canberevoked'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.pointdiscountprice IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:pointdiscountprice'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.pointdiscountcost IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:pointdiscountcost'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.activitydiscount IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:activitydiscount'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.serialnumber IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:serialnumber'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.assistantmanualdiscount IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:assistantmanualdiscount'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.allcoupondiscount IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:allcoupondiscount'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.goodspromotionmoney IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:goodspromotionmoney'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.assistantpromotionmoney IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:assistantpromotionmoney'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.isusecoupon IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:isusecoupon'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.isusediscount IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:isusediscount'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.isactivity IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:isactivity'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.isbindmember IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:isbindmember'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.isfirst IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:isfirst'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.rechargecardamount IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:rechargecardamount'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.giftcardamount IS '说明:同名 JSON 字段,业务含义详见 recharge_settlements-Analysis.md;示例:无样例(样例对照);JSON字段:giftcardamount'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.source_file IS '说明:ETL 元数据,记录原始导出文件名;示例:recharge_settlements.json(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.source_endpoint IS '说明:ETL 元数据,记录采集接口或下载 URL;示例:/api/xxx(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.fetched_at IS '说明:ETL 入库时间戳;示例:2025-11-10 00:00:00+08(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.payload IS '说明:完整原始 JSON 记录快照;示例:原文 JSON(样例对照);JSON字段:整条记录'; + +CREATE TABLE IF NOT EXISTS billiards_ods.settlement_records ( + id BIGINT PRIMARY KEY, + tenantid BIGINT, + siteid BIGINT, + sitename TEXT, + balanceamount NUMERIC(18,2), + cardamount NUMERIC(18,2), + cashamount NUMERIC(18,2), + couponamount NUMERIC(18,2), + createtime TIMESTAMPTZ, + memberid BIGINT, + membername TEXT, + tenantmembercardid BIGINT, + membercardtypename TEXT, + memberphone TEXT, + tableid BIGINT, + consumemoney NUMERIC(18,2), + onlineamount NUMERIC(18,2), + operatorid BIGINT, + operatorname TEXT, + revokeorderid BIGINT, + revokeordername TEXT, + revoketime TIMESTAMPTZ, + payamount NUMERIC(18,2), + pointamount NUMERIC(18,2), + refundamount NUMERIC(18,2), + settlename TEXT, + settlerelateid BIGINT, + settlestatus INT, + settletype INT, + paytime TIMESTAMPTZ, + roundingamount NUMERIC(18,2), + paymentmethod INT, + adjustamount NUMERIC(18,2), + assistantcxmoney NUMERIC(18,2), + assistantpdmoney NUMERIC(18,2), + couponsaleamount NUMERIC(18,2), + memberdiscountamount NUMERIC(18,2), + tablechargemoney NUMERIC(18,2), + goodsmoney NUMERIC(18,2), + realgoodsmoney NUMERIC(18,2), + servicemoney NUMERIC(18,2), + prepaymoney NUMERIC(18,2), + salesmanname TEXT, + orderremark TEXT, + salesmanuserid BIGINT, + canberevoked BOOLEAN, + pointdiscountprice NUMERIC(18,2), + pointdiscountcost NUMERIC(18,2), + activitydiscount NUMERIC(18,2), + serialnumber BIGINT, + assistantmanualdiscount NUMERIC(18,2), + allcoupondiscount NUMERIC(18,2), + goodspromotionmoney NUMERIC(18,2), + assistantpromotionmoney NUMERIC(18,2), + isusecoupon BOOLEAN, + isusediscount BOOLEAN, + isactivity BOOLEAN, + isbindmember BOOLEAN, + isfirst INT, + rechargecardamount NUMERIC(18,2), + giftcardamount NUMERIC(18,2), + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.settlement_records IS '表用途:ODS 原始明细,对应 JSON 文件 settlement_records.json,详见 settlement_records-Analysis.md;payload 保留原始记录便于追溯。'; +COMMENT ON COLUMN billiards_ods.settlement_records.id IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:id'; +COMMENT ON COLUMN billiards_ods.settlement_records.tenantid IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:tenantid'; +COMMENT ON COLUMN billiards_ods.settlement_records.siteid IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:siteid'; +COMMENT ON COLUMN billiards_ods.settlement_records.sitename IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:sitename'; +COMMENT ON COLUMN billiards_ods.settlement_records.balanceamount IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:balanceamount'; +COMMENT ON COLUMN billiards_ods.settlement_records.cardamount IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:cardamount'; +COMMENT ON COLUMN billiards_ods.settlement_records.cashamount IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:cashamount'; +COMMENT ON COLUMN billiards_ods.settlement_records.couponamount IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:couponamount'; +COMMENT ON COLUMN billiards_ods.settlement_records.createtime IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:createtime'; +COMMENT ON COLUMN billiards_ods.settlement_records.memberid IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:memberid'; +COMMENT ON COLUMN billiards_ods.settlement_records.membername IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:membername'; +COMMENT ON COLUMN billiards_ods.settlement_records.tenantmembercardid IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:tenantmembercardid'; +COMMENT ON COLUMN billiards_ods.settlement_records.membercardtypename IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:membercardtypename'; +COMMENT ON COLUMN billiards_ods.settlement_records.memberphone IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:memberphone'; +COMMENT ON COLUMN billiards_ods.settlement_records.tableid IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:tableid'; +COMMENT ON COLUMN billiards_ods.settlement_records.consumemoney IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:consumemoney'; +COMMENT ON COLUMN billiards_ods.settlement_records.onlineamount IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:onlineamount'; +COMMENT ON COLUMN billiards_ods.settlement_records.operatorid IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:operatorid'; +COMMENT ON COLUMN billiards_ods.settlement_records.operatorname IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:operatorname'; +COMMENT ON COLUMN billiards_ods.settlement_records.revokeorderid IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:revokeorderid'; +COMMENT ON COLUMN billiards_ods.settlement_records.revokeordername IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:revokeordername'; +COMMENT ON COLUMN billiards_ods.settlement_records.revoketime IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:revoketime'; +COMMENT ON COLUMN billiards_ods.settlement_records.payamount IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:payamount'; +COMMENT ON COLUMN billiards_ods.settlement_records.pointamount IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:pointamount'; +COMMENT ON COLUMN billiards_ods.settlement_records.refundamount IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:refundamount'; +COMMENT ON COLUMN billiards_ods.settlement_records.settlename IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:settlename'; +COMMENT ON COLUMN billiards_ods.settlement_records.settlerelateid IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:settlerelateid'; +COMMENT ON COLUMN billiards_ods.settlement_records.settlestatus IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:settlestatus'; +COMMENT ON COLUMN billiards_ods.settlement_records.settletype IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:settletype'; +COMMENT ON COLUMN billiards_ods.settlement_records.paytime IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:paytime'; +COMMENT ON COLUMN billiards_ods.settlement_records.roundingamount IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:roundingamount'; +COMMENT ON COLUMN billiards_ods.settlement_records.paymentmethod IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:paymentmethod'; +COMMENT ON COLUMN billiards_ods.settlement_records.adjustamount IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:adjustamount'; +COMMENT ON COLUMN billiards_ods.settlement_records.assistantcxmoney IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:assistantcxmoney'; +COMMENT ON COLUMN billiards_ods.settlement_records.assistantpdmoney IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:assistantpdmoney'; +COMMENT ON COLUMN billiards_ods.settlement_records.couponsaleamount IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:couponsaleamount'; +COMMENT ON COLUMN billiards_ods.settlement_records.memberdiscountamount IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:memberdiscountamount'; +COMMENT ON COLUMN billiards_ods.settlement_records.tablechargemoney IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:tablechargemoney'; +COMMENT ON COLUMN billiards_ods.settlement_records.goodsmoney IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:goodsmoney'; +COMMENT ON COLUMN billiards_ods.settlement_records.realgoodsmoney IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:realgoodsmoney'; +COMMENT ON COLUMN billiards_ods.settlement_records.servicemoney IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:servicemoney'; +COMMENT ON COLUMN billiards_ods.settlement_records.prepaymoney IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:prepaymoney'; +COMMENT ON COLUMN billiards_ods.settlement_records.salesmanname IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:salesmanname'; +COMMENT ON COLUMN billiards_ods.settlement_records.orderremark IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:orderremark'; +COMMENT ON COLUMN billiards_ods.settlement_records.salesmanuserid IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:salesmanuserid'; +COMMENT ON COLUMN billiards_ods.settlement_records.canberevoked IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:canberevoked'; +COMMENT ON COLUMN billiards_ods.settlement_records.pointdiscountprice IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:pointdiscountprice'; +COMMENT ON COLUMN billiards_ods.settlement_records.pointdiscountcost IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:pointdiscountcost'; +COMMENT ON COLUMN billiards_ods.settlement_records.activitydiscount IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:activitydiscount'; +COMMENT ON COLUMN billiards_ods.settlement_records.serialnumber IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:serialnumber'; +COMMENT ON COLUMN billiards_ods.settlement_records.assistantmanualdiscount IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:assistantmanualdiscount'; +COMMENT ON COLUMN billiards_ods.settlement_records.allcoupondiscount IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:allcoupondiscount'; +COMMENT ON COLUMN billiards_ods.settlement_records.goodspromotionmoney IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:goodspromotionmoney'; +COMMENT ON COLUMN billiards_ods.settlement_records.assistantpromotionmoney IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:assistantpromotionmoney'; +COMMENT ON COLUMN billiards_ods.settlement_records.isusecoupon IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:isusecoupon'; +COMMENT ON COLUMN billiards_ods.settlement_records.isusediscount IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:isusediscount'; +COMMENT ON COLUMN billiards_ods.settlement_records.isactivity IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:isactivity'; +COMMENT ON COLUMN billiards_ods.settlement_records.isbindmember IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:isbindmember'; +COMMENT ON COLUMN billiards_ods.settlement_records.isfirst IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:isfirst'; +COMMENT ON COLUMN billiards_ods.settlement_records.rechargecardamount IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:rechargecardamount'; +COMMENT ON COLUMN billiards_ods.settlement_records.giftcardamount IS '说明:同名 JSON 字段,业务含义详见 settlement_records-Analysis.md;示例:无样例(样例对照);JSON字段:giftcardamount'; +COMMENT ON COLUMN billiards_ods.settlement_records.source_file IS '说明:ETL 元数据,记录原始导出文件名;示例:settlement_records.json(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.settlement_records.source_endpoint IS '说明:ETL 元数据,记录采集接口或下载 URL;示例:/api/xxx(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.settlement_records.fetched_at IS '说明:ETL 入库时间戳;示例:2025-11-10 00:00:00+08(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.settlement_records.payload IS '说明:完整原始 JSON 记录快照;示例:原文 JSON(样例对照);JSON字段:整条记录'; + +CREATE TABLE IF NOT EXISTS billiards_ods.assistant_cancellation_records ( + id BIGINT PRIMARY KEY, + siteId BIGINT, + siteProfile JSONB, + assistantName TEXT, + assistantAbolishAmount NUMERIC(18,2), + assistantOn INT, + pdChargeMinutes INT, + tableAreaId BIGINT, + tableArea TEXT, + tableId BIGINT, + tableName TEXT, + trashReason TEXT, + createTime TIMESTAMP, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.assistant_cancellation_records IS '表用途:ODS 原始明细,对应 JSON 文件 assistant_cancellation_records.json,详见 assistant_cancellation_records-Analysis.md;payload 保留原始记录便于追溯。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.id IS '说明:同名 JSON 字段,业务含义详见 assistant_cancellation_records-Analysis.md;示例:2957675849518789(样例对照);JSON字段:id'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.siteId IS '说明:同名 JSON 字段,业务含义详见 assistant_cancellation_records-Analysis.md;示例:2790685415443269(样例对照);JSON字段:siteId'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.siteProfile IS '说明:同名 JSON 字段,业务含义详见 assistant_cancellation_records-Analysis.md;示例:{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "av…(样例对照);JSON字段:siteProfile'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.assistantName IS '说明:同名 JSON 字段,业务含义详见 assistant_cancellation_records-Analysis.md;示例:泡芙(样例对照);JSON字段:assistantName'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.assistantAbolishAmount IS '说明:同名 JSON 字段,业务含义详见 assistant_cancellation_records-Analysis.md;示例:5.83(样例对照);JSON字段:assistantAbolishAmount'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.assistantOn IS '说明:同名 JSON 字段,业务含义详见 assistant_cancellation_records-Analysis.md;示例:27(样例对照);JSON字段:assistantOn'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.pdChargeMinutes IS '说明:同名 JSON 字段,业务含义详见 assistant_cancellation_records-Analysis.md;示例:214(样例对照);JSON字段:pdChargeMinutes'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.tableAreaId IS '说明:同名 JSON 字段,业务含义详见 assistant_cancellation_records-Analysis.md;示例:2791963816579205(样例对照);JSON字段:tableAreaId'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.tableArea IS '说明:同名 JSON 字段,业务含义详见 assistant_cancellation_records-Analysis.md;示例:C区(样例对照);JSON字段:tableArea'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.tableId IS '说明:同名 JSON 字段,业务含义详见 assistant_cancellation_records-Analysis.md;示例:2793016660660357(样例对照);JSON字段:tableId'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.tableName IS '说明:同名 JSON 字段,业务含义详见 assistant_cancellation_records-Analysis.md;示例:C1(样例对照);JSON字段:tableName'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.trashReason IS '说明:同名 JSON 字段,业务含义详见 assistant_cancellation_records-Analysis.md;示例:(样例对照);JSON字段:trashReason'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.createTime IS '说明:同名 JSON 字段,业务含义详见 assistant_cancellation_records-Analysis.md;示例:2025-11-09 19:23:29(样例对照);JSON字段:createTime'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.source_file IS '说明:ETL 元数据,记录原始导出文件名;示例:assistant_cancellation_records.json(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.source_endpoint IS '说明:ETL 元数据,记录采集接口或下载 URL;示例:/api/xxx(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.fetched_at IS '说明:ETL 入库时间戳;示例:2025-11-10 00:00:00+08(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.payload IS '说明:完整原始 JSON 记录快照;示例:原文 JSON(样例对照);JSON字段:整条记录'; + +CREATE TABLE IF NOT EXISTS billiards_ods.assistant_accounts_master ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + site_id BIGINT, + assistant_no TEXT, + nickname TEXT, + real_name TEXT, + mobile TEXT, + team_id BIGINT, + team_name TEXT, + user_id BIGINT, + level TEXT, + assistant_status INT, + work_status INT, + leave_status INT, + entry_time TIMESTAMP, + resign_time TIMESTAMP, + start_time TIMESTAMP, + end_time TIMESTAMP, + create_time TIMESTAMP, + update_time TIMESTAMP, + order_trade_no TEXT, + staff_id BIGINT, + staff_profile_id BIGINT, + system_role_id BIGINT, + avatar TEXT, + birth_date TIMESTAMP, + gender INT, + height NUMERIC(18,2), + weight NUMERIC(18,2), + job_num TEXT, + show_status INT, + show_sort INT, + sum_grade NUMERIC(18,2), + assistant_grade NUMERIC(18,2), + get_grade_times INT, + introduce TEXT, + video_introduction_url TEXT, + group_id BIGINT, + group_name TEXT, + shop_name TEXT, + charge_way INT, + entry_type INT, + allow_cx INT, + is_guaranteed INT, + salary_grant_enabled INT, + light_status INT, + online_status INT, + is_delete INT, + cx_unit_price NUMERIC(18,2), + pd_unit_price NUMERIC(18,2), + last_table_id BIGINT, + last_table_name TEXT, + person_org_id BIGINT, + serial_number BIGINT, + is_team_leader INT, + criticism_status INT, + last_update_name TEXT, + ding_talk_synced INT, + site_light_cfg_id BIGINT, + light_equipment_id TEXT, + entry_sign_status INT, + resign_sign_status INT, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.assistant_accounts_master IS '表用途:ODS 原始明细,对应 JSON 文件 assistant_accounts_master.json,详见 assistant_accounts_master-Analysis.md;payload 保留原始记录便于追溯。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.id IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:2947562271297029(样例对照);JSON字段:id'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.tenant_id IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:2790683160709957(样例对照);JSON字段:tenant_id'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.site_id IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:2790685415443269(样例对照);JSON字段:site_id'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.assistant_no IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:31(样例对照);JSON字段:assistant_no'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.nickname IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:小然(样例对照);JSON字段:nickname'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.real_name IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:张静然(样例对照);JSON字段:real_name'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.mobile IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:15119679931(样例对照);JSON字段:mobile'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.team_id IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:2792011585884037(样例对照);JSON字段:team_id'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.team_name IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:1组(样例对照);JSON字段:team_name'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.user_id IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:2947562270838277(样例对照);JSON字段:user_id'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.level IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:20(样例对照);JSON字段:level'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.assistant_status IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:1(样例对照);JSON字段:assistant_status'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.work_status IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:2(样例对照);JSON字段:work_status'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.leave_status IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:1(样例对照);JSON字段:leave_status'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.entry_time IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:2025-11-02 08:00:00(样例对照);JSON字段:entry_time'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.resign_time IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:2025-11-03 08:00:00(样例对照);JSON字段:resign_time'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.start_time IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:2025-11-01 08:00:00(样例对照);JSON字段:start_time'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.end_time IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:2025-12-01 08:00:00(样例对照);JSON字段:end_time'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.create_time IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:2025-11-02 15:55:26(样例对照);JSON字段:create_time'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.update_time IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:2025-11-03 18:32:07(样例对照);JSON字段:update_time'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.order_trade_no IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:0(样例对照);JSON字段:order_trade_no'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.staff_id IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:0(样例对照);JSON字段:staff_id'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.staff_profile_id IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:0(样例对照);JSON字段:staff_profile_id'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.system_role_id IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:10(样例对照);JSON字段:system_role_id'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.avatar IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:https://oss.ficoo.vip/maUiImages/images/defaultAvatar.png(样例对照);JSON字段:avatar'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.birth_date IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:0001-01-01 00:00:00(样例对照);JSON字段:birth_date'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.gender IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:0(样例对照);JSON字段:gender'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.height IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:0.0(样例对照);JSON字段:height'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.weight IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:0.0(样例对照);JSON字段:weight'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.job_num IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:(样例对照);JSON字段:job_num'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.show_status IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:1(样例对照);JSON字段:show_status'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.show_sort IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:31(样例对照);JSON字段:show_sort'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.sum_grade IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:0.0(样例对照);JSON字段:sum_grade'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.assistant_grade IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:0.0(样例对照);JSON字段:assistant_grade'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.get_grade_times IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:0(样例对照);JSON字段:get_grade_times'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.introduce IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:(样例对照);JSON字段:introduce'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.video_introduction_url IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:(样例对照);JSON字段:video_introduction_url'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.group_id IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:0(样例对照);JSON字段:group_id'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.group_name IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:(样例对照);JSON字段:group_name'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.shop_name IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:朗朗桌球(样例对照);JSON字段:shop_name'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.charge_way IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:2(样例对照);JSON字段:charge_way'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.entry_type IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:1(样例对照);JSON字段:entry_type'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.allow_cx IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:1(样例对照);JSON字段:allow_cx'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.is_guaranteed IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:1(样例对照);JSON字段:is_guaranteed'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.salary_grant_enabled IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:2(样例对照);JSON字段:salary_grant_enabled'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.light_status IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:2(样例对照);JSON字段:light_status'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.online_status IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:1(样例对照);JSON字段:online_status'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.is_delete IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:0(样例对照);JSON字段:is_delete'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.cx_unit_price IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:0.0(样例对照);JSON字段:cx_unit_price'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.pd_unit_price IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:0.0(样例对照);JSON字段:pd_unit_price'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.last_table_id IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:0(样例对照);JSON字段:last_table_id'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.last_table_name IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:(样例对照);JSON字段:last_table_name'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.person_org_id IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:2947562271215109(样例对照);JSON字段:person_org_id'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.serial_number IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:0(样例对照);JSON字段:serial_number'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.is_team_leader IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:0(样例对照);JSON字段:is_team_leader'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.criticism_status IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:1(样例对照);JSON字段:criticism_status'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.last_update_name IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:无样例(样例对照);JSON字段:last_update_name'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.ding_talk_synced IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:1(样例对照);JSON字段:ding_talk_synced'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.site_light_cfg_id IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:0(样例对照);JSON字段:site_light_cfg_id'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.light_equipment_id IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:(样例对照);JSON字段:light_equipment_id'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.entry_sign_status IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:0(样例对照);JSON字段:entry_sign_status'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.resign_sign_status IS '说明:同名 JSON 字段,业务含义详见 assistant_accounts_master-Analysis.md;示例:0(样例对照);JSON字段:resign_sign_status'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.source_file IS '说明:ETL 元数据,记录原始导出文件名;示例:assistant_accounts_master.json(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.source_endpoint IS '说明:ETL 元数据,记录采集接口或下载 URL;示例:/api/xxx(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.fetched_at IS '说明:ETL 入库时间戳;示例:2025-11-10 00:00:00+08(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.payload IS '说明:完整原始 JSON 记录快照;示例:原文 JSON(样例对照);JSON字段:整条记录'; + +CREATE TABLE IF NOT EXISTS billiards_ods.assistant_service_records ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + site_id BIGINT, + siteProfile JSONB, + site_table_id BIGINT, + order_settle_id BIGINT, + order_trade_no TEXT, + order_pay_id BIGINT, + order_assistant_id BIGINT, + order_assistant_type INT, + assistantName TEXT, + assistantNo TEXT, + assistant_level TEXT, + levelname TEXT, + site_assistant_id BIGINT, + skill_id BIGINT, + skillname TEXT, + system_member_id BIGINT, + tablename TEXT, + tenant_member_id BIGINT, + user_id BIGINT, + assistant_team_id BIGINT, + nickname TEXT, + ledger_name TEXT, + ledger_group_name TEXT, + ledger_amount NUMERIC(18,2), + ledger_count NUMERIC(18,4), + ledger_unit_price NUMERIC(18,4), + ledger_status INT, + ledger_start_time TIMESTAMP, + ledger_end_time TIMESTAMP, + manual_discount_amount NUMERIC(18,2), + member_discount_amount NUMERIC(18,2), + coupon_deduct_money NUMERIC(18,2), + service_money NUMERIC(18,2), + projected_income NUMERIC(18,2), + real_use_seconds INT, + income_seconds INT, + start_use_time TIMESTAMP, + last_use_time TIMESTAMP, + create_time TIMESTAMP, + is_single_order INT, + is_delete INT, + is_trash INT, + trash_reason TEXT, + trash_applicant_id BIGINT, + trash_applicant_name TEXT, + operator_id BIGINT, + operator_name TEXT, + salesman_name TEXT, + salesman_org_id BIGINT, + salesman_user_id BIGINT, + person_org_id BIGINT, + add_clock INT, + returns_clock INT, + composite_grade NUMERIC(10,2), + composite_grade_time TIMESTAMP, + skill_grade NUMERIC(10,2), + service_grade NUMERIC(10,2), + sum_grade NUMERIC(10,2), + grade_status INT, + get_grade_times INT, + is_not_responding INT, + is_confirm INT, + payload JSONB NOT NULL, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now() +); + +COMMENT ON TABLE billiards_ods.assistant_service_records IS '表用途:ODS 原始明细,对应 JSON 文件 assistant_service_records.json,详见 assistant_service_records-Analysis.md;payload 保留原始记录便于追溯。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.id IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:2957913441292165(样例对照);JSON字段:id'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.tenant_id IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:2790683160709957(样例对照);JSON字段:tenant_id'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.site_id IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:2790685415443269(样例对照);JSON字段:site_id'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.siteProfile IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "av…(样例对照);JSON字段:siteProfile'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.site_table_id IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:2793020259897413(样例对照);JSON字段:site_table_id'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.order_settle_id IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:2957913171693253(样例对照);JSON字段:order_settle_id'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.order_trade_no IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:2957784612605829(样例对照);JSON字段:order_trade_no'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.order_pay_id IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:0(样例对照);JSON字段:order_pay_id'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.order_assistant_id IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:2957788717240005(样例对照);JSON字段:order_assistant_id'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.order_assistant_type IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:1(样例对照);JSON字段:order_assistant_type'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.assistantName IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:何海婷(样例对照);JSON字段:assistantName'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.assistantNo IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:27(样例对照);JSON字段:assistantNo'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.assistant_level IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:10(样例对照);JSON字段:assistant_level'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.levelname IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:初级(样例对照);JSON字段:levelname'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.site_assistant_id IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:2946266869435205(样例对照);JSON字段:site_assistant_id'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.skill_id IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:2790683529513797(样例对照);JSON字段:skill_id'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.skillname IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:基础课(样例对照);JSON字段:skillname'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.system_member_id IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:0(样例对照);JSON字段:system_member_id'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.tablename IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:S1(样例对照);JSON字段:tablename'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.tenant_member_id IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:0(样例对照);JSON字段:tenant_member_id'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.user_id IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:2946266868976453(样例对照);JSON字段:user_id'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.assistant_team_id IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:2792011585884037(样例对照);JSON字段:assistant_team_id'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.nickname IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:泡芙(样例对照);JSON字段:nickname'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_name IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:27-泡芙(样例对照);JSON字段:ledger_name'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_group_name IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:(样例对照);JSON字段:ledger_group_name'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_amount IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:206.67(样例对照);JSON字段:ledger_amount'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_count IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:7592(样例对照);JSON字段:ledger_count'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_unit_price IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:98.0(样例对照);JSON字段:ledger_unit_price'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_status IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:1(样例对照);JSON字段:ledger_status'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_start_time IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:2025-11-09 21:18:18(样例对照);JSON字段:ledger_start_time'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_end_time IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:2025-11-09 23:24:50(样例对照);JSON字段:ledger_end_time'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.manual_discount_amount IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:0.0(样例对照);JSON字段:manual_discount_amount'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.member_discount_amount IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:0.0(样例对照);JSON字段:member_discount_amount'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.coupon_deduct_money IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:0.0(样例对照);JSON字段:coupon_deduct_money'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.service_money IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:0.0(样例对照);JSON字段:service_money'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.projected_income IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:168.0(样例对照);JSON字段:projected_income'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.real_use_seconds IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:7592(样例对照);JSON字段:real_use_seconds'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.income_seconds IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:7560(样例对照);JSON字段:income_seconds'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.start_use_time IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:2025-11-09 21:18:18(样例对照);JSON字段:start_use_time'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.last_use_time IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:2025-11-09 23:24:50(样例对照);JSON字段:last_use_time'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.create_time IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:2025-11-09 23:25:11(样例对照);JSON字段:create_time'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.is_single_order IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:1(样例对照);JSON字段:is_single_order'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.is_delete IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:0(样例对照);JSON字段:is_delete'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.is_trash IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:0(样例对照);JSON字段:is_trash'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.trash_reason IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:(样例对照);JSON字段:trash_reason'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.trash_applicant_id IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:0(样例对照);JSON字段:trash_applicant_id'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.trash_applicant_name IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:(样例对照);JSON字段:trash_applicant_name'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.operator_id IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:2790687322443013(样例对照);JSON字段:operator_id'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.operator_name IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:收银员:郑丽珊(样例对照);JSON字段:operator_name'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.salesman_name IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:(样例对照);JSON字段:salesman_name'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.salesman_org_id IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:0(样例对照);JSON字段:salesman_org_id'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.salesman_user_id IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:0(样例对照);JSON字段:salesman_user_id'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.person_org_id IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:2946266869336901(样例对照);JSON字段:person_org_id'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.add_clock IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:0(样例对照);JSON字段:add_clock'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.returns_clock IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:0(样例对照);JSON字段:returns_clock'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.composite_grade IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:0.0(样例对照);JSON字段:composite_grade'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.composite_grade_time IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:0001-01-01 00:00:00(样例对照);JSON字段:composite_grade_time'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.skill_grade IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:0(样例对照);JSON字段:skill_grade'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.service_grade IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:0(样例对照);JSON字段:service_grade'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.sum_grade IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:0.0(样例对照);JSON字段:sum_grade'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.grade_status IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:1(样例对照);JSON字段:grade_status'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.get_grade_times IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:0(样例对照);JSON字段:get_grade_times'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.is_not_responding IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:0(样例对照);JSON字段:is_not_responding'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.is_confirm IS '说明:同名 JSON 字段,业务含义详见 assistant_service_records-Analysis.md;示例:2(样例对照);JSON字段:is_confirm'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.payload IS '说明:完整原始 JSON 记录快照;示例:原文 JSON(样例对照);JSON字段:整条记录'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.source_file IS '说明:ETL 元数据,记录原始导出文件名;示例:assistant_service_records.json(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.source_endpoint IS '说明:ETL 元数据,记录采集接口或下载 URL;示例:/api/xxx(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.fetched_at IS '说明:ETL 入库时间戳;示例:2025-11-10 00:00:00+08(样例对照);JSON字段:无(ETL元数据)'; + +CREATE TABLE IF NOT EXISTS billiards_ods.site_tables_master ( + id BIGINT PRIMARY KEY, + site_id BIGINT, + siteName TEXT, + "appletQrCodeUrl" TEXT, + areaName TEXT, + audit_status INT, + charge_free INT, + create_time TIMESTAMP, + delay_lights_time INT, + is_online_reservation INT, + is_rest_area INT, + light_status INT, + only_allow_groupon INT, + order_delay_time INT, + self_table INT, + show_status INT, + site_table_area_id BIGINT, + tableStatusName TEXT, + table_cloth_use_Cycle INT, + table_cloth_use_time TIMESTAMP, + table_name TEXT, + table_price NUMERIC(18,2), + table_status INT, + temporary_light_second INT, + virtual_table INT, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.site_tables_master IS '表用途:ODS 原始明细,对应 JSON 文件 site_tables_master.json,详见 site_tables_master-Analysis.md;payload 保留原始记录便于追溯。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.id IS '说明:同名 JSON 字段,业务含义详见 site_tables_master-Analysis.md;示例:2791964216463493(样例对照);JSON字段:id'; +COMMENT ON COLUMN billiards_ods.site_tables_master.site_id IS '说明:同名 JSON 字段,业务含义详见 site_tables_master-Analysis.md;示例:2790685415443269(样例对照);JSON字段:site_id'; +COMMENT ON COLUMN billiards_ods.site_tables_master.siteName IS '说明:同名 JSON 字段,业务含义详见 site_tables_master-Analysis.md;示例:朗朗桌球(样例对照);JSON字段:siteName'; +COMMENT ON COLUMN billiards_ods.site_tables_master."appletQrCodeUrl" IS '说明:同名 JSON 字段,业务含义详见 site_tables_master-Analysis.md;示例:https://pc-we.ficoo.vip/rootwww/prodwx38a48dd2bc3c1642?env=prod&type=1&id=279…(样例对照);JSON字段:appletQrCodeUrl'; +COMMENT ON COLUMN billiards_ods.site_tables_master.areaName IS '说明:同名 JSON 字段,业务含义详见 site_tables_master-Analysis.md;示例:A区(样例对照);JSON字段:areaName'; +COMMENT ON COLUMN billiards_ods.site_tables_master.audit_status IS '说明:同名 JSON 字段,业务含义详见 site_tables_master-Analysis.md;示例:2(样例对照);JSON字段:audit_status'; +COMMENT ON COLUMN billiards_ods.site_tables_master.charge_free IS '说明:同名 JSON 字段,业务含义详见 site_tables_master-Analysis.md;示例:0(样例对照);JSON字段:charge_free'; +COMMENT ON COLUMN billiards_ods.site_tables_master.create_time IS '说明:同名 JSON 字段,业务含义详见 site_tables_master-Analysis.md;示例:2025-07-15 17:52:54(样例对照);JSON字段:create_time'; +COMMENT ON COLUMN billiards_ods.site_tables_master.delay_lights_time IS '说明:同名 JSON 字段,业务含义详见 site_tables_master-Analysis.md;示例:0(样例对照);JSON字段:delay_lights_time'; +COMMENT ON COLUMN billiards_ods.site_tables_master.is_online_reservation IS '说明:同名 JSON 字段,业务含义详见 site_tables_master-Analysis.md;示例:2(样例对照);JSON字段:is_online_reservation'; +COMMENT ON COLUMN billiards_ods.site_tables_master.is_rest_area IS '说明:同名 JSON 字段,业务含义详见 site_tables_master-Analysis.md;示例:0(样例对照);JSON字段:is_rest_area'; +COMMENT ON COLUMN billiards_ods.site_tables_master.light_status IS '说明:同名 JSON 字段,业务含义详见 site_tables_master-Analysis.md;示例:2(样例对照);JSON字段:light_status'; +COMMENT ON COLUMN billiards_ods.site_tables_master.only_allow_groupon IS '说明:同名 JSON 字段,业务含义详见 site_tables_master-Analysis.md;示例:2(样例对照);JSON字段:only_allow_groupon'; +COMMENT ON COLUMN billiards_ods.site_tables_master.order_delay_time IS '说明:同名 JSON 字段,业务含义详见 site_tables_master-Analysis.md;示例:0(样例对照);JSON字段:order_delay_time'; +COMMENT ON COLUMN billiards_ods.site_tables_master.self_table IS '说明:同名 JSON 字段,业务含义详见 site_tables_master-Analysis.md;示例:1(样例对照);JSON字段:self_table'; +COMMENT ON COLUMN billiards_ods.site_tables_master.show_status IS '说明:同名 JSON 字段,业务含义详见 site_tables_master-Analysis.md;示例:1(样例对照);JSON字段:show_status'; +COMMENT ON COLUMN billiards_ods.site_tables_master.site_table_area_id IS '说明:同名 JSON 字段,业务含义详见 site_tables_master-Analysis.md;示例:2791963794329671(样例对照);JSON字段:site_table_area_id'; +COMMENT ON COLUMN billiards_ods.site_tables_master.tableStatusName IS '说明:同名 JSON 字段,业务含义详见 site_tables_master-Analysis.md;示例:空闲中(样例对照);JSON字段:tableStatusName'; +COMMENT ON COLUMN billiards_ods.site_tables_master.table_cloth_use_Cycle IS '说明:同名 JSON 字段,业务含义详见 site_tables_master-Analysis.md;示例:0(样例对照);JSON字段:table_cloth_use_Cycle'; +COMMENT ON COLUMN billiards_ods.site_tables_master.table_cloth_use_time IS '说明:同名 JSON 字段,业务含义详见 site_tables_master-Analysis.md;示例:1863727(样例对照);JSON字段:table_cloth_use_time'; +COMMENT ON COLUMN billiards_ods.site_tables_master.table_name IS '说明:同名 JSON 字段,业务含义详见 site_tables_master-Analysis.md;示例:A1(样例对照);JSON字段:table_name'; +COMMENT ON COLUMN billiards_ods.site_tables_master.table_price IS '说明:同名 JSON 字段,业务含义详见 site_tables_master-Analysis.md;示例:0.0(样例对照);JSON字段:table_price'; +COMMENT ON COLUMN billiards_ods.site_tables_master.table_status IS '说明:同名 JSON 字段,业务含义详见 site_tables_master-Analysis.md;示例:1(样例对照);JSON字段:table_status'; +COMMENT ON COLUMN billiards_ods.site_tables_master.temporary_light_second IS '说明:同名 JSON 字段,业务含义详见 site_tables_master-Analysis.md;示例:0(样例对照);JSON字段:temporary_light_second'; +COMMENT ON COLUMN billiards_ods.site_tables_master.virtual_table IS '说明:同名 JSON 字段,业务含义详见 site_tables_master-Analysis.md;示例:0(样例对照);JSON字段:virtual_table'; +COMMENT ON COLUMN billiards_ods.site_tables_master.source_file IS '说明:ETL 元数据,记录原始导出文件名;示例:site_tables_master.json(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.site_tables_master.source_endpoint IS '说明:ETL 元数据,记录采集接口或下载 URL;示例:/api/xxx(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.site_tables_master.fetched_at IS '说明:ETL 入库时间戳;示例:2025-11-10 00:00:00+08(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.site_tables_master.payload IS '说明:完整原始 JSON 记录快照;示例:原文 JSON(样例对照);JSON字段:整条记录'; + +CREATE TABLE IF NOT EXISTS billiards_ods.table_fee_discount_records ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + site_id BIGINT, + siteProfile JSONB, + site_table_id BIGINT, + tableProfile JSONB, + tenant_table_area_id BIGINT, + adjust_type INT, + ledger_amount NUMERIC(18,2), + ledger_count NUMERIC(18,4), + ledger_name TEXT, + ledger_status INT, + applicant_id BIGINT, + applicant_name TEXT, + operator_id BIGINT, + operator_name TEXT, + order_settle_id BIGINT, + order_trade_no TEXT, + is_delete INT, + create_time TIMESTAMP, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.table_fee_discount_records IS '表用途:ODS 原始明细,对应 JSON 文件 table_fee_discount_records.json,详见 table_fee_discount_records-Analysis.md;payload 保留原始记录便于追溯。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.id IS '说明:同名 JSON 字段,业务含义详见 table_fee_discount_records-Analysis.md;示例:2957913441881989(样例对照);JSON字段:id'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.tenant_id IS '说明:同名 JSON 字段,业务含义详见 table_fee_discount_records-Analysis.md;示例:2790683160709957(样例对照);JSON字段:tenant_id'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.site_id IS '说明:同名 JSON 字段,业务含义详见 table_fee_discount_records-Analysis.md;示例:2790685415443269(样例对照);JSON字段:site_id'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.siteProfile IS '说明:同名 JSON 字段,业务含义详见 table_fee_discount_records-Analysis.md;示例:{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "av…(样例对照);JSON字段:siteProfile'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.site_table_id IS '说明:同名 JSON 字段,业务含义详见 table_fee_discount_records-Analysis.md;示例:2793020259897413(样例对照);JSON字段:site_table_id'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.tableProfile IS '说明:同名 JSON 字段,业务含义详见 table_fee_discount_records-Analysis.md;示例:{"id": 2793020259897413, "tenant_id": 2790683160709957, "tenant_name": "", "s…(样例对照);JSON字段:tableProfile'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.tenant_table_area_id IS '说明:同名 JSON 字段,业务含义详见 table_fee_discount_records-Analysis.md;示例:2791961347968901(样例对照);JSON字段:tenant_table_area_id'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.adjust_type IS '说明:同名 JSON 字段,业务含义详见 table_fee_discount_records-Analysis.md;示例:1(样例对照);JSON字段:adjust_type'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.ledger_amount IS '说明:同名 JSON 字段,业务含义详见 table_fee_discount_records-Analysis.md;示例:148.15(样例对照);JSON字段:ledger_amount'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.ledger_count IS '说明:同名 JSON 字段,业务含义详见 table_fee_discount_records-Analysis.md;示例:1(样例对照);JSON字段:ledger_count'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.ledger_name IS '说明:同名 JSON 字段,业务含义详见 table_fee_discount_records-Analysis.md;示例:(样例对照);JSON字段:ledger_name'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.ledger_status IS '说明:同名 JSON 字段,业务含义详见 table_fee_discount_records-Analysis.md;示例:1(样例对照);JSON字段:ledger_status'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.applicant_id IS '说明:同名 JSON 字段,业务含义详见 table_fee_discount_records-Analysis.md;示例:2790687322443013(样例对照);JSON字段:applicant_id'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.applicant_name IS '说明:同名 JSON 字段,业务含义详见 table_fee_discount_records-Analysis.md;示例:收银员:郑丽珊(样例对照);JSON字段:applicant_name'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.operator_id IS '说明:同名 JSON 字段,业务含义详见 table_fee_discount_records-Analysis.md;示例:2790687322443013(样例对照);JSON字段:operator_id'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.operator_name IS '说明:同名 JSON 字段,业务含义详见 table_fee_discount_records-Analysis.md;示例:收银员:郑丽珊(样例对照);JSON字段:operator_name'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.order_settle_id IS '说明:同名 JSON 字段,业务含义详见 table_fee_discount_records-Analysis.md;示例:2957913171693253(样例对照);JSON字段:order_settle_id'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.order_trade_no IS '说明:同名 JSON 字段,业务含义详见 table_fee_discount_records-Analysis.md;示例:2957784612605829(样例对照);JSON字段:order_trade_no'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.is_delete IS '说明:同名 JSON 字段,业务含义详见 table_fee_discount_records-Analysis.md;示例:0(样例对照);JSON字段:is_delete'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.create_time IS '说明:同名 JSON 字段,业务含义详见 table_fee_discount_records-Analysis.md;示例:2025-11-09 23:25:11(样例对照);JSON字段:create_time'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.source_file IS '说明:ETL 元数据,记录原始导出文件名;示例:table_fee_discount_records.json(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.source_endpoint IS '说明:ETL 元数据,记录采集接口或下载 URL;示例:/api/xxx(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.fetched_at IS '说明:ETL 入库时间戳;示例:2025-11-10 00:00:00+08(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.payload IS '说明:完整原始 JSON 记录快照;示例:原文 JSON(样例对照);JSON字段:整条记录'; + +CREATE TABLE IF NOT EXISTS billiards_ods.table_fee_transactions ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + site_id BIGINT, + siteProfile JSONB, + site_table_id BIGINT, + site_table_area_id BIGINT, + site_table_area_name TEXT, + tenant_table_area_id BIGINT, + order_trade_no TEXT, + order_pay_id BIGINT, + order_settle_id BIGINT, + ledger_name TEXT, + ledger_amount NUMERIC(18,2), + ledger_count NUMERIC(18,4), + ledger_unit_price NUMERIC(18,4), + ledger_status INT, + ledger_start_time TIMESTAMP, + ledger_end_time TIMESTAMP, + start_use_time TIMESTAMP, + last_use_time TIMESTAMP, + real_table_use_seconds INT, + real_table_charge_money NUMERIC(18,2), + add_clock_seconds INT, + adjust_amount NUMERIC(18,2), + coupon_promotion_amount NUMERIC(18,2), + member_discount_amount NUMERIC(18,2), + used_card_amount NUMERIC(18,2), + mgmt_fee NUMERIC(18,2), + service_money NUMERIC(18,2), + fee_total NUMERIC(18,2), + is_single_order INT, + is_delete INT, + member_id BIGINT, + operator_id BIGINT, + operator_name TEXT, + salesman_name TEXT, + salesman_org_id BIGINT, + salesman_user_id BIGINT, + create_time TIMESTAMP, + payload JSONB NOT NULL, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now() +); + +COMMENT ON TABLE billiards_ods.table_fee_transactions IS '表用途:ODS 原始明细,对应 JSON 文件 table_fee_transactions.json,详见 table_fee_transactions-Analysis.md;payload 保留原始记录便于追溯。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.id IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:2957924029058885(样例对照);JSON字段:id'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.tenant_id IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:2790683160709957(样例对照);JSON字段:tenant_id'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.site_id IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:2790685415443269(样例对照);JSON字段:site_id'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.siteProfile IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "av…(样例对照);JSON字段:siteProfile'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.site_table_id IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:2793003705192517(样例对照);JSON字段:site_table_id'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.site_table_area_id IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:2791963794329671(样例对照);JSON字段:site_table_area_id'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.site_table_area_name IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:A区(样例对照);JSON字段:site_table_area_name'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.tenant_table_area_id IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:2791960001957765(样例对照);JSON字段:tenant_table_area_id'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.order_trade_no IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:2957858167230149(样例对照);JSON字段:order_trade_no'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.order_pay_id IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:0(样例对照);JSON字段:order_pay_id'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.order_settle_id IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:2957922914357125(样例对照);JSON字段:order_settle_id'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_name IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:A17(样例对照);JSON字段:ledger_name'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_amount IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:48.0(样例对照);JSON字段:ledger_amount'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_count IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:3600(样例对照);JSON字段:ledger_count'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_unit_price IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:48.0(样例对照);JSON字段:ledger_unit_price'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_status IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:1(样例对照);JSON字段:ledger_status'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_start_time IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:2025-11-09 22:28:57(样例对照);JSON字段:ledger_start_time'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_end_time IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:2025-11-09 23:28:57(样例对照);JSON字段:ledger_end_time'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.start_use_time IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:2025-11-09 22:28:57(样例对照);JSON字段:start_use_time'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.last_use_time IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:2025-11-09 23:28:57(样例对照);JSON字段:last_use_time'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.real_table_use_seconds IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:3600(样例对照);JSON字段:real_table_use_seconds'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.real_table_charge_money IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:0.0(样例对照);JSON字段:real_table_charge_money'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.add_clock_seconds IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:0(样例对照);JSON字段:add_clock_seconds'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.adjust_amount IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:0.0(样例对照);JSON字段:adjust_amount'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.coupon_promotion_amount IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:48.0(样例对照);JSON字段:coupon_promotion_amount'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.member_discount_amount IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:0.0(样例对照);JSON字段:member_discount_amount'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.used_card_amount IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:0.0(样例对照);JSON字段:used_card_amount'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.mgmt_fee IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:0.0(样例对照);JSON字段:mgmt_fee'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.service_money IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:0.0(样例对照);JSON字段:service_money'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.fee_total IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:0.0(样例对照);JSON字段:fee_total'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.is_single_order IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:1(样例对照);JSON字段:is_single_order'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.is_delete IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:0(样例对照);JSON字段:is_delete'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.member_id IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:0(样例对照);JSON字段:member_id'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.operator_id IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:2790687322443013(样例对照);JSON字段:operator_id'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.operator_name IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:收银员:郑丽珊(样例对照);JSON字段:operator_name'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.salesman_name IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:(样例对照);JSON字段:salesman_name'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.salesman_org_id IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:0(样例对照);JSON字段:salesman_org_id'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.salesman_user_id IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:0(样例对照);JSON字段:salesman_user_id'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.create_time IS '说明:同名 JSON 字段,业务含义详见 table_fee_transactions-Analysis.md;示例:2025-11-09 23:35:57(样例对照);JSON字段:create_time'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.payload IS '说明:完整原始 JSON 记录快照;示例:原文 JSON(样例对照);JSON字段:整条记录'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.source_file IS '说明:ETL 元数据,记录原始导出文件名;示例:table_fee_transactions.json(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.source_endpoint IS '说明:ETL 元数据,记录采集接口或下载 URL;示例:/api/xxx(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.fetched_at IS '说明:ETL 入库时间戳;示例:2025-11-10 00:00:00+08(样例对照);JSON字段:无(ETL元数据)'; + +CREATE TABLE IF NOT EXISTS billiards_ods.goods_stock_movements ( + siteGoodsStockId BIGINT PRIMARY KEY, + tenantId BIGINT, + siteId BIGINT, + siteGoodsId BIGINT, + goodsName TEXT, + goodsCategoryId BIGINT, + goodsSecondCategoryId BIGINT, + unit TEXT, + price NUMERIC(18,4), + stockType INT, + changeNum NUMERIC(18,4), + startNum NUMERIC(18,4), + endNum NUMERIC(18,4), + changeNumA NUMERIC(18,4), + startNumA NUMERIC(18,4), + endNumA NUMERIC(18,4), + remark TEXT, + operatorName TEXT, + createTime TIMESTAMP, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.goods_stock_movements IS '表用途:ODS 原始明细,对应 JSON 文件 goods_stock_movements.json,详见 goods_stock_movements-Analysis.md;payload 保留原始记录便于追溯。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.siteGoodsStockId IS '说明:同名 JSON 字段,业务含义详见 goods_stock_movements-Analysis.md;示例:2957911857581957(样例对照);JSON字段:siteGoodsStockId'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.tenantId IS '说明:同名 JSON 字段,业务含义详见 goods_stock_movements-Analysis.md;示例:2790683160709957(样例对照);JSON字段:tenantId'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.siteId IS '说明:同名 JSON 字段,业务含义详见 goods_stock_movements-Analysis.md;示例:2790685415443269(样例对照);JSON字段:siteId'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.siteGoodsId IS '说明:同名 JSON 字段,业务含义详见 goods_stock_movements-Analysis.md;示例:2793026183532613(样例对照);JSON字段:siteGoodsId'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.goodsName IS '说明:同名 JSON 字段,业务含义详见 goods_stock_movements-Analysis.md;示例:阿萨姆(样例对照);JSON字段:goodsName'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.goodsCategoryId IS '说明:同名 JSON 字段,业务含义详见 goods_stock_movements-Analysis.md;示例:2790683528350539(样例对照);JSON字段:goodsCategoryId'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.goodsSecondCategoryId IS '说明:同名 JSON 字段,业务含义详见 goods_stock_movements-Analysis.md;示例:2790683528350540(样例对照);JSON字段:goodsSecondCategoryId'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.unit IS '说明:同名 JSON 字段,业务含义详见 goods_stock_movements-Analysis.md;示例:瓶(样例对照);JSON字段:unit'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.price IS '说明:同名 JSON 字段,业务含义详见 goods_stock_movements-Analysis.md;示例:8.0(样例对照);JSON字段:price'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.stockType IS '说明:同名 JSON 字段,业务含义详见 goods_stock_movements-Analysis.md;示例:1(样例对照);JSON字段:stockType'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.changeNum IS '说明:同名 JSON 字段,业务含义详见 goods_stock_movements-Analysis.md;示例:-1(样例对照);JSON字段:changeNum'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.startNum IS '说明:同名 JSON 字段,业务含义详见 goods_stock_movements-Analysis.md;示例:28(样例对照);JSON字段:startNum'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.endNum IS '说明:同名 JSON 字段,业务含义详见 goods_stock_movements-Analysis.md;示例:27(样例对照);JSON字段:endNum'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.changeNumA IS '说明:同名 JSON 字段,业务含义详见 goods_stock_movements-Analysis.md;示例:0(样例对照);JSON字段:changeNumA'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.startNumA IS '说明:同名 JSON 字段,业务含义详见 goods_stock_movements-Analysis.md;示例:0(样例对照);JSON字段:startNumA'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.endNumA IS '说明:同名 JSON 字段,业务含义详见 goods_stock_movements-Analysis.md;示例:0(样例对照);JSON字段:endNumA'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.remark IS '说明:同名 JSON 字段,业务含义详见 goods_stock_movements-Analysis.md;示例:(样例对照);JSON字段:remark'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.operatorName IS '说明:同名 JSON 字段,业务含义详见 goods_stock_movements-Analysis.md;示例:收银员:郑丽珊(样例对照);JSON字段:operatorName'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.createTime IS '说明:同名 JSON 字段,业务含义详见 goods_stock_movements-Analysis.md;示例:2025-11-09 23:23:34(样例对照);JSON字段:createTime'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.source_file IS '说明:ETL 元数据,记录原始导出文件名;示例:goods_stock_movements.json(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.source_endpoint IS '说明:ETL 元数据,记录采集接口或下载 URL;示例:/api/xxx(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.fetched_at IS '说明:ETL 入库时间戳;示例:2025-11-10 00:00:00+08(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.payload IS '说明:完整原始 JSON 记录快照;示例:原文 JSON(样例对照);JSON字段:整条记录'; + +CREATE TABLE IF NOT EXISTS billiards_ods.stock_goods_category_tree ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + category_name TEXT, + alias_name TEXT, + pid BIGINT, + business_name TEXT, + tenant_goods_business_id BIGINT, + open_salesman INT, + categoryBoxes JSONB, + sort INT, + is_warehousing INT, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.stock_goods_category_tree IS '表用途:ODS 原始明细,对应 JSON 文件 stock_goods_category_tree.json,详见 stock_goods_category_tree-Analysis.md;payload 保留原始记录便于追溯。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.id IS '说明:同名 JSON 字段,业务含义详见 stock_goods_category_tree-Analysis.md;示例:2790683528350533(样例对照);JSON字段:id'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.tenant_id IS '说明:同名 JSON 字段,业务含义详见 stock_goods_category_tree-Analysis.md;示例:2790683160709957(样例对照);JSON字段:tenant_id'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.category_name IS '说明:同名 JSON 字段,业务含义详见 stock_goods_category_tree-Analysis.md;示例:槟榔(样例对照);JSON字段:category_name'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.alias_name IS '说明:同名 JSON 字段,业务含义详见 stock_goods_category_tree-Analysis.md;示例:(样例对照);JSON字段:alias_name'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.pid IS '说明:同名 JSON 字段,业务含义详见 stock_goods_category_tree-Analysis.md;示例:0(样例对照);JSON字段:pid'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.business_name IS '说明:同名 JSON 字段,业务含义详见 stock_goods_category_tree-Analysis.md;示例:槟榔(样例对照);JSON字段:business_name'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.tenant_goods_business_id IS '说明:同名 JSON 字段,业务含义详见 stock_goods_category_tree-Analysis.md;示例:2790683528317766(样例对照);JSON字段:tenant_goods_business_id'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.open_salesman IS '说明:同名 JSON 字段,业务含义详见 stock_goods_category_tree-Analysis.md;示例:2(样例对照);JSON字段:open_salesman'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.categoryBoxes IS '说明:同名 JSON 字段,业务含义详见 stock_goods_category_tree-Analysis.md;示例:[{"id": 2790683528350534, "tenant_id": 2790683160709957, "category_name": "槟榔…(样例对照);JSON字段:categoryBoxes'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.sort IS '说明:同名 JSON 字段,业务含义详见 stock_goods_category_tree-Analysis.md;示例:1(样例对照);JSON字段:sort'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.is_warehousing IS '说明:同名 JSON 字段,业务含义详见 stock_goods_category_tree-Analysis.md;示例:1(样例对照);JSON字段:is_warehousing'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.source_file IS '说明:ETL 元数据,记录原始导出文件名;示例:stock_goods_category_tree.json(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.source_endpoint IS '说明:ETL 元数据,记录采集接口或下载 URL;示例:/api/xxx(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.fetched_at IS '说明:ETL 入库时间戳;示例:2025-11-10 00:00:00+08(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.payload IS '说明:完整原始 JSON 记录快照;示例:原文 JSON(样例对照);JSON字段:整条记录'; + +CREATE TABLE IF NOT EXISTS billiards_ods.goods_stock_summary ( + siteGoodsId BIGINT PRIMARY KEY, + goodsName TEXT, + goodsUnit TEXT, + goodsCategoryId BIGINT, + goodsCategorySecondId BIGINT, + categoryName TEXT, + rangeStartStock NUMERIC(18,4), + rangeEndStock NUMERIC(18,4), + rangeIn NUMERIC(18,4), + rangeOut NUMERIC(18,4), + rangeSale NUMERIC(18,4), + rangeSaleMoney NUMERIC(18,2), + rangeInventory NUMERIC(18,4), + currentStock NUMERIC(18,4), + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.goods_stock_summary IS '表用途:ODS 原始明细,对应 JSON 文件 goods_stock_summary.json,详见 goods_stock_summary-Analysis.md;payload 保留原始记录便于追溯。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.siteGoodsId IS '说明:同名 JSON 字段,业务含义详见 goods_stock_summary-Analysis.md;示例:无样例(样例对照);JSON字段:siteGoodsId'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsName IS '说明:同名 JSON 字段,业务含义详见 goods_stock_summary-Analysis.md;示例:无样例(样例对照);JSON字段:goodsName'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsUnit IS '说明:同名 JSON 字段,业务含义详见 goods_stock_summary-Analysis.md;示例:无样例(样例对照);JSON字段:goodsUnit'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsCategoryId IS '说明:同名 JSON 字段,业务含义详见 goods_stock_summary-Analysis.md;示例:无样例(样例对照);JSON字段:goodsCategoryId'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsCategorySecondId IS '说明:同名 JSON 字段,业务含义详见 goods_stock_summary-Analysis.md;示例:无样例(样例对照);JSON字段:goodsCategorySecondId'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.categoryName IS '说明:同名 JSON 字段,业务含义详见 goods_stock_summary-Analysis.md;示例:无样例(样例对照);JSON字段:categoryName'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeStartStock IS '说明:同名 JSON 字段,业务含义详见 goods_stock_summary-Analysis.md;示例:无样例(样例对照);JSON字段:rangeStartStock'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeEndStock IS '说明:同名 JSON 字段,业务含义详见 goods_stock_summary-Analysis.md;示例:无样例(样例对照);JSON字段:rangeEndStock'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeIn IS '说明:同名 JSON 字段,业务含义详见 goods_stock_summary-Analysis.md;示例:无样例(样例对照);JSON字段:rangeIn'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeOut IS '说明:同名 JSON 字段,业务含义详见 goods_stock_summary-Analysis.md;示例:无样例(样例对照);JSON字段:rangeOut'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeSale IS '说明:同名 JSON 字段,业务含义详见 goods_stock_summary-Analysis.md;示例:无样例(样例对照);JSON字段:rangeSale'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeSaleMoney IS '说明:同名 JSON 字段,业务含义详见 goods_stock_summary-Analysis.md;示例:无样例(样例对照);JSON字段:rangeSaleMoney'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeInventory IS '说明:同名 JSON 字段,业务含义详见 goods_stock_summary-Analysis.md;示例:无样例(样例对照);JSON字段:rangeInventory'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.currentStock IS '说明:同名 JSON 字段,业务含义详见 goods_stock_summary-Analysis.md;示例:无样例(样例对照);JSON字段:currentStock'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.source_file IS '说明:ETL 元数据,记录原始导出文件名;示例:goods_stock_summary.json(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.source_endpoint IS '说明:ETL 元数据,记录采集接口或下载 URL;示例:/api/xxx(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.fetched_at IS '说明:ETL 入库时间戳;示例:2025-11-10 00:00:00+08(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.payload IS '说明:完整原始 JSON 记录快照;示例:原文 JSON(样例对照);JSON字段:整条记录'; + +CREATE TABLE IF NOT EXISTS billiards_ods.payment_transactions ( + id BIGINT PRIMARY KEY, + site_id BIGINT, + siteProfile JSONB, + relate_type INT, + relate_id BIGINT, + pay_amount NUMERIC(18,2), + pay_status INT, + pay_time TIMESTAMP, + create_time TIMESTAMP, + payment_method INT, + online_pay_channel INT, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.payment_transactions IS '表用途:ODS 原始明细,对应 JSON 文件 payment_transactions.json,详见 payment_transactions-Analysis.md;payload 保留原始记录便于追溯。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.id IS '说明:同名 JSON 字段,业务含义详见 payment_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:id'; +COMMENT ON COLUMN billiards_ods.payment_transactions.site_id IS '说明:同名 JSON 字段,业务含义详见 payment_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:site_id'; +COMMENT ON COLUMN billiards_ods.payment_transactions.siteProfile IS '说明:同名 JSON 字段,业务含义详见 payment_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:siteProfile'; +COMMENT ON COLUMN billiards_ods.payment_transactions.relate_type IS '说明:同名 JSON 字段,业务含义详见 payment_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:relate_type'; +COMMENT ON COLUMN billiards_ods.payment_transactions.relate_id IS '说明:同名 JSON 字段,业务含义详见 payment_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:relate_id'; +COMMENT ON COLUMN billiards_ods.payment_transactions.pay_amount IS '说明:同名 JSON 字段,业务含义详见 payment_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:pay_amount'; +COMMENT ON COLUMN billiards_ods.payment_transactions.pay_status IS '说明:同名 JSON 字段,业务含义详见 payment_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:pay_status'; +COMMENT ON COLUMN billiards_ods.payment_transactions.pay_time IS '说明:同名 JSON 字段,业务含义详见 payment_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:pay_time'; +COMMENT ON COLUMN billiards_ods.payment_transactions.create_time IS '说明:同名 JSON 字段,业务含义详见 payment_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:create_time'; +COMMENT ON COLUMN billiards_ods.payment_transactions.payment_method IS '说明:同名 JSON 字段,业务含义详见 payment_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:payment_method'; +COMMENT ON COLUMN billiards_ods.payment_transactions.online_pay_channel IS '说明:同名 JSON 字段,业务含义详见 payment_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:online_pay_channel'; +COMMENT ON COLUMN billiards_ods.payment_transactions.source_file IS '说明:ETL 元数据,记录原始导出文件名;示例:payment_transactions.json(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.payment_transactions.source_endpoint IS '说明:ETL 元数据,记录采集接口或下载 URL;示例:/api/xxx(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.payment_transactions.fetched_at IS '说明:ETL 入库时间戳;示例:2025-11-10 00:00:00+08(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.payment_transactions.payload IS '说明:完整原始 JSON 记录快照;示例:原文 JSON(样例对照);JSON字段:整条记录'; + +CREATE TABLE IF NOT EXISTS billiards_ods.refund_transactions ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + tenantName TEXT, + site_id BIGINT, + siteProfile JSONB, + relate_type INT, + relate_id BIGINT, + pay_sn TEXT, + pay_amount NUMERIC(18,2), + refund_amount NUMERIC(18,2), + round_amount NUMERIC(18,2), + pay_status INT, + pay_time TIMESTAMP, + create_time TIMESTAMP, + payment_method INT, + pay_terminal INT, + pay_config_id BIGINT, + online_pay_channel INT, + online_pay_type INT, + channel_fee NUMERIC(18,2), + channel_payer_id TEXT, + channel_pay_no TEXT, + member_id BIGINT, + member_card_id BIGINT, + cashier_point_id BIGINT, + operator_id BIGINT, + action_type INT, + check_status INT, + is_revoke INT, + is_delete INT, + balance_frozen_amount NUMERIC(18,2), + card_frozen_amount NUMERIC(18,2), + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.refund_transactions IS '表用途:ODS 原始明细,对应 JSON 文件 refund_transactions.json,详见 refund_transactions-Analysis.md;payload 保留原始记录便于追溯。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.id IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:id'; +COMMENT ON COLUMN billiards_ods.refund_transactions.tenant_id IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:tenant_id'; +COMMENT ON COLUMN billiards_ods.refund_transactions.tenantName IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:tenantName'; +COMMENT ON COLUMN billiards_ods.refund_transactions.site_id IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:site_id'; +COMMENT ON COLUMN billiards_ods.refund_transactions.siteProfile IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:siteProfile'; +COMMENT ON COLUMN billiards_ods.refund_transactions.relate_type IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:relate_type'; +COMMENT ON COLUMN billiards_ods.refund_transactions.relate_id IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:relate_id'; +COMMENT ON COLUMN billiards_ods.refund_transactions.pay_sn IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:pay_sn'; +COMMENT ON COLUMN billiards_ods.refund_transactions.pay_amount IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:pay_amount'; +COMMENT ON COLUMN billiards_ods.refund_transactions.refund_amount IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:refund_amount'; +COMMENT ON COLUMN billiards_ods.refund_transactions.round_amount IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:round_amount'; +COMMENT ON COLUMN billiards_ods.refund_transactions.pay_status IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:pay_status'; +COMMENT ON COLUMN billiards_ods.refund_transactions.pay_time IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:pay_time'; +COMMENT ON COLUMN billiards_ods.refund_transactions.create_time IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:create_time'; +COMMENT ON COLUMN billiards_ods.refund_transactions.payment_method IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:payment_method'; +COMMENT ON COLUMN billiards_ods.refund_transactions.pay_terminal IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:pay_terminal'; +COMMENT ON COLUMN billiards_ods.refund_transactions.pay_config_id IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:pay_config_id'; +COMMENT ON COLUMN billiards_ods.refund_transactions.online_pay_channel IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:online_pay_channel'; +COMMENT ON COLUMN billiards_ods.refund_transactions.online_pay_type IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:online_pay_type'; +COMMENT ON COLUMN billiards_ods.refund_transactions.channel_fee IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:channel_fee'; +COMMENT ON COLUMN billiards_ods.refund_transactions.channel_payer_id IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:channel_payer_id'; +COMMENT ON COLUMN billiards_ods.refund_transactions.channel_pay_no IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:channel_pay_no'; +COMMENT ON COLUMN billiards_ods.refund_transactions.member_id IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:member_id'; +COMMENT ON COLUMN billiards_ods.refund_transactions.member_card_id IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:member_card_id'; +COMMENT ON COLUMN billiards_ods.refund_transactions.cashier_point_id IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:cashier_point_id'; +COMMENT ON COLUMN billiards_ods.refund_transactions.operator_id IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:operator_id'; +COMMENT ON COLUMN billiards_ods.refund_transactions.action_type IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:action_type'; +COMMENT ON COLUMN billiards_ods.refund_transactions.check_status IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:check_status'; +COMMENT ON COLUMN billiards_ods.refund_transactions.is_revoke IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:is_revoke'; +COMMENT ON COLUMN billiards_ods.refund_transactions.is_delete IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:is_delete'; +COMMENT ON COLUMN billiards_ods.refund_transactions.balance_frozen_amount IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:balance_frozen_amount'; +COMMENT ON COLUMN billiards_ods.refund_transactions.card_frozen_amount IS '说明:同名 JSON 字段,业务含义详见 refund_transactions-Analysis.md;示例:无样例(样例对照);JSON字段:card_frozen_amount'; +COMMENT ON COLUMN billiards_ods.refund_transactions.source_file IS '说明:ETL 元数据,记录原始导出文件名;示例:refund_transactions.json(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.refund_transactions.source_endpoint IS '说明:ETL 元数据,记录采集接口或下载 URL;示例:/api/xxx(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.refund_transactions.fetched_at IS '说明:ETL 入库时间戳;示例:2025-11-10 00:00:00+08(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.refund_transactions.payload IS '说明:完整原始 JSON 记录快照;示例:原文 JSON(样例对照);JSON字段:整条记录'; + +CREATE TABLE IF NOT EXISTS billiards_ods.platform_coupon_redemption_records ( + id BIGINT PRIMARY KEY, + verify_id BIGINT, + certificate_id TEXT, + coupon_code TEXT, + coupon_name TEXT, + coupon_channel INT, + groupon_type INT, + group_package_id BIGINT, + sale_price NUMERIC(18,2), + coupon_money NUMERIC(18,2), + coupon_free_time NUMERIC(18,2), + coupon_cover TEXT, + coupon_remark TEXT, + use_status INT, + consume_time TIMESTAMP, + create_time TIMESTAMP, + deal_id TEXT, + channel_deal_id TEXT, + site_id BIGINT, + site_order_id BIGINT, + table_id BIGINT, + tenant_id BIGINT, + operator_id BIGINT, + operator_name TEXT, + is_delete INT, + siteProfile JSONB, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.platform_coupon_redemption_records IS '表用途:ODS 原始明细,对应 JSON 文件 platform_coupon_redemption_records.json,详见 platform_coupon_redemption_records-Analysis.md;payload 保留原始记录便于追溯。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.id IS '说明:同名 JSON 字段,业务含义详见 platform_coupon_redemption_records-Analysis.md;示例:无样例(样例对照);JSON字段:id'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.verify_id IS '说明:同名 JSON 字段,业务含义详见 platform_coupon_redemption_records-Analysis.md;示例:无样例(样例对照);JSON字段:verify_id'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.certificate_id IS '说明:同名 JSON 字段,业务含义详见 platform_coupon_redemption_records-Analysis.md;示例:无样例(样例对照);JSON字段:certificate_id'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_code IS '说明:同名 JSON 字段,业务含义详见 platform_coupon_redemption_records-Analysis.md;示例:无样例(样例对照);JSON字段:coupon_code'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_name IS '说明:同名 JSON 字段,业务含义详见 platform_coupon_redemption_records-Analysis.md;示例:无样例(样例对照);JSON字段:coupon_name'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_channel IS '说明:同名 JSON 字段,业务含义详见 platform_coupon_redemption_records-Analysis.md;示例:无样例(样例对照);JSON字段:coupon_channel'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.groupon_type IS '说明:同名 JSON 字段,业务含义详见 platform_coupon_redemption_records-Analysis.md;示例:无样例(样例对照);JSON字段:groupon_type'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.group_package_id IS '说明:同名 JSON 字段,业务含义详见 platform_coupon_redemption_records-Analysis.md;示例:无样例(样例对照);JSON字段:group_package_id'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.sale_price IS '说明:同名 JSON 字段,业务含义详见 platform_coupon_redemption_records-Analysis.md;示例:无样例(样例对照);JSON字段:sale_price'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_money IS '说明:同名 JSON 字段,业务含义详见 platform_coupon_redemption_records-Analysis.md;示例:无样例(样例对照);JSON字段:coupon_money'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_free_time IS '说明:同名 JSON 字段,业务含义详见 platform_coupon_redemption_records-Analysis.md;示例:无样例(样例对照);JSON字段:coupon_free_time'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_cover IS '说明:同名 JSON 字段,业务含义详见 platform_coupon_redemption_records-Analysis.md;示例:无样例(样例对照);JSON字段:coupon_cover'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_remark IS '说明:同名 JSON 字段,业务含义详见 platform_coupon_redemption_records-Analysis.md;示例:无样例(样例对照);JSON字段:coupon_remark'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.use_status IS '说明:同名 JSON 字段,业务含义详见 platform_coupon_redemption_records-Analysis.md;示例:无样例(样例对照);JSON字段:use_status'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.consume_time IS '说明:同名 JSON 字段,业务含义详见 platform_coupon_redemption_records-Analysis.md;示例:无样例(样例对照);JSON字段:consume_time'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.create_time IS '说明:同名 JSON 字段,业务含义详见 platform_coupon_redemption_records-Analysis.md;示例:无样例(样例对照);JSON字段:create_time'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.deal_id IS '说明:同名 JSON 字段,业务含义详见 platform_coupon_redemption_records-Analysis.md;示例:无样例(样例对照);JSON字段:deal_id'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.channel_deal_id IS '说明:同名 JSON 字段,业务含义详见 platform_coupon_redemption_records-Analysis.md;示例:无样例(样例对照);JSON字段:channel_deal_id'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.site_id IS '说明:同名 JSON 字段,业务含义详见 platform_coupon_redemption_records-Analysis.md;示例:无样例(样例对照);JSON字段:site_id'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.site_order_id IS '说明:同名 JSON 字段,业务含义详见 platform_coupon_redemption_records-Analysis.md;示例:无样例(样例对照);JSON字段:site_order_id'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.table_id IS '说明:同名 JSON 字段,业务含义详见 platform_coupon_redemption_records-Analysis.md;示例:无样例(样例对照);JSON字段:table_id'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.tenant_id IS '说明:同名 JSON 字段,业务含义详见 platform_coupon_redemption_records-Analysis.md;示例:无样例(样例对照);JSON字段:tenant_id'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.operator_id IS '说明:同名 JSON 字段,业务含义详见 platform_coupon_redemption_records-Analysis.md;示例:无样例(样例对照);JSON字段:operator_id'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.operator_name IS '说明:同名 JSON 字段,业务含义详见 platform_coupon_redemption_records-Analysis.md;示例:无样例(样例对照);JSON字段:operator_name'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.is_delete IS '说明:同名 JSON 字段,业务含义详见 platform_coupon_redemption_records-Analysis.md;示例:无样例(样例对照);JSON字段:is_delete'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.siteProfile IS '说明:同名 JSON 字段,业务含义详见 platform_coupon_redemption_records-Analysis.md;示例:无样例(样例对照);JSON字段:siteProfile'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.source_file IS '说明:ETL 元数据,记录原始导出文件名;示例:platform_coupon_redemption_records.json(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.source_endpoint IS '说明:ETL 元数据,记录采集接口或下载 URL;示例:/api/xxx(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.fetched_at IS '说明:ETL 入库时间戳;示例:2025-11-10 00:00:00+08(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.payload IS '说明:完整原始 JSON 记录快照;示例:原文 JSON(样例对照);JSON字段:整条记录'; + +CREATE TABLE IF NOT EXISTS billiards_ods.tenant_goods_master ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + goods_name TEXT, + goods_bar_code TEXT, + goods_category_id BIGINT, + goods_second_category_id BIGINT, + categoryName TEXT, + unit TEXT, + goods_number TEXT, + out_goods_id TEXT, + goods_state INT, + sale_channel INT, + able_discount INT, + able_site_transfer INT, + is_delete INT, + is_warehousing INT, + isInSite INT, + cost_price NUMERIC(18,4), + cost_price_type INT, + market_price NUMERIC(18,4), + min_discount_price NUMERIC(18,4), + common_sale_royalty NUMERIC(18,4), + point_sale_royalty NUMERIC(18,4), + pinyin_initial TEXT, + commodityCode TEXT, + commodity_code TEXT, + goods_cover TEXT, + supplier_id BIGINT, + remark_name TEXT, + create_time TIMESTAMP, + update_time TIMESTAMP, + payload JSONB NOT NULL, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now() +); + +COMMENT ON TABLE billiards_ods.tenant_goods_master IS '表用途:ODS 原始明细,对应 JSON 文件 tenant_goods_master.json,详见 tenant_goods_master-Analysis.md;payload 保留原始记录便于追溯。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.id IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:2791925230096261(样例对照);JSON字段:id'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.tenant_id IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:2790683160709957(样例对照);JSON字段:tenant_id'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_name IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:东方树叶(样例对照);JSON字段:goods_name'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_bar_code IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:(样例对照);JSON字段:goods_bar_code'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_category_id IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:2790683528350539(样例对照);JSON字段:goods_category_id'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_second_category_id IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:2790683528350540(样例对照);JSON字段:goods_second_category_id'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.categoryName IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:饮料(样例对照);JSON字段:categoryName'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.unit IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:瓶(样例对照);JSON字段:unit'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_number IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:1(样例对照);JSON字段:goods_number'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.out_goods_id IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:0(样例对照);JSON字段:out_goods_id'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_state IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:1(样例对照);JSON字段:goods_state'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.sale_channel IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:1(样例对照);JSON字段:sale_channel'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.able_discount IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:1(样例对照);JSON字段:able_discount'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.able_site_transfer IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:2(样例对照);JSON字段:able_site_transfer'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.is_delete IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:0(样例对照);JSON字段:is_delete'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.is_warehousing IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:1(样例对照);JSON字段:is_warehousing'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.isInSite IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:false(样例对照);JSON字段:isInSite'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.cost_price IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:0.0(样例对照);JSON字段:cost_price'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.cost_price_type IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:1(样例对照);JSON字段:cost_price_type'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.market_price IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:8.0(样例对照);JSON字段:market_price'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.min_discount_price IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:0.0(样例对照);JSON字段:min_discount_price'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.common_sale_royalty IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:0(样例对照);JSON字段:common_sale_royalty'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.point_sale_royalty IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:0(样例对照);JSON字段:point_sale_royalty'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.pinyin_initial IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:DFSY,DFSX(样例对照);JSON字段:pinyin_initial'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.commodityCode IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:["10000028"](样例对照);JSON字段:commodityCode'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.commodity_code IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:10000028(样例对照);JSON字段:commodity_code'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_cover IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:https://oss.ficoo.vip/admin/ZwS8fj_1753175129443.jpg(样例对照);JSON字段:goods_cover'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.supplier_id IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:0(样例对照);JSON字段:supplier_id'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.remark_name IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:(样例对照);JSON字段:remark_name'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.create_time IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:2025-07-15 17:13:15(样例对照);JSON字段:create_time'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.update_time IS '说明:同名 JSON 字段,业务含义详见 tenant_goods_master-Analysis.md;示例:2025-10-29 23:51:38(样例对照);JSON字段:update_time'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.payload IS '说明:完整原始 JSON 记录快照;示例:原文 JSON(样例对照);JSON字段:整条记录'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.source_file IS '说明:ETL 元数据,记录原始导出文件名;示例:tenant_goods_master.json(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.source_endpoint IS '说明:ETL 元数据,记录采集接口或下载 URL;示例:/api/xxx(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.fetched_at IS '说明:ETL 入库时间戳;示例:2025-11-10 00:00:00+08(样例对照);JSON字段:无(ETL元数据)'; + +CREATE TABLE IF NOT EXISTS billiards_ods.group_buy_packages ( + id BIGINT PRIMARY KEY, + package_id BIGINT, + package_name TEXT, + selling_price NUMERIC(18,2), + coupon_money NUMERIC(18,2), + date_type INT, + date_info TEXT, + start_time TIMESTAMP, + end_time TIMESTAMP, + start_clock TEXT, + end_clock TEXT, + add_start_clock TEXT, + add_end_clock TEXT, + duration INT, + usable_count INT, + usable_range INT, + table_area_id BIGINT, + table_area_name TEXT, + table_area_id_list JSONB, + tenant_table_area_id BIGINT, + tenant_table_area_id_list JSONB, + site_id BIGINT, + site_name TEXT, + tenant_id BIGINT, + card_type_ids JSONB, + group_type INT, + system_group_type INT, + type INT, + effective_status INT, + is_enabled INT, + is_delete INT, + max_selectable_categories INT, + area_tag_type INT, + creator_name TEXT, + create_time TIMESTAMP, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.group_buy_packages IS '表用途:ODS 原始明细,对应 JSON 文件 group_buy_packages.json,详见 group_buy_packages-Analysis.md;payload 保留原始记录便于追溯。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.id IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:2939215004469573(样例对照);JSON字段:id'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.package_id IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:1814707240811572(样例对照);JSON字段:package_id'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.package_name IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:早场特惠一小时(样例对照);JSON字段:package_name'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.selling_price IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:0.0(样例对照);JSON字段:selling_price'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.coupon_money IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:0.0(样例对照);JSON字段:coupon_money'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.date_type IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:1(样例对照);JSON字段:date_type'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.date_info IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:(样例对照);JSON字段:date_info'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.start_time IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:2025-10-27 00:00:00(样例对照);JSON字段:start_time'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.end_time IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:2026-10-28 00:00:00(样例对照);JSON字段:end_time'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.start_clock IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:00:00:00(样例对照);JSON字段:start_clock'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.end_clock IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:1.00:00:00(样例对照);JSON字段:end_clock'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.add_start_clock IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:00:00:00(样例对照);JSON字段:add_start_clock'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.add_end_clock IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:1.00:00:00(样例对照);JSON字段:add_end_clock'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.duration IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:3600(样例对照);JSON字段:duration'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.usable_count IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:9999999(样例对照);JSON字段:usable_count'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.usable_range IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:(样例对照);JSON字段:usable_range'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.table_area_id IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:0(样例对照);JSON字段:table_area_id'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.table_area_name IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:A区(样例对照);JSON字段:table_area_name'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.table_area_id_list IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:(样例对照);JSON字段:table_area_id_list'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.tenant_table_area_id IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:0(样例对照);JSON字段:tenant_table_area_id'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.tenant_table_area_id_list IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:2791960001957765(样例对照);JSON字段:tenant_table_area_id_list'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.site_id IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:2790685415443269(样例对照);JSON字段:site_id'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.site_name IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:朗朗桌球(样例对照);JSON字段:site_name'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.tenant_id IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:2790683160709957(样例对照);JSON字段:tenant_id'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.card_type_ids IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:0(样例对照);JSON字段:card_type_ids'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.group_type IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:1(样例对照);JSON字段:group_type'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.system_group_type IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:1(样例对照);JSON字段:system_group_type'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.type IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:2(样例对照);JSON字段:type'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.effective_status IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:1(样例对照);JSON字段:effective_status'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.is_enabled IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:1(样例对照);JSON字段:is_enabled'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.is_delete IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:0(样例对照);JSON字段:is_delete'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.max_selectable_categories IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:0(样例对照);JSON字段:max_selectable_categories'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.area_tag_type IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:1(样例对照);JSON字段:area_tag_type'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.creator_name IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:店长:郑丽珊(样例对照);JSON字段:creator_name'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.create_time IS '说明:同名 JSON 字段,业务含义详见 group_buy_packages-Analysis.md;示例:2025-10-27 18:24:09(样例对照);JSON字段:create_time'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.source_file IS '说明:ETL 元数据,记录原始导出文件名;示例:group_buy_packages.json(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.source_endpoint IS '说明:ETL 元数据,记录采集接口或下载 URL;示例:/api/xxx(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.fetched_at IS '说明:ETL 入库时间戳;示例:2025-11-10 00:00:00+08(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.payload IS '说明:完整原始 JSON 记录快照;示例:原文 JSON(样例对照);JSON字段:整条记录'; + +CREATE TABLE IF NOT EXISTS billiards_ods.group_buy_redemption_records ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + site_id BIGINT, + siteName TEXT, + table_id BIGINT, + tableName TEXT, + tableAreaName TEXT, + tenant_table_area_id BIGINT, + order_trade_no TEXT, + order_settle_id BIGINT, + order_pay_id BIGINT, + order_coupon_id BIGINT, + order_coupon_channel INT, + coupon_code TEXT, + coupon_money NUMERIC(18,2), + coupon_origin_id BIGINT, + ledger_name TEXT, + ledger_group_name TEXT, + ledger_amount NUMERIC(18,2), + ledger_count NUMERIC(18,4), + ledger_unit_price NUMERIC(18,4), + ledger_status INT, + table_charge_seconds INT, + promotion_activity_id BIGINT, + promotion_coupon_id BIGINT, + promotion_seconds INT, + offer_type INT, + assistant_promotion_money NUMERIC(18,2), + assistant_service_promotion_money NUMERIC(18,2), + table_service_promotion_money NUMERIC(18,2), + goods_promotion_money NUMERIC(18,2), + recharge_promotion_money NUMERIC(18,2), + reward_promotion_money NUMERIC(18,2), + goodsOptionPrice NUMERIC(18,2), + salesman_name TEXT, + sales_man_org_id BIGINT, + salesman_role_id BIGINT, + salesman_user_id BIGINT, + operator_id BIGINT, + operator_name TEXT, + is_single_order INT, + is_delete INT, + create_time TIMESTAMP, + payload JSONB NOT NULL, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now() +); + +COMMENT ON TABLE billiards_ods.group_buy_redemption_records IS '表用途:ODS 原始明细,对应 JSON 文件 group_buy_redemption_records.json,详见 group_buy_redemption_records-Analysis.md;payload 保留原始记录便于追溯。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.id IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:2957924029615941(样例对照);JSON字段:id'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.tenant_id IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:2790683160709957(样例对照);JSON字段:tenant_id'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.site_id IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:2790685415443269(样例对照);JSON字段:site_id'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.siteName IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:朗朗桌球(样例对照);JSON字段:siteName'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.table_id IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:2793003705192517(样例对照);JSON字段:table_id'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.tableName IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:A17(样例对照);JSON字段:tableName'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.tableAreaName IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:A区(样例对照);JSON字段:tableAreaName'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.tenant_table_area_id IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:2791960001957765(样例对照);JSON字段:tenant_table_area_id'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_trade_no IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:2957858167230149(样例对照);JSON字段:order_trade_no'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_settle_id IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:2957922914357125(样例对照);JSON字段:order_settle_id'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_pay_id IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:0(样例对照);JSON字段:order_pay_id'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_coupon_id IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:2957858168229573(样例对照);JSON字段:order_coupon_id'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_coupon_channel IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:1(样例对照);JSON字段:order_coupon_channel'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.coupon_code IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:0107892475999(样例对照);JSON字段:coupon_code'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.coupon_money IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:48.0(样例对照);JSON字段:coupon_money'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.coupon_origin_id IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:2957858168229573(样例对照);JSON字段:coupon_origin_id'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_name IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:全天A区中八一小时(样例对照);JSON字段:ledger_name'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_group_name IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:(样例对照);JSON字段:ledger_group_name'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_amount IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:48.0(样例对照);JSON字段:ledger_amount'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_count IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:3600(样例对照);JSON字段:ledger_count'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_unit_price IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:29.9(样例对照);JSON字段:ledger_unit_price'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_status IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:1(样例对照);JSON字段:ledger_status'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.table_charge_seconds IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:3600(样例对照);JSON字段:table_charge_seconds'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.promotion_activity_id IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:2957858166460101(样例对照);JSON字段:promotion_activity_id'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.promotion_coupon_id IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:2798727423528005(样例对照);JSON字段:promotion_coupon_id'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.promotion_seconds IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:3600(样例对照);JSON字段:promotion_seconds'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.offer_type IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:1(样例对照);JSON字段:offer_type'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.assistant_promotion_money IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:0.0(样例对照);JSON字段:assistant_promotion_money'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.assistant_service_promotion_money IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:0.0(样例对照);JSON字段:assistant_service_promotion_money'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.table_service_promotion_money IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:0.0(样例对照);JSON字段:table_service_promotion_money'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.goods_promotion_money IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:0.0(样例对照);JSON字段:goods_promotion_money'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.recharge_promotion_money IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:0.0(样例对照);JSON字段:recharge_promotion_money'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.reward_promotion_money IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:0.0(样例对照);JSON字段:reward_promotion_money'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.goodsOptionPrice IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:0.0(样例对照);JSON字段:goodsOptionPrice'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.salesman_name IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:(样例对照);JSON字段:salesman_name'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.sales_man_org_id IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:0(样例对照);JSON字段:sales_man_org_id'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.salesman_role_id IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:0(样例对照);JSON字段:salesman_role_id'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.salesman_user_id IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:0(样例对照);JSON字段:salesman_user_id'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.operator_id IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:2790687322443013(样例对照);JSON字段:operator_id'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.operator_name IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:收银员:郑丽珊(样例对照);JSON字段:operator_name'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.is_single_order IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:1(样例对照);JSON字段:is_single_order'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.is_delete IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:0(样例对照);JSON字段:is_delete'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.create_time IS '说明:同名 JSON 字段,业务含义详见 group_buy_redemption_records-Analysis.md;示例:2025-11-09 23:35:57(样例对照);JSON字段:create_time'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.payload IS '说明:完整原始 JSON 记录快照;示例:原文 JSON(样例对照);JSON字段:整条记录'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.source_file IS '说明:ETL 元数据,记录原始导出文件名;示例:group_buy_redemption_records.json(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.source_endpoint IS '说明:ETL 元数据,记录采集接口或下载 URL;示例:/api/xxx(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.fetched_at IS '说明:ETL 入库时间戳;示例:2025-11-10 00:00:00+08(样例对照);JSON字段:无(ETL元数据)'; + +CREATE TABLE IF NOT EXISTS billiards_ods.settlement_ticket_details ( + orderSettleId BIGINT PRIMARY KEY, + actualPayment NUMERIC(18,2), + adjustAmount NUMERIC(18,2), + assistantManualDiscount NUMERIC(18,2), + balanceAmount NUMERIC(18,2), + cashierName TEXT, + consumeMoney NUMERIC(18,2), + couponAmount NUMERIC(18,2), + deliveryAddress TEXT, + deliveryFee NUMERIC(18,2), + ledgerAmount NUMERIC(18,2), + memberDeductAmount NUMERIC(18,2), + memberOfferAmount NUMERIC(18,2), + onlineReturnAmount NUMERIC(18,2), + orderRemark TEXT, + orderSettleNumber BIGINT, + payMemberBalance NUMERIC(18,2), + payTime TIMESTAMP, + paymentMethod INT, + pointDiscountCost NUMERIC(18,2), + pointDiscountPrice NUMERIC(18,2), + prepayMoney NUMERIC(18,2), + refundAmount NUMERIC(18,2), + returnGoodsAmount NUMERIC(18,2), + rewardName TEXT, + settleType TEXT, + siteAddress TEXT, + siteBusinessTel TEXT, + siteId BIGINT, + siteName TEXT, + tenantId BIGINT, + tenantName TEXT, + ticketCustomContent TEXT, + ticketRemark TEXT, + voucherMoney NUMERIC(18,2), + memberProfile JSONB, + orderItem JSONB, + tenantMemberCardLogs JSONB, + payload JSONB NOT NULL, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now() +); + +COMMENT ON TABLE billiards_ods.settlement_ticket_details IS '表用途:ODS 原始明细,对应 JSON 文件 settlement_ticket_details.json,详见 settlement_ticket_details-Analysis.md;payload 保留原始记录便于追溯。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderSettleId IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:2957922914357125(样例对照);JSON字段:orderSettleId'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.actualPayment IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:actualPayment'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.adjustAmount IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:adjustAmount'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.assistantManualDiscount IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:assistantManualDiscount'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.balanceAmount IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:balanceAmount'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.cashierName IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:cashierName'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.consumeMoney IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:consumeMoney'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.couponAmount IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:couponAmount'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.deliveryAddress IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:deliveryAddress'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.deliveryFee IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:deliveryFee'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.ledgerAmount IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:ledgerAmount'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.memberDeductAmount IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:memberDeductAmount'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.memberOfferAmount IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:memberOfferAmount'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.onlineReturnAmount IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:onlineReturnAmount'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderRemark IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:orderRemark'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderSettleNumber IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:orderSettleNumber'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.payMemberBalance IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:payMemberBalance'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.payTime IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:payTime'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.paymentMethod IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:paymentMethod'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.pointDiscountCost IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:pointDiscountCost'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.pointDiscountPrice IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:pointDiscountPrice'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.prepayMoney IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:prepayMoney'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.refundAmount IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:refundAmount'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.returnGoodsAmount IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:returnGoodsAmount'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.rewardName IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:rewardName'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.settleType IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:settleType'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.siteAddress IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:siteAddress'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.siteBusinessTel IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:siteBusinessTel'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.siteId IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:siteId'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.siteName IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:siteName'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.tenantId IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:tenantId'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.tenantName IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:tenantName'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.ticketCustomContent IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:ticketCustomContent'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.ticketRemark IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:ticketRemark'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.voucherMoney IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:voucherMoney'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.memberProfile IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:memberProfile'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderItem IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:orderItem'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.tenantMemberCardLogs IS '说明:同名 JSON 字段,业务含义详见 settlement_ticket_details-Analysis.md;示例:无样例(样例对照);JSON字段:tenantMemberCardLogs'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.payload IS '说明:完整原始 JSON 记录快照;示例:原文 JSON(样例对照);JSON字段:整条记录'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.source_file IS '说明:ETL 元数据,记录原始导出文件名;示例:settlement_ticket_details.json(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.source_endpoint IS '说明:ETL 元数据,记录采集接口或下载 URL;示例:/api/xxx(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.fetched_at IS '说明:ETL 入库时间戳;示例:2025-11-10 00:00:00+08(样例对照);JSON字段:无(ETL元数据)'; + +CREATE TABLE IF NOT EXISTS billiards_ods.store_goods_master ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + site_id BIGINT, + siteName TEXT, + tenant_goods_id BIGINT, + goods_name TEXT, + goods_bar_code TEXT, + goods_category_id BIGINT, + goods_second_category_id BIGINT, + oneCategoryName TEXT, + twoCategoryName TEXT, + unit TEXT, + sale_price NUMERIC(18,4), + cost_price NUMERIC(18,4), + cost_price_type INT, + min_discount_price NUMERIC(18,4), + safe_stock NUMERIC(18,4), + stock NUMERIC(18,4), + stock_A NUMERIC(18,4), + sale_num NUMERIC(18,4), + total_purchase_cost NUMERIC(18,4), + total_sales NUMERIC(18,4), + average_monthly_sales NUMERIC(18,4), + batch_stock_quantity NUMERIC(18,2), + days_available INT, + provisional_total_cost NUMERIC(18,2), + enable_status INT, + audit_status INT, + goods_state INT, + is_delete INT, + is_warehousing INT, + able_discount INT, + able_site_transfer INT, + forbid_sell_status INT, + "freeze" INT, + send_state INT, + custom_label_type INT, + option_required INT, + sale_channel INT, + sort INT, + remark TEXT, + pinyin_initial TEXT, + goods_cover TEXT, + create_time TIMESTAMP, + update_time TIMESTAMP, + payload JSONB NOT NULL, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now() +); + +COMMENT ON TABLE billiards_ods.store_goods_master IS '表用途:ODS 原始明细,对应 JSON 文件 store_goods_master.json,详见 store_goods_master-Analysis.md;payload 保留原始记录便于追溯。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.id IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:2793025851560005(样例对照);JSON字段:id'; +COMMENT ON COLUMN billiards_ods.store_goods_master.tenant_id IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:2790683160709957(样例对照);JSON字段:tenant_id'; +COMMENT ON COLUMN billiards_ods.store_goods_master.site_id IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:2790685415443269(样例对照);JSON字段:site_id'; +COMMENT ON COLUMN billiards_ods.store_goods_master.siteName IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:朗朗桌球(样例对照);JSON字段:siteName'; +COMMENT ON COLUMN billiards_ods.store_goods_master.tenant_goods_id IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:2792178593255301(样例对照);JSON字段:tenant_goods_id'; +COMMENT ON COLUMN billiards_ods.store_goods_master.goods_name IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:合味道泡面(样例对照);JSON字段:goods_name'; +COMMENT ON COLUMN billiards_ods.store_goods_master.goods_bar_code IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:(样例对照);JSON字段:goods_bar_code'; +COMMENT ON COLUMN billiards_ods.store_goods_master.goods_category_id IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:2791941988405125(样例对照);JSON字段:goods_category_id'; +COMMENT ON COLUMN billiards_ods.store_goods_master.goods_second_category_id IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:2793236829620037(样例对照);JSON字段:goods_second_category_id'; +COMMENT ON COLUMN billiards_ods.store_goods_master.oneCategoryName IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:零食(样例对照);JSON字段:oneCategoryName'; +COMMENT ON COLUMN billiards_ods.store_goods_master.twoCategoryName IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:面(样例对照);JSON字段:twoCategoryName'; +COMMENT ON COLUMN billiards_ods.store_goods_master.unit IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:桶(样例对照);JSON字段:unit'; +COMMENT ON COLUMN billiards_ods.store_goods_master.sale_price IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:12.0(样例对照);JSON字段:sale_price'; +COMMENT ON COLUMN billiards_ods.store_goods_master.cost_price IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:0.0(样例对照);JSON字段:cost_price'; +COMMENT ON COLUMN billiards_ods.store_goods_master.cost_price_type IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:1(样例对照);JSON字段:cost_price_type'; +COMMENT ON COLUMN billiards_ods.store_goods_master.min_discount_price IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:7.0(样例对照);JSON字段:min_discount_price'; +COMMENT ON COLUMN billiards_ods.store_goods_master.safe_stock IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:0(样例对照);JSON字段:safe_stock'; +COMMENT ON COLUMN billiards_ods.store_goods_master.stock IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:18(样例对照);JSON字段:stock'; +COMMENT ON COLUMN billiards_ods.store_goods_master.stock_A IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:0(样例对照);JSON字段:stock_A'; +COMMENT ON COLUMN billiards_ods.store_goods_master.sale_num IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:104(样例对照);JSON字段:sale_num'; +COMMENT ON COLUMN billiards_ods.store_goods_master.total_purchase_cost IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:0.0(样例对照);JSON字段:total_purchase_cost'; +COMMENT ON COLUMN billiards_ods.store_goods_master.total_sales IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:104(样例对照);JSON字段:total_sales'; +COMMENT ON COLUMN billiards_ods.store_goods_master.average_monthly_sales IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:1.32(样例对照);JSON字段:average_monthly_sales'; +COMMENT ON COLUMN billiards_ods.store_goods_master.batch_stock_quantity IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:43(样例对照);JSON字段:batch_stock_quantity'; +COMMENT ON COLUMN billiards_ods.store_goods_master.days_available IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:13(样例对照);JSON字段:days_available'; +COMMENT ON COLUMN billiards_ods.store_goods_master.provisional_total_cost IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:0.0(样例对照);JSON字段:provisional_total_cost'; +COMMENT ON COLUMN billiards_ods.store_goods_master.enable_status IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:1(样例对照);JSON字段:enable_status'; +COMMENT ON COLUMN billiards_ods.store_goods_master.audit_status IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:2(样例对照);JSON字段:audit_status'; +COMMENT ON COLUMN billiards_ods.store_goods_master.goods_state IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:1(样例对照);JSON字段:goods_state'; +COMMENT ON COLUMN billiards_ods.store_goods_master.is_delete IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:0(样例对照);JSON字段:is_delete'; +COMMENT ON COLUMN billiards_ods.store_goods_master.is_warehousing IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:1(样例对照);JSON字段:is_warehousing'; +COMMENT ON COLUMN billiards_ods.store_goods_master.able_discount IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:1(样例对照);JSON字段:able_discount'; +COMMENT ON COLUMN billiards_ods.store_goods_master.able_site_transfer IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:2(样例对照);JSON字段:able_site_transfer'; +COMMENT ON COLUMN billiards_ods.store_goods_master.forbid_sell_status IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:1(样例对照);JSON字段:forbid_sell_status'; +COMMENT ON COLUMN billiards_ods.store_goods_master."freeze" IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:0(样例对照);JSON字段:freeze'; +COMMENT ON COLUMN billiards_ods.store_goods_master.send_state IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:1(样例对照);JSON字段:send_state'; +COMMENT ON COLUMN billiards_ods.store_goods_master.custom_label_type IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:2(样例对照);JSON字段:custom_label_type'; +COMMENT ON COLUMN billiards_ods.store_goods_master.option_required IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:1(样例对照);JSON字段:option_required'; +COMMENT ON COLUMN billiards_ods.store_goods_master.sale_channel IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:1(样例对照);JSON字段:sale_channel'; +COMMENT ON COLUMN billiards_ods.store_goods_master.sort IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:100(样例对照);JSON字段:sort'; +COMMENT ON COLUMN billiards_ods.store_goods_master.remark IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:(样例对照);JSON字段:remark'; +COMMENT ON COLUMN billiards_ods.store_goods_master.pinyin_initial IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:HWDPM,GWDPM(样例对照);JSON字段:pinyin_initial'; +COMMENT ON COLUMN billiards_ods.store_goods_master.goods_cover IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:https://oss.ficoo.vip/admin/8M1WM7_1753204221337.jpg(样例对照);JSON字段:goods_cover'; +COMMENT ON COLUMN billiards_ods.store_goods_master.create_time IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:2025-07-16 11:52:51(样例对照);JSON字段:create_time'; +COMMENT ON COLUMN billiards_ods.store_goods_master.update_time IS '说明:同名 JSON 字段,业务含义详见 store_goods_master-Analysis.md;示例:2025-11-09 07:23:47(样例对照);JSON字段:update_time'; +COMMENT ON COLUMN billiards_ods.store_goods_master.payload IS '说明:完整原始 JSON 记录快照;示例:原文 JSON(样例对照);JSON字段:整条记录'; +COMMENT ON COLUMN billiards_ods.store_goods_master.source_file IS '说明:ETL 元数据,记录原始导出文件名;示例:store_goods_master.json(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.store_goods_master.source_endpoint IS '说明:ETL 元数据,记录采集接口或下载 URL;示例:/api/xxx(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.store_goods_master.fetched_at IS '说明:ETL 入库时间戳;示例:2025-11-10 00:00:00+08(样例对照);JSON字段:无(ETL元数据)'; + +CREATE TABLE IF NOT EXISTS billiards_ods.store_goods_sales_records ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + site_id BIGINT, + siteid BIGINT, + sitename TEXT, + site_goods_id BIGINT, + tenant_goods_id BIGINT, + order_settle_id BIGINT, + order_trade_no TEXT, + order_goods_id BIGINT, + ordergoodsid BIGINT, + order_pay_id BIGINT, + order_coupon_id BIGINT, + ledger_name TEXT, + ledger_group_name TEXT, + ledger_amount NUMERIC(18,2), + ledger_count NUMERIC(18,4), + ledger_unit_price NUMERIC(18,4), + ledger_status INT, + discount_money NUMERIC(18,2), + discount_price NUMERIC(18,2), + coupon_deduct_money NUMERIC(18,2), + member_discount_amount NUMERIC(18,2), + option_coupon_deduct_money NUMERIC(18,2), + option_member_discount_money NUMERIC(18,2), + point_discount_money NUMERIC(18,2), + point_discount_money_cost NUMERIC(18,2), + real_goods_money NUMERIC(18,2), + cost_money NUMERIC(18,2), + push_money NUMERIC(18,2), + sales_type INT, + is_single_order INT, + is_delete INT, + goods_remark TEXT, + option_price NUMERIC(18,2), + option_value_name TEXT, + option_name TEXT, + member_coupon_id BIGINT, + package_coupon_id BIGINT, + sales_man_org_id BIGINT, + salesman_name TEXT, + salesman_role_id BIGINT, + salesman_user_id BIGINT, + operator_id BIGINT, + operator_name TEXT, + openSalesman TEXT, + returns_number INT, + site_table_id BIGINT, + tenant_goods_business_id BIGINT, + tenant_goods_category_id BIGINT, + create_time TIMESTAMP, + payload JSONB NOT NULL, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now() +); + +COMMENT ON TABLE billiards_ods.store_goods_sales_records IS '表用途:ODS 原始明细,对应 JSON 文件 store_goods_sales_records.json,详见 store_goods_sales_records-Analysis.md;payload 保留原始记录便于追溯。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.id IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:2957924029550406(样例对照);JSON字段:id'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_id IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:2790683160709957(样例对照);JSON字段:tenant_id'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.site_id IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:2790685415443269(样例对照);JSON字段:site_id'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.siteid IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:0(样例对照);JSON字段:siteid'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.sitename IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:朗朗桌球(样例对照);JSON字段:sitename'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.site_goods_id IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:2793026176012357(样例对照);JSON字段:site_goods_id'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_goods_id IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:2792115932417925(样例对照);JSON字段:tenant_goods_id'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_settle_id IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:2957922914357125(样例对照);JSON字段:order_settle_id'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_trade_no IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:2957858167230149(样例对照);JSON字段:order_trade_no'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_goods_id IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:2957858456391557(样例对照);JSON字段:order_goods_id'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ordergoodsid IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:0(样例对照);JSON字段:ordergoodsid'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_pay_id IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:0(样例对照);JSON字段:order_pay_id'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_coupon_id IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:0(样例对照);JSON字段:order_coupon_id'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_name IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:哇哈哈矿泉水(样例对照);JSON字段:ledger_name'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_group_name IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:酒水(样例对照);JSON字段:ledger_group_name'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_amount IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:5.0(样例对照);JSON字段:ledger_amount'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_count IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:1(样例对照);JSON字段:ledger_count'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_unit_price IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:5.0(样例对照);JSON字段:ledger_unit_price'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_status IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:1(样例对照);JSON字段:ledger_status'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.discount_money IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:0.0(样例对照);JSON字段:discount_money'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.discount_price IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:5.0(样例对照);JSON字段:discount_price'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.coupon_deduct_money IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:0.0(样例对照);JSON字段:coupon_deduct_money'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.member_discount_amount IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:0.0(样例对照);JSON字段:member_discount_amount'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_coupon_deduct_money IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:0.0(样例对照);JSON字段:option_coupon_deduct_money'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_member_discount_money IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:0.0(样例对照);JSON字段:option_member_discount_money'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.point_discount_money IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:0.0(样例对照);JSON字段:point_discount_money'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.point_discount_money_cost IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:0.0(样例对照);JSON字段:point_discount_money_cost'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.real_goods_money IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:5.0(样例对照);JSON字段:real_goods_money'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.cost_money IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:0.01(样例对照);JSON字段:cost_money'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.push_money IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:0.0(样例对照);JSON字段:push_money'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.sales_type IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:1(样例对照);JSON字段:sales_type'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.is_single_order IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:1(样例对照);JSON字段:is_single_order'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.is_delete IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:0(样例对照);JSON字段:is_delete'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.goods_remark IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:哇哈哈矿泉水(样例对照);JSON字段:goods_remark'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_price IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:0.0(样例对照);JSON字段:option_price'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_value_name IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:(样例对照);JSON字段:option_value_name'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_name IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:无样例(样例对照);JSON字段:option_name'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.member_coupon_id IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:0(样例对照);JSON字段:member_coupon_id'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.package_coupon_id IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:0(样例对照);JSON字段:package_coupon_id'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.sales_man_org_id IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:0(样例对照);JSON字段:sales_man_org_id'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.salesman_name IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:(样例对照);JSON字段:salesman_name'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.salesman_role_id IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:0(样例对照);JSON字段:salesman_role_id'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.salesman_user_id IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:0(样例对照);JSON字段:salesman_user_id'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.operator_id IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:2790687322443013(样例对照);JSON字段:operator_id'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.operator_name IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:收银员:郑丽珊(样例对照);JSON字段:operator_name'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.openSalesman IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:2(样例对照);JSON字段:openSalesman'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.returns_number IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:0(样例对照);JSON字段:returns_number'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.site_table_id IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:2793003705192517(样例对照);JSON字段:site_table_id'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_goods_business_id IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:2790683528317768(样例对照);JSON字段:tenant_goods_business_id'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_goods_category_id IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:2790683528350540(样例对照);JSON字段:tenant_goods_category_id'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.create_time IS '说明:同名 JSON 字段,业务含义详见 store_goods_sales_records-Analysis.md;示例:2025-11-09 23:35:57(样例对照);JSON字段:create_time'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.payload IS '说明:完整原始 JSON 记录快照;示例:原文 JSON(样例对照);JSON字段:整条记录'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.source_file IS '说明:ETL 元数据,记录原始导出文件名;示例:store_goods_sales_records.json(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.source_endpoint IS '说明:ETL 元数据,记录采集接口或下载 URL;示例:/api/xxx(样例对照);JSON字段:无(ETL元数据)'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.fetched_at IS '说明:ETL 入库时间戳;示例:2025-11-10 00:00:00+08(样例对照);JSON字段:无(ETL元数据)'; + diff --git a/tmp/etl_billiards_misc/tmp & Delete/schema_ODS_doc.sql.rewrite2.bak b/tmp/etl_billiards_misc/tmp & Delete/schema_ODS_doc.sql.rewrite2.bak new file mode 100644 index 0000000..b43bc12 --- /dev/null +++ b/tmp/etl_billiards_misc/tmp & Delete/schema_ODS_doc.sql.rewrite2.bak @@ -0,0 +1,1945 @@ +SET client_encoding TO "UTF8"; + +DROP SCHEMA IF EXISTS billiards_ods CASCADE; +CREATE SCHEMA IF NOT EXISTS billiards_ods; + +CREATE TABLE IF NOT EXISTS billiards_ods.member_profiles ( + tenant_id BIGINT, + register_site_id BIGINT, + site_name TEXT, + id BIGINT PRIMARY KEY, + system_member_id BIGINT, + member_card_grade_code BIGINT, + member_card_grade_name TEXT, + mobile TEXT, + nickname TEXT, + point NUMERIC(18,2), + growth_value NUMERIC(18,2), + referrer_member_id BIGINT, + status INT, + user_status INT, + create_time TIMESTAMP, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.member_profiles IS 'ODS 原始明细表:会员档案/会员账户信息。来源:C:/dev/LLTQ/export/test-json-doc/member_profiles.json;分析:member_profiles-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.member_profiles.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】tenant_id。'; +COMMENT ON COLUMN billiards_ods.member_profiles.register_site_id IS '【说明】会员的注册门店 ID。 【示例】2790685415443269(用于会员的注册门店 ID)。 【JSON字段】register_site_id。'; +COMMENT ON COLUMN billiards_ods.member_profiles.site_name IS '【说明】注册门店名称,属于冗余字段,用于直接展示。 【示例】朗朗桌球(注册门店名称,属于冗余字段,用于直接展示)。 【JSON字段】site_name。'; +COMMENT ON COLUMN billiards_ods.member_profiles.id IS '【说明】这是“租户内会员账户”的主键 ID。 【示例】2955204541320325(用于这是“租户内会员账户”的主键 ID)。 【JSON字段】id。'; +COMMENT ON COLUMN billiards_ods.member_profiles.system_member_id IS '【说明】这是“系统级会员 ID”,在全平台唯一,用来把一个会员在不同门店/不同卡类型下的账户统一到一个“人”的维度上。 【示例】2955204540009605(用于这是“系统级会员 ID”,在全平台唯一,用来把一个会员在不同门店/不同卡类型下的账户统一到一个“人”的维度上)。 【JSON字段】system_member_id。'; +COMMENT ON COLUMN billiards_ods.member_profiles.member_card_grade_code IS '【说明】这两个字段是成对出现的:一个数值码,一个中文名称。 【示例】2790683528022853(用于这两个字段是成对出现的:一个数值码,一个中文名称)。 【JSON字段】member_card_grade_code。'; +COMMENT ON COLUMN billiards_ods.member_profiles.member_card_grade_name IS '【说明】这是“会员卡种类/等级”的定义字段。 【示例】储值卡(用于这是“会员卡种类/等级”的定义字段)。 【JSON字段】member_card_grade_name。'; +COMMENT ON COLUMN billiards_ods.member_profiles.mobile IS '【说明】会员绑定的手机号码。 【示例】18620043391(用于会员绑定的手机号码)。 【JSON字段】mobile。'; +COMMENT ON COLUMN billiards_ods.member_profiles.nickname IS '【说明】会员在当前租户下的显示名称(可以是姓名,也可以是昵称)。 【示例】胡先生(用于会员在当前租户下的显示名称(可以是姓名,也可以是昵称))。 【JSON字段】nickname。'; +COMMENT ON COLUMN billiards_ods.member_profiles.point IS '【说明】当前积分余额(这条会员账户的积分值)。 【示例】0.0(用于当前积分余额(这条会员账户的积分值))。 【JSON字段】point。'; +COMMENT ON COLUMN billiards_ods.member_profiles.growth_value IS '【说明】成长值 / 经验值,用于会员等级晋升的累计指标。 【示例】0.0(成长值 / 经验值,用于会员等级晋升的累计指标)。 【JSON字段】growth_value。'; +COMMENT ON COLUMN billiards_ods.member_profiles.referrer_member_id IS '【说明】推荐人会员 ID,用于记录该会员是由哪位老会员推荐。 【示例】0(推荐人会员 ID,用于记录该会员是由哪位老会员推荐)。 【JSON字段】referrer_member_id。'; +COMMENT ON COLUMN billiards_ods.member_profiles.status IS '【说明】帐户状态(偏“卡状态/档案状态”)。 【示例】1(用于帐户状态(偏“卡状态/档案状态”))。 【JSON字段】status。'; +COMMENT ON COLUMN billiards_ods.member_profiles.user_status IS '【说明】用户账号状态(偏“用户逻辑”层面的状态)。 【示例】1(用于用户账号状态(偏“用户逻辑”层面的状态))。 【JSON字段】user_status。'; +COMMENT ON COLUMN billiards_ods.member_profiles.create_time IS '【说明】会员账户的创建时间(即这条档案/这张卡在系统中被创建的时间)。 【示例】2025-11-08 01:29:33(用于会员账户的创建时间(即这条档案/这张卡在系统中被创建的时间))。 【JSON字段】create_time。'; +COMMENT ON COLUMN billiards_ods.member_profiles.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】member_profiles.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.member_profiles.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/member_profiles.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.member_profiles.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.member_profiles.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。'; + + +CREATE TABLE IF NOT EXISTS billiards_ods.member_balance_changes ( + tenant_id BIGINT, + site_id BIGINT, + register_site_id BIGINT, + registerSiteName TEXT, + paySiteName TEXT, + id BIGINT PRIMARY KEY, + tenant_member_id BIGINT, + tenant_member_card_id BIGINT, + system_member_id BIGINT, + memberName TEXT, + memberMobile TEXT, + card_type_id BIGINT, + memberCardTypeName TEXT, + account_data NUMERIC(18,2), + before NUMERIC(18,2), + after NUMERIC(18,2), + refund_amount NUMERIC(18,2), + from_type INT, + payment_method INT, + relate_id BIGINT, + remark TEXT, + operator_id BIGINT, + operator_name TEXT, + is_delete INT, + create_time TIMESTAMP, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.member_balance_changes IS 'ODS 原始明细表:会员余额变更流水。来源:C:/dev/LLTQ/export/test-json-doc/member_balance_changes.json;分析:member_balance_changes-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.tenant_id IS '【说明】租户/商户 ID,本数据中是固定值(同一品牌/商户)。 【示例】2790683160709957(用于租户/商户 ID,本数据中是固定值(同一品牌/商户))。 【JSON字段】tenant_id。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.site_id IS '【说明】非 0:记录所属的具体门店 ID(与其他 JSON 内的 site_id 一致)。 【示例】2790685415443269(用于非 0:记录所属的具体门店 ID(与其他 JSON 内的 site_id 一致))。 【JSON字段】site_id。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.register_site_id IS '【说明】会员卡的“注册门店 ID”,即办卡所在门店。 【示例】2790685415443269(用于会员卡的“注册门店 ID”,即办卡所在门店)。 【JSON字段】register_site_id。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.registerSiteName IS '【说明】卡片的注册门店名称(办卡地点),和 register_site_id 配套。 【示例】朗朗桌球(用于卡片的注册门店名称(办卡地点),和 register_site_id 配套)。 【JSON字段】registerSiteName。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.paySiteName IS '【说明】发生本次余额变更的门店名称(即本次消费/充值所在门店)。 【示例】朗朗桌球(用于发生本次余额变更的门店名称(即本次消费/充值所在门店))。 【JSON字段】paySiteName。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.id IS '【说明】余额变更记录的主键 ID,唯一标识这一条“账户余额变化事件”。 【示例】2957881605869253(用于余额变更记录的主键 ID,唯一标识这一条“账户余额变化事件”)。 【JSON字段】id。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.tenant_member_id IS '【说明】商户维度的会员 ID(租户内会员主键)。 【示例】2799212845565701(用于商户维度的会员 ID(租户内会员主键))。 【JSON字段】tenant_member_id。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.tenant_member_card_id IS '【说明】会员卡账户 ID,在租户内唯一标识某张卡。 【示例】2799219999295237(用于会员卡账户 ID,在租户内唯一标识某张卡)。 【JSON字段】tenant_member_card_id。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.system_member_id IS '【说明】系统级(全局)会员 ID。 【示例】2799212844549893(用于系统级(全局)会员 ID)。 【JSON字段】system_member_id。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.memberName IS '【说明】会员姓名或称呼(非昵称字段)。 【示例】曾丹烨(用于会员姓名或称呼(非昵称字段))。 【JSON字段】memberName。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.memberMobile IS '【说明】会员手机号。 【示例】13922213242(用于会员手机号)。 【JSON字段】memberMobile。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.card_type_id IS '【说明】卡种类型 ID,用于区分不同卡种。 【示例】2793249295533893(卡种类型 ID,用于区分不同卡种)。 【JSON字段】card_type_id。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.memberCardTypeName IS '【说明】卡种名称,与 card_type_id 一一对应,是一个 卡种枚举名称。 【示例】储值卡(用于卡种名称,与 card_type_id 一一对应,是一个 卡种枚举名称)。 【JSON字段】memberCardTypeName。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.account_data IS '【说明】本次变动的金额(元),正数表示增加,负数表示减少。 【示例】-120.0(用于本次变动的金额(元),正数表示增加,负数表示减少)。 【JSON字段】account_data。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.before IS '【说明】本次变动前,该卡账户的余额(元)。 【示例】816.3(用于本次变动前,该卡账户的余额(元))。 【JSON字段】before。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.after IS '【说明】本次变动后,该卡账户的余额(元)。 【示例】696.3(用于本次变动后,该卡账户的余额(元))。 【JSON字段】after。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.refund_amount IS '【说明】可能用于标记“其中有多少金额是以‘退款’形式回流的”,或区分“退回余额”和“原路退回”两种模式。 【示例】0.0(可能用于标记“其中有多少金额是以‘退款’形式回流的”,或区分“退回余额”和“原路退回”两种模式)。 【JSON字段】refund_amount。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.from_type IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】from_type。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.payment_method IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】0(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】payment_method。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.relate_id IS '【说明】例如某次充值记录的 ID、某张订单/结算单 ID、某次活动抵用券核销记录 ID 等。 【示例】2957881518788421(用于例如某次充值记录的 ID、某张订单/结算单 ID、某次活动抵用券核销记录 ID 等)。 【JSON字段】relate_id。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.remark IS '【说明】当为空时,说明这条变动没有额外备注说明。 【示例】充值退款(用于当为空时,说明这条变动没有额外备注说明)。 【JSON字段】remark。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.operator_id IS '【说明】执行此次余额变更操作的员工 ID。 【示例】2790687322443013(用于执行此次余额变更操作的员工 ID)。 【JSON字段】operator_id。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.operator_name IS '【说明】操作员姓名(带职位前缀),是对 operator_id 的可读冗余字段。 【示例】收银员:郑丽珊(用于操作员姓名(带职位前缀),是对 operator_id 的可读冗余字段)。 【JSON字段】operator_name。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.is_delete IS '【说明】逻辑删除标记(0=否,1=是)。。 【示例】0(用于逻辑删除标记(0=否,1=是))。 【JSON字段】is_delete。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.create_time IS '【说明】本条余额变更记录的创建时间,通常接近交易发生时间。 【示例】2025-11-09 22:52:48(用于本条余额变更记录的创建时间,通常接近交易发生时间)。 【JSON字段】create_time。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】member_balance_changes.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/member_balance_changes.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。'; + + +CREATE TABLE IF NOT EXISTS billiards_ods.member_stored_value_cards ( + tenant_id BIGINT, + tenant_member_id BIGINT, + system_member_id BIGINT, + register_site_id BIGINT, + site_name TEXT, + id BIGINT PRIMARY KEY, + member_card_grade_code BIGINT, + member_card_grade_code_name TEXT, + member_card_type_name TEXT, + member_name TEXT, + member_mobile TEXT, + card_type_id BIGINT, + card_no TEXT, + card_physics_type TEXT, + balance NUMERIC(18,2), + denomination NUMERIC(18,2), + table_discount NUMERIC(10,4), + goods_discount NUMERIC(10,4), + assistant_discount NUMERIC(10,4), + assistant_reward_discount NUMERIC(10,4), + table_service_discount NUMERIC(10,4), + assistant_service_discount NUMERIC(10,4), + coupon_discount NUMERIC(10,4), + goods_service_discount NUMERIC(10,4), + assistant_discount_sub_switch INT, + table_discount_sub_switch INT, + goods_discount_sub_switch INT, + assistant_reward_discount_sub_switch INT, + table_service_deduct_radio NUMERIC(10,4), + assistant_service_deduct_radio NUMERIC(10,4), + goods_service_deduct_radio NUMERIC(10,4), + assistant_deduct_radio NUMERIC(10,4), + table_deduct_radio NUMERIC(10,4), + goods_deduct_radio NUMERIC(10,4), + coupon_deduct_radio NUMERIC(10,4), + assistant_reward_deduct_radio NUMERIC(10,4), + tableCardDeduct NUMERIC(18,2), + tableServiceCardDeduct NUMERIC(18,2), + goodsCarDeduct NUMERIC(18,2), + goodsServiceCardDeduct NUMERIC(18,2), + assistantCardDeduct NUMERIC(18,2), + assistantServiceCardDeduct NUMERIC(18,2), + assistantRewardCardDeduct NUMERIC(18,2), + cardSettleDeduct NUMERIC(18,2), + couponCardDeduct NUMERIC(18,2), + deliveryFeeDeduct NUMERIC(18,2), + use_scene INT, + able_cross_site INT, + able_site_transfer INT, + is_allow_give INT, + is_allow_order_deduct INT, + is_delete INT, + bind_password TEXT, + goods_discount_range_type INT, + goodsCategoryId BIGINT, + tableAreaId BIGINT, + effect_site_id BIGINT, + start_time TIMESTAMP, + end_time TIMESTAMP, + disable_start_time TIMESTAMP, + disable_end_time TIMESTAMP, + last_consume_time TIMESTAMP, + create_time TIMESTAMP, + status INT, + sort INT, + tenantAvatar TEXT, + tenantName TEXT, + pdAssisnatLevel TEXT, + cxAssisnatLevel TEXT, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.member_stored_value_cards IS 'ODS 原始明细表:会员储值/卡券账户列表。来源:C:/dev/LLTQ/export/test-json-doc/member_stored_value_cards.json;分析:member_stored_value_cards-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenant_id IS '【说明】租户/品牌 ID,与其他 JSON 中 tenant_id 一致。 【示例】2790683160709957(用于租户/品牌 ID,与其他 JSON 中 tenant_id 一致)。 【JSON字段】tenant_id。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenant_member_id IS '【说明】当前商户(品牌/租户)中会员的主键 ID。 【示例】2955204541320325(用于当前商户(品牌/租户)中会员的主键 ID)。 【JSON字段】tenant_member_id。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.system_member_id IS '【说明】系统级会员 ID(跨门店统一主键)。 【示例】2955204540009605(用于系统级会员 ID(跨门店统一主键))。 【JSON字段】system_member_id。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.register_site_id IS '【说明】卡首次办理的门店 ID。 【示例】2790685415443269(用于卡首次办理的门店 ID)。 【JSON字段】register_site_id。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.site_name IS '【说明】卡归属门店名称(视图中的展示字段)。 【示例】朗朗桌球(用于卡归属门店名称(视图中的展示字段))。 【JSON字段】site_name。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.id IS '【说明】本表主键 ID,用于唯一标识一条记录。 【示例】2955206162843781(本表主键 ID,用于唯一标识一条记录)。 【JSON字段】id。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_card_grade_code IS '【说明】卡等级/卡类代码,和下面两个名称字段一一对应。 【示例】2790683528022856(用于卡等级/卡类代码,和下面两个名称字段一一对应)。 【JSON字段】member_card_grade_code。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_card_grade_code_name IS '【说明】卡等级/卡类名称。 【示例】活动抵用券(用于卡等级/卡类名称)。 【JSON字段】member_card_grade_code_name。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_card_type_name IS '【说明】卡类型名称,实际与 member_card_grade_code_name 一致。 【示例】活动抵用券(用于卡类型名称,实际与 member_card_grade_code_name 一致)。 【JSON字段】member_card_type_name。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_name IS '【说明】持卡会员姓名快照。 【示例】胡先生(用于持卡会员姓名快照)。 【JSON字段】member_name。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_mobile IS '【说明】持卡会员手机号快照。 【示例】18620043391(用于持卡会员手机号快照)。 【JSON字段】member_mobile。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.card_type_id IS '【说明】卡种 ID(定义“这是哪一种卡”)。 【示例】2793266846533445(用于卡种 ID(定义“这是哪一种卡”))。 【JSON字段】card_type_id。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.card_no IS '【说明】实体卡物理卡号/条码号。 【示例】NULL(用于实体卡物理卡号/条码号)。 【JSON字段】card_no。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.card_physics_type IS '【说明】物理卡类型。 【示例】1(用于物理卡类型)。 【JSON字段】card_physics_type。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.balance IS '【说明】当前卡内余额(主要针对储值卡、部分券卡)。 【示例】0.0(用于当前卡内余额(主要针对储值卡、部分券卡))。 【JSON字段】balance。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.denomination IS '【说明】采用“几折”的记法:10=不打折,9=九折,8=八折。 【示例】0.0(用于采用“几折”的记法:10=不打折,9=九折,8=八折)。 【JSON字段】denomination。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【JSON字段】table_discount。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【JSON字段】goods_discount。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【JSON字段】assistant_discount。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_reward_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【JSON字段】assistant_reward_discount。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_service_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【JSON字段】table_service_discount。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_service_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【JSON字段】assistant_service_discount。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.coupon_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【JSON字段】coupon_discount。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_service_discount IS '【说明】数量/时长字段,用于统计与计量。 【示例】10.0(数量/时长字段,用于统计与计量)。 【JSON字段】goods_service_discount。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_discount_sub_switch IS '【说明】数量/时长字段,用于统计与计量。 【示例】2(数量/时长字段,用于统计与计量)。 【JSON字段】assistant_discount_sub_switch。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_discount_sub_switch IS '【说明】数量/时长字段,用于统计与计量。 【示例】2(数量/时长字段,用于统计与计量)。 【JSON字段】table_discount_sub_switch。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_discount_sub_switch IS '【说明】数量/时长字段,用于统计与计量。 【示例】2(数量/时长字段,用于统计与计量)。 【JSON字段】goods_discount_sub_switch。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_reward_discount_sub_switch IS '【说明】数量/时长字段,用于统计与计量。 【示例】2(数量/时长字段,用于统计与计量)。 【JSON字段】assistant_reward_discount_sub_switch。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_service_deduct_radio IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】100.0(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】table_service_deduct_radio。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_service_deduct_radio IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】100.0(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】assistant_service_deduct_radio。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_service_deduct_radio IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】100.0(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】goods_service_deduct_radio。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_deduct_radio IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】100.0(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】assistant_deduct_radio。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_deduct_radio IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】100.0(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】table_deduct_radio。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_deduct_radio IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】100.0(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】goods_deduct_radio。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.coupon_deduct_radio IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】100.0(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】coupon_deduct_radio。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_reward_deduct_radio IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】100.0(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】assistant_reward_deduct_radio。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tableCardDeduct IS '【说明】针对台费/商品/助教三类消费的扣卡金额配置(类似“每小时从卡里扣 xx 元”或“每次抵扣 xx 元”的规则)。 【示例】0.0(用于针对台费/商品/助教三类消费的扣卡金额配置(类似“每小时从卡里扣 xx 元”或“每次抵扣 xx 元”的规则))。 【JSON字段】tableCardDeduct。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tableServiceCardDeduct IS '【说明】如果系统中区分“储值金、服务金、奖励金”等子账户,这三个字段对应“服务金”子账户的扣款配置。 【示例】0.0(用于如果系统中区分“储值金、服务金、奖励金”等子账户,这三个字段对应“服务金”子账户的扣款配置)。 【JSON字段】tableServiceCardDeduct。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goodsCarDeduct IS '【说明】针对台费/商品/助教三类消费的扣卡金额配置(类似“每小时从卡里扣 xx 元”或“每次抵扣 xx 元”的规则)。 【示例】0.0(用于针对台费/商品/助教三类消费的扣卡金额配置(类似“每小时从卡里扣 xx 元”或“每次抵扣 xx 元”的规则))。 【JSON字段】goodsCarDeduct。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goodsServiceCardDeduct IS '【说明】如果系统中区分“储值金、服务金、奖励金”等子账户,这三个字段对应“服务金”子账户的扣款配置。 【示例】0.0(用于如果系统中区分“储值金、服务金、奖励金”等子账户,这三个字段对应“服务金”子账户的扣款配置)。 【JSON字段】goodsServiceCardDeduct。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistantCardDeduct IS '【说明】针对台费/商品/助教三类消费的扣卡金额配置(类似“每小时从卡里扣 xx 元”或“每次抵扣 xx 元”的规则)。 【示例】0.0(用于针对台费/商品/助教三类消费的扣卡金额配置(类似“每小时从卡里扣 xx 元”或“每次抵扣 xx 元”的规则))。 【JSON字段】assistantCardDeduct。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistantServiceCardDeduct IS '【说明】如果系统中区分“储值金、服务金、奖励金”等子账户,这三个字段对应“服务金”子账户的扣款配置。 【示例】0.0(用于如果系统中区分“储值金、服务金、奖励金”等子账户,这三个字段对应“服务金”子账户的扣款配置)。 【JSON字段】assistantServiceCardDeduct。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistantRewardCardDeduct IS '【说明】助教奖励金方向扣款的配置。 【示例】0.0(用于助教奖励金方向扣款的配置)。 【JSON字段】assistantRewardCardDeduct。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.cardSettleDeduct IS '【说明】结算时从卡中扣除的金额上限/规则配置(视图级。 【示例】0.0(用于结算时从卡中扣除的金额上限/规则配置(视图级)。 【JSON字段】cardSettleDeduct。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.couponCardDeduct IS '【说明】与卡绑定的“券额度扣除配置”。 【示例】0.0(用于与卡绑定的“券额度扣除配置”)。 【JSON字段】couponCardDeduct。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.deliveryFeeDeduct IS '【说明】配送费可否/多少从卡中抵扣,目前无业务发生。 【示例】0.0(用于配送费可否/多少从卡中抵扣,目前无业务发生)。 【JSON字段】deliveryFeeDeduct。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.use_scene IS '【说明】卡使用场景说明(比如“仅店内使用”“仅团建”等),本门店尚未使用此字段。 【示例】NULL(用于卡使用场景说明(比如“仅店内使用”“仅团建”等),本门店尚未使用此字段)。 【JSON字段】use_scene。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.able_cross_site IS '【说明】是否允许跨店使用。 【示例】1(用于是否允许跨店使用)。 【JSON字段】able_cross_site。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.able_site_transfer IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。 【示例】NULL(布尔/开关字段,用于表示权限、可用性或状态开关)。 【JSON字段】able_site_transfer。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.is_allow_give IS '【说明】是否允许转赠/转让给其他会员。 【示例】0(用于是否允许转赠/转让给其他会员)。 【JSON字段】is_allow_give。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.is_allow_order_deduct IS '【说明】是否允许在“订单层面统一扣款”。 【示例】0(用于是否允许在“订单层面统一扣款”)。 【JSON字段】is_allow_order_deduct。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.is_delete IS '【说明】逻辑删除标志。 【示例】0(用于逻辑删除标志)。 【JSON字段】is_delete。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.bind_password IS '【说明】卡绑定密码,用于消费或查询验证(目前未启用)。 【示例】NULL(卡绑定密码,用于消费或查询验证(目前未启用))。 【JSON字段】bind_password。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_discount_range_type IS '【说明】数量/时长字段,用于统计与计量。 【示例】1(数量/时长字段,用于统计与计量)。 【JSON字段】goods_discount_range_type。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goodsCategoryId IS '【说明】可用的商品分类 ID 列表。 【示例】[](用于可用的商品分类 ID 列表)。 【JSON字段】goodsCategoryId。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tableAreaId IS '【说明】限定可使用的台区 ID 列表。 【示例】[](用于限定可使用的台区 ID 列表)。 【JSON字段】tableAreaId。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.effect_site_id IS '【说明】卡片限定生效门店 ID。 【示例】0(用于卡片限定生效门店 ID)。 【JSON字段】effect_site_id。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.start_time IS '【说明】卡片生效开始时间(有效期起始)。 【示例】2025-11-08 01:31:12(用于卡片生效开始时间(有效期起始))。 【JSON字段】start_time。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.end_time IS '【说明】卡片有效期结束时间。 【示例】2225-01-01 00:00:00(用于卡片有效期结束时间)。 【JSON字段】end_time。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.disable_start_time IS '【说明】停用时间段(比如临时冻结卡的起止时间)。 【示例】0001-01-01 00:00:00(用于停用时间段(比如临时冻结卡的起止时间))。 【JSON字段】disable_start_time。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.disable_end_time IS '【说明】停用时间段(比如临时冻结卡的起止时间)。 【示例】0001-01-01 00:00:00(用于停用时间段(比如临时冻结卡的起止时间))。 【JSON字段】disable_end_time。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.last_consume_time IS '【说明】最近一次消费时间。 【示例】2025-11-09 07:48:23(用于最近一次消费时间)。 【JSON字段】last_consume_time。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.create_time IS '【说明】卡片创建时间(开卡时间)。 【示例】2025-11-08 01:31:12(用于卡片创建时间(开卡时间))。 【JSON字段】create_time。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.status IS '【说明】状态枚举,用于标识记录当前业务状态。。 【示例】1(状态枚举,用于标识记录当前业务状态。)。 【JSON字段】status。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.sort IS '【说明】在前端展示或某些列表中的排序权重。 【示例】1(用于在前端展示或某些列表中的排序权重)。 【JSON字段】sort。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenantAvatar IS '【说明】品牌头像 URL(未配置)。 【示例】NULL(用于品牌头像 URL(未配置))。 【JSON字段】tenantAvatar。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenantName IS '【说明】租户/品牌名称(当前导出为空)。 【示例】NULL(用于租户/品牌名称(当前导出为空))。 【JSON字段】tenantName。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.pdAssisnatLevel IS '【说明】允许使用的“陪打/助教等级”列表。 【示例】[](用于允许使用的“陪打/助教等级”列表)。 【JSON字段】pdAssisnatLevel。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.cxAssisnatLevel IS '【说明】可能是“促销活动中的助教等级限制”(命名中 cx 多为“促销”缩写)。 【示例】[](用于可能是“促销活动中的助教等级限制”(命名中 cx 多为“促销”缩写))。 【JSON字段】cxAssisnatLevel。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】member_stored_value_cards.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/member_stored_value_cards.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。'; + + +CREATE TABLE IF NOT EXISTS billiards_ods.recharge_settlements ( + id BIGINT PRIMARY KEY, + tenantid BIGINT, + siteid BIGINT, + sitename TEXT, + balanceamount NUMERIC(18,2), + cardamount NUMERIC(18,2), + cashamount NUMERIC(18,2), + couponamount NUMERIC(18,2), + createtime TIMESTAMPTZ, + memberid BIGINT, + membername TEXT, + tenantmembercardid BIGINT, + membercardtypename TEXT, + memberphone TEXT, + tableid BIGINT, + consumemoney NUMERIC(18,2), + onlineamount NUMERIC(18,2), + operatorid BIGINT, + operatorname TEXT, + revokeorderid BIGINT, + revokeordername TEXT, + revoketime TIMESTAMPTZ, + payamount NUMERIC(18,2), + pointamount NUMERIC(18,2), + refundamount NUMERIC(18,2), + settlename TEXT, + settlerelateid BIGINT, + settlestatus INT, + settletype INT, + paytime TIMESTAMPTZ, + roundingamount NUMERIC(18,2), + paymentmethod INT, + adjustamount NUMERIC(18,2), + assistantcxmoney NUMERIC(18,2), + assistantpdmoney NUMERIC(18,2), + couponsaleamount NUMERIC(18,2), + memberdiscountamount NUMERIC(18,2), + tablechargemoney NUMERIC(18,2), + goodsmoney NUMERIC(18,2), + realgoodsmoney NUMERIC(18,2), + servicemoney NUMERIC(18,2), + prepaymoney NUMERIC(18,2), + salesmanname TEXT, + orderremark TEXT, + salesmanuserid BIGINT, + canberevoked BOOLEAN, + pointdiscountprice NUMERIC(18,2), + pointdiscountcost NUMERIC(18,2), + activitydiscount NUMERIC(18,2), + serialnumber BIGINT, + assistantmanualdiscount NUMERIC(18,2), + allcoupondiscount NUMERIC(18,2), + goodspromotionmoney NUMERIC(18,2), + assistantpromotionmoney NUMERIC(18,2), + isusecoupon BOOLEAN, + isusediscount BOOLEAN, + isactivity BOOLEAN, + isbindmember BOOLEAN, + isfirst INT, + rechargecardamount NUMERIC(18,2), + giftcardamount NUMERIC(18,2), + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.recharge_settlements IS 'ODS 原始明细表:充值结算记录。来源:C:/dev/LLTQ/export/test-json-doc/recharge_settlements.json;分析:recharge_settlements-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.id IS '【说明】门店 ID。 【示例】NULL(用于门店 ID)。 【JSON字段】id。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.tenantid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】tenantid。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.siteid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】siteid。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.sitename IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】sitename。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.balanceamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】balanceamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.cardamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】cardamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.cashamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】cashamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.couponamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】couponamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.createtime IS '【说明】时间字段,用于记录业务时间点/发生时间。 【示例】NULL(时间字段,用于记录业务时间点/发生时间)。 【JSON字段】createtime。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.memberid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】memberid。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.membername IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】membername。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.tenantmembercardid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】tenantmembercardid。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.membercardtypename IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】membercardtypename。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.memberphone IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】memberphone。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.tableid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】tableid。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.consumemoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】consumemoney。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.onlineamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】onlineamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.operatorid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】operatorid。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.operatorname IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】operatorname。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.revokeorderid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】revokeorderid。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.revokeordername IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】revokeordername。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.revoketime IS '【说明】时间字段,用于记录业务时间点/发生时间。 【示例】NULL(时间字段,用于记录业务时间点/发生时间)。 【JSON字段】revoketime。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.payamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】payamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.pointamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】pointamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.refundamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】refundamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.settlename IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】settlename。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.settlerelateid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settlerelateid。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.settlestatus IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settlestatus。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.settletype IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settletype。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.paytime IS '【说明】时间字段,用于记录业务时间点/发生时间。 【示例】NULL(时间字段,用于记录业务时间点/发生时间)。 【JSON字段】paytime。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.roundingamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】roundingamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.paymentmethod IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】paymentmethod。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.adjustamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】adjustamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.assistantcxmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】assistantcxmoney。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.assistantpdmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】assistantpdmoney。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.couponsaleamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】couponsaleamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.memberdiscountamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】memberdiscountamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.tablechargemoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】tablechargemoney。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.goodsmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】goodsmoney。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.realgoodsmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】realgoodsmoney。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.servicemoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】servicemoney。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.prepaymoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】prepaymoney。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.salesmanname IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】salesmanname。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.orderremark IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】orderremark。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.salesmanuserid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】salesmanuserid。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.canberevoked IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】canberevoked。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.pointdiscountprice IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】pointdiscountprice。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.pointdiscountcost IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】pointdiscountcost。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.activitydiscount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【JSON字段】activitydiscount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.serialnumber IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【JSON字段】serialnumber。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.assistantmanualdiscount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【JSON字段】assistantmanualdiscount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.allcoupondiscount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【JSON字段】allcoupondiscount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.goodspromotionmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】goodspromotionmoney。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.assistantpromotionmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】assistantpromotionmoney。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.isusecoupon IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】isusecoupon。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.isusediscount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【JSON字段】isusediscount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.isactivity IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】isactivity。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.isbindmember IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】isbindmember。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.isfirst IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】isfirst。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.rechargecardamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】rechargecardamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.giftcardamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】giftcardamount。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】recharge_settlements.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/recharge_settlements.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。'; + + +CREATE TABLE IF NOT EXISTS billiards_ods.settlement_records ( + id BIGINT PRIMARY KEY, + tenantid BIGINT, + siteid BIGINT, + sitename TEXT, + balanceamount NUMERIC(18,2), + cardamount NUMERIC(18,2), + cashamount NUMERIC(18,2), + couponamount NUMERIC(18,2), + createtime TIMESTAMPTZ, + memberid BIGINT, + membername TEXT, + tenantmembercardid BIGINT, + membercardtypename TEXT, + memberphone TEXT, + tableid BIGINT, + consumemoney NUMERIC(18,2), + onlineamount NUMERIC(18,2), + operatorid BIGINT, + operatorname TEXT, + revokeorderid BIGINT, + revokeordername TEXT, + revoketime TIMESTAMPTZ, + payamount NUMERIC(18,2), + pointamount NUMERIC(18,2), + refundamount NUMERIC(18,2), + settlename TEXT, + settlerelateid BIGINT, + settlestatus INT, + settletype INT, + paytime TIMESTAMPTZ, + roundingamount NUMERIC(18,2), + paymentmethod INT, + adjustamount NUMERIC(18,2), + assistantcxmoney NUMERIC(18,2), + assistantpdmoney NUMERIC(18,2), + couponsaleamount NUMERIC(18,2), + memberdiscountamount NUMERIC(18,2), + tablechargemoney NUMERIC(18,2), + goodsmoney NUMERIC(18,2), + realgoodsmoney NUMERIC(18,2), + servicemoney NUMERIC(18,2), + prepaymoney NUMERIC(18,2), + salesmanname TEXT, + orderremark TEXT, + salesmanuserid BIGINT, + canberevoked BOOLEAN, + pointdiscountprice NUMERIC(18,2), + pointdiscountcost NUMERIC(18,2), + activitydiscount NUMERIC(18,2), + serialnumber BIGINT, + assistantmanualdiscount NUMERIC(18,2), + allcoupondiscount NUMERIC(18,2), + goodspromotionmoney NUMERIC(18,2), + assistantpromotionmoney NUMERIC(18,2), + isusecoupon BOOLEAN, + isusediscount BOOLEAN, + isactivity BOOLEAN, + isbindmember BOOLEAN, + isfirst INT, + rechargecardamount NUMERIC(18,2), + giftcardamount NUMERIC(18,2), + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.settlement_records IS 'ODS 原始明细表:结账/结算记录。来源:C:/dev/LLTQ/export/test-json-doc/settlement_records.json;分析:settlement_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.settlement_records.id IS '【说明】结账记录主键 ID(订单结算 ID)。 【示例】NULL(用于结账记录主键 ID(订单结算 ID))。 【JSON字段】id。'; +COMMENT ON COLUMN billiards_ods.settlement_records.tenantid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】tenantid。'; +COMMENT ON COLUMN billiards_ods.settlement_records.siteid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】siteid。'; +COMMENT ON COLUMN billiards_ods.settlement_records.sitename IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】sitename。'; +COMMENT ON COLUMN billiards_ods.settlement_records.balanceamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】balanceamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.cardamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】cardamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.cashamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】cashamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.couponamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】couponamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.createtime IS '【说明】时间字段,用于记录业务时间点/发生时间。 【示例】NULL(时间字段,用于记录业务时间点/发生时间)。 【JSON字段】createtime。'; +COMMENT ON COLUMN billiards_ods.settlement_records.memberid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】memberid。'; +COMMENT ON COLUMN billiards_ods.settlement_records.membername IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】membername。'; +COMMENT ON COLUMN billiards_ods.settlement_records.tenantmembercardid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】tenantmembercardid。'; +COMMENT ON COLUMN billiards_ods.settlement_records.membercardtypename IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】membercardtypename。'; +COMMENT ON COLUMN billiards_ods.settlement_records.memberphone IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】memberphone。'; +COMMENT ON COLUMN billiards_ods.settlement_records.tableid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】tableid。'; +COMMENT ON COLUMN billiards_ods.settlement_records.consumemoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】consumemoney。'; +COMMENT ON COLUMN billiards_ods.settlement_records.onlineamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】onlineamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.operatorid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】operatorid。'; +COMMENT ON COLUMN billiards_ods.settlement_records.operatorname IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】operatorname。'; +COMMENT ON COLUMN billiards_ods.settlement_records.revokeorderid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】revokeorderid。'; +COMMENT ON COLUMN billiards_ods.settlement_records.revokeordername IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】revokeordername。'; +COMMENT ON COLUMN billiards_ods.settlement_records.revoketime IS '【说明】时间字段,用于记录业务时间点/发生时间。 【示例】NULL(时间字段,用于记录业务时间点/发生时间)。 【JSON字段】revoketime。'; +COMMENT ON COLUMN billiards_ods.settlement_records.payamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】payamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.pointamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】pointamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.refundamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】refundamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.settlename IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】settlename。'; +COMMENT ON COLUMN billiards_ods.settlement_records.settlerelateid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settlerelateid。'; +COMMENT ON COLUMN billiards_ods.settlement_records.settlestatus IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settlestatus。'; +COMMENT ON COLUMN billiards_ods.settlement_records.settletype IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】settletype。'; +COMMENT ON COLUMN billiards_ods.settlement_records.paytime IS '【说明】时间字段,用于记录业务时间点/发生时间。 【示例】NULL(时间字段,用于记录业务时间点/发生时间)。 【JSON字段】paytime。'; +COMMENT ON COLUMN billiards_ods.settlement_records.roundingamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】roundingamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.paymentmethod IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】paymentmethod。'; +COMMENT ON COLUMN billiards_ods.settlement_records.adjustamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】adjustamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.assistantcxmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】assistantcxmoney。'; +COMMENT ON COLUMN billiards_ods.settlement_records.assistantpdmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】assistantpdmoney。'; +COMMENT ON COLUMN billiards_ods.settlement_records.couponsaleamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】couponsaleamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.memberdiscountamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】memberdiscountamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.tablechargemoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】tablechargemoney。'; +COMMENT ON COLUMN billiards_ods.settlement_records.goodsmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】goodsmoney。'; +COMMENT ON COLUMN billiards_ods.settlement_records.realgoodsmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】realgoodsmoney。'; +COMMENT ON COLUMN billiards_ods.settlement_records.servicemoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】servicemoney。'; +COMMENT ON COLUMN billiards_ods.settlement_records.prepaymoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】prepaymoney。'; +COMMENT ON COLUMN billiards_ods.settlement_records.salesmanname IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】salesmanname。'; +COMMENT ON COLUMN billiards_ods.settlement_records.orderremark IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】orderremark。'; +COMMENT ON COLUMN billiards_ods.settlement_records.salesmanuserid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】salesmanuserid。'; +COMMENT ON COLUMN billiards_ods.settlement_records.canberevoked IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】canberevoked。'; +COMMENT ON COLUMN billiards_ods.settlement_records.pointdiscountprice IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】pointdiscountprice。'; +COMMENT ON COLUMN billiards_ods.settlement_records.pointdiscountcost IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】pointdiscountcost。'; +COMMENT ON COLUMN billiards_ods.settlement_records.activitydiscount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【JSON字段】activitydiscount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.serialnumber IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【JSON字段】serialnumber。'; +COMMENT ON COLUMN billiards_ods.settlement_records.assistantmanualdiscount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【JSON字段】assistantmanualdiscount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.allcoupondiscount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【JSON字段】allcoupondiscount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.goodspromotionmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】goodspromotionmoney。'; +COMMENT ON COLUMN billiards_ods.settlement_records.assistantpromotionmoney IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】assistantpromotionmoney。'; +COMMENT ON COLUMN billiards_ods.settlement_records.isusecoupon IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】isusecoupon。'; +COMMENT ON COLUMN billiards_ods.settlement_records.isusediscount IS '【说明】数量/时长字段,用于统计与计量。 【示例】NULL(数量/时长字段,用于统计与计量)。 【JSON字段】isusediscount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.isactivity IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】isactivity。'; +COMMENT ON COLUMN billiards_ods.settlement_records.isbindmember IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】isbindmember。'; +COMMENT ON COLUMN billiards_ods.settlement_records.isfirst IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】isfirst。'; +COMMENT ON COLUMN billiards_ods.settlement_records.rechargecardamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】rechargecardamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.giftcardamount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。 【示例】NULL(金额字段,用于计费/结算/分摊等金额计算)。 【JSON字段】giftcardamount。'; +COMMENT ON COLUMN billiards_ods.settlement_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】settlement_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.settlement_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/settlement_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.settlement_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.settlement_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。'; + + +CREATE TABLE IF NOT EXISTS billiards_ods.assistant_cancellation_records ( + id BIGINT PRIMARY KEY, + siteId BIGINT, + siteProfile JSONB, + assistantName TEXT, + assistantAbolishAmount NUMERIC(18,2), + assistantOn INT, + pdChargeMinutes INT, + tableAreaId BIGINT, + tableArea TEXT, + tableId BIGINT, + tableName TEXT, + trashReason TEXT, + createTime TIMESTAMP, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.assistant_cancellation_records IS 'ODS 原始明细表:助教作废/取消记录。来源:C:/dev/LLTQ/export/test-json-doc/assistant_cancellation_records.json;分析:assistant_cancellation_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.id IS '【说明】本表主键 ID,用于唯一标识一条记录。 【示例】2957675849518789(本表主键 ID,用于唯一标识一条记录)。 【JSON字段】id。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.siteId IS '【说明】门店 ID,即该废除记录所在门店。 【示例】2790685415443269(用于门店 ID,即该废除记录所在门店)。 【JSON字段】siteId。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.siteProfile IS '【说明】门店信息快照。 【示例】{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "avatar": "https://oss.ficoo.vip/admin/hXcE4E…(用于门店信息快照)。 【JSON字段】siteProfile。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.assistantName IS '【说明】助教姓名/对外展示名称。 【示例】泡芙(用于助教姓名/对外展示名称)。 【JSON字段】assistantName。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.assistantAbolishAmount IS '【说明】与“助教废除”关联的金额字段。 【示例】5.83(用于与“助教废除”关联的金额字段)。 【JSON字段】assistantAbolishAmount。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.assistantOn IS '【说明】助教编号(工号/序号)。 【示例】27(用于助教编号(工号/序号))。 【JSON字段】assistantOn。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.pdChargeMinutes IS '【说明】“已发生的计费时长(分钟)”,即这次助教服务在被废除前已经累计了多少分钟。 【示例】214(用于“已发生的计费时长(分钟)”,即这次助教服务在被废除前已经累计了多少分钟)。 【JSON字段】pdChargeMinutes。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.tableAreaId IS '【说明】台桌所在区域 ID。 【示例】2791963816579205(用于台桌所在区域 ID)。 【JSON字段】tableAreaId。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.tableArea IS '【说明】台桌所属区域名称。 【示例】C区(用于台桌所属区域名称)。 【JSON字段】tableArea。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.tableId IS '【说明】球台/桌子的 ID。 【示例】2793016660660357(用于球台/桌子的 ID)。 【JSON字段】tableId。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.tableName IS '【说明】台桌名称/编号,供人阅读。 【示例】C1(用于台桌名称/编号,供人阅读)。 【JSON字段】tableName。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.trashReason IS '【说明】用于记录“废除原因”的文本描述,例如“顾客临时有事取消”“录入错误”“更换助教”等。 【示例】NULL(用于记录“废除原因”的文本描述,例如“顾客临时有事取消”“录入错误”“更换助教”等)。 【JSON字段】trashReason。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.createTime IS '【说明】这条“助教废除记录”被创建的时间,即系统正式记录“废除”操作的时刻。 【示例】2025-11-09 19:23:29(用于这条“助教废除记录”被创建的时间,即系统正式记录“废除”操作的时刻)。 【JSON字段】createTime。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】assistant_cancellation_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/assistant_cancellation_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。'; + + +CREATE TABLE IF NOT EXISTS billiards_ods.assistant_accounts_master ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + site_id BIGINT, + assistant_no TEXT, + nickname TEXT, + real_name TEXT, + mobile TEXT, + team_id BIGINT, + team_name TEXT, + user_id BIGINT, + level TEXT, + assistant_status INT, + work_status INT, + leave_status INT, + entry_time TIMESTAMP, + resign_time TIMESTAMP, + start_time TIMESTAMP, + end_time TIMESTAMP, + create_time TIMESTAMP, + update_time TIMESTAMP, + order_trade_no TEXT, + staff_id BIGINT, + staff_profile_id BIGINT, + system_role_id BIGINT, + avatar TEXT, + birth_date TIMESTAMP, + gender INT, + height NUMERIC(18,2), + weight NUMERIC(18,2), + job_num TEXT, + show_status INT, + show_sort INT, + sum_grade NUMERIC(18,2), + assistant_grade NUMERIC(18,2), + get_grade_times INT, + introduce TEXT, + video_introduction_url TEXT, + group_id BIGINT, + group_name TEXT, + shop_name TEXT, + charge_way INT, + entry_type INT, + allow_cx INT, + is_guaranteed INT, + salary_grant_enabled INT, + light_status INT, + online_status INT, + is_delete INT, + cx_unit_price NUMERIC(18,2), + pd_unit_price NUMERIC(18,2), + last_table_id BIGINT, + last_table_name TEXT, + person_org_id BIGINT, + serial_number BIGINT, + is_team_leader INT, + criticism_status INT, + last_update_name TEXT, + ding_talk_synced INT, + site_light_cfg_id BIGINT, + light_equipment_id TEXT, + entry_sign_status INT, + resign_sign_status INT, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.assistant_accounts_master IS 'ODS 原始明细表:助教档案主数据。来源:C:/dev/LLTQ/export/test-json-doc/assistant_accounts_master.json;分析:assistant_accounts_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.id IS '【说明】助教账号主键 ID,在“助教流水.json”中对应 site_assistant_id。 【示例】2947562271297029(用于助教账号主键 ID,在“助教流水.json”中对应 site_assistant_id)。 【JSON字段】id。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.tenant_id IS '【说明】品牌/租户 ID,对应“非球科技”系统中该商户的唯一标识。 【示例】2790683160709957(用于品牌/租户 ID,对应“非球科技”系统中该商户的唯一标识)。 【JSON字段】tenant_id。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.site_id IS '【说明】门店 ID,对应本次数据的这家球房(朗朗桌球)。 【示例】2790685415443269(用于门店 ID,对应本次数据的这家球房(朗朗桌球))。 【JSON字段】site_id。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.assistant_no IS '【说明】助教工号 / 编号,便于业务侧识别。 【示例】31(用于助教工号 / 编号,便于业务侧识别)。 【JSON字段】assistant_no。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.nickname IS '【说明】助教在前台展示的昵称,如“佳怡”“周周”“球球”等。 【示例】小然(用于助教在前台展示的昵称,如“佳怡”“周周”“球球”等)。 【JSON字段】nickname。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.real_name IS '【说明】助教真实姓名,如“何海婷”“梁婷婷”等。 【示例】张静然(用于助教真实姓名,如“何海婷”“梁婷婷”等)。 【JSON字段】real_name。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.mobile IS '【说明】助教手机号,用于登录绑定、通知、钉钉同步等。 【示例】15119679931(助教手机号,用于登录绑定、通知、钉钉同步等)。 【JSON字段】mobile。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.team_id IS '【说明】助教所属团队 ID。 【示例】2792011585884037(用于助教所属团队 ID)。 【JSON字段】team_id。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.team_name IS '【说明】团队名称,展示用,和 team_id 一一对应。 【示例】1组(用于团队名称,展示用,和 team_id 一一对应)。 【JSON字段】team_name。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.user_id IS '【说明】系统级“用户账号 ID”,通常对应登录账号。 【示例】2947562270838277(用于系统级“用户账号 ID”,通常对应登录账号)。 【JSON字段】user_id。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.level IS '【说明】10 × 24。 【示例】20(用于10 × 24)。 【JSON字段】level。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.assistant_status IS '【说明】1 × 48。 【示例】1(用于1 × 48)。 【JSON字段】assistant_status。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.work_status IS '【说明】当 leave_status = 0 时,work_status = 1。 【示例】2(用于当 leave_status = 0 时,work_status = 1)。 【JSON字段】work_status。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.leave_status IS '【说明】0 × 21。 【示例】1(用于0 × 21)。 【JSON字段】leave_status。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.entry_time IS '【说明】入职时间。 【示例】2025-11-02 08:00:00(用于入职时间)。 【JSON字段】entry_time。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.resign_time IS '【说明】离职日期。 【示例】2025-11-03 08:00:00(用于离职日期)。 【JSON字段】resign_time。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.start_time IS '【说明】当前配置生效的开始日期。 【示例】2025-11-01 08:00:00(用于当前配置生效的开始日期)。 【JSON字段】start_time。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.end_time IS '【说明】当前配置生效的结束日期(例如一个周期性的排班/合同周期)。 【示例】2025-12-01 08:00:00(用于当前配置生效的结束日期(例如一个周期性的排班/合同周期))。 【JSON字段】end_time。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.create_time IS '【说明】账号创建时间。 【示例】2025-11-02 15:55:26(用于账号创建时间)。 【JSON字段】create_time。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.update_time IS '【说明】账号最近一次被修改的时间(例如修改等级、昵称等)。 【示例】2025-11-03 18:32:07(用于账号最近一次被修改的时间(例如修改等级、昵称等))。 【JSON字段】update_time。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.order_trade_no IS '【说明】该助教最近一次关联的订单号,用于快速跳转或回溯最近服务行为。 【示例】0(该助教最近一次关联的订单号,用于快速跳转或回溯最近服务行为)。 【JSON字段】order_trade_no。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.staff_id IS '【说明】预留给“人事系统员工 ID”的字段,目前未接入或未启用。 【示例】0(用于预留给“人事系统员工 ID”的字段,目前未接入或未启用)。 【JSON字段】staff_id。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.staff_profile_id IS '【说明】人事档案 ID,与第三方 HR 系统或内部员工档案集成使用,当前未启用。 【示例】0(用于人事档案 ID,与第三方 HR 系统或内部员工档案集成使用,当前未启用)。 【JSON字段】staff_profile_id。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.system_role_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。 【示例】10(标识类 ID 字段,用于关联/定位相关实体)。 【JSON字段】system_role_id。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.avatar IS '【说明】助教头像地址。 【示例】https://oss.ficoo.vip/maUiImages/images/defaultAvatar.png(用于助教头像地址)。 【JSON字段】avatar。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.birth_date IS '【说明】助教出生日期。 【示例】0001-01-01 00:00:00(用于助教出生日期)。 【JSON字段】birth_date。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.gender IS '【说明】0 × 40。 【示例】0(用于0 × 40)。 【JSON字段】gender。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.height IS '【说明】身高(单位:厘米)。 【示例】0.0(用于身高(单位:厘米))。 【JSON字段】height。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.weight IS '【说明】体重(单位:公斤)。 【示例】0.0(用于体重(单位:公斤))。 【JSON字段】weight。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.job_num IS '【说明】备用工号字段,目前未在该门店启用。 【示例】NULL(用于备用工号字段,目前未在该门店启用)。 【JSON字段】job_num。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.show_status IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】show_status。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.show_sort IS '【说明】前台展示排序权重,值越小/越大对应不同的排序策略(当前看起来与 assistant_no 有一定对应关系)。 【示例】31(用于前台展示排序权重,值越小/越大对应不同的排序策略(当前看起来与 assistant_no 有一定对应关系))。 【JSON字段】show_sort。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.sum_grade IS '【说明】评分总和,用于计算平均分(assistant_grade = sum_grade / get_grade_times),当前为 0。 【示例】0.0(评分总和,用于计算平均分(assistant_grade = sum_grade / get_grade_times),当前为 0)。 【JSON字段】sum_grade。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.assistant_grade IS '【说明】助教综合评分(员工维度的平均分 snapshot),当前尚未启用评分。 【示例】0.0(用于助教综合评分(员工维度的平均分 snapshot),当前尚未启用评分)。 【JSON字段】assistant_grade。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.get_grade_times IS '【说明】累计被评分次数。 【示例】0(用于累计被评分次数)。 【JSON字段】get_grade_times。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.introduce IS '【说明】个人简介文案,预留给助教自我介绍使用。 【示例】NULL(用于个人简介文案,预留给助教自我介绍使用)。 【JSON字段】introduce。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.video_introduction_url IS '【说明】助教个人视频介绍地址。 【示例】https://oss.ficoo.vip/cbb/userVideo/1753096246308/175309624630830.mp4(用于助教个人视频介绍地址)。 【JSON字段】video_introduction_url。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.group_id IS '【说明】上层“分组 ID”预留字段(例如集团/事业部),本门店未使用。 【示例】0(用于上层“分组 ID”预留字段(例如集团/事业部),本门店未使用)。 【JSON字段】group_id。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.group_name IS '【说明】group_id 对应的名称,目前为空。 【示例】NULL(用于group_id 对应的名称,目前为空)。 【JSON字段】group_name。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.shop_name IS '【说明】门店名称,冗余字段,用于展示。 【示例】朗朗桌球(门店名称,冗余字段,用于展示)。 【JSON字段】shop_name。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.charge_way IS '【说明】2 代表当前门店为“计时收费”,其他值(1、3 等)可能对应按局、按课时等,当前未出现。 【示例】2(用于2 代表当前门店为“计时收费”,其他值(1、3 等)可能对应按局、按课时等,当前未出现)。 【JSON字段】charge_way。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.entry_type IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】entry_type。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.allow_cx IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】allow_cx。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.is_guaranteed IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。。 【示例】1(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【JSON字段】is_guaranteed。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.salary_grant_enabled IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】2(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】salary_grant_enabled。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.light_status IS '【说明】灯光控制状态,如 1=启用控制、2=不启用 或相反。 【示例】2(用于灯光控制状态,如 1=启用控制、2=不启用 或相反)。 【JSON字段】light_status。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.online_status IS '【说明】在线状态。 【示例】1(用于在线状态)。 【JSON字段】online_status。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.is_delete IS '【说明】逻辑删除标记(0=否,1=是)。。 【示例】0(用于逻辑删除标记(0=否,1=是))。 【JSON字段】is_delete。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.cx_unit_price IS '【说明】促销时段的单价,本门店未在账号表层面设置。 【示例】0.0(用于促销时段的单价,本门店未在账号表层面设置)。 【JSON字段】cx_unit_price。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.pd_unit_price IS '【说明】某种标准单价(例如“普通时段单价”),这里未在账号上配置(实际单价在助教商品或套餐配置中)。 【示例】0.0(用于某种标准单价(例如“普通时段单价”),这里未在账号上配置(实际单价在助教商品或套餐配置中))。 【JSON字段】pd_unit_price。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.last_table_id IS '【说明】该助教最近一次服务的球台 ID。 【示例】0(用于该助教最近一次服务的球台 ID)。 【JSON字段】last_table_id。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.last_table_name IS '【说明】最近服务球台名称(展示用)。 【示例】TV(用于最近服务球台名称(展示用))。 【JSON字段】last_table_name。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.person_org_id IS '【说明】人事组织 ID,通常表示“某某门店-助教部-某小组”等层级组织。 【示例】2947562271215109(用于人事组织 ID,通常表示“某某门店-助教部-某小组”等层级组织)。 【JSON字段】person_org_id。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.serial_number IS '【说明】系统内部生成的序列号或排序标识,用于全局排序或迁移。 【示例】0(系统内部生成的序列号或排序标识,用于全局排序或迁移)。 【JSON字段】serial_number。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.is_team_leader IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。。 【示例】0(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【JSON字段】is_team_leader。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.criticism_status IS '【说明】1 × 49。 【示例】1(用于1 × 49)。 【JSON字段】criticism_status。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.last_update_name IS '【说明】最近修改该账号配置的管理员名称。 【示例】管理员:郑丽珊(用于最近修改该账号配置的管理员名称)。 【JSON字段】last_update_name。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.ding_talk_synced IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】ding_talk_synced。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.site_light_cfg_id IS '【说明】门店灯控配置 ID,本门店未在助教账号维度启用。 【示例】0(用于门店灯控配置 ID,本门店未在助教账号维度启用)。 【JSON字段】site_light_cfg_id。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.light_equipment_id IS '【说明】灯控设备 ID,如果开启“助教开台自动控制灯”,会通过该字段关联到灯控硬件。 【示例】NULL(用于灯控设备 ID,如果开启“助教开台自动控制灯”,会通过该字段关联到灯控硬件)。 【JSON字段】light_equipment_id。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.entry_sign_status IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】0(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】entry_sign_status。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.resign_sign_status IS '【说明】离职协议签署状态,类似上面。 【示例】0(用于离职协议签署状态,类似上面)。 【JSON字段】resign_sign_status。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】assistant_accounts_master.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/assistant_accounts_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。'; + + +CREATE TABLE IF NOT EXISTS billiards_ods.assistant_service_records ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + site_id BIGINT, + siteProfile JSONB, + site_table_id BIGINT, + order_settle_id BIGINT, + order_trade_no TEXT, + order_pay_id BIGINT, + order_assistant_id BIGINT, + order_assistant_type INT, + assistantName TEXT, + assistantNo TEXT, + assistant_level TEXT, + levelname TEXT, + site_assistant_id BIGINT, + skill_id BIGINT, + skillname TEXT, + system_member_id BIGINT, + tablename TEXT, + tenant_member_id BIGINT, + user_id BIGINT, + assistant_team_id BIGINT, + nickname TEXT, + ledger_name TEXT, + ledger_group_name TEXT, + ledger_amount NUMERIC(18,2), + ledger_count NUMERIC(18,4), + ledger_unit_price NUMERIC(18,4), + ledger_status INT, + ledger_start_time TIMESTAMP, + ledger_end_time TIMESTAMP, + manual_discount_amount NUMERIC(18,2), + member_discount_amount NUMERIC(18,2), + coupon_deduct_money NUMERIC(18,2), + service_money NUMERIC(18,2), + projected_income NUMERIC(18,2), + real_use_seconds INT, + income_seconds INT, + start_use_time TIMESTAMP, + last_use_time TIMESTAMP, + create_time TIMESTAMP, + is_single_order INT, + is_delete INT, + is_trash INT, + trash_reason TEXT, + trash_applicant_id BIGINT, + trash_applicant_name TEXT, + operator_id BIGINT, + operator_name TEXT, + salesman_name TEXT, + salesman_org_id BIGINT, + salesman_user_id BIGINT, + person_org_id BIGINT, + add_clock INT, + returns_clock INT, + composite_grade NUMERIC(10,2), + composite_grade_time TIMESTAMP, + skill_grade NUMERIC(10,2), + service_grade NUMERIC(10,2), + sum_grade NUMERIC(10,2), + grade_status INT, + get_grade_times INT, + is_not_responding INT, + is_confirm INT, + payload JSONB NOT NULL, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now() +); + +COMMENT ON TABLE billiards_ods.assistant_service_records IS 'ODS 原始明细表:助教服务流水。来源:C:/dev/LLTQ/export/test-json-doc/assistant_service_records.json;分析:assistant_service_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.id IS '【说明】本条助教流水记录的主键 ID(流水唯一标识)。 【示例】2957913441292165(用于本条助教流水记录的主键 ID(流水唯一标识))。 【JSON字段】id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】tenant_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.site_id IS '【说明】门店 ID,本数据中指“朗朗桌球”这一家门店。 【示例】2790685415443269(用于门店 ID,本数据中指“朗朗桌球”这一家门店)。 【JSON字段】site_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.siteProfile IS '【说明】门店信息快照,包括 id、shop_name、address 等,和其他 JSON 里的 siteProfile 一致。 【示例】{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "avatar": "https://oss.ficoo.vip/admin/hXcE4E…(用于门店信息快照,包括 id、shop_name、address 等,和其他 JSON 里的 siteProfile 一致)。 【JSON字段】siteProfile。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.site_table_id IS '【说明】球台 ID。 【示例】2793020259897413(用于球台 ID)。 【JSON字段】site_table_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.order_settle_id IS '【说明】订单结算 ID,相当于“结账单号”的内部主键。 【示例】2957913171693253(用于订单结算 ID,相当于“结账单号”的内部主键)。 【JSON字段】order_settle_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.order_trade_no IS '【说明】订单交易号,整个订单层面的编号。 【示例】2957784612605829(用于订单交易号,整个订单层面的编号)。 【JSON字段】order_trade_no。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.order_pay_id IS '【说明】关联到“支付记录”的主键 ID。 【示例】0(用于关联到“支付记录”的主键 ID)。 【JSON字段】order_pay_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.order_assistant_id IS '【说明】订单中“助教项目明细”的内部 ID。 【示例】2957788717240005(用于订单中“助教项目明细”的内部 ID)。 【JSON字段】order_assistant_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.order_assistant_type IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】order_assistant_type。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.assistantName IS '【说明】助教姓名,如“何海婷”“胡敏”等。 【示例】何海婷(用于助教姓名,如“何海婷”“胡敏”等)。 【JSON字段】assistantName。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.assistantNo IS '【说明】助教编号,例如 "27"。 【示例】27(用于助教编号,例如 "27")。 【JSON字段】assistantNo。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.assistant_level IS '【说明】助教等级名称,与 assistant_level 一一对应(初级/中级/高级/助教管理)。 【示例】10(用于助教等级名称,与 assistant_level 一一对应(初级/中级/高级/助教管理))。 【JSON字段】assistant_level。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.levelname IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】levelname。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.site_assistant_id IS '【说明】门店维度的助教 ID。 【示例】2946266869435205(用于门店维度的助教 ID)。 【JSON字段】site_assistant_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.skill_id IS '【说明】助教服务“课程/技能”ID。 【示例】2790683529513797(用于助教服务“课程/技能”ID)。 【JSON字段】skill_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.skillname IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】skillname。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.system_member_id IS '【说明】系统级会员 ID(全集团统一 ID)。 【示例】0(用于系统级会员 ID(全集团统一 ID))。 【JSON字段】system_member_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.tablename IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】tablename。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.tenant_member_id IS '【说明】商户维度会员 ID(门店/品牌内的会员主键)。 【示例】0(用于商户维度会员 ID(门店/品牌内的会员主键))。 【JSON字段】tenant_member_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.user_id IS '【说明】助教对应的“用户账号 ID”(系统级用户)。 【示例】2946266868976453(用于助教对应的“用户账号 ID”(系统级用户))。 【JSON字段】user_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.assistant_team_id IS '【说明】助教所属团队 ID。 【示例】2792011585884037(用于助教所属团队 ID)。 【JSON字段】assistant_team_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.nickname IS '【说明】助教对外昵称,如“佳怡”“周周”“球球”等。 【示例】泡芙(用于助教对外昵称,如“佳怡”“周周”“球球”等)。 【JSON字段】nickname。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】27-泡芙(名称字段,用于展示与辅助识别)。 【JSON字段】ledger_name。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_group_name IS '【说明】助教项目所属的“计费分组/套餐分组名称”,例如某种助教套餐或业务组名称。 【示例】NULL(用于助教项目所属的“计费分组/套餐分组名称”,例如某种助教套餐或业务组名称)。 【JSON字段】ledger_group_name。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_amount IS '【说明】按标准单价计算出来的应收金额(近似 = ledger_unit_price × income_seconds / 3600)。 【示例】206.67(用于按标准单价计算出来的应收金额(近似 = ledger_unit_price × income_seconds / 3600))。 【JSON字段】ledger_amount。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_count IS '【说明】台账记录的计时总秒数。 【示例】7592(用于台账记录的计时总秒数)。 【JSON字段】ledger_count。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_unit_price IS '【说明】助教服务 标准单价(通常是标价:每小时、每节课的单价)。 【示例】98.0(用于助教服务 标准单价(通常是标价:每小时、每节课的单价))。 【JSON字段】ledger_unit_price。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_status IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】ledger_status。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_start_time IS '【说明】台账层面记录的开始时间。 【示例】2025-11-09 21:18:18(用于台账层面记录的开始时间)。 【JSON字段】ledger_start_time。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_end_time IS '【说明】台账层面的结束时间。 【示例】2025-11-09 23:24:50(用于台账层面的结束时间)。 【JSON字段】ledger_end_time。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.manual_discount_amount IS '【说明】收银员手动给予的减免金额(人工改价)。 【示例】0.0(用于收银员手动给予的减免金额(人工改价))。 【JSON字段】manual_discount_amount。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.member_discount_amount IS '【说明】由会员卡折扣产生的优惠金额。 【示例】0.0(用于由会员卡折扣产生的优惠金额)。 【JSON字段】member_discount_amount。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.coupon_deduct_money IS '【说明】由“优惠券/代金券/团购券”等 直接抵扣到这条助教服务上的金额。 【示例】0.0(用于由“优惠券/代金券/团购券”等 直接抵扣到这条助教服务上的金额)。 【JSON字段】coupon_deduct_money。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.service_money IS '【说明】用于记录与助教结算的金额(平台预留的“成本/分成”字段)。 【示例】0.0(用于记录与助教结算的金额(平台预留的“成本/分成”字段))。 【JSON字段】service_money。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.projected_income IS '【说明】实际结算计入门店的金额(已经考虑折扣、卡权益、券等后的结果)。 【示例】168.0(用于实际结算计入门店的金额(已经考虑折扣、卡权益、券等后的结果))。 【JSON字段】projected_income。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.real_use_seconds IS '【说明】实际使用时长(秒)。 【示例】7592(用于实际使用时长(秒))。 【JSON字段】real_use_seconds。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.income_seconds IS '【说明】计费秒数 / 应计收入对应的时间。 【示例】7560(用于计费秒数 / 应计收入对应的时间)。 【JSON字段】income_seconds。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.start_use_time IS '【说明】助教实际开始服务时间。 【示例】2025-11-09 21:18:18(用于助教实际开始服务时间)。 【JSON字段】start_use_time。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.last_use_time IS '【说明】最后一次使用(实际服务)时间。 【示例】2025-11-09 23:24:50(用于最后一次使用(实际服务)时间)。 【JSON字段】last_use_time。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.create_time IS '【说明】这条助教流水记录创建时间(一般接近结算/下单时间)。 【示例】2025-11-09 23:25:11(用于这条助教流水记录创建时间(一般接近结算/下单时间))。 【JSON字段】create_time。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.is_single_order IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。。 【示例】1(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【JSON字段】is_single_order。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.is_delete IS '【说明】逻辑删除标志。 【示例】0(用于逻辑删除标志)。 【JSON字段】is_delete。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.is_trash IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。。 【示例】0(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【JSON字段】is_trash。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.trash_reason IS '【说明】废除原因(文本说明),例如“顾客取消”“录入错误”等。 【示例】NULL(用于废除原因(文本说明),例如“顾客取消”“录入错误”等)。 【JSON字段】trash_reason。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.trash_applicant_id IS '【说明】提出废除申请的员工 ID(通常是操作员/管理员)。 【示例】0(用于提出废除申请的员工 ID(通常是操作员/管理员))。 【JSON字段】trash_applicant_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.trash_applicant_name IS '【说明】废除申请人姓名。 【示例】NULL(用于废除申请人姓名)。 【JSON字段】trash_applicant_name。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.operator_id IS '【说明】操作员 ID(录入/结算这条助教服务的员工)。 【示例】2790687322443013(用于操作员 ID(录入/结算这条助教服务的员工))。 【JSON字段】operator_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.operator_name IS '【说明】操作员姓名,与 operator_id 一起使用,便于直接阅读。 【示例】收银员:郑丽珊(用于操作员姓名,与 operator_id 一起使用,便于直接阅读)。 【JSON字段】operator_name。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.salesman_name IS '【说明】关联的“营业员/销售员姓名”,用于提成归属。 【示例】NULL(关联的“营业员/销售员姓名”,用于提成归属)。 【JSON字段】salesman_name。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.salesman_org_id IS '【说明】营业员所属组织/部门 ID。 【示例】0(用于营业员所属组织/部门 ID)。 【JSON字段】salesman_org_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.salesman_user_id IS '【说明】营业员用户 ID。 【示例】0(用于营业员用户 ID)。 【JSON字段】salesman_user_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.person_org_id IS '【说明】助教所属“人事组织/部门 ID”。 【示例】2946266869336901(用于助教所属“人事组织/部门 ID”)。 【JSON字段】person_org_id。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.add_clock IS '【说明】加钟秒数,即在原有预约/服务基础上临时追加的时长。 【示例】0(用于加钟秒数,即在原有预约/服务基础上临时追加的时长)。 【JSON字段】add_clock。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.returns_clock IS '【说明】退钟秒数(取消加钟或提前结束退回的时间)。 【示例】0(用于退钟秒数(取消加钟或提前结束退回的时间))。 【JSON字段】returns_clock。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.composite_grade IS '【说明】综合评分(例如技能+服务加权后的平均分),当前数据没有实际评分。 【示例】0.0(用于综合评分(例如技能+服务加权后的平均分),当前数据没有实际评分)。 【JSON字段】composite_grade。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.composite_grade_time IS '【说明】助教服务所在的球台名称(如 "A17"、"S1")。 【示例】0001-01-01 00:00:00(用于助教服务所在的球台名称(如 "A17"、"S1"))。 【JSON字段】composite_grade_time。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.skill_grade IS '【说明】顾客对“技能表现”的评分(整数或打分等级)。 【示例】0(用于顾客对“技能表现”的评分(整数或打分等级))。 【JSON字段】skill_grade。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.service_grade IS '【说明】顾客对“服务态度”的评分。 【示例】0(用于顾客对“服务态度”的评分)。 【JSON字段】service_grade。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.sum_grade IS '【说明】累计评分总和(可能用于计算平均分),当前为 0。 【示例】0.0(累计评分总和(可能用于计算平均分),当前为 0)。 【JSON字段】sum_grade。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.grade_status IS '【说明】1 = 未评价/正常。 【示例】1(用于1 = 未评价/正常)。 【JSON字段】grade_status。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.get_grade_times IS '【说明】该条记录对应的评价次数(或该助教被评价次数快照)。 【示例】0(用于该条记录对应的评价次数(或该助教被评价次数快照))。 【JSON字段】get_grade_times。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.is_not_responding IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。。 【示例】0(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【JSON字段】is_not_responding。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.is_confirm IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。。 【示例】2(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【JSON字段】is_confirm。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】assistant_service_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/assistant_service_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。'; + + +CREATE TABLE IF NOT EXISTS billiards_ods.site_tables_master ( + id BIGINT PRIMARY KEY, + site_id BIGINT, + siteName TEXT, + "appletQrCodeUrl" TEXT, + areaName TEXT, + audit_status INT, + charge_free INT, + create_time TIMESTAMP, + delay_lights_time INT, + is_online_reservation INT, + is_rest_area INT, + light_status INT, + only_allow_groupon INT, + order_delay_time INT, + self_table INT, + show_status INT, + site_table_area_id BIGINT, + tableStatusName TEXT, + table_cloth_use_Cycle INT, + table_cloth_use_time TIMESTAMP, + table_name TEXT, + table_price NUMERIC(18,2), + table_status INT, + temporary_light_second INT, + virtual_table INT, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.site_tables_master IS 'ODS 原始明细表:门店桌台主数据。来源:C:/dev/LLTQ/export/test-json-doc/site_tables_master.json;分析:site_tables_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.id IS '【说明】台桌主键 ID。 【示例】2791964216463493(用于台桌主键 ID)。 【JSON字段】id。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.site_id IS '【说明】门店 ID。 【示例】2790685415443269(用于门店 ID)。 【JSON字段】site_id。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.siteName IS '【说明】门店名称快照,冗余字段,配合 site_id 使用。 【示例】朗朗桌球(用于门店名称快照,冗余字段,配合 site_id 使用)。 【JSON字段】siteName。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.areaName IS '【说明】区域名称,用于前台展示和区域维度管理。 【示例】A区(区域名称,用于前台展示和区域维度管理)。 【JSON字段】areaName。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.audit_status IS '【说明】当前值:全部为 2。 【示例】2(用于当前值:全部为 2)。 【JSON字段】audit_status。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.charge_free IS '【说明】当前值:全部为 0。 【示例】0(用于当前值:全部为 0)。 【JSON字段】charge_free。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.create_time IS '【说明】台桌配置的创建时间或最近一次创建/复制时间。 【示例】2025-07-15 17:52:54(用于台桌配置的创建时间或最近一次创建/复制时间)。 【JSON字段】create_time。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.delay_lights_time IS '【说明】台灯熄灭延迟时间(单位多半是秒或分钟),用于结账后延时关灯。 【示例】0(台灯熄灭延迟时间(单位多半是秒或分钟),用于结账后延时关灯)。 【JSON字段】delay_lights_time。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.is_online_reservation IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。。 【示例】2(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【JSON字段】is_online_reservation。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.is_rest_area IS '【说明】当前值:全部为 0。 【示例】0(用于当前值:全部为 0)。 【JSON字段】is_rest_area。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.light_status IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】2(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】light_status。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.only_allow_groupon IS '【说明】小程序二维码 URL。 【示例】2(用于小程序二维码 URL)。 【JSON字段】only_allow_groupon。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.order_delay_time IS '【说明】订单层面允许的“自动延时时长”(例如到点后自动延长多少时间继续计费)。 【示例】0(用于订单层面允许的“自动延时时长”(例如到点后自动延长多少时间继续计费))。 【JSON字段】order_delay_time。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.self_table IS '【说明】当前值:全部为 1。 【示例】1(用于当前值:全部为 1)。 【JSON字段】self_table。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.show_status IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】show_status。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.site_table_area_id IS '【说明】门店维度的“台桌区域 ID”。 【示例】2791963794329671(用于门店维度的“台桌区域 ID”)。 【JSON字段】site_table_area_id。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.tableStatusName IS '【说明】table_status 的中文名称,仅为展示用途。 【示例】空闲中(用于table_status 的中文名称,仅为展示用途)。 【JSON字段】tableStatusName。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.table_cloth_use_Cycle IS '【说明】台呢使用周期阈值,例如达到某个秒数后提醒更换。 【示例】0(用于台呢使用周期阈值,例如达到某个秒数后提醒更换)。 【JSON字段】table_cloth_use_Cycle。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.table_cloth_use_time IS '【说明】时间字段,用于记录业务时间点/发生时间。。 【示例】1863727(时间字段,用于记录业务时间点/发生时间。)。 【JSON字段】table_cloth_use_time。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.table_name IS '【说明】台号/台名称,用于前台操作界面展示,也出现在小票和各种流水中的 ledger_name 或 tableName 字段。 【示例】A1(台号/台名称,用于前台操作界面展示,也出现在小票和各种流水中的 ledger_name 或 tableName 字段)。 【JSON字段】table_name。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.table_price IS '【说明】设计上应为“台的基础单价”字段(例如按小时或按局单价)。 【示例】0.0(用于设计上应为“台的基础单价”字段(例如按小时或按局单价))。 【JSON字段】table_price。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.table_status IS '【说明】台当前运行状态,真实反映某一时刻台的占用/暂停情况。 【示例】1(用于台当前运行状态,真实反映某一时刻台的占用/暂停情况)。 【JSON字段】table_status。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.temporary_light_second IS '【说明】临时点灯时长(秒),例如手动临时开灯一段时间。 【示例】0(用于临时点灯时长(秒),例如手动临时开灯一段时间)。 【JSON字段】temporary_light_second。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.virtual_table IS '【说明】当前值:全部为 0。 【示例】0(用于当前值:全部为 0)。 【JSON字段】virtual_table。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】site_tables_master.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/site_tables_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。'; + + +CREATE TABLE IF NOT EXISTS billiards_ods.table_fee_discount_records ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + site_id BIGINT, + siteProfile JSONB, + site_table_id BIGINT, + tableProfile JSONB, + tenant_table_area_id BIGINT, + adjust_type INT, + ledger_amount NUMERIC(18,2), + ledger_count NUMERIC(18,4), + ledger_name TEXT, + ledger_status INT, + applicant_id BIGINT, + applicant_name TEXT, + operator_id BIGINT, + operator_name TEXT, + order_settle_id BIGINT, + order_trade_no TEXT, + is_delete INT, + create_time TIMESTAMP, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.table_fee_discount_records IS 'ODS 原始明细表:台费折扣记录。来源:C:/dev/LLTQ/export/test-json-doc/table_fee_discount_records.json;分析:table_fee_discount_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.id IS '【说明】台费打折 / 调整流水主键 ID。 【示例】2957913441881989(用于台费打折 / 调整流水主键 ID)。 【JSON字段】id。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】tenant_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.site_id IS '【说明】门店 ID,本批数据全部为同一家门店(朗朗桌球)。 【示例】2790685415443269(用于门店 ID,本批数据全部为同一家门店(朗朗桌球))。 【JSON字段】site_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.siteProfile IS '【说明】门店信息快照,用于报表时直接读取,无需再联门店档案。 【示例】{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "avatar": "https://oss.ficoo.vip/admin/hXcE4E…(门店信息快照,用于报表时直接读取,无需再联门店档案)。 【JSON字段】siteProfile。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.site_table_id IS '【说明】台桌 ID。 【示例】2793020259897413(用于台桌 ID)。 【JSON字段】site_table_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.tableProfile IS '【说明】折扣发生时,对应台桌的配置信息快照。 【示例】{"id": 2793020259897413, "tenant_id": 2790683160709957, "tenant_name": "", "siteName": "", "table_name": "S1", "site_ta…(用于折扣发生时,对应台桌的配置信息快照)。 【JSON字段】tableProfile。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.tenant_table_area_id IS '【说明】租户维度的“台桌区域 ID”。 【示例】2791961347968901(用于租户维度的“台桌区域 ID”)。 【JSON字段】tenant_table_area_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.adjust_type IS '【说明】文件名是“台费打折”,字段名为“调整类型”,当前所有记录都是 1,即“台费打折/台费减免”这一种调整类型。 【示例】1(用于文件名是“台费打折”,字段名为“调整类型”,当前所有记录都是 1,即“台费打折/台费减免”这一种调整类型)。 【JSON字段】adjust_type。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.ledger_amount IS '【说明】金额字段,用于计费/结算/分摊等金额计算。。 【示例】148.15(金额字段,用于计费/结算/分摊等金额计算。)。 【JSON字段】ledger_amount。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.ledger_count IS '【说明】这里不是“秒数”,而是“调整次数/条数”的量化,目前固定为 1,表示“一次调账事件”。 【示例】1(用于这里不是“秒数”,而是“调整次数/条数”的量化,目前固定为 1,表示“一次调账事件”)。 【JSON字段】ledger_count。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.ledger_name IS '【说明】设计上应该用于记录“调账项目名称”或“打折原因描述”(例如某种优惠规则名称),但当前门店并未使用该字段。 【示例】NULL(设计上应该用于记录“调账项目名称”或“打折原因描述”(例如某种优惠规则名称),但当前门店并未使用该字段)。 【JSON字段】ledger_name。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.ledger_status IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】ledger_status。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.applicant_id IS '【说明】打折/调账申请人 ID。 【示例】2790687322443013(用于打折/调账申请人 ID)。 【JSON字段】applicant_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.applicant_name IS '【说明】申请人姓名(带角色描述),为 applicant_id 的冗余显示字段。 【示例】收银员:郑丽珊(用于申请人姓名(带角色描述),为 applicant_id 的冗余显示字段)。 【JSON字段】applicant_name。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.operator_id IS '【说明】实际执行调账操作的操作员 ID。 【示例】2790687322443013(用于实际执行调账操作的操作员 ID)。 【JSON字段】operator_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.operator_name IS '【说明】操作员姓名。 【示例】收银员:郑丽珊(用于操作员姓名)。 【JSON字段】operator_name。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.order_settle_id IS '【说明】结算单/小票 ID。 【示例】2957913171693253(用于结算单/小票 ID)。 【JSON字段】order_settle_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.order_trade_no IS '【说明】订单交易号。 【示例】2957784612605829(用于订单交易号)。 【JSON字段】order_trade_no。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.is_delete IS '【说明】逻辑删除标记(0=否,1=是)。。 【示例】0(用于逻辑删除标记(0=否,1=是))。 【JSON字段】is_delete。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.create_time IS '【说明】台费调整记录的创建时间,即打折操作被执行的时间戳。 【示例】2025-11-09 23:25:11(用于台费调整记录的创建时间,即打折操作被执行的时间戳)。 【JSON字段】create_time。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】table_fee_discount_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/table_fee_discount_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。'; + + +CREATE TABLE IF NOT EXISTS billiards_ods.table_fee_transactions ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + site_id BIGINT, + siteProfile JSONB, + site_table_id BIGINT, + site_table_area_id BIGINT, + site_table_area_name TEXT, + tenant_table_area_id BIGINT, + order_trade_no TEXT, + order_pay_id BIGINT, + order_settle_id BIGINT, + ledger_name TEXT, + ledger_amount NUMERIC(18,2), + ledger_count NUMERIC(18,4), + ledger_unit_price NUMERIC(18,4), + ledger_status INT, + ledger_start_time TIMESTAMP, + ledger_end_time TIMESTAMP, + start_use_time TIMESTAMP, + last_use_time TIMESTAMP, + real_table_use_seconds INT, + real_table_charge_money NUMERIC(18,2), + add_clock_seconds INT, + adjust_amount NUMERIC(18,2), + coupon_promotion_amount NUMERIC(18,2), + member_discount_amount NUMERIC(18,2), + used_card_amount NUMERIC(18,2), + mgmt_fee NUMERIC(18,2), + service_money NUMERIC(18,2), + fee_total NUMERIC(18,2), + is_single_order INT, + is_delete INT, + member_id BIGINT, + operator_id BIGINT, + operator_name TEXT, + salesman_name TEXT, + salesman_org_id BIGINT, + salesman_user_id BIGINT, + create_time TIMESTAMP, + payload JSONB NOT NULL, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now() +); + +COMMENT ON TABLE billiards_ods.table_fee_transactions IS 'ODS 原始明细表:台费流水。来源:C:/dev/LLTQ/export/test-json-doc/table_fee_transactions.json;分析:table_fee_transactions-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.id IS '【说明】台费流水记录主键(事实表主键)。 【示例】2957924029058885(用于台费流水记录主键(事实表主键))。 【JSON字段】id。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】tenant_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.site_id IS '【说明】门店 ID,本次数据全部来自同一门店(朗朗桌球)。 【示例】2790685415443269(用于门店 ID,本次数据全部来自同一门店(朗朗桌球))。 【JSON字段】site_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.siteProfile IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "avatar": "https://oss.ficoo.vip/admin/hXcE4E…(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】siteProfile。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.site_table_id IS '【说明】球台 ID。 【示例】2793003705192517(用于球台 ID)。 【JSON字段】site_table_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.site_table_area_id IS '【说明】门店内“台桌区域” ID(站在门店物理布局的角度)。 【示例】2791963794329671(用于门店内“台桌区域” ID(站在门店物理布局的角度))。 【JSON字段】site_table_area_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.site_table_area_name IS '【说明】台桌区域的名称,用于门店表现和区域统计。 【示例】A区(台桌区域的名称,用于门店表现和区域统计)。 【JSON字段】site_table_area_name。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.tenant_table_area_id IS '【说明】租户维度的台桌区域 ID(品牌层面的同一类区域)。 【示例】2791960001957765(用于租户维度的台桌区域 ID(品牌层面的同一类区域))。 【JSON字段】tenant_table_area_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.order_trade_no IS '【说明】订单交易号,是整笔订单的主编号。 【示例】2957858167230149(用于订单交易号,是整笔订单的主编号)。 【JSON字段】order_trade_no。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.order_pay_id IS '【说明】订单支付记录 ID。 【示例】0(用于订单支付记录 ID)。 【JSON字段】order_pay_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.order_settle_id IS '【说明】结算单号/结账 ID,对应一次结账操作。 【示例】2957922914357125(用于结算单号/结账 ID,对应一次结账操作)。 【JSON字段】order_settle_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_name IS '【说明】台号名称,实际展示给员工/顾客看的桌台编号。 【示例】A17(用于台号名称,实际展示给员工/顾客看的桌台编号)。 【JSON字段】ledger_name。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_amount IS '【说明】按单价与计费时长计算出的原始应收台费金额。 【示例】48.0(用于按单价与计费时长计算出的原始应收台费金额)。 【JSON字段】ledger_amount。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_count IS '【说明】台账记录的计费秒数,计费用秒数(应收时长)。 【示例】3600(用于台账记录的计费秒数,计费用秒数(应收时长))。 【JSON字段】ledger_count。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_unit_price IS '【说明】台费结算时设置的 每小时单价/计费单价。 【示例】48.0(用于台费结算时设置的 每小时单价/计费单价)。 【JSON字段】ledger_unit_price。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_status IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】ledger_status。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_start_time IS '【说明】台账上的计费起始时间。 【示例】2025-11-09 22:28:57(用于台账上的计费起始时间)。 【JSON字段】ledger_start_time。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_end_time IS '【说明】台账上的计费结束时间。 【示例】2025-11-09 23:28:57(用于台账上的计费结束时间)。 【JSON字段】ledger_end_time。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.start_use_time IS '【说明】台开始使用的时间(实际开台时间)。 【示例】2025-11-09 22:28:57(用于台开始使用的时间(实际开台时间))。 【JSON字段】start_use_time。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.last_use_time IS '【说明】最后使用/操作时间。 【示例】2025-11-09 23:28:57(用于最后使用/操作时间)。 【JSON字段】last_use_time。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.real_table_use_seconds IS '【说明】实际使用的总秒数(系统真实统计的使用时长)。 【示例】3600(用于实际使用的总秒数(系统真实统计的使用时长))。 【JSON字段】real_table_use_seconds。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.real_table_charge_money IS '【说明】台费中实际向顾客收取的金额(现金/实付维度,未含券方承担或内部调账的那一部分)。 【示例】0.0(用于台费中实际向顾客收取的金额(现金/实付维度,未含券方承担或内部调账的那一部分))。 【JSON字段】real_table_charge_money。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.add_clock_seconds IS '【说明】加钟秒数,在原有使用基础上追加的时长。 【示例】0(用于加钟秒数,在原有使用基础上追加的时长)。 【JSON字段】add_clock_seconds。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.adjust_amount IS '【说明】调整金额/调账金额,用于将台费金额转移或冲减到其它项目,或手工调整。 【示例】0.0(调整金额/调账金额,用于将台费金额转移或冲减到其它项目,或手工调整)。 【JSON字段】adjust_amount。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.coupon_promotion_amount IS '【说明】由优惠券/活动/团购(平台/门店促销)承担的优惠金额,直接抵扣在台费上。 【示例】48.0(用于由优惠券/活动/团购(平台/门店促销)承担的优惠金额,直接抵扣在台费上)。 【JSON字段】coupon_promotion_amount。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.member_discount_amount IS '【说明】由会员权益产生的优惠金额,例如会员折扣、会员价等。 【示例】0.0(用于由会员权益产生的优惠金额,例如会员折扣、会员价等)。 【JSON字段】member_discount_amount。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.used_card_amount IS '【说明】由储值卡、次卡等“卡内余额”抵扣的金额。 【示例】0.0(用于由储值卡、次卡等“卡内余额”抵扣的金额)。 【JSON字段】used_card_amount。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.mgmt_fee IS '【说明】管理费字段,用于未来支持“台费附加管理费/服务费”的功能。 【示例】0.0(管理费字段,用于未来支持“台费附加管理费/服务费”的功能)。 【JSON字段】mgmt_fee。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.service_money IS '【说明】门店用于记录“服务费/成本/分成金额”的字段,类似助教流水里的 service_money。 【示例】0.0(门店用于记录“服务费/成本/分成金额”的字段,类似助教流水里的 service_money)。 【JSON字段】service_money。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.fee_total IS '【说明】各种附加费用(如管理费、服务费)合计值。 【示例】0.0(用于各种附加费用(如管理费、服务费)合计值)。 【JSON字段】fee_total。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.is_single_order IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。。 【示例】1(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【JSON字段】is_single_order。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.is_delete IS '【说明】逻辑删除标记(0=否,1=是)。。 【示例】0(用于逻辑删除标记(0=否,1=是))。 【JSON字段】is_delete。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.member_id IS '【说明】门店/租户内的会员 ID。 【示例】0(用于门店/租户内的会员 ID)。 【JSON字段】member_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.operator_id IS '【说明】操作员 ID,负责开台/结账的员工账号 ID。 【示例】2790687322443013(用于操作员 ID,负责开台/结账的员工账号 ID)。 【JSON字段】operator_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.operator_name IS '【说明】操作员姓名(冗余字段),便于直接阅读,不必再联表员工档案。 【示例】收银员:郑丽珊(用于操作员姓名(冗余字段),便于直接阅读,不必再联表员工档案)。 【JSON字段】operator_name。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.salesman_name IS '【说明】业务员/营业员姓名,如果台费有单独提成员工,这里记录归属人。 【示例】NULL(用于业务员/营业员姓名,如果台费有单独提成员工,这里记录归属人)。 【JSON字段】salesman_name。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.salesman_org_id IS '【说明】营业员所属机构/部门 ID。 【示例】0(用于营业员所属机构/部门 ID)。 【JSON字段】salesman_org_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.salesman_user_id IS '【说明】营业员的用户 ID(与 salesman_name 搭配)。 【示例】0(用于营业员的用户 ID(与 salesman_name 搭配))。 【JSON字段】salesman_user_id。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.create_time IS '【说明】这条台费流水记录的创建时间,通常接近结账时间。 【示例】2025-11-09 23:35:57(用于这条台费流水记录的创建时间,通常接近结账时间)。 【JSON字段】create_time。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】table_fee_transactions.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/table_fee_transactions.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。'; + + +CREATE TABLE IF NOT EXISTS billiards_ods.goods_stock_movements ( + siteGoodsStockId BIGINT PRIMARY KEY, + tenantId BIGINT, + siteId BIGINT, + siteGoodsId BIGINT, + goodsName TEXT, + goodsCategoryId BIGINT, + goodsSecondCategoryId BIGINT, + unit TEXT, + price NUMERIC(18,4), + stockType INT, + changeNum NUMERIC(18,4), + startNum NUMERIC(18,4), + endNum NUMERIC(18,4), + changeNumA NUMERIC(18,4), + startNumA NUMERIC(18,4), + endNumA NUMERIC(18,4), + remark TEXT, + operatorName TEXT, + createTime TIMESTAMP, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.goods_stock_movements IS 'ODS 原始明细表:商品库存变动流水。来源:C:/dev/LLTQ/export/test-json-doc/goods_stock_movements.json;分析:goods_stock_movements-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.siteGoodsStockId IS '【说明】门店某个“商品库存记录”的主键 ID。 【示例】2957911857581957(用于门店某个“商品库存记录”的主键 ID)。 【JSON字段】siteGoodsStockId。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.tenantId IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】tenantId。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.siteId IS '【说明】门店 ID。 【示例】2790685415443269(用于门店 ID)。 【JSON字段】siteId。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.siteGoodsId IS '【说明】门店维度的商品 ID。 【示例】2793026183532613(用于门店维度的商品 ID)。 【JSON字段】siteGoodsId。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.goodsName IS '【说明】商品名称。 【示例】阿萨姆(用于商品名称)。 【JSON字段】goodsName。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.goodsCategoryId IS '【说明】商品一级分类 ID。 【示例】2790683528350539(用于商品一级分类 ID)。 【JSON字段】goodsCategoryId。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.goodsSecondCategoryId IS '【说明】商品二级分类 ID。 【示例】2790683528350540(用于商品二级分类 ID)。 【JSON字段】goodsSecondCategoryId。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.unit IS '【说明】库存计量单位。 【示例】瓶(用于库存计量单位)。 【JSON字段】unit。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.price IS '【说明】商品单价(单位金额)。 【示例】8.0(用于商品单价(单位金额))。 【JSON字段】price。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.stockType IS '【说明】1:89 条。 【示例】1(用于1:89 条)。 【JSON字段】stockType。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.changeNum IS '【说明】本次库存数量变化值。 【示例】-1(用于本次库存数量变化值)。 【JSON字段】changeNum。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.startNum IS '【说明】变动前(这次出入库之前)的库存数量。 【示例】28(用于变动前(这次出入库之前)的库存数量)。 【JSON字段】startNum。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.endNum IS '【说明】变动后(出入库之后)的库存数量。 【示例】27(用于变动后(出入库之后)的库存数量)。 【JSON字段】endNum。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.changeNumA IS '【说明】辅助单位的变化量(与 changeNum 对应的第二计量单位变化),当前未使用。 【示例】0(用于辅助单位的变化量(与 changeNum 对应的第二计量单位变化),当前未使用)。 【JSON字段】changeNumA。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.startNumA IS '【说明】辅助计量单位的起始库存(例如件/箱等第二单位)。 【示例】0(用于辅助计量单位的起始库存(例如件/箱等第二单位))。 【JSON字段】startNumA。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.endNumA IS '【说明】辅助单位的变动后库存,同样未启用。 【示例】0(用于辅助单位的变动后库存,同样未启用)。 【JSON字段】endNumA。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.remark IS '【说明】备注信息,用于手工记录本次变更的特殊原因说明(例如“盘点差异调整”“报损”)。 【示例】NULL(备注信息,用于手工记录本次变更的特殊原因说明(例如“盘点差异调整”“报损”))。 【JSON字段】remark。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.operatorName IS '【说明】执行此次库存变动的操作人。 【示例】收银员:郑丽珊(用于执行此次库存变动的操作人)。 【JSON字段】operatorName。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.createTime IS '【说明】这条库存变动记录的创建时间,即发生库存变更的时间点。 【示例】2025-11-09 23:23:34(用于这条库存变动记录的创建时间,即发生库存变更的时间点)。 【JSON字段】createTime。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】goods_stock_movements.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/goods_stock_movements.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。'; + + +CREATE TABLE IF NOT EXISTS billiards_ods.stock_goods_category_tree ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + category_name TEXT, + alias_name TEXT, + pid BIGINT, + business_name TEXT, + tenant_goods_business_id BIGINT, + open_salesman INT, + categoryBoxes JSONB, + sort INT, + is_warehousing INT, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.stock_goods_category_tree IS 'ODS 原始明细表:商品分类树。来源:C:/dev/LLTQ/export/test-json-doc/stock_goods_category_tree.json;分析:stock_goods_category_tree-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.id IS '【说明】分类节点主键 ID(在商品分类维度中的唯一标识)。 【示例】2790683528350533(用于分类节点主键 ID(在商品分类维度中的唯一标识))。 【JSON字段】id。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.tenant_id IS '【说明】租户 ID(品牌/商户 ID)。 【示例】2790683160709957(用于租户 ID(品牌/商户 ID))。 【JSON字段】tenant_id。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.category_name IS '【说明】分类名称(实际业务分类名称)。 【示例】槟榔(用于分类名称(实际业务分类名称))。 【JSON字段】category_name。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.alias_name IS '【说明】名称字段,用于展示与辅助识别。。 【示例】NULL(名称字段,用于展示与辅助识别。)。 【JSON字段】alias_name。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.pid IS '【说明】父级分类 ID。 【示例】0(用于父级分类 ID)。 【JSON字段】pid。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.business_name IS '【说明】业务大类名称。 【示例】槟榔(用于业务大类名称)。 【JSON字段】business_name。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.tenant_goods_business_id IS '【说明】业务大类 ID。 【示例】2790683528317766(用于业务大类 ID)。 【JSON字段】tenant_goods_business_id。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.open_salesman IS '【说明】是否启用“营业员”或“导购提成”相关的功能开关。 【示例】2(用于是否启用“营业员”或“导购提成”相关的功能开关)。 【JSON字段】open_salesman。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.categoryBoxes IS '【说明】子分类数组。 【示例】[{"id": 2790683528350534, "tenant_id": 2790683160709957, "category_name": "槟榔", "alias_name": "", "pid": 27906835283505…(用于子分类数组)。 【JSON字段】categoryBoxes。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.sort IS '【说明】分类的排序序号,用于前端展示顺序的控制。 【示例】1(分类的排序序号,用于前端展示顺序的控制)。 【JSON字段】sort。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.is_warehousing IS '【说明】本文件可视为“所有参与库存管理的商品分类清单”,因此均为 1。 【示例】1(用于本文件可视为“所有参与库存管理的商品分类清单”,因此均为 1)。 【JSON字段】is_warehousing。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】stock_goods_category_tree.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/stock_goods_category_tree.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。'; + + +CREATE TABLE IF NOT EXISTS billiards_ods.goods_stock_summary ( + siteGoodsId BIGINT PRIMARY KEY, + goodsName TEXT, + goodsUnit TEXT, + goodsCategoryId BIGINT, + goodsCategorySecondId BIGINT, + categoryName TEXT, + rangeStartStock NUMERIC(18,4), + rangeEndStock NUMERIC(18,4), + rangeIn NUMERIC(18,4), + rangeOut NUMERIC(18,4), + rangeSale NUMERIC(18,4), + rangeSaleMoney NUMERIC(18,2), + rangeInventory NUMERIC(18,4), + currentStock NUMERIC(18,4), + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.goods_stock_summary IS 'ODS 原始明细表:商品库存汇总。来源:C:/dev/LLTQ/export/test-json-doc/goods_stock_summary.json;分析:goods_stock_summary-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.siteGoodsId IS '【说明】门店商品 ID,本库存汇总表的主键,对应某个具体商品在本店的唯一标识。 【示例】2791953867886725(用于门店商品 ID,本库存汇总表的主键,对应某个具体商品在本店的唯一标识)。 【JSON字段】siteGoodsId。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsName IS '【说明】商品名称,冗余于门店商品档案的 goods_name。 【示例】东方树叶(用于商品名称,冗余于门店商品档案的 goods_name)。 【JSON字段】goodsName。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsUnit IS '【说明】商品的计量单位(售卖单位)。 【示例】瓶(用于商品的计量单位(售卖单位))。 【JSON字段】goodsUnit。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsCategoryId IS '【说明】一级商品分类 ID。 【示例】2790683528350539(用于一级商品分类 ID)。 【JSON字段】goodsCategoryId。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsCategorySecondId IS '【说明】二级(次级)商品分类 ID,是 goodsCategoryId 的下级分类。 【示例】2790683528350540(用于二级(次级)商品分类 ID,是 goodsCategoryId 的下级分类)。 【JSON字段】goodsCategorySecondId。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.categoryName IS '【说明】一级分类名称,属于冗余字段,用于直接展示。 【示例】酒水(一级分类名称,属于冗余字段,用于直接展示)。 【JSON字段】categoryName。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeStartStock IS '【说明】查询区间 起始时刻 的库存数量(期初库存)。 【示例】165(用于查询区间 起始时刻 的库存数量(期初库存))。 【JSON字段】rangeStartStock。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeEndStock IS '【说明】查询区间 结束时刻 的库存数量(期末库存)。 【示例】118(用于查询区间 结束时刻 的库存数量(期末库存))。 【JSON字段】rangeEndStock。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeIn IS '【说明】查询区间内的 入库数量汇总(正值),包括采购入库、调拨入库等。 【示例】450(用于查询区间内的 入库数量汇总(正值),包括采购入库、调拨入库等)。 【JSON字段】rangeIn。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeOut IS '【说明】查询区间内的 出库数量汇总,以 负数 表示从库存扣减(出库/销售)。 【示例】-497(用于查询区间内的 出库数量汇总,以 负数 表示从库存扣减(出库/销售))。 【JSON字段】rangeOut。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeSale IS '【说明】查询区间内,该商品的 销售数量汇总(售出多少“包/瓶/份”等)。 【示例】488(用于查询区间内,该商品的 销售数量汇总(售出多少“包/瓶/份”等))。 【JSON字段】rangeSale。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeSaleMoney IS '【说明】查询区间内,该商品销售的 金额小计(按商品维度汇总)。 【示例】3904.0(用于查询区间内,该商品销售的 金额小计(按商品维度汇总))。 【JSON字段】rangeSaleMoney。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeInventory IS '【说明】查询区间内的 盘点调整净变动量(盘盈–盘亏)。 【示例】0(用于查询区间内的 盘点调整净变动量(盘盈–盘亏))。 【JSON字段】rangeInventory。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.currentStock IS '【说明】导出时刻的实时库存数量。 【示例】118(用于导出时刻的实时库存数量)。 【JSON字段】currentStock。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】goods_stock_summary.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/goods_stock_summary.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。'; + + +CREATE TABLE IF NOT EXISTS billiards_ods.payment_transactions ( + id BIGINT PRIMARY KEY, + site_id BIGINT, + siteProfile JSONB, + relate_type INT, + relate_id BIGINT, + pay_amount NUMERIC(18,2), + pay_status INT, + pay_time TIMESTAMP, + create_time TIMESTAMP, + payment_method INT, + online_pay_channel INT, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.payment_transactions IS 'ODS 原始明细表:支付流水。来源:C:/dev/LLTQ/export/test-json-doc/payment_transactions.json;分析:payment_transactions-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.id IS '【说明】支付流水记录的主键 ID。 【示例】2957924026486597(用于支付流水记录的主键 ID)。 【JSON字段】id。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.site_id IS '【说明】支付记录所属的门店 ID。 【示例】2790685415443269(用于支付记录所属的门店 ID)。 【JSON字段】site_id。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.siteProfile IS '【说明】门店信息快照,与其他 JSON 中的 siteProfile 结构一致。 【示例】{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "avatar": "https://oss.ficoo.vip/admin/hXcE4E…(用于门店信息快照,与其他 JSON 中的 siteProfile 结构一致)。 【JSON字段】siteProfile。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.relate_type IS '【说明】表示“这条支付记录关联的业务类型”。 【示例】2(用于表示“这条支付记录关联的业务类型”)。 【JSON字段】relate_type。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.relate_id IS '【说明】关联业务记录的主键 ID(按 relate_type 不同指向不同表)。 【示例】2957922914357125(用于关联业务记录的主键 ID(按 relate_type 不同指向不同表))。 【JSON字段】relate_id。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.pay_amount IS '【说明】本条支付流水的“支付金额”,单位为元。 【示例】10.0(用于本条支付流水的“支付金额”,单位为元)。 【JSON字段】pay_amount。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.pay_status IS '【说明】支付状态枚举字段。 【示例】2(用于支付状态枚举字段)。 【JSON字段】pay_status。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.pay_time IS '【说明】实际支付完成时间(支付状态变为成功的时间戳)。 【示例】2025-11-09 23:35:57(用于实际支付完成时间(支付状态变为成功的时间戳))。 【JSON字段】pay_time。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.create_time IS '【说明】支付记录创建时间,通常与发起支付请求的时间一致(创建支付流水的时间戳)。 【示例】2025-11-09 23:35:57(用于支付记录创建时间,通常与发起支付请求的时间一致(创建支付流水的时间戳))。 【JSON字段】create_time。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.payment_method IS '【说明】支付方式枚举,例如微信、支付宝、现金、银行卡、储值卡等某一种。 【示例】4(用于支付方式枚举,例如微信、支付宝、现金、银行卡、储值卡等某一种)。 【JSON字段】payment_method。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.online_pay_channel IS '【说明】每一笔结账单(settleList.id)对应一条支付记录(当前样本中是一条记录,relate_id 唯一)。 【示例】0(用于每一笔结账单(settleList.id)对应一条支付记录(当前样本中是一条记录,relate_id 唯一))。 【JSON字段】online_pay_channel。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】payment_transactions.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/payment_transactions.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.payment_transactions.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。'; + + +CREATE TABLE IF NOT EXISTS billiards_ods.refund_transactions ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + tenantName TEXT, + site_id BIGINT, + siteProfile JSONB, + relate_type INT, + relate_id BIGINT, + pay_sn TEXT, + pay_amount NUMERIC(18,2), + refund_amount NUMERIC(18,2), + round_amount NUMERIC(18,2), + pay_status INT, + pay_time TIMESTAMP, + create_time TIMESTAMP, + payment_method INT, + pay_terminal INT, + pay_config_id BIGINT, + online_pay_channel INT, + online_pay_type INT, + channel_fee NUMERIC(18,2), + channel_payer_id TEXT, + channel_pay_no TEXT, + member_id BIGINT, + member_card_id BIGINT, + cashier_point_id BIGINT, + operator_id BIGINT, + action_type INT, + check_status INT, + is_revoke INT, + is_delete INT, + balance_frozen_amount NUMERIC(18,2), + card_frozen_amount NUMERIC(18,2), + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.refund_transactions IS 'ODS 原始明细表:退款流水。来源:C:/dev/LLTQ/export/test-json-doc/refund_transactions.json;分析:refund_transactions-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.id IS '【说明】本条 退款流水 的唯一 ID。 【示例】2955202296416389(用于本条 退款流水 的唯一 ID)。 【JSON字段】id。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.tenant_id IS '【说明】租户/品牌 ID,全系统维度标识该商户。 【示例】2790683160709957(用于租户/品牌 ID,全系统维度标识该商户)。 【JSON字段】tenant_id。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.tenantName IS '【说明】租户(商户)名称。 【示例】朗朗桌球(用于租户(商户)名称)。 【JSON字段】tenantName。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.site_id IS '【说明】门店 ID。 【示例】2790685415443269(用于门店 ID)。 【JSON字段】site_id。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.siteProfile IS '【说明】门店信息快照,结构与其他 JSON 中的 siteProfile 完全一致。 【示例】{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "avatar": "https://oss.ficoo.vip/admin/hXcE4E…(用于门店信息快照,结构与其他 JSON 中的 siteProfile 完全一致)。 【JSON字段】siteProfile。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.relate_type IS '【说明】本退款对应的“业务类型”。 【示例】5(用于本退款对应的“业务类型”)。 【JSON字段】relate_type。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.relate_id IS '【说明】本次退款关联的业务 ID。 【示例】2955078219057349(用于本次退款关联的业务 ID)。 【JSON字段】relate_id。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.pay_sn IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】0(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】pay_sn。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.pay_amount IS '【说明】本次退款的 资金变动金额。 【示例】-5000.0(用于本次退款的 资金变动金额)。 【JSON字段】pay_amount。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.refund_amount IS '【说明】设计上本应显示“实际退款金额”(正数),与 pay_amount 配合使用。 【示例】0.0(用于设计上本应显示“实际退款金额”(正数),与 pay_amount 配合使用)。 【JSON字段】refund_amount。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.round_amount IS '【说明】舍入金额/抹零金额。 【示例】0.0(用于舍入金额/抹零金额)。 【JSON字段】round_amount。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.pay_status IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】2(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】pay_status。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.pay_time IS '【说明】退款在支付渠道层面实际发生的时间。 【示例】2025-11-08 01:27:16(用于退款在支付渠道层面实际发生的时间)。 【JSON字段】pay_time。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.create_time IS '【说明】本条退款流水在系统内创建时间。 【示例】2025-11-08 01:27:16(用于本条退款流水在系统内创建时间)。 【JSON字段】create_time。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.payment_method IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】4(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】payment_method。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.pay_terminal IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】pay_terminal。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.pay_config_id IS '【说明】支付配置 ID,例如商户在“非球科技”内配置的某一条支付通道(某个微信商户号、银联通道)的主键。 【示例】0(用于支付配置 ID,例如商户在“非球科技”内配置的某一条支付通道(某个微信商户号、银联通道)的主键)。 【JSON字段】pay_config_id。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.online_pay_channel IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】0(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】online_pay_channel。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.online_pay_type IS '【说明】当前:全部 0。 【示例】0(用于当前:全部 0)。 【JSON字段】online_pay_type。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.channel_fee IS '【说明】第三方支付渠道对本次退款收取的手续费。 【示例】0.0(用于第三方支付渠道对本次退款收取的手续费)。 【JSON字段】channel_fee。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.channel_payer_id IS '【说明】支付渠道侧的 payer ID,例如微信 openid、银行卡号掩码等。 【示例】NULL(用于支付渠道侧的 payer ID,例如微信 openid、银行卡号掩码等)。 【JSON字段】channel_payer_id。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.channel_pay_no IS '【说明】第三方支付平台的交易号(如微信支付单号、支付宝交易号等)。 【示例】NULL(用于第三方支付平台的交易号(如微信支付单号、支付宝交易号等))。 【JSON字段】channel_pay_no。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.member_id IS '【说明】租户内部的会员 ID(对应会员档案中的某个主键)。 【示例】0(用于租户内部的会员 ID(对应会员档案中的某个主键))。 【JSON字段】member_id。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.member_card_id IS '【说明】关联的会员卡账户 ID(对应“储值卡列表”或“会员档案”中的某一张卡)。 【示例】0(用于关联的会员卡账户 ID(对应“储值卡列表”或“会员档案”中的某一张卡))。 【JSON字段】member_card_id。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.cashier_point_id IS '【说明】收银点 ID,例如前台 1、前台 2、自助机等。 【示例】0(用于收银点 ID,例如前台 1、前台 2、自助机等)。 【JSON字段】cashier_point_id。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.operator_id IS '【说明】执行该退款操作的操作员 ID。 【示例】0(用于执行该退款操作的操作员 ID)。 【JSON字段】operator_id。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.action_type IS '【说明】当前:全部 2。 【示例】2(用于当前:全部 2)。 【JSON字段】action_type。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.check_status IS '【说明】当前:全部 1。 【示例】1(用于当前:全部 1)。 【JSON字段】check_status。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.is_revoke IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。。 【示例】0(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【JSON字段】is_revoke。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.is_delete IS '【说明】逻辑删除标志。 【示例】0(用于逻辑删除标志)。 【JSON字段】is_delete。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.balance_frozen_amount IS '【说明】涉及会员储值卡退款时,暂时冻结的余额金额。 【示例】0.0(用于涉及会员储值卡退款时,暂时冻结的余额金额)。 【JSON字段】balance_frozen_amount。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.card_frozen_amount IS '【说明】与上一个类似,偏向“某张卡的被冻结金额”,也与会员卡/储值账户相关。 【示例】0.0(用于与上一个类似,偏向“某张卡的被冻结金额”,也与会员卡/储值账户相关)。 【JSON字段】card_frozen_amount。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】refund_transactions.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/refund_transactions.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。'; + + +CREATE TABLE IF NOT EXISTS billiards_ods.platform_coupon_redemption_records ( + id BIGINT PRIMARY KEY, + verify_id BIGINT, + certificate_id TEXT, + coupon_code TEXT, + coupon_name TEXT, + coupon_channel INT, + groupon_type INT, + group_package_id BIGINT, + sale_price NUMERIC(18,2), + coupon_money NUMERIC(18,2), + coupon_free_time NUMERIC(18,2), + coupon_cover TEXT, + coupon_remark TEXT, + use_status INT, + consume_time TIMESTAMP, + create_time TIMESTAMP, + deal_id TEXT, + channel_deal_id TEXT, + site_id BIGINT, + site_order_id BIGINT, + table_id BIGINT, + tenant_id BIGINT, + operator_id BIGINT, + operator_name TEXT, + is_delete INT, + siteProfile JSONB, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.platform_coupon_redemption_records IS 'ODS 原始明细表:平台券核销/使用记录。来源:C:/dev/LLTQ/export/test-json-doc/platform_coupon_redemption_records.json;分析:platform_coupon_redemption_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.id IS '【说明】本条平台验券记录在本系统内的主键 ID。 【示例】2957929042218501(用于本条平台验券记录在本系统内的主键 ID)。 【JSON字段】id。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.verify_id IS '【说明】平台核销记录 ID(某些平台会为每一次核销生成一个唯一 ID)。 【示例】7570689090418149418(用于平台核销记录 ID(某些平台会为每一次核销生成一个唯一 ID))。 【JSON字段】verify_id。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.certificate_id IS '【说明】平台侧的凭证 ID(通常由第三方团购平台生成的券实例 ID)。 【示例】5008024789379597447(用于平台侧的凭证 ID(通常由第三方团购平台生成的券实例 ID))。 【JSON字段】certificate_id。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_code IS '【说明】券码,顾客出示的团购券密码/编号。 【示例】0102701209726(用于券码,顾客出示的团购券密码/编号)。 【JSON字段】coupon_code。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_name IS '【说明】团购券产品名称(即第三方平台上向顾客展示的名称)。 【示例】【全天可用】中八桌球一小时(A区)(用于团购券产品名称(即第三方平台上向顾客展示的名称))。 【JSON字段】coupon_name。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_channel IS '【说明】券来源渠道(第三方平台渠道编号)。 【示例】1(用于券来源渠道(第三方平台渠道编号))。 【JSON字段】coupon_channel。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.groupon_type IS '【说明】团购券类型。 【示例】1(用于团购券类型)。 【JSON字段】groupon_type。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.group_package_id IS '【说明】标识类 ID 字段,用于关联/定位相关实体。。 【示例】0(标识类 ID 字段,用于关联/定位相关实体。)。 【JSON字段】group_package_id。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.sale_price IS '【说明】顾客在第三方平台上实际支付的价格(团购售价)。 【示例】29.9(用于顾客在第三方平台上实际支付的价格(团购售价))。 【JSON字段】sale_price。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_money IS '【说明】券面值 / 套餐价值(系统层面的“可抵扣金额或对应套餐价值”)。 【示例】48.0(用于券面值 / 套餐价值(系统层面的“可抵扣金额或对应套餐价值”))。 【JSON字段】coupon_money。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_free_time IS '【说明】券附带的“免费时长”字段(例如送多少分钟台费)。 【示例】0(用于券附带的“免费时长”字段(例如送多少分钟台费))。 【JSON字段】coupon_free_time。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_cover IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】coupon_cover。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_remark IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】617547ec-9697-4f58-a700-b30a49e88904||CgYIASAHKAESLgos9ZhHDryhHb0z3RpdBZ0dVoaQbkldBcx/XTXPV8Te+9SEqYOa7aDp8nbKOpsaAA==(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】coupon_remark。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.use_status IS '【说明】值 1:198 条。 【示例】1(用于值 1:198 条)。 【JSON字段】use_status。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.consume_time IS '【说明】券被核销/使用的业务时间。 【示例】2025-11-09 23:41:04(用于券被核销/使用的业务时间)。 【JSON字段】consume_time。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.create_time IS '【说明】验券记录在本系统中创建的时间(记录入库时间)。 【示例】2025-11-09 23:41:03(用于验券记录在本系统中创建的时间(记录入库时间))。 【JSON字段】create_time。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.deal_id IS '【说明】另一个层次的团购产品 ID。 【示例】1345108507(用于另一个层次的团购产品 ID)。 【JSON字段】deal_id。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.channel_deal_id IS '【说明】渠道侧 dealId / 产品 ID,一般是第三方平台给该团购商品定义的主键。 【示例】1128411555(用于渠道侧 dealId / 产品 ID,一般是第三方平台给该团购商品定义的主键)。 【JSON字段】channel_deal_id。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.site_id IS '【说明】门店 ID。 【示例】2790685415443269(用于门店 ID)。 【JSON字段】site_id。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.site_order_id IS '【说明】门店内部的订单 ID(平台券核销时对应的店内订单)。 【示例】2957929043037702(用于门店内部的订单 ID(平台券核销时对应的店内订单))。 【JSON字段】site_order_id。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.table_id IS '【说明】使用券的球台 ID。 【示例】2793001904918661(用于使用券的球台 ID)。 【JSON字段】table_id。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.tenant_id IS '【说明】商户/租户 ID(品牌级别)。 【示例】2790683160709957(用于商户/租户 ID(品牌级别))。 【JSON字段】tenant_id。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.operator_id IS '【说明】操作员 ID(执行验券操作的收银员/员工)。 【示例】2790687322443013(用于操作员 ID(执行验券操作的收银员/员工))。 【JSON字段】operator_id。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.operator_name IS '【说明】操作员姓名,例如 "收银员:郑丽珊"。 【示例】收银员:郑丽珊(用于操作员姓名,例如 "收银员:郑丽珊")。 【JSON字段】operator_name。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.is_delete IS '【说明】把平台验券记录挂到本门店的一条订单上。 【示例】0(用于把平台验券记录挂到本门店的一条订单上)。 【JSON字段】is_delete。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.siteProfile IS '【说明】门店信息快照。 【示例】{"id": 2790685415443269, "org_id": 2790684179467077, "shop_name": "朗朗桌球", "avatar": "https://oss.ficoo.vip/admin/hXcE4E…(用于门店信息快照)。 【JSON字段】siteProfile。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】platform_coupon_redemption_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/platform_coupon_redemption_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。'; + + +CREATE TABLE IF NOT EXISTS billiards_ods.tenant_goods_master ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + goods_name TEXT, + goods_bar_code TEXT, + goods_category_id BIGINT, + goods_second_category_id BIGINT, + categoryName TEXT, + unit TEXT, + goods_number TEXT, + out_goods_id TEXT, + goods_state INT, + sale_channel INT, + able_discount INT, + able_site_transfer INT, + is_delete INT, + is_warehousing INT, + isInSite INT, + cost_price NUMERIC(18,4), + cost_price_type INT, + market_price NUMERIC(18,4), + min_discount_price NUMERIC(18,4), + common_sale_royalty NUMERIC(18,4), + point_sale_royalty NUMERIC(18,4), + pinyin_initial TEXT, + commodityCode TEXT, + commodity_code TEXT, + goods_cover TEXT, + supplier_id BIGINT, + remark_name TEXT, + create_time TIMESTAMP, + update_time TIMESTAMP, + payload JSONB NOT NULL, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now() +); + +COMMENT ON TABLE billiards_ods.tenant_goods_master IS 'ODS 原始明细表:租户商品主数据。来源:C:/dev/LLTQ/export/test-json-doc/tenant_goods_master.json;分析:tenant_goods_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.id IS '【说明】商品档案主键 ID,唯一标识一条商品。 【示例】2791925230096261(用于商品档案主键 ID,唯一标识一条商品)。 【JSON字段】id。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】tenant_id。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_name IS '【说明】商品名称(前台展示名称)。 【示例】东方树叶(用于商品名称(前台展示名称))。 【JSON字段】goods_name。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_bar_code IS '【说明】商品条码(EAN 等),目前未维护。 【示例】NULL(用于商品条码(EAN 等),目前未维护)。 【JSON字段】goods_bar_code。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_category_id IS '【说明】商品一级分类 ID。 【示例】2790683528350539(用于商品一级分类 ID)。 【JSON字段】goods_category_id。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_second_category_id IS '【说明】商品二级分类 ID。 【示例】2790683528350540(用于商品二级分类 ID)。 【JSON字段】goods_second_category_id。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.categoryName IS '【说明】商品一级分类名称(业务可读)。 【示例】饮料(用于商品一级分类名称(业务可读))。 【JSON字段】categoryName。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.unit IS '【说明】计量单位。 【示例】瓶(用于计量单位)。 【JSON字段】unit。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_number IS '【说明】商品内部编码(自定义货号/系统货号)。 【示例】1(用于商品内部编码(自定义货号/系统货号))。 【JSON字段】goods_number。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.out_goods_id IS '【说明】外部系统商品 ID(对接第三方平台使用,如外卖、线上商城等)。 【示例】0(用于外部系统商品 ID(对接第三方平台使用,如外卖、线上商城等))。 【JSON字段】out_goods_id。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_state IS '【说明】商品状态(上架/下架等)。 【示例】1(用于商品状态(上架/下架等))。 【JSON字段】goods_state。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.sale_channel IS '【说明】销售渠道类型,如“门店堂食/线下零售/线上小程序”等的一种编码。 【示例】1(用于销售渠道类型,如“门店堂食/线下零售/线上小程序”等的一种编码)。 【JSON字段】sale_channel。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.able_discount IS '【说明】是否允许参与折扣/打折。 【示例】1(用于是否允许参与折扣/打折)。 【JSON字段】able_discount。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.able_site_transfer IS '【说明】布尔/开关字段,用于表示权限、可用性或状态开关。。 【示例】2(布尔/开关字段,用于表示权限、可用性或状态开关。)。 【JSON字段】able_site_transfer。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.is_delete IS '【说明】逻辑删除标志。 【示例】0(用于逻辑删除标志)。 【JSON字段】is_delete。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.is_warehousing IS '【说明】是否启用库存管理。 【示例】1(用于是否启用库存管理)。 【JSON字段】is_warehousing。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.isInSite IS '【说明】是否在当前门店启用/上架。 【示例】false(用于是否在当前门店启用/上架)。 【JSON字段】isInSite。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.cost_price IS '【说明】成本价格。 【示例】0.0(用于成本价格)。 【JSON字段】cost_price。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.cost_price_type IS '【说明】金额字段,用于计费/结算/分摊等金额计算。。 【示例】1(金额字段,用于计费/结算/分摊等金额计算。)。 【JSON字段】cost_price_type。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.market_price IS '【说明】商品标价 / 售价(标准销售单价)。 【示例】8.0(用于商品标价 / 售价(标准销售单价))。 【JSON字段】market_price。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.min_discount_price IS '【说明】该商品允许售卖的最低价格(底价)。 【示例】0.0(用于该商品允许售卖的最低价格(底价))。 【JSON字段】min_discount_price。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.common_sale_royalty IS '【说明】普通销售提成比例或提成金额的配置字段。 【示例】0(用于普通销售提成比例或提成金额的配置字段)。 【JSON字段】common_sale_royalty。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.point_sale_royalty IS '【说明】积分销售提成/积分赠送规则相关配置。 【示例】0(用于积分销售提成/积分赠送规则相关配置)。 【JSON字段】point_sale_royalty。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.pinyin_initial IS '【说明】拼音首字母/助记码。 【示例】DFSY,DFSX(用于拼音首字母/助记码)。 【JSON字段】pinyin_initial。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.commodityCode IS '【说明】与 commodity_code 是同一信息的数组形式(冗余存储),便于支持一个商品对应多个编码的场景。 【示例】["10000028"](用于与 commodity_code 是同一信息的数组形式(冗余存储),便于支持一个商品对应多个编码的场景)。 【JSON字段】commodityCode。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.commodity_code IS '【说明】商品编码(通常为对外商品编码或条码)。 【示例】10000028(用于商品编码(通常为对外商品编码或条码))。 【JSON字段】commodity_code。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_cover IS '【说明】商品封面图片 URL 地址。 【示例】https://oss.ficoo.vip/admin/ZwS8fj_1753175129443.jpg(用于商品封面图片 URL 地址)。 【JSON字段】goods_cover。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.supplier_id IS '【说明】供应商 ID,用于关联到供应商档案。 【示例】0(供应商 ID,用于关联到供应商档案)。 【JSON字段】supplier_id。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.remark_name IS '【说明】商品备注名/别名,通常用来配置简写或特殊显示名称。 【示例】NULL(用于商品备注名/别名,通常用来配置简写或特殊显示名称)。 【JSON字段】remark_name。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.create_time IS '【说明】商品档案创建时间。 【示例】2025-07-15 17:13:15(用于商品档案创建时间)。 【JSON字段】create_time。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.update_time IS '【说明】商品档案最近一次修改时间。 【示例】2025-10-29 23:51:38(用于商品档案最近一次修改时间)。 【JSON字段】update_time。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】tenant_goods_master.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/tenant_goods_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。'; + + +CREATE TABLE IF NOT EXISTS billiards_ods.group_buy_packages ( + id BIGINT PRIMARY KEY, + package_id BIGINT, + package_name TEXT, + selling_price NUMERIC(18,2), + coupon_money NUMERIC(18,2), + date_type INT, + date_info TEXT, + start_time TIMESTAMP, + end_time TIMESTAMP, + start_clock TEXT, + end_clock TEXT, + add_start_clock TEXT, + add_end_clock TEXT, + duration INT, + usable_count INT, + usable_range INT, + table_area_id BIGINT, + table_area_name TEXT, + table_area_id_list JSONB, + tenant_table_area_id BIGINT, + tenant_table_area_id_list JSONB, + site_id BIGINT, + site_name TEXT, + tenant_id BIGINT, + card_type_ids JSONB, + group_type INT, + system_group_type INT, + type INT, + effective_status INT, + is_enabled INT, + is_delete INT, + max_selectable_categories INT, + area_tag_type INT, + creator_name TEXT, + create_time TIMESTAMP, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.group_buy_packages IS 'ODS 原始明细表:团购套餐主数据。来源:C:/dev/LLTQ/export/test-json-doc/group_buy_packages.json;分析:group_buy_packages-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.id IS '【说明】门店侧套餐 ID,本文件内部的主键。 【示例】2939215004469573(用于门店侧套餐 ID,本文件内部的主键)。 【JSON字段】id。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.package_id IS '【说明】“上层套餐 ID” 或“总部/系统级套餐 ID”。 【示例】1814707240811572(用于“上层套餐 ID” 或“总部/系统级套餐 ID”)。 【JSON字段】package_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.package_name IS '【说明】团购套餐名称,用于前台展示和核销界面。 【示例】早场特惠一小时(团购套餐名称,用于前台展示和核销界面)。 【JSON字段】package_name。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.selling_price IS '【说明】语义上应该是“团购售卖价”(顾客在平台购买券时的成交价格)。 【示例】0.0(用于语义上应该是“团购售卖价”(顾客在平台购买券时的成交价格))。 【JSON字段】selling_price。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.coupon_money IS '【说明】券面值或内部结算面值,表示该套餐在门店侧对应的金额额度。 【示例】0.0(用于券面值或内部结算面值,表示该套餐在门店侧对应的金额额度)。 【JSON字段】coupon_money。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.date_type IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】date_type。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.date_info IS '【说明】预留字段,通常用来存储更细粒度的日期信息,如具体日期列表、节假日特殊规则(可能是 JSON 字符串或编码)。 【示例】0(用于预留字段,通常用来存储更细粒度的日期信息,如具体日期列表、节假日特殊规则(可能是 JSON 字符串或编码))。 【JSON字段】date_info。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.start_time IS '【说明】套餐开始生效的日期时间。 【示例】2025-10-27 00:00:00(用于套餐开始生效的日期时间)。 【JSON字段】start_time。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.end_time IS '【说明】套餐失效的日期时间(到这个时间点后不可使用)。 【示例】2026-10-28 00:00:00(用于套餐失效的日期时间(到这个时间点后不可使用))。 【JSON字段】end_time。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.start_clock IS '【说明】每日可用起始时间点(第一段)。 【示例】00:00:00(用于每日可用起始时间点(第一段))。 【JSON字段】start_clock。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.end_clock IS '【说明】每日可用的结束时间点(第一段)。 【示例】1.00:00:00(用于每日可用的结束时间点(第一段))。 【JSON字段】end_clock。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.add_start_clock IS '【说明】附加可用时间段的起始时间(第二段)。 【示例】00:00:00(用于附加可用时间段的起始时间(第二段))。 【JSON字段】add_start_clock。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.add_end_clock IS '【说明】附加时段结束时间,多数情况配合 "00:00:00" 或 "10:00:00" 使用。 【示例】1.00:00:00(用于附加时段结束时间,多数情况配合 "00:00:00" 或 "10:00:00" 使用)。 【JSON字段】add_end_clock。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.duration IS '【说明】套餐内包含的时长(秒)。 【示例】3600(用于套餐内包含的时长(秒))。 【JSON字段】duration。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.usable_count IS '【说明】可使用次数上限。 【示例】9999999(用于可使用次数上限)。 【JSON字段】usable_count。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.usable_range IS '【说明】一般用于文字描述可用日期范围(例如“周一至周五”)。 【示例】NULL(一般用于文字描述可用日期范围(例如“周一至周五”))。 【JSON字段】usable_range。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.table_area_id IS '【说明】原始设计应为“单一台区 ID”,当套餐只限一个区域可以用这个字段存储。 【示例】0(用于原始设计应为“单一台区 ID”,当套餐只限一个区域可以用这个字段存储)。 【JSON字段】table_area_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.table_area_name IS '【说明】套餐适用的“门店台区名称”,用于显示和筛选。 【示例】A区(套餐适用的“门店台区名称”,用于显示和筛选)。 【JSON字段】table_area_name。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.table_area_id_list IS '【说明】用来存放具体台区 ID 列表(例如 "1,2,3"),实现更细粒度的台桌限制。 【示例】NULL(用于用来存放具体台区 ID 列表(例如 "1,2,3"),实现更细粒度的台桌限制)。 【JSON字段】table_area_id_list。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.tenant_table_area_id IS '【说明】与 table_area_id 类似,是租户层级的台区 ID,原本用于单区选择。 【示例】0(与 table_area_id 类似,是租户层级的台区 ID,原本用于单区选择)。 【JSON字段】tenant_table_area_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.tenant_table_area_id_list IS '【说明】实际代表“台区集合 ID”或“租户台区配置 ID”,用来限制套餐可用的台区范围。 【示例】2791960001957765(用于实际代表“台区集合 ID”或“租户台区配置 ID”,用来限制套餐可用的台区范围)。 【JSON字段】tenant_table_area_id_list。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.site_id IS '【说明】门店 ID。 【示例】2790685415443269(用于门店 ID)。 【JSON字段】site_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.site_name IS '【说明】门店名称。 【示例】朗朗桌球(用于门店名称)。 【JSON字段】site_name。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.tenant_id IS '【说明】租户 ID(品牌/商户 ID)。 【示例】2790683160709957(用于租户 ID(品牌/商户 ID))。 【JSON字段】tenant_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.card_type_ids IS '【说明】原意是“适用会员卡类型 ID 列表”,例如某套餐只允许某几种会员卡使用,可以在此配置。 【示例】0(用于原意是“适用会员卡类型 ID 列表”,例如某套餐只允许某几种会员卡使用,可以在此配置)。 【JSON字段】card_type_ids。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.group_type IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】group_type。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.system_group_type IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】system_group_type。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.type IS '【说明】内部业务子类型,具体含义需要结合系统文档。 【示例】2(用于内部业务子类型,具体含义需要结合系统文档)。 【JSON字段】type。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.effective_status IS '【说明】1:13 条。 【示例】1(用于1:13 条)。 【JSON字段】effective_status。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.is_enabled IS '【说明】启用状态。 【示例】1(用于启用状态)。 【JSON字段】is_enabled。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.is_delete IS '【说明】逻辑删除标志。 【示例】0(用于逻辑删除标志)。 【JSON字段】is_delete。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.max_selectable_categories IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】0(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】max_selectable_categories。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.area_tag_type IS '【说明】1 很可能代表“按台区标签限制”,例如 A区、中八区、包厢、KTV 等。 【示例】1(用于1 很可能代表“按台区标签限制”,例如 A区、中八区、包厢、KTV 等)。 【JSON字段】area_tag_type。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.creator_name IS '【说明】创建人信息,一般包含“角色:姓名”。 【示例】店长:郑丽珊(用于创建人信息,一般包含“角色:姓名”)。 【JSON字段】creator_name。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.create_time IS '【说明】该套餐在系统中创建的时间。 【示例】2025-10-27 18:24:09(用于该套餐在系统中创建的时间)。 【JSON字段】create_time。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】group_buy_packages.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/group_buy_packages.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。'; + + +CREATE TABLE IF NOT EXISTS billiards_ods.group_buy_redemption_records ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + site_id BIGINT, + siteName TEXT, + table_id BIGINT, + tableName TEXT, + tableAreaName TEXT, + tenant_table_area_id BIGINT, + order_trade_no TEXT, + order_settle_id BIGINT, + order_pay_id BIGINT, + order_coupon_id BIGINT, + order_coupon_channel INT, + coupon_code TEXT, + coupon_money NUMERIC(18,2), + coupon_origin_id BIGINT, + ledger_name TEXT, + ledger_group_name TEXT, + ledger_amount NUMERIC(18,2), + ledger_count NUMERIC(18,4), + ledger_unit_price NUMERIC(18,4), + ledger_status INT, + table_charge_seconds INT, + promotion_activity_id BIGINT, + promotion_coupon_id BIGINT, + promotion_seconds INT, + offer_type INT, + assistant_promotion_money NUMERIC(18,2), + assistant_service_promotion_money NUMERIC(18,2), + table_service_promotion_money NUMERIC(18,2), + goods_promotion_money NUMERIC(18,2), + recharge_promotion_money NUMERIC(18,2), + reward_promotion_money NUMERIC(18,2), + goodsOptionPrice NUMERIC(18,2), + salesman_name TEXT, + sales_man_org_id BIGINT, + salesman_role_id BIGINT, + salesman_user_id BIGINT, + operator_id BIGINT, + operator_name TEXT, + is_single_order INT, + is_delete INT, + create_time TIMESTAMP, + payload JSONB NOT NULL, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now() +); + +COMMENT ON TABLE billiards_ods.group_buy_redemption_records IS 'ODS 原始明细表:团购核销记录。来源:C:/dev/LLTQ/export/test-json-doc/group_buy_redemption_records.json;分析:group_buy_redemption_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.id IS '【说明】本条“团购套餐流水”记录的 主键 ID。 【示例】2957924029615941(用于本条“团购套餐流水”记录的 主键 ID)。 【JSON字段】id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】tenant_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.site_id IS '【说明】门店 ID,与其它 JSON 中一致。 【示例】2790685415443269(用于门店 ID,与其它 JSON 中一致)。 【JSON字段】site_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.siteName IS '【说明】门店名称,冗余展示用。 【示例】朗朗桌球(用于门店名称,冗余展示用)。 【JSON字段】siteName。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.table_id IS '【说明】球台 ID。 【示例】2793003705192517(用于球台 ID)。 【JSON字段】table_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.tableName IS '【说明】本次使用券所关联的 球台名称/台号。 【示例】A17(用于本次使用券所关联的 球台名称/台号)。 【JSON字段】tableName。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.tableAreaName IS '【说明】该球台所属的 台区名称。 【示例】A区(用于该球台所属的 台区名称)。 【JSON字段】tableAreaName。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.tenant_table_area_id IS '【说明】租户级台区分组 ID,表示当前使用券的台桌所属的区域组合。 【示例】2791960001957765(用于租户级台区分组 ID,表示当前使用券的台桌所属的区域组合)。 【JSON字段】tenant_table_area_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_trade_no IS '【说明】订单交易号,和其它消费明细(台费、商品、助教、团购)共用的订单主键。 【示例】2957858167230149(用于订单交易号,和其它消费明细(台费、商品、助教、团购)共用的订单主键)。 【JSON字段】order_trade_no。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_settle_id IS '【说明】结算单 ID(小票结账主键)。 【示例】2957922914357125(用于结算单 ID(小票结账主键))。 【JSON字段】order_settle_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_pay_id IS '【说明】指向支付记录表中的支付流水 ID。 【示例】0(用于指向支付记录表中的支付流水 ID)。 【JSON字段】order_pay_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_coupon_id IS '【说明】订单中“券使用记录”的 ID。 【示例】2957858168229573(用于订单中“券使用记录”的 ID)。 【JSON字段】order_coupon_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_coupon_channel IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】order_coupon_channel。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.coupon_code IS '【说明】团购券券码,核销时扫描/录入的字符串。 【示例】0107892475999(用于团购券券码,核销时扫描/录入的字符串)。 【JSON字段】coupon_code。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.coupon_money IS '【说明】本次核销时,这张券在门店侧对应的金额额度(“可抵扣金额”)。 【示例】48.0(用于本次核销时,这张券在门店侧对应的金额额度(“可抵扣金额”))。 【JSON字段】coupon_money。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.coupon_origin_id IS '【说明】平台/上游系统中的券记录主键 ID,“券来源 ID”。 【示例】2957858168229573(用于平台/上游系统中的券记录主键 ID,“券来源 ID”)。 【JSON字段】coupon_origin_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_name IS '【说明】台费侧关联的“团购项目名称”(记账名)。 【示例】全天A区中八一小时(用于台费侧关联的“团购项目名称”(记账名))。 【JSON字段】ledger_name。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_group_name IS '【说明】团购项目所属的“记账分组名称”(例如“团购台费”“团购包厢”等)。 【示例】NULL(用于团购项目所属的“记账分组名称”(例如“团购台费”“团购包厢”等))。 【JSON字段】ledger_group_name。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_amount IS '【说明】本次券实际冲抵台费的金额。 【示例】48.0(用于本次券实际冲抵台费的金额)。 【JSON字段】ledger_amount。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_count IS '【说明】按此次优惠实际计算的“核销秒数”。 【示例】3600(用于按此次优惠实际计算的“核销秒数”)。 【JSON字段】ledger_count。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_unit_price IS '【说明】对应台费的标准单价,单位元/小时(从数值来看是类似29.9/小时这种定价)。 【示例】29.9(用于对应台费的标准单价,单位元/小时(从数值来看是类似29.9/小时这种定价))。 【JSON字段】ledger_unit_price。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_status IS '【说明】流水状态。 【示例】1(用于流水状态)。 【JSON字段】ledger_status。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.table_charge_seconds IS '【说明】本次结算中该球台总计计费的秒数(整台的台费计费时间)。 【示例】3600(用于本次结算中该球台总计计费的秒数(整台的台费计费时间))。 【JSON字段】table_charge_seconds。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.promotion_activity_id IS '【说明】团购/促销活动 ID。 【示例】2957858166460101(用于团购/促销活动 ID)。 【JSON字段】promotion_activity_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.promotion_coupon_id IS '【说明】团购套餐定义 ID。 【示例】2798727423528005(用于团购套餐定义 ID)。 【JSON字段】promotion_coupon_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.promotion_seconds IS '【说明】团购套餐定义的“标准时长”(券本身标称的可用时长)。 【示例】3600(用于团购套餐定义的“标准时长”(券本身标称的可用时长))。 【JSON字段】promotion_seconds。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.offer_type IS '【说明】优惠类型。 【示例】1(用于优惠类型)。 【JSON字段】offer_type。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.assistant_promotion_money IS '【说明】分摊到“助教服务”的促销金额。 【示例】0.0(用于分摊到“助教服务”的促销金额)。 【JSON字段】assistant_promotion_money。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.assistant_service_promotion_money IS '【说明】进一步细分助教服务的促销金额。 【示例】0.0(用于进一步细分助教服务的促销金额)。 【JSON字段】assistant_service_promotion_money。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.table_service_promotion_money IS '【说明】本次券使用中,分摊到“台费服务费”部分的促销金额。 【示例】0.0(用于本次券使用中,分摊到“台费服务费”部分的促销金额)。 【JSON字段】table_service_promotion_money。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.goods_promotion_money IS '【说明】本次券使用中,分摊到“商品”部分的促销金额。 【示例】0.0(用于本次券使用中,分摊到“商品”部分的促销金额)。 【JSON字段】goods_promotion_money。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.recharge_promotion_money IS '【说明】来自“充值类优惠”的分摊金额(例如储值赠送部分)。 【示例】0.0(用于来自“充值类优惠”的分摊金额(例如储值赠送部分))。 【JSON字段】recharge_promotion_money。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.reward_promotion_money IS '【说明】本次促销中,属于“奖励金/积分抵扣”的金额。 【示例】0.0(用于本次促销中,属于“奖励金/积分抵扣”的金额)。 【JSON字段】reward_promotion_money。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.goodsOptionPrice IS '【说明】商品规格价格,用于商品类促销分摊时使用。 【示例】0.0(商品规格价格,用于商品类促销分摊时使用)。 【JSON字段】goodsOptionPrice。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.salesman_name IS '【说明】营业员姓名。 【示例】NULL(用于营业员姓名)。 【JSON字段】salesman_name。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.sales_man_org_id IS '【说明】营业员所属组织 ID。 【示例】0(用于营业员所属组织 ID)。 【JSON字段】sales_man_org_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.salesman_role_id IS '【说明】营业员角色 ID。 【示例】0(用于营业员角色 ID)。 【JSON字段】salesman_role_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.salesman_user_id IS '【说明】营业员/业务员用户 ID。 【示例】0(用于营业员/业务员用户 ID)。 【JSON字段】salesman_user_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.operator_id IS '【说明】执行本次核销/结算操作的 操作员 ID。 【示例】2790687322443013(用于执行本次核销/结算操作的 操作员 ID)。 【JSON字段】operator_id。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.operator_name IS '【说明】操作员名称(包含角色说明),与 operator_id 对应的冗余展示字段。 【示例】收银员:郑丽珊(用于操作员名称(包含角色说明),与 operator_id 对应的冗余展示字段)。 【JSON字段】operator_name。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.is_single_order IS '【说明】是否单独作为一条订单行。 【示例】1(用于是否单独作为一条订单行)。 【JSON字段】is_single_order。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.is_delete IS '【说明】逻辑删除标记(0=否,1=是)。。 【示例】0(用于逻辑删除标记(0=否,1=是))。 【JSON字段】is_delete。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.create_time IS '【说明】本条团购套餐使用流水创建时间(即券核销时间,或与结账时间接近)。 【示例】2025-11-09 23:35:57(用于本条团购套餐使用流水创建时间(即券核销时间,或与结账时间接近))。 【JSON字段】create_time。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】group_buy_redemption_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/group_buy_redemption_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。'; + + +CREATE TABLE IF NOT EXISTS billiards_ods.settlement_ticket_details ( + orderSettleId BIGINT PRIMARY KEY, + actualPayment NUMERIC(18,2), + adjustAmount NUMERIC(18,2), + assistantManualDiscount NUMERIC(18,2), + balanceAmount NUMERIC(18,2), + cashierName TEXT, + consumeMoney NUMERIC(18,2), + couponAmount NUMERIC(18,2), + deliveryAddress TEXT, + deliveryFee NUMERIC(18,2), + ledgerAmount NUMERIC(18,2), + memberDeductAmount NUMERIC(18,2), + memberOfferAmount NUMERIC(18,2), + onlineReturnAmount NUMERIC(18,2), + orderRemark TEXT, + orderSettleNumber BIGINT, + payMemberBalance NUMERIC(18,2), + payTime TIMESTAMP, + paymentMethod INT, + pointDiscountCost NUMERIC(18,2), + pointDiscountPrice NUMERIC(18,2), + prepayMoney NUMERIC(18,2), + refundAmount NUMERIC(18,2), + returnGoodsAmount NUMERIC(18,2), + rewardName TEXT, + settleType TEXT, + siteAddress TEXT, + siteBusinessTel TEXT, + siteId BIGINT, + siteName TEXT, + tenantId BIGINT, + tenantName TEXT, + ticketCustomContent TEXT, + ticketRemark TEXT, + voucherMoney NUMERIC(18,2), + memberProfile JSONB, + orderItem JSONB, + tenantMemberCardLogs JSONB, + payload JSONB NOT NULL, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now() +); + +COMMENT ON TABLE billiards_ods.settlement_ticket_details IS 'ODS 原始明细表:结算小票明细。来源:C:/dev/LLTQ/export/test-json-doc/settlement_ticket_details.json;分析:settlement_ticket_details-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderSettleId IS '【说明】结算单 ID(和顶层字段相同,再次冗余)。 【示例】2957922914357125(用于结算单 ID(和顶层字段相同,再次冗余))。 【JSON字段】orderSettleId。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.actualPayment IS '【说明】本单实际支付金额总和(顾客本次实际付出:现金 + 线上 + 会员余额等)。 【示例】NULL(用于本单实际支付金额总和(顾客本次实际付出:现金 + 线上 + 会员余额等))。 【JSON字段】actualPayment。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.adjustAmount IS '【说明】人工调价/整单调整金额(例如手工改价、折扣调整),是所有类型的手工调整合计。 【示例】NULL(用于人工调价/整单调整金额(例如手工改价、折扣调整),是所有类型的手工调整合计)。 【JSON字段】adjustAmount。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.assistantManualDiscount IS '【说明】针对“助教项目”的人工减免金额汇总(整单维度)。 【示例】NULL(用于针对“助教项目”的人工减免金额汇总(整单维度))。 【JSON字段】assistantManualDiscount。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.balanceAmount IS '【说明】本单通过“会员余额/储值卡”支付的金额(从余额中扣除的总额)。 【示例】NULL(用于本单通过“会员余额/储值卡”支付的金额(从余额中扣除的总额))。 【JSON字段】balanceAmount。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.cashierName IS '【说明】本单结算操作员名称(带角色前缀文字)。 【示例】NULL(用于本单结算操作员名称(带角色前缀文字))。 【JSON字段】cashierName。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.consumeMoney IS '【说明】本单“消费金额总计”(原价层面),即台费 + 商品 + 助教 + 服务等消费项目的金额总和(未扣除各类优惠)。 【示例】NULL(用于本单“消费金额总计”(原价层面),即台费 + 商品 + 助教 + 服务等消费项目的金额总和(未扣除各类优惠))。 【JSON字段】consumeMoney。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.couponAmount IS '【说明】本单由优惠券抵扣的金额汇总。 【示例】NULL(用于本单由优惠券抵扣的金额汇总)。 【JSON字段】couponAmount。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.deliveryAddress IS '【说明】配送地址(若存在外送业务时使用)。 【示例】NULL(用于配送地址(若存在外送业务时使用))。 【JSON字段】deliveryAddress。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.deliveryFee IS '【说明】配送费金额(如果支持外送业务)。 【示例】NULL(用于配送费金额(如果支持外送业务))。 【JSON字段】deliveryFee。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.ledgerAmount IS '【说明】商品小计金额(通常 = 单价 × 数量,未考虑其他折扣)。 【示例】NULL(用于商品小计金额(通常 = 单价 × 数量,未考虑其他折扣))。 【JSON字段】ledgerAmount。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.memberDeductAmount IS '【说明】会员抵扣的某种数量或金额(例如积分抵现金额、次卡次数抵扣等),当前数据未启用。 【示例】NULL(用于会员抵扣的某种数量或金额(例如积分抵现金额、次卡次数抵扣等),当前数据未启用)。 【JSON字段】memberDeductAmount。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.memberOfferAmount IS '【说明】由“会员权益/折扣”产生的优惠金额总计(整单维度)。 【示例】NULL(用于由“会员权益/折扣”产生的优惠金额总计(整单维度))。 【JSON字段】memberOfferAmount。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.onlineReturnAmount IS '【说明】本单通过线上支付渠道退回的金额(如微信/支付宝退款)。 【示例】NULL(用于本单通过线上支付渠道退回的金额(如微信/支付宝退款))。 【JSON字段】onlineReturnAmount。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderRemark IS '【说明】订单备注,由收银员录入,用于记录与本单相关的特殊说明。 【示例】NULL(订单备注,由收银员录入,用于记录与本单相关的特殊说明)。 【JSON字段】orderRemark。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderSettleNumber IS '【说明】结算单编号(与 ID 独立的一套编号体系,如流水号)。 【示例】NULL(用于结算单编号(与 ID 独立的一套编号体系,如流水号))。 【JSON字段】orderSettleNumber。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.payMemberBalance IS '【说明】使用会员余额支付的金额,用于区分与 balanceAmount 的不同维度(如“本次支付使用余额部分”与“余额本身变化”等),当前未实际使用。 【示例】NULL(使用会员余额支付的金额,用于区分与 balanceAmount 的不同维度(如“本次支付使用余额部分”与“余额本身变化”等),当前未实际使用)。 【JSON字段】payMemberBalance。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.payTime IS '【说明】本单最终支付成功时间。 【示例】NULL(用于本单最终支付成功时间)。 【JSON字段】payTime。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.paymentMethod IS '【说明】结算主支付方式编码(汇总视角)。 【示例】NULL(用于结算主支付方式编码(汇总视角))。 【JSON字段】paymentMethod。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.pointDiscountCost IS '【说明】积分抵扣对应的成本金额(成本侧)。 【示例】NULL(用于积分抵扣对应的成本金额(成本侧))。 【JSON字段】pointDiscountCost。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.pointDiscountPrice IS '【说明】积分抵扣对应的金额(售价侧)。 【示例】NULL(用于积分抵扣对应的金额(售价侧))。 【JSON字段】pointDiscountPrice。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.prepayMoney IS '【说明】预付金/定金在本单中使用的金额。 【示例】NULL(用于预付金/定金在本单中使用的金额)。 【JSON字段】prepayMoney。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.refundAmount IS '【说明】本单涉及的退款金额(汇总)。 【示例】NULL(用于本单涉及的退款金额(汇总))。 【JSON字段】refundAmount。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.returnGoodsAmount IS '【说明】本单涉及的退货金额汇总。 【示例】NULL(用于本单涉及的退货金额汇总)。 【JSON字段】returnGoodsAmount。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.rewardName IS '【说明】用于标识本单适用的激励方案名称,可能用于内部绩效或活动名称展示。 【示例】NULL(用于标识本单适用的激励方案名称,可能用于内部绩效或活动名称展示)。 【JSON字段】rewardName。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.settleType IS '【说明】结算类型字符串标识。 【示例】NULL(用于结算类型字符串标识)。 【JSON字段】settleType。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.siteAddress IS '【说明】门店地址(详细地址)。 【示例】NULL(用于门店地址(详细地址))。 【JSON字段】siteAddress。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.siteBusinessTel IS '【说明】门店电话。 【示例】NULL(用于门店电话)。 【JSON字段】siteBusinessTel。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.siteId IS '【说明】门店 ID。 【示例】NULL(用于门店 ID)。 【JSON字段】siteId。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.siteName IS '【说明】门店名称,如“朗朗桌球”。 【示例】NULL(用于门店名称,如“朗朗桌球”)。 【JSON字段】siteName。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.tenantId IS '【说明】租户 / 商户 ID(品牌维度)。 【示例】NULL(用于租户 / 商户 ID(品牌维度))。 【JSON字段】tenantId。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.tenantName IS '【说明】租户名称,如“朗朗桌球”。 【示例】NULL(用于租户名称,如“朗朗桌球”)。 【JSON字段】tenantName。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.ticketCustomContent IS '【说明】自定义小票内容,如商家自定义宣传语、条款等。 【示例】NULL(用于自定义小票内容,如商家自定义宣传语、条款等)。 【JSON字段】ticketCustomContent。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.ticketRemark IS '【说明】小票备注内容,可用于打印在小票底部或顶部(例如活动说明、特别提示)。 【示例】NULL(小票备注内容,可用于打印在小票底部或顶部(例如活动说明、特别提示))。 【JSON字段】ticketRemark。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.voucherMoney IS '【说明】代金券类金额字段(可能用于某类“代金券余额”或“券面值”记录)。 【示例】NULL(代金券类金额字段(可能用于某类“代金券余额”或“券面值”记录))。 【JSON字段】voucherMoney。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.memberProfile IS '【说明】不是会员卡主键,而是本次结账时的会员信息快照。 【示例】NULL(用于不是会员卡主键,而是本次结账时的会员信息快照)。 【JSON字段】memberProfile。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderItem IS '【说明】本次结算对应的“订单明细列表”,这部分是连接“台费流水 / 商品出库 / 券使用”等多个子领域的关键结构。 【示例】NULL(用于本次结算对应的“订单明细列表”,这部分是连接“台费流水 / 商品出库 / 券使用”等多个子领域的关键结构)。 【JSON字段】orderItem。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.tenantMemberCardLogs IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】tenantMemberCardLogs。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】settlement_ticket_details.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/settlement_ticket_details.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。'; + + +CREATE TABLE IF NOT EXISTS billiards_ods.store_goods_master ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + site_id BIGINT, + siteName TEXT, + tenant_goods_id BIGINT, + goods_name TEXT, + goods_bar_code TEXT, + goods_category_id BIGINT, + goods_second_category_id BIGINT, + oneCategoryName TEXT, + twoCategoryName TEXT, + unit TEXT, + sale_price NUMERIC(18,4), + cost_price NUMERIC(18,4), + cost_price_type INT, + min_discount_price NUMERIC(18,4), + safe_stock NUMERIC(18,4), + stock NUMERIC(18,4), + stock_A NUMERIC(18,4), + sale_num NUMERIC(18,4), + total_purchase_cost NUMERIC(18,4), + total_sales NUMERIC(18,4), + average_monthly_sales NUMERIC(18,4), + batch_stock_quantity NUMERIC(18,2), + days_available INT, + provisional_total_cost NUMERIC(18,2), + enable_status INT, + audit_status INT, + goods_state INT, + is_delete INT, + is_warehousing INT, + able_discount INT, + able_site_transfer INT, + forbid_sell_status INT, + "freeze" INT, + send_state INT, + custom_label_type INT, + option_required INT, + sale_channel INT, + sort INT, + remark TEXT, + pinyin_initial TEXT, + goods_cover TEXT, + create_time TIMESTAMP, + update_time TIMESTAMP, + payload JSONB NOT NULL, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now() +); + +COMMENT ON TABLE billiards_ods.store_goods_master IS 'ODS 原始明细表:门店商品主数据。来源:C:/dev/LLTQ/export/test-json-doc/store_goods_master.json;分析:store_goods_master-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.id IS '【说明】门店商品 ID,门店维度的商品主键。 【示例】2793025851560005(用于门店商品 ID,门店维度的商品主键)。 【JSON字段】id。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】tenant_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.site_id IS '【说明】门店 ID。 【示例】2790685415443269(用于门店 ID)。 【JSON字段】site_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.siteName IS '【说明】门店名称,是对 site_id 的冗余展示,方便直接阅读,无需再去关联门店档案。 【示例】朗朗桌球(用于门店名称,是对 site_id 的冗余展示,方便直接阅读,无需再去关联门店档案)。 【JSON字段】siteName。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.tenant_goods_id IS '【说明】租户/品牌维度的商品 ID,相当于“全局商品 ID”。 【示例】2792178593255301(用于租户/品牌维度的商品 ID,相当于“全局商品 ID”)。 【JSON字段】tenant_goods_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.goods_name IS '【说明】商品名称,例如“合味道泡面”“地道肠”“麻将房茶位费”等。 【示例】合味道泡面(用于商品名称,例如“合味道泡面”“地道肠”“麻将房茶位费”等)。 【JSON字段】goods_name。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.goods_bar_code IS '【说明】商品条形码(如 EAN-13 编码),用于扫码销售。 【示例】NULL(商品条形码(如 EAN-13 编码),用于扫码销售)。 【JSON字段】goods_bar_code。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.goods_category_id IS '【说明】商品一级分类 ID。 【示例】2791941988405125(用于商品一级分类 ID)。 【JSON字段】goods_category_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.goods_second_category_id IS '【说明】商品二级分类 ID。 【示例】2793236829620037(用于商品二级分类 ID)。 【JSON字段】goods_second_category_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.oneCategoryName IS '【说明】一级分类名称,如“零食”“酒水”“服务费”等。 【示例】零食(用于一级分类名称,如“零食”“酒水”“服务费”等)。 【JSON字段】oneCategoryName。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.twoCategoryName IS '【说明】二级分类名称,如“面”“洋酒”“纸巾”等。 【示例】面(用于二级分类名称,如“面”“洋酒”“纸巾”等)。 【JSON字段】twoCategoryName。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.unit IS '【说明】商品计量单位(销售单位)。 【示例】桶(用于商品计量单位(销售单位))。 【JSON字段】unit。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.sale_price IS '【说明】商品标准销售价(挂牌价),单位为元。 【示例】12.0(用于商品标准销售价(挂牌价),单位为元)。 【JSON字段】sale_price。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.cost_price IS '【说明】商品成本价(单件成本)。 【示例】0.0(用于商品成本价(单件成本))。 【JSON字段】cost_price。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.cost_price_type IS '【说明】1 代表使用“固定成本价”(手工维护的 cost_price),provisional_total_cost 按“数量 × cost_price”算。 【示例】1(用于1 代表使用“固定成本价”(手工维护的 cost_price),provisional_total_cost 按“数量 × cost_price”算)。 【JSON字段】cost_price_type。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.min_discount_price IS '【说明】最低允许成交价(限价)。 【示例】7.0(用于最低允许成交价(限价))。 【JSON字段】min_discount_price。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.safe_stock IS '【说明】安全库存量(阈值),低于该值时系统可以提示补货。 【示例】0(用于安全库存量(阈值),低于该值时系统可以提示补货)。 【JSON字段】safe_stock。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.stock IS '【说明】当前可用库存数量(以 unit 为单位)。 【示例】18(用于当前可用库存数量(以 unit 为单位))。 【JSON字段】stock。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.stock_A IS '【说明】副单位库存数量。 【示例】0(用于副单位库存数量)。 【JSON字段】stock_A。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.sale_num IS '【说明】在当前统计口径下的销售数量(总销量,单位同 unit)。 【示例】104(用于在当前统计口径下的销售数量(总销量,单位同 unit))。 【JSON字段】sale_num。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.total_purchase_cost IS '【说明】总采购成本,单位为元。 【示例】0.0(用于总采购成本,单位为元)。 【JSON字段】total_purchase_cost。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.total_sales IS '【说明】累计销售数量。 【示例】104(用于累计销售数量)。 【JSON字段】total_sales。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.average_monthly_sales IS '【说明】平均月销量(件/月),根据某个统计周期内的销售数据折算而来。 【示例】1.32(用于平均月销量(件/月),根据某个统计周期内的销售数据折算而来)。 【JSON字段】average_monthly_sales。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.batch_stock_quantity IS '【说明】当前“批次”的库存数量(主单位)。 【示例】43(用于当前“批次”的库存数量(主单位))。 【JSON字段】batch_stock_quantity。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.days_available IS '【说明】商品“在架天数”或“可售天数”,大致等于当前时间减去首次上架时间。 【示例】13(用于商品“在架天数”或“可售天数”,大致等于当前时间减去首次上架时间)。 【JSON字段】days_available。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.provisional_total_cost IS '【说明】暂估总成本,单位为元。 【示例】0.0(用于暂估总成本,单位为元)。 【JSON字段】provisional_total_cost。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.enable_status IS '【说明】控制商品档案是否参与任何业务(库存、销售等)。 【示例】1(用于控制商品档案是否参与任何业务(库存、销售等))。 【JSON字段】enable_status。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.audit_status IS '【说明】观察值:全部为 2。 【示例】2(用于观察值:全部为 2)。 【JSON字段】audit_status。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.goods_state IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】1(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】goods_state。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.is_delete IS '【说明】逻辑删除标志。 【示例】0(用于逻辑删除标志)。 【JSON字段】is_delete。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.is_warehousing IS '【说明】是否纳入库存管理。 【示例】1(用于是否纳入库存管理)。 【JSON字段】is_warehousing。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.able_discount IS '【说明】是否允许参与折扣。 【示例】1(用于是否允许参与折扣)。 【JSON字段】able_discount。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.able_site_transfer IS '【说明】表示是否允许跨门店调拨或跨站点共享库存。 【示例】2(用于表示是否允许跨门店调拨或跨站点共享库存)。 【JSON字段】able_site_transfer。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.forbid_sell_status IS '【说明】观察值:全部为 1。 【示例】1(用于观察值:全部为 1)。 【JSON字段】forbid_sell_status。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.send_state IS '【说明】观察值:全部为 1。 【示例】1(用于观察值:全部为 1)。 【JSON字段】send_state。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.custom_label_type IS '【说明】自定义标签类型。 【示例】2(用于自定义标签类型)。 【JSON字段】custom_label_type。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.option_required IS '【说明】是否需要在销售时选择规格/选项。 【示例】1(用于是否需要在销售时选择规格/选项)。 【JSON字段】option_required。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.sale_channel IS '【说明】销售渠道类型。 【示例】1(用于销售渠道类型)。 【JSON字段】sale_channel。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.sort IS '【说明】排序权重,用于前端商品列表展示时的排版顺序,数值越小/越大哪个优先,具体规则看系统设定(一般是数值越小排序越靠前)。 【示例】100(排序权重,用于前端商品列表展示时的排版顺序,数值越小/越大哪个优先,具体规则看系统设定(一般是数值越小排序越靠前))。 【JSON字段】sort。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.remark IS '【说明】商品备注(可以写口味说明、供应商、注意事项等)。 【示例】NULL(用于商品备注(可以写口味说明、供应商、注意事项等))。 【JSON字段】remark。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.pinyin_initial IS '【说明】商品名称的拼音首字母缩写,有时多个别名用逗号分隔。 【示例】HWDPM,GWDPM(用于商品名称的拼音首字母缩写,有时多个别名用逗号分隔)。 【JSON字段】pinyin_initial。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.goods_cover IS '【说明】商品图片 URL(如 OSS 对象存储地址),用于前端展示商品图片。 【示例】https://oss.ficoo.vip/admin/8M1WM7_1753204221337.jpg(商品图片 URL(如 OSS 对象存储地址),用于前端展示商品图片)。 【JSON字段】goods_cover。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.create_time IS '【说明】门店商品档案创建时间(商品在门店建立档案的时间点)。 【示例】2025-07-16 11:52:51(用于门店商品档案创建时间(商品在门店建立档案的时间点))。 【JSON字段】create_time。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.update_time IS '【说明】最后一次修改该商品档案的时间(包括价格调整、状态变更等)。 【示例】2025-11-09 07:23:47(用于最后一次修改该商品档案的时间(包括价格调整、状态变更等))。 【JSON字段】update_time。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】store_goods_master.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/store_goods_master.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。'; + + +CREATE TABLE IF NOT EXISTS billiards_ods.store_goods_sales_records ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + site_id BIGINT, + siteid BIGINT, + sitename TEXT, + site_goods_id BIGINT, + tenant_goods_id BIGINT, + order_settle_id BIGINT, + order_trade_no TEXT, + order_goods_id BIGINT, + ordergoodsid BIGINT, + order_pay_id BIGINT, + order_coupon_id BIGINT, + ledger_name TEXT, + ledger_group_name TEXT, + ledger_amount NUMERIC(18,2), + ledger_count NUMERIC(18,4), + ledger_unit_price NUMERIC(18,4), + ledger_status INT, + discount_money NUMERIC(18,2), + discount_price NUMERIC(18,2), + coupon_deduct_money NUMERIC(18,2), + member_discount_amount NUMERIC(18,2), + option_coupon_deduct_money NUMERIC(18,2), + option_member_discount_money NUMERIC(18,2), + point_discount_money NUMERIC(18,2), + point_discount_money_cost NUMERIC(18,2), + real_goods_money NUMERIC(18,2), + cost_money NUMERIC(18,2), + push_money NUMERIC(18,2), + sales_type INT, + is_single_order INT, + is_delete INT, + goods_remark TEXT, + option_price NUMERIC(18,2), + option_value_name TEXT, + option_name TEXT, + member_coupon_id BIGINT, + package_coupon_id BIGINT, + sales_man_org_id BIGINT, + salesman_name TEXT, + salesman_role_id BIGINT, + salesman_user_id BIGINT, + operator_id BIGINT, + operator_name TEXT, + openSalesman TEXT, + returns_number INT, + site_table_id BIGINT, + tenant_goods_business_id BIGINT, + tenant_goods_category_id BIGINT, + create_time TIMESTAMP, + payload JSONB NOT NULL, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now() +); + +COMMENT ON TABLE billiards_ods.store_goods_sales_records IS 'ODS 原始明细表:门店商品销售流水。来源:C:/dev/LLTQ/export/test-json-doc/store_goods_sales_records.json;分析:store_goods_sales_records-Analysis.md。字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.id IS '【说明】本条「门店销售流水」记录的主键 ID。 【示例】2957924029550406(用于本条「门店销售流水」记录的主键 ID)。 【JSON字段】id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_id IS '【说明】租户/品牌 ID。 【示例】2790683160709957(用于租户/品牌 ID)。 【JSON字段】tenant_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.site_id IS '【说明】门店 ID(系统主键)。 【示例】2790685415443269(用于门店 ID(系统主键))。 【JSON字段】site_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.siteid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】siteid。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.sitename IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】sitename。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.site_goods_id IS '【说明】门店商品 ID。 【示例】2793026176012357(用于门店商品 ID)。 【JSON字段】site_goods_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_goods_id IS '【说明】租户(品牌)级商品 ID(全局商品 ID)。 【示例】2792115932417925(用于租户(品牌)级商品 ID(全局商品 ID))。 【JSON字段】tenant_goods_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_settle_id IS '【说明】订单结算 ID(结账单主键)。 【示例】2957922914357125(用于订单结算 ID(结账单主键))。 【JSON字段】order_settle_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_trade_no IS '【说明】订单交易号(业务单号)。 【示例】2957858167230149(用于订单交易号(业务单号))。 【JSON字段】order_trade_no。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_goods_id IS '【说明】订单商品明细 ID(订单内部的商品行主键)。 【示例】2957858456391557(用于订单商品明细 ID(订单内部的商品行主键))。 【JSON字段】order_goods_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ordergoodsid IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。 【示例】NULL(来自 JSON 导出的原始字段,用于保留业务取值)。 【JSON字段】ordergoodsid。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_pay_id IS '【说明】关联支付记录的 ID。 【示例】0(用于关联支付记录的 ID)。 【JSON字段】order_pay_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_coupon_id IS '【说明】订单级优惠券 ID。 【示例】0(用于订单级优惠券 ID)。 【JSON字段】order_coupon_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_name IS '【说明】销售项目名称(商品名称),例如 “哇哈哈矿泉水”“地道肠”“东方树叶”等。 【示例】哇哈哈矿泉水(用于销售项目名称(商品名称),例如 “哇哈哈矿泉水”“地道肠”“东方树叶”等)。 【JSON字段】ledger_name。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_group_name IS '【说明】销售项目所属的「门店内部分组名称」,类似前台菜单分组或大类标签。 【示例】酒水(用于销售项目所属的「门店内部分组名称」,类似前台菜单分组或大类标签)。 【JSON字段】ledger_group_name。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_amount IS '【说明】原始应收金额,公式上接近 ledger_unit_price × ledger_count。 【示例】5.0(用于原始应收金额,公式上接近 ledger_unit_price × ledger_count)。 【JSON字段】ledger_amount。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_count IS '【说明】销售数量(以 unit 为单位,unit 字段在门店商品档案中)。 【示例】1(用于销售数量(以 unit 为单位,unit 字段在门店商品档案中))。 【JSON字段】ledger_count。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_unit_price IS '【说明】商品在该次销售中的「结算单价」(元/单位)。 【示例】5.0(用于商品在该次销售中的「结算单价」(元/单位))。 【JSON字段】ledger_unit_price。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_status IS '【说明】销售流水状态。 【示例】1(用于销售流水状态)。 【JSON字段】ledger_status。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.discount_money IS '【说明】本条销售明细的「价格优惠金额」,即原价部分被减免掉的金额。 【示例】0.0(用于本条销售明细的「价格优惠金额」,即原价部分被减免掉的金额)。 【JSON字段】discount_money。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.discount_price IS '【说明】折后单价(元/单位)。 【示例】5.0(用于折后单价(元/单位))。 【JSON字段】discount_price。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.coupon_deduct_money IS '【说明】被优惠券 / 团购券直接抵扣到这条商品明细上的金额。 【示例】0.0(用于被优惠券 / 团购券直接抵扣到这条商品明细上的金额)。 【JSON字段】coupon_deduct_money。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.member_discount_amount IS '【说明】由会员身份(会员折扣)针对这一行商品产生的优惠金额。 【示例】0.0(用于由会员身份(会员折扣)针对这一行商品产生的优惠金额)。 【JSON字段】member_discount_amount。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_coupon_deduct_money IS '【说明】由优惠券抵扣“选项价格”的金额。 【示例】0.0(用于由优惠券抵扣“选项价格”的金额)。 【JSON字段】option_coupon_deduct_money。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_member_discount_money IS '【说明】由会员折扣作用在“选项价格”上的优惠金额。 【示例】0.0(用于由会员折扣作用在“选项价格”上的优惠金额)。 【JSON字段】option_member_discount_money。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.point_discount_money IS '【说明】由积分抵扣的金额(顾客兑换积分抵现金额)。 【示例】0.0(用于由积分抵扣的金额(顾客兑换积分抵现金额))。 【JSON字段】point_discount_money。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.point_discount_money_cost IS '【说明】积分抵扣对应的“成本金额”(后台核算用),例如按积分成本来计提费用。 【示例】0.0(用于积分抵扣对应的“成本金额”(后台核算用),例如按积分成本来计提费用)。 【JSON字段】point_discount_money_cost。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.real_goods_money IS '【说明】商品实际入账金额(考虑折扣、可能还会考虑其它抵扣后的实际销售金额)。 【示例】5.0(用于商品实际入账金额(考虑折扣、可能还会考虑其它抵扣后的实际销售金额))。 【JSON字段】real_goods_money。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.cost_money IS '【说明】本条销售对应的成本金额(以元计)。 【示例】0.01(用于本条销售对应的成本金额(以元计))。 【JSON字段】cost_money。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.push_money IS '【说明】本条销售对应的提成金额(给营业员/促销员的提成)。 【示例】0.0(用于本条销售对应的提成金额(给营业员/促销员的提成))。 【JSON字段】push_money。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.sales_type IS '【说明】销售类型。 【示例】1(用于销售类型)。 【JSON字段】sales_type。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.is_single_order IS '【说明】是否单独订单标识。 【示例】1(用于是否单独订单标识)。 【JSON字段】is_single_order。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.is_delete IS '【说明】逻辑删除标志。 【示例】0(用于逻辑删除标志)。 【JSON字段】is_delete。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.goods_remark IS '【说明】商品备注/口味说明/特殊说明。 【示例】哇哈哈矿泉水(用于商品备注/口味说明/特殊说明)。 【JSON字段】goods_remark。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_price IS '【说明】商品选项(规格/加料)的附加价格。 【示例】0.0(用于商品选项(规格/加料)的附加价格)。 【JSON字段】option_price。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_value_name IS '【说明】商品选项名称(如规格、口味:大杯/小杯,不加冰等)。 【示例】NULL(用于商品选项名称(如规格、口味:大杯/小杯,不加冰等))。 【JSON字段】option_value_name。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_name IS '【说明】名称字段,用于展示与辅助识别。 【示例】NULL(名称字段,用于展示与辅助识别)。 【JSON字段】option_name。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.member_coupon_id IS '【说明】会员券 ID(比如会员专享优惠券)。 【示例】0(用于会员券 ID(比如会员专享优惠券))。 【JSON字段】member_coupon_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.package_coupon_id IS '【说明】套餐券 ID。 【示例】0(用于套餐券 ID)。 【JSON字段】package_coupon_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.sales_man_org_id IS '【说明】营业员所属组织/部门 ID。 【示例】0(用于营业员所属组织/部门 ID)。 【JSON字段】sales_man_org_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.salesman_name IS '【说明】营业员姓名(如果有为具体销售员记业绩,则在此填姓名)。 【示例】NULL(用于营业员姓名(如果有为具体销售员记业绩,则在此填姓名))。 【JSON字段】salesman_name。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.salesman_role_id IS '【说明】营业员的系统角色 ID(例如某个角色代码表示“销售员”)。 【示例】0(用于营业员的系统角色 ID(例如某个角色代码表示“销售员”))。 【JSON字段】salesman_role_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.salesman_user_id IS '【说明】营业员用户 ID(系统账号 ID)。 【示例】0(用于营业员用户 ID(系统账号 ID))。 【JSON字段】salesman_user_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.operator_id IS '【说明】操作员 ID(录入这笔销售的员工)。 【示例】2790687322443013(用于操作员 ID(录入这笔销售的员工))。 【JSON字段】operator_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.operator_name IS '【说明】操作员姓名,文字冗余。 【示例】收银员:郑丽珊(用于操作员姓名,文字冗余)。 【JSON字段】operator_name。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.openSalesman IS '【说明】来自 JSON 导出的原始字段,用于保留业务取值。。 【示例】2(来自 JSON 导出的原始字段,用于保留业务取值。)。 【JSON字段】openSalesman。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.returns_number IS '【说明】退货数量(如果这条明细做了退货,会记录退货数量)。 【示例】0(用于退货数量(如果这条明细做了退货,会记录退货数量))。 【JSON字段】returns_number。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.site_table_id IS '【说明】球台 ID。 【示例】2793003705192517(用于球台 ID)。 【JSON字段】site_table_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_goods_business_id IS '【说明】租户级商品「业务大类」ID(例如“零食类”“酒水类”等更高维度)。 【示例】2790683528317768(用于租户级商品「业务大类」ID(例如“零食类”“酒水类”等更高维度))。 【JSON字段】tenant_goods_business_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_goods_category_id IS '【说明】租户级商品一级分类 ID。 【示例】2790683528350540(用于租户级商品一级分类 ID)。 【JSON字段】tenant_goods_category_id。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.create_time IS '【说明】销售记录创建时间,通常就是结账时间或录入时间。 【示例】2025-11-09 23:35:57(用于销售记录创建时间,通常就是结账时间或录入时间)。 【JSON字段】create_time。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.payload IS '【说明】完整原始 JSON 记录快照,用于回溯与二次解析。 【示例】{...}(完整原始 JSON 记录快照,用于回溯与二次解析)。 【JSON字段】$(整条记录)。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.source_file IS '【说明】ETL 元数据:原始导出文件名,用于数据追溯。 【示例】store_goods_sales_records.json(ETL 元数据:原始导出文件名,用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.source_endpoint IS '【说明】ETL 元数据:采集来源(接口/文件路径),用于数据追溯。 【示例】C:/dev/LLTQ/export/test-json-doc/store_goods_sales_records.json(ETL 元数据:采集来源(接口/文件路径),用于数据追溯)。 【JSON字段】无(ETL元数据)。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.fetched_at IS '【说明】ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。 【示例】2025-11-10T00:00:00+08:00(ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理)。 【JSON字段】无(ETL元数据)。'; + + diff --git a/tmp/etl_billiards_misc/tmp & Delete/schema_dwd_doc.sql.bak b/tmp/etl_billiards_misc/tmp & Delete/schema_dwd_doc.sql.bak new file mode 100644 index 0000000..b4d2d3d --- /dev/null +++ b/tmp/etl_billiards_misc/tmp & Delete/schema_dwd_doc.sql.bak @@ -0,0 +1,1878 @@ +-- Generated from DWD?????.docx; includes column comments from?? +CREATE SCHEMA IF NOT EXISTS billiards_dwd; +SET search_path TO billiards_dwd; + +-- SCD2 字段统一默认值、中文注释、唯一性(业务键 + 时间段不重叠)控制 +CREATE EXTENSION IF NOT EXISTS btree_gist; + +DO $$ +DECLARE + rec RECORD; +BEGIN + -- 统一 SCD2 默认值与注释,避免后续手工遗漏 + FOR rec IN + SELECT table_name + FROM information_schema.columns + WHERE table_schema = 'billiards_dwd' + AND column_name = 'scd2_start_time' + LOOP + EXECUTE format('ALTER TABLE billiards_dwd.%I ALTER COLUMN scd2_start_time SET DEFAULT now()', rec.table_name); + EXECUTE format('ALTER TABLE billiards_dwd.%I ALTER COLUMN scd2_end_time SET DEFAULT ''9999-12-31''', rec.table_name); + EXECUTE format('ALTER TABLE billiards_dwd.%I ALTER COLUMN scd2_is_current SET DEFAULT 1', rec.table_name); + EXECUTE format('ALTER TABLE billiards_dwd.%I ALTER COLUMN scd2_version SET DEFAULT 1', rec.table_name); + + EXECUTE format('COMMENT ON COLUMN billiards_dwd.%I.scd2_start_time IS ''SCD2 开始时间(版本生效起点)''', rec.table_name); + EXECUTE format('COMMENT ON COLUMN billiards_dwd.%I.scd2_end_time IS ''SCD2 结束时间(默认 9999-12-31,表示当前版本仍有效)''', rec.table_name); + EXECUTE format('COMMENT ON COLUMN billiards_dwd.%I.scd2_is_current IS ''SCD2 当前版本标记:1=当前版本,0=历史版本''', rec.table_name); + EXECUTE format('COMMENT ON COLUMN billiards_dwd.%I.scd2_version IS ''SCD2 版本号,自增,配合时间段避免重叠''', rec.table_name); + END LOOP; + + -- 约束:同一业务键时间段不重叠,且仅有一条当前版本 + FOR rec IN ( + SELECT tc.table_name, + string_agg(format('%I WITH =', kcu.column_name), ', ' ORDER BY kcu.ordinal_position) AS pk_eq_expr, + string_agg(format('%I', kcu.column_name), ', ' ORDER BY kcu.ordinal_position) AS pk_cols + FROM information_schema.table_constraints tc + JOIN information_schema.key_column_usage kcu + ON tc.table_schema = kcu.table_schema + AND tc.table_name = kcu.table_name + AND tc.constraint_name = kcu.constraint_name + WHERE tc.table_schema = 'billiards_dwd' + AND tc.constraint_type = 'PRIMARY KEY' + AND EXISTS ( + SELECT 1 FROM information_schema.columns c + WHERE c.table_schema = 'billiards_dwd' + AND c.table_name = tc.table_name + AND c.column_name = 'scd2_start_time' + ) + GROUP BY tc.table_name + ) + LOOP + IF NOT EXISTS ( + SELECT 1 FROM pg_constraint + WHERE conname = format('%s_scd2_no_overlap', rec.table_name) + AND conrelid = format('billiards_dwd.%s', rec.table_name)::regclass + ) THEN + EXECUTE format( + 'ALTER TABLE billiards_dwd.%I ADD CONSTRAINT %I EXCLUDE USING gist (%s, tstzrange(scd2_start_time, scd2_end_time) WITH &&) WHERE (scd2_is_current = 1);', + rec.table_name, + rec.table_name || '_scd2_no_overlap', + rec.pk_eq_expr + ); + END IF; + + IF to_regclass(format('billiards_dwd.%s_scd2_current_unique_idx', rec.table_name)) IS NULL THEN + EXECUTE format( + 'CREATE UNIQUE INDEX %I ON billiards_dwd.%I (%s) WHERE (scd2_is_current = 1);', + rec.table_name || '_scd2_current_unique_idx', + rec.table_name, + rec.pk_cols + ); + END IF; + END LOOP; +END +$$; + +-- SCD2 统一约定(DIM 表使用): +-- SCD2_start_time TIMESTAMPTZ DEFAULT now() -- 版本开始时间 +-- SCD2_end_time TIMESTAMPTZ DEFAULT '9999-12-31' -- 版本结束时间 +-- SCD2_is_current INT DEFAULT 1 -- 当前版本标记(1当前/0历史) +-- SCD2_version INT DEFAULT 1 -- 版本号,自增 + +-- dim_site +CREATE TABLE IF NOT EXISTS dim_site ( + site_id BIGINT, + org_id BIGINT, + tenant_id BIGINT, + shop_name TEXT, + site_label TEXT, + full_address TEXT, + address TEXT, + longitude NUMERIC(10,6), + latitude NUMERIC(10,6), + tenant_site_region_id BIGINT, + business_tel TEXT, + site_type INTEGER, + shop_status INTEGER, + SCD2_start_time TIMESTAMPTZ DEFAULT now(), + SCD2_end_time TIMESTAMPTZ DEFAULT '9999-12-31', + SCD2_is_current INT DEFAULT 1, + SCD2_version INT DEFAULT 1, + PRIMARY KEY (site_id) +); +COMMENT ON COLUMN dim_site.site_id IS '???? ID?????????????????? site_id ??? | ??: siteProfile.id | ??: ??'; +COMMENT ON COLUMN dim_site.org_id IS '???? ID?????????? | ??: siteProfile.org_id | ??: ??'; +COMMENT ON COLUMN dim_site.tenant_id IS '?? ID????? tenant_id ??? | ??: siteProfile.tenant_id | ??: ??'; +COMMENT ON COLUMN dim_site.shop_name IS '????????? | ??: siteProfile.shop_name'; +COMMENT ON COLUMN dim_site.site_label IS '???????????????? | ??: siteProfile.site_label'; +COMMENT ON COLUMN dim_site.full_address IS '??????? | ??: siteProfile.full_address'; +COMMENT ON COLUMN dim_site.address IS '???????????? | ??: siteProfile.address'; +COMMENT ON COLUMN dim_site.longitude IS '???????? | ??: siteProfile.longitude'; +COMMENT ON COLUMN dim_site.latitude IS '???????? | ??: siteProfile.latitude'; +COMMENT ON COLUMN dim_site.tenant_site_region_id IS '????/?????????? | ??: siteProfile.tenant_site_region_id'; +COMMENT ON COLUMN dim_site.business_tel IS '????? | ??: siteProfile.business_tel'; +COMMENT ON COLUMN dim_site.site_type IS '??????????????????? | ??: siteProfile.site_type'; +COMMENT ON COLUMN dim_site.shop_status IS '??????????????????? | ??: siteProfile.shop_status'; + +-- dim_site_Ex +CREATE TABLE IF NOT EXISTS dim_site_Ex ( + site_id BIGINT, + avatar TEXT, + address TEXT, + longitude NUMERIC(9,6), + latitude NUMERIC(9,6), + tenant_site_region_id BIGINT, + auto_light INTEGER, + light_status INTEGER, + light_type INTEGER, + light_token TEXT, + site_type INTEGER, + site_label TEXT, + attendance_enabled INTEGER, + attendance_distance INTEGER, + customer_service_qrcode TEXT, + customer_service_wechat TEXT, + fixed_pay_qrCode TEXT, + prod_env TEXT, + shop_status INTEGER, + create_time TIMESTAMPTZ, + update_time TIMESTAMPTZ, + SCD2_start_time TIMESTAMPTZ DEFAULT now(), + SCD2_end_time TIMESTAMPTZ DEFAULT '9999-12-31', + SCD2_is_current INT DEFAULT 1, + SCD2_version INT DEFAULT 1, + PRIMARY KEY (site_id) +); +COMMENT ON COLUMN dim_site_Ex.site_id IS '门店主键 ID,唯一标识一家门店。与所有事实表中的 site_id 对应。 | 来源: siteProfile.id | 角色: 主键'; +COMMENT ON COLUMN dim_site_Ex.avatar IS '门店头像 URL。 | 来源: siteProfile.avatar'; +COMMENT ON COLUMN dim_site_Ex.address IS '地址简写。 | 来源: siteProfile.address'; +COMMENT ON COLUMN dim_site_Ex.longitude IS '经度。 | 来源: siteProfile.longitude'; +COMMENT ON COLUMN dim_site_Ex.latitude IS '纬度。 | 来源: siteProfile.latitude'; +COMMENT ON COLUMN dim_site_Ex.tenant_site_region_id IS '地区编码。 | 来源: siteProfile.tenant_site_region_id'; +COMMENT ON COLUMN dim_site_Ex.auto_light IS '是否自动控制灯光:1=是,2=否(根据系统约定)。 | 来源: siteProfile.auto_light'; +COMMENT ON COLUMN dim_site_Ex.light_status IS '灯光状态,系统预留字段。 | 来源: siteProfile.light_status'; +COMMENT ON COLUMN dim_site_Ex.light_type IS '灯光类型,预留字段。 | 来源: siteProfile.light_type'; +COMMENT ON COLUMN dim_site_Ex.light_token IS '灯光控制令牌。 | 来源: siteProfile.light_token'; +COMMENT ON COLUMN dim_site_Ex.site_type IS '门店类型枚举(未在导出中说明,视系统配置)。 | 来源: siteProfile.site_type'; +COMMENT ON COLUMN dim_site_Ex.site_label IS '门店标签,展示用。 | 来源: siteProfile.site_label'; +COMMENT ON COLUMN dim_site_Ex.attendance_enabled IS '门店是否启用考勤功能:1=启用,2=不启用。 | 来源: siteProfile.attendance_enabled'; +COMMENT ON COLUMN dim_site_Ex.attendance_distance IS '考勤打卡距离限制(米)。 | 来源: siteProfile.attendance_distance'; +COMMENT ON COLUMN dim_site_Ex.customer_service_qrcode IS '客服二维码 URL。 | 来源: siteProfile.customer_service_qrcode'; +COMMENT ON COLUMN dim_site_Ex.customer_service_wechat IS '客服微信号。 | 来源: siteProfile.customer_service_wechat'; +COMMENT ON COLUMN dim_site_Ex.fixed_pay_qrCode IS '固定收款二维码。 | 来源: siteProfile.fixed_pay_qrCode'; +COMMENT ON COLUMN dim_site_Ex.prod_env IS '环境标记(生产/测试)。 | 来源: siteProfile.prod_env'; +COMMENT ON COLUMN dim_site_Ex.shop_status IS '门店状态,未在文档解释。 | 来源: siteProfile.shop_status'; +COMMENT ON COLUMN dim_site_Ex.create_time IS '门店创建时间。 | 来源: siteProfile.create_time'; +COMMENT ON COLUMN dim_site_Ex.update_time IS '门店最近更新时间。 | 来源: siteProfile.update_time'; + +-- dim_table +CREATE TABLE IF NOT EXISTS dim_table ( + table_id BIGINT, + site_id BIGINT, + table_name TEXT, + site_table_area_id BIGINT, + site_table_area_name TEXT, + tenant_table_area_id BIGINT, + table_price NUMERIC(18,2), + SCD2_start_time TIMESTAMPTZ DEFAULT now(), + SCD2_end_time TIMESTAMPTZ DEFAULT '9999-12-31', + SCD2_is_current INT DEFAULT 1, + SCD2_version INT DEFAULT 1, + PRIMARY KEY (table_id) +); +COMMENT ON COLUMN dim_table.table_id IS '台桌主键,唯一标识一张台或包厢。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_table.site_id IS '门店 ID。 | 来源: siteId | 角色: 外键'; +COMMENT ON COLUMN dim_table.table_name IS '台桌名称/编号,如 A17、888。 | 来源: tableName'; +COMMENT ON COLUMN dim_table.site_table_area_id IS '门店区 ID,用于区分 A区/B区/补时区等。 | 来源: siteTableAreaId | 角色: 外键'; +COMMENT ON COLUMN dim_table.site_table_area_name IS '区域名称,如 “A区”“补时长”。 | 来源: siteTableAreaName'; +COMMENT ON COLUMN dim_table.tenant_table_area_id IS '租户级区域 ID。 | 来源: tenantTableAreaId | 角色: 外键'; +COMMENT ON COLUMN dim_table.table_price IS '台桌基础单价,从table_fee_transactions取值。方法:对应本表id,table_fee_transactions表的site_table_id。'; + +-- dim_table_Ex +CREATE TABLE IF NOT EXISTS dim_table_Ex ( + table_id BIGINT, + show_status INTEGER, + is_online_reservation INTEGER, + table_cloth_use_time INTEGER, + table_cloth_use_cycle INTEGER, + table_status INTEGER, + SCD2_start_time TIMESTAMPTZ DEFAULT now(), + SCD2_end_time TIMESTAMPTZ DEFAULT '9999-12-31', + SCD2_is_current INT DEFAULT 1, + SCD2_version INT DEFAULT 1, + PRIMARY KEY (table_id) +); +COMMENT ON COLUMN dim_table_Ex.table_id IS '台桌主键,唯一标识一张台或包厢。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_table_Ex.show_status IS '显示状态:1=正常台;其他值=特殊用途(包厢、补时长等)。 | 来源: showStatus'; +COMMENT ON COLUMN dim_table_Ex.is_online_reservation IS '是否可线上预约:1=是,2=否。 | 来源: isOnlineReservation'; +COMMENT ON COLUMN dim_table_Ex.table_cloth_use_time IS '已使用台呢时长(秒)。 | 来源: tableClothUseTime'; +COMMENT ON COLUMN dim_table_Ex.table_cloth_use_cycle IS '台呢更换周期阈值(秒)。 | 来源: tableClothUseCycle'; +COMMENT ON COLUMN dim_table_Ex.table_status IS '当前台桌状态:1=空闲,2=使用中,3=暂停中,4=锁定。 | 来源: tableStatus'; + +-- dim_assistant +CREATE TABLE IF NOT EXISTS dim_assistant ( + assistant_id BIGINT, + user_id BIGINT, + assistant_no TEXT, + real_name TEXT, + nickname TEXT, + mobile TEXT, + tenant_id BIGINT, + site_id BIGINT, + team_id BIGINT, + team_name TEXT, + level INTEGER, + entry_time TIMESTAMPTZ, + resign_time TIMESTAMPTZ, + leave_status INTEGER, + assistant_status INTEGER, + SCD2_start_time TIMESTAMPTZ, + SCD2_end_time TIMESTAMPTZ, + SCD2_is_current INT, + SCD2_version INT, + PRIMARY KEY (assistant_id) +); +COMMENT ON COLUMN dim_assistant.assistant_id IS '助教账号 ID,关联助教服务流水表。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_assistant.user_id IS '系统用户 ID,用于统一跨模块身份。 | 来源: user_id | 角色: 外键'; +COMMENT ON COLUMN dim_assistant.assistant_no IS '助教工号/编号,业务识别用。 | 来源: assistant_no'; +COMMENT ON COLUMN dim_assistant.real_name IS '助教真实姓名。 | 来源: real_name'; +COMMENT ON COLUMN dim_assistant.nickname IS '前台展示昵称。 | 来源: nickname'; +COMMENT ON COLUMN dim_assistant.mobile IS '手机号码。 | 来源: mobile'; +COMMENT ON COLUMN dim_assistant.tenant_id IS '租户 ID。 | 来源: tenant_id | 角色: 外键'; +COMMENT ON COLUMN dim_assistant.site_id IS '门店 ID。 | 来源: site_id | 角色: 外键'; +COMMENT ON COLUMN dim_assistant.team_id IS '助教团队 ID。 | 来源: team_id | 角色: 外键'; +COMMENT ON COLUMN dim_assistant.team_name IS '团队名称。 | 来源: team_name'; +COMMENT ON COLUMN dim_assistant.level IS '助教等级:8=管理员、10=初级、20=中级、30=高级、40=专家。 | 来源: level'; +COMMENT ON COLUMN dim_assistant.entry_time IS '入职时间。 | 来源: entry_time'; +COMMENT ON COLUMN dim_assistant.resign_time IS '离职时间;远未来日期表示在职。 | 来源: resign_time'; +COMMENT ON COLUMN dim_assistant.leave_status IS '在职状态:0=在职,1=已离职。 | 来源: leave_status'; +COMMENT ON COLUMN dim_assistant.assistant_status IS '账号启用状态:1=启用,2=停用/冻结。 | 来源: assistant_status'; + +-- dim_assistant_Ex +CREATE TABLE IF NOT EXISTS dim_assistant_Ex ( + assistant_id BIGINT, + gender INTEGER, + birth_date TIMESTAMPTZ, + avatar TEXT, + introduce TEXT, + video_introduction_url TEXT, + height NUMERIC(5,2), + weight NUMERIC(5,2), + shop_name TEXT, + group_id BIGINT, + group_name TEXT, + person_org_id BIGINT, + staff_id BIGINT, + staff_profile_id BIGINT, + assistant_grade DOUBLE PRECISION, + sum_grade DOUBLE PRECISION, + get_grade_times INTEGER, + charge_way INTEGER, + allow_cx INTEGER, + is_guaranteed INTEGER, + salary_grant_enabled INTEGER, + entry_type INTEGER, + entry_sign_status INTEGER, + resign_sign_status INTEGER, + work_status INTEGER, + show_status INTEGER, + show_sort INTEGER, + online_status INTEGER, + is_delete INTEGER, + criticism_status INTEGER, + create_time TIMESTAMPTZ, + update_time TIMESTAMPTZ, + start_time TIMESTAMPTZ, + end_time TIMESTAMPTZ, + last_table_id BIGINT, + last_table_name TEXT, + last_update_name TEXT, + order_trade_no BIGINT, + ding_talk_synced INTEGER, + site_light_cfg_id BIGINT, + light_equipment_id TEXT, + light_status INTEGER, + is_team_leader INTEGER, + serial_number BIGINT, + SCD2_start_time TIMESTAMPTZ, + SCD2_end_time TIMESTAMPTZ, + SCD2_is_current INT, + SCD2_version INT, + PRIMARY KEY (assistant_id) +); +COMMENT ON COLUMN dim_assistant_Ex.assistant_id IS '助教账号 ID,关联助教服务流水表。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_assistant_Ex.gender IS '性别枚举:0=未填/保密,1=男,2=女。 | 来源: gender'; +COMMENT ON COLUMN dim_assistant_Ex.birth_date IS '出生日期,默认为 0001-01-01 表示未设置。 | 来源: birth_date'; +COMMENT ON COLUMN dim_assistant_Ex.avatar IS '头像 URL。 | 来源: avatar'; +COMMENT ON COLUMN dim_assistant_Ex.introduce IS '个人简介文案(目前为空)。 | 来源: introduce'; +COMMENT ON COLUMN dim_assistant_Ex.video_introduction_url IS '视频介绍 URL。 | 来源: video_introduction_url'; +COMMENT ON COLUMN dim_assistant_Ex.height IS '身高(厘米),0 表示未填。 | 来源: height'; +COMMENT ON COLUMN dim_assistant_Ex.weight IS '体重(公斤),0 表示未填。 | 来源: weight'; +COMMENT ON COLUMN dim_assistant_Ex.shop_name IS '门店名称。 | 来源: shop_name'; +COMMENT ON COLUMN dim_assistant_Ex.group_id IS '上级分组 ID,未使用。 | 来源: group_id'; +COMMENT ON COLUMN dim_assistant_Ex.group_name IS '上级分组名称,空。 | 来源: group_name'; +COMMENT ON COLUMN dim_assistant_Ex.person_org_id IS '人事组织 ID,用于权限和报表分组。 | 来源: person_org_id'; +COMMENT ON COLUMN dim_assistant_Ex.staff_id IS '预留员工 ID(全部为0)。 | 来源: staff_id'; +COMMENT ON COLUMN dim_assistant_Ex.staff_profile_id IS '外部人事档案 ID(全部为0)。 | 来源: staff_profile_id'; +COMMENT ON COLUMN dim_assistant_Ex.assistant_grade IS '平均评分(0 表示暂无)。 | 来源: assistant_grade'; +COMMENT ON COLUMN dim_assistant_Ex.sum_grade IS '总评分累加值。 | 来源: sum_grade'; +COMMENT ON COLUMN dim_assistant_Ex.get_grade_times IS '累计评分次数。 | 来源: get_grade_times'; +COMMENT ON COLUMN dim_assistant_Ex.charge_way IS '计费方式:2=计时,其他未出现。 | 来源: charge_way'; +COMMENT ON COLUMN dim_assistant_Ex.allow_cx IS '是否允许促销计费:1=允许。 | 来源: allow_cx'; +COMMENT ON COLUMN dim_assistant_Ex.is_guaranteed IS '是否有保底:1=是。 | 来源: is_guaranteed'; +COMMENT ON COLUMN dim_assistant_Ex.salary_grant_enabled IS '薪资发放开关(值2,具体含义未知)。 | 来源: salary_grant_enabled'; +COMMENT ON COLUMN dim_assistant_Ex.entry_type IS '入职类型:1=正式;其他未出现。 | 来源: entry_type'; +COMMENT ON COLUMN dim_assistant_Ex.entry_sign_status IS '入职签约状态:0=未签约,1=已签约(未出现)。 | 来源: entry_sign_status'; +COMMENT ON COLUMN dim_assistant_Ex.resign_sign_status IS '离职签约状态,未出现非 0。 | 来源: resign_sign_status'; +COMMENT ON COLUMN dim_assistant_Ex.work_status IS '工作状态:1=在岗,2=离岗。与 leave_status 呼应。 | 来源: work_status'; +COMMENT ON COLUMN dim_assistant_Ex.show_status IS '前台展示状态:1=显示;其他值未出现。 | 来源: show_status'; +COMMENT ON COLUMN dim_assistant_Ex.show_sort IS '前端排序序号。 | 来源: show_sort'; +COMMENT ON COLUMN dim_assistant_Ex.online_status IS '在线状态:1=在线。 | 来源: online_status'; +COMMENT ON COLUMN dim_assistant_Ex.is_delete IS '逻辑删除标记:0=未删除,1=已删除。 | 来源: is_delete'; +COMMENT ON COLUMN dim_assistant_Ex.criticism_status IS '投诉状态:1=正常,2=有投诉。 | 来源: criticism_status'; +COMMENT ON COLUMN dim_assistant_Ex.create_time IS '账号创建时间。 | 来源: create_time'; +COMMENT ON COLUMN dim_assistant_Ex.update_time IS '账号最近修改时间。 | 来源: update_time'; +COMMENT ON COLUMN dim_assistant_Ex.start_time IS '配置生效开始时间。 | 来源: start_time'; +COMMENT ON COLUMN dim_assistant_Ex.end_time IS '配置生效结束时间。 | 来源: end_time'; +COMMENT ON COLUMN dim_assistant_Ex.last_table_id IS '最近服务的台桌 ID(未必存在)。 | 来源: last_table_id'; +COMMENT ON COLUMN dim_assistant_Ex.last_table_name IS '最近服务球台名称。 | 来源: last_table_name'; +COMMENT ON COLUMN dim_assistant_Ex.last_update_name IS '最近更新该账号的管理员。 | 来源: last_update_name'; +COMMENT ON COLUMN dim_assistant_Ex.order_trade_no IS '最近关联的订单号(非外键,仅做展示)。 | 来源: order_trade_no'; +COMMENT ON COLUMN dim_assistant_Ex.ding_talk_synced IS '是否同步钉钉:1=已同步。 | 来源: ding_talk_synced'; +COMMENT ON COLUMN dim_assistant_Ex.site_light_cfg_id IS '灯控配置 ID(未启用)。 | 来源: site_light_cfg_id'; +COMMENT ON COLUMN dim_assistant_Ex.light_equipment_id IS '灯控设备 ID(未启用)。 | 来源: light_equipment_id'; +COMMENT ON COLUMN dim_assistant_Ex.light_status IS '灯控状态(值2,具体含义未知)。 | 来源: light_status'; +COMMENT ON COLUMN dim_assistant_Ex.is_team_leader IS '是否团队长:0=否,1=是。 | 来源: is_team_leader'; +COMMENT ON COLUMN dim_assistant_Ex.serial_number IS '来源: serial_number'; + +-- dim_member +CREATE TABLE IF NOT EXISTS dim_member ( + member_id BIGINT, + system_member_id BIGINT, + tenant_id BIGINT, + register_site_id BIGINT, + mobile TEXT, + nickname TEXT, + member_card_grade_code BIGINT, + member_card_grade_name TEXT, + create_time TIMESTAMPTZ, + update_time TIMESTAMPTZ, + SCD2_start_time TIMESTAMPTZ, + SCD2_end_time TIMESTAMPTZ, + SCD2_is_current INT, + SCD2_version INT, + PRIMARY KEY (member_id) +); +COMMENT ON COLUMN dim_member.member_id IS '租户内会员主键。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_member.system_member_id IS '跨租户全局会员 ID。 | 来源: system_member_id | 角色: 外键'; +COMMENT ON COLUMN dim_member.tenant_id IS '租户 ID。 | 来源: tenant_id | 角色: 外键'; +COMMENT ON COLUMN dim_member.register_site_id IS '注册门店 ID。 | 来源: register_site_id | 角色: 外键'; +COMMENT ON COLUMN dim_member.mobile IS '会员手机号。 | 来源: mobile'; +COMMENT ON COLUMN dim_member.nickname IS '昵称(未必是真实姓名)。 | 来源: nickname'; +COMMENT ON COLUMN dim_member.member_card_grade_code IS '会员等级代码:1=金卡?2=银卡?3=钻石卡?4=黑卡?(按照 MD 文档枚举)。 | 来源: member_card_grade_code'; +COMMENT ON COLUMN dim_member.member_card_grade_name IS '等级名称,中文描述。 | 来源: member_card_grade_name'; +COMMENT ON COLUMN dim_member.create_time IS '会员档案创建时间。 | 来源: create_time'; + +-- dim_member_Ex +CREATE TABLE IF NOT EXISTS dim_member_Ex ( + member_id BIGINT, + referrer_member_id BIGINT, + point NUMERIC(18,2), + register_site_name TEXT, + growth_value NUMERIC(18,2), + user_status INTEGER, + status INTEGER, + SCD2_start_time TIMESTAMPTZ, + SCD2_end_time TIMESTAMPTZ, + SCD2_is_current INT, + SCD2_version INT, + PRIMARY KEY (member_id) +); +COMMENT ON COLUMN dim_member_Ex.member_id IS '租户内会员主键。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_member_Ex.referrer_member_id IS '推荐人会员 ID,营销分析用。 | 来源: referrer_member_id'; +COMMENT ON COLUMN dim_member_Ex.point IS '积分余额(暂未启用)。 | 来源: point'; +COMMENT ON COLUMN dim_member_Ex.register_site_name IS '注册门店名称。 | 来源: site_name'; +COMMENT ON COLUMN dim_member_Ex.growth_value IS '成长值,暂未启用。 | 来源: growth_value'; +COMMENT ON COLUMN dim_member_Ex.user_status IS '会员状态枚举:1=正常,其它值未出现。 | 来源: user_status'; +COMMENT ON COLUMN dim_member_Ex.status IS '帐户状态:1=正常;其它值未出现。 | 来源: status'; + +-- dim_member_card_account +CREATE TABLE IF NOT EXISTS dim_member_card_account ( + member_card_id BIGINT, + tenant_id BIGINT, + register_site_id BIGINT, + tenant_member_id BIGINT, + system_member_id BIGINT, + card_type_id BIGINT, + member_card_grade_code BIGINT, + member_card_grade_code_name TEXT, + member_card_type_name TEXT, + member_name TEXT, + member_mobile TEXT, + balance NUMERIC(18,2), + start_time TIMESTAMPTZ, + end_time TIMESTAMPTZ, + last_consume_time TIMESTAMPTZ, + status INTEGER, + is_delete INTEGER, + SCD2_start_time TIMESTAMPTZ, + SCD2_end_time TIMESTAMPTZ, + SCD2_is_current INT, + SCD2_version INT, + PRIMARY KEY (member_card_id) +); +COMMENT ON COLUMN dim_member_card_account.member_card_id IS '会员卡账户主键,唯一标识一张具体卡。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_member_card_account.tenant_id IS '租户/品牌 ID,用于分隔不同业务主体。 | 来源: tenant_id | 角色: 外键'; +COMMENT ON COLUMN dim_member_card_account.register_site_id IS '开卡门店 ID,对应 dim_site.site_id。 | 来源: register_site_id | 角色: 外键'; +COMMENT ON COLUMN dim_member_card_account.tenant_member_id IS '对应会员档案中的 member_id(本租户内)。0 表示未绑定会员。 | 来源: tenant_member_id | 角色: 外键'; +COMMENT ON COLUMN dim_member_card_account.system_member_id IS '全局会员 ID,用于跨租户统一会员身份。0 表示未绑定会员。 | 来源: system_member_id | 角色: 外键'; +COMMENT ON COLUMN dim_member_card_account.card_type_id IS '卡种 ID,指向卡种配置表。与下面的 grade_code 共同定义卡类别。 | 来源: card_type_id | 角色: 外键'; +COMMENT ON COLUMN dim_member_card_account.member_card_grade_code IS '卡等级/卡类代码,区别不同类别卡。2790683528022853=储值卡,2790683528022856=活动抵用券,2790683528022855=台费卡,2790683528022858=酒水卡,2790683528022857=月卡'; +COMMENT ON COLUMN dim_member_card_account.member_card_grade_code_name IS '卡等级中文名称,与 member_card_grade_code 一一对应。 | 来源: member_card_grade_code_name'; +COMMENT ON COLUMN dim_member_card_account.member_card_type_name IS '卡类型名称,通常与 grade_code_name 相同,纯展示字段。 | 来源: member_card_type_name'; +COMMENT ON COLUMN dim_member_card_account.member_name IS '持卡会员姓名快照,部分为空表示未绑定。 | 来源: member_name'; +COMMENT ON COLUMN dim_member_card_account.member_mobile IS '持卡会员手机号快照。 | 来源: member_mobile'; +COMMENT ON COLUMN dim_member_card_account.balance IS '当前余额或额度。对储值卡表示余额,对其他卡表示剩余金额或次数。 | 来源: balance'; +COMMENT ON COLUMN dim_member_card_account.start_time IS '卡片有效期开始时间。 | 来源: start_time'; +COMMENT ON COLUMN dim_member_card_account.end_time IS '卡片有效期结束时间。 | 来源: end_time'; +COMMENT ON COLUMN dim_member_card_account.last_consume_time IS '最近一次消费时间;若为 "1970-01-01" 表示未消费过。 | 来源: last_consume_time'; +COMMENT ON COLUMN dim_member_card_account.status IS '卡状态:1=正常可用;4=过期/停用。其他值在数据中未出现。 | 来源: status'; +COMMENT ON COLUMN dim_member_card_account.is_delete IS '逻辑删除标记:0=未删除;1=已删除。 | 来源: is_delete'; + +-- dim_member_card_account_Ex +CREATE TABLE IF NOT EXISTS dim_member_card_account_Ex ( + member_card_id BIGINT, + site_name TEXT, + tenant_name VARCHAR(64), + tenantAvatar TEXT, + effect_site_id BIGINT, + able_cross_site INTEGER, + card_physics_type INTEGER, + card_no TEXT, + bind_password TEXT, + use_scene TEXT, + denomination NUMERIC(18,2), + create_time TIMESTAMPTZ, + disable_start_time TIMESTAMPTZ, + disable_end_time TIMESTAMPTZ, + is_allow_give INTEGER, + is_allow_order_deduct INTEGER, + sort INTEGER, + table_discount NUMERIC(10,2), + goods_discount NUMERIC(10,2), + assistant_discount NUMERIC(10,2), + assistant_reward_discount NUMERIC(10,2), + table_service_discount NUMERIC(10,2), + goods_service_discount NUMERIC(10,2), + assistant_service_discount NUMERIC(10,2), + coupon_discount NUMERIC(10,2), + table_discount_sub_switch INTEGER, + goods_discount_sub_switch INTEGER, + assistant_discount_sub_switch INTEGER, + assistant_reward_discount_sub_switch INTEGER, + goods_discount_range_type INTEGER, + table_deduct_radio NUMERIC(10,2), + goods_deduct_radio NUMERIC(10,2), + assistant_deduct_radio NUMERIC(10,2), + table_service_deduct_radio NUMERIC(10,2), + goods_service_deduct_radio NUMERIC(10,2), + assistant_service_deduct_radio NUMERIC(10,2), + assistant_reward_deduct_radio NUMERIC(10,2), + coupon_deduct_radio NUMERIC(10,2), + cardSettleDeduct NUMERIC(18,2), + tableCardDeduct NUMERIC(18,2), + tableServiceCardDeduct NUMERIC(18,2), + goodsCarDeduct NUMERIC(18,2), + goodsServiceCardDeduct NUMERIC(18,2), + assistantCardDeduct NUMERIC(18,2), + assistantServiceCardDeduct NUMERIC(18,2), + assistantRewardCardDeduct NUMERIC(18,2), + couponCardDeduct NUMERIC(18,2), + deliveryFeeDeduct NUMERIC(18,2), + tableAreaId TEXT, + goodsCategoryId TEXT, + pdAssisnatLevel TEXT, + cxAssisnatLevel TEXT, + SCD2_start_time TIMESTAMPTZ, + SCD2_end_time TIMESTAMPTZ, + SCD2_is_current INT, + SCD2_version INT, + PRIMARY KEY (member_card_id) +); +COMMENT ON COLUMN dim_member_card_account_Ex.member_card_id IS '会员卡账户主键,唯一标识一张具体卡。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_member_card_account_Ex.site_name IS '门店名称展示字段(全部相同)。 | 来源: site_name'; +COMMENT ON COLUMN dim_member_card_account_Ex.tenant_name IS '租户名称(当前导出为空)。 | 来源: tenantName'; +COMMENT ON COLUMN dim_member_card_account_Ex.tenantAvatar IS '租户头像 URL(当前导出为空)。 | 来源: tenantAvatar'; +COMMENT ON COLUMN dim_member_card_account_Ex.effect_site_id IS '卡片限定生效门店 ID。0 表示不限门店,配合 able_cross_site=1 表示全店通用。 | 来源: effect_site_id'; +COMMENT ON COLUMN dim_member_card_account_Ex.able_cross_site IS '是否允许跨门店使用该卡:1=允许跨店;0=仅限开卡门店。 | 来源: able_cross_site'; +COMMENT ON COLUMN dim_member_card_account_Ex.card_physics_type IS '物理卡类型:1=实体/标准卡;其他值未出现,含义未知。 | 来源: card_physics_type'; +COMMENT ON COLUMN dim_member_card_account_Ex.card_no IS '物理卡号或条码(当前全部为空)。 | 来源: card_no'; +COMMENT ON COLUMN dim_member_card_account_Ex.bind_password IS '卡绑定密码(未启用)。 | 来源: bind_password'; +COMMENT ON COLUMN dim_member_card_account_Ex.use_scene IS '使用场景说明(当前为空)。 | 来源: use_scene'; +COMMENT ON COLUMN dim_member_card_account_Ex.denomination IS '面额或初始储值额度(当前均为 0.0,未启用)。 | 来源: denomination'; +COMMENT ON COLUMN dim_member_card_account_Ex.create_time IS '卡片创建时间。 | 来源: create_time'; +COMMENT ON COLUMN dim_member_card_account_Ex.disable_start_time IS '卡片禁用开始时间,当前为默认值表示未禁用。 | 来源: disable_start_time'; +COMMENT ON COLUMN dim_member_card_account_Ex.disable_end_time IS '卡片禁用结束时间,当前为默认值表示未禁用。 | 来源: disable_end_time'; +COMMENT ON COLUMN dim_member_card_account_Ex.is_allow_give IS '是否允许转赠给他人:0=不允许;1=允许。 | 来源: is_allow_give'; +COMMENT ON COLUMN dim_member_card_account_Ex.is_allow_order_deduct IS '是否允许在订单层面统一扣款:0=不允许;1=允许。 | 来源: is_allow_order_deduct'; +COMMENT ON COLUMN dim_member_card_account_Ex.sort IS '前端排序序号。 | 来源: sort'; +COMMENT ON COLUMN dim_member_card_account_Ex.table_discount IS '台费折扣率(折扣百分比,10.0=不打折,9.0=九折等)。当前全部 10.0。 | 来源: table_discount'; +COMMENT ON COLUMN dim_member_card_account_Ex.goods_discount IS '商品折扣率,当前为 10.0 表示无折扣。 | 来源: goods_discount'; +COMMENT ON COLUMN dim_member_card_account_Ex.assistant_discount IS '助教服务折扣率,当前为 10.0。 | 来源: assistant_discount'; +COMMENT ON COLUMN dim_member_card_account_Ex.assistant_reward_discount IS '助教奖励折扣率,当前为 10.0(未启用)。 | 来源: assistant_reward_discount'; +COMMENT ON COLUMN dim_member_card_account_Ex.table_service_discount IS '台费服务类折扣率,当前为 10.0。 | 来源: table_service_discount'; +COMMENT ON COLUMN dim_member_card_account_Ex.goods_service_discount IS '商品服务折扣率,当前为 10.0。 | 来源: goods_service_discount'; +COMMENT ON COLUMN dim_member_card_account_Ex.assistant_service_discount IS '助教服务类折扣率,当前为 10.0。 | 来源: assistant_service_discount'; +COMMENT ON COLUMN dim_member_card_account_Ex.coupon_discount IS '使用券的折扣比例(全部 10.0,未使用)。 | 来源: coupon_discount'; +COMMENT ON COLUMN dim_member_card_account_Ex.table_discount_sub_switch IS '台费折扣叠加开关:1=叠加其他折扣;2=不叠加,仅用卡折扣。 | 来源: table_discount_sub_switch'; +COMMENT ON COLUMN dim_member_card_account_Ex.goods_discount_sub_switch IS '商品折扣叠加开关,意义同上。 | 来源: goods_discount_sub_switch'; +COMMENT ON COLUMN dim_member_card_account_Ex.assistant_discount_sub_switch IS '助教折扣叠加开关,意义同上。 | 来源: assistant_discount_sub_switch'; +COMMENT ON COLUMN dim_member_card_account_Ex.assistant_reward_discount_sub_switch IS '助教奖励折扣叠加开关(未启用)。 | 来源: assistant_reward_discount_sub_switch'; +COMMENT ON COLUMN dim_member_card_account_Ex.goods_discount_range_type IS '商品折扣范围类型,未在文档说明具体含义。 | 来源: goods_discount_range_type'; +COMMENT ON COLUMN dim_member_card_account_Ex.table_deduct_radio IS '台费抵扣比例(百分比)。100.0 表示允许全额抵扣;0=不允许。 | 来源: table_deduct_radio'; +COMMENT ON COLUMN dim_member_card_account_Ex.goods_deduct_radio IS '商品抵扣比例,意义同上。 | 来源: goods_deduct_radio'; +COMMENT ON COLUMN dim_member_card_account_Ex.assistant_deduct_radio IS '助教抵扣比例,意义同上。 | 来源: assistant_deduct_radio'; +COMMENT ON COLUMN dim_member_card_account_Ex.table_service_deduct_radio IS '台费服务金抵扣比例。 | 来源: table_service_deduct_radio'; +COMMENT ON COLUMN dim_member_card_account_Ex.goods_service_deduct_radio IS '商品服务金抵扣比例。 | 来源: goods_service_deduct_radio'; +COMMENT ON COLUMN dim_member_card_account_Ex.assistant_service_deduct_radio IS '助教服务金抵扣比例。 | 来源: assistant_service_deduct_radio'; +COMMENT ON COLUMN dim_member_card_account_Ex.assistant_reward_deduct_radio IS '助教奖励金抵扣比例(未启用)。 | 来源: assistant_reward_deduct_radio'; +COMMENT ON COLUMN dim_member_card_account_Ex.coupon_deduct_radio IS '券抵扣比例(未启用)。 | 来源: coupon_deduct_radio'; +COMMENT ON COLUMN dim_member_card_account_Ex.cardSettleDeduct IS '结算时统一扣卡金额配置(当前为 0.0,未使用)。 | 来源: cardSettleDeduct'; +COMMENT ON COLUMN dim_member_card_account_Ex.tableCardDeduct IS '台费扣卡金额配置,当前 0.0。 | 来源: tableCardDeduct'; +COMMENT ON COLUMN dim_member_card_account_Ex.tableServiceCardDeduct IS '台费服务金扣卡金额配置。 | 来源: tableServiceCardDeduct'; +COMMENT ON COLUMN dim_member_card_account_Ex.goodsCarDeduct IS '商品扣卡金额配置。 | 来源: goodsCarDeduct'; +COMMENT ON COLUMN dim_member_card_account_Ex.goodsServiceCardDeduct IS '商品服务金扣卡金额配置。 | 来源: goodsServiceCardDeduct'; +COMMENT ON COLUMN dim_member_card_account_Ex.assistantCardDeduct IS '助教扣卡金额配置。 | 来源: assistantCardDeduct'; +COMMENT ON COLUMN dim_member_card_account_Ex.assistantServiceCardDeduct IS '助教服务金扣卡金额配置。 | 来源: assistantServiceCardDeduct'; +COMMENT ON COLUMN dim_member_card_account_Ex.assistantRewardCardDeduct IS '助教奖励金扣卡金额配置(未启用)。 | 来源: assistantRewardCardDeduct'; +COMMENT ON COLUMN dim_member_card_account_Ex.couponCardDeduct IS '使用券扣卡金额配置。 | 来源: couponCardDeduct'; +COMMENT ON COLUMN dim_member_card_account_Ex.deliveryFeeDeduct IS '配送费扣卡金额配置(未启用)。 | 来源: deliveryFeeDeduct'; +COMMENT ON COLUMN dim_member_card_account_Ex.tableAreaId IS '可用台区 ID 列表,空表示不限台区。 | 来源: tableAreaId'; +COMMENT ON COLUMN dim_member_card_account_Ex.goodsCategoryId IS '可用商品分类 ID 列表,空表示不限制商品类别。 | 来源: goodsCategoryId'; +COMMENT ON COLUMN dim_member_card_account_Ex.pdAssisnatLevel IS '允许的陪打助教等级列表,空表示不限。 | 来源: pdAssisnatLevel'; +COMMENT ON COLUMN dim_member_card_account_Ex.cxAssisnatLevel IS '允许的促销助教等级列表,空表示不限。 | 来源: cxAssisnatLevel'; + +-- dim_tenant_goods +CREATE TABLE IF NOT EXISTS dim_tenant_goods ( + tenant_goods_id BIGINT, + tenant_id BIGINT, + supplier_id BIGINT, + category_name VARCHAR(64), + goods_category_id BIGINT, + goods_second_category_id BIGINT, + goods_name VARCHAR(128), + goods_number VARCHAR(64), + unit VARCHAR(16), + market_price NUMERIC(18,2), + goods_state INTEGER, + create_time TIMESTAMPTZ, + update_time TIMESTAMPTZ, + is_delete INTEGER, + SCD2_start_time TIMESTAMPTZ, + SCD2_end_time TIMESTAMPTZ, + SCD2_is_current INT, + SCD2_version INT, + PRIMARY KEY (tenant_goods_id) +); +COMMENT ON COLUMN dim_tenant_goods.tenant_goods_id IS '租户级商品档案主键 ID,唯一标识一条商品档案。所有业务事实表(销售、库存等)中引用租户级商品时应指向此字段。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_tenant_goods.tenant_id IS '租户/品牌 ID,用于区分不同商户。当前样本中全表同一值,但模型上应作为维表外键,用于关联租户维度。 | 来源: tenant_id | 角色: 外键'; +COMMENT ON COLUMN dim_tenant_goods.supplier_id IS '供应商 ID,用于关联供应商档案维度。当前样本全部为 0,说明门店尚未维护供应商信息或导出视图未包含真实供应商关联,但字段含义明确。 | 来源: supplier_id | 角色: 外键'; +COMMENT ON COLUMN dim_tenant_goods.category_name IS '商品一级分类名称(可读名称),例如:零食、饮料、香烟、雪糕、小吃、酒水、面、槟榔等。真实分类关联通过 goods_category_id 与 goods_second_category_id 实现,此字段主要用于展示和直观分析。 | 来源: categoryName'; +COMMENT ON COLUMN dim_tenant_goods.goods_category_id IS '商品一级分类 ID。与分类维表(例如 dim_goods_category)关联,构成商品分类的第一层。一个 goods_category_id 对应一个 category_name。 | 来源: goods_category_id | 角色: 外键'; +COMMENT ON COLUMN dim_tenant_goods.goods_second_category_id IS '商品二级分类 ID。与分类维表的二级节点关联,用于更细粒度的品类统计。取值数目约十四种,每个值属于某个一级分类之下。 | 来源: goods_second_category_id | 角色: 外键'; +COMMENT ON COLUMN dim_tenant_goods.goods_name IS '商品名称(前台展示名),如 “东方树叶”“红烧牛肉面”“百威 235 毫升”等。当前样本中基本唯一。作为用户认知的主显示名称,用于报表、前台展示、小票打印。 | 来源: goods_name'; +COMMENT ON COLUMN dim_tenant_goods.goods_number IS '商品内部编号或自定义货号。当前样本中各记录不重复,如 “1”“2”“10”“11” 等。可用于与其他系统对接或人工查找,有一定对账和排错价值。 | 来源: goods_number'; +COMMENT ON COLUMN dim_tenant_goods.unit IS '商品计量单位,例如:瓶、包、个、份、根、盒、杯、桶、盘、支等。用于解释数量含义,是销售数量与库存数量的度量单位。 | 来源: unit'; +COMMENT ON COLUMN dim_tenant_goods.market_price IS '商品标价或标准销售单价。例如 2、5、6、8、10、12、15、18、20、28 元。POS 默认销售价格,结算时的基础金额字段。 | 来源: market_price'; +COMMENT ON COLUMN dim_tenant_goods.goods_state IS '商品状态枚举。当前样本全部为 1,推测含义为“正常”“已上架”或“有效”。其他值(数据中未出现)通常表示下架、停用或草稿状态。用于控制商品是否可销售。 | 来源: goods_state'; +COMMENT ON COLUMN dim_tenant_goods.create_time IS '商品档案创建时间,格式为 “YYYY-MM-DD HH:MM:SS”。每条记录唯一。用于增量抽取和审计,也可用于分析商品生命周期。 | 来源: create_time'; +COMMENT ON COLUMN dim_tenant_goods.update_time IS '商品档案最近一次修改时间,可为空(表示自创建后未修改)。用于增量同步、变化跟踪和审计分析。 | 来源: update_time'; +COMMENT ON COLUMN dim_tenant_goods.is_delete IS '逻辑删除标志。枚举:0 表示未删除(有效商品);1 表示已逻辑删除(在前台不再展示)。当前样本全部为 0。用于软删除控制和历史数据保留。 | 来源: is_delete'; + +-- dim_tenant_goods_Ex +CREATE TABLE IF NOT EXISTS dim_tenant_goods_Ex ( + tenant_goods_id BIGINT, + remark_name VARCHAR(128), + pinyin_initial VARCHAR(128), + goods_cover VARCHAR(512), + goods_bar_code VARCHAR(64), + commodity_code VARCHAR(64), + commodity_code_list VARCHAR(256), + min_discount_price NUMERIC(18,2), + cost_price NUMERIC(18,2), + cost_price_type INTEGER, + able_discount INTEGER, + sale_channel INTEGER, + is_warehousing INTEGER, + is_in_site BOOLEAN, + able_site_transfer INTEGER, + common_sale_royalty INTEGER, + point_sale_royalty INTEGER, + out_goods_id BIGINT, + SCD2_start_time TIMESTAMPTZ, + SCD2_end_time TIMESTAMPTZ, + SCD2_is_current INT, + SCD2_version INT, + PRIMARY KEY (tenant_goods_id) +); +COMMENT ON COLUMN dim_tenant_goods_Ex.tenant_goods_id IS '租户级商品档案主键 ID,唯一标识一条商品档案。所有业务事实表(销售、库存等)中引用租户级商品时应指向此字段。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_tenant_goods_Ex.remark_name IS '商品备注名或别名,目前样本中均为空。设计用途为简写名、特殊展示名或内部备注,在当前门店尚未启用。 | 来源: remark_name'; +COMMENT ON COLUMN dim_tenant_goods_Ex.pinyin_initial IS '商品拼音首字母或助记码,用于前台按拼音检索,如 “DFSY,DFSX”“HSNRM,GSNRM”“SP” 等。主要为操作便利,对经营分析影响较小。 | 来源: pinyin_initial'; +COMMENT ON COLUMN dim_tenant_goods_Ex.goods_cover IS '商品封面图片 URL,用于前端展示商品图片。多个商品可能共用同一图片。对经营和结算逻辑无直接影响。 | 来源: goods_cover'; +COMMENT ON COLUMN dim_tenant_goods_Ex.goods_bar_code IS '商品条码(如 EAN 码)。当前样本全部为空。含义明确但尚未使用,未来可用于扫码收银或与第三方商品库对接。 | 来源: goods_bar_code'; +COMMENT ON COLUMN dim_tenant_goods_Ex.commodity_code IS '对外商品编码或系列编码,用于与外部系统或其他内部模块对接。例如 “10000”“100000”“10000028”等。一个编码在多条商品上复用,说明它不是主键而是“系列标识”或“外部编码”。具体业务含义依赖上游系统定义。 | 来源: commodity_code'; +COMMENT ON COLUMN dim_tenant_goods_Ex.commodity_code_list IS '商品编码列表的序列化形式,对应源 JSON 的数组字段(当前每条记录仅一个元素)。设计上支持 “一个商品多个编码” 场景,目前仅为 commodity_code 的冗余表现形式。 | 来源: commodityCode'; +COMMENT ON COLUMN dim_tenant_goods_Ex.min_discount_price IS '商品可售最低价(底价)。部分记录为 0.00,表示未设置底价或沿用系统默认规则。用于限制打折或手动改价的下限,防止亏损销售。 | 来源: min_discount_price'; +COMMENT ON COLUMN dim_tenant_goods_Ex.cost_price IS '商品成本价,当前大多数为 0.00,仅少数录入 2.0、2.5、3.0 等。用于成本核算与毛利分析。虽当前门店未完整维护,但字段含义清晰,属于成本分析必备结构。 | 来源: cost_price'; +COMMENT ON COLUMN dim_tenant_goods_Ex.cost_price_type IS '成本价格类型枚举,用于标识成本价的来源或计算方式。已知取值:1 和 2。常见推测:1 表示手工录入成本;2 表示按最近进货价或加权平均价生成。具体含义需结合系统枚举字典确认。 | 来源: cost_price_type'; +COMMENT ON COLUMN dim_tenant_goods_Ex.able_discount IS '是否允许该商品参与折扣的标志。已知取值:1。按命名推断枚举约定为:1 表示允许参与打折;0 表示不允许参与打折(当前样本未出现)。配合活动、整单折扣等控制哪些商品可享优惠。 | 来源: able_discount'; +COMMENT ON COLUMN dim_tenant_goods_Ex.sale_channel IS '销售渠道类型枚举。当前样本全部为 1,推测为“线下门店正常销售渠道”。理论上可扩展为不同渠道值,例如外卖、小程序、电商等,用于渠道维度分析。具体枚举说明依赖系统配置。 | 来源: sale_channel'; +COMMENT ON COLUMN dim_tenant_goods_Ex.is_warehousing IS '是否纳入库存管理的标志。已知取值:1,表示纳入库存管理;0 则表示不纳入库存管理(虚拟商品等,当前未出现)。本门店所有商品均启用库存管理。 | 来源: is_warehousing'; +COMMENT ON COLUMN dim_tenant_goods_Ex.is_in_site IS '是否在当前门店启用或上架。当前样本全部为 false。由于该文件是租户级商品档案视图,且 isInSite 全为 false,该字段在本视图的实际含义存在不确定性,可能仅在门店级商品表中才有明确业务意义。 | 来源: isInSite'; +COMMENT ON COLUMN dim_tenant_goods_Ex.able_site_transfer IS '是否允许门店间调拨或门店级操作的枚举。已知取值:2 为绝大多数,0 为少数一条。按命名推测大致含义为:2 表示允许调拨或默认允许;0 表示禁止调拨。实际枚举定义需查阅系统配置,当前无法完全确定具体业务规则。 | 来源: able_site_transfer'; +COMMENT ON COLUMN dim_tenant_goods_Ex.common_sale_royalty IS '普通销售提成或佣金配置字段,单位和含义需结合上游系统(可能为金额或比例)。当前样本全部为 0,说明未启用商品级提成配置。 | 来源: common_sale_royalty'; +COMMENT ON COLUMN dim_tenant_goods_Ex.point_sale_royalty IS '积分销售相关的提成或赠送规则配置字段。当前样本全部为 0,同样未启用该功能。具体数值含义(百分比或固定值)需结合系统定义。 | 来源: point_sale_royalty'; +COMMENT ON COLUMN dim_tenant_goods_Ex.out_goods_id IS '外部系统商品 ID,用于对接第三方平台或统一商品库时作为映射主键。目前样本全部为 0,说明尚未配置外部商品映射,具体对接规则依赖上游系统。 | 来源: out_goods_id'; + +-- dim_store_goods +CREATE TABLE IF NOT EXISTS dim_store_goods ( + site_goods_id BIGINT, + tenant_id BIGINT, + site_id BIGINT, + tenant_goods_id BIGINT, + goods_name TEXT, + goods_category_id BIGINT, + goods_second_category_id BIGINT, + category_level1_name TEXT, + category_level2_name TEXT, + batch_stock_qty INTEGER, + sale_qty INTEGER, + total_sales_qty INTEGER, + sale_price NUMERIC(18,2), + created_at TIMESTAMPTZ, + updated_at TIMESTAMPTZ, + avg_monthly_sales NUMERIC(18,4), + goods_state INTEGER, + enable_status INTEGER, + send_state INTEGER, + is_delete INTEGER, + SCD2_start_time TIMESTAMPTZ, + SCD2_end_time TIMESTAMPTZ, + SCD2_is_current INT, + SCD2_version INT, + PRIMARY KEY (site_goods_id) +); +COMMENT ON COLUMN dim_store_goods.site_goods_id IS '门店级商品 ID,本表主键;其它业务表中的 site_goods_id 与此对应,用于库存、销售等关联。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_store_goods.tenant_id IS '租户/品牌 ID,同一品牌下多个门店共享,用于跨门店汇总分析。 | 来源: tenant_id | 角色: 外键'; +COMMENT ON COLUMN dim_store_goods.site_id IS '门店 ID,对应门店维度表主键。 | 来源: site_id | 角色: 外键'; +COMMENT ON COLUMN dim_store_goods.tenant_goods_id IS '租户级(品牌级)商品 ID,用于关联 dim_tenant_goods,实现跨门店统一商品档案。 | 来源: tenant_goods_id | 角色: 外键'; +COMMENT ON COLUMN dim_store_goods.goods_name IS '商品名称,例如“合味道泡面”“地道肠”“茶位费”。 | 来源: goods_name'; +COMMENT ON COLUMN dim_store_goods.goods_category_id IS '商品一级分类 ID,对应商品分类维表主键,与 category_level1_name 一一对应。 | 来源: goods_category_id | 角色: 外键'; +COMMENT ON COLUMN dim_store_goods.goods_second_category_id IS '商品二级分类 ID,其父分类为 goods_category_id。 | 来源: goods_second_category_id | 角色: 外键'; +COMMENT ON COLUMN dim_store_goods.category_level1_name IS '一级分类名称,如“零食”“酒水”“服务费”,用于报表维度展示。 | 来源: oneCategoryName'; +COMMENT ON COLUMN dim_store_goods.category_level2_name IS '二级分类名称,如“面”“洋酒”“纸巾”,用于更细粒度分类分析。 | 来源: twoCategoryName'; +COMMENT ON COLUMN dim_store_goods.batch_stock_qty IS '当前成本批次的库存数量,用于按 cost_price 估算库存价值。 | 来源: batch_stock_quantity'; +COMMENT ON COLUMN dim_store_goods.sale_qty IS '截至导出时的销售数量(件),当前数据中与 total_sales_qty 相同。 | 来源: sale_num'; +COMMENT ON COLUMN dim_store_goods.total_sales_qty IS '累计销售数量;当前导出周期下与 sale_qty 一致,为历史全量口径。 | 来源: total_sales'; +COMMENT ON COLUMN dim_store_goods.sale_price IS '商品标准销售价(挂牌价),单位为元。实际结算可能有折扣或券抵扣。 | 来源: sale_price'; +COMMENT ON COLUMN dim_store_goods.created_at IS '门店商品档案创建时间(在门店建立该商品档案时的时间点)。 | 来源: create_time'; +COMMENT ON COLUMN dim_store_goods.updated_at IS '最近一次修改商品档案的时间(包括价格调整、状态变更等)。 | 来源: update_time'; +COMMENT ON COLUMN dim_store_goods.avg_monthly_sales IS '平均月销量(件/月),由某个统计周期内销售数据折算而来,用于补货和品类管理分析。 | 来源: average_monthly_sales'; +COMMENT ON COLUMN dim_store_goods.goods_state IS '商品基础状态枚举:1=正常状态(主流值),2=特殊状态(如新建未完全启用或停售但未彻底下架,通常伴随 stock=0、days_on_shelf=0)。 | 来源: goods_state'; +COMMENT ON COLUMN dim_store_goods.enable_status IS '档案启用状态:1=启用;2=停用(推测,样本中未出现);控制商品档案是否参与业务处理。 | 来源: enable_status'; +COMMENT ON COLUMN dim_store_goods.send_state IS '销售端可售状态:1=可销售/可下单;其他值可能代表停售或仅内部使用(当前样本全部为 1)。 | 来源: send_state'; +COMMENT ON COLUMN dim_store_goods.is_delete IS '逻辑删除标志:0=未删除(有效档案);1=已删除(逻辑删除,不再参与业务但保留历史引用)。 | 来源: is_delete'; + +-- dim_store_goods_Ex +CREATE TABLE IF NOT EXISTS dim_store_goods_Ex ( + site_goods_id BIGINT, + site_name TEXT, + unit TEXT, + goods_barcode TEXT, + goods_cover_url TEXT, + pinyin_initial TEXT, + stock_qty INTEGER, + stock_secondary_qty INTEGER, + safety_stock_qty INTEGER, + cost_price NUMERIC(18,4), + cost_price_type INTEGER, + provisional_total_cost NUMERIC(18,2), + total_purchase_cost NUMERIC(18,2), + min_discount_price NUMERIC(18,2), + is_discountable INTEGER, + days_on_shelf INTEGER, + audit_status INTEGER, + sale_channel INTEGER, + is_warehousing INTEGER, + freeze_status INTEGER, + forbid_sell_status INTEGER, + able_site_transfer INTEGER, + custom_label_type INTEGER, + option_required INTEGER, + remark TEXT, + sort_order INTEGER, + SCD2_start_time TIMESTAMPTZ, + SCD2_end_time TIMESTAMPTZ, + SCD2_is_current INT, + SCD2_version INT, + PRIMARY KEY (site_goods_id) +); +COMMENT ON COLUMN dim_store_goods_Ex.site_goods_id IS '门店级商品 ID,本表主键;其它业务表中的 site_goods_id 与此对应,用于库存、销售等关联。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_store_goods_Ex.site_name IS '门店名称,例如“朗朗桌球”,是对 site_id 的冗余展示,方便直接阅读。 | 来源: siteName'; +COMMENT ON COLUMN dim_store_goods_Ex.unit IS '销售计量单位,如“包”“瓶”“个”“份”“杯”等。 | 来源: unit'; +COMMENT ON COLUMN dim_store_goods_Ex.goods_barcode IS '商品条形码,用于扫码销售;当前样本多为空。 | 来源: goods_bar_code'; +COMMENT ON COLUMN dim_store_goods_Ex.goods_cover_url IS '商品图片 URL,用于前端展示商品图片。 | 来源: goods_cover'; +COMMENT ON COLUMN dim_store_goods_Ex.pinyin_initial IS '商品名称拼音首字母缩写,有时多个别名用逗号分隔,用于按字母快速检索和排序。 | 来源: pinyin_initial'; +COMMENT ON COLUMN dim_store_goods_Ex.stock_qty IS '当前主单位可用库存数量,以 unit 为单位。 | 来源: stock'; +COMMENT ON COLUMN dim_store_goods_Ex.stock_secondary_qty IS '副单位库存数量;若商品存在双单位(如箱/瓶),用于记录副单位库存;当前门店未启用双单位库存,样本中为 0。 | 来源: stock_A'; +COMMENT ON COLUMN dim_store_goods_Ex.safety_stock_qty IS '安全库存阈值,低于该值时系统可提示补货;当前门店尚未配置,样本中为 0。 | 来源: safe_stock'; +COMMENT ON COLUMN dim_store_goods_Ex.cost_price IS '商品单件成本价,单位元;部分商品为 0,表示未录入或由其它模块结转成本。 | 来源: cost_price'; +COMMENT ON COLUMN dim_store_goods_Ex.cost_price_type IS '成本类型枚举:1=固定成本价(按 cost_price 计),2=动态成本价(按采购单等方式结转,当前多数仍为暂估)。 | 来源: cost_price_type'; +COMMENT ON COLUMN dim_store_goods_Ex.provisional_total_cost IS '当前库存暂估总成本,单位元;通常约等于 batch_stock_qty × cost_price。 | 来源: provisional_total_cost'; +COMMENT ON COLUMN dim_store_goods_Ex.total_purchase_cost IS '当前库存总采购成本,单位元;当前样本中与 provisional_total_cost 相等,为后续精算成本预留。 | 来源: total_purchase_cost'; +COMMENT ON COLUMN dim_store_goods_Ex.min_discount_price IS '最低允许成交价(限价),单位元;收银改价时需保证成交价 ≥ 此值,为 0 时表示未设置限价或由其它规则控制。 | 来源: min_discount_price'; +COMMENT ON COLUMN dim_store_goods_Ex.is_discountable IS '是否允许参与折扣的标志:1=允许参与折扣;0=不参与任何折扣策略。当前样本全部为 1。 | 来源: able_discount'; +COMMENT ON COLUMN dim_store_goods_Ex.days_on_shelf IS '商品在架天数或可售天数,大致等于当前时间减去首次上架时间;0 通常表示刚建档或刚启用。 | 来源: days_available'; +COMMENT ON COLUMN dim_store_goods_Ex.audit_status IS '审核状态枚举:2=审核通过(当前唯一值);其他值可能代表待提交、待审核、审核不通过等。 | 来源: audit_status'; +COMMENT ON COLUMN dim_store_goods_Ex.sale_channel IS '销售渠道枚举:当前样本全部为 1 表示线下门店渠道;其他值可用于区分外卖、线上商城等渠道。 | 来源: sale_channel'; +COMMENT ON COLUMN dim_store_goods_Ex.is_warehousing IS '是否纳入库存管理:1=参与库存管理(有出入库流水);0 或其他值可能表示不计库存(样本中全部为 1)。 | 来源: is_warehousing'; +COMMENT ON COLUMN dim_store_goods_Ex.freeze_status IS '冻结状态:0=未冻结;非 0 可能表示锁定库存或禁止出库,具体业务规则需系统确认。 | 来源: freeze'; +COMMENT ON COLUMN dim_store_goods_Ex.forbid_sell_status IS '禁止销售状态:1=未禁止,允许销售;2=被禁止销售,即使上架也不能卖(含义基于命名和行业惯例推测)。 | 来源: forbid_sell_status'; +COMMENT ON COLUMN dim_store_goods_Ex.able_site_transfer IS '是否允许跨门店调拨或跨站点共享库存:2=不允许跨店调拨(当前主流值);0=未配置(个别记录),含义为是否参与跨店调拨功能。 | 来源: able_site_transfer'; +COMMENT ON COLUMN dim_store_goods_Ex.custom_label_type IS '自定义标签类型(基于字段名和取值推测):2=使用自定义标签;1 可能表示使用系统默认标签。具体影响哪些标签功能需业务确认。 | 来源: custom_label_type'; +COMMENT ON COLUMN dim_store_goods_Ex.option_required IS '是否需要额外选项或规格(基于字段名和取值推测):1=不需要额外选项,按单规格销售;其他值可能表示必须选择配料或口味。当前样本全部为 1。 | 来源: option_required'; +COMMENT ON COLUMN dim_store_goods_Ex.remark IS '商品备注,可填写口味说明、供应商信息、注意事项等;当前样本全部为空。 | 来源: remark'; +COMMENT ON COLUMN dim_store_goods_Ex.sort_order IS '前端展示排序权重,控制商品在列表中的显示顺序,具体规则(数值越大还是越小排前)由业务配置决定。 | 来源: sort'; + +-- dim_goods_category +CREATE TABLE IF NOT EXISTS dim_goods_category ( + category_id BIGINT, + tenant_id BIGINT, + category_name VARCHAR(50), + alias_name VARCHAR(50), + parent_category_id BIGINT, + business_name VARCHAR(50), + tenant_goods_business_id BIGINT, + category_level INTEGER, + is_leaf INTEGER, + open_salesman INTEGER, + sort_order INTEGER, + is_warehousing INTEGER, + SCD2_start_time TIMESTAMPTZ, + SCD2_end_time TIMESTAMPTZ, + SCD2_is_current INT, + SCD2_version INT, + PRIMARY KEY (category_id) +); +COMMENT ON COLUMN dim_goods_category.category_id IS '分类节点主键。来自分类树节点的 id,在整个商品分类维度内唯一。用于在事实表中作为商品分类外键引用。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_goods_category.tenant_id IS '租户 ID(商户/品牌 ID)。当前所有节点取值相同,表示同一个租户下的分类树。事实表可通过该字段与租户维度或门店维度间接关联。 | 来源: tenant_id | 角色: 外键'; +COMMENT ON COLUMN dim_goods_category.category_name IS '分类名称。一级大类示例:槟榔、器材、酒水、水果、零食、雪糕、香烟、其他、小吃。二级子类示例:槟榔、皮头、球杆、其他、饮料、酒水、茶水、咖啡、加料、洋酒、果盘、面、小吃等。用于前台展示和报表按细分类统计。 | 来源: category_name'; +COMMENT ON COLUMN dim_goods_category.alias_name IS '分类别名。当前样例数据全部为空字符串,预留给业务方做简称或别名展示。对现阶段经营分析无影响。 | 来源: alias_name'; +COMMENT ON COLUMN dim_goods_category.parent_category_id IS '父级分类 ID。根节点取值为 0,表示没有父分类;子节点取值为父分类的 id。与 category_id 共同形成树形层级关系。 | 来源: pid | 角色: 外键'; +COMMENT ON COLUMN dim_goods_category.business_name IS '业务大类名称。将多个细分类归入同一业务线。观测值与一级大类相同:槟榔、器材、酒水、水果、零食、雪糕、香烟、其他、小吃。子类的 business_name 继承所属根节点的大类名称。用于按业务线汇总库存和销售。 | 来源: business_name'; +COMMENT ON COLUMN dim_goods_category.tenant_goods_business_id IS '业务大类 ID。每个 business_name 对应唯一一个 tenant_goods_business_id,根节点和其下所有子节点共享同一取值。例如“酒水”大类及其子类饮料、茶水、咖啡、加料、洋酒拥有相同的业务 ID。可作为外键连接“业务线维度表”。 | 来源: tenant_goods_business_id | 角色: 外键'; +COMMENT ON COLUMN dim_goods_category.category_level IS '分类层级:1 表示一级大类(pid = 0),2 表示二级子类(pid ≠ 0)。方便在报表中区分大类与子类进行分组和展示层级控制。 | 来源: 由 pid 推导'; +COMMENT ON COLUMN dim_goods_category.is_leaf IS '是否叶子节点:1 表示叶子分类(categoryBoxes 为空列表),0 表示非叶子分类(存在子分类)。当前样例数据中,一级大类是非叶子节点,二级分类是叶子节点。用于树状导航或限制只能在叶子分类建商品。 | 来源: 由 categoryBoxes 推导'; +COMMENT ON COLUMN dim_goods_category.open_salesman IS '营业员开关控制。枚举含义根据业务系统定义,一般设计为:1 表示启用营业员/导购相关功能,2 表示关闭或不启用。当前样例所有分类取值为 2,说明这一套分类在库存模块中统一未启用营业员逻辑。对目前的经营分析影响较小。 | 来源: open_salesman'; +COMMENT ON COLUMN dim_goods_category.sort_order IS '分类排序序号。来自 sort 字段,用于前端展示顺序控制,数值越小越靠前。当前大部分分类为 0,仅少数为 1,说明排序配置较为粗略。对指标统计无实质影响。 | 来源: sort'; +COMMENT ON COLUMN dim_goods_category.is_warehousing IS '是否参与库存管理。枚举:1 表示参与库存管理,0 表示不参与(如服务类商品、手工费用)。当前文件中所有分类取值为 1,表示这一份分类树只包含“走库存”的商品分类。可在库存报表中用作过滤条件。 | 来源: is_warehousing'; + +-- dim_groupbuy_package +CREATE TABLE IF NOT EXISTS dim_groupbuy_package ( + groupbuy_package_id BIGINT, + tenant_id BIGINT, + site_id BIGINT, + package_name VARCHAR(200), + package_template_id BIGINT, + selling_price NUMERIC(10,2), + coupon_face_value NUMERIC(10,2), + duration_seconds INTEGER, + start_time TIMESTAMPTZ, + end_time TIMESTAMPTZ, + table_area_name VARCHAR(100), + is_enabled INTEGER, + is_delete INTEGER, + create_time TIMESTAMPTZ, + tenant_table_area_id_list VARCHAR(512), + card_type_ids VARCHAR(255), + SCD2_start_time TIMESTAMPTZ, + SCD2_end_time TIMESTAMPTZ, + SCD2_is_current INT, + SCD2_version INT, + PRIMARY KEY (groupbuy_package_id) +); +COMMENT ON COLUMN dim_groupbuy_package.groupbuy_package_id IS '门店侧团购套餐主键。每条记录一个套餐定义,供团购券核销记录指向。平台验券记录中的 group_package_id 通常指向这里。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_groupbuy_package.tenant_id IS '租户(品牌/商户)ID。本数据集中全表相同,表示同一品牌。 | 来源: tenant_id | 角色: 外键(指向租户维)'; +COMMENT ON COLUMN dim_groupbuy_package.site_id IS '门店 ID,本表所有记录属于同一门店。与其他 JSON 的 site_id 一致。 | 来源: site_id | 角色: 外键(指向门店维)'; +COMMENT ON COLUMN dim_groupbuy_package.package_name IS '团购套餐名称,用于前台展示及核销界面,例如“早场特惠一小时”“KTV欢唱四小时”等。 | 来源: package_name'; +COMMENT ON COLUMN dim_groupbuy_package.package_template_id IS '上层套餐 ID 或总部/系统级套餐 ID。多个 groupbuy_package_id 可能共享同一个 package_template_id,表示同一业务套餐在不同门店或不同版本下的配置。 | 来源: package_id | 角色: 外键(指向套餐模板维,后续可建)'; +COMMENT ON COLUMN dim_groupbuy_package.selling_price IS '团购售卖价,面向顾客在外部平台的成交价格。当前样本全部为 0,实际平台售价可能在外部系统,不在本地落地。 | 来源: selling_price'; +COMMENT ON COLUMN dim_groupbuy_package.coupon_face_value IS '券面值或内部结算面值。表示此套餐在门店侧可以抵扣的金额,用于验券或套餐流水时记账。例如“早场特惠一小时”可配置为 40.00,“KTV欢唱四小时”可配置为 200.00。当前样本为 0 但字段设计上非常关键。 | 来源: coupon_money'; +COMMENT ON COLUMN dim_groupbuy_package.duration_seconds IS '套餐包含的时长,单位为秒。常见取值:3600 表示 1 小时,7200 表示 2 小时,14400 表示 4 小时。核销时可用于换算可用台费时长。 | 来源: duration'; +COMMENT ON COLUMN dim_groupbuy_package.start_time IS '套餐整体生效开始时间。例如“2025-07-20 00:00:00”。通常从某日零点开始。 | 来源: start_time'; +COMMENT ON COLUMN dim_groupbuy_package.end_time IS '套餐整体生效结束时间。在该时间点之后不可使用。极大日期(如 9999-12-31 23:59:59)可视为长期有效。 | 来源: end_time'; +COMMENT ON COLUMN dim_groupbuy_package.table_area_name IS '套餐适用的门店台区名称,例如“A区中八”“B区中八”“斯诺克”“包厢”“KTV”等。主要用于展示和过滤,配合区域 ID 列实现人类可读的说明。 | 来源: table_area_name'; +COMMENT ON COLUMN dim_groupbuy_package.is_enabled IS '启用状态枚举。1 表示启用或上架;2 表示停用或下架。侧重表示“配置是否上架”,与 effective_status 区分。 | 来源: is_enabled'; +COMMENT ON COLUMN dim_groupbuy_package.is_delete IS '逻辑删除标志。0 表示正常;1 表示逻辑删除(数据仍保留但不再使用)。当前样本全部为 0。 | 来源: is_delete'; +COMMENT ON COLUMN dim_groupbuy_package.create_time IS '套餐配置在系统中的创建时间,用于审计和版本追踪。 | 来源: create_time'; +COMMENT ON COLUMN dim_groupbuy_package.tenant_table_area_id_list IS '租户级台区分组 ID 列表。当前每条记录为一个大整数(例如 2791960001957765)字符串,表示“台区分组”主键。系统通过此分组再关联到具体多个台区。 | 来源: tenant_table_area_id_list | 角色: 外键(指向台区分组维,后续可建)'; +COMMENT ON COLUMN dim_groupbuy_package.card_type_ids IS '允许使用本套餐的会员卡类型 ID 列表。当前样本统一为字符串“0”,表示未限制卡种,任意顾客或任意会员卡都可使用。若未来启用,将以分隔的 ID 列表形式记录限定卡种。 | 来源: card_type_ids | 角色: 外键(潜在指向卡种维)'; + +-- dim_groupbuy_package_Ex +CREATE TABLE IF NOT EXISTS dim_groupbuy_package_Ex ( + groupbuy_package_id BIGINT, + site_name VARCHAR(100), + usable_count INTEGER, + date_type INTEGER, + usable_range VARCHAR(255), + date_info VARCHAR(255), + start_clock VARCHAR(16), + end_clock VARCHAR(16), + add_start_clock VARCHAR(16), + add_end_clock VARCHAR(16), + area_tag_type INTEGER, + table_area_id BIGINT, + tenant_table_area_id BIGINT, + table_area_id_list VARCHAR(512), + group_type INTEGER, + system_group_type INTEGER, + package_type INTEGER, + effective_status INTEGER, + max_selectable_categories INTEGER, + creator_name VARCHAR(100), + SCD2_start_time TIMESTAMPTZ, + SCD2_end_time TIMESTAMPTZ, + SCD2_is_current INT, + SCD2_version INT, + PRIMARY KEY (groupbuy_package_id) +); +COMMENT ON COLUMN dim_groupbuy_package_Ex.groupbuy_package_id IS '门店侧团购套餐主键。每条记录一个套餐定义,供团购券核销记录指向。平台验券记录中的 group_package_id 通常指向这里。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.site_name IS '门店名称,当前均为“朗朗桌球”。属于冗余展示字段,可用于报表标题。 | 来源: site_name'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.usable_count IS '可使用次数上限。当前全部为 9999999,用作“无限次使用”的哨兵值。若未来限制次数,只需配置为具体次数。 | 来源: usable_count'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.date_type IS '日期限制类型枚举。当前样本全部为 1。推测常见含义:1 表示“全部日期可用”;其他值可用于区分工作日、周末或指定日期等模式。 | 来源: date_type'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.usable_range IS '日期范围说明的文本,例如“周一至周五”等。当前全部为空字符串,实际规则由 date_type 与时间段字段控制。 | 来源: usable_range'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.date_info IS '更细粒度的日期信息,可能用于存储具体日期列表或节假日规则,形式可能是编码或 JSON 字符串。当前几乎全部为空,仅有极少记录为“0”。 | 来源: date_info'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.start_clock IS '每日可用时间段的起始时间(第一段),字符串格式 HH:MM:SS,例如“10:00:00”“00:00:00”。与 end_clock 组合定义日内时段。 | 来源: start_clock'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.end_clock IS '每日可用时间段的结束时间(第一段),字符串格式 HH:MM:SS。与 start_clock 共同描述第一段可用时段。 | 来源: end_clock'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.add_start_clock IS '附加可用时段的起始时间(第二段),格式 HH:MM:SS。当前样本常见值为“00:00:00”或“10:00:00”。用于配置早场加夜场等双时段场景。 | 来源: add_start_clock'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.add_end_clock IS '附加可用时段的结束时间(第二段)。常见值如“1.00:00:00”“18:00:00”“23:59:00”。其中“1.00:00:00”表示跨至次日零点,用于表示“可用到第二天凌晨”的场景。 | 来源: add_end_clock'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.area_tag_type IS '区域标记类型枚举。当前样本全部为 1。推测 1 表示“按台区标签限制”(如 A 区、B 区、中八、斯诺克、包厢、KTV 等)。其他取值可能对应按具体台桌或其它规则限用。 | 来源: area_tag_type'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.table_area_id IS '单一台区 ID。当前样本全部为 0。原始设计用于限定只能在一个具体区域使用,但由于已引入多选逻辑,实际使用已迁移到 tenant_table_area_id_list。 | 来源: table_area_id'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.tenant_table_area_id IS '租户级台区 ID,单值版本。当前样本全部为 0。与 table_area_id 类似,已被多选列表字段取代。 | 来源: tenant_table_area_id'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.table_area_id_list IS '门店级台区 ID 列表。当前样本全部为空字符串。根据命名推测原本用于存储多个 table_area_id,实际实现已转向租户维度列表字段。 | 来源: table_area_id_list'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.group_type IS '团购类型枚举。当前样本全部为 1。推测 1 表示“计时类/台费类套餐”。其他取值可能用于商品类套餐、代金券类等,需结合系统配置进一步确认。 | 来源: group_type'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.system_group_type IS '系统级团购类型枚举。当前样本全部为 1。推测 1 表示“券码类团购”,即通过券码核销。其他取值可能为卡内套餐、内部套餐等,具体含义有待业务确认。 | 来源: system_group_type'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.package_type IS '内部业务子类型枚举。样本中取值有 1 与 2,各占比不同。具体含义不明,可能区分不同产品线或套餐来源,例如“平台合作套餐”与“自定义套餐”等,需要参考业务文档。 | 来源: type'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.effective_status IS '当前有效状态枚举,由系统根据时间及配置动态计算。观测值:1 表示当前有效,可正常核销;3 表示失效或已过期(即使 is_enabled 仍为 1,也不可使用)。可用于分析时过滤失效套餐。 | 来源: effective_status'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.max_selectable_categories IS '最大可选择分类数或子项数,具体含义未在样本和说明中体现,当前值全部为 0。可能用于“组合型套餐”中限制可选项目数量。 | 来源: max_selectable_categories'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.creator_name IS '创建人名称,例如“店长:郑丽珊”。主要用于审计追踪和后台展示。 | 来源: creator_name'; + +-- dwd_settlement_head +CREATE TABLE IF NOT EXISTS dwd_settlement_head ( + order_settle_id BIGINT, + tenant_id BIGINT, + site_id BIGINT, + site_name VARCHAR(100), + table_id BIGINT, + settle_name VARCHAR(100), + order_trade_no BIGINT, + create_time TIMESTAMPTZ, + pay_time TIMESTAMPTZ, + settle_type INTEGER, + revoke_order_id BIGINT, + member_id BIGINT, + member_name VARCHAR(100), + member_phone VARCHAR(50), + member_card_account_id BIGINT, + member_card_type_name VARCHAR(100), + is_bind_member BOOLEAN, + member_discount_amount NUMERIC(18,2), + consume_money NUMERIC(18,2), + table_charge_money NUMERIC(18,2), + goods_money NUMERIC(18,2), + real_goods_money NUMERIC(18,2), + assistant_pd_money NUMERIC(18,2), + assistant_cx_money NUMERIC(18,2), + adjust_amount NUMERIC(18,2), + pay_amount NUMERIC(18,2), + balance_amount NUMERIC(18,2), + recharge_card_amount NUMERIC(18,2), + gift_card_amount NUMERIC(18,2), + coupon_amount NUMERIC(18,2), + rounding_amount NUMERIC(18,2), + point_amount NUMERIC(18,2), + PRIMARY KEY (order_settle_id) +); +COMMENT ON COLUMN dwd_settlement_head.order_settle_id IS '结账记录主键 ID(订单结算 ID),全系统统一的结账单号,用于关联台费流水、助教流水、小票等明细表。 | 来源: settleList.id | 角色: 主键'; +COMMENT ON COLUMN dwd_settlement_head.tenant_id IS '租户/商户 ID(品牌维度),与各业务 JSON 中的 tenantId 一致。 | 来源: settleList.tenantId | 角色: 外键'; +COMMENT ON COLUMN dwd_settlement_head.site_id IS '门店 ID,用于关联门店维表 dim_site。 | 来源: settleList.siteId | 角色: 外键'; +COMMENT ON COLUMN dwd_settlement_head.site_name IS '门店名称快照,冗余展示字段,推荐通过 site_id 关联维表获取标准名称。 | 来源: settleList.siteName'; +COMMENT ON COLUMN dwd_settlement_head.table_id IS '结账关联的桌台 ID,对应台桌维表 dim_site_table 的主键。 | 来源: settleList.tableId | 角色: 外键'; +COMMENT ON COLUMN dwd_settlement_head.settle_name IS '结账对象名称,一般为 “区域 + 桌号”,如 “A区 A17”,便于报表展示。 | 来源: settleList.settleName'; +COMMENT ON COLUMN dwd_settlement_head.order_trade_no IS '交易号 / 订单流水号,与台费、助教等明细中的 order_trade_no 一致,用于按“交易维度”串联各业务明细。 | 来源: settleList.settleRelateId'; +COMMENT ON COLUMN dwd_settlement_head.create_time IS '结账创建时间(收银端点击“确认结账”的时间),格式:YYYY-MM-DD HH:MM:SS。 | 来源: settleList.createTime'; +COMMENT ON COLUMN dwd_settlement_head.pay_time IS '实际支付完成时间,通常晚于 create_time,用于资金结算及对账分析。 | 来源: settleList.payTime'; +COMMENT ON COLUMN dwd_settlement_head.settle_type IS '结账类型枚举。样本中主要有:1=正常结账;3=特殊类型结账(如挂账、补单、调整单等,具体需业务确认)。 | 来源: settleList.settleType'; +COMMENT ON COLUMN dwd_settlement_head.revoke_order_id IS '若当前记录属于撤销链路,记录对应的撤销单或原单的结账 ID,形成自关联关系。样本中为 0。 | 来源: settleList.revokeOrderId | 角色: 外键'; +COMMENT ON COLUMN dwd_settlement_head.member_id IS '会员主键 ID,一般对应租户维度的会员 ID,用于关联 dim_member。 | 来源: settleList.memberId | 角色: 外键'; +COMMENT ON COLUMN dwd_settlement_head.member_name IS '会员姓名快照,冗余展示字段;当前样本多为空,推荐通过关联会员维表获取标准姓名。 | 来源: settleList.memberName'; +COMMENT ON COLUMN dwd_settlement_head.member_phone IS '会员手机号快照,冗余展示字段,通常通过会员维表获取更可靠。 | 来源: settleList.memberPhone'; +COMMENT ON COLUMN dwd_settlement_head.member_card_account_id IS '会员卡账户 ID,对应 dim_member_card_account 主键;当前样本多为 0,但结构上是“结账 → 具体卡账户”的外键。 | 来源: settleList.tenantMemberCardId | 角色: 外键'; +COMMENT ON COLUMN dwd_settlement_head.member_card_type_name IS '会员卡类型名称快照,如“储值卡”“次卡”等,便于前端展示和报表查看。 | 来源: settleList.memberCardTypeName'; +COMMENT ON COLUMN dwd_settlement_head.is_bind_member IS '本单是否绑定会员。0=否(散客);1=是(存在 member_id)。样本中多为 0。 | 来源: settleList.isBindMember'; +COMMENT ON COLUMN dwd_settlement_head.member_discount_amount IS '会员折扣产生的优惠金额(元),例如会员卡折扣减免的台费/商品金额,参与整单优惠拆分。 | 来源: settleList.memberDiscountAmount'; +COMMENT ON COLUMN dwd_settlement_head.consume_money IS '本次结账消费总额(原价小计),约等于台费 + 商品 + 助教 + 服务等项目原价金额之和,未扣除任何优惠。 | 来源: settleList.consumeMoney'; +COMMENT ON COLUMN dwd_settlement_head.table_charge_money IS '本单台费(桌台计费部分)的金额(原价侧)。 | 来源: settleList.tableChargeMoney'; +COMMENT ON COLUMN dwd_settlement_head.goods_money IS '本单商品销售原价金额,对应酒水、小吃等商品类消费。 | 来源: settleList.goodsMoney'; +COMMENT ON COLUMN dwd_settlement_head.real_goods_money IS '商品实际计入金额,通常为 goods_money 扣除部分促销/折扣之后的金额。 | 来源: settleList.realGoodsMoney'; +COMMENT ON COLUMN dwd_settlement_head.assistant_pd_money IS '助教“排钟 / 点钟 / 按时长服务”等项目的应计金额(原价侧),与助教流水中的 ledger_amount 汇总对应。 | 来源: settleList.assistantPdMoney'; +COMMENT ON COLUMN dwd_settlement_head.assistant_cx_money IS '助教“超休”类助教项目金额(原价侧),是对助教收入的补充拆分维度,具体业务定义需结合助教模块确认。 | 来源: settleList.assistantCxMoney'; +COMMENT ON COLUMN dwd_settlement_head.adjust_amount IS '手动减免,人工调价金额汇总(整单减免或特殊价格调整),通常正值表示减免额度。 | 来源: settleList.adjustAmount'; +COMMENT ON COLUMN dwd_settlement_head.pay_amount IS '本单顾客“实付金额”(不含券面值这类虚拟抵扣),等于各支付渠道金额之和减去退款等调整。 | 来源: settleList.payAmount'; +COMMENT ON COLUMN dwd_settlement_head.balance_amount IS '从会员储值余额账户中扣除的金额(储值卡消费部分)。 | 来源: settleList.balanceAmount'; +COMMENT ON COLUMN dwd_settlement_head.recharge_card_amount IS '充值卡支付金额(使用充值类卡片余额支付的金额),与储值/充值型卡资金来源相关。 | 来源: settleList.rechargeCardAmount'; +COMMENT ON COLUMN dwd_settlement_head.gift_card_amount IS '礼品卡或代金卡支付金额。 | 来源: settleList.giftCardAmount'; +COMMENT ON COLUMN dwd_settlement_head.coupon_amount IS '本单由优惠券(团购券、代金券等)实际抵扣的金额。 | 来源: settleList.couponAmount'; +COMMENT ON COLUMN dwd_settlement_head.rounding_amount IS '抹零 / 四舍五入产生的金额差值,例如按角、分抹零。 | 来源: settleList.roundingAmount'; +COMMENT ON COLUMN dwd_settlement_head.point_amount IS '积分相关金额或数量。根据系统配置可能表示“使用积分抵扣的金额”或“本单获得的积分折算金额”,文档未给出唯一定义。 | 来源: settleList.pointAmount'; + +-- dwd_settlement_head_Ex +CREATE TABLE IF NOT EXISTS dwd_settlement_head_Ex ( + order_settle_id BIGINT, + serial_number INTEGER, + settle_status INTEGER, + can_be_revoked BOOLEAN, + revoke_order_name VARCHAR(100), + revoke_time TIMESTAMPTZ, + is_first_order BOOLEAN, + service_money NUMERIC(18,2), + cash_amount NUMERIC(18,2), + card_amount NUMERIC(18,2), + online_amount NUMERIC(18,2), + refund_amount NUMERIC(18,2), + prepay_money NUMERIC(18,2), + payment_method INTEGER, + coupon_sale_amount NUMERIC(18,2), + all_coupon_discount NUMERIC(18,2), + goods_promotion_money NUMERIC(18,2), + assistant_promotion_money NUMERIC(18,2), + activity_discount NUMERIC(18,2), + assistant_manual_discount NUMERIC(18,2), + point_discount_price NUMERIC(18,2), + point_discount_cost NUMERIC(18,2), + is_use_coupon BOOLEAN, + is_use_discount BOOLEAN, + is_activity BOOLEAN, + operator_name VARCHAR(100), + salesman_name VARCHAR(100), + order_remark VARCHAR(255), + operator_id BIGINT, + salesman_user_id BIGINT, + PRIMARY KEY (order_settle_id) +); +COMMENT ON COLUMN dwd_settlement_head_Ex.order_settle_id IS '结账记录主键 ID(订单结算 ID),全系统统一的结账单号,用于关联台费流水、助教流水、小票等明细表。 | 来源: settleList.id | 角色: 主键'; +COMMENT ON COLUMN dwd_settlement_head_Ex.serial_number IS '结账序列号或打印序号,当前样本全部为 0,具体业务用途未在文档中明确。 | 来源: settleList.serialNumber'; +COMMENT ON COLUMN dwd_settlement_head_Ex.settle_status IS '结账状态枚举。当前样本值均为 2,表示“已结算/已完成”;其他取值及含义未在样本和文档中出现,需后续补充。 | 来源: settleList.settleStatus'; +COMMENT ON COLUMN dwd_settlement_head_Ex.can_be_revoked IS '本单是否仍允许撤销/冲正。0=否;1=是。样本中均为 0。主要用于运维控制,分析价值有限。 | 来源: settleList.canBeRevoked'; +COMMENT ON COLUMN dwd_settlement_head_Ex.revoke_order_name IS '撤销单名称/标识,用于人工识别撤销关系;当前样本为空。 | 来源: settleList.revokeOrderName'; +COMMENT ON COLUMN dwd_settlement_head_Ex.revoke_time IS '撤销时间。无撤销时通常为系统默认值(如 0001-01-01 00:00:00)。 | 来源: settleList.revokeTime'; +COMMENT ON COLUMN dwd_settlement_head_Ex.is_first_order IS '是否首单(新客首单)标记。0=否;1=是。当前样本全部为 0,且文档中说明为“推测用途”,具体业务定义需确认。 | 来源: settleList.isFirst'; +COMMENT ON COLUMN dwd_settlement_head_Ex.service_money IS '其他服务费金额(如包间服务费等),用于与台费、商品、助教金额区分。 | 来源: settleList.serviceMoney'; +COMMENT ON COLUMN dwd_settlement_head_Ex.cash_amount IS '现金支付金额。 | 来源: settleList.cashAmount'; +COMMENT ON COLUMN dwd_settlement_head_Ex.card_amount IS '刷卡类支付金额(如银行卡/信用卡等),具体包含哪些通道需结合支付模块确认。 | 来源: settleList.cardAmount'; +COMMENT ON COLUMN dwd_settlement_head_Ex.online_amount IS '线上支付金额汇总(如微信、支付宝、云闪付等),不区分具体通道。 | 来源: settleList.onlineAmount'; +COMMENT ON COLUMN dwd_settlement_head_Ex.refund_amount IS '本单涉及的退款金额(元)。普通正常结账为 0,退单或部分退款时为正数。 | 来源: settleList.refundAmount'; +COMMENT ON COLUMN dwd_settlement_head_Ex.prepay_money IS '本单使用的预付金/定金金额。 | 来源: settleList.prepayMoney'; +COMMENT ON COLUMN dwd_settlement_head_Ex.payment_method IS '支付方式整体标记(枚举)。当前样本值统一为 0,具体各枚举值对应的支付方式未在文档中说明,需业务确认。 | 来源: settleList.paymentMethod'; +COMMENT ON COLUMN dwd_settlement_head_Ex.coupon_sale_amount IS '优惠券本身的售卖金额/成本金额(例如顾客为购买套餐券支付的金额),当前样本多为 0。 | 来源: settleList.couponSaleAmount'; +COMMENT ON COLUMN dwd_settlement_head_Ex.all_coupon_discount IS '所有券类优惠折扣的汇总金额,用于统计“券优惠总额”。 | 来源: settleList.allCouponDiscount'; +COMMENT ON COLUMN dwd_settlement_head_Ex.goods_promotion_money IS '商品促销产生的优惠金额(如满减、买赠均摊到商品部分)。 | 来源: settleList.goodsPromotionMoney'; +COMMENT ON COLUMN dwd_settlement_head_Ex.assistant_promotion_money IS '助教项目参与活动/促销产生的优惠金额。 | 来源: settleList.assistantPromotionMoney'; +COMMENT ON COLUMN dwd_settlement_head_Ex.activity_discount IS '整单活动折扣金额(如整单打折、满减活动产生的优惠),不区分具体项目类别。 | 来源: settleList.activityDiscount'; +COMMENT ON COLUMN dwd_settlement_head_Ex.assistant_manual_discount IS '针对助教服务的人工减免金额,与一般商品/台费折扣区分开。 | 来源: settleList.assistantManualDiscount'; +COMMENT ON COLUMN dwd_settlement_head_Ex.point_discount_price IS '积分抵扣对应的金额(售价侧),记录因积分使用而减少的应收金额。 | 来源: settleList.pointDiscountPrice'; +COMMENT ON COLUMN dwd_settlement_head_Ex.point_discount_cost IS '积分抵扣对应的成本金额(成本侧),用于毛利和利润分析。 | 来源: settleList.pointDiscountCost'; +COMMENT ON COLUMN dwd_settlement_head_Ex.is_use_coupon IS '是否使用优惠券。0=未使用;1=使用。当前样本均为 0。 | 来源: settleList.isUseCoupon'; +COMMENT ON COLUMN dwd_settlement_head_Ex.is_use_discount IS '是否使用折扣(包括会员折扣或其他整单折扣)。0=未使用;1=使用。当前样本多为 0。 | 来源: settleList.isUseDiscount'; +COMMENT ON COLUMN dwd_settlement_head_Ex.is_activity IS '是否参与营销活动。0=未参与;1=参与。 | 来源: settleList.isActivity'; +COMMENT ON COLUMN dwd_settlement_head_Ex.operator_name IS '结账操作员名称快照(通常带角色前缀,如“收银员:张三”),用于报表展示。 | 来源: settleList.operatorName'; +COMMENT ON COLUMN dwd_settlement_head_Ex.salesman_name IS '营业员/业务员名称,用于业绩归属及提成分析;样本中多为空。 | 来源: settleList.salesManName'; +COMMENT ON COLUMN dwd_settlement_head_Ex.order_remark IS '订单备注,由收银员手工填写的文字说明,如特殊情况、赠送原因等,主要用于人工复盘。 | 来源: settleList.orderRemark'; +COMMENT ON COLUMN dwd_settlement_head_Ex.operator_id IS '结账操作员用户 ID,用于关联员工/账号维度(如 dim_staff)。 | 来源: settleList.operatorId | 角色: 外键'; +COMMENT ON COLUMN dwd_settlement_head_Ex.salesman_user_id IS '营业员用户 ID,可关联员工维度,用于业绩分析和提成计算。 | 来源: settleList.salesManUserId | 角色: 外键'; + +-- dwd_table_fee_log +CREATE TABLE IF NOT EXISTS dwd_table_fee_log ( + table_fee_log_id BIGINT, + order_trade_no BIGINT, + order_settle_id BIGINT, + order_pay_id BIGINT, + tenant_id BIGINT, + site_id BIGINT, + site_table_id BIGINT, + site_table_area_id BIGINT, + site_table_area_name VARCHAR(64), + tenant_table_area_id BIGINT, + member_id BIGINT, + ledger_name VARCHAR(64), + ledger_unit_price NUMERIC(18,2), + ledger_count INTEGER, + ledger_amount NUMERIC(18,2), + real_table_charge_money NUMERIC(18,2), + coupon_promotion_amount NUMERIC(18,2), + member_discount_amount NUMERIC(18,2), + adjust_amount NUMERIC(18,2), + real_table_use_seconds INTEGER, + add_clock_seconds INTEGER, + start_use_time TIMESTAMPTZ, + ledger_end_time TIMESTAMPTZ, + create_time TIMESTAMPTZ, + ledger_status INTEGER, + is_single_order INTEGER, + is_delete INTEGER, + PRIMARY KEY (table_fee_log_id) +); +COMMENT ON COLUMN dwd_table_fee_log.table_fee_log_id IS '台费流水记录主键。每一条台费使用记录唯一一条。对应一次“台费计费单元”。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_table_fee_log.order_trade_no IS '订单交易号。整笔订单的主编号,用于把同一订单下的台费、商品、助教等多种明细串联在一起。可与支付记录中的交易号对应。 | 来源: order_trade_no | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_log.order_settle_id IS '结算单号 / 结账 ID。对应一次完整的结账操作。与 dwd_settlement_head 的主键关联。 | 来源: order_settle_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_log.order_pay_id IS '订单支付记录 ID。对应支付记录中的 id 或 relate_id(视具体模型)。用于追踪这条台费最终对应哪一条支付流水。 | 来源: order_pay_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_log.tenant_id IS '租户 / 品牌 ID。本文件内所有记录属于同一租户。与其他表的 tenant_id 一致,用于品牌级过滤。 | 来源: tenant_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_log.site_id IS '门店 ID。当前样本为同一门店。与嵌套的 siteProfile.id 以及其他 JSON 中的 site_id 对应,用于门店维度关联。 | 来源: site_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_log.site_table_id IS '桌台 ID。对应“台桌基础表”的主键。用于确定具体哪一张台或包厢。 | 来源: site_table_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_log.site_table_area_id IS '门店内“台桌区域” ID(门店视角的区域,如 A 区、B 区、斯诺克区、包厢区)。与门店内部的区域维度对应。 | 来源: site_table_area_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_log.site_table_area_name IS '台桌区域名称,如 “A区”“B区”“斯诺克区”“VIP包厢” 等。主要用于报表展示和人工阅读。 | 来源: site_table_area_name | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.tenant_table_area_id IS '租户层面的台桌区域 ID。用于品牌层统一定义的区域配置(一个区域可在多门店复用)。对应租户级区域维度。 | 来源: tenant_table_area_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_log.member_id IS '会员 ID。多数为 0 表示散客。非 0 时表示关联会员:0 表示散客或未使用会员;>0 对应会员档案中的 id。用于将台费流水关联到 dim_member。 | 来源: member_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_log.ledger_name IS '台号名称,例如 “A1”“A2”“S1”“VIP包厢” 等。等价于桌台维表中的展示名称,冗余在流水中作为快照。 | 来源: ledger_name | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.ledger_unit_price IS '台费结算时的计费单价(元/小时或元/单位时长)。与 ledger_count 配合计算原始应收台费。常见值如 48.0、58.0、68.0、88.0、98.0、116.0 等。 | 来源: ledger_unit_price | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.ledger_count IS '计费时长单位数。与 ledger_unit_price 共同决定原始应收额。可与 real_table_use_seconds 换算关系约为:时长秒数 ≈ ledger_count × 计费粒度(例如 30 分钟、60 分钟)。 | 来源: ledger_count | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.ledger_amount IS '原始应收台费金额,按单价与计费时长计算出来的台费金额,尚未考虑会员、券、调账等各类优惠拆分。 | 来源: ledger_amount | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.real_table_charge_money IS '实际向顾客收取的台费金额(现金 / 实付维度),不含券方承担、会员承担和内部调账部分。若为 0,则该笔台费完全由券、会员或内部调账承担。 | 来源: real_table_charge_money | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.coupon_promotion_amount IS '由优惠券、活动、团购等促销承担的优惠金额,直接抵扣在台费上。常见值为与单价或整倍数相同,例如 48.0、96.0、136.0、144.0 等。若 real_table_charge_money 为 0 且该字段等于 ledger_amount,说明台费完全由促销承担。 | 来源: coupon_promotion_amount | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.member_discount_amount IS '由会员权益产生的优惠金额,例如会员折扣、会员免费台等。若 ledger_amount = real_table_charge_money = member_discount_amount,表示这笔台费由会员权益承担,但仍作为台费收入进行记录。 | 来源: member_discount_amount | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.adjust_amount IS '手动减免,调整金额 / 调账金额。用于将台费金额转移或冲减到其他项目(例如套餐、包厢统一计费)或做手工调整。若 ledger_amount 完全被 adjust_amount 抵消,则说明该笔台费被整体调出当前台费科目。 | 来源: adjust_amount | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.real_table_use_seconds IS '台费实际计费时长(秒)。用于计算台费单价与费率分析。内部统一以秒为单位。 | 来源: real_table_use_seconds | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.add_clock_seconds IS '加钟时长(秒)。在原有使用基础上追加的累计加钟时长,常见为 2400、4200 等 60 的倍数(对应 40 分钟、70 分钟等)。 | 来源: add_clock_seconds | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.start_use_time IS '台开始使用时间,即实际开台时间。与 ledger_start_time 相同,表示计费起算点。 | 来源: start_use_time | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.ledger_end_time IS '台账计费结束时间。通常与 last_use_time 相差 1 秒。可理解为系统为计费进行的截断时刻。 | 来源: ledger_end_time | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.create_time IS '台费流水记录创建时间,通常接近结账时间。用于区分计费期间与结账时间。 | 来源: create_time | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.ledger_status IS '台费状态。样本中全部为 1。含义:1 表示正常已结算台费。按命名推断,0 可能表示未结算,2 可能表示作废或撤销,需要结合后续数据确认。 | 来源: ledger_status | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.is_single_order IS '是否独立计费单元。枚举:1 表示该记录是独立结算的桌费;0 表示非独立结算条目(可能是合并结账、转台过程中的占位记录)。is_single_order = 0 的记录通常 ledger_count 与 real_table_use_seconds 为 0。 | 来源: is_single_order | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.is_delete IS '逻辑删除标志。0 表示未删除(有效记录);1 表示已逻辑删除(一般不参与统计)。当前样本全部为 0。 | 来源: is_delete | 角色: 无'; + +-- dwd_table_fee_log_Ex +CREATE TABLE IF NOT EXISTS dwd_table_fee_log_Ex ( + table_fee_log_id BIGINT, + operator_name VARCHAR(64), + salesman_name VARCHAR(64), + used_card_amount NUMERIC(18,2), + service_money NUMERIC(18,2), + mgmt_fee NUMERIC(18,2), + fee_total NUMERIC(18,2), + ledger_start_time TIMESTAMPTZ, + last_use_time TIMESTAMPTZ, + operator_id BIGINT, + salesman_user_id BIGINT, + salesman_org_id BIGINT, + PRIMARY KEY (table_fee_log_id) +); +COMMENT ON COLUMN dwd_table_fee_log_Ex.table_fee_log_id IS '台费流水记录主键。每一条台费使用记录唯一一条。对应一次“台费计费单元”。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_table_fee_log_Ex.operator_name IS '操作员姓名。为冗余展示字段,便于直接阅读而不必联表员工档案。 | 来源: operator_name | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log_Ex.salesman_name IS '营业员姓名。当前样本为空。用于需要对营业员维度做业绩统计时作为冗余展示。 | 来源: salesman_name | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log_Ex.used_card_amount IS '由储值卡、次卡等“卡内余额”直接抵扣到台费的金额。当前样本为 0,但语义明确,用于区分“卡扣款”与“现金收款”。 | 来源: used_card_amount | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log_Ex.service_money IS '服务费 / 成本 /分成金额字段,类似助教流水里的 service_money。当前样本全为 0,门店未启用该字段,未来可能用于台费附加服务费或分成计算。 | 来源: service_money | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log_Ex.mgmt_fee IS '管理费字段。当前样本为 0。推测用于未来支持“台费附加管理费”功能。尚未实际启用。 | 来源: mgmt_fee | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log_Ex.fee_total IS '附加费用合计值字段。当前样本为 0。设计上用于汇总管理费、服务费等附加费用。尚未实际启用。 | 来源: fee_total | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log_Ex.ledger_start_time IS '台账计费起始时间。当前样本与 start_use_time 相同,表示计费与开台同时开始。 | 来源: ledger_start_time | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log_Ex.last_use_time IS '最后使用 / 操作时间,通常略晚于 ledger_end_time。可视为客人最后一次用台或最后一次加钟/操作的时间点。 | 来源: last_use_time | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log_Ex.operator_id IS '操作员 ID。负责开台 / 结账的员工账号 ID。与员工 / 账号体系中的用户 ID 对应。 | 来源: operator_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_log_Ex.salesman_user_id IS '营业员用户 ID。目前样本值为 0,表示门店暂未使用此字段做提成员工归属,但语义清晰。 | 来源: salesman_user_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_log_Ex.salesman_org_id IS '营业员所属机构 / 部门 ID。目前样本为 0。用于员工组织结构统计时的归属。 | 来源: salesman_org_id | 角色: 外键'; + +-- dwd_table_fee_adjust +CREATE TABLE IF NOT EXISTS dwd_table_fee_adjust ( + table_fee_adjust_id BIGINT, + order_trade_no BIGINT, + order_settle_id BIGINT, + tenant_id BIGINT, + site_id BIGINT, + table_id BIGINT, + table_area_id BIGINT, + table_area_name VARCHAR(64), + tenant_table_area_id BIGINT, + ledger_amount NUMERIC(18,2), + ledger_status INTEGER, + is_delete INTEGER, + adjust_time TIMESTAMPTZ, + PRIMARY KEY (table_fee_adjust_id) +); +COMMENT ON COLUMN dwd_table_fee_adjust.table_fee_adjust_id IS '台费折扣 / 调整流水主键;一条台费打折或调账操作对应一条记录。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_table_fee_adjust.order_trade_no IS '订单交易号;与台费流水、结账记录等表中的同名字段一致,用于把本次台费调整挂到具体订单上。 | 来源: order_trade_no | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_adjust.order_settle_id IS '结算单 / 小票 ID;与小票、结账头表中的 order_settle_id 对应,用于关联同一次结账。 | 来源: order_settle_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_adjust.tenant_id IS '租户 / 品牌 ID;标识该记录属于哪一个商户。 | 来源: tenant_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_adjust.site_id IS '门店 ID;与 dim_site、其它业务事实表中的 site_id 一致。 | 来源: site_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_adjust.table_id IS '台桌 ID;与 dim_table(site_tables_master.id)以及各类台费、助教流水中的 site_table_id 对应,标识哪一张台发生了折扣/调账。 | 来源: site_table_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_adjust.table_area_id IS '门店维度的台桌区域 ID;与 dim_table 中的 site_table_area_id 对应,例如 “斯诺克区”“VIP包厢”等区域。 | 来源: tableProfile.site_table_area_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_adjust.table_area_name IS '台桌区域名称快照,例如 “斯诺克区”“A区”“VIP包厢”;冗余展示字段,可从 dim_table 通过 table_area_id 获取。 | 来源: tableProfile.site_table_area_name'; +COMMENT ON COLUMN dwd_table_fee_adjust.tenant_table_area_id IS '租户维度的“台桌区域 ID”;同一租户下跨门店复用的区域标识,用于在租户级别统计各区域的折扣分布。 | 来源: tenant_table_area_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_adjust.ledger_amount IS '台费调整金额;等于台费流水中对应记录的 adjust_amount。正数表示被减免/调账掉的台费金额(本批数据全部为正);是衡量台费折扣规模的核心度量。 | 来源: ledger_amount'; +COMMENT ON COLUMN dwd_table_fee_adjust.ledger_status IS '调整记录状态(枚举)。1:生效调整(当前有效的折扣/调账记录);0:失效/被覆盖的历史记录(同一订单有多次调整时,旧记录会标记为 0,仅最新一条为 1)。 | 来源: ledger_status'; +COMMENT ON COLUMN dwd_table_fee_adjust.is_delete IS '逻辑删除标记(枚举)。0:未删除(有效记录);1:已逻辑删除(后台标记删除,不再参与业务统计)。当前数据全部为 0,但字段需保留以适配长期数据。 | 来源: is_delete'; +COMMENT ON COLUMN dwd_table_fee_adjust.adjust_time IS '台费调整记录创建时间,即打折/调账操作被系统写入的时间戳,用于时间分析和与结账时间对比(判断是事前折扣还是事后调账)。 | 来源: create_time'; + +-- dwd_table_fee_adjust_Ex +CREATE TABLE IF NOT EXISTS dwd_table_fee_adjust_Ex ( + table_fee_adjust_id BIGINT, + adjust_type INTEGER, + ledger_count INTEGER, + ledger_name VARCHAR(128), + applicant_name VARCHAR(64), + operator_name VARCHAR(64), + applicant_id BIGINT, + operator_id BIGINT, + PRIMARY KEY (table_fee_adjust_id) +); +COMMENT ON COLUMN dwd_table_fee_adjust_Ex.table_fee_adjust_id IS '台费折扣 / 调整流水主键;一条台费打折或调账操作对应一条记录。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_table_fee_adjust_Ex.adjust_type IS '调整类型(枚举)。当前数据全部为 1。取值示例:1:台费打折 / 台费减免(本门店实际使用的唯一类型);其他值:预留给台费转移、误操作恢复等其他类型(当前未出现,仅推测)。 | 来源: adjust_type'; +COMMENT ON COLUMN dwd_table_fee_adjust_Ex.ledger_count IS '调整次数计数,本数据中恒为 1,表示“一次调整事件”;与台费流水中的 ledger_count(计时长)含义不同。 | 来源: ledger_count'; +COMMENT ON COLUMN dwd_table_fee_adjust_Ex.ledger_name IS '调账项目名称或打折原因名称(设计意图);当前门店所有记录值为空字符串,未实际使用。作用暂不明确,保留以备后续业务启用。 | 来源: ledger_name'; +COMMENT ON COLUMN dwd_table_fee_adjust_Ex.applicant_name IS '申请人姓名快照,通常包含角色前缀(如 “收银员:张三”);是 applicant_id 的冗余展示字段,实际名称应以员工维表为准。 | 来源: applicant_name'; +COMMENT ON COLUMN dwd_table_fee_adjust_Ex.operator_name IS '操作员姓名快照;与 operator_id 对应的姓名冗余字段。 | 来源: operator_name'; +COMMENT ON COLUMN dwd_table_fee_adjust_Ex.applicant_id IS '申请人 ID;发起本次台费折扣/调账的员工账号 ID,用于按员工维度统计折扣行为。 | 来源: applicant_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_adjust_Ex.operator_id IS '实际执行调账操作的操作员 ID;当前样本中与 applicant_id 相同,但模型上允许“申请人 ≠ 操作人”。 | 来源: operator_id | 角色: 外键'; + +-- dwd_store_goods_sale +CREATE TABLE IF NOT EXISTS dwd_store_goods_sale ( + store_goods_sale_id BIGINT, + order_trade_no BIGINT, + order_settle_id BIGINT, + order_pay_id BIGINT, + order_goods_id BIGINT, + site_id BIGINT, + tenant_id BIGINT, + site_goods_id BIGINT, + tenant_goods_id BIGINT, + tenant_goods_category_id BIGINT, + tenant_goods_business_id BIGINT, + site_table_id BIGINT, + ledger_name VARCHAR(200), + ledger_group_name VARCHAR(100), + ledger_unit_price NUMERIC(18,2), + ledger_count INTEGER, + ledger_amount NUMERIC(18,2), + discount_price NUMERIC(18,2), + real_goods_money NUMERIC(18,2), + cost_money NUMERIC(18,2), + ledger_status INTEGER, + is_delete INTEGER, + create_time TIMESTAMPTZ, + PRIMARY KEY (store_goods_sale_id) +); +COMMENT ON COLUMN dwd_store_goods_sale.store_goods_sale_id IS '商品销售明细主键;每条记录代表一次订单中的一个商品行流水。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_store_goods_sale.order_trade_no IS '订单交易号(业务单号);与台费、助教、团购等表的 order_trade_no 一致,用于把同一订单下各类消费串联起来。 | 来源: order_trade_no | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale.order_settle_id IS '结账记录主键 ID;连接结账记录 / 结算头事实表。 | 来源: order_settle_id | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale.order_pay_id IS '支付记录 ID;连接支付流水事实表,用于还原本条销售对应的收款信息。 | 来源: order_pay_id | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale.order_goods_id IS '当前版本的订单内商品明细 ID;可在订单范围内唯一定位该商品行,用于与小票明细等做行级关联。 | 来源: order_goods_id | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale.site_id IS '门店 ID(系统主键);与其它流水表中的 site_id 一致。 | 来源: site_id | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale.tenant_id IS '租户/品牌 ID;同一品牌下多门店共享同一个 tenant_id。 | 来源: tenant_id | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale.site_goods_id IS '门店级商品 ID;连接门店商品档案 dim_store_goods,与库存变动记录中的 siteGoodsId 一致。 | 来源: site_goods_id | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale.tenant_goods_id IS '租户级(品牌级)商品 ID;连接租户级商品档案维度表,一个 tenant_goods_id 在不同门店可对应多个 site_goods_id。 | 来源: tenant_goods_id | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale.tenant_goods_category_id IS '租户级商品一级分类 ID;连接商品分类维度(如酒水、零食等)。 | 来源: tenant_goods_category_id | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale.tenant_goods_business_id IS '租户级商品业务大类 ID(更高一层的业务分类,如“零食类”“酒水类”等)。 | 来源: tenant_goods_business_id | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale.site_table_id IS '球台 ID;非 0 表示该商品在某张台桌上点单,0 表示前台售卖或与台桌无关。连接台桌维度 dim_table。 | 来源: site_table_id | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale.ledger_name IS '销售项目名称(商品名),如“哇哈哈矿泉水”“地道肠”等;为当时销售时刻的名称快照。 | 来源: ledger_name'; +COMMENT ON COLUMN dwd_store_goods_sale.ledger_group_name IS '门店前台菜单分组名称,如“酒水”“零食”“小吃”等;与品牌统一分类是两套维度。 | 来源: ledger_group_name'; +COMMENT ON COLUMN dwd_store_goods_sale.ledger_unit_price IS '结算单价(元/单位);本次销售实际使用的单价。 | 来源: ledger_unit_price'; +COMMENT ON COLUMN dwd_store_goods_sale.ledger_count IS '销售数量(以商品单位计),如 1、2、6、36 等。 | 来源: ledger_count'; +COMMENT ON COLUMN dwd_store_goods_sale.ledger_amount IS '原始应收金额(未考虑任何折扣/抵扣),通常接近 ledger_unit_price × ledger_count。 | 来源: ledger_amount'; +COMMENT ON COLUMN dwd_store_goods_sale.discount_price IS '折后单价(元/单位);无折扣时等于 ledger_unit_price,有折扣时小于 ledger_unit_price。 | 来源: discount_price'; +COMMENT ON COLUMN dwd_store_goods_sale.real_goods_money IS '本行商品实际入账金额(已考虑折扣及其他抵扣后,实际计入营业额的金额);一定不大于 ledger_amount。 | 来源: real_goods_money'; +COMMENT ON COLUMN dwd_store_goods_sale.cost_money IS '本行商品对应的成本金额,用于毛利和利润分析;源自商品档案成本价及成本核算逻辑。 | 来源: cost_money'; +COMMENT ON COLUMN dwd_store_goods_sale.ledger_status IS '销售流水状态:1=正常有效;其他数值(当前数据未出现)一般表示“待结算”“作废”等。 | 来源: ledger_status'; +COMMENT ON COLUMN dwd_store_goods_sale.is_delete IS '逻辑删除标志:0=正常有效;1=已删除(仅保留历史,不再参与前端展示及统计)(本批数据全部为 0)。 | 来源: is_delete'; +COMMENT ON COLUMN dwd_store_goods_sale.create_time IS '销售记录创建时间,通常为结账时间或录入时间;用于时间维度分析,与订单层时间字段对齐。 | 来源: create_time'; + +-- dwd_store_goods_sale_Ex +CREATE TABLE IF NOT EXISTS dwd_store_goods_sale_Ex ( + store_goods_sale_id BIGINT, + legacy_order_goods_id BIGINT, + site_name TEXT, + legacy_site_id BIGINT, + goods_remark TEXT, + option_value_name TEXT, + operator_name TEXT, + open_salesman_flag INTEGER, + salesman_user_id BIGINT, + salesman_name TEXT, + salesman_role_id BIGINT, + salesman_org_id BIGINT, + discount_money NUMERIC(18,2), + returns_number INTEGER, + coupon_deduct_money NUMERIC(18,2), + member_discount_amount NUMERIC(18,2), + point_discount_money NUMERIC(18,2), + point_discount_money_cost NUMERIC(18,2), + package_coupon_id BIGINT, + order_coupon_id BIGINT, + member_coupon_id BIGINT, + option_price NUMERIC(18,2), + option_member_discount_money NUMERIC(18,2), + option_coupon_deduct_money NUMERIC(18,2), + push_money NUMERIC(18,2), + is_single_order INTEGER, + sales_type INTEGER, + operator_id BIGINT +); +COMMENT ON COLUMN dwd_store_goods_sale_Ex.store_goods_sale_id IS '商品销售明细主键;每条记录代表一次订单中的一个商品行流水。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.legacy_order_goods_id IS '旧版订单商品明细 ID,兼容字段;当前接口已统一使用 order_goods_id,本批数据全部为 0。 | 来源: orderGoodsId'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.site_name IS '门店名称,对 site_id 的冗余文本(例如“朗朗桌球”),用于展示。 | 来源: siteName'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.legacy_site_id IS '历史兼容门店 ID;当前接口统一使用 site_id,本批数据 siteId 全部为 0。 | 来源: siteId'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.goods_remark IS '商品备注/口味说明/特殊说明;部分记录为空,部分与商品名相同。 | 来源: goods_remark'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.option_value_name IS '商品选项名称(规格/口味,如大杯/小杯、不加冰等);当前门店未启用多规格,样本中全部为空。 | 来源: option_value_name'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.operator_name IS '操作员姓名冗余,如“收银员:郑丽珊”;用于展示,不作为关联键。 | 来源: operator_name'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.open_salesman_flag IS '是否启用营业员机制标志:1=启用营业员/提成体系(需指定 salesman_* 字段);2=未启用营业员体系(本批数据全部为 2)。 | 来源: openSalesman'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.salesman_user_id IS '营业员用户 ID(系统账号 ID);当前样本全部为 0,说明门店未启用营业员业绩统计。 | 来源: salesman_user_id | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.salesman_name IS '营业员姓名;当前样本全部为空字符串。 | 来源: salesman_name'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.salesman_role_id IS '营业员角色 ID(例如某角色代码对应“销售员”角色);当前样本全部为 0。 | 来源: salesman_role_id | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.salesman_org_id IS '营业员所属组织/部门 ID;当前样本全部为 0,未启用按组织分组统计。 | 来源: sales_man_org_id | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.discount_money IS '本行商品的直接价格优惠金额(打折让利部分);在简单场景下满足:ledger_amount − discount_money ≈ real_goods_money(不含积分、券抵扣)。 | 来源: discount_money'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.returns_number IS '退货数量;当前样本全部为 0,如发生退货则记录退回的件数。 | 来源: returns_number'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.coupon_deduct_money IS '优惠券/团购券直接抵扣到本条商品明细上的金额;当前样本为 0,说明券更多在订单级处理。 | 来源: coupon_deduct_money'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.member_discount_amount IS '由会员折扣针对本行商品产生的优惠金额;当前样本全部为 0,折扣通常体现在 discount_money 中。 | 来源: member_discount_amount'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.point_discount_money IS '由积分抵扣的金额(顾客用积分兑换的抵现金额)。 | 来源: point_discount_money'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.point_discount_money_cost IS '积分抵扣对应的成本金额(积分成本、营销费用等核算用)。 | 来源: point_discount_money_cost'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.package_coupon_id IS '套餐券 ID;当商品来自套餐拆分或与套餐券关联时,用于追溯对应的套餐业务(当前样本为 0)。 | 来源: package_coupon_id'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.order_coupon_id IS '订单级优惠券 ID;整单使用某张券时,可用于记录该券对本行商品的分摊关系(当前样本为 0)。 | 来源: order_coupon_id'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.member_coupon_id IS '会员券 ID(如会员专享优惠券);当前样本为 0,为会员权益预留字段。 | 来源: member_coupon_id'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.option_price IS '商品选项(规格/加料等)的附加价格;当前门店未启用此功能,样本为 0。 | 来源: option_price'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.option_member_discount_money IS '由会员折扣作用在“选项价格”上的优惠金额;当前样本为 0。 | 来源: option_member_discount_money'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.option_coupon_deduct_money IS '由优惠券抵扣“选项价格”的金额;当前样本为 0。 | 来源: option_coupon_deduct_money'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.push_money IS '本行商品对应的提成金额(营业员/业务员提成);当前样本为 0,说明提成体系未启用。 | 来源: push_money'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.is_single_order IS '是否作为独立明细参与订单结算:1=作为独立明细参与订单;0=在特殊业务中可能合并为打包项目(当前样本全部为 1)。 | 来源: is_single_order'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.sales_type IS '销售类型:1=正常销售(当前样本全部为 1);常见扩展用法:2=赠品;3=内部消耗;4=盘点调整等。 | 来源: sales_type'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.operator_id IS '操作员 ID(录入本条销售的员工);与其它流水中的 operator_id 一致,可统一做员工维度分析。 | 来源: operator_id | 角色: 外键'; + +-- dwd_assistant_service_log +CREATE TABLE IF NOT EXISTS dwd_assistant_service_log ( + assistant_service_id BIGINT, + order_trade_no BIGINT, + order_settle_id BIGINT, + order_pay_id BIGINT, + order_assistant_id BIGINT, + order_assistant_type INTEGER, + tenant_id BIGINT, + site_id BIGINT, + site_table_id BIGINT, + tenant_member_id BIGINT, + system_member_id BIGINT, + assistant_no VARCHAR(64), + nickname VARCHAR(64), + site_assistant_id BIGINT, + user_id BIGINT, + assistant_team_id BIGINT, + person_org_id BIGINT, + assistant_level INTEGER, + level_name VARCHAR(64), + skill_id BIGINT, + skill_name VARCHAR(64), + ledger_unit_price NUMERIC(10,2), + ledger_amount NUMERIC(10,2), + projected_income NUMERIC(10,2), + coupon_deduct_money NUMERIC(10,2), + income_seconds INTEGER, + real_use_seconds INTEGER, + add_clock INTEGER, + create_time TIMESTAMPTZ, + start_use_time TIMESTAMPTZ, + last_use_time TIMESTAMPTZ, + is_delete INTEGER, + PRIMARY KEY (assistant_service_id) +); +COMMENT ON COLUMN dwd_assistant_service_log.assistant_service_id IS '助教服务流水主键,系统内唯一标识一次助教服务记录。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_assistant_service_log.order_trade_no IS '订单交易号,用于与台费、商品、支付等同一订单下的其他明细串联。 | 来源: order_trade_no | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.order_settle_id IS '结算单号,对应结账记录、小票中的结算主键。 | 来源: order_settle_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.order_pay_id IS '支付记录主键 ID,用于关联支付流水。 | 来源: order_pay_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.order_assistant_id IS '订单中“助教项目明细”的内部 ID,一笔订单中多段助教服务时用于区分。 | 来源: order_assistant_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.order_assistant_type IS '助教服务类型枚举:1 表示常规助教服务(如基础课);2 表示附加类助教服务(如附加课);其他值预留。 | 来源: order_assistant_type'; +COMMENT ON COLUMN dwd_assistant_service_log.tenant_id IS '租户/品牌 ID,用于区分商户。 | 来源: tenant_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.site_id IS '门店 ID,对应门店维表中的门店主键。 | 来源: site_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.site_table_id IS '球台/包厢 ID,对应台桌维表主键。 | 来源: site_table_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.tenant_member_id IS '商户维度会员 ID,对应会员档案主键;0 表示非会员或散客。 | 来源: tenant_member_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.system_member_id IS '系统级会员 ID,用于跨门店识别同一会员。 | 来源: system_member_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.assistant_no IS '助教编号/工号,如 “27”;与助教档案中的工号一致。 | 来源: assistantNo'; +COMMENT ON COLUMN dwd_assistant_service_log.nickname IS '助教对外昵称,如“佳怡”“周周”;用于展示,不参与业务逻辑。 | 来源: nickname'; +COMMENT ON COLUMN dwd_assistant_service_log.site_assistant_id IS '门店维度助教 ID,对应助教账号维表主键。 | 来源: site_assistant_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.user_id IS '助教对应的系统用户 ID,对应账号体系中的 user_id。 | 来源: user_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.assistant_team_id IS '助教团队 ID,用于分组统计团队业绩。 | 来源: assistant_team_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.person_org_id IS '助教所属人事组织/部门 ID,如“助教部”;用于组织维度分析。 | 来源: person_org_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.assistant_level IS '助教等级编码:8=助教管理;10=初级;20=中级;30=高级;用于薪酬/评价分层。 | 来源: assistant_level | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.level_name IS '助教等级名称,与 assistant_level 对应,如“初级”“中级”“高级”“助教管理”。 | 来源: levelName'; +COMMENT ON COLUMN dwd_assistant_service_log.skill_id IS '助教服务课程/技能 ID,应对应课程/技能配置表。 | 来源: skill_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.skill_name IS '助教服务课程/技能名称,如“基础课”“附加课”。 | 来源: skillName'; +COMMENT ON COLUMN dwd_assistant_service_log.ledger_unit_price IS '助教服务标准单价(原价),例如按小时或按节课的标价。 | 来源: ledger_unit_price'; +COMMENT ON COLUMN dwd_assistant_service_log.ledger_amount IS '按标准单价计算的应收金额,近似等于 ledger_unit_price×计费时长换算后的金额。 | 来源: ledger_amount'; +COMMENT ON COLUMN dwd_assistant_service_log.projected_income IS '实际计入门店收入的金额,已经考虑会员权益、券抵扣等后的结果。 | 来源: projected_income'; +COMMENT ON COLUMN dwd_assistant_service_log.coupon_deduct_money IS '由优惠券、团购券等直接抵扣到本次助教服务上的金额;0 表示未使用券。 | 来源: coupon_deduct_money'; +COMMENT ON COLUMN dwd_assistant_service_log.income_seconds IS '计费秒数(用于计算应收收入的时间长度),通常为按分钟取整的秒数。 | 来源: income_seconds'; +COMMENT ON COLUMN dwd_assistant_service_log.real_use_seconds IS '实际服务时长(秒),真实消耗的时间,用于分析助教工作量。 | 来源: real_use_seconds'; +COMMENT ON COLUMN dwd_assistant_service_log.add_clock IS '加钟秒数,在原有预约基础上临时增加的服务时间,数值为 60 的倍数。 | 来源: add_clock'; +COMMENT ON COLUMN dwd_assistant_service_log.create_time IS '助教流水记录创建时间,接近下单/结算时间。 | 来源: create_time'; +COMMENT ON COLUMN dwd_assistant_service_log.start_use_time IS '助教实际开始服务时间,通常与 ledger_start_time 一致。 | 来源: start_use_time'; +COMMENT ON COLUMN dwd_assistant_service_log.last_use_time IS '助教最后一次服务时间,通常与 ledger_end_time 一致。 | 来源: last_use_time'; +COMMENT ON COLUMN dwd_assistant_service_log.is_delete IS '逻辑删除标志:0 未删除;1 已逻辑删除,用于保留历史数据。 | 来源: is_delete'; + +-- dwd_assistant_service_log_Ex +CREATE TABLE IF NOT EXISTS dwd_assistant_service_log_Ex ( + assistant_service_id BIGINT, + table_name VARCHAR(64), + assistant_name VARCHAR(64), + ledger_name VARCHAR(128), + ledger_group_name VARCHAR(128), + ledger_count INTEGER, + member_discount_amount NUMERIC(10,2), + manual_discount_amount NUMERIC(10,2), + service_money NUMERIC(10,2), + returns_clock INTEGER, + ledger_start_time TIMESTAMPTZ, + ledger_end_time TIMESTAMPTZ, + ledger_status INTEGER, + is_confirm INTEGER, + is_single_order INTEGER, + is_not_responding INTEGER, + is_trash INTEGER, + trash_applicant_id BIGINT, + trash_applicant_name VARCHAR(64), + trash_reason VARCHAR(255), + salesman_user_id BIGINT, + salesman_name VARCHAR(64), + salesman_org_id BIGINT, + skill_grade INTEGER, + service_grade INTEGER, + composite_grade NUMERIC(5,2), + sum_grade NUMERIC(10,2), + get_grade_times INTEGER, + grade_status INTEGER, + composite_grade_time TIMESTAMPTZ, + PRIMARY KEY (assistant_service_id) +); +COMMENT ON COLUMN dwd_assistant_service_log_Ex.assistant_service_id IS '助教服务流水主键,系统内唯一标识一次助教服务记录。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.table_name IS '球台名称,如 “A17”“S1”,与 site_table_id 冗余,用于展示。 | 来源: tableName'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.assistant_name IS '助教姓名,如“何海婷”;与助教档案中的真实姓名一致。 | 来源: assistantName'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.ledger_name IS '助教计费项目名称,如“2-佳怡”等,通常为展示用组合字段。 | 来源: ledger_name'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.ledger_group_name IS '助教项目所属的计费分组/套餐分组名称,目前导出数据中为空,未看到实际使用场景。 | 来源: ledger_group_name'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.ledger_count IS '台账计费时长(秒),通常与 real_use_seconds 接近或相等。取income_seconds TEXT'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.member_discount_amount IS '由会员卡折扣产生的优惠金额,当前样本中为 0,但字段语义明确。 | 来源: member_discount_amount'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.manual_discount_amount IS '收银员手动减免金额(人工改价);当前导出数据中为 0。 | 来源: manual_discount_amount'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.service_money IS '与助教结算的金额或服务成本金额,当前数据全部为 0,具体结算规则未见启用。 | 来源: service_money'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.returns_clock IS '退钟秒数(取消加钟或提前结束退回的时间),当前样本中全部为 0,未见业务使用。 | 来源: returns_clock'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.ledger_start_time IS '台账计费起始时间。 | 来源: ledger_start_time'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.ledger_end_time IS '台账计费结束时间,可作为本次服务结束时间。 | 来源: ledger_end_time'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.ledger_status IS '助教流水状态:当前数据为 1,表示正常有效;其他值预留给已作废、未结算等状态。 | 来源: ledger_status'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.is_confirm IS '确认状态:当前样本为 2,一般含义为 1=待确认,2=已确认/已完成(含义基于字段名和现有值推断)。 | 来源: is_confirm'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.is_single_order IS '是否单独订单:1 表示助教服务作为单独订单结算;0 表示与其他项目合单结算。当前样本全部为 1。 | 来源: is_single_order'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.is_not_responding IS '是否存在“未响应/爽约”等异常:0 表示正常;1 表示未响应或爽约(基于字段名推断,当前数据均为 0)。 | 来源: is_not_responding'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.is_trash IS '是否已废除:0 表示正常有效;1 表示已废除,与助教废除记录表(assistant_cancellation_records)对应。 | 来源: is_trash'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.trash_applicant_id IS '提出废除申请的员工 ID,用于追溯谁发起了废除操作。 | 来源: trash_applicant_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.trash_applicant_name IS '废除申请人姓名,仅用于展示,与 trash_applicant_id 冗余。 | 来源: trash_applicant_name'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.trash_reason IS '废除原因文案,如“顾客取消”“录入错误”,便于分析异常原因。 | 来源: trash_reason'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.salesman_user_id IS '营业员/销售员用户 ID,大多为 0,当前门店未明显使用此维度。 | 来源: salesman_user_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.salesman_name IS '营业员/销售员姓名,多数为空字符串。 | 来源: salesman_name'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.salesman_org_id IS '营业员所属组织/部门 ID,多数为 0,尚未看到实际业务使用。 | 来源: salesman_org_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.skill_grade IS '课程技能评分(整数),当前样本全为 0,评价功能尚未启用。 | 来源: skill_grade'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.service_grade IS '服务态度评分(整数),当前样本全为 0。 | 来源: service_grade'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.composite_grade IS '综合评分(技能+服务等加权结果),当前样本为 0。 | 来源: composite_grade'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.sum_grade IS '累计评分总和,用于计算平均分,当前样本为 0。 | 来源: sum_grade'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.get_grade_times IS '获得评价的次数,当前样本为 0。 | 来源: get_grade_times'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.grade_status IS '评价状态枚举:当前样本为 1,一般含义为“未评价/正常”,其他状态未见实际值。 | 来源: grade_status'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.composite_grade_time IS '最近一次综合评分时间或评价更新时间,当前为默认时间 “0001-01-01 00:00:00”。 | 来源: composite_grade_time'; + +-- dwd_assistant_trash_event +CREATE TABLE IF NOT EXISTS dwd_assistant_trash_event ( + assistant_trash_event_id BIGINT, + site_id BIGINT, + table_id BIGINT, + table_area_id BIGINT, + assistant_no VARCHAR(32), + assistant_name VARCHAR(64), + charge_minutes_raw INTEGER, + abolish_amount NUMERIC(18,2), + trash_reason VARCHAR(255), + create_time TIMESTAMPTZ, + PRIMARY KEY (assistant_trash_event_id) +); +COMMENT ON COLUMN dwd_assistant_trash_event.assistant_trash_event_id IS '助教废除事件主键。与源 JSON 中 id 一一对应,单表内唯一。没有业务含义,只作为技术主键使用。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_assistant_trash_event.site_id IS '门店 ID。与其他 JSON 中的 siteId / site_id 含义一致。用来关联 dim_site。当前样例全部为同一门店(朗朗桌球),但设计上支持多门店。 | 来源: siteId | 角色: 外键(指向 dim_site)'; +COMMENT ON COLUMN dwd_assistant_trash_event.table_id IS '台桌 ID。对应 site_tables_master.json 中的 id。用于定位哪一张球台发生了助教废除,用于后续软关联台费流水、助教流水时的重要条件。 | 来源: tableId | 角色: 外键(指向 dim_table)'; +COMMENT ON COLUMN dwd_assistant_trash_event.table_area_id IS '台桌区域 ID。应与台桌维或区域维中的 area_id 一致,用于按区域统计(A 区/B 区/VIP 包厢等)。 | 来源: tableAreaId | 角色: 外键(潜在指向 dim_table_area)'; +COMMENT ON COLUMN dwd_assistant_trash_event.assistant_no IS '助教编号(工号/序号),如 ''2''、''4''、''27'' 等。与助教档案表 assistant_accounts_master.assistant_no、助教流水中的 assistantNo 一致,用于标识哪位助教。枚举:在门店内是有限编号集合,但并非硬编码含义。 | 来源: assistantOn | 角色: 外键(指向 dim_assistant)'; +COMMENT ON COLUMN dwd_assistant_trash_event.assistant_name IS '助教姓名/昵称,如 “泡芙”“佳怡”等。为冗余展示字段,真实姓名以助教档案为准。当前数据中与档案一致。 | 来源: assistantName'; +COMMENT ON COLUMN dwd_assistant_trash_event.charge_minutes_raw IS '助教被废除前“已计费时长(分钟)”的原始值。单位为分钟。示例:214、3600、10800 等。0 表示尚未发生有效计费就被废除。当前数据中存在异常大值(例如 10800),这一业务含义需结合实际规则理解,但本字段原样保留。枚举:数值型,无固定枚举。 | 来源: pdChargeMinutes'; +COMMENT ON COLUMN dwd_assistant_trash_event.abolish_amount IS '与本次助教废除操作关联的金额,单位元。字面含义为“助教废除金额”。当前样例均为非负数,如 5.83、570.00、0.00 等。正负方向:按照 ODS/JSON 原样保留,暂不在数仓层赋予“收入/支出”的方向含义,后续在 DWS 层按业务规则解释(例如是退还顾客、扣除收益等)。 | 来源: assistantAbolishAmount'; +COMMENT ON COLUMN dwd_assistant_trash_event.trash_reason IS '废除原因的文本说明,例如可以写“顾客临时取消”“误操作”等。当前样例中全部为空字符串,说明前台并未使用该字段。但从结构上看,是一个自由文本字段,不是枚举。 | 来源: trashReason'; +COMMENT ON COLUMN dwd_assistant_trash_event.create_time IS '这条废除记录创建的时间,格式 YYYY-MM-DD HH:MM:SS。代表系统正式记录“废除操作”的时刻,用于和助教服务流水按时间窗口做软关联(结合 site、table、assistant 等条件)。 | 来源: createTime'; + +-- dwd_assistant_trash_event_Ex +CREATE TABLE IF NOT EXISTS dwd_assistant_trash_event_Ex ( + assistant_trash_event_id BIGINT, + table_name VARCHAR(64), + table_area_name VARCHAR(64), + PRIMARY KEY (assistant_trash_event_id) +); +COMMENT ON COLUMN dwd_assistant_trash_event_Ex.assistant_trash_event_id IS '助教废除事件主键。与源 JSON 中 id 一一对应,单表内唯一。没有业务含义,只作为技术主键使用。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_assistant_trash_event_Ex.table_name IS '台桌名称/编号,便于直观看报表,如 “C1”“B9”“VIP1”等。文案冗余自台桌维度。枚举:在门店范围内是有限集合,但不是固定编码表。 | 来源: tableName'; +COMMENT ON COLUMN dwd_assistant_trash_event_Ex.table_area_name IS '台桌区域名称(中文),如 “A区”“B区”“C区”“VIP包厢”“补时长”等。展示用文本,具体层级信息由区域维表提供。 | 来源: tableArea'; + +-- dwd_member_balance_change +CREATE TABLE IF NOT EXISTS dwd_member_balance_change ( + balance_change_id BIGINT, + tenant_id BIGINT, + site_id BIGINT, + register_site_id BIGINT, + tenant_member_id BIGINT, + system_member_id BIGINT, + tenant_member_card_id BIGINT, + card_type_id BIGINT, + card_type_name VARCHAR(32), + member_name VARCHAR(64), + member_mobile VARCHAR(20), + balance_before NUMERIC(18,2), + change_amount NUMERIC(18,2), + balance_after NUMERIC(18,2), + from_type INTEGER, + payment_method INTEGER, + change_time TIMESTAMPTZ, + is_delete INTEGER, + remark VARCHAR(255), + PRIMARY KEY (balance_change_id) +); +COMMENT ON COLUMN dwd_member_balance_change.balance_change_id IS '余额变动记录主键 ID,来源于源系统的余额变更流水 ID,唯一标识一条余额变动事件。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_member_balance_change.tenant_id IS '租户/品牌 ID,在整体系统中唯一标识一家商户。当前样本中为同一值。 | 来源: tenant_id | 角色: 外键'; +COMMENT ON COLUMN dwd_member_balance_change.site_id IS '本次余额变动发生的门店 ID。通常对应具体门店;样本中:非 0 为“朗朗桌球”,0 代表平台级/虚拟门店场景(如活动抵用券结算)。 | 来源: site_id | 角色: 外键'; +COMMENT ON COLUMN dwd_member_balance_change.register_site_id IS '办卡门店 ID(卡注册门店)。与 site_id 区分:register_site_id=当初办卡门店,site_id=本次余额变动实际发生门店。当前样本中全部相同。 | 来源: register_site_id | 角色: 外键'; +COMMENT ON COLUMN dwd_member_balance_change.tenant_member_id IS '租户维度会员 ID(同一租户内的会员主键),用于关联会员档案。 | 来源: tenant_member_id | 角色: 外键'; +COMMENT ON COLUMN dwd_member_balance_change.system_member_id IS '系统全局会员 ID(跨租户统一的会员标识)。当前只有一个门店,但结构上允许同一人跨租户共享该 ID。 | 来源: system_member_id | 角色: 外键'; +COMMENT ON COLUMN dwd_member_balance_change.tenant_member_card_id IS '会员卡账户 ID(租户内唯一的一张具体卡,例如某人的储值卡/酒水卡/台费卡/活动抵用券等)。本次余额变动作用于这张卡。 | 来源: tenant_member_card_id | 角色: 外键'; +COMMENT ON COLUMN dwd_member_balance_change.card_type_id IS '卡种类型 ID。与 card_type_name 一一对应,用于区分不同卡种(储值卡/活动抵用券/酒水卡/台费卡)。 | 来源: card_type_id | 角色: 外键'; +COMMENT ON COLUMN dwd_member_balance_change.card_type_name IS '卡种名称(中文):• 储值卡:通用储值卡;• 活动抵用券:活动送券型卡;• 酒水卡:指定用于酒水类消费;• 台费卡:指定用于台费消费。 | 来源: memberCardTypeName'; +COMMENT ON COLUMN dwd_member_balance_change.member_name IS '会员姓名/称呼(如“曾丹烨”“葛先生”“胡先生”),主要用于运营、客服和人工识别。 | 来源: memberName'; +COMMENT ON COLUMN dwd_member_balance_change.member_mobile IS '会员手机号(完整号码字符串),是会员识别、营销触达的重要字段。 | 来源: memberMobile'; +COMMENT ON COLUMN dwd_member_balance_change.balance_before IS '本次变动前的卡内余额,单位:元。可为 0、数百、数千等。 | 来源: before'; +COMMENT ON COLUMN dwd_member_balance_change.change_amount IS '本次余额变动金额,单位:元:• 正数:余额增加(充值、赠送、调整加款等);• 负数:余额减少(消费扣款、退款冲减、活动抵扣等)。所有记录严格满足:balance_after = balance_before + change_amount(浮点精度内)。 | 来源: account_data'; +COMMENT ON COLUMN dwd_member_balance_change.balance_after IS '本次变动后的卡内余额,单位:元。由 before + account_data 计算而得,在源数据中已给出。 | 来源: after'; +COMMENT ON COLUMN dwd_member_balance_change.from_type IS '余额变动来源类型枚举(控制业务含义与方向):• 1:日常消费扣款 —— change_amount 为负数,payment_method=0,表示用卡支付消费被扣余额;• 3:充值增加 —— change_amount 为正数,payment_method=4,表示顾客通过外部支付为卡充值(扫码、银行卡等);• 4:调整/赠送增加 —— change_amount 为正数,payment_method=3,通常为后台赠送或手工加款;• 7:充值退款 —— change_amount 为负数,remark=''充值退款'',表示对历史充值做退款,以减少卡内余额方式体现;• 9:活动抵用券相关余额冲减 —— change_amount 为负数,卡种为“活动抵用券”,site_id=0,表示活动券额度被扣回或结算;• 2:其他增加 —— 当前仅 1 条正数样本(+1865.80),具体业务类型不明,但可确定为余额增加类。总体上:1/7/9 为减余额类,2/3/4 为加余额类。 | 来源: from_type'; +COMMENT ON COLUMN dwd_member_balance_change.payment_method IS '支付/变动渠道枚举(与源系统支付方式枚举一致):• 0:内部结算/无外部支付 —— 日常消费扣款、内部扣减、退款冲减等场景,新资金流不在本记录中产生;• 3:赠送/后台调整渠道 —— 与 from_type=4 搭配出现,表示此余额增加不是顾客付钱,而是后台发放或内部调账;• 4:充值外部支付渠道 —— 与 from_type=3 搭配出现,代表顾客通过某外部渠道完成充值(具体是微信/支付宝/银行卡等需要结合支付枚举表进一步映射)。 | 来源: payment_method'; +COMMENT ON COLUMN dwd_member_balance_change.change_time IS '余额变动时间(记录创建时间),格式 YYYY-MM-DD HH:MM:SS。通常紧邻实际交易发生时间,用于按时间线分析资金变动。 | 来源: create_time'; +COMMENT ON COLUMN dwd_member_balance_change.is_delete IS '逻辑删除标记:• 0:正常记录(当前样本全部为 0);• 1:逻辑删除(标记为删除但数据库保留,用于追溯)。分析时通常需要过滤掉 is_delete=1 的记录。 | 来源: is_delete'; +COMMENT ON COLUMN dwd_member_balance_change.remark IS '余额变动备注信息。当前样本中主要为:• 空字符串:无额外说明;• 充值退款:明确标记该条记录为“充值退款”业务,与 from_type=7 完全对应。后续可能出现其他业务备注。 | 来源: remark'; + +-- dwd_member_balance_change_EX +CREATE TABLE IF NOT EXISTS dwd_member_balance_change_EX ( + balance_change_id BIGINT, + pay_site_name VARCHAR(64), + register_site_name VARCHAR(64), + refund_amount NUMERIC(18,2), + operator_id BIGINT, + operator_name VARCHAR(64), + PRIMARY KEY (balance_change_id) +); +COMMENT ON COLUMN dwd_member_balance_change_EX.balance_change_id IS '余额变动记录主键 ID,来源于源系统的余额变更流水 ID,唯一标识一条余额变动事件。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_member_balance_change_EX.pay_site_name IS '余额变动发生门店名称,对应 site_id 的中文名。示例:朗朗桌球;当 site_id = 0 时通常为空字符串。纯展示冗余。 | 来源: paySiteName'; +COMMENT ON COLUMN dwd_member_balance_change_EX.register_site_name IS '办卡门店名称,对应 register_site_id 的中文名。当前样本全部为 朗朗桌球,属于冗余展示。 | 来源: registerSiteName'; +COMMENT ON COLUMN dwd_member_balance_change_EX.refund_amount IS '退款金额字段。在当前样本数据中全部为 0.00,推测用于区分“退回卡内余额”和“原路退回”等更细的退款模式,但目前未启用。 | 来源: refund_amount'; +COMMENT ON COLUMN dwd_member_balance_change_EX.operator_id IS '操作员 ID,执行本次余额变动操作的员工账号主键。可关联员工/账号维度。 | 来源: operator_id | 角色: 外键'; +COMMENT ON COLUMN dwd_member_balance_change_EX.operator_name IS '操作员名称及职位说明,例如:收银员:郑丽珊、店长:谢晓洪 等,是对 operator_id 的可读冗余。 | 来源: operator_name'; + +-- dwd_groupbuy_redemption +CREATE TABLE IF NOT EXISTS dwd_groupbuy_redemption ( + redemption_id BIGINT, + tenant_id BIGINT, + site_id BIGINT, + table_id BIGINT, + tenant_table_area_id BIGINT, + table_charge_seconds INTEGER, + order_trade_no BIGINT, + order_settle_id BIGINT, + order_coupon_id BIGINT, + coupon_origin_id BIGINT, + promotion_activity_id BIGINT, + promotion_coupon_id BIGINT, + order_coupon_channel INTEGER, + ledger_unit_price NUMERIC(18,2), + ledger_count INTEGER, + ledger_amount NUMERIC(18,2), + coupon_money NUMERIC(18,2), + promotion_seconds INTEGER, + coupon_code VARCHAR(64), + is_single_order INTEGER, + is_delete INTEGER, + ledger_name VARCHAR(128), + create_time TIMESTAMPTZ, + PRIMARY KEY (redemption_id) +); +COMMENT ON COLUMN dwd_groupbuy_redemption.redemption_id IS '团购券核销流水主键。一条记录代表一次团购券使用在某次台费上的一条核销明细。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_groupbuy_redemption.tenant_id IS '租户/品牌 ID。与其他表统一的租户标识,用于品牌维度聚合。 | 来源: tenant_id | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption.site_id IS '门店 ID。与门店维度及其他业务事实中的 site_id 一致。 | 来源: site_id | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption.table_id IS '球台 ID。与台桌维度表中的 id 对应,用于确定具体哪一张球台。 | 来源: table_id | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption.tenant_table_area_id IS '租户级台区组合 ID。与团购套餐定义中的 tenant_table_area_id_list 元素对应,表示该券实际使用时所在的台区组合。用于校验券的适用台区是否匹配实际台桌。 | 来源: tenant_table_area_id | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption.table_charge_seconds IS '本次结算中该球台总计计费的秒数(整台计费时间)。当台上除了券覆盖时长之外还有额外计费时间时,该值会大于券核销时长。 | 来源: table_charge_seconds'; +COMMENT ON COLUMN dwd_groupbuy_redemption.order_trade_no IS '订单交易号。与台费流水、商品销售、助教服务、小票详情等表的 order_trade_no 一致,用于将同一笔结账中的所有明细串联起来。 | 来源: order_trade_no | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption.order_settle_id IS '结算单 ID。与结账记录和小票详情中的结算主键对应,用于从团购券核销记录跳转到整单结算。 | 来源: order_settle_id | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption.order_coupon_id IS '订单中的“券使用记录 ID”。与平台或内部券核销表中的主键一致,用于在订单内部定位这条券使用记录。当前与 coupon_origin_id 数值相等。 | 来源: order_coupon_id | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption.coupon_origin_id IS '上游系统或第三方平台中该券记录的主键 ID。可在平台验券记录中查到券的来源平台、原订单等。当前与 order_coupon_id 数值一致,但语义是“券来源 ID”。 | 来源: coupon_origin_id | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption.promotion_activity_id IS '促销活动 ID。每条记录对应一个活动主键,用于识别券所属的促销活动或团购活动。 | 来源: promotion_activity_id | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption.promotion_coupon_id IS '团购套餐定义 ID。与 group_buy_packages.json 中的 id 一一对应,表示当前使用的是哪一种团购套餐(例如某款“一小时套餐”“两小时套餐”)。 | 来源: promotion_coupon_id | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption.order_coupon_channel IS '券渠道类型枚举。观测值:1(大量记录)、2(少量记录)。用于区分券的来源渠道,例如不同团购平台或内部券。具体数值与渠道名称的映射由业务配置决定。 | 来源: order_coupon_channel | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption.ledger_unit_price IS '本次券在台费侧对应的标准单价,单位元/小时。典型值如 29.9、39.9、59.9、69.9 等。与门店台费计费规则中的单价相对应,用于计算券对应的金额。 | 来源: ledger_unit_price'; +COMMENT ON COLUMN dwd_groupbuy_redemption.ledger_count IS '本次券实际核销的计费秒数。大部分记录等于 promotion_seconds,少数略小于标准时长,表示这张券只覆盖了本次台费的一部分时长。 | 来源: ledger_count'; +COMMENT ON COLUMN dwd_groupbuy_redemption.ledger_amount IS '本次团购券实际冲抵台费的金额。大部分记录中该值与 coupon_money 相等,少数存在小数差异,来源于按单价与秒数换算的结果。 | 来源: ledger_amount'; +COMMENT ON COLUMN dwd_groupbuy_redemption.coupon_money IS '本次核销时,团购券在门店侧对应的金额额度(可抵扣金额)。同一种 promotion_coupon_id 下,该值固定,例如某套餐固定为 48.00 元、某套餐固定为 96.00 元等。 | 来源: coupon_money'; +COMMENT ON COLUMN dwd_groupbuy_redemption.promotion_seconds IS '团购套餐定义的标准时长权益,单位秒。观测枚举值为 3600、7200、14400,分别对应 1 小时、2 小时、4 小时。与团购套餐定义表中的 duration 字段一致。 | 来源: promotion_seconds'; +COMMENT ON COLUMN dwd_groupbuy_redemption.coupon_code IS '团购券券码字符串。每条记录一个唯一券码,例如“0107892475999”。用于与平台验券记录、券购买记录等做一一对应,追踪券的全生命周期。 | 来源: coupon_code | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption.is_single_order IS '是否作为单独订单行。观测值:1 为主,表示以独立条目方式结算;0 为个别记录,表示嵌入某种组合结算结构。具体业务含义依赖上层订单结构设计。 | 来源: is_single_order'; +COMMENT ON COLUMN dwd_groupbuy_redemption.is_delete IS '逻辑删除标记。0 表示正常记录,1 表示逻辑删除但数据仍保留用于追溯。当前样本全部为 0,用于过滤有效记录。 | 来源: is_delete'; +COMMENT ON COLUMN dwd_groupbuy_redemption.ledger_name IS '团购项目记账名称,如“全天A区中八一小时”“B区桌球一小时”“中八、斯诺克包厢两小时”等。通常与团购套餐名称相近,用于报表展示和套餐维度分析。 | 来源: ledger_name'; +COMMENT ON COLUMN dwd_groupbuy_redemption.create_time IS '本条团购券核销流水的创建时间,通常即核销时间,格式为“YYYY-MM-DD HH:MM:SS”。用于时间维度分析和数据分区。 | 来源: create_time'; + +-- dwd_groupbuy_redemption_Ex +CREATE TABLE IF NOT EXISTS dwd_groupbuy_redemption_Ex ( + redemption_id BIGINT, + site_name VARCHAR(64), + table_name VARCHAR(64), + table_area_name VARCHAR(64), + order_pay_id BIGINT, + goods_option_price NUMERIC(18,2), + goods_promotion_money NUMERIC(18,2), + table_service_promotion_money NUMERIC(18,2), + assistant_promotion_money NUMERIC(18,2), + assistant_service_promotion_money NUMERIC(18,2), + reward_promotion_money NUMERIC(18,2), + recharge_promotion_money NUMERIC(18,2), + offer_type INTEGER, + ledger_status INTEGER, + operator_id BIGINT, + operator_name VARCHAR(64), + salesman_user_id BIGINT, + salesman_name VARCHAR(64), + salesman_role_id BIGINT, + salesman_org_id BIGINT, + ledger_group_name VARCHAR(128), + PRIMARY KEY (redemption_id) +); +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.redemption_id IS '团购券核销流水主键。一条记录代表一次团购券使用在某次台费上的一条核销明细。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.site_name IS '门店名称。当前样本全部为同一门店,仅作冗余展示。 | 来源: siteName'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.table_name IS '球台名称或台号。如 A7、A11、B1 等。用于业务报表展示与人工识别。 | 来源: tableName'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.table_area_name IS '台区名称。观测枚举值包括 A区、B区、斯诺克区、麻将房。实际取值随门店台区配置变化。 | 来源: tableAreaName'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.order_pay_id IS '支付流水 ID。部分记录为 0,表示未在当前导出范围内关联到具体支付记录。真实含义为“指向支付记录表中的支付流水”。 | 来源: order_pay_id | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.goods_option_price IS '商品规格价格,用于商品类促销分摊时使用。当前在团购券核销场景中全部为 0,仅作为结构预留。 | 来源: goodsOptionPrice'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.goods_promotion_money IS '本次券使用中分摊到“商品”部分的促销金额。当前所有记录为 0,说明本门店的团购券未用于商品抵扣。 | 来源: goods_promotion_money'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.table_service_promotion_money IS '本次券使用中分摊到“台费服务费”部分的促销金额。当前样本全部为 0,结构上用于支持更细粒度的费用拆分。 | 来源: table_service_promotion_money'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.assistant_promotion_money IS '本次券使用中分摊到“助教服务”的促销金额。当前全部为 0,说明团购券尚未用于助教服务的抵扣。 | 来源: assistant_promotion_money'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.assistant_service_promotion_money IS '进一步细分助教服务对应的促销金额。当前为 0,仅预留结构以支持复杂场景。 | 来源: assistant_service_promotion_money'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.reward_promotion_money IS '本次促销中属于“奖励金、积分”等来源的促销金额分摊。当前为 0,预留用于积分或奖励金同时参与活动时的金额拆分。 | 来源: reward_promotion_money'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.recharge_promotion_money IS '来自“充值赠送”等储值优惠的促销金额分摊。当前为 0,预留用于将来区分“券优惠”和“充值赠送优惠”的场景。 | 来源: recharge_promotion_money'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.offer_type IS '优惠类型枚举。当前样本值全部为 1,表示本门店使用的团购券均为同一类型(例如“套餐券”)。其他取值可能对应满减、折扣、代金券等优惠类型,在本数据中未出现。 | 来源: offer_type'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.ledger_status IS '流水状态。观测值全部为 1。常规含义为:1 表示正常有效记录;其他值预留用于表示作废、撤销、未生效等状态。当前导出仅包含正常状态记录。 | 来源: ledger_status'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.operator_id IS '执行本次券核销操作的操作员 ID。可与员工维度表对接,用于分析不同操作员的核销行为与绩效。 | 来源: operator_id | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.operator_name IS '操作员名称及角色说明,例如“收银员:郑丽珊”。与 operator_id 冗余,对报表展示友好,但不参与模型关联。 | 来源: operator_name'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.salesman_user_id IS '营业员用户 ID。当前全部为 0,表示本门店在团购券场景未单独记录营业员信息。 | 来源: salesman_user_id | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.salesman_name IS '营业员姓名。当前为空字符串。结构上用于记录拉单或促销的业务员信息。 | 来源: salesman_name'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.salesman_role_id IS '营业员角色 ID。当前为 0,预留用于标识营业员在组织中的角色类型。 | 来源: salesman_role_id'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.salesman_org_id IS '营业员所属组织 ID。来源字段为 sales_man_org_id,DWD 层统一命名为 salesman_org_id。当前为 0,用于将来对接组织架构维度。 | 来源: sales_man_org_id'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.ledger_group_name IS '团购项目的记账分组名称。当前全部为空,预留给将来按团购项目大类分组(例如“团购台费”“团购包厢”)使用。 | 来源: ledger_group_name'; + +-- dwd_platform_coupon_redemption +CREATE TABLE IF NOT EXISTS dwd_platform_coupon_redemption ( + platform_coupon_redemption_id BIGINT, + tenant_id BIGINT, + site_id BIGINT, + coupon_code VARCHAR(64), + coupon_channel INTEGER, + coupon_name VARCHAR(200), + sale_price NUMERIC(10,2), + coupon_money NUMERIC(10,2), + coupon_free_time INTEGER, + channel_deal_id BIGINT, + deal_id BIGINT, + group_package_id BIGINT, + site_order_id BIGINT, + table_id BIGINT, + certificate_id VARCHAR(64), + verify_id VARCHAR(64), + use_status INTEGER, + is_delete INTEGER, + create_time TIMESTAMPTZ, + consume_time TIMESTAMPTZ, + PRIMARY KEY (platform_coupon_redemption_id) +); +COMMENT ON COLUMN dwd_platform_coupon_redemption.platform_coupon_redemption_id IS '平台券核销记录在本系统内的主键 ID。长整型分布式 ID,用于唯一标识本次核销流水。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.tenant_id IS '租户 ID,品牌级别标识。例如整套系统中的“朗朗桌球”品牌。与其他表的 tenant_id 一致,用于划分租户数据域。 | 来源: tenant_id | 角色: 外键'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.site_id IS '门店 ID。与门店维度 dim_site.site_id 对应,用于区分不同门店。siteProfile.id 与此字段相同,本表不再冗余门店快照。 | 来源: site_id | 角色: 外键'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.coupon_code IS '第三方团购券券码,顾客出示的核销码。当前样本中全表唯一,可视为业务自然主键,用于验券、对账、查询。 | 来源: coupon_code'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.coupon_channel IS '券来源渠道枚举,表示第三方平台渠道编号。观测值:1,2。具体含义需结合系统配置,一般可理解为:1 表示平台渠道 1(主平台),2 表示平台渠道 2(其他入口或子平台)。 | 来源: coupon_channel'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.coupon_name IS '第三方团购券产品名称,例如“【全天可用】中八桌球一小时(A区)”“1小时中八台球【11月特惠】(A区)”等。用于报表展示和区分不同团购产品。 | 来源: coupon_name'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.sale_price IS '顾客在第三方平台实际支付的团购售价,例如 11.11、29.90、39.90 等。始终小于 coupon_money,体现“折后价”。 | 来源: sale_price'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.coupon_money IS '券面值或套餐价值,即系统认为该券可抵扣的金额,例如 48.00、58.00、68.00、96.00、116.00、288.00。与 coupon_name 有固定对应关系。 | 来源: coupon_money'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.coupon_free_time IS '券附带的赠送时长,单位:秒。当前样本全部为 0,表示无独立赠送时长。若未来有赠送时间型券,则该字段存储赠送的秒数。 | 来源: coupon_free_time'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.channel_deal_id IS '渠道侧团购商品 ID(第三方平台 dealId)。值域有限(约 9 个值),与 coupon_name 一一对应。用于对接第三方接口和按平台商品维度统计。 | 来源: channel_deal_id | 角色: - 或 外键(预留)'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.deal_id IS '平台/系统侧团购商品 ID。多数记录为非 0 整数,也有部分为 0。与 coupon_name 存在稳定对应关系,0 表示内部未配置或未同步。未来可作为内部团购商品维度外键。 | 来源: deal_id | 角色: 外键(预留)'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.group_package_id IS '内部“团购套餐”定义表主键 ID。当前样本中全部为 0,表示平台券尚未映射到自有团购套餐;从设计上是预留的外键字段。 | 来源: group_package_id | 角色: 外键'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.site_order_id IS '门店内部订单 ID。本次平台券核销所挂靠的店内订单号。用于与结账记录、台费流水、商品销售等事实表通过订单维度关联。 | 来源: site_order_id | 角色: 外键'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.table_id IS '使用团购券的球台 ID。与 dim_site_table.table_id 对应,用于统计每张球台的第三方平台引流情况。 | 来源: table_id | 角色: 外键'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.certificate_id IS '第三方平台侧券实例 ID(凭证 ID),通常为 16–19 位数字字符串。用于与外部平台对账与查询核销结果。存在重复值,不能单独作为唯一键。 | 来源: certificate_id'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.verify_id IS '第三方平台核销记录 ID。大部分记录为空,少量有值。存在时可用于精确反查平台侧核销记录。 | 来源: verify_id'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.use_status IS '券使用状态枚举。观测值:1、2。1 表示已使用/已核销(正常消耗);2 表示已退款/已撤销或使用后反冲的状态。是判断券生命周期状态的核心字段。 | 来源: use_status'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.is_delete IS '逻辑删除标志。0 表示未删除;1 表示已逻辑删除。与 use_status 独立:即便业务状态异常(如 use_status=2),也可能 is_delete 仍为 0 以保留记录。 | 来源: is_delete'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.create_time IS '系统记录创建时间,即核销记录写入本系统的时间。格式为 YYYY-MM-DD HH:MM:SS。通常与 consume_time 相差约 1 秒。 | 来源: create_time'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.consume_time IS '券被核销/使用的业务时间,代表实际团购券使用发生的时间点。后续按核销日期统计核销量时以该字段为准。 | 来源: consume_time'; + +-- dwd_platform_coupon_redemption_Ex +CREATE TABLE IF NOT EXISTS dwd_platform_coupon_redemption_Ex ( + platform_coupon_redemption_id BIGINT, + coupon_cover VARCHAR(255), + coupon_remark VARCHAR(255), + groupon_type INTEGER, + operator_id BIGINT, + operator_name VARCHAR(50), + PRIMARY KEY (platform_coupon_redemption_id) +); +COMMENT ON COLUMN dwd_platform_coupon_redemption_Ex.platform_coupon_redemption_id IS '平台券核销记录在本系统内的主键 ID。长整型分布式 ID,用于唯一标识本次核销流水。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_platform_coupon_redemption_Ex.coupon_cover IS '券封面图片地址 URL,用于前端展示团购券图片。对经营分析和结算逻辑无影响。 | 来源: coupon_cover'; +COMMENT ON COLUMN dwd_platform_coupon_redemption_Ex.coupon_remark IS '券描述或备注信息,用于展示券规则、说明文字。未参与计算和关联逻辑。 | 来源: coupon_remark'; +COMMENT ON COLUMN dwd_platform_coupon_redemption_Ex.groupon_type IS '团购券类型枚举。当前样本全部为 1。推断含义:1 表示标准团购券,其他值预留为次卡、套餐券、权益券等类型。 | 来源: groupon_type'; +COMMENT ON COLUMN dwd_platform_coupon_redemption_Ex.operator_id IS '执行验券操作的员工/收银员账号 ID。当前样本中多数为同一值。可与员工/账号维度表关联。 | 来源: operator_id | 角色: 外键'; +COMMENT ON COLUMN dwd_platform_coupon_redemption_Ex.operator_name IS '操作员姓名或显示名,例如“收银员:郑丽珊”。是 operator_id 的冗余展示字段,用于报表展示。 | 来源: operator_name'; + +-- dwd_recharge_order +CREATE TABLE IF NOT EXISTS dwd_recharge_order ( + recharge_order_id BIGINT, + tenant_id BIGINT, + site_id BIGINT, + member_id BIGINT, + member_name_snapshot TEXT, + member_phone_snapshot TEXT, + tenant_member_card_id BIGINT, + member_card_type_name TEXT, + settle_relate_id BIGINT, + settle_type INTEGER, + settle_name TEXT, + is_first INTEGER, + pay_amount NUMERIC(18,2), + refund_amount NUMERIC(18,2), + point_amount NUMERIC(18,2), + cash_amount NUMERIC(18,2), + payment_method INTEGER, + create_time TIMESTAMPTZ, + pay_time TIMESTAMPTZ, + PRIMARY KEY (recharge_order_id) +); +COMMENT ON COLUMN dwd_recharge_order.recharge_order_id IS '充值结算记录主键;唯一标识一条充值/撤销记录。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_recharge_order.tenant_id IS '租户/品牌 ID;与其他 JSON 中 tenantId 含义一致。 | 来源: tenantId | 角色: 外键(dim_tenant)'; +COMMENT ON COLUMN dwd_recharge_order.site_id IS '门店 ID;与 siteProfile.id 一致,用于关联门店维度。 | 来源: siteId | 角色: 外键(dim_site)'; +COMMENT ON COLUMN dwd_recharge_order.member_id IS '会员 ID;对应会员档案中的 tenantMemberInfos.id。标识给哪个会员充值。 | 来源: memberId | 角色: 外键(dim_member)'; +COMMENT ON COLUMN dwd_recharge_order.member_name_snapshot IS '会员姓名/昵称快照,可能是名称或手机号字符串。 | 来源: memberName'; +COMMENT ON COLUMN dwd_recharge_order.member_phone_snapshot IS '会员手机号快照。 | 来源: memberPhone'; +COMMENT ON COLUMN dwd_recharge_order.tenant_member_card_id IS '会员卡实例 ID(某张具体卡);可关联 dim_member_card_account。 | 来源: tenantMemberCardId | 角色: 外键(dim_member_card_account)'; +COMMENT ON COLUMN dwd_recharge_order.member_card_type_name IS '会员卡类型名称;当前样例主要有:“储值卡”、“月卡”。 | 来源: memberCardTypeName'; +COMMENT ON COLUMN dwd_recharge_order.settle_relate_id IS '结算关联 ID;用于与支付记录等跨表关联(类似业务单 ID)。 | 来源: settleRelateId | 角色: 外键(与支付/结算域软关联)'; +COMMENT ON COLUMN dwd_recharge_order.settle_type IS '结算类型枚举:5=“充值订单”(正常充值);7=“充值撤销”(冲销记录)。 | 来源: settleType'; +COMMENT ON COLUMN dwd_recharge_order.settle_name IS '结算类型名称:"充值订单"、"充值撤销";前端展示用。 | 来源: settleName'; +COMMENT ON COLUMN dwd_recharge_order.is_first IS '是否首充标记。取值:1 或 2。理论含义类似“是否首充”,但 1/2 的精确定义需系统字典确认。 | 来源: isFirst'; +COMMENT ON COLUMN dwd_recharge_order.pay_amount IS '本条记录的充值金额(可为正/负):正数=实际充值金额;负数=撤销流水金额(settleType=7)。 | 来源: payAmount'; +COMMENT ON COLUMN dwd_recharge_order.refund_amount IS '对该充值订单的退款金额(通常为正数);原始充值单上为已退款金额,对应会有一条负数的“充值撤销”记录。 | 来源: refundAmount'; +COMMENT ON COLUMN dwd_recharge_order.point_amount IS '计入会员账户的储值/积分金额;多数情况下等于 pay_amount 的绝对值;撤销记录一般为 0。 | 来源: pointAmount'; +COMMENT ON COLUMN dwd_recharge_order.cash_amount IS '现金收款金额;样本中少数为 3000/5000,其余为 0。 | 来源: cashAmount'; +COMMENT ON COLUMN dwd_recharge_order.payment_method IS '支付方式编码。样本取值:1、2、4;具体对应渠道(现金/微信/支付宝/银行卡等)需系统“支付方式字典”确认。 | 来源: paymentMethod'; +COMMENT ON COLUMN dwd_recharge_order.create_time IS '充值记录创建时间(收银完成时间);用于时间分区、统计。 | 来源: createTime'; +COMMENT ON COLUMN dwd_recharge_order.pay_time IS '支付完成时间;通常与 create_time 接近或相同。 | 来源: payTime'; + +-- dwd_recharge_order_Ex +CREATE TABLE IF NOT EXISTS dwd_recharge_order_Ex ( + recharge_order_id BIGINT, + site_name_snapshot TEXT, + settle_status INTEGER, + is_bind_member BOOLEAN, + is_activity BOOLEAN, + is_use_coupon BOOLEAN, + is_use_discount BOOLEAN, + can_be_revoked BOOLEAN, + online_amount NUMERIC(18,2), + balance_amount NUMERIC(18,2), + card_amount NUMERIC(18,2), + coupon_amount NUMERIC(18,2), + recharge_card_amount NUMERIC(18,2), + gift_card_amount NUMERIC(18,2), + prepay_money NUMERIC(18,2), + consume_money NUMERIC(18,2), + goods_money NUMERIC(18,2), + real_goods_money NUMERIC(18,2), + table_charge_money NUMERIC(18,2), + service_money NUMERIC(18,2), + activity_discount NUMERIC(18,2), + all_coupon_discount NUMERIC(18,2), + goods_promotion_money NUMERIC(18,2), + assistant_promotion_money NUMERIC(18,2), + assistant_pd_money NUMERIC(18,2), + assistant_cx_money NUMERIC(18,2), + assistant_manual_discount NUMERIC(18,2), + coupon_sale_amount NUMERIC(18,2), + member_discount_amount NUMERIC(18,2), + point_discount_price NUMERIC(18,2), + point_discount_cost NUMERIC(18,2), + adjust_amount NUMERIC(18,2), + rounding_amount NUMERIC(18,2), + operator_id BIGINT, + operator_name_snapshot TEXT, + salesman_user_id BIGINT, + salesman_name TEXT, + order_remark TEXT, + table_id INTEGER, + serial_number INTEGER, + revoke_order_id BIGINT, + revoke_order_name TEXT, + revoke_time TIMESTAMPTZ, + PRIMARY KEY (recharge_order_id) +); +COMMENT ON COLUMN dwd_recharge_order_Ex.recharge_order_id IS '充值结算记录主键;唯一标识一条充值/撤销记录。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_recharge_order_Ex.site_name_snapshot IS '门店名称快照,如“朗朗桌球”;仅用于展示,门店改名后本字段不变。 | 来源: siteName'; +COMMENT ON COLUMN dwd_recharge_order_Ex.settle_status IS '结算状态;当前数据全部为 2,推测 2=已完成。其它状态未出现在样本中。 | 来源: settleStatus'; +COMMENT ON COLUMN dwd_recharge_order_Ex.is_bind_member IS '是否绑定为会员/其他绑定标记;当前所有记录为 False,而又都有 memberId,实际业务含义不清。 | 来源: isBindMember'; +COMMENT ON COLUMN dwd_recharge_order_Ex.is_activity IS '是否关联营销活动;当前全部为 False,表示样本周期内充值未绑定活动。 | 来源: isActivity'; +COMMENT ON COLUMN dwd_recharge_order_Ex.is_use_coupon IS '本次充值是否使用优惠券;当前样本全部为 False。结构上预留“充值用券”的能力。 | 来源: isUseCoupon'; +COMMENT ON COLUMN dwd_recharge_order_Ex.is_use_discount IS '是否使用折扣(如充值折扣);样本中全为 False。 | 来源: isUseDiscount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.can_be_revoked IS '当前记录是否仍可撤销;样本中全为 False(导出时均不可撤销)。 | 来源: canBeRevoked'; +COMMENT ON COLUMN dwd_recharge_order_Ex.online_amount IS '线上支付金额(如微信、支付宝等);当前样本为 0,但字段为支付渠道拆分预留。 | 来源: onlineAmount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.balance_amount IS '从账户余额中支付的金额;充值场景通常为 0(用余额充值没有实际意义)。 | 来源: balanceAmount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.card_amount IS '从其他储值卡或某种卡余额支付的金额;当前样本全为 0。 | 来源: cardAmount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.coupon_amount IS '使用券直接支付的金额(如储值券);当前样本为 0。 | 来源: couponAmount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.recharge_card_amount IS '充值到卡上的金额(与 point_amount 区分不同资金属性);样本为 0,结构预留。 | 来源: rechargeCardAmount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.gift_card_amount IS '赠送卡金额(如买 1000 送 100 的赠送部分);当前样本为 0。 | 来源: giftCardAmount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.prepay_money IS '预付款金额(订金);当前样本为 0,充值未启用此场景。 | 来源: prepayMoney'; +COMMENT ON COLUMN dwd_recharge_order_Ex.consume_money IS '消费总金额;在充值文件中全部为 0,实际用于消费场景(台费/商品)的结算模型复用字段。 | 来源: consumeMoney'; +COMMENT ON COLUMN dwd_recharge_order_Ex.goods_money IS '商品消费金额(充值记录中为 0)。 | 来源: goodsMoney'; +COMMENT ON COLUMN dwd_recharge_order_Ex.real_goods_money IS '实际应计商品金额(扣除折扣后);充值记录中为 0。 | 来源: realGoodsMoney'; +COMMENT ON COLUMN dwd_recharge_order_Ex.table_charge_money IS '台费金额;充值记录中为 0,来自通用结算模型。 | 来源: tableChargeMoney'; +COMMENT ON COLUMN dwd_recharge_order_Ex.service_money IS '服务项目金额(如助教、其他服务);充值中为 0。 | 来源: serviceMoney'; +COMMENT ON COLUMN dwd_recharge_order_Ex.activity_discount IS '营销活动折扣金额;当前样本为 0。 | 来源: activityDiscount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.all_coupon_discount IS '各类优惠券、团购券综合折扣金额;样本为 0。 | 来源: allCouponDiscount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.goods_promotion_money IS '商品促销优惠金额;样本为 0。 | 来源: goodsPromotionMoney'; +COMMENT ON COLUMN dwd_recharge_order_Ex.assistant_promotion_money IS '助教相关促销优惠金额;样本为 0。 | 来源: assistantPromotionMoney'; +COMMENT ON COLUMN dwd_recharge_order_Ex.assistant_pd_money IS '助教配单金额/相关费用;样本为 0。 | 来源: assistantPdMoney'; +COMMENT ON COLUMN dwd_recharge_order_Ex.assistant_cx_money IS '助教冲销/促销相关金额;样本为 0。 | 来源: assistantCxMoney'; +COMMENT ON COLUMN dwd_recharge_order_Ex.assistant_manual_discount IS '助教手工减免金额;样本为 0。 | 来源: assistantManualDiscount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.coupon_sale_amount IS '券/套餐销售金额(售卖券时使用);充值场景中为 0。 | 来源: couponSaleAmount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.member_discount_amount IS '因会员折扣产生的优惠金额;在充值样本中为 0。 | 来源: memberDiscountAmount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.point_discount_price IS '积分抵扣产生的价差(价格部分);样本为 0。 | 来源: pointDiscountPrice'; +COMMENT ON COLUMN dwd_recharge_order_Ex.point_discount_cost IS '积分抵扣对应的成本金额;样本为 0。 | 来源: pointDiscountCost'; +COMMENT ON COLUMN dwd_recharge_order_Ex.adjust_amount IS '手工调整金额(非抹零);样本为 0。 | 来源: adjustAmount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.rounding_amount IS '抹零金额(四舍五入产生的差额);样本为 0。 | 来源: roundingAmount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.operator_id IS '操作该笔充值的收银员/员工 ID。 | 来源: operatorId | 角色: 外键(将来可关联 dim_staff)'; +COMMENT ON COLUMN dwd_recharge_order_Ex.operator_name_snapshot IS '操作员姓名快照,便于直接阅读;与 operator_id 对应。 | 来源: operatorName'; +COMMENT ON COLUMN dwd_recharge_order_Ex.salesman_user_id IS '营业员用户 ID;当前样本全部为 0。 | 来源: salesManUserId | 角色: 外键(潜在 dim_staff)'; +COMMENT ON COLUMN dwd_recharge_order_Ex.salesman_name IS '营业员/销售员姓名;样本为空字符串。 | 来源: salesManName'; +COMMENT ON COLUMN dwd_recharge_order_Ex.order_remark IS '充值订单备注,如手工说明;当前样本为空。 | 来源: orderRemark'; +COMMENT ON COLUMN dwd_recharge_order_Ex.table_id IS '台桌 ID;充值场景下全部是 0,表示该订单不挂具体球台。 | 来源: tableId'; +COMMENT ON COLUMN dwd_recharge_order_Ex.serial_number IS '流水/小票序号;当前样本全部为 0,本门店未启用。 | 来源: serialNumber'; +COMMENT ON COLUMN dwd_recharge_order_Ex.revoke_order_id IS '撤销相关订单 ID(被撤销原单或撤销单指针);样本中存在值但逻辑未完全启用。 | 来源: revokeOrderId'; +COMMENT ON COLUMN dwd_recharge_order_Ex.revoke_order_name IS '撤销单名称/说明;样本全为空。 | 来源: revokeOrderName'; +COMMENT ON COLUMN dwd_recharge_order_Ex.revoke_time IS '撤销时间;当前样本为空,撤销信息主要通过负数流水与 refund_amount 表达。 | 来源: revokeTime'; + +-- dwd_payment +CREATE TABLE IF NOT EXISTS dwd_payment ( + payment_id BIGINT, + site_id BIGINT, + relate_type INTEGER, + relate_id BIGINT, + pay_amount NUMERIC(18,2), + pay_status INTEGER, + payment_method INTEGER, + online_pay_channel INTEGER, + create_time TIMESTAMPTZ, + pay_time TIMESTAMPTZ, + pay_date DATE, + PRIMARY KEY (payment_id) +); +COMMENT ON COLUMN dwd_payment.payment_id IS '支付流水主键ID。与源系统 id 一致。每条支付流水唯一标识一条支付行为(包括金额为 0 的记录)。 | 来源: payment_transactions.id | 角色: 主键'; +COMMENT ON COLUMN dwd_payment.site_id IS '门店ID。当前样本中全部为同一门店 2790685415443269。在数仓中外键关联 dim_site.site_id。 | 来源: payment_transactions.site_id | 角色: 外键'; +COMMENT ON COLUMN dwd_payment.relate_type IS '业务关联类型枚举,用来区分这条支付流水对应哪一类业务单据:• 2:结账单支付,对应结账记录 settlement_records 中的结账单;• 5:会员卡充值/账户变动类支付,对应会员余额/充值业务单号,在会员余额变更或充值结算中复用;• 1:其他业务类型,目前样本中仅有 1 条记录,具体业务含义待业务侧补充。 | 来源: payment_transactions.relate_type | 角色: −'; +COMMENT ON COLUMN dwd_payment.relate_id IS '关联业务记录ID,配合 relate_type 使用,是一个“多态外键”:• 当 relate_type = 2 时:relate_id = settlement_records.settleList.id(结账记录主键,对应 dwd_settlement_head_di.order_settle_id);• 当 relate_type = 5 时:relate_id = 会员卡余额变动/充值业务单号,在会员余额变更流水中同名字段使用;• 当 relate_type = 1 时:关联具体业务尚未确认,仅可视为预留类型。 | 来源: payment_transactions.relate_id | 角色: 外键(多业务类型)'; +COMMENT ON COLUMN dwd_payment.pay_amount IS '本次支付金额,单位元。为收入类字段,当前样本全部为非负数:• 正数:实际通过该支付方式收取的金额;• 0:仍生成支付流水,但实收金额为 0(例如整单由会员优惠、团购券、余额等抵扣),当前样本中有 140 条记录金额为 0。 | 来源: payment_transactions.pay_amount | 角色: −'; +COMMENT ON COLUMN dwd_payment.pay_status IS '支付状态枚举。当前样本中仅出现:• 2:支付成功。其它可能的状态(未支付、支付中、失败、已退款等)在本次导出中未出现,需以后按系统支付状态配置补充。由于本 JSON 仅导出成功记录,可以视作“成功支付流水视图”。 | 来源: payment_transactions.pay_status | 角色: −'; +COMMENT ON COLUMN dwd_payment.payment_method IS '支付方式枚举。当前样本中出现的取值:• 2:共 140 条记录;• 4:共 60 条记录。具体取值与“支付方式配置表”对应,例如可能代表现金、扫码支付、银行卡等。由于配置表未导出,在数仓中应作为枚举码字段,通过后续 dim_payment_method 进行解码。不要在数仓层擅自写死“2=微信、4=支付宝”等含义。 | 来源: payment_transactions.payment_method | 角色: 外键(预期关联支付方式维度)'; +COMMENT ON COLUMN dwd_payment.online_pay_channel IS '线上支付通道枚举。用于进一步细分线上渠道,例如:• 0:无线上通道/线下,或未区分具体线上通道(当前样本全部为 0);• 1:微信(推测,未在样本中出现);• 2:支付宝(推测,未在样本中出现)。目前门店在当前时间段内尚未使用该字段进行实际区分,业务含义需结合正式配置确认。 | 来源: payment_transactions.online_pay_channel | 角色: −'; +COMMENT ON COLUMN dwd_payment.create_time IS '支付流水创建时间,格式 YYYY-MM-DD HH:MM:SS。通常是发起支付请求的时间。当前样本中 create_time 与 pay_time 多数相同,但模型上允许两者不同(例如异步支付)。 | 来源: payment_transactions.create_time | 角色: −'; +COMMENT ON COLUMN dwd_payment.pay_time IS '支付完成时间(支付成功时间戳),格式 YYYY-MM-DD HH:MM:SS。用于统计资金实际入账时间,以及与结账时间进行对齐分析。 | 来源: payment_transactions.pay_time | 角色: −'; +COMMENT ON COLUMN dwd_payment.pay_date IS '支付日期分区字段,从 pay_time 截取 YYYY-MM-DD 得到。例如 pay_time = ''2025-11-09 23:35:57'' 时,pay_date = ''2025-11-09''。用于 DWD 表按天分区和日粒度汇总。 | 来源: 由 payment_transactions.pay_time 派生 | 角色: −'; + +-- dwd_refund + CREATE TABLE IF NOT EXISTS dwd_refund ( + refund_id BIGINT, + tenant_id BIGINT, + site_id BIGINT, + relate_type INTEGER, + relate_id BIGINT, + pay_amount NUMERIC(18,2), + channel_fee NUMERIC(18,2), + pay_time TIMESTAMPTZ, + create_time TIMESTAMPTZ, + payment_method INTEGER, + member_id BIGINT, + member_card_id BIGINT, + PRIMARY KEY (refund_id) + ); + COMMENT ON COLUMN dwd_refund.refund_id IS '退款流水主键。每条退款记录唯一 ID(雪花ID风格长整型) | 来源: id | 角色: 主键'; + COMMENT ON COLUMN dwd_refund.tenant_id IS '租户/品牌 ID,标识所属商户。与其他表中的 tenant_id 一致。 | 来源: tenant_id | 角色: 外键'; + COMMENT ON COLUMN dwd_refund.site_id IS '门店 ID。与门店维度 dim_site.site_id 对应,用于分门店分析。 | 来源: site_id | 角色: 外键'; + COMMENT ON COLUMN dwd_refund.relate_type IS '业务类型枚举,指示本退款对应哪类业务主单:当前样本值 {2, 5}:2=消费/结账类业务;5=充值/储值类业务(具体定义以业务字典为准)。与 relate_id 组合使用。 | 来源: relate_type'; + COMMENT ON COLUMN dwd_refund.relate_id IS '关联的业务主键 ID,含义依赖 relate_type:relate_type=2 时通常指结账主单 ID;relate_type=5 时通常指充值/储值业务单 ID。同一个 relate_id 可能有多笔退款(分批退款)。 | 来源: relate_id | 角色: 外键'; + COMMENT ON COLUMN dwd_refund.pay_amount IS '本次退款的资金金额,统一为负数。绝对值即退款金额,例如 -5000.00 表示退款 5000 元。 | 来源: pay_amount'; + COMMENT ON COLUMN dwd_refund.channel_fee IS '第三方支付渠道对本次退款收取的手续费。当前样本为 0.00,用于通道成本核算。 | 来源: channel_fee'; + COMMENT ON COLUMN dwd_refund.pay_time IS '退款在支付渠道/系统中发生的时间(退款完成时间),用于对账及按时间统计。 | 来源: pay_time'; + COMMENT ON COLUMN dwd_refund.create_time IS '本条退款流水在系统内创建时间,用于区分记录生成时间与渠道时间。 | 来源: create_time'; + COMMENT ON COLUMN dwd_refund.payment_method IS '支付方式枚举,指本次退款对应的原支付方式(如通道)。样本出现值 4,支付记录中有 {2,4},具体含义需参照支付方式配置表。 | 来源: payment_method'; + COMMENT ON COLUMN dwd_refund.member_id IS '关联的会员 ID,对应会员档案表主键。样本为 0,表示未绑定会员。 | 来源: member_id | 角色: 外键'; + COMMENT ON COLUMN dwd_refund.member_card_id IS '关联的会员卡账户 ID,对应会员卡账户/储值卡维度主键。样本为 0,当前没有“退到会员卡”的记录。 | 来源: member_card_id | 角色: 外键'; + + + CREATE TABLE IF NOT EXISTS dwd_refund_Ex ( + refund_id BIGINT, + tenant_name VARCHAR(64), + pay_sn BIGINT, + refund_amount NUMERIC(18,2), + round_amount NUMERIC(18,2), + balance_frozen_amount NUMERIC(18,2), + card_frozen_amount NUMERIC(18,2), + pay_status INTEGER, + action_type INTEGER, + is_revoke INTEGER, + is_delete INTEGER, + check_status INTEGER, + online_pay_channel INTEGER, + online_pay_type INTEGER, + pay_terminal INTEGER, + pay_config_id INTEGER, + cashier_point_id INTEGER, + operator_id BIGINT, + channel_payer_id VARCHAR(128), + channel_pay_no VARCHAR(128), + PRIMARY KEY (refund_id) + ); + COMMENT ON COLUMN dwd_refund_Ex.refund_id IS '退款流水主键。每条退款记录唯一 ID(雪花ID风格长整型)。 | 来源: id | 角色: 主键'; + COMMENT ON COLUMN dwd_refund_Ex.tenant_name IS '租户名称,例如“朗朗桌球”。与租户维度中的名称冗余。 | 来源: tenantName'; + COMMENT ON COLUMN dwd_refund_Ex.pay_sn IS '支付流水内部序号。退款记录中样本全部为 0,未看到实际使用场景,含义未说明。 | 来源: pay_sn'; + COMMENT ON COLUMN dwd_refund_Ex.refund_amount IS '本次退款金额(正数)设计字段,样本为 0.00,实际使用 pay_amount。 | 来源: refund_amount'; + COMMENT ON COLUMN dwd_refund_Ex.round_amount IS '退款过程中的舍入/抹零金额。 | 来源: round_amount'; + COMMENT ON COLUMN dwd_refund_Ex.balance_frozen_amount IS '与会员余额相关的冻结金额,样本为 0。 | 来源: balance_frozen_amount'; + COMMENT ON COLUMN dwd_refund_Ex.card_frozen_amount IS '与某张会员卡余额相关的冻结金额,样本为 0。 | 来源: card_frozen_amount'; + COMMENT ON COLUMN dwd_refund_Ex.pay_status IS '退款状态枚举。样本中全部为 2(成功/已完成)。 | 来源: pay_status'; + COMMENT ON COLUMN dwd_refund_Ex.action_type IS '资金动作类型枚举。样本全部为 2(退款)。 | 来源: action_type'; + COMMENT ON COLUMN dwd_refund_Ex.is_revoke IS '是否为撤销型退款:0=正常退款;1=撤销原支付。 | 来源: is_revoke'; + COMMENT ON COLUMN dwd_refund_Ex.is_delete IS '逻辑删除标志:0=未删除;1=已逻辑删除。 | 来源: is_delete'; + COMMENT ON COLUMN dwd_refund_Ex.check_status IS '审核状态。样本全部为 1(已审核/通过)。 | 来源: check_status'; + COMMENT ON COLUMN dwd_refund_Ex.online_pay_channel IS '线上支付渠道枚举。样本中全部为 0(线下或默认)。 | 来源: online_pay_channel'; + COMMENT ON COLUMN dwd_refund_Ex.online_pay_type IS '在线退款类型。样本全部为 0(原路退回)。 | 来源: online_pay_type'; + COMMENT ON COLUMN dwd_refund_Ex.pay_terminal IS '退款终端类型。样本全部为 1(前台收银端)。 | 来源: pay_terminal'; + COMMENT ON COLUMN dwd_refund_Ex.pay_config_id IS '支付配置 ID,例如某个具体支付通道(微信商户号、银联通道等)的配置主键。样本全部为 0。 | 来源: pay_config_id | 角色: 外键'; + COMMENT ON COLUMN dwd_refund_Ex.cashier_point_id IS '收银点编号,例如前台1、前台2、自助机等。样本全部为 0。 | 来源: cashier_point_id'; + COMMENT ON COLUMN dwd_refund_Ex.operator_id IS '执行退款操作的操作员 ID。样本全部为 0。 | 来源: operator_id | 角色: 外键'; + COMMENT ON COLUMN dwd_refund_Ex.channel_payer_id IS '支付渠道侧的付款人标识,如 openid、银行卡号掩码等。样本全部为空字符串。 | 来源: channel_payer_id'; + COMMENT ON COLUMN dwd_refund_Ex.channel_pay_no IS '第三方支付平台交易号(如微信支付单号、支付宝交易号等)。当前样本全部为空。 | 来源: channel_pay_no'; diff --git a/tmp/rewrite_schema_dwd_doc_comments.py b/tmp/rewrite_schema_dwd_doc_comments.py new file mode 100644 index 0000000..8802ecf --- /dev/null +++ b/tmp/rewrite_schema_dwd_doc_comments.py @@ -0,0 +1,634 @@ +# -*- coding: utf-8 -*- +import ast +import json +import re +from collections import deque +from pathlib import Path + +ROOT = Path(r"C:\dev\LLTQ\ETL\feiqiu-ETL") +SQL_PATH = ROOT / "etl_billiards" / "database" / "schema_dwd_doc.sql" +DOC_DIR = Path(r"C:\dev\LLTQ\export\test-json-doc") +DWD_TASK_PATH = ROOT / "etl_billiards" / "tasks" / "dwd_load_task.py" + +SCD_COLS = {"scd2_start_time", "scd2_end_time", "scd2_is_current", "scd2_version"} + +SITEPROFILE_FIELD_PURPOSE = { + "id": "门店 ID,用于门店维度关联。", + "org_id": "组织/机构 ID,用于组织维度归属。", + "shop_name": "门店名称,用于展示与查询。", + "site_label": "门店标签(如 A/B 店),用于展示与分组。", + "full_address": "门店详细地址,用于展示与地理信息。", + "address": "门店地址简称/快照,用于展示。", + "longitude": "经度,用于定位与地图展示。", + "latitude": "纬度,用于定位与地图展示。", + "tenant_site_region_id": "租户下门店区域 ID,用于区域维度分析。", + "business_tel": "门店电话,用于联系信息展示。", + "site_type": "门店类型枚举,用于门店分类。", + "shop_status": "门店状态枚举,用于营业状态标识。", + "tenant_id": "租户/品牌 ID,用于商户维度过滤与关联。", + "auto_light": "是否启用自动灯控配置,用于门店设备策略。", + "attendance_enabled": "是否启用考勤功能,用于门店考勤配置。", + "attendance_distance": "考勤允许距离(米),用于考勤打卡限制。", + "prod_env": "环境标识(生产/测试),用于区分配置环境。", + "light_status": "灯控状态/开关,用于灯控设备管理。", + "light_type": "灯控类型,用于设备类型区分。", + "light_token": "灯控控制令牌,用于对接灯控服务。", + "avatar": "门店头像/图片 URL,用于展示。", + "wifi_name": "门店 WiFi 名称,用于展示与引导。", + "wifi_password": "门店 WiFi 密码,用于展示与引导。", + "customer_service_qrcode": "客服二维码 URL,用于引导联系。", + "customer_service_wechat": "客服微信号,用于引导联系。", + "fixed_pay_qrCode": "固定收款码(二维码)URL,用于收款引导。", + "create_time": "门店创建时间(快照字段)。", + "update_time": "门店更新时间(快照字段)。", +} + + +def _escape_sql(s: str) -> str: + return (s or "").replace("'", "''") + + +def _first_sentence(text: str, max_len: int = 140) -> str: + s = re.sub(r"\s+", " ", (text or "").strip()) + if not s: + return "" + parts = re.split(r"[。;;]\s*", s) + s = parts[0].strip() if parts else s + if len(s) > max_len: + s = s[: max_len - 1] + "…" + return s + + +def normalize_key(s: str) -> str: + return re.sub(r"[_\-\s]", "", (s or "").lower()) + + +def snake_to_lower_camel(s: str) -> str: + parts = re.split(r"[_\-\s]+", s) + if not parts: + return s + first = parts[0].lower() + rest = "".join(p[:1].upper() + p[1:] for p in parts[1:] if p) + return first + rest + + +def snake_to_upper_camel(s: str) -> str: + parts = re.split(r"[_\-\s]+", s) + return "".join(p[:1].upper() + p[1:] for p in parts if p) + + +def find_key_in_record(record: dict, token: str) -> str | None: + if not isinstance(record, dict): + return None + if token in record: + return token + norm_to_key = {normalize_key(k): k for k in record.keys()} + + candidates = [ + token, + token.lower(), + token.upper(), + snake_to_lower_camel(token), + snake_to_upper_camel(token), + ] + + # 常见变体:siteProfile/siteprofile + if normalize_key(token) == "siteprofile": + candidates.extend(["siteProfile", "siteprofile"]) + + for c in candidates: + nk = normalize_key(c) + if nk in norm_to_key: + return norm_to_key[nk] + + return None + + +def parse_dwd_task_mappings(path: Path): + mod = ast.parse(path.read_text(encoding="utf-8")) + table_map = None + fact_mappings = None + + for node in mod.body: + if isinstance(node, ast.ClassDef) and node.name == "DwdLoadTask": + for stmt in node.body: + if isinstance(stmt, ast.Assign) and len(stmt.targets) == 1 and isinstance(stmt.targets[0], ast.Name): + name = stmt.targets[0].id + if name == "TABLE_MAP": + table_map = ast.literal_eval(stmt.value) + elif name == "FACT_MAPPINGS": + fact_mappings = ast.literal_eval(stmt.value) + if isinstance(stmt, ast.AnnAssign) and isinstance(stmt.target, ast.Name): + name = stmt.target.id + if name == "TABLE_MAP": + table_map = ast.literal_eval(stmt.value) + elif name == "FACT_MAPPINGS": + fact_mappings = ast.literal_eval(stmt.value) + + if not isinstance(table_map, dict) or not isinstance(fact_mappings, dict): + raise RuntimeError("Failed to parse TABLE_MAP/FACT_MAPPINGS from dwd_load_task.py") + + return table_map, fact_mappings + + +def parse_columns_from_ddl(create_sql: str): + start = create_sql.find("(") + end = create_sql.rfind(")") + body = create_sql[start + 1 : end] + + cols = [] + for line in body.splitlines(): + s = line.strip().rstrip(",") + if not s: + continue + if s.upper().startswith("PRIMARY KEY"): + continue + if s.upper().startswith("CONSTRAINT "): + continue + m = re.match(r"^([A-Za-z_][A-Za-z0-9_]*)\s+", s) + if not m: + continue + name = m.group(1) + if name.upper() in {"PRIMARY", "UNIQUE", "FOREIGN", "CHECK"}: + continue + cols.append(name.lower()) + return cols + + +def _find_best_record_list(data, required_norm_keys: set[str]): + best = None + best_score = -1.0 + best_path: list[str] = [] + + q = deque([(data, 0, [])]) + visited = 0 + + while q and visited < 25000: + node, depth, path = q.popleft() + visited += 1 + if depth > 10: + continue + + if isinstance(node, list): + if node and all(isinstance(x, dict) for x in node[:3]): + scores = [] + for x in node[:5]: + keys_norm = {normalize_key(k) for k in x.keys()} + scores.append(len(keys_norm & required_norm_keys)) + score = sum(scores) / max(1, len(scores)) + if score > best_score: + best_score = score + best = node + best_path = path + for x in node[:10]: + q.append((x, depth + 1, path)) + else: + for x in node[:120]: + q.append((x, depth + 1, path)) + elif isinstance(node, dict): + for k, v in list(node.items())[:160]: + q.append((v, depth + 1, path + [str(k)])) + + node_str = ".".join(best_path) if best_path else "$" + return best or [], node_str + + +def _format_example(value, max_len: int = 120) -> str: + if value is None: + return "NULL" + if isinstance(value, bool): + return "true" if value else "false" + if isinstance(value, (int, float)): + return str(value) + if isinstance(value, str): + s = value.strip() + if len(s) > max_len: + s = s[: max_len - 1] + "…" + return s + if isinstance(value, dict): + keys = list(value)[:6] + mini = {k: value.get(k) for k in keys} + rendered = json.dumps(mini, ensure_ascii=False) + if len(value) > len(keys): + rendered = rendered[:-1] + ", …}" + if len(rendered) > max_len: + rendered = rendered[: max_len - 1] + "…" + return rendered + if isinstance(value, list): + if not value: + return "[]" + rendered = json.dumps(value[0], ensure_ascii=False) + if len(value) > 1: + rendered = f"[{rendered}, …] (len={len(value)})" + else: + rendered = f"[{rendered}]" + if len(rendered) > max_len: + rendered = rendered[: max_len - 1] + "…" + return rendered + s = str(value) + if len(s) > max_len: + s = s[: max_len - 1] + "…" + return s + + +def _infer_purpose(table: str, col: str, json_path: str | None) -> str: + lcol = col.lower() + + if lcol in SCD_COLS: + if lcol == "scd2_start_time": + return "SCD2 开始时间(版本生效起点),用于维度慢变追踪。" + if lcol == "scd2_end_time": + return "SCD2 结束时间(默认 9999-12-31 表示当前版本),用于维度慢变追踪。" + if lcol == "scd2_is_current": + return "SCD2 当前版本标记(1=当前,0=历史),用于筛选最新维度记录。" + if lcol == "scd2_version": + return "SCD2 版本号(自增),用于与时间段一起避免版本重叠。" + + if json_path and json_path.startswith("siteProfile."): + sf = json_path.split(".", 1)[1] + return SITEPROFILE_FIELD_PURPOSE.get(sf, "门店快照字段,用于门店维度补充信息。") + + if lcol.endswith("_id"): + return "标识类 ID 字段,用于关联/定位相关实体。" + if lcol.endswith("_time") or lcol.endswith("time") or lcol.endswith("_date"): + return "时间/日期字段,用于记录业务时间与统计口径对齐。" + if any(k in lcol for k in ["amount", "money", "fee", "price", "deduct", "cost", "balance"]): + return "金额字段,用于计费/结算/核算等金额计算。" + if any(k in lcol for k in ["count", "num", "number", "seconds", "qty", "quantity"]): + return "数量/时长字段,用于统计与计量。" + if lcol.endswith("_name") or lcol.endswith("name"): + return "名称字段,用于展示与辅助识别。" + if lcol.endswith("_status") or lcol == "status": + return "状态枚举字段,用于标识业务状态。" + if lcol.startswith("is_") or lcol.startswith("can_"): + return "布尔/开关字段,用于表示是否/可用性等业务开关。" + + # 表级兜底 + if table.startswith("dim_"): + return "维度字段,用于补充维度属性。" + return "明细字段,用于记录事实取值。" + + +def _parse_json_extract(expr: str): + # e.g. siteprofile->>'org_id' + m = re.match(r"^([A-Za-z_][A-Za-z0-9_]*)\s*->>\s*'([^']+)'\s*$", expr) + if not m: + return None + base = m.group(1) + field = m.group(2) + if normalize_key(base) == "siteprofile": + base = "siteProfile" + return base, field + + +def build_table_comment(table: str, source_ods: str | None, source_json_base: str | None) -> str: + table_l = table.lower() + if table_l.startswith("dim_"): + kind = "DWD 维度表" + else: + kind = "DWD 明细事实表" + + extra = "扩展字段表" if table_l.endswith("_ex") else "" + + if source_ods and source_json_base: + src = ( + f"ODS 来源表:{source_ods}(对应 JSON:{source_json_base}.json;分析:{source_json_base}-Analysis.md)。" + f"装载/清洗逻辑参考:etl_billiards/tasks/dwd_load_task.py(DwdLoadTask)。" + ) + else: + src = "来源:由 ODS 清洗装载生成(详见 DWD 装载任务)。" + + return f"{kind}{('(' + extra + ')') if extra else ''}:{table_l}。{src}" + + +def get_source_info(table_l: str, table_map: dict) -> tuple[str | None, str | None]: + key = f"billiards_dwd.{table_l}" + source_ods = table_map.get(key) + if not source_ods: + return None, None + json_base = source_ods.split(".")[-1] + return source_ods, json_base + + +def build_column_mappings(table_l: str, cols: list[str], fact_mappings: dict) -> dict[str, tuple[str | None, str | None]]: + # return col -> (json_path, src_expr) + mapping_list = fact_mappings.get(f"billiards_dwd.{table_l}") or [] + explicit = {dwd_col.lower(): src_expr for dwd_col, src_expr, _cast in mapping_list} + casts = {dwd_col.lower(): cast for dwd_col, _src_expr, cast in mapping_list} + + out: dict[str, tuple[str | None, str | None]] = {} + + for c in cols: + if c in SCD_COLS: + out[c] = (None, None) + continue + + src_expr = explicit.get(c, c) + cast = casts.get(c) + + json_path = None + parsed = _parse_json_extract(src_expr) + if parsed: + base, field = parsed + json_path = f"{base}.{field}" + else: + # derived: pay_date uses pay_time + cast date + if cast == "date": + json_path = src_expr + else: + json_path = src_expr + + out[c] = (json_path, src_expr) + + return out + + +def load_json_records(json_base: str, required_norm_keys: set[str]): + json_path = DOC_DIR / f"{json_base}.json" + data = json.loads(json_path.read_text(encoding="utf-8")) + return _find_best_record_list(data, required_norm_keys) + + +def pick_example_from_record(record: dict, json_path: str | None): + if not json_path: + return None + if json_path.startswith("siteProfile."): + base_key = find_key_in_record(record, "siteProfile") + base = record.get(base_key) if base_key else None + if isinstance(base, dict): + field = json_path.split(".", 1)[1] + return base.get(field) + return None + + # plain key + key = find_key_in_record(record, json_path) + if key: + return record.get(key) + # fallback: try match by normalized name + nk = normalize_key(json_path) + for k in record.keys(): + if normalize_key(k) == nk: + return record.get(k) + return None + + +def resolve_json_field_display(records: list, json_path: str | None, cast: str | None = None) -> str: + if not json_path: + return "无" + if json_path.startswith("siteProfile."): + return json_path + + actual_key = None + for r in records[:80]: + if not isinstance(r, dict): + continue + k = find_key_in_record(r, json_path) + if k: + actual_key = k + break + + base = actual_key or json_path + if cast == "date": + return f"{base}(派生:DATE({base}))" + if cast == "boolean": + return f"{base}(派生:BOOLEAN({base}))" + if cast in {"numeric", "timestamptz"}: + return f"{base}(派生:CAST({base} AS {cast}))" + return base + + +def resolve_ods_source_field(records: list, src_expr: str | None, cast: str | None = None) -> str: + if not src_expr: + return "无" + + parsed = _parse_json_extract(src_expr) + if parsed: + base, field = parsed + # 统一大小写展示 + if normalize_key(base) == "siteprofile": + base = "siteProfile" + return f"{base}.{field}" + + # 直接字段:尽量输出 JSON 实际键名(大小写/驼峰) + actual = None + for r in records[:80]: + if not isinstance(r, dict): + continue + k = find_key_in_record(r, src_expr) + if k: + actual = k + break + + base = actual or src_expr + if cast == "date": + return f"{base}(派生:DATE({base}))" + if cast == "boolean": + return f"{base}(派生:BOOLEAN({base}))" + if cast in {"numeric", "timestamptz"}: + return f"{base}(派生:CAST({base} AS {cast}))" + return base + + +def resolve_json_field_triplet( + json_file: str | None, + record_node: str | None, + records: list, + json_path: str | None, + cast: str | None = None, +) -> str: + if not json_file: + json_file = "无" + node = record_node or "$" + + if not json_path: + return f"{json_file} - 无 - 无" + + if json_path.startswith("siteProfile."): + base_key = None + field_key = None + for r in records[:80]: + if not isinstance(r, dict): + continue + base_key = find_key_in_record(r, "siteProfile") + if base_key: + base = r.get(base_key) + if isinstance(base, dict): + raw_field = json_path.split(".", 1)[1] + # 尽量匹配子字段大小写 + if raw_field in base: + field_key = raw_field + else: + nk = normalize_key(raw_field) + for k in base.keys(): + if normalize_key(k) == nk: + field_key = k + break + break + base_key = base_key or "siteProfile" + field_key = field_key or json_path.split(".", 1)[1] + node = f"{node}.{base_key}" if node else base_key + field = field_key + else: + actual = None + for r in records[:80]: + if isinstance(r, dict): + actual = find_key_in_record(r, json_path) + if actual: + break + field = actual or json_path + + if cast == "date": + field = f"{field}(派生:DATE({field}))" + elif cast == "boolean": + field = f"{field}(派生:BOOLEAN({field}))" + elif cast in {"numeric", "timestamptz"}: + field = f"{field}(派生:CAST({field} AS {cast}))" + + return f"{json_file} - {node} - {field}" + + +def main(): + table_map, fact_mappings = parse_dwd_task_mappings(DWD_TASK_PATH) + + raw = SQL_PATH.read_text(encoding="utf-8", errors="replace") + newline = "\r\n" if "\r\n" in raw else "\n" + + # strip all sql comments and existing COMMENT ON statements, incl. DO-block comment exec lines + kept_lines = [] + for line in raw.splitlines(True): + if line.lstrip().startswith("--"): + continue + if re.match(r"^\s*COMMENT ON\s+(TABLE|COLUMN)\s+", line, re.I): + continue + if "COMMENT ON COLUMN" in line or "COMMENT ON TABLE" in line: + # remove legacy execute format lines too + continue + kept_lines.append(line) + clean = "".join(kept_lines) + + create_re = re.compile( + r"(^\s*CREATE TABLE IF NOT EXISTS\s+(?P[A-Za-z0-9_]+)\s*\([\s\S]*?\)\s*;)", + re.M, + ) + + out_parts = [] + last = 0 + count_tables = 0 + + for m in create_re.finditer(clean): + stmt = m.group(1) + table = m.group("table").lower() + + out_parts.append(clean[last : m.end()]) + + cols = parse_columns_from_ddl(stmt) + + source_ods, json_base = get_source_info(table, table_map) + + # derive required keys + required_norm = set() + col_map = build_column_mappings(table, cols, fact_mappings) + # cast map for json field display + cast_map = { + dwd_col.lower(): cast + for dwd_col, _src_expr, cast in (fact_mappings.get(f"billiards_dwd.{table}") or []) + } + src_expr_map = { + dwd_col.lower(): src_expr + for dwd_col, src_expr, _cast in (fact_mappings.get(f"billiards_dwd.{table}") or []) + } + for c, (jp, _src) in col_map.items(): + if not jp: + continue + if jp.startswith("siteProfile."): + required_norm.add(normalize_key("siteProfile")) + else: + required_norm.add(normalize_key(jp)) + + records = [] + record_node = "$" + if json_base and (DOC_DIR / f"{json_base}.json").exists(): + try: + records, record_node = load_json_records(json_base, required_norm) + except Exception: + records = [] + record_node = "$" + + table_comment = build_table_comment(table, source_ods, json_base) + comment_lines = [f"COMMENT ON TABLE billiards_dwd.{table} IS '{_escape_sql(table_comment)}';"] + + for c in cols: + jp, _src = col_map.get(c, (None, None)) + + if c in SCD_COLS: + if c == "scd2_start_time": + ex = "2025-11-10T00:00:00+08:00" + elif c == "scd2_end_time": + ex = "9999-12-31T00:00:00+00:00" + elif c == "scd2_is_current": + ex = "1" + else: + ex = "1" + json_field = "无 - DWD慢变元数据 - 无" + ods_src = "无(DWD慢变元数据)" + else: + # pick example from first records + ex_val = None + for r in records[:80]: + v = pick_example_from_record(r, jp) + if v not in (None, ""): + ex_val = v + break + ex = _format_example(ex_val) + json_field = resolve_json_field_triplet( + f"{json_base}.json" if json_base else None, + record_node, + records, + jp, + cast_map.get(c), + ) + src_expr = src_expr_map.get(c, jp) + ods_src = resolve_ods_source_field(records, src_expr, cast_map.get(c)) + + purpose = _first_sentence(_infer_purpose(table, c, jp), 140) + func = purpose + if "用于" not in func: + func = "用于" + func.rstrip("。") + + if source_ods: + ods_table_only = source_ods.split(".")[-1] + ods_src_display = f"{ods_table_only} - {ods_src}" + else: + ods_src_display = f"无 - {ods_src}" + + comment = ( + f"【说明】{purpose}。" + f" 【示例】{ex}({func})。" + f" 【ODS来源】{ods_src_display}。" + f" 【JSON字段】{json_field}。" + ) + comment_lines.append( + f"COMMENT ON COLUMN billiards_dwd.{table}.{c} IS '{_escape_sql(comment)}';" + ) + + out_parts.append(newline + newline + (newline.join(comment_lines)) + newline + newline) + last = m.end() + count_tables += 1 + + out_parts.append(clean[last:]) + result = "".join(out_parts) + + # collapse extra blank lines + result = re.sub(r"(?:\r?\n){4,}", newline * 3, result) + + backup = SQL_PATH.with_suffix(SQL_PATH.suffix + ".bak") + if not backup.exists(): + backup.write_text(raw, encoding="utf-8") + + SQL_PATH.write_text(result, encoding="utf-8") + + print(f"Rewrote comments for {count_tables} tables: {SQL_PATH}") + + +if __name__ == "__main__": + main() diff --git a/tmp/rewrite_schema_ods_doc_comments.py b/tmp/rewrite_schema_ods_doc_comments.py new file mode 100644 index 0000000..399ff5e --- /dev/null +++ b/tmp/rewrite_schema_ods_doc_comments.py @@ -0,0 +1,560 @@ +# -*- coding: utf-8 -*- +import json +import re +from pathlib import Path +from collections import defaultdict + +SQL_PATH = Path(r"C:\dev\LLTQ\ETL\feiqiu-ETL\etl_billiards\database\schema_ODS_doc.sql") +DOC_DIR = Path(r"C:\dev\LLTQ\export\test-json-doc") + +TABLE_CN = { + "member_profiles": "会员档案/会员账户信息", + "member_balance_changes": "会员余额变更流水", + "member_stored_value_cards": "会员储值/卡券账户列表", + "recharge_settlements": "充值结算记录", + "settlement_records": "结账/结算记录", + "assistant_cancellation_records": "助教作废/取消记录", + "assistant_accounts_master": "助教档案主数据", + "assistant_service_records": "助教服务流水", + "site_tables_master": "门店桌台主数据", + "table_fee_discount_records": "台费折扣记录", + "table_fee_transactions": "台费流水", + "goods_stock_movements": "商品库存变动流水", + "stock_goods_category_tree": "商品分类树", + "goods_stock_summary": "商品库存汇总", + "payment_transactions": "支付流水", + "refund_transactions": "退款流水", + "platform_coupon_redemption_records": "平台券核销/使用记录", + "tenant_goods_master": "租户商品主数据", + "group_buy_packages": "团购套餐主数据", + "group_buy_redemption_records": "团购核销记录", + "settlement_ticket_details": "结算小票明细", + "store_goods_master": "门店商品主数据", + "store_goods_sales_records": "门店商品销售流水", +} + +COMMON_FIELD_PURPOSE = { + "tenant_id": "租户/品牌 ID,用于商户维度过滤与关联。", + "site_id": "门店 ID,用于门店维度过滤与关联。", + "register_site_id": "会员注册门店 ID,用于归属门店维度关联。", + "site_name": "门店名称快照,用于直接展示。", + "id": "本表主键 ID,用于唯一标识一条记录。", + "system_member_id": "系统级会员 ID(跨门店/跨卡种统一到‘人’的维度)。", + "order_trade_no": "订单交易号,用于串联同一订单下的各类消费明细。", + "order_settle_id": "订单结算/结账主键,用于关联结算记录与小票明细。", + "order_pay_id": "关联支付流水的主键 ID,用于追溯支付明细。", + "point": "积分余额,用于记录会员积分取值。", + "growth_value": "成长值/成长积分,用于会员成长与等级评估。", + "referrer_member_id": "推荐人会员 ID,用于记录会员推荐/拉新关系。", + "create_time": "记录创建时间(业务侧产生时间)。", + "status": "状态枚举,用于标识记录当前业务状态。", + "user_status": "用户状态枚举,用于标识会员账户/用户可用状态。", + "is_delete": "逻辑删除标记(0=否,1=是)。", + "payload": "完整原始 JSON 记录快照,用于回溯与二次解析。", + "source_file": "ETL 元数据:原始导出文件名,用于数据追溯。", + "source_endpoint": "ETL 元数据:采集来源(接口/文件路径),用于数据追溯。", + "fetched_at": "ETL 元数据:采集/入库时间戳,用于口径对齐与增量处理。", +} + +ETL_META_FIELDS = {"source_file", "source_endpoint", "fetched_at"} + + +def _first_sentence(text: str, max_len: int = 120) -> str: + s = re.sub(r"\s+", " ", (text or "").strip()) + if not s: + return "" + parts = re.split(r"[。;;]\s*", s) + s = parts[0].strip() if parts else s + if len(s) > max_len: + s = s[: max_len - 1] + "…" + return s + + +def _escape_sql(s: str) -> str: + return (s or "").replace("'", "''") + +def normalize_key(s: str) -> str: + return re.sub(r"[_\-\s]", "", (s or "").lower()) + + +def snake_to_lower_camel(s: str) -> str: + parts = re.split(r"[_\-\s]+", s) + if not parts: + return s + first = parts[0].lower() + rest = "".join(p[:1].upper() + p[1:] for p in parts[1:] if p) + return first + rest + + +def snake_to_upper_camel(s: str) -> str: + parts = re.split(r"[_\-\s]+", s) + return "".join(p[:1].upper() + p[1:] for p in parts if p) + + +def find_key_in_record(record: dict, token: str) -> str | None: + if not isinstance(record, dict) or not token: + return None + if token in record: + return token + norm_to_key = {normalize_key(k): k for k in record.keys()} + candidates = [ + token, + token.lower(), + token.upper(), + snake_to_lower_camel(token), + snake_to_upper_camel(token), + ] + for c in candidates: + nk = normalize_key(c) + if nk in norm_to_key: + return norm_to_key[nk] + return None + + +def _infer_purpose(_table: str, col: str) -> str: + if col in COMMON_FIELD_PURPOSE: + return COMMON_FIELD_PURPOSE[col] + + lower = col.lower() + if lower.endswith("_id"): + return "标识类 ID 字段,用于关联/定位相关实体。" + if lower.endswith("_time") or lower.endswith("time"): + return "时间字段,用于记录业务时间点/发生时间。" + if any(k in lower for k in ["amount", "money", "fee", "price", "deduct", "cost"]): + return "金额字段,用于计费/结算/分摊等金额计算。" + if any(k in lower for k in ["count", "num", "number", "seconds", "qty"]): + return "数量/时长字段,用于统计与计量。" + if lower.endswith("_name") or lower.endswith("name"): + return "名称字段,用于展示与辅助识别。" + if lower.endswith("_code") or lower.endswith("code"): + return "编码/枚举字段,用于表示类型、等级或业务枚举。" + if lower.startswith("is_") or lower.startswith("able_") or lower.startswith("can_"): + return "布尔/开关字段,用于表示权限、可用性或状态开关。" + + return "来自 JSON 导出的原始字段,用于保留业务取值。" + + +def _format_example(value, max_len: int = 120) -> str: + if value is None: + return "NULL" + if isinstance(value, bool): + return "true" if value else "false" + if isinstance(value, (int, float)): + return str(value) + if isinstance(value, str): + s = value.strip() + if len(s) > max_len: + s = s[: max_len - 1] + "…" + return s + if isinstance(value, list): + if not value: + return "[]" + sample = value[0] + rendered = json.dumps(sample, ensure_ascii=False) + if len(value) > 1: + rendered = f"[{rendered}, …] (len={len(value)})" + else: + rendered = f"[{rendered}]" + if len(rendered) > max_len: + rendered = rendered[: max_len - 1] + "…" + return rendered + if isinstance(value, dict): + keys = list(value)[:6] + mini = {k: value.get(k) for k in keys} + rendered = json.dumps(mini, ensure_ascii=False) + if len(value) > len(keys): + rendered = rendered[:-1] + ", …}" + if len(rendered) > max_len: + rendered = rendered[: max_len - 1] + "…" + return rendered + rendered = str(value) + if len(rendered) > max_len: + rendered = rendered[: max_len - 1] + "…" + return rendered + + +def _find_best_record_list(data, columns): + cols = set(columns) + best = None + best_score = -1 + + queue = [(data, 0)] + visited = 0 + while queue and visited < 20000: + node, depth = queue.pop(0) + visited += 1 + if depth > 8: + continue + if isinstance(node, list): + if node and all(isinstance(x, dict) for x in node[:3]): + scores = [] + for x in node[:5]: + scores.append(len(set(x.keys()) & cols)) + score = sum(scores) / max(1, len(scores)) + if score > best_score: + best_score = score + best = node + for x in node[:10]: + queue.append((x, depth + 1)) + else: + for x in node[:50]: + queue.append((x, depth + 1)) + elif isinstance(node, dict): + for v in list(node.values())[:80]: + queue.append((v, depth + 1)) + + return best + + +def _find_best_record_list_and_node(data, columns): + cols = set(columns) + best = None + best_score = -1 + best_path = [] + + queue = [(data, 0, [])] + visited = 0 + while queue and visited < 25000: + node, depth, path = queue.pop(0) + visited += 1 + if depth > 10: + continue + + if isinstance(node, list): + if node and all(isinstance(x, dict) for x in node[:3]): + scores = [] + for x in node[:5]: + scores.append(len(set(x.keys()) & cols)) + score = sum(scores) / max(1, len(scores)) + if score > best_score: + best_score = score + best = node + best_path = path + for x in node[:10]: + queue.append((x, depth + 1, path)) + else: + for x in node[:80]: + queue.append((x, depth + 1, path)) + elif isinstance(node, dict): + for k, v in list(node.items())[:120]: + queue.append((v, depth + 1, path + [str(k)])) + + node_str = ".".join(best_path) if best_path else "$" + return best or [], node_str + + +def _choose_examples(records, columns): + examples = {} + if not records: + return examples + for col in columns: + val = None + for r in records[:120]: + if isinstance(r, dict) and col in r and r[col] not in (None, ""): + val = r[col] + break + examples[col] = val + return examples + + +def _extract_header_fields(line: str, columns_set): + s = line.strip() + if not s: + return [] + + # 支持 1. id / 1.1 siteProfile / 8. tenant_id + m = re.match(r"^\d+(?:\.\d+)*[\.)]?\s+(.+)$", s) + if m: + s = m.group(1).strip() + + parts = re.split(r"\s*[/、,,]\s*", s) + fields = [p.strip() for p in parts if p.strip() in columns_set] + + if not fields and s in columns_set: + fields = [s] + + if fields and len(line) <= 120: + return fields + return [] + + +def _parse_field_purpose_from_block(block_lines): + lines = [l.rstrip() for l in block_lines] + + def pick_after_label(labels): + for i, l in enumerate(lines): + for lab in labels: + if lab in l: + after = l.split(lab, 1)[1].strip() + if after: + return after + buf = [] + j = i + 1 + while j < len(lines) and not lines[j].strip(): + j += 1 + for k in range(j, len(lines)): + if not lines[k].strip(): + break + if re.match(r"^[\w\u4e00-\u9fff]+[::]", lines[k].strip()): + break + buf.append(lines[k].strip()) + if buf: + return " ".join(buf) + return "" + + # 兼容「含义(结合其它文件):」「含义(推测):」等变体 + picked = pick_after_label(["含义:", "含义:"]) + if not picked: + for i, l in enumerate(lines): + s = l.strip() + m = re.match(r"^含义.*[::]\s*(.*)$", s) + if m: + after = m.group(1).strip() + if after: + picked = after + else: + buf = [] + j = i + 1 + while j < len(lines) and not lines[j].strip(): + j += 1 + for k in range(j, len(lines)): + if not lines[k].strip(): + break + if re.match(r"^[\w\u4e00-\u9fff]+[::]", lines[k].strip()): + break + buf.append(lines[k].strip()) + if buf: + picked = " ".join(buf) + break + + if not picked: + picked = pick_after_label(["作用:", "作用:"]) + if not picked: + for i, l in enumerate(lines): + s = l.strip() + m = re.match(r"^作用.*[::]\s*(.*)$", s) + if m: + after = m.group(1).strip() + if after: + picked = after + break + + if not picked: + # 兜底:尽量避开“类型:/唯一值个数:”这类描述 + for l in lines: + s = l.strip() + if not s: + continue + if any( + s.startswith(prefix) + for prefix in [ + "类型:", + "非空:", + "唯一值", + "观测", + "特征", + "统计", + "分布", + "说明:", + "关联:", + "结构关系", + "和其它表", + "重复记录", + "全部为", + ] + ): + continue + picked = s + break + + return _first_sentence(picked, 160) + + +def _is_poor_purpose(purpose: str) -> bool: + s = (purpose or "").strip() + if not s: + return True + if s.endswith(":") or s.endswith(":"): + return True + if s.startswith("全部为"): + return True + if s.startswith("含义") and (":" in s or ":" in s) and len(s) <= 12: + return True + return False + + +def parse_analysis(analysis_text: str, columns): + columns_set = set(columns) + blocks = defaultdict(list) + + current_fields = [] + buf = [] + + for raw in analysis_text.splitlines(): + fields = _extract_header_fields(raw, columns_set) + if fields: + if current_fields and buf: + for f in current_fields: + blocks[f].extend(buf) + current_fields = fields + buf = [] + else: + if current_fields: + buf.append(raw) + + if current_fields and buf: + for f in current_fields: + blocks[f].extend(buf) + + purposes = {} + for col in columns: + if col in blocks and blocks[col]: + p = _parse_field_purpose_from_block(blocks[col]) + if p: + purposes[col] = p + return purposes + + +def parse_columns_from_ddl(create_sql: str): + start = create_sql.find("(") + end = create_sql.rfind(")") + body = create_sql[start + 1 : end] + + cols = [] + for line in body.splitlines(): + s = line.strip().rstrip(",") + if not s: + continue + if s.startswith(")"): + continue + if s.upper().startswith("CONSTRAINT "): + continue + m = re.match(r"^([A-Za-z_][A-Za-z0-9_]*)\s+", s) + if not m: + continue + name = m.group(1) + if name.upper() in {"PRIMARY", "UNIQUE", "FOREIGN", "CHECK"}: + continue + cols.append(name) + return cols + + +def build_comment_block(table: str, columns, analysis_text: str, records): + # records_node: 由外部确定,避免这里重复遍历 JSON + records, records_node = records + purposes = parse_analysis(analysis_text, columns) + examples = _choose_examples(records, columns) + + table_cn = TABLE_CN.get(table, table) + + table_comment = ( + f"ODS 原始明细表:{table_cn}。" + f"来源:C:/dev/LLTQ/export/test-json-doc/{table}.json;分析:{table}-Analysis.md。" + f"字段以导出原样为主;ETL 补充 source_file/source_endpoint/fetched_at,并保留 payload 为原始记录快照。" + ) + + lines = [] + lines.append(f"COMMENT ON TABLE billiards_ods.{table} IS '{_escape_sql(table_comment)}';") + + for col in columns: + json_file = f"{table}.json" + if col in ETL_META_FIELDS: + json_field = f"{json_file} - ETL元数据 - 无" + elif col == "payload": + json_field = f"{json_file} - {records_node} - $" + else: + actual = None + for r in records[:50]: + if isinstance(r, dict): + actual = find_key_in_record(r, col) + if actual: + break + field_name = actual or col + json_field = f"{json_file} - {records_node} - {field_name}" + + purpose = purposes.get(col) or _infer_purpose(table, col) + purpose = _first_sentence(purpose, 140) or _infer_purpose(table, col) + if _is_poor_purpose(purpose): + purpose = COMMON_FIELD_PURPOSE.get(col) or _infer_purpose(table, col) + + if col in ETL_META_FIELDS: + if col == "source_file": + ex = f"{table}.json" + elif col == "source_endpoint": + ex = f"C:/dev/LLTQ/export/test-json-doc/{table}.json" + else: + ex = "2025-11-10T00:00:00+08:00" + elif col == "payload": + ex = "{...}" + else: + ex = _format_example(examples.get(col)) + + func = purpose + if "用于" not in func: + func = "用于" + func.rstrip("。") + + # ODS来源:表名-字段名(ODS自身字段);ETL补充字段标记 + if col in ETL_META_FIELDS: + ods_src = f"{table} - {col}(ETL补充)" + else: + ods_src = f"{table} - {col}" + + comment = ( + f"【说明】{purpose}。" + f" 【示例】{ex}({func})。" + f" 【ODS来源】{ods_src}。" + f" 【JSON字段】{json_field}。" + ) + lines.append( + f"COMMENT ON COLUMN billiards_ods.{table}.{col} IS '{_escape_sql(comment)}';" + ) + + return "\n".join(lines) + + +text = SQL_PATH.read_text(encoding="utf-8") +newline = "\r\n" if "\r\n" in text else "\n" + +kept = [] +for raw_line in text.splitlines(True): + stripped = raw_line.lstrip() + if stripped.startswith("--"): + continue + if re.match(r"^\s*COMMENT ON\s+(TABLE|COLUMN)\s+", raw_line): + continue + kept.append(raw_line) + +clean = "".join(kept) + +create_re = re.compile( + r"(CREATE TABLE IF NOT EXISTS\s+billiards_ods\.(?P
[A-Za-z0-9_]+)\s*\([\s\S]*?\)\s*;)" , + re.M, +) + +out_parts = [] +last = 0 +count = 0 +for m in create_re.finditer(clean): + out_parts.append(clean[last : m.end()]) + table = m.group("table") + create_sql = m.group(1) + + cols = parse_columns_from_ddl(create_sql) + analysis_text = (DOC_DIR / f"{table}-Analysis.md").read_text(encoding="utf-8") + data = json.loads((DOC_DIR / f"{table}.json").read_text(encoding="utf-8")) + record_list, record_node = _find_best_record_list_and_node(data, cols) + + out_parts.append(newline + newline + build_comment_block(table, cols, analysis_text, (record_list, record_node)) + newline + newline) + last = m.end() + count += 1 + +out_parts.append(clean[last:]) + +result = "".join(out_parts) +result = re.sub(r"(?:\r?\n){4,}", newline * 3, result) + +backup = SQL_PATH.with_suffix(SQL_PATH.suffix + ".rewrite2.bak") +backup.write_text(text, encoding="utf-8") +SQL_PATH.write_text(result, encoding="utf-8") + +print(f"Rewrote comments for {count} tables. Backup: {backup}") diff --git a/etl_billiards/database/schema_ODS_doc copy.sql b/tmp/schema_ODS_doc copy.sql similarity index 100% rename from etl_billiards/database/schema_ODS_doc copy.sql rename to tmp/schema_ODS_doc copy.sql diff --git a/tmp/schema_ODS_doc.sql b/tmp/schema_ODS_doc.sql new file mode 100644 index 0000000..514f931 --- /dev/null +++ b/tmp/schema_ODS_doc.sql @@ -0,0 +1,1907 @@ +-- 文件:schema_ODS_doc.sql +-- 说明:ODS 层 DDL,表名与示例 JSON 前缀对应,用于本地回放/调试。 +-- 编码:UTF-8 +SET client_encoding TO "UTF8"; + +DROP SCHEMA IF EXISTS billiards_ods CASCADE; +CREATE SCHEMA IF NOT EXISTS billiards_ods; + +CREATE TABLE IF NOT EXISTS billiards_ods.member_profiles ( + tenant_id BIGINT, + register_site_id BIGINT, + site_name TEXT, + id BIGINT PRIMARY KEY, + system_member_id BIGINT, + member_card_grade_code BIGINT, + member_card_grade_name TEXT, + mobile TEXT, + nickname TEXT, + point NUMERIC(18,2), + growth_value NUMERIC(18,2), + referrer_member_id BIGINT, + status INT, + user_status INT, + create_time TIMESTAMP, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.member_profiles IS '对应JSON字段:member_profiles.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 member_profiles-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_profiles.tenant_id IS '对应JSON字段:tenant_id,说明::,示例值及对应分析:租户/品牌 ID。'; +COMMENT ON COLUMN billiards_ods.member_profiles.register_site_id IS '对应JSON字段:register_site_id,说明::,示例值及对应分析:会员的注册门店 ID。'; +COMMENT ON COLUMN billiards_ods.member_profiles.site_name IS '对应JSON字段:site_name,说明::,示例值及对应分析:注册门店名称,属于冗余字段,用于直接展示。'; +COMMENT ON COLUMN billiards_ods.member_profiles.id IS '对应JSON字段:id,说明::,示例值及对应分析:这是“租户内会员账户”的主键 ID。'; +COMMENT ON COLUMN billiards_ods.member_profiles.system_member_id IS '对应JSON字段:system_member_id,说明:(结合其它文件):,示例值及对应分析:这是“系统级会员 ID”,在全平台唯一,用来把一个会员在不同门店/不同卡类型下的账户统一到一个“人”的维度上。'; +COMMENT ON COLUMN billiards_ods.member_profiles.member_card_grade_code IS '对应JSON字段:member_card_grade_code,说明:类型:int,示例值及对应分析:唯一值个数:4'; +COMMENT ON COLUMN billiards_ods.member_profiles.member_card_grade_name IS '对应JSON字段:member_card_grade_name,说明::,示例值及对应分析:这是“会员卡种类/等级”的定义字段。'; +COMMENT ON COLUMN billiards_ods.member_profiles.mobile IS '对应JSON字段:mobile,说明::,示例值及对应分析:会员绑定的手机号码。'; +COMMENT ON COLUMN billiards_ods.member_profiles.nickname IS '对应JSON字段:nickname,说明::,示例值及对应分析:会员在当前租户下的显示名称(可以是姓名,也可以是昵称)。'; +COMMENT ON COLUMN billiards_ods.member_profiles.point IS '对应JSON字段:point,说明::,示例值及对应分析:当前积分余额(这条会员账户的积分值)。'; +COMMENT ON COLUMN billiards_ods.member_profiles.growth_value IS '对应JSON字段:growth_value,说明:(按常见会员体系设计):,示例值及对应分析:成长值 / 经验值,用于会员等级晋升的累计指标。'; +COMMENT ON COLUMN billiards_ods.member_profiles.referrer_member_id IS '对应JSON字段:referrer_member_id,说明:(按命名推断):,示例值及对应分析:推荐人会员 ID,用于记录该会员是由哪位老会员推荐。'; +COMMENT ON COLUMN billiards_ods.member_profiles.status IS '对应JSON字段:status,说明:(按命名推断):,示例值及对应分析:帐户状态(偏“卡状态/档案状态”)。'; +COMMENT ON COLUMN billiards_ods.member_profiles.user_status IS '对应JSON字段:user_status,说明:(结合行业惯例):,示例值及对应分析:用户账号状态(偏“用户逻辑”层面的状态)。'; +COMMENT ON COLUMN billiards_ods.member_profiles.create_time IS '对应JSON字段:create_time,说明::,示例值及对应分析:会员账户的创建时间(即这条档案/这张卡在系统中被创建的时间)。'; +COMMENT ON COLUMN billiards_ods.member_profiles.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.member_profiles.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.member_profiles.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.member_profiles.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; + +CREATE TABLE IF NOT EXISTS billiards_ods.member_balance_changes ( + tenant_id BIGINT, + site_id BIGINT, + register_site_id BIGINT, + registerSiteName TEXT, + paySiteName TEXT, + id BIGINT PRIMARY KEY, + tenant_member_id BIGINT, + tenant_member_card_id BIGINT, + system_member_id BIGINT, + memberName TEXT, + memberMobile TEXT, + card_type_id BIGINT, + memberCardTypeName TEXT, + account_data NUMERIC(18,2), + before NUMERIC(18,2), + after NUMERIC(18,2), + refund_amount NUMERIC(18,2), + from_type INT, + payment_method INT, + relate_id BIGINT, + remark TEXT, + operator_id BIGINT, + operator_name TEXT, + is_delete INT, + create_time TIMESTAMP, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.member_balance_changes IS '对应JSON字段:member_balance_changes.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 member_balance_changes-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.tenant_id IS '对应JSON字段:tenant_id,说明::租户/商户 ID,本数据中是固定值(同一品牌/商户)。,示例值及对应分析:?? member_balance_changes-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.site_id IS '对应JSON字段:site_id,说明:表示本次余额变动的发生门店,绝大多数也在“朗朗桌球”,少数特殊业务(活动抵用券结算)显示为 site_id=0、paySiteName 为空。,示例值及对应分析:?? member_balance_changes-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.register_site_id IS '对应JSON字段:register_site_id,说明:已在前文说明:办卡门店的 ID 与名称,所有记录一致,说明所有卡均在“朗朗桌球”注册。,示例值及对应分析:?? member_balance_changes-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.registerSiteName IS '对应JSON字段:registerSiteName,说明:已在前文说明:办卡门店的 ID 与名称,所有记录一致,说明所有卡均在“朗朗桌球”注册。,示例值及对应分析:?? member_balance_changes-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.paySiteName IS '对应JSON字段:paySiteName,说明:表示本次余额变动的发生门店,绝大多数也在“朗朗桌球”,少数特殊业务(活动抵用券结算)显示为 site_id=0、paySiteName 为空。,示例值及对应分析:?? member_balance_changes-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.id IS '对应JSON字段:id,说明::余额变更记录的主键 ID,唯一标识这一条“账户余额变化事件”。,示例值及对应分析:?? member_balance_changes-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.tenant_member_id IS '对应JSON字段:tenant_member_id,说明::商户维度的会员 ID(租户内会员主键)。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.tenant_member_card_id IS '对应JSON字段:tenant_member_card_id,说明::会员卡账户 ID,在租户内唯一标识某张卡。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.system_member_id IS '对应JSON字段:system_member_id,说明::系统级(全局)会员 ID。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.memberName IS '对应JSON字段:memberName,说明::会员姓名或称呼(非昵称字段)。,示例值及对应分析:说明:例如“陈腾鑫”“胡先生”“江先生”等,多为中文姓名或带“先生”称呼。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.memberMobile IS '对应JSON字段:memberMobile,说明::会员手机号。,示例值及对应分析:说明:字符型存储,完整手机号,用来识别会员与联系客户。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.card_type_id IS '对应JSON字段:card_type_id,说明::卡种类型 ID,用于区分不同卡种。,示例值及对应分析:?? member_balance_changes-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.memberCardTypeName IS '对应JSON字段:memberCardTypeName,说明::卡种名称,与 card_type_id 一一对应,是一个 卡种枚举名称。,示例值及对应分析:?? member_balance_changes-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.account_data IS '对应JSON字段:account_data,说明::本次变动的金额(元),正数表示增加,负数表示减少。,示例值及对应分析:特点:'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.before IS '对应JSON字段:before,说明::本次变动前,该卡账户的余额(元)。,示例值及对应分析:说明:'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.after IS '对应JSON字段:after,说明::本次变动后,该卡账户的余额(元)。,示例值及对应分析:重要关系:'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.refund_amount IS '对应JSON字段:refund_amount,说明:(推测):与退款业务相关的金额字段,但在当前这份导出中实际未使用:,示例值及对应分析:可能用于标记“其中有多少金额是以‘退款’形式回流的”,或区分“退回余额”和“原路退回”两种模式。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.from_type IS '对应JSON字段:from_type,说明:(根据金额符号与 remark 综合推断):,示例值及对应分析:1:日常消费扣款'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.payment_method IS '对应JSON字段:payment_method,说明:类型:int,枚举,示例值及对应分析:值分布:'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.relate_id IS '对应JSON字段:relate_id,说明:(推测):关联业务记录的 ID:,示例值及对应分析:例如某次充值记录的 ID、某张订单/结算单 ID、某次活动抵用券核销记录 ID 等。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.remark IS '对应JSON字段:remark,说明::,示例值及对应分析:当为空时,说明这条变动没有额外备注说明。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.operator_id IS '对应JSON字段:operator_id,说明::执行此次余额变更操作的员工 ID。,示例值及对应分析:?? member_balance_changes-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.operator_name IS '对应JSON字段:operator_name,说明::操作员姓名(带职位前缀),是对 operator_id 的可读冗余字段。,示例值及对应分析:9. 状态字段与标志'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.is_delete IS '对应JSON字段:is_delete,说明::逻辑删除标记:,示例值及对应分析:0:正常;'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.create_time IS '对应JSON字段:create_time,说明::本条余额变更记录的创建时间,通常接近交易发生时间。,示例值及对应分析:说明:可与订单、支付记录的时间做对齐,构造时序链路(但你现在不要求做时序分析,这里只说明结构)。'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.member_balance_changes.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; + +CREATE TABLE IF NOT EXISTS billiards_ods.member_stored_value_cards ( + tenant_id BIGINT, + tenant_member_id BIGINT, + system_member_id BIGINT, + register_site_id BIGINT, + site_name TEXT, + id BIGINT PRIMARY KEY, + member_card_grade_code BIGINT, + member_card_grade_code_name TEXT, + member_card_type_name TEXT, + member_name TEXT, + member_mobile TEXT, + card_type_id BIGINT, + card_no TEXT, + card_physics_type TEXT, + balance NUMERIC(18,2), + denomination NUMERIC(18,2), + table_discount NUMERIC(10,4), + goods_discount NUMERIC(10,4), + assistant_discount NUMERIC(10,4), + assistant_reward_discount NUMERIC(10,4), + table_service_discount NUMERIC(10,4), + assistant_service_discount NUMERIC(10,4), + coupon_discount NUMERIC(10,4), + goods_service_discount NUMERIC(10,4), + assistant_discount_sub_switch INT, + table_discount_sub_switch INT, + goods_discount_sub_switch INT, + assistant_reward_discount_sub_switch INT, + table_service_deduct_radio NUMERIC(10,4), + assistant_service_deduct_radio NUMERIC(10,4), + goods_service_deduct_radio NUMERIC(10,4), + assistant_deduct_radio NUMERIC(10,4), + table_deduct_radio NUMERIC(10,4), + goods_deduct_radio NUMERIC(10,4), + coupon_deduct_radio NUMERIC(10,4), + assistant_reward_deduct_radio NUMERIC(10,4), + tableCardDeduct NUMERIC(18,2), + tableServiceCardDeduct NUMERIC(18,2), + goodsCarDeduct NUMERIC(18,2), + goodsServiceCardDeduct NUMERIC(18,2), + assistantCardDeduct NUMERIC(18,2), + assistantServiceCardDeduct NUMERIC(18,2), + assistantRewardCardDeduct NUMERIC(18,2), + cardSettleDeduct NUMERIC(18,2), + couponCardDeduct NUMERIC(18,2), + deliveryFeeDeduct NUMERIC(18,2), + use_scene INT, + able_cross_site INT, + able_site_transfer INT, + is_allow_give INT, + is_allow_order_deduct INT, + is_delete INT, + bind_password TEXT, + goods_discount_range_type INT, + goodsCategoryId BIGINT, + tableAreaId BIGINT, + effect_site_id BIGINT, + start_time TIMESTAMP, + end_time TIMESTAMP, + disable_start_time TIMESTAMP, + disable_end_time TIMESTAMP, + last_consume_time TIMESTAMP, + create_time TIMESTAMP, + status INT, + sort INT, + tenantAvatar TEXT, + tenantName TEXT, + pdAssisnatLevel TEXT, + cxAssisnatLevel TEXT, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.member_stored_value_cards IS '对应JSON字段:member_stored_value_cards.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 member_stored_value_cards-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenant_id IS '对应JSON字段:tenant_id,说明::租户/品牌 ID,与其他 JSON 中 tenant_id 一致。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenant_member_id IS '对应JSON字段:tenant_member_id,说明::当前商户(品牌/租户)中会员的主键 ID。,示例值及对应分析:枚举特征:'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.system_member_id IS '对应JSON字段:system_member_id,说明::系统级会员 ID(跨门店统一主键)。,示例值及对应分析:枚举特征:'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.register_site_id IS '对应JSON字段:register_site_id,说明::卡首次办理的门店 ID。,示例值及对应分析:对应门店的 site_id;本数据中所有卡都是在同一家门店开卡。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.site_name IS '对应JSON字段:site_name,说明::卡归属门店名称(视图中的展示字段)。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.id IS '对应JSON字段:id,说明:?????? member_stored_value_cards-Analysis.md,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_card_grade_code IS '对应JSON字段:member_card_grade_code,说明::卡等级/卡类代码,和下面两个名称字段一一对应。,示例值及对应分析:枚举:'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_card_grade_code_name IS '对应JSON字段:member_card_grade_code_name,说明::卡等级/卡类名称。,示例值及对应分析:枚举值(与上面 code 一一对应):'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_card_type_name IS '对应JSON字段:member_card_type_name,说明::卡类型名称,实际与 member_card_grade_code_name 一致。,示例值及对应分析:枚举值同上。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_name IS '对应JSON字段:member_name,说明::持卡会员姓名快照。,示例值及对应分析:特点:存在 null(20 张卡没有绑定会员名字)。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.member_mobile IS '对应JSON字段:member_mobile,说明::持卡会员手机号快照。,示例值及对应分析:特点:与 member_name 对应,多数有值,少量为 null。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.card_type_id IS '对应JSON字段:card_type_id,说明::卡种 ID(定义“这是哪一种卡”)。,示例值及对应分析:枚举(按数据分布):'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.card_no IS '对应JSON字段:card_no,说明:(推测):实体卡物理卡号/条码号。当前这批卡看起来全部为“无物理卡号”(可能是全部虚拟卡或卡号隐藏不导出)。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.card_physics_type IS '对应JSON字段:card_physics_type,说明::物理卡类型。,示例值及对应分析:当前数据:全部为 1。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.balance IS '对应JSON字段:balance,说明::当前卡内余额(主要针对储值卡、部分券卡)。,示例值及对应分析:特征:'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.denomination IS '对应JSON字段:denomination,说明:(推测):面额/初始储值额度。,示例值及对应分析:本页数据未填充此字段;可能在分类型卡(如次卡/券)中才有意义,或者另有配置表。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_discount IS '对应JSON字段:table_discount,说明::,示例值及对应分析:采用“几折”的记法:10=不打折,9=九折,8=八折。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_discount IS '对应JSON字段:goods_discount,说明::,示例值及对应分析:采用“几折”的记法:10=不打折,9=九折,8=八折。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_discount IS '对应JSON字段:assistant_discount,说明::,示例值及对应分析:采用“几折”的记法:10=不打折,9=九折,8=八折。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_reward_discount IS '对应JSON字段:assistant_reward_discount,说明::,示例值及对应分析:采用“几折”的记法:10=不打折,9=九折,8=八折。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_service_discount IS '对应JSON字段:table_service_discount,说明::,示例值及对应分析:采用“几折”的记法:10=不打折,9=九折,8=八折。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_service_discount IS '对应JSON字段:assistant_service_discount,说明::,示例值及对应分析:采用“几折”的记法:10=不打折,9=九折,8=八折。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.coupon_discount IS '对应JSON字段:coupon_discount,说明:?????? member_stored_value_cards-Analysis.md,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_service_discount IS '对应JSON字段:goods_service_discount,说明::,示例值及对应分析:采用“几折”的记法:10=不打折,9=九折,8=八折。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_discount_sub_switch IS '对应JSON字段:assistant_discount_sub_switch,说明:(推测):“折扣是否叠加/替换其他折扣”的开关。,示例值及对应分析:可能枚举:'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_discount_sub_switch IS '对应JSON字段:table_discount_sub_switch,说明:(推测):“折扣是否叠加/替换其他折扣”的开关。,示例值及对应分析:可能枚举:'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_discount_sub_switch IS '对应JSON字段:goods_discount_sub_switch,说明:(推测):“折扣是否叠加/替换其他折扣”的开关。,示例值及对应分析:可能枚举:'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_reward_discount_sub_switch IS '对应JSON字段:assistant_reward_discount_sub_switch,说明:(推测):“折扣是否叠加/替换其他折扣”的开关。,示例值及对应分析:可能枚举:'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_service_deduct_radio IS '对应JSON字段:table_service_deduct_radio,说明::允许从该卡余额中抵扣的比例(百分比)。,示例值及对应分析:100.0 表示允许 100% 用卡余额支付该类消费;'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_service_deduct_radio IS '对应JSON字段:assistant_service_deduct_radio,说明::允许从该卡余额中抵扣的比例(百分比)。,示例值及对应分析:100.0 表示允许 100% 用卡余额支付该类消费;'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_service_deduct_radio IS '对应JSON字段:goods_service_deduct_radio,说明::允许从该卡余额中抵扣的比例(百分比)。,示例值及对应分析:100.0 表示允许 100% 用卡余额支付该类消费;'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_deduct_radio IS '对应JSON字段:assistant_deduct_radio,说明::允许从该卡余额中抵扣的比例(百分比)。,示例值及对应分析:100.0 表示允许 100% 用卡余额支付该类消费;'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.table_deduct_radio IS '对应JSON字段:table_deduct_radio,说明::允许从该卡余额中抵扣的比例(百分比)。,示例值及对应分析:100.0 表示允许 100% 用卡余额支付该类消费;'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_deduct_radio IS '对应JSON字段:goods_deduct_radio,说明::允许从该卡余额中抵扣的比例(百分比)。,示例值及对应分析:100.0 表示允许 100% 用卡余额支付该类消费;'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.coupon_deduct_radio IS '对应JSON字段:coupon_deduct_radio,说明::允许从该卡余额中抵扣的比例(百分比)。,示例值及对应分析:100.0 表示允许 100% 用卡余额支付该类消费;'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistant_reward_deduct_radio IS '对应JSON字段:assistant_reward_deduct_radio,说明:?????? member_stored_value_cards-Analysis.md,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tableCardDeduct IS '对应JSON字段:tableCardDeduct,说明::针对台费/商品/助教三类消费的扣卡金额配置(类似“每小时从卡里扣 xx 元”或“每次抵扣 xx 元”的规则)。,示例值及对应分析:当前:所有为 0,说明在卡定义层面并没有指定固定扣卡金额,而是按照一般储值逻辑消费。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tableServiceCardDeduct IS '对应JSON字段:tableServiceCardDeduct,说明::如果系统中区分“储值金、服务金、奖励金”等子账户,这三个字段对应“服务金”子账户的扣款配置。,示例值及对应分析:当前未启用。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goodsCarDeduct IS '对应JSON字段:goodsCarDeduct,说明::针对台费/商品/助教三类消费的扣卡金额配置(类似“每小时从卡里扣 xx 元”或“每次抵扣 xx 元”的规则)。,示例值及对应分析:当前:所有为 0,说明在卡定义层面并没有指定固定扣卡金额,而是按照一般储值逻辑消费。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goodsServiceCardDeduct IS '对应JSON字段:goodsServiceCardDeduct,说明::如果系统中区分“储值金、服务金、奖励金”等子账户,这三个字段对应“服务金”子账户的扣款配置。,示例值及对应分析:当前未启用。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistantCardDeduct IS '对应JSON字段:assistantCardDeduct,说明::针对台费/商品/助教三类消费的扣卡金额配置(类似“每小时从卡里扣 xx 元”或“每次抵扣 xx 元”的规则)。,示例值及对应分析:当前:所有为 0,说明在卡定义层面并没有指定固定扣卡金额,而是按照一般储值逻辑消费。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistantServiceCardDeduct IS '对应JSON字段:assistantServiceCardDeduct,说明::如果系统中区分“储值金、服务金、奖励金”等子账户,这三个字段对应“服务金”子账户的扣款配置。,示例值及对应分析:当前未启用。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.assistantRewardCardDeduct IS '对应JSON字段:assistantRewardCardDeduct,说明::助教奖励金方向扣款的配置。,示例值及对应分析:当前未启用。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.cardSettleDeduct IS '对应JSON字段:cardSettleDeduct,说明:已在扣卡规则部分说明,当前为 0。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.couponCardDeduct IS '对应JSON字段:couponCardDeduct,说明::与卡绑定的“券额度扣除配置”。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.deliveryFeeDeduct IS '对应JSON字段:deliveryFeeDeduct,说明::配送费可否/多少从卡中抵扣,目前无业务发生。,示例值及对应分析:综合来看:本门店的卡片在“规则配置层”预留了大量细粒度控制字段,但目前实际使用只体现在“balance”和“可用范围”,折扣和具体扣卡规则基本都未启用(全部保持默认值 10 折、100%比例、0 扣款),真正扣款逻辑在交易流水中体现。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.use_scene IS '对应JSON字段:use_scene,说明::卡使用场景说明(比如“仅店内使用”“仅团建”等),本门店尚未使用此字段。,示例值及对应分析:2. 会员信息与关联字段'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.able_cross_site IS '对应JSON字段:able_cross_site,说明::是否允许跨店使用。,示例值及对应分析:1:可以跨门店使用;'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.able_site_transfer IS '对应JSON字段:able_site_transfer,说明:?????? member_stored_value_cards-Analysis.md,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.is_allow_give IS '对应JSON字段:is_allow_give,说明::是否允许转赠/转让给其他会员。,示例值及对应分析:0:不允许;'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.is_allow_order_deduct IS '对应JSON字段:is_allow_order_deduct,说明::是否允许在“订单层面统一扣款”。,示例值及对应分析:0:不允许(仅按项目扣卡);'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.is_delete IS '对应JSON字段:is_delete,说明::逻辑删除标志。,示例值及对应分析:0:未删除;'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.bind_password IS '对应JSON字段:bind_password,说明::卡绑定密码,用于消费或查询验证(目前未启用)。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goods_discount_range_type IS '对应JSON字段:goods_discount_range_type,说明:?????? member_stored_value_cards-Analysis.md,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.goodsCategoryId IS '对应JSON字段:goodsCategoryId,说明:已上文说明:均为扩展限定维度,当前全部为空列表。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tableAreaId IS '对应JSON字段:tableAreaId,说明:已上文说明:均为扩展限定维度,当前全部为空列表。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.effect_site_id IS '对应JSON字段:effect_site_id,说明:(推测):卡片限定生效门店 ID。,示例值及对应分析:为 0 时,配合 able_cross_site=1,可解释为“所有门店可用”。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.start_time IS '对应JSON字段:start_time,说明::卡片生效开始时间(有效期起始)。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.end_time IS '对应JSON字段:end_time,说明::卡片有效期结束时间。,示例值及对应分析:start_time / end_time 组合就是卡的有效期。不同卡种有效期配置不同,如储值卡长效、月卡固定一个月等。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.disable_start_time IS '对应JSON字段:disable_start_time,说明::停用时间段(比如临时冻结卡的起止时间)。,示例值及对应分析:当前未启用,所有卡都是“未进入停用窗口”。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.disable_end_time IS '对应JSON字段:disable_end_time,说明::停用时间段(比如临时冻结卡的起止时间)。,示例值及对应分析:当前未启用,所有卡都是“未进入停用窗口”。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.last_consume_time IS '对应JSON字段:last_consume_time,说明::最近一次消费时间。,示例值及对应分析:特点:'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.create_time IS '对应JSON字段:create_time,说明::卡片创建时间(开卡时间)。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.status IS '对应JSON字段:status,说明:(推测):,示例值及对应分析:1:正常可用;'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.sort IS '对应JSON字段:sort,说明::在前端展示或某些列表中的排序权重。,示例值及对应分析:具体取值分布不重要,主要反映展示优先级。'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenantAvatar IS '对应JSON字段:tenantAvatar,说明::品牌头像 URL(未配置)。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.tenantName IS '对应JSON字段:tenantName,说明::租户/品牌名称(当前导出为空)。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.pdAssisnatLevel IS '对应JSON字段:pdAssisnatLevel,说明:已上文说明:均为扩展限定维度,当前全部为空列表。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.cxAssisnatLevel IS '对应JSON字段:cxAssisnatLevel,说明:已上文说明:均为扩展限定维度,当前全部为空列表。,示例值及对应分析:?? member_stored_value_cards-Analysis.md'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.member_stored_value_cards.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; + +CREATE TABLE IF NOT EXISTS billiards_ods.recharge_settlements ( + id BIGINT PRIMARY KEY, + tenantid BIGINT, + siteid BIGINT, + sitename TEXT, + balanceamount NUMERIC(18,2), + cardamount NUMERIC(18,2), + cashamount NUMERIC(18,2), + couponamount NUMERIC(18,2), + createtime TIMESTAMPTZ, + memberid BIGINT, + membername TEXT, + tenantmembercardid BIGINT, + membercardtypename TEXT, + memberphone TEXT, + tableid BIGINT, + consumemoney NUMERIC(18,2), + onlineamount NUMERIC(18,2), + operatorid BIGINT, + operatorname TEXT, + revokeorderid BIGINT, + revokeordername TEXT, + revoketime TIMESTAMPTZ, + payamount NUMERIC(18,2), + pointamount NUMERIC(18,2), + refundamount NUMERIC(18,2), + settlename TEXT, + settlerelateid BIGINT, + settlestatus INT, + settletype INT, + paytime TIMESTAMPTZ, + roundingamount NUMERIC(18,2), + paymentmethod INT, + adjustamount NUMERIC(18,2), + assistantcxmoney NUMERIC(18,2), + assistantpdmoney NUMERIC(18,2), + couponsaleamount NUMERIC(18,2), + memberdiscountamount NUMERIC(18,2), + tablechargemoney NUMERIC(18,2), + goodsmoney NUMERIC(18,2), + realgoodsmoney NUMERIC(18,2), + servicemoney NUMERIC(18,2), + prepaymoney NUMERIC(18,2), + salesmanname TEXT, + orderremark TEXT, + salesmanuserid BIGINT, + canberevoked BOOLEAN, + pointdiscountprice NUMERIC(18,2), + pointdiscountcost NUMERIC(18,2), + activitydiscount NUMERIC(18,2), + serialnumber BIGINT, + assistantmanualdiscount NUMERIC(18,2), + allcoupondiscount NUMERIC(18,2), + goodspromotionmoney NUMERIC(18,2), + assistantpromotionmoney NUMERIC(18,2), + isusecoupon BOOLEAN, + isusediscount BOOLEAN, + isactivity BOOLEAN, + isbindmember BOOLEAN, + isfirst INT, + rechargecardamount NUMERIC(18,2), + giftcardamount NUMERIC(18,2), + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.recharge_settlements IS '对应JSON字段:recharge_settlements.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.id IS '对应JSON字段:id,说明::本条充值结算记录的主键 ID(唯一标识一条充值/撤销记录)。,示例值及对应分析:唯一性:74 条记录全部不同。'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.tenantid IS '对应JSON字段:tenantid,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.siteid IS '对应JSON字段:siteid,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.sitename IS '对应JSON字段:sitename,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.balanceamount IS '对应JSON字段:balanceamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.cardamount IS '对应JSON字段:cardamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.cashamount IS '对应JSON字段:cashamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.couponamount IS '对应JSON字段:couponamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.createtime IS '对应JSON字段:createtime,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.memberid IS '对应JSON字段:memberid,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.membername IS '对应JSON字段:membername,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.tenantmembercardid IS '对应JSON字段:tenantmembercardid,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.membercardtypename IS '对应JSON字段:membercardtypename,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.memberphone IS '对应JSON字段:memberphone,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.tableid IS '对应JSON字段:tableid,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.consumemoney IS '对应JSON字段:consumemoney,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.onlineamount IS '对应JSON字段:onlineamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.operatorid IS '对应JSON字段:operatorid,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.operatorname IS '对应JSON字段:operatorname,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.revokeorderid IS '对应JSON字段:revokeorderid,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.revokeordername IS '对应JSON字段:revokeordername,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.revoketime IS '对应JSON字段:revoketime,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.payamount IS '对应JSON字段:payamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.pointamount IS '对应JSON字段:pointamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.refundamount IS '对应JSON字段:refundamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.settlename IS '对应JSON字段:settlename,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.settlerelateid IS '对应JSON字段:settlerelateid,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.settlestatus IS '对应JSON字段:settlestatus,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.settletype IS '对应JSON字段:settletype,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.paytime IS '对应JSON字段:paytime,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.roundingamount IS '对应JSON字段:roundingamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.paymentmethod IS '对应JSON字段:paymentmethod,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.adjustamount IS '对应JSON字段:adjustamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.assistantcxmoney IS '对应JSON字段:assistantcxmoney,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.assistantpdmoney IS '对应JSON字段:assistantpdmoney,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.couponsaleamount IS '对应JSON字段:couponsaleamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.memberdiscountamount IS '对应JSON字段:memberdiscountamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.tablechargemoney IS '对应JSON字段:tablechargemoney,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.goodsmoney IS '对应JSON字段:goodsmoney,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.realgoodsmoney IS '对应JSON字段:realgoodsmoney,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.servicemoney IS '对应JSON字段:servicemoney,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.prepaymoney IS '对应JSON字段:prepaymoney,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.salesmanname IS '对应JSON字段:salesmanname,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.orderremark IS '对应JSON字段:orderremark,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.salesmanuserid IS '对应JSON字段:salesmanuserid,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.canberevoked IS '对应JSON字段:canberevoked,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.pointdiscountprice IS '对应JSON字段:pointdiscountprice,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.pointdiscountcost IS '对应JSON字段:pointdiscountcost,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.activitydiscount IS '对应JSON字段:activitydiscount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.serialnumber IS '对应JSON字段:serialnumber,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.assistantmanualdiscount IS '对应JSON字段:assistantmanualdiscount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.allcoupondiscount IS '对应JSON字段:allcoupondiscount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.goodspromotionmoney IS '对应JSON字段:goodspromotionmoney,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.assistantpromotionmoney IS '对应JSON字段:assistantpromotionmoney,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.isusecoupon IS '对应JSON字段:isusecoupon,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.isusediscount IS '对应JSON字段:isusediscount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.isactivity IS '对应JSON字段:isactivity,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.isbindmember IS '对应JSON字段:isbindmember,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.isfirst IS '对应JSON字段:isfirst,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.rechargecardamount IS '对应JSON字段:rechargecardamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.giftcardamount IS '对应JSON字段:giftcardamount,说明:?????? recharge_settlements-Analysis.md,示例值及对应分析:?? recharge_settlements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.recharge_settlements.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; + +CREATE TABLE IF NOT EXISTS billiards_ods.settlement_records ( + id BIGINT PRIMARY KEY, + tenantid BIGINT, + siteid BIGINT, + sitename TEXT, + balanceamount NUMERIC(18,2), + cardamount NUMERIC(18,2), + cashamount NUMERIC(18,2), + couponamount NUMERIC(18,2), + createtime TIMESTAMPTZ, + memberid BIGINT, + membername TEXT, + tenantmembercardid BIGINT, + membercardtypename TEXT, + memberphone TEXT, + tableid BIGINT, + consumemoney NUMERIC(18,2), + onlineamount NUMERIC(18,2), + operatorid BIGINT, + operatorname TEXT, + revokeorderid BIGINT, + revokeordername TEXT, + revoketime TIMESTAMPTZ, + payamount NUMERIC(18,2), + pointamount NUMERIC(18,2), + refundamount NUMERIC(18,2), + settlename TEXT, + settlerelateid BIGINT, + settlestatus INT, + settletype INT, + paytime TIMESTAMPTZ, + roundingamount NUMERIC(18,2), + paymentmethod INT, + adjustamount NUMERIC(18,2), + assistantcxmoney NUMERIC(18,2), + assistantpdmoney NUMERIC(18,2), + couponsaleamount NUMERIC(18,2), + memberdiscountamount NUMERIC(18,2), + tablechargemoney NUMERIC(18,2), + goodsmoney NUMERIC(18,2), + realgoodsmoney NUMERIC(18,2), + servicemoney NUMERIC(18,2), + prepaymoney NUMERIC(18,2), + salesmanname TEXT, + orderremark TEXT, + salesmanuserid BIGINT, + canberevoked BOOLEAN, + pointdiscountprice NUMERIC(18,2), + pointdiscountcost NUMERIC(18,2), + activitydiscount NUMERIC(18,2), + serialnumber BIGINT, + assistantmanualdiscount NUMERIC(18,2), + allcoupondiscount NUMERIC(18,2), + goodspromotionmoney NUMERIC(18,2), + assistantpromotionmoney NUMERIC(18,2), + isusecoupon BOOLEAN, + isusediscount BOOLEAN, + isactivity BOOLEAN, + isbindmember BOOLEAN, + isfirst INT, + rechargecardamount NUMERIC(18,2), + giftcardamount NUMERIC(18,2), + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.settlement_records IS '对应JSON字段:settlement_records.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.id IS '对应JSON字段:id,说明::结账记录主键 ID(订单结算 ID)。,示例值及对应分析:结构关联:'; +COMMENT ON COLUMN billiards_ods.settlement_records.tenantid IS '对应JSON字段:tenantid,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.siteid IS '对应JSON字段:siteid,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.sitename IS '对应JSON字段:sitename,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.balanceamount IS '对应JSON字段:balanceamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.cardamount IS '对应JSON字段:cardamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.cashamount IS '对应JSON字段:cashamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.couponamount IS '对应JSON字段:couponamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.createtime IS '对应JSON字段:createtime,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.memberid IS '对应JSON字段:memberid,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.membername IS '对应JSON字段:membername,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.tenantmembercardid IS '对应JSON字段:tenantmembercardid,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.membercardtypename IS '对应JSON字段:membercardtypename,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.memberphone IS '对应JSON字段:memberphone,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.tableid IS '对应JSON字段:tableid,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.consumemoney IS '对应JSON字段:consumemoney,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.onlineamount IS '对应JSON字段:onlineamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.operatorid IS '对应JSON字段:operatorid,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.operatorname IS '对应JSON字段:operatorname,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.revokeorderid IS '对应JSON字段:revokeorderid,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.revokeordername IS '对应JSON字段:revokeordername,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.revoketime IS '对应JSON字段:revoketime,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.payamount IS '对应JSON字段:payamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.pointamount IS '对应JSON字段:pointamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.refundamount IS '对应JSON字段:refundamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.settlename IS '对应JSON字段:settlename,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.settlerelateid IS '对应JSON字段:settlerelateid,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.settlestatus IS '对应JSON字段:settlestatus,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.settletype IS '对应JSON字段:settletype,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.paytime IS '对应JSON字段:paytime,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.roundingamount IS '对应JSON字段:roundingamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.paymentmethod IS '对应JSON字段:paymentmethod,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.adjustamount IS '对应JSON字段:adjustamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.assistantcxmoney IS '对应JSON字段:assistantcxmoney,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.assistantpdmoney IS '对应JSON字段:assistantpdmoney,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.couponsaleamount IS '对应JSON字段:couponsaleamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.memberdiscountamount IS '对应JSON字段:memberdiscountamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.tablechargemoney IS '对应JSON字段:tablechargemoney,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.goodsmoney IS '对应JSON字段:goodsmoney,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.realgoodsmoney IS '对应JSON字段:realgoodsmoney,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.servicemoney IS '对应JSON字段:servicemoney,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.prepaymoney IS '对应JSON字段:prepaymoney,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.salesmanname IS '对应JSON字段:salesmanname,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.orderremark IS '对应JSON字段:orderremark,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.salesmanuserid IS '对应JSON字段:salesmanuserid,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.canberevoked IS '对应JSON字段:canberevoked,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.pointdiscountprice IS '对应JSON字段:pointdiscountprice,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.pointdiscountcost IS '对应JSON字段:pointdiscountcost,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.activitydiscount IS '对应JSON字段:activitydiscount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.serialnumber IS '对应JSON字段:serialnumber,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.assistantmanualdiscount IS '对应JSON字段:assistantmanualdiscount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.allcoupondiscount IS '对应JSON字段:allcoupondiscount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.goodspromotionmoney IS '对应JSON字段:goodspromotionmoney,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.assistantpromotionmoney IS '对应JSON字段:assistantpromotionmoney,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.isusecoupon IS '对应JSON字段:isusecoupon,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.isusediscount IS '对应JSON字段:isusediscount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.isactivity IS '对应JSON字段:isactivity,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.isbindmember IS '对应JSON字段:isbindmember,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.isfirst IS '对应JSON字段:isfirst,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.rechargecardamount IS '对应JSON字段:rechargecardamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.giftcardamount IS '对应JSON字段:giftcardamount,说明:?????? settlement_records-Analysis.md,示例值及对应分析:?? settlement_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_records.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.settlement_records.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.settlement_records.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.settlement_records.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; + +CREATE TABLE IF NOT EXISTS billiards_ods.assistant_cancellation_records ( + id BIGINT PRIMARY KEY, + siteId BIGINT, + siteProfile JSONB, + assistantName TEXT, + assistantAbolishAmount NUMERIC(18,2), + assistantOn INT, + pdChargeMinutes INT, + tableAreaId BIGINT, + tableArea TEXT, + tableId BIGINT, + tableName TEXT, + trashReason TEXT, + createTime TIMESTAMP, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.assistant_cancellation_records IS '对应JSON字段:assistant_cancellation_records.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 assistant_cancellation_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.id IS '对应JSON字段:id,说明:?????? assistant_cancellation_records-Analysis.md,示例值及对应分析:?? assistant_cancellation_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.siteId IS '对应JSON字段:siteId,说明:?????? assistant_cancellation_records-Analysis.md,示例值及对应分析:?? assistant_cancellation_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.siteProfile IS '对应JSON字段:siteProfile,说明:?????? assistant_cancellation_records-Analysis.md,示例值及对应分析:?? assistant_cancellation_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.assistantName IS '对应JSON字段:assistantName,说明:?????? assistant_cancellation_records-Analysis.md,示例值及对应分析:?? assistant_cancellation_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.assistantAbolishAmount IS '对应JSON字段:assistantAbolishAmount,说明:?????? assistant_cancellation_records-Analysis.md,示例值及对应分析:?? assistant_cancellation_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.assistantOn IS '对应JSON字段:assistantOn,说明:?????? assistant_cancellation_records-Analysis.md,示例值及对应分析:?? assistant_cancellation_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.pdChargeMinutes IS '对应JSON字段:pdChargeMinutes,说明:?????? assistant_cancellation_records-Analysis.md,示例值及对应分析:?? assistant_cancellation_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.tableAreaId IS '对应JSON字段:tableAreaId,说明:?????? assistant_cancellation_records-Analysis.md,示例值及对应分析:?? assistant_cancellation_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.tableArea IS '对应JSON字段:tableArea,说明:?????? assistant_cancellation_records-Analysis.md,示例值及对应分析:?? assistant_cancellation_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.tableId IS '对应JSON字段:tableId,说明:?????? assistant_cancellation_records-Analysis.md,示例值及对应分析:?? assistant_cancellation_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.tableName IS '对应JSON字段:tableName,说明:?????? assistant_cancellation_records-Analysis.md,示例值及对应分析:?? assistant_cancellation_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.trashReason IS '对应JSON字段:trashReason,说明:?????? assistant_cancellation_records-Analysis.md,示例值及对应分析:?? assistant_cancellation_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.createTime IS '对应JSON字段:createTime,说明:?????? assistant_cancellation_records-Analysis.md,示例值及对应分析:?? assistant_cancellation_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; + +CREATE TABLE IF NOT EXISTS billiards_ods.assistant_accounts_master ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + site_id BIGINT, + assistant_no TEXT, + nickname TEXT, + real_name TEXT, + mobile TEXT, + team_id BIGINT, + team_name TEXT, + user_id BIGINT, + level TEXT, + assistant_status INT, + work_status INT, + leave_status INT, + entry_time TIMESTAMP, + resign_time TIMESTAMP, + start_time TIMESTAMP, + end_time TIMESTAMP, + create_time TIMESTAMP, + update_time TIMESTAMP, + order_trade_no TEXT, + staff_id BIGINT, + staff_profile_id BIGINT, + system_role_id BIGINT, + avatar TEXT, + birth_date TIMESTAMP, + gender INT, + height NUMERIC(18,2), + weight NUMERIC(18,2), + job_num TEXT, + show_status INT, + show_sort INT, + sum_grade NUMERIC(18,2), + assistant_grade NUMERIC(18,2), + get_grade_times INT, + introduce TEXT, + video_introduction_url TEXT, + group_id BIGINT, + group_name TEXT, + shop_name TEXT, + charge_way INT, + entry_type INT, + allow_cx INT, + is_guaranteed INT, + salary_grant_enabled INT, + light_status INT, + online_status INT, + is_delete INT, + cx_unit_price NUMERIC(18,2), + pd_unit_price NUMERIC(18,2), + last_table_id BIGINT, + last_table_name TEXT, + person_org_id BIGINT, + serial_number BIGINT, + is_team_leader INT, + criticism_status INT, + last_update_name TEXT, + ding_talk_synced INT, + site_light_cfg_id BIGINT, + light_equipment_id TEXT, + entry_sign_status INT, + resign_sign_status INT, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.assistant_accounts_master IS '对应JSON字段:assistant_accounts_master.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 assistant_accounts_master-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.id IS '对应JSON字段:id,说明::助教账号主键 ID,在“助教流水.json”中对应 site_assistant_id。,示例值及对应分析:作用:所有与助教相关的事实表(助教流水、助教排班等)都会通过这个 ID 关联到该维表。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.tenant_id IS '对应JSON字段:tenant_id,说明::品牌/租户 ID,对应“非球科技”系统中该商户的唯一标识。,示例值及对应分析:用途:多门店时用来区分不同商户。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.site_id IS '对应JSON字段:site_id,说明::门店 ID,对应本次数据的这家球房(朗朗桌球)。,示例值及对应分析:关联:与其它 JSON(台费流水、库存、销售等)中的 site_id 一致。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.assistant_no IS '对应JSON字段:assistant_no,说明:(结合字段名推测):助教工号 / 编号,便于业务侧识别。,示例值及对应分析:关联:在“助教流水.json”中有 assistantNo,与此字段对应。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.nickname IS '对应JSON字段:nickname,说明::助教在前台展示的昵称,如“佳怡”“周周”“球球”等。,示例值及对应分析:用途:与真实姓名区分,用于顾客侧展示。如在助教流水中 nickname 就是这个值。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.real_name IS '对应JSON字段:real_name,说明::助教真实姓名,如“何海婷”“梁婷婷”等。,示例值及对应分析:关联:在“助教流水.json”的 assistantName 与此一致。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.mobile IS '对应JSON字段:mobile,说明::助教手机号,用于登录绑定、通知、钉钉同步等。,示例值及对应分析:?? assistant_accounts_master-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.team_id IS '对应JSON字段:team_id,说明::助教所属团队 ID。,示例值及对应分析:关联:在“助教流水.json”中 assistant_team_id 与此一致。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.team_name IS '对应JSON字段:team_name,说明::团队名称,展示用,和 team_id 一一对应。,示例值及对应分析:group_id'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.level IS '对应JSON字段:level,说明:(结合“助教流水中的 assistant_level / levelName 推测”):,示例值及对应分析:8:助教管理/管理员(和流水里的 "助教管理" 对应)'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.assistant_status IS '对应JSON字段:assistant_status,说明:(推测):账号启用状态:,示例值及对应分析:1:启用'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.work_status IS '对应JSON字段:work_status,说明::,示例值及对应分析:1:在岗/可排班'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.leave_status IS '对应JSON字段:leave_status,说明:类型:int,枚举。,示例值及对应分析:观测:'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.entry_time IS '对应JSON字段:entry_time,说明::入职时间。,示例值及对应分析:?? assistant_accounts_master-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.resign_time IS '对应JSON字段:resign_time,说明::离职日期;使用“远未来日期”作为“未离职”的占位。,示例值及对应分析:entry_type'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.start_time IS '对应JSON字段:start_time,说明:(推测):当前配置生效的开始日期。,示例值及对应分析:?? assistant_accounts_master-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.end_time IS '对应JSON字段:end_time,说明::当前配置生效的结束日期(例如一个周期性的排班/合同周期)。,示例值及对应分析:last_table_id'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.create_time IS '对应JSON字段:create_time,说明::账号创建时间。,示例值及对应分析:?? assistant_accounts_master-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.update_time IS '对应JSON字段:update_time,说明::账号最近一次被修改的时间(例如修改等级、昵称等)。,示例值及对应分析:?? assistant_accounts_master-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.order_trade_no IS '对应JSON字段:order_trade_no,说明:(推测):该助教最近一次关联的订单号,用于快速跳转或回溯最近服务行为。,示例值及对应分析:9. 灯控、钉钉等系统集成相关字段'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.staff_id IS '对应JSON字段:staff_id,说明:(推测):预留给“人事系统员工 ID”的字段,目前未接入或未启用。,示例值及对应分析:?? assistant_accounts_master-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.staff_profile_id IS '对应JSON字段:staff_profile_id,说明:(推测):人事档案 ID,与第三方 HR 系统或内部员工档案集成使用,当前未启用。,示例值及对应分析:4. 等级、计费与薪资配置字段'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.system_role_id IS '对应JSON字段:system_role_id,说明:?????? assistant_accounts_master-Analysis.md,示例值及对应分析:?? assistant_accounts_master-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.avatar IS '对应JSON字段:avatar,说明::助教头像地址。,示例值及对应分析:introduce'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.gender IS '对应JSON字段:gender,说明:(结合常见约定与值分布推测):,示例值及对应分析:0:未填/保密'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.show_status IS '对应JSON字段:show_status,说明:(推测):前台展示状态:,示例值及对应分析:1:在助教选择界面展示。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.show_sort IS '对应JSON字段:show_sort,说明::前台展示排序权重,值越小/越大对应不同的排序策略(当前看起来与 assistant_no 有一定对应关系)。,示例值及对应分析:online_status'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.sum_grade IS '对应JSON字段:sum_grade,说明::评分总和,用于计算平均分(assistant_grade = sum_grade / get_grade_times),当前为 0。,示例值及对应分析:?? assistant_accounts_master-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.get_grade_times IS '对应JSON字段:get_grade_times,说明::累计被评分次数。,示例值及对应分析:charge_way'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.video_introduction_url IS '对应JSON字段:video_introduction_url,说明::助教个人视频介绍地址。,示例值及对应分析:height'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.user_id IS '对应JSON字段:user_id,说明:账号对应的用户 ID/员工 ID,用于跨表关联。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.height IS '对应JSON字段:height,说明:身高(数值),可空。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.weight IS '对应JSON字段:weight,说明:体重(数值),可空。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.job_num IS '对应JSON字段:job_num,说明:工号/岗位编号,保留原始取值。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.assistant_grade IS '对应JSON字段:assistant_grade,说明:平均评分,通常 = sum_grade/get_grade_times。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.introduce IS '对应JSON字段:introduce,说明:个人简介/自我介绍,可空。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.group_id IS '对应JSON字段:group_id,说明:分组/自定义分组 ID。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.group_name IS '对应JSON字段:group_name,说明:分组名称。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.shop_name IS '对应JSON字段:shop_name,说明:门店名称冗余。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.charge_way IS '对应JSON字段:charge_way,说明:收费方式枚举,保留原值。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.entry_type IS '对应JSON字段:entry_type,说明:入职类型枚举,保留原值。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.allow_cx IS '对应JSON字段:allow_cx,说明:是否允许超休/冲销(0/1)。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.is_guaranteed IS '对应JSON字段:is_guaranteed,说明:是否保底(0/1)。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.salary_grant_enabled IS '对应JSON字段:salary_grant_enabled,说明:薪资发放/补贴开关,枚举。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.light_status IS '对应JSON字段:light_status,说明:灯控状态/模式,保留原值。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.online_status IS '对应JSON字段:online_status,说明:在线状态标记(0/1等)。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.is_delete IS '对应JSON字段:is_delete,说明:逻辑删除标记(0=有效,1=删除)。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.cx_unit_price IS '对应JSON字段:cx_unit_price,说明:超休单价/冲销单价,金额类。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.pd_unit_price IS '对应JSON字段:pd_unit_price,说明:排钟/点钟单价,金额类。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.last_table_id IS '对应JSON字段:last_table_id,说明:最近服务桌台 ID。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.last_table_name IS '对应JSON字段:last_table_name,说明:最近服务桌台名称。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.person_org_id IS '对应JSON字段:person_org_id,说明:人员组织 ID/部门 ID。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.serial_number IS '对应JSON字段:serial_number,说明:序列号/排序号,保留原值。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.is_team_leader IS '对应JSON字段:is_team_leader,说明:是否组长(0/1)。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.criticism_status IS '对应JSON字段:criticism_status,说明:处罚/警告状态标记,枚举。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.ding_talk_synced IS '对应JSON字段:ding_talk_synced,说明:是否已同步钉钉(0/1)。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.site_light_cfg_id IS '对应JSON字段:site_light_cfg_id,说明:门店灯控配置 ID。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.light_equipment_id IS '对应JSON字段:light_equipment_id,说明:灯控设备 ID/硬件编号。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.entry_sign_status IS '对应JSON字段:entry_sign_status,说明:入职签署状态,枚举。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.resign_sign_status IS '对应JSON字段:resign_sign_status,说明:离职签署状态,枚举。'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.assistant_accounts_master.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; + +CREATE TABLE IF NOT EXISTS billiards_ods.assistant_service_records ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + site_id BIGINT, + siteProfile JSONB, + site_table_id BIGINT, + order_settle_id BIGINT, + order_trade_no TEXT, + order_pay_id BIGINT, + order_assistant_id BIGINT, + order_assistant_type INT, + assistantName TEXT, + assistantNo TEXT, + assistant_level TEXT, + levelname TEXT, + site_assistant_id BIGINT, + skill_id BIGINT, + skillname TEXT, + system_member_id BIGINT, + tablename TEXT, + tenant_member_id BIGINT, + user_id BIGINT, + assistant_team_id BIGINT, + nickname TEXT, + ledger_name TEXT, + ledger_group_name TEXT, + ledger_amount NUMERIC(18,2), + ledger_count NUMERIC(18,4), + ledger_unit_price NUMERIC(18,4), + ledger_status INT, + ledger_start_time TIMESTAMP, + ledger_end_time TIMESTAMP, + manual_discount_amount NUMERIC(18,2), + member_discount_amount NUMERIC(18,2), + coupon_deduct_money NUMERIC(18,2), + service_money NUMERIC(18,2), + projected_income NUMERIC(18,2), + real_use_seconds INT, + income_seconds INT, + start_use_time TIMESTAMP, + last_use_time TIMESTAMP, + create_time TIMESTAMP, + is_single_order INT, + is_delete INT, + is_trash INT, + trash_reason TEXT, + trash_applicant_id BIGINT, + trash_applicant_name TEXT, + operator_id BIGINT, + operator_name TEXT, + salesman_name TEXT, + salesman_org_id BIGINT, + salesman_user_id BIGINT, + person_org_id BIGINT, + add_clock INT, + returns_clock INT, + composite_grade NUMERIC(10,2), + composite_grade_time TIMESTAMP, + skill_grade NUMERIC(10,2), + service_grade NUMERIC(10,2), + sum_grade NUMERIC(10,2), + grade_status INT, + get_grade_times INT, + is_not_responding INT, + is_confirm INT, + payload JSONB NOT NULL, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now() +); + +COMMENT ON TABLE billiards_ods.assistant_service_records IS '对应JSON字段:assistant_service_records.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 assistant_service_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.id IS '对应JSON字段:id,说明::本条助教流水记录的主键 ID(流水唯一标识)。,示例值及对应分析:作用:在系统内部唯一定位这一条助教服务记录。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.tenant_id IS '对应JSON字段:tenant_id,说明::租户/品牌 ID;你这份数据中是固定值(同一个商户)。,示例值及对应分析:关联:全库所有表都有,作为“商户维度”的过滤键。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.site_id IS '对应JSON字段:site_id,说明::门店 ID,本数据中指“朗朗桌球”这一家门店。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.siteProfile IS '对应JSON字段:siteProfile,说明::门店信息快照,包括 id、shop_name、address 等,和其他 JSON 里的 siteProfile 一致。,示例值及对应分析:作用:冗余门店信息,方便查看(而不是每次都联表看门店档案)。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.site_table_id IS '对应JSON字段:site_table_id,说明::球台 ID。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.order_settle_id IS '对应JSON字段:order_settle_id,说明::订单结算 ID,相当于“结账单号”的内部主键。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.order_trade_no IS '对应JSON字段:order_trade_no,说明::订单交易号,整个订单层面的编号。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.order_pay_id IS '对应JSON字段:order_pay_id,说明::关联到“支付记录”的主键 ID。,示例值及对应分析:作用:可以和支付记录中的 id / relate_id 等字段对应,找到这条助教服务对应的支付流水。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.order_assistant_id IS '对应JSON字段:order_assistant_id,说明::订单中“助教项目明细”的内部 ID。,示例值及对应分析:作用:如果订单里有多条助教项目(比如换助教、多个时间段),此字段唯一标识这一条助教明细。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.order_assistant_type IS '对应JSON字段:order_assistant_type,说明:(推测):,示例值及对应分析:1:常规助教服务(主课/基础课)。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.assistantName IS '对应JSON字段:assistantName,说明::助教姓名,如“何海婷”“胡敏”等。,示例值及对应分析:备注:和助教账号档案里的 real_name 一致。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.assistantNo IS '对应JSON字段:assistantNo,说明::助教编号,例如 "27"。,示例值及对应分析:关联:在助教账号表里也有 assistant_no 字段,对应工号/编号。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.assistant_level IS '对应JSON字段:assistant_level,说明::助教等级名称,与 assistant_level 一一对应(初级/中级/高级/助教管理)。,示例值及对应分析:备注:属于展示用的冗余字段。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.assistant_team_id IS '对应JSON字段:assistant_team_id,说明::当前这条助教服务所对应的“课程/技能名称”。,示例值及对应分析:当 order_assistant_type = 1 时,多为“基础课”。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.nickname IS '对应JSON字段:nickname,说明::助教对外昵称,如“佳怡”“周周”“球球”等。,示例值及对应分析:说明:从数据看,这个 nickname 是“助教昵称”,不是顾客昵称(容易混淆)。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_name IS '对应JSON字段:ledger_name,说明:?????? assistant_service_records-Analysis.md,示例值及对应分析:?? assistant_service_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_group_name IS '对应JSON字段:ledger_group_name,说明:(推测):助教项目所属的“计费分组/套餐分组名称”,例如某种助教套餐或业务组名称。,示例值及对应分析:目前未被实际使用。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_amount IS '对应JSON字段:ledger_amount,说明::按标准单价计算出来的应收金额(近似 = ledger_unit_price × income_seconds / 3600)。,示例值及对应分析:说明:从数据看,这个金额对应“按原价计费”的金额,未扣除各种优惠。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_count IS '对应JSON字段:ledger_count,说明::台账记录的计时总秒数。,示例值及对应分析:特点:'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_unit_price IS '对应JSON字段:ledger_unit_price,说明::助教服务 标准单价(通常是标价:每小时、每节课的单价)。,示例值及对应分析:特点:如 98.0、108.0、190.0 等。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_status IS '对应JSON字段:ledger_status,说明:(推测):助教流水记录状态:,示例值及对应分析:1:正常有效。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_start_time IS '对应JSON字段:ledger_start_time,说明::台账层面记录的开始时间。,示例值及对应分析:说明:与 start_use_time 在当前数据中完全一致,可以视为“计费起始时间”。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.ledger_end_time IS '对应JSON字段:ledger_end_time,说明::台账层面的结束时间。,示例值及对应分析:说明:与 last_use_time 一致,可以视为“计费结束时间”。对于 real_use_seconds = 0 的记录,开始和结束时间相同,说明只是预约/录入,并未实际服务。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.manual_discount_amount IS '对应JSON字段:manual_discount_amount,说明::收银员手动给予的减免金额(人工改价)。,示例值及对应分析:当前导出时间段内暂未出现手动打折的情况。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.member_discount_amount IS '对应JSON字段:member_discount_amount,说明::由会员卡折扣产生的优惠金额。,示例值及对应分析:说明:尽管字段里是 0,但实际折扣可能已经体现在 projected_income 与 ledger_amount 的差额中,这里只是未单独拆出。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.coupon_deduct_money IS '对应JSON字段:coupon_deduct_money,说明::由“优惠券/代金券/团购券”等 直接抵扣到这条助教服务上的金额。,示例值及对应分析:说明:'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.service_money IS '对应JSON字段:service_money,说明:(推测):用于记录与助教结算的金额(平台预留的“成本/分成”字段)。,示例值及对应分析:当前数据中未启用这个机制,所以全为 0。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.projected_income IS '对应JSON字段:projected_income,说明::实际结算计入门店的金额(已经考虑折扣、卡权益、券等后的结果)。,示例值及对应分析:从数据:projected_income 明显低于 ledger_amount,说明中间有折扣,但折扣的明细并不全由下面几个字段体现(很多是卡权益内生折扣)。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.real_use_seconds IS '对应JSON字段:real_use_seconds,说明::实际使用时长(秒)。,示例值及对应分析:特点:'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.income_seconds IS '对应JSON字段:income_seconds,说明::计费秒数 / 应计收入对应的时间。,示例值及对应分析:特点:'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.start_use_time IS '对应JSON字段:start_use_time,说明::助教实际开始服务时间。,示例值及对应分析:特点:正常情况下与 ledger_start_time 相同。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.last_use_time IS '对应JSON字段:last_use_time,说明::最后一次使用(实际服务)时间。,示例值及对应分析:特点:正常结束时与 ledger_end_time 相同;如果服务还未真正开始或立即结束,开始/结束时间可能相同。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.create_time IS '对应JSON字段:create_time,说明::这条助教流水记录创建时间(一般接近结算/下单时间)。,示例值及对应分析:?? assistant_service_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.is_single_order IS '对应JSON字段:is_single_order,说明:(推测):是否单独订单:,示例值及对应分析:1:本助教服务作为单独订单结算(或单独拆项)。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.is_delete IS '对应JSON字段:is_delete,说明::逻辑删除标志。,示例值及对应分析:0:未删除;'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.is_trash IS '对应JSON字段:is_trash,说明::是否已废除/作废:,示例值及对应分析:0:正常有效;'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.trash_reason IS '对应JSON字段:trash_reason,说明::废除原因(文本说明),例如“顾客取消”“录入错误”等。,示例值及对应分析:当前数据为空字符串,说明当前导出时间段没有被废除的助教流水记录。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.trash_applicant_id IS '对应JSON字段:trash_applicant_id,说明::提出废除申请的员工 ID(通常是操作员/管理员)。,示例值及对应分析:当前数据全为 0,因此短期内没有发生废除操作。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.trash_applicant_name IS '对应JSON字段:trash_applicant_name,说明::废除申请人姓名。,示例值及对应分析:?? assistant_service_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.operator_id IS '对应JSON字段:operator_id,说明::操作员 ID(录入/结算这条助教服务的员工)。,示例值及对应分析:关联:可与员工/账号表对应(本次导出未单独给员工表,但其他 JSON 里多处出现该 ID)。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.operator_name IS '对应JSON字段:operator_name,说明::操作员姓名,与 operator_id 一起使用,便于直接阅读。,示例值及对应分析:user_id'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.salesman_name IS '对应JSON字段:salesman_name,说明::关联的“营业员/销售员姓名”,用于提成归属。,示例值及对应分析:观测:本数据中多数为空字符串,说明助教流水没有配置单独的营业员。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.salesman_org_id IS '对应JSON字段:salesman_org_id,说明::营业员所属组织/部门 ID。,示例值及对应分析:观测:多为 0。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.salesman_user_id IS '对应JSON字段:salesman_user_id,说明::营业员用户 ID。,示例值及对应分析:观测:多为 0,代表未指定。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.person_org_id IS '对应JSON字段:person_org_id,说明:同样在上文说明:助教所属人事组织 ID。,示例值及对应分析:9. 作废 / 废除相关字段'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.add_clock IS '对应JSON字段:add_clock,说明:(推测):加钟秒数,即在原有预约/服务基础上临时追加的时长。,示例值及对应分析:说明:值均为 60 的倍数(分钟级加钟),如 600 秒=10 分钟。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.returns_clock IS '对应JSON字段:returns_clock,说明:(推测):退钟秒数(取消加钟或提前结束退回的时间)。,示例值及对应分析:当前数据里没有退钟场景,所以全为 0,但字段设计已经预留。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.composite_grade IS '对应JSON字段:composite_grade,说明::综合评分(例如技能+服务加权后的平均分),当前数据没有实际评分。,示例值及对应分析:?? assistant_service_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.composite_grade_time IS '对应JSON字段:composite_grade_time,说明:(推测):最近一次评价时间/综合评分更新时间。现在都是默认“无效时间”。,示例值及对应分析:3. 桌台 / 门店维度字段'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.skill_grade IS '对应JSON字段:skill_grade,说明:(推测):顾客对“技能表现”的评分(整数或打分等级)。,示例值及对应分析:当前数据中还未产生评分记录,所以都是默认值 0。'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.service_grade IS '对应JSON字段:service_grade,说明:(推测):顾客对“服务态度”的评分。,示例值及对应分析:?? assistant_service_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.sum_grade IS '对应JSON字段:sum_grade,说明::累计评分总和(可能用于计算平均分),当前为 0。,示例值及对应分析:?? assistant_service_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.grade_status IS '对应JSON字段:grade_status,说明:(推测):评价状态,比如:,示例值及对应分析:1 = 未评价/正常;'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.get_grade_times IS '对应JSON字段:get_grade_times,说明::该条记录对应的评价次数(或该助教被评价次数快照)。,示例值及对应分析:?? assistant_service_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.is_not_responding IS '对应JSON字段:is_not_responding,说明:(推测):是否存在“爽约/未响应”情况:,示例值及对应分析:0:正常;'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.is_confirm IS '对应JSON字段:is_confirm,说明:(推测):确认状态,例如:,示例值及对应分析:1:待确认;'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.assistant_service_records.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; + +CREATE TABLE IF NOT EXISTS billiards_ods.site_tables_master ( + id BIGINT PRIMARY KEY, + site_id BIGINT, + siteName TEXT, + "appletQrCodeUrl" TEXT, + areaName TEXT, + audit_status INT, + charge_free INT, + create_time TIMESTAMP, + delay_lights_time INT, + is_online_reservation INT, + is_rest_area INT, + light_status INT, + only_allow_groupon INT, + order_delay_time INT, + self_table INT, + show_status INT, + site_table_area_id BIGINT, + tableStatusName TEXT, + table_cloth_use_Cycle INT, + table_cloth_use_time TIMESTAMP, + table_name TEXT, + table_price NUMERIC(18,2), + table_status INT, + temporary_light_second INT, + virtual_table INT, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.site_tables_master IS '对应JSON字段:site_tables_master.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 site_tables_master-Analysis.md'; +COMMENT ON COLUMN billiards_ods.site_tables_master.id IS '对应JSON字段:id,说明::台桌主键 ID。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.site_tables_master.site_id IS '对应JSON字段:site_id,说明::门店 ID。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.site_tables_master.siteName IS '对应JSON字段:siteName,说明::门店名称快照,冗余字段,配合 site_id 使用。,示例值及对应分析:?? site_tables_master-Analysis.md'; +COMMENT ON COLUMN billiards_ods.site_tables_master."appletQrCodeUrl" IS '对应JSON字段:appletQrCodeUrl,说明::小程序二维码 URL。 一般用于:,示例值及对应分析:打印二维码贴在台上,顾客扫码可呼叫服务、查看账单或发起线上预约;'; +COMMENT ON COLUMN billiards_ods.site_tables_master.areaName IS '对应JSON字段:areaName,说明::区域名称,用于前台展示和区域维度管理。,示例值及对应分析:结构特征:'; +COMMENT ON COLUMN billiards_ods.site_tables_master.audit_status IS '对应JSON字段:audit_status,说明:(结合命名惯例):,示例值及对应分析:2:已审核/已启用;'; +COMMENT ON COLUMN billiards_ods.site_tables_master.charge_free IS '对应JSON字段:charge_free,说明:(推测):,示例值及对应分析:0:正常计费;'; +COMMENT ON COLUMN billiards_ods.site_tables_master.create_time IS '对应JSON字段:create_time,说明::台桌配置的创建时间或最近一次创建/复制时间。,示例值及对应分析:三、与其它 JSON 的字段级关联关系(结构视角)'; +COMMENT ON COLUMN billiards_ods.site_tables_master.delay_lights_time IS '对应JSON字段:delay_lights_time,说明:(推测):台灯熄灭延迟时间(单位多半是秒或分钟),用于结账后延时关灯。,示例值及对应分析:本门店未启用延迟关灯功能(全部为 0)。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.is_online_reservation IS '对应JSON字段:is_online_reservation,说明:(结合值分布推断):,示例值及对应分析:1:允许线上预约(可在小程序/线上平台预约这张台);'; +COMMENT ON COLUMN billiards_ods.site_tables_master.is_rest_area IS '对应JSON字段:is_rest_area,说明:(推测):,示例值及对应分析:0:正常计费区域;'; +COMMENT ON COLUMN billiards_ods.site_tables_master.light_status IS '对应JSON字段:light_status,说明:(结合命名推断):,示例值及对应分析:该字段是台灯/灯光状态开关位:'; +COMMENT ON COLUMN billiards_ods.site_tables_master.only_allow_groupon IS '对应JSON字段:only_allow_groupon,说明:(结合命名推断):,示例值及对应分析:1:仅允许团购/券预约使用(团购专用台);'; +COMMENT ON COLUMN billiards_ods.site_tables_master.order_delay_time IS '对应JSON字段:order_delay_time,说明:(推测):订单层面允许的“自动延时时长”(例如到点后自动延长多少时间继续计费)。,示例值及对应分析:本门店未使用此功能。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.self_table IS '对应JSON字段:self_table,说明:(推测):,示例值及对应分析:1:“本门店自有台”,非共享或外部配置;'; +COMMENT ON COLUMN billiards_ods.site_tables_master.show_status IS '对应JSON字段:show_status,说明:(推测):,示例值及对应分析:1:正常在前台“开台列表”中展示;'; +COMMENT ON COLUMN billiards_ods.site_tables_master.site_table_area_id IS '对应JSON字段:site_table_area_id,说明::门店维度的“台桌区域 ID”。,示例值及对应分析:关系:'; +COMMENT ON COLUMN billiards_ods.site_tables_master.tableStatusName IS '对应JSON字段:tableStatusName,说明::table_status 的中文名称,仅为展示用途。,示例值及对应分析:?? site_tables_master-Analysis.md'; +COMMENT ON COLUMN billiards_ods.site_tables_master.table_cloth_use_Cycle IS '对应JSON字段:table_cloth_use_Cycle,说明:(推测):,示例值及对应分析:台呢使用周期阈值,例如达到某个秒数后提醒更换;'; +COMMENT ON COLUMN billiards_ods.site_tables_master.table_cloth_use_time IS '对应JSON字段:table_cloth_use_time,说明:(结合命名和数值特征):,示例值及对应分析:台呢使用累计时长,单位极大概率为“秒”:'; +COMMENT ON COLUMN billiards_ods.site_tables_master.table_name IS '对应JSON字段:table_name,说明::台号/台名称,用于前台操作界面展示,也出现在小票和各种流水中的 ledger_name 或 tableName 字段。,示例值及对应分析:?? site_tables_master-Analysis.md'; +COMMENT ON COLUMN billiards_ods.site_tables_master.table_price IS '对应JSON字段:table_price,说明:(结构角度):,示例值及对应分析:设计上应为“台的基础单价”字段(例如按小时或按局单价);'; +COMMENT ON COLUMN billiards_ods.site_tables_master.table_status IS '对应JSON字段:table_status,说明::台当前运行状态,真实反映某一时刻台的占用/暂停情况。,示例值及对应分析:?? site_tables_master-Analysis.md'; +COMMENT ON COLUMN billiards_ods.site_tables_master.temporary_light_second IS '对应JSON字段:temporary_light_second,说明:(推测):临时点灯时长(秒),例如手动临时开灯一段时间。,示例值及对应分析:本门店未使用。'; +COMMENT ON COLUMN billiards_ods.site_tables_master.virtual_table IS '对应JSON字段:virtual_table,说明:(推测):,示例值及对应分析:0:物理台(实体存在的桌);'; +COMMENT ON COLUMN billiards_ods.site_tables_master.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.site_tables_master.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.site_tables_master.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.site_tables_master.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; + +CREATE TABLE IF NOT EXISTS billiards_ods.table_fee_discount_records ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + site_id BIGINT, + siteProfile JSONB, + site_table_id BIGINT, + tableProfile JSONB, + tenant_table_area_id BIGINT, + adjust_type INT, + ledger_amount NUMERIC(18,2), + ledger_count NUMERIC(18,4), + ledger_name TEXT, + ledger_status INT, + applicant_id BIGINT, + applicant_name TEXT, + operator_id BIGINT, + operator_name TEXT, + order_settle_id BIGINT, + order_trade_no TEXT, + is_delete INT, + create_time TIMESTAMP, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.table_fee_discount_records IS '对应JSON字段:table_fee_discount_records.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 table_fee_discount_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.id IS '对应JSON字段:id,说明::台费打折 / 调整流水主键 ID。,示例值及对应分析:作用:在“台费调账表”中唯一标识一条折扣/调账操作。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.tenant_id IS '对应JSON字段:tenant_id,说明::租户/品牌 ID。,示例值及对应分析:作用:标识记录属于哪一个商户(同一个“非球科技”租户)。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.site_id IS '对应JSON字段:site_id,说明::门店 ID,本批数据全部为同一家门店(朗朗桌球)。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.siteProfile IS '对应JSON字段:siteProfile,说明::门店信息快照,用于报表时直接读取,无需再联门店档案。,示例值及对应分析:?? table_fee_discount_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.site_table_id IS '对应JSON字段:site_table_id,说明::台桌 ID。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.tableProfile IS '对应JSON字段:tableProfile,说明::折扣发生时,对应台桌的配置信息快照。,示例值及对应分析:?? table_fee_discount_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.tenant_table_area_id IS '对应JSON字段:tenant_table_area_id,说明::租户维度的“台桌区域 ID”。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.adjust_type IS '对应JSON字段:adjust_type,说明:(根据文件含义 + 命名 + 数据):,示例值及对应分析:文件名是“台费打折”,字段名为“调整类型”,当前所有记录都是 1,即“台费打折/台费减免”这一种调整类型。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.ledger_amount IS '对应JSON字段:ledger_amount,说明:(关键点):,示例值及对应分析:通过与 台费流水.json 做对比,可以明确:'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.ledger_count IS '对应JSON字段:ledger_count,说明::,示例值及对应分析:这里不是“秒数”,而是“调整次数/条数”的量化,目前固定为 1,表示“一次调账事件”。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.ledger_name IS '对应JSON字段:ledger_name,说明:(推测):,示例值及对应分析:设计上应该用于记录“调账项目名称”或“打折原因描述”(例如某种优惠规则名称),但当前门店并未使用该字段。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.ledger_status IS '对应JSON字段:ledger_status,说明::,示例值及对应分析:1:生效调整(当前有效的台费打折 / 调账记录);'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.applicant_id IS '对应JSON字段:applicant_id,说明::打折/调账申请人 ID。,示例值及对应分析:作用:记录谁发起了这次台费调整。 本时段内所有调整均由同一位员工发起。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.applicant_name IS '对应JSON字段:applicant_name,说明::申请人姓名(带角色描述),为 applicant_id 的冗余显示字段。,示例值及对应分析:?? table_fee_discount_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.operator_id IS '对应JSON字段:operator_id,说明::实际执行调账操作的操作员 ID。,示例值及对应分析:说明:这段时间内,“申请人”和“操作员”是同一个人。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.operator_name IS '对应JSON字段:operator_name,说明::操作员姓名。,示例值及对应分析:?? table_fee_discount_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.order_settle_id IS '对应JSON字段:order_settle_id,说明::结算单/小票 ID。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.order_trade_no IS '对应JSON字段:order_trade_no,说明::订单交易号。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.is_delete IS '对应JSON字段:is_delete,说明::逻辑删除标志:,示例值及对应分析:0:未删除(有效记录);'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.create_time IS '对应JSON字段:create_time,说明::台费调整记录的创建时间,即打折操作被执行的时间戳。,示例值及对应分析:说明:与台费流水中的 create_time(结算时间)相互配合,可以还原调整发生于结账之前还是之后。'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.table_fee_discount_records.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; + +CREATE TABLE IF NOT EXISTS billiards_ods.table_fee_transactions ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + site_id BIGINT, + siteProfile JSONB, + site_table_id BIGINT, + site_table_area_id BIGINT, + site_table_area_name TEXT, + tenant_table_area_id BIGINT, + order_trade_no TEXT, + order_pay_id BIGINT, + order_settle_id BIGINT, + ledger_name TEXT, + ledger_amount NUMERIC(18,2), + ledger_count NUMERIC(18,4), + ledger_unit_price NUMERIC(18,4), + ledger_status INT, + ledger_start_time TIMESTAMP, + ledger_end_time TIMESTAMP, + start_use_time TIMESTAMP, + last_use_time TIMESTAMP, + real_table_use_seconds INT, + real_table_charge_money NUMERIC(18,2), + add_clock_seconds INT, + adjust_amount NUMERIC(18,2), + coupon_promotion_amount NUMERIC(18,2), + member_discount_amount NUMERIC(18,2), + used_card_amount NUMERIC(18,2), + mgmt_fee NUMERIC(18,2), + service_money NUMERIC(18,2), + fee_total NUMERIC(18,2), + is_single_order INT, + is_delete INT, + member_id BIGINT, + operator_id BIGINT, + operator_name TEXT, + salesman_name TEXT, + salesman_org_id BIGINT, + salesman_user_id BIGINT, + create_time TIMESTAMP, + payload JSONB NOT NULL, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now() +); + +COMMENT ON TABLE billiards_ods.table_fee_transactions IS '对应JSON字段:table_fee_transactions.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 table_fee_transactions-Analysis.md'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.id IS '对应JSON字段:id,说明::台费流水记录主键(事实表主键)。,示例值及对应分析:?? table_fee_transactions-Analysis.md'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.tenant_id IS '对应JSON字段:tenant_id,说明::租户/品牌 ID。本文件所有记录都属于同一租户。,示例值及对应分析:关联:与所有其它 JSON 中的 tenant_id 一致,用于跨表做“商户维度”的过滤。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.site_id IS '对应JSON字段:site_id,说明::门店 ID,本次数据全部来自同一门店(朗朗桌球)。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.siteProfile IS '对应JSON字段:siteProfile,说明::当前门店的完整档案快照,冗余到流水表中,便于报表直接读取而无需再联表门店档案。,示例值及对应分析:三、与其它 JSON 的结构关联关系(从字段层面)'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.site_table_id IS '对应JSON字段:site_table_id,说明::球台 ID。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.site_table_area_id IS '对应JSON字段:site_table_area_id,说明::门店内“台桌区域” ID(站在门店物理布局的角度)。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.site_table_area_name IS '对应JSON字段:site_table_area_name,说明::台桌区域的名称,用于门店表现和区域统计。,示例值及对应分析:4. 会员维度与相关字段'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.tenant_table_area_id IS '对应JSON字段:tenant_table_area_id,说明::租户维度的台桌区域 ID(品牌层面的同一类区域)。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.order_trade_no IS '对应JSON字段:order_trade_no,说明::订单交易号,是整笔订单的主编号。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.order_pay_id IS '对应JSON字段:order_pay_id,说明::订单支付记录 ID。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.order_settle_id IS '对应JSON字段:order_settle_id,说明::结算单号/结账 ID,对应一次结账操作。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_name IS '对应JSON字段:ledger_name,说明::台号名称,实际展示给员工/顾客看的桌台编号。,示例值及对应分析:备注:与 site_table_id 一一对应,是桌台维表中的名称字段冗余到流水里的快照。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_amount IS '对应JSON字段:ledger_amount,说明::按单价与计费时长计算出的原始应收台费金额。,示例值及对应分析:近似关系:ledger_amount ≈ ledger_unit_price × ledger_count / 3600,考虑到四舍五入会有小数差。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_count IS '对应JSON字段:ledger_count,说明::台账记录的计费秒数,计费用秒数(应收时长)。,示例值及对应分析:特点:'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_unit_price IS '对应JSON字段:ledger_unit_price,说明::台费结算时设置的 每小时单价/计费单价。,示例值及对应分析:用途:与 ledger_count 共同决定原始应收额。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_status IS '对应JSON字段:ledger_status,说明:(推测):,示例值及对应分析:1:正常已结算台费;'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_start_time IS '对应JSON字段:ledger_start_time,说明::台账上的计费起始时间。,示例值及对应分析:关系:'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.ledger_end_time IS '对应JSON字段:ledger_end_time,说明::台账上的计费结束时间。,示例值及对应分析:关系:'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.start_use_time IS '对应JSON字段:start_use_time,说明::台开始使用的时间(实际开台时间)。,示例值及对应分析:特点:在数据中,与 ledger_start_time 完全相同(见下)。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.last_use_time IS '对应JSON字段:last_use_time,说明::最后使用/操作时间。,示例值及对应分析:特点:'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.real_table_use_seconds IS '对应JSON字段:real_table_use_seconds,说明::实际使用的总秒数(系统真实统计的使用时长)。,示例值及对应分析:关系:'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.real_table_charge_money IS '对应JSON字段:real_table_charge_money,说明::台费中实际向顾客收取的金额(现金/实付维度,未含券方承担或内部调账的那一部分)。,示例值及对应分析:特点:'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.add_clock_seconds IS '对应JSON字段:add_clock_seconds,说明::加钟秒数,在原有使用基础上追加的时长。,示例值及对应分析:观测:'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.adjust_amount IS '对应JSON字段:adjust_amount,说明::调整金额/调账金额,用于将台费金额转移或冲减到其它项目,或手工调整。,示例值及对应分析:特点:'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.coupon_promotion_amount IS '对应JSON字段:coupon_promotion_amount,说明::由优惠券/活动/团购(平台/门店促销)承担的优惠金额,直接抵扣在台费上。,示例值及对应分析:特点:当 real_table_charge_money = 0 且该字段为 ledger_amount 时,说明整笔台费是由券促销全额承担。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.member_discount_amount IS '对应JSON字段:member_discount_amount,说明:上文已说明,这里补充与金额的结构关系:,示例值及对应分析:功能:表示由会员折扣或会员权益承担的那部分金额。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.used_card_amount IS '对应JSON字段:used_card_amount,说明::由储值卡、次卡等“卡内余额”抵扣的金额。,示例值及对应分析:说明:字段设计已预留,但本段时间内台费没有通过储值卡扣款,或者卡扣款在其他表体现。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.mgmt_fee IS '对应JSON字段:mgmt_fee,说明:(推测):管理费字段,用于未来支持“台费附加管理费/服务费”的功能。,示例值及对应分析:当前未启用。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.service_money IS '对应JSON字段:service_money,说明:(推测):门店用于记录“服务费/成本/分成金额”的字段,类似助教流水里的 service_money。,示例值及对应分析:说明:当前门店未启用此字段结算台费。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.fee_total IS '对应JSON字段:fee_total,说明::各种附加费用(如管理费、服务费)合计值。,示例值及对应分析:说明:和 mgmt_fee 一样,目前作为预留字段,没有实际使用。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.is_single_order IS '对应JSON字段:is_single_order,说明:(推测):,示例值及对应分析:1:该台费记录对应的是一个独立计费单元(单独结算的桌费);'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.is_delete IS '对应JSON字段:is_delete,说明::逻辑删除标志:,示例值及对应分析:0:未删除(有效记录);'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.member_id IS '对应JSON字段:member_id,说明::门店/租户内的会员 ID。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.operator_id IS '对应JSON字段:operator_id,说明::操作员 ID,负责开台/结账的员工账号 ID。,示例值及对应分析:关联:与员工/账号体系中的用户 ID 对应(与助教账号的 user_id 属于同一种 ID 体系)。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.operator_name IS '对应JSON字段:operator_name,说明::操作员姓名(冗余字段),便于直接阅读,不必再联表员工档案。,示例值及对应分析:?? table_fee_transactions-Analysis.md'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.salesman_name IS '对应JSON字段:salesman_name,说明::业务员/营业员姓名,如果台费有单独提成员工,这里记录归属人。,示例值及对应分析:当前门店未启用该字段做提成归属。'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.salesman_org_id IS '对应JSON字段:salesman_org_id,说明::营业员所属机构/部门 ID。,示例值及对应分析:8. 状态 / 标记类字段'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.salesman_user_id IS '对应JSON字段:salesman_user_id,说明::营业员的用户 ID(与 salesman_name 搭配)。,示例值及对应分析:?? table_fee_transactions-Analysis.md'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.create_time IS '对应JSON字段:create_time,说明::这条台费流水记录的创建时间,通常接近结账时间。,示例值及对应分析:?? table_fee_transactions-Analysis.md'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.table_fee_transactions.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; + +CREATE TABLE IF NOT EXISTS billiards_ods.goods_stock_movements ( + siteGoodsStockId BIGINT PRIMARY KEY, + tenantId BIGINT, + siteId BIGINT, + siteGoodsId BIGINT, + goodsName TEXT, + goodsCategoryId BIGINT, + goodsSecondCategoryId BIGINT, + unit TEXT, + price NUMERIC(18,4), + stockType INT, + changeNum NUMERIC(18,4), + startNum NUMERIC(18,4), + endNum NUMERIC(18,4), + changeNumA NUMERIC(18,4), + startNumA NUMERIC(18,4), + endNumA NUMERIC(18,4), + remark TEXT, + operatorName TEXT, + createTime TIMESTAMP, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.goods_stock_movements IS '对应JSON字段:goods_stock_movements.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 goods_stock_movements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.siteGoodsStockId IS '对应JSON字段:siteGoodsStockId,说明::门店某个“商品库存记录”的主键 ID。,示例值及对应分析:特点:每条库存变动记录对应一个 siteGoodsStockId,同一个商品可能在不同库存记录中出现(例如不同仓位或不同批次)。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.tenantId IS '对应JSON字段:tenantId,说明::租户/品牌 ID。,示例值及对应分析:观测:全部记录相同值,说明属于同一商户。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.siteId IS '对应JSON字段:siteId,说明::门店 ID。,示例值及对应分析:观测:本文件中所有记录的 siteId 都相同,对应“朗朗桌球”这家门店。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.siteGoodsId IS '对应JSON字段:siteGoodsId,说明::门店维度的商品 ID。,示例值及对应分析:特点:'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.goodsName IS '对应JSON字段:goodsName,说明::商品名称。,示例值及对应分析:示例值:'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.goodsCategoryId IS '对应JSON字段:goodsCategoryId,说明::商品一级分类 ID。,示例值及对应分析:观测:当前 100 条样本中约有 5 个不同 ID,对应如“酒水类”“食品小吃类”“香烟类”等大类(仅从命名与商品名推断)。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.goodsSecondCategoryId IS '对应JSON字段:goodsSecondCategoryId,说明::商品二级分类 ID。,示例值及对应分析:观测:样本中约有 7 个不同 ID,如饮料中的“矿泉水/功能饮料/碳酸饮料”等。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.unit IS '对应JSON字段:unit,说明::库存计量单位。,示例值及对应分析:说明:库存数量(startNum、endNum、changeNum)均以这里的单位计数。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.price IS '对应JSON字段:price,说明::商品单价(单位金额)。,示例值及对应分析:观测特征:'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.stockType IS '对应JSON字段:stockType,说明:(基于数据行为推断):,示例值及对应分析:1:出库类变动 典型情况是销售出库,库存减少 1 或 2;例如顾客点了一瓶饮料,对应一条 stockType=1, changeNum=-1 的记录。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.changeNum IS '对应JSON字段:changeNum,说明::本次库存数量变化值。,示例值及对应分析:特点及取值:'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.startNum IS '对应JSON字段:startNum,说明::变动前(这次出入库之前)的库存数量。,示例值及对应分析:示例: 如记录:startNum = 28, changeNum = -1, endNum = 27。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.endNum IS '对应JSON字段:endNum,说明::变动后(出入库之后)的库存数量。,示例值及对应分析:结构关系:'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.changeNumA IS '对应JSON字段:changeNumA,说明::辅助单位的变化量(与 changeNum 对应的第二计量单位变化),当前未使用。,示例值及对应分析:结论: startNumA / endNumA / changeNumA 是为“一个商品有两种计量单位(如箱与瓶)”而设计的预留字段。 目前门店只在单一单位层面管理库存,故全部为 0。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.startNumA IS '对应JSON字段:startNumA,说明:(推测):辅助计量单位的起始库存(例如件/箱等第二单位)。,示例值及对应分析:当前门店在样本时间段内没有启用多单位库存管理,因此全部为 0。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.endNumA IS '对应JSON字段:endNumA,说明::辅助单位的变动后库存,同样未启用。,示例值及对应分析:?? goods_stock_movements-Analysis.md'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.remark IS '对应JSON字段:remark,说明::备注信息,用于手工记录本次变更的特殊原因说明(例如“盘点差异调整”“报损”)。,示例值及对应分析:当前样本中没有填入任何备注,但字段已预留,适用于盘点或手工调整场景。'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.operatorName IS '对应JSON字段:operatorName,说明::执行此次库存变动的操作人。,示例值及对应分析:观测值:'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.createTime IS '对应JSON字段:createTime,说明::这条库存变动记录的创建时间,即发生库存变更的时间点。,示例值及对应分析:特点:'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.goods_stock_movements.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; + +CREATE TABLE IF NOT EXISTS billiards_ods.stock_goods_category_tree ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + category_name TEXT, + alias_name TEXT, + pid BIGINT, + business_name TEXT, + tenant_goods_business_id BIGINT, + open_salesman INT, + categoryBoxes JSONB, + sort INT, + is_warehousing INT, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.stock_goods_category_tree IS '对应JSON字段:stock_goods_category_tree.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 stock_goods_category_tree-Analysis.md'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.id IS '对应JSON字段:id,说明:?????? stock_goods_category_tree-Analysis.md,示例值及对应分析:?? stock_goods_category_tree-Analysis.md'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.tenant_id IS '对应JSON字段:tenant_id,说明:?????? stock_goods_category_tree-Analysis.md,示例值及对应分析:?? stock_goods_category_tree-Analysis.md'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.category_name IS '对应JSON字段:category_name,说明:?????? stock_goods_category_tree-Analysis.md,示例值及对应分析:?? stock_goods_category_tree-Analysis.md'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.alias_name IS '对应JSON字段:alias_name,说明:?????? stock_goods_category_tree-Analysis.md,示例值及对应分析:?? stock_goods_category_tree-Analysis.md'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.pid IS '对应JSON字段:pid,说明:?????? stock_goods_category_tree-Analysis.md,示例值及对应分析:?? stock_goods_category_tree-Analysis.md'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.business_name IS '对应JSON字段:business_name,说明:?????? stock_goods_category_tree-Analysis.md,示例值及对应分析:?? stock_goods_category_tree-Analysis.md'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.tenant_goods_business_id IS '对应JSON字段:tenant_goods_business_id,说明:?????? stock_goods_category_tree-Analysis.md,示例值及对应分析:?? stock_goods_category_tree-Analysis.md'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.open_salesman IS '对应JSON字段:open_salesman,说明:?????? stock_goods_category_tree-Analysis.md,示例值及对应分析:?? stock_goods_category_tree-Analysis.md'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.categoryBoxes IS '对应JSON字段:categoryBoxes,说明:?????? stock_goods_category_tree-Analysis.md,示例值及对应分析:?? stock_goods_category_tree-Analysis.md'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.sort IS '对应JSON字段:sort,说明:?????? stock_goods_category_tree-Analysis.md,示例值及对应分析:?? stock_goods_category_tree-Analysis.md'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.is_warehousing IS '对应JSON字段:is_warehousing,说明::分类节点主键 ID(在商品分类维度中的唯一标识)。,示例值及对应分析:特征:'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; + +CREATE TABLE IF NOT EXISTS billiards_ods.goods_stock_summary ( + siteGoodsId BIGINT PRIMARY KEY, + goodsName TEXT, + goodsUnit TEXT, + goodsCategoryId BIGINT, + goodsCategorySecondId BIGINT, + categoryName TEXT, + rangeStartStock NUMERIC(18,4), + rangeEndStock NUMERIC(18,4), + rangeIn NUMERIC(18,4), + rangeOut NUMERIC(18,4), + rangeSale NUMERIC(18,4), + rangeSaleMoney NUMERIC(18,2), + rangeInventory NUMERIC(18,4), + currentStock NUMERIC(18,4), + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.goods_stock_summary IS '对应JSON字段:goods_stock_summary.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 goods_stock_summary-Analysis.md'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.siteGoodsId IS '对应JSON字段:siteGoodsId,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsName IS '对应JSON字段:goodsName,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsUnit IS '对应JSON字段:goodsUnit,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsCategoryId IS '对应JSON字段:goodsCategoryId,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.goodsCategorySecondId IS '对应JSON字段:goodsCategorySecondId,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.categoryName IS '对应JSON字段:categoryName,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeStartStock IS '对应JSON字段:rangeStartStock,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeEndStock IS '对应JSON字段:rangeEndStock,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeIn IS '对应JSON字段:rangeIn,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeOut IS '对应JSON字段:rangeOut,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeSale IS '对应JSON字段:rangeSale,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeSaleMoney IS '对应JSON字段:rangeSaleMoney,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.rangeInventory IS '对应JSON字段:rangeInventory,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.currentStock IS '对应JSON字段:currentStock,说明:?????? goods_stock_summary-Analysis.md,示例值及对应分析:?? goods_stock_summary-Analysis.md'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.goods_stock_summary.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; + +CREATE TABLE IF NOT EXISTS billiards_ods.payment_transactions ( + id BIGINT PRIMARY KEY, + site_id BIGINT, + siteProfile JSONB, + relate_type INT, + relate_id BIGINT, + pay_amount NUMERIC(18,2), + pay_status INT, + pay_time TIMESTAMP, + create_time TIMESTAMP, + payment_method INT, + online_pay_channel INT, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.payment_transactions IS '对应JSON字段:payment_transactions.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 payment_transactions-Analysis.md'; +COMMENT ON COLUMN billiards_ods.payment_transactions.id IS '对应JSON字段:id,说明:?????? payment_transactions-Analysis.md,示例值及对应分析:?? payment_transactions-Analysis.md'; +COMMENT ON COLUMN billiards_ods.payment_transactions.site_id IS '对应JSON字段:site_id,说明:?????? payment_transactions-Analysis.md,示例值及对应分析:?? payment_transactions-Analysis.md'; +COMMENT ON COLUMN billiards_ods.payment_transactions.siteProfile IS '对应JSON字段:siteProfile,说明:?????? payment_transactions-Analysis.md,示例值及对应分析:?? payment_transactions-Analysis.md'; +COMMENT ON COLUMN billiards_ods.payment_transactions.relate_type IS '对应JSON字段:relate_type,说明:?????? payment_transactions-Analysis.md,示例值及对应分析:?? payment_transactions-Analysis.md'; +COMMENT ON COLUMN billiards_ods.payment_transactions.relate_id IS '对应JSON字段:relate_id,说明:?????? payment_transactions-Analysis.md,示例值及对应分析:?? payment_transactions-Analysis.md'; +COMMENT ON COLUMN billiards_ods.payment_transactions.pay_amount IS '对应JSON字段:pay_amount,说明:?????? payment_transactions-Analysis.md,示例值及对应分析:?? payment_transactions-Analysis.md'; +COMMENT ON COLUMN billiards_ods.payment_transactions.pay_status IS '对应JSON字段:pay_status,说明:?????? payment_transactions-Analysis.md,示例值及对应分析:?? payment_transactions-Analysis.md'; +COMMENT ON COLUMN billiards_ods.payment_transactions.pay_time IS '对应JSON字段:pay_time,说明:?????? payment_transactions-Analysis.md,示例值及对应分析:?? payment_transactions-Analysis.md'; +COMMENT ON COLUMN billiards_ods.payment_transactions.create_time IS '对应JSON字段:create_time,说明:?????? payment_transactions-Analysis.md,示例值及对应分析:?? payment_transactions-Analysis.md'; +COMMENT ON COLUMN billiards_ods.payment_transactions.payment_method IS '对应JSON字段:payment_method,说明:?????? payment_transactions-Analysis.md,示例值及对应分析:?? payment_transactions-Analysis.md'; +COMMENT ON COLUMN billiards_ods.payment_transactions.online_pay_channel IS '对应JSON字段:online_pay_channel,说明:?????? payment_transactions-Analysis.md,示例值及对应分析:?? payment_transactions-Analysis.md'; +COMMENT ON COLUMN billiards_ods.payment_transactions.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.payment_transactions.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.payment_transactions.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.payment_transactions.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; + +CREATE TABLE IF NOT EXISTS billiards_ods.refund_transactions ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + tenantName TEXT, + site_id BIGINT, + siteProfile JSONB, + relate_type INT, + relate_id BIGINT, + pay_sn TEXT, + pay_amount NUMERIC(18,2), + refund_amount NUMERIC(18,2), + round_amount NUMERIC(18,2), + pay_status INT, + pay_time TIMESTAMP, + create_time TIMESTAMP, + payment_method INT, + pay_terminal INT, + pay_config_id BIGINT, + online_pay_channel INT, + online_pay_type INT, + channel_fee NUMERIC(18,2), + channel_payer_id TEXT, + channel_pay_no TEXT, + member_id BIGINT, + member_card_id BIGINT, + cashier_point_id BIGINT, + operator_id BIGINT, + action_type INT, + check_status INT, + is_revoke INT, + is_delete INT, + balance_frozen_amount NUMERIC(18,2), + card_frozen_amount NUMERIC(18,2), + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.refund_transactions IS '对应JSON字段:refund_transactions.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 refund_transactions-Analysis.md'; +COMMENT ON COLUMN billiards_ods.refund_transactions.id IS '对应JSON字段:id,说明::本条 退款流水 的唯一 ID。,示例值及对应分析:特点:'; +COMMENT ON COLUMN billiards_ods.refund_transactions.tenant_id IS '对应JSON字段:tenant_id,说明::租户/品牌 ID,全系统维度标识该商户。,示例值及对应分析:特点:本文件中所有记录相同。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.tenantName IS '对应JSON字段:tenantName,说明::租户(商户)名称。,示例值及对应分析:特点:本文件中固定为“朗朗桌球”,完全冗余于 siteProfile.shop_name。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.site_id IS '对应JSON字段:site_id,说明::门店 ID。,示例值及对应分析:特点:本文件中所有记录相同(单门店)。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.siteProfile IS '对应JSON字段:siteProfile,说明::门店信息快照,结构与其他 JSON 中的 siteProfile 完全一致。包含字段包括但不限于:,示例值及对应分析:id:门店 ID(= site_id);'; +COMMENT ON COLUMN billiards_ods.refund_transactions.relate_type IS '对应JSON字段:relate_type,说明::本退款对应的“业务类型”。,示例值及对应分析:结合支付记录的 relate_type 推测:'; +COMMENT ON COLUMN billiards_ods.refund_transactions.relate_id IS '对应JSON字段:relate_id,说明::本次退款关联的业务 ID。,示例值及对应分析:对于 relate_type = 2:应该对应某个订单/结算的主键;'; +COMMENT ON COLUMN billiards_ods.refund_transactions.pay_sn IS '对应JSON字段:pay_sn,说明:?????? refund_transactions-Analysis.md,示例值及对应分析:?? refund_transactions-Analysis.md'; +COMMENT ON COLUMN billiards_ods.refund_transactions.pay_amount IS '对应JSON字段:pay_amount,说明::本次退款的 资金变动金额。,示例值及对应分析:特征很重要:'; +COMMENT ON COLUMN billiards_ods.refund_transactions.refund_amount IS '对应JSON字段:refund_amount,说明:(推测):,示例值及对应分析:设计上本应显示“实际退款金额”(正数),与 pay_amount 配合使用;'; +COMMENT ON COLUMN billiards_ods.refund_transactions.round_amount IS '对应JSON字段:round_amount,说明:(推测):,示例值及对应分析:舍入金额/抹零金额;'; +COMMENT ON COLUMN billiards_ods.refund_transactions.pay_status IS '对应JSON字段:pay_status,说明:(推测):,示例值及对应分析:支付/退款状态枚举:'; +COMMENT ON COLUMN billiards_ods.refund_transactions.pay_time IS '对应JSON字段:pay_time,说明::退款在支付渠道层面实际发生的时间。,示例值及对应分析:特点:'; +COMMENT ON COLUMN billiards_ods.refund_transactions.create_time IS '对应JSON字段:create_time,说明::本条退款流水在系统内创建时间。,示例值及对应分析:特点:'; +COMMENT ON COLUMN billiards_ods.refund_transactions.payment_method IS '对应JSON字段:payment_method,说明:(推测):,示例值及对应分析:支付/退款的 方式类型:'; +COMMENT ON COLUMN billiards_ods.refund_transactions.pay_terminal IS '对应JSON字段:pay_terminal,说明:(推测):,示例值及对应分析:退款所使用的 终端类型:'; +COMMENT ON COLUMN billiards_ods.refund_transactions.pay_config_id IS '对应JSON字段:pay_config_id,说明:(推测):,示例值及对应分析:支付配置 ID,例如商户在“非球科技”内配置的某一条支付通道(某个微信商户号、银联通道)的主键。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.online_pay_channel IS '对应JSON字段:online_pay_channel,说明:(推测):,示例值及对应分析:线上支付的 渠道编号,例如:'; +COMMENT ON COLUMN billiards_ods.refund_transactions.online_pay_type IS '对应JSON字段:online_pay_type,说明:(推测):,示例值及对应分析:在线退款的类型:'; +COMMENT ON COLUMN billiards_ods.refund_transactions.channel_fee IS '对应JSON字段:channel_fee,说明:(推测):,示例值及对应分析:第三方支付渠道对本次退款收取的手续费;'; +COMMENT ON COLUMN billiards_ods.refund_transactions.channel_payer_id IS '对应JSON字段:channel_payer_id,说明:(推测):,示例值及对应分析:支付渠道侧的 payer ID,例如微信 openid、银行卡号掩码等。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.channel_pay_no IS '对应JSON字段:channel_pay_no,说明:(推测):,示例值及对应分析:第三方支付平台的交易号(如微信支付单号、支付宝交易号等)。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.member_id IS '对应JSON字段:member_id,说明::,示例值及对应分析:租户内部的会员 ID(对应会员档案中的某个主键)。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.member_card_id IS '对应JSON字段:member_card_id,说明::,示例值及对应分析:关联的会员卡账户 ID(对应“储值卡列表”或“会员档案”中的某一张卡)。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.cashier_point_id IS '对应JSON字段:cashier_point_id,说明:(推测):,示例值及对应分析:收银点 ID,例如前台 1、前台 2、自助机等。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.operator_id IS '对应JSON字段:operator_id,说明::,示例值及对应分析:执行该退款操作的操作员 ID。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.action_type IS '对应JSON字段:action_type,说明:(推测):,示例值及对应分析:行为类型:'; +COMMENT ON COLUMN billiards_ods.refund_transactions.check_status IS '对应JSON字段:check_status,说明:(推测):,示例值及对应分析:审核状态:'; +COMMENT ON COLUMN billiards_ods.refund_transactions.is_revoke IS '对应JSON字段:is_revoke,说明:(推测):,示例值及对应分析:是否撤销型退款/撤销原支付:'; +COMMENT ON COLUMN billiards_ods.refund_transactions.is_delete IS '对应JSON字段:is_delete,说明::逻辑删除标志。,示例值及对应分析:0:未删除;'; +COMMENT ON COLUMN billiards_ods.refund_transactions.balance_frozen_amount IS '对应JSON字段:balance_frozen_amount,说明:(推测):,示例值及对应分析:涉及会员储值卡退款时,暂时冻结的余额金额;'; +COMMENT ON COLUMN billiards_ods.refund_transactions.card_frozen_amount IS '对应JSON字段:card_frozen_amount,说明::与上一个类似,偏向“某张卡的被冻结金额”,也与会员卡/储值账户相关。,示例值及对应分析:状态同上:本数据中未发生“卡冻结退款”。'; +COMMENT ON COLUMN billiards_ods.refund_transactions.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.refund_transactions.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.refund_transactions.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.refund_transactions.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; + +CREATE TABLE IF NOT EXISTS billiards_ods.platform_coupon_redemption_records ( + id BIGINT PRIMARY KEY, + verify_id BIGINT, + certificate_id TEXT, + coupon_code TEXT, + coupon_name TEXT, + coupon_channel INT, + groupon_type INT, + group_package_id BIGINT, + sale_price NUMERIC(18,2), + coupon_money NUMERIC(18,2), + coupon_free_time NUMERIC(18,2), + coupon_cover TEXT, + coupon_remark TEXT, + use_status INT, + consume_time TIMESTAMP, + create_time TIMESTAMP, + deal_id TEXT, + channel_deal_id TEXT, + site_id BIGINT, + site_order_id BIGINT, + table_id BIGINT, + tenant_id BIGINT, + operator_id BIGINT, + operator_name TEXT, + is_delete INT, + siteProfile JSONB, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.platform_coupon_redemption_records IS '对应JSON字段:platform_coupon_redemption_records.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 platform_coupon_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.id IS '对应JSON字段:id,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.verify_id IS '对应JSON字段:verify_id,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.certificate_id IS '对应JSON字段:certificate_id,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_code IS '对应JSON字段:coupon_code,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_name IS '对应JSON字段:coupon_name,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_channel IS '对应JSON字段:coupon_channel,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.groupon_type IS '对应JSON字段:groupon_type,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.group_package_id IS '对应JSON字段:group_package_id,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.sale_price IS '对应JSON字段:sale_price,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_money IS '对应JSON字段:coupon_money,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_free_time IS '对应JSON字段:coupon_free_time,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_cover IS '对应JSON字段:coupon_cover,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.coupon_remark IS '对应JSON字段:coupon_remark,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.use_status IS '对应JSON字段:use_status,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.consume_time IS '对应JSON字段:consume_time,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.create_time IS '对应JSON字段:create_time,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.deal_id IS '对应JSON字段:deal_id,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.channel_deal_id IS '对应JSON字段:channel_deal_id,说明:任意一个 ID 字段缺失时(如部分记录 deal_id=0),仍然可以通过其他字段(coupon_name + sale_price + coupon_money + channel_deal_id)唯一识别该产品。,示例值及对应分析:这种多字段冗余,结构上提升了抗“配置缺失”的能力。'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.site_id IS '对应JSON字段:site_id,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.site_order_id IS '对应JSON字段:site_order_id,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.table_id IS '对应JSON字段:table_id,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.tenant_id IS '对应JSON字段:tenant_id,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.operator_id IS '对应JSON字段:operator_id,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.operator_name IS '对应JSON字段:operator_name,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.is_delete IS '对应JSON字段:is_delete,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.siteProfile IS '对应JSON字段:siteProfile,说明:?????? platform_coupon_redemption_records-Analysis.md,示例值及对应分析:?? platform_coupon_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; + +CREATE TABLE IF NOT EXISTS billiards_ods.tenant_goods_master ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + goods_name TEXT, + goods_bar_code TEXT, + goods_category_id BIGINT, + goods_second_category_id BIGINT, + categoryName TEXT, + unit TEXT, + goods_number TEXT, + out_goods_id TEXT, + goods_state INT, + sale_channel INT, + able_discount INT, + able_site_transfer INT, + is_delete INT, + is_warehousing INT, + isInSite INT, + cost_price NUMERIC(18,4), + cost_price_type INT, + market_price NUMERIC(18,4), + min_discount_price NUMERIC(18,4), + common_sale_royalty NUMERIC(18,4), + point_sale_royalty NUMERIC(18,4), + pinyin_initial TEXT, + commodityCode TEXT, + commodity_code TEXT, + goods_cover TEXT, + supplier_id BIGINT, + remark_name TEXT, + create_time TIMESTAMP, + update_time TIMESTAMP, + payload JSONB NOT NULL, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now() +); + +COMMENT ON TABLE billiards_ods.tenant_goods_master IS '对应JSON字段:tenant_goods_master.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 tenant_goods_master-Analysis.md'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.id IS '对应JSON字段:id,说明::商品档案主键 ID,唯一标识一条商品。,示例值及对应分析:作用:作为其他业务表(销售明细、库存流水、门店商品表等)的外键,通常以 tenant_goods_id 或类似字段出现。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.tenant_id IS '对应JSON字段:tenant_id,说明::租户/品牌 ID。,示例值及对应分析:作用:和其它 JSON 中的 tenant_id / tenantId 一致,用于区分不同商户(本次数据只包含同一租户)。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_name IS '对应JSON字段:goods_name,说明::商品名称(前台展示名称)。,示例值及对应分析:特征:'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_bar_code IS '对应JSON字段:goods_bar_code,说明::商品条码(EAN 等),目前未维护。,示例值及对应分析:说明:'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_category_id IS '对应JSON字段:goods_category_id,说明::商品一级分类 ID。,示例值及对应分析:取值情况:'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_second_category_id IS '对应JSON字段:goods_second_category_id,说明::商品二级分类 ID。,示例值及对应分析:取值情况:'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.categoryName IS '对应JSON字段:categoryName,说明::商品一级分类名称(业务可读)。,示例值及对应分析:取值情况:'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.unit IS '对应JSON字段:unit,说明::计量单位。,示例值及对应分析:取值(共 12 种左右):'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_number IS '对应JSON字段:goods_number,说明::商品内部编码(自定义货号/系统货号)。,示例值及对应分析:特征:'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_state IS '对应JSON字段:goods_state,说明:(推测):商品状态(上架/下架等)。,示例值及对应分析:1:正常/上架;'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.sale_channel IS '对应JSON字段:sale_channel,说明:(推测):销售渠道类型,如“门店堂食/线下零售/线上小程序”等的一种编码。,示例值及对应分析:现有数据只有一个值,说明本门店目前仅通过一种渠道销售这些商品。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.able_discount IS '对应JSON字段:able_discount,说明:(推测):是否允许参与折扣/打折。,示例值及对应分析:1:允许折扣;'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.able_site_transfer IS '对应JSON字段:able_site_transfer,说明:(推测):,示例值及对应分析:字面意思是“是否允许门店间调拨/门店级操作”:'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.is_delete IS '对应JSON字段:is_delete,说明::逻辑删除标志。,示例值及对应分析:0:未删除(有效商品);'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.is_warehousing IS '对应JSON字段:is_warehousing,说明:(推测):是否启用库存管理。,示例值及对应分析:1:该商品纳入库存管理;'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.isInSite IS '对应JSON字段:isInSite,说明:(从命名推测):是否在当前门店启用/上架。,示例值及对应分析:现象:'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.cost_price IS '对应JSON字段:cost_price,说明::成本价格。,示例值及对应分析:特征:'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.cost_price_type IS '对应JSON字段:cost_price_type,说明:(推测):,示例值及对应分析:不同的成本价格来源或计算方式,如:'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.market_price IS '对应JSON字段:market_price,说明::商品标价 / 售价(标准销售单价)。,示例值及对应分析:特征:'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.min_discount_price IS '对应JSON字段:min_discount_price,说明::该商品允许售卖的最低价格(底价)。,示例值及对应分析:特征:'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.common_sale_royalty IS '对应JSON字段:common_sale_royalty,说明:(推测):普通销售提成比例或提成金额的配置字段。,示例值及对应分析:当前门店未在商品档案上配置员工提成规则,全部为 0。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.point_sale_royalty IS '对应JSON字段:point_sale_royalty,说明:(推测):积分销售提成/积分赠送规则相关配置。,示例值及对应分析:当前同样未启用。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.pinyin_initial IS '对应JSON字段:pinyin_initial,说明::拼音首字母/助记码。,示例值及对应分析:特征:'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.commodityCode IS '对应JSON字段:commodityCode,说明::,示例值及对应分析:与 commodity_code 是同一信息的数组形式(冗余存储),便于支持一个商品对应多个编码的场景。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.commodity_code IS '对应JSON字段:commodity_code,说明::商品编码(通常为对外商品编码或条码)。,示例值及对应分析:特征:'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.goods_cover IS '对应JSON字段:goods_cover,说明::商品封面图片 URL 地址。,示例值及对应分析:特征:'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.supplier_id IS '对应JSON字段:supplier_id,说明::供应商 ID,用于关联到供应商档案。,示例值及对应分析:当前所有商品都未挂接具体供应商(或门店未使用供应链管理模块)。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.remark_name IS '对应JSON字段:remark_name,说明:(从命名推断):商品备注名/别名,通常用来配置简写或特殊显示名称。,示例值及对应分析:当前门店尚未使用该字段,字段设计为将来扩展预留。'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.create_time IS '对应JSON字段:create_time,说明::商品档案创建时间。,示例值及对应分析:特征:'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.update_time IS '对应JSON字段:update_time,说明::商品档案最近一次修改时间。,示例值及对应分析:分布:'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.tenant_goods_master.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; + +CREATE TABLE IF NOT EXISTS billiards_ods.group_buy_packages ( + id BIGINT PRIMARY KEY, + package_id BIGINT, + package_name TEXT, + selling_price NUMERIC(18,2), + coupon_money NUMERIC(18,2), + date_type INT, + date_info TEXT, + start_time TIMESTAMP, + end_time TIMESTAMP, + start_clock TEXT, + end_clock TEXT, + add_start_clock TEXT, + add_end_clock TEXT, + duration INT, + usable_count INT, + usable_range INT, + table_area_id BIGINT, + table_area_name TEXT, + table_area_id_list JSONB, + tenant_table_area_id BIGINT, + tenant_table_area_id_list JSONB, + site_id BIGINT, + site_name TEXT, + tenant_id BIGINT, + card_type_ids JSONB, + group_type INT, + system_group_type INT, + type INT, + effective_status INT, + is_enabled INT, + is_delete INT, + max_selectable_categories INT, + area_tag_type INT, + creator_name TEXT, + create_time TIMESTAMP, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now(), + payload JSONB NOT NULL +); + +COMMENT ON TABLE billiards_ods.group_buy_packages IS '对应JSON字段:group_buy_packages.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 group_buy_packages-Analysis.md'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.id IS '对应JSON字段:id,说明::门店侧套餐 ID,本文件内部的主键。,示例值及对应分析:特点:17 条记录中均为不同的大整数 ID。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.package_id IS '对应JSON字段:package_id,说明::“上层套餐 ID” 或“总部/系统级套餐 ID”。,示例值及对应分析:特点:'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.package_name IS '对应JSON字段:package_name,说明::团购套餐名称,用于前台展示和核销界面。,示例值及对应分析:示例:'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.selling_price IS '对应JSON字段:selling_price,说明:(结合字段命名):,示例值及对应分析:语义上应该是“团购售卖价”(顾客在平台购买券时的成交价格)。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.coupon_money IS '对应JSON字段:coupon_money,说明::券面值或内部结算面值,表示该套餐在门店侧对应的金额额度。,示例值及对应分析:示例(对应套餐名称):'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.date_type IS '对应JSON字段:date_type,说明:(推测):,示例值及对应分析:典型用法:区分“全部日期可用 / 工作日 / 周末 / 指定日期”等。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.date_info IS '对应JSON字段:date_info,说明:(推测):,示例值及对应分析:预留字段,通常用来存储更细粒度的日期信息,如具体日期列表、节假日特殊规则(可能是 JSON 字符串或编码)。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.start_time IS '对应JSON字段:start_time,说明::套餐开始生效的日期时间。,示例值及对应分析:示例:"2025-07-20 00:00:00" 等。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.end_time IS '对应JSON字段:end_time,说明::套餐失效的日期时间(到这个时间点后不可使用)。,示例值及对应分析:示例:形如 "2025-11-30 23:59:59",部分记录使用 9999-12-31 23:59:59 风格的极大日期表示长期有效(本数据中如有这种值,可解读为“长期有效”)。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.start_clock IS '对应JSON字段:start_clock,说明::每日可用起始时间点(第一段)。,示例值及对应分析:说明:配合 end_clock 使用,定义一个日内时段。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.end_clock IS '对应JSON字段:end_clock,说明::每日可用的结束时间点(第一段)。,示例值及对应分析:结构说明:'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.add_start_clock IS '对应JSON字段:add_start_clock,说明:(推测):附加可用时间段的起始时间(第二段)。,示例值及对应分析:例如有的套餐可以在两个不连续的时段使用:早场 + 夜场,则可用第一段 start_clock / end_clock 和第二段 add_start_clock / add_end_clock 组合。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.add_end_clock IS '对应JSON字段:add_end_clock,说明::附加时段结束时间,多数情况配合 "00:00:00" 或 "10:00:00" 使用。,示例值及对应分析:整体理解:'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.duration IS '对应JSON字段:duration,说明::套餐内包含的时长(秒)。,示例值及对应分析:与名称一致:'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.usable_count IS '对应JSON字段:usable_count,说明::可使用次数上限。,示例值及对应分析:数据特征说明:'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.usable_range IS '对应JSON字段:usable_range,说明:吻合(A区中八/B区中八/斯诺克/KTV/包厢等)。,示例值及对应分析:通过该关联,系统在核销时可以校验:'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.table_area_id IS '对应JSON字段:table_area_id,说明:(推测):,示例值及对应分析:原始设计应为“单一台区 ID”,当套餐只限一个区域可以用这个字段存储。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.table_area_name IS '对应JSON字段:table_area_name,说明::套餐适用的“门店台区名称”,用于显示和筛选。,示例值及对应分析:说明:这个字段是对区域 ID 维度的文字描述,便于直观理解。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.table_area_id_list IS '对应JSON字段:table_area_id_list,说明:(推测):,示例值及对应分析:用来存放具体台区 ID 列表(例如 "1,2,3"),实现更细粒度的台桌限制。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.tenant_table_area_id IS '对应JSON字段:tenant_table_area_id,说明:(推测):,示例值及对应分析:与 table_area_id 类似,是租户层级的台区 ID,原本用于单区选择。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.tenant_table_area_id_list IS '对应JSON字段:tenant_table_area_id_list,说明:(推测):,示例值及对应分析:实际代表“台区集合 ID”或“租户台区配置 ID”,用来限制套餐可用的台区范围。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.site_id IS '对应JSON字段:site_id,说明::门店 ID。,示例值及对应分析:特点:全表值相同,且与其他 JSON 文件中的 site_id 一致,对应“朗朗桌球”这家门店。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.site_name IS '对应JSON字段:site_name,说明::门店名称。,示例值及对应分析:观测值:全部为 "朗朗桌球"。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.tenant_id IS '对应JSON字段:tenant_id,说明::租户 ID(品牌/商户 ID)。,示例值及对应分析:特点:全表值相同,说明所有套餐定义属于同一商户(同一品牌)。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.card_type_ids IS '对应JSON字段:card_type_ids,说明:(推测):,示例值及对应分析:原意是“适用会员卡类型 ID 列表”,例如某套餐只允许某几种会员卡使用,可以在此配置。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.group_type IS '对应JSON字段:group_type,说明:(推测):,示例值及对应分析:团购类型,例如:'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.system_group_type IS '对应JSON字段:system_group_type,说明:(推测):,示例值及对应分析:系统内对团购类型更底层的划分,比如:'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.type IS '对应JSON字段:type,说明:(推测):,示例值及对应分析:内部业务子类型,具体含义需要结合系统文档;仅从数据无法确定是“台费类 vs 包厢类”还是“平台套餐 vs 自定义套餐”。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.effective_status IS '对应JSON字段:effective_status,说明:(结合命名和数据特征推断):,示例值及对应分析:1:有效(在当前时间区间内、配置正常,可核销使用)。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.is_enabled IS '对应JSON字段:is_enabled,说明::启用状态。,示例值及对应分析:从其他表的统一风格来看,1 一般表示“启用 / 上架”,2 表示“停用 / 下架”。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.is_delete IS '对应JSON字段:is_delete,说明::逻辑删除标志。,示例值及对应分析:0:正常;'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.max_selectable_categories IS '对应JSON字段:max_selectable_categories,说明:?????? group_buy_packages-Analysis.md,示例值及对应分析:?? group_buy_packages-Analysis.md'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.area_tag_type IS '对应JSON字段:area_tag_type,说明:(推测):区域标记类型:,示例值及对应分析:1 很可能代表“按台区标签限制”,例如 A区、中八区、包厢、KTV 等。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.creator_name IS '对应JSON字段:creator_name,说明::创建人信息,一般包含“角色:姓名”。,示例值及对应分析:示例:"管理员:郑丽珊"'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.create_time IS '对应JSON字段:create_time,说明::该套餐在系统中创建的时间。,示例值及对应分析:特点:每条记录各不相同,覆盖了 2025-07 至 2025-10 的创建时间。'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.group_buy_packages.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; + +CREATE TABLE IF NOT EXISTS billiards_ods.group_buy_redemption_records ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + site_id BIGINT, + siteName TEXT, + table_id BIGINT, + tableName TEXT, + tableAreaName TEXT, + tenant_table_area_id BIGINT, + order_trade_no TEXT, + order_settle_id BIGINT, + order_pay_id BIGINT, + order_coupon_id BIGINT, + order_coupon_channel INT, + coupon_code TEXT, + coupon_money NUMERIC(18,2), + coupon_origin_id BIGINT, + ledger_name TEXT, + ledger_group_name TEXT, + ledger_amount NUMERIC(18,2), + ledger_count NUMERIC(18,4), + ledger_unit_price NUMERIC(18,4), + ledger_status INT, + table_charge_seconds INT, + promotion_activity_id BIGINT, + promotion_coupon_id BIGINT, + promotion_seconds INT, + offer_type INT, + assistant_promotion_money NUMERIC(18,2), + assistant_service_promotion_money NUMERIC(18,2), + table_service_promotion_money NUMERIC(18,2), + goods_promotion_money NUMERIC(18,2), + recharge_promotion_money NUMERIC(18,2), + reward_promotion_money NUMERIC(18,2), + goodsOptionPrice NUMERIC(18,2), + salesman_name TEXT, + sales_man_org_id BIGINT, + salesman_role_id BIGINT, + salesman_user_id BIGINT, + operator_id BIGINT, + operator_name TEXT, + is_single_order INT, + is_delete INT, + create_time TIMESTAMP, + payload JSONB NOT NULL, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now() +); + +COMMENT ON TABLE billiards_ods.group_buy_redemption_records IS '对应JSON字段:group_buy_redemption_records.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 group_buy_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.id IS '对应JSON字段:id,说明::本条“团购套餐流水”记录的 主键 ID。,示例值及对应分析:作用:唯一标识一条券使用到台费上的记录。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.tenant_id IS '对应JSON字段:tenant_id,说明::租户/品牌 ID。,示例值及对应分析:特点:全表值相同,说明所有记录属于同一租户。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.site_id IS '对应JSON字段:site_id,说明::门店 ID,与其它 JSON 中一致。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.siteName IS '对应JSON字段:siteName,说明::门店名称,冗余展示用。,示例值及对应分析:?? group_buy_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.table_id IS '对应JSON字段:table_id,说明::球台 ID。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.tableName IS '对应JSON字段:tableName,说明::本次使用券所关联的 球台名称/台号。,示例值及对应分析:关联:对应台桌列表中的 table_name / table_no,通过 table_id 进一步关联。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.tableAreaName IS '对应JSON字段:tableAreaName,说明::该球台所属的 台区名称。,示例值及对应分析:关联:与台区配置中的 area_name 含义一致,与团购套餐定义中的 table_area_name 一致。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.tenant_table_area_id IS '对应JSON字段:tenant_table_area_id,说明::租户级台区分组 ID,表示当前使用券的台桌所属的区域组合。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_trade_no IS '对应JSON字段:order_trade_no,说明::订单交易号,和其它消费明细(台费、商品、助教、团购)共用的订单主键。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_settle_id IS '对应JSON字段:order_settle_id,说明::结算单 ID(小票结账主键)。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_pay_id IS '对应JSON字段:order_pay_id,说明:(推测):,示例值及对应分析:指向支付记录表中的支付流水 ID。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_coupon_id IS '对应JSON字段:order_coupon_id,说明::订单中“券使用记录”的 ID。,示例值及对应分析:结构特点:'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.order_coupon_channel IS '对应JSON字段:order_coupon_channel,说明:(推测):,示例值及对应分析:券渠道类型,例如:'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.coupon_code IS '对应JSON字段:coupon_code,说明::团购券券码,核销时扫描/录入的字符串。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.coupon_money IS '对应JSON字段:coupon_money,说明::本次核销时,这张券在门店侧对应的金额额度(“可抵扣金额”)。,示例值及对应分析:结构关系:'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.coupon_origin_id IS '对应JSON字段:coupon_origin_id,说明:(推测):,示例值及对应分析:平台/上游系统中的券记录主键 ID,“券来源 ID”。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_name IS '对应JSON字段:ledger_name,说明::台费侧关联的“团购项目名称”(记账名)。,示例值及对应分析:结构上通常来源于团购套餐定义的 package_name,或由系统在创建活动时生成。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_group_name IS '对应JSON字段:ledger_group_name,说明:(推测):团购项目所属的“记账分组名称”(例如“团购台费”“团购包厢”等)。,示例值及对应分析:当前门店未对团购项目做进一步分组。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_amount IS '对应JSON字段:ledger_amount,说明::本次券实际冲抵台费的金额。,示例值及对应分析:结构关系:'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_count IS '对应JSON字段:ledger_count,说明::按此次优惠实际计算的“核销秒数”。,示例值及对应分析:结构观察:'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_unit_price IS '对应JSON字段:ledger_unit_price,说明::对应台费的标准单价,单位元/小时(从数值来看是类似29.9/小时这种定价)。,示例值及对应分析:作用:配合 ledger_count 用于计算这一条券在台费层面对应的金额(理论上应接近 = 单价 × 秒数/3600)。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.ledger_status IS '对应JSON字段:ledger_status,说明:(推测):流水状态。,示例值及对应分析:1:正常有效;'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.table_charge_seconds IS '对应JSON字段:table_charge_seconds,说明::本次结算中该球台总计计费的秒数(整台的台费计费时间)。,示例值及对应分析:结构特点:'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.promotion_activity_id IS '对应JSON字段:promotion_activity_id,说明:(推测):团购/促销活动 ID。,示例值及对应分析:对应平台或内部促销活动的主键,每个活动通常绑定一个或多个具体套餐(promotion_coupon_id)。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.promotion_coupon_id IS '对应JSON字段:promotion_coupon_id,说明::团购套餐定义 ID。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.promotion_seconds IS '对应JSON字段:promotion_seconds,说明::团购套餐定义的“标准时长”(券本身标称的可用时长)。,示例值及对应分析:结构关系:'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.offer_type IS '对应JSON字段:offer_type,说明:(推测):优惠类型。,示例值及对应分析:在券适用多个优惠方式的系统中,一般用来区分“满减/折扣/代金券/套餐券”等。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.assistant_promotion_money IS '对应JSON字段:assistant_promotion_money,说明::分摊到“助教服务”的促销金额。,示例值及对应分析:当前场景下,团购券只与台费相关,未涉及助教的金额抵扣。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.assistant_service_promotion_money IS '对应JSON字段:assistant_service_promotion_money,说明::进一步细分助教服务的促销金额。,示例值及对应分析:当前未使用。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.table_service_promotion_money IS '对应JSON字段:table_service_promotion_money,说明::本次券使用中,分摊到“台费服务费”部分的促销金额。,示例值及对应分析:当前样本中,促销金额都在 ledger_amount 中体现,该字段未单独拆出。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.goods_promotion_money IS '对应JSON字段:goods_promotion_money,说明::本次券使用中,分摊到“商品”部分的促销金额。,示例值及对应分析:当前数据中,所有团购券都只用于抵扣台费,没有用来抵扣商品,因此该字段为 0。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.recharge_promotion_money IS '对应JSON字段:recharge_promotion_money,说明::来自“充值类优惠”的分摊金额(例如储值赠送部分)。,示例值及对应分析:当前所有数据为 0,但结构上已经预留了“多来源促销金额分摊”的能力。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.reward_promotion_money IS '对应JSON字段:reward_promotion_money,说明::本次促销中,属于“奖励金/积分抵扣”的金额。,示例值及对应分析:当前没有使用此维度的促销。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.goodsOptionPrice IS '对应JSON字段:goodsOptionPrice,说明:(按命名推测):商品规格价格,用于商品类促销分摊时使用。,示例值及对应分析:当前在“团购套餐流水”中未被实际使用。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.salesman_name IS '对应JSON字段:salesman_name,说明::营业员姓名。,示例值及对应分析:?? group_buy_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.sales_man_org_id IS '对应JSON字段:sales_man_org_id,说明::营业员所属组织 ID。,示例值及对应分析:以上 4 个销售相关字段在当前门店的团购套餐使用中都未启用,仅作为结构预留。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.salesman_role_id IS '对应JSON字段:salesman_role_id,说明::营业员角色 ID。,示例值及对应分析:?? group_buy_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.salesman_user_id IS '对应JSON字段:salesman_user_id,说明::营业员/业务员用户 ID。,示例值及对应分析:当前所有团购套餐流水都未指定独立的营业员。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.operator_id IS '对应JSON字段:operator_id,说明::执行本次核销/结算操作的 操作员 ID。,示例值及对应分析:关联:可以与员工档案表中的 id 对应(当前导出中员工表未单独给出,但风格和其它表一致)。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.operator_name IS '对应JSON字段:operator_name,说明::操作员名称(包含角色说明),与 operator_id 对应的冗余展示字段。,示例值及对应分析:?? group_buy_redemption_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.is_single_order IS '对应JSON字段:is_single_order,说明:(推测):是否单独作为一条订单行。,示例值及对应分析:1:以独立条目方式进行结算(绝大部分记录如此)。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.is_delete IS '对应JSON字段:is_delete,说明::逻辑删除标志:,示例值及对应分析:0:正常;'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.create_time IS '对应JSON字段:create_time,说明::本条团购套餐使用流水创建时间(即券核销时间,或与结账时间接近)。,示例值及对应分析:用法:可用于按时间范围过滤团购使用记录。'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; + +CREATE TABLE IF NOT EXISTS billiards_ods.settlement_ticket_details ( + orderSettleId BIGINT PRIMARY KEY, + actualPayment NUMERIC(18,2), + adjustAmount NUMERIC(18,2), + assistantManualDiscount NUMERIC(18,2), + balanceAmount NUMERIC(18,2), + cashierName TEXT, + consumeMoney NUMERIC(18,2), + couponAmount NUMERIC(18,2), + deliveryAddress TEXT, + deliveryFee NUMERIC(18,2), + ledgerAmount NUMERIC(18,2), + memberDeductAmount NUMERIC(18,2), + memberOfferAmount NUMERIC(18,2), + onlineReturnAmount NUMERIC(18,2), + orderRemark TEXT, + orderSettleNumber BIGINT, + payMemberBalance NUMERIC(18,2), + payTime TIMESTAMP, + paymentMethod INT, + pointDiscountCost NUMERIC(18,2), + pointDiscountPrice NUMERIC(18,2), + prepayMoney NUMERIC(18,2), + refundAmount NUMERIC(18,2), + returnGoodsAmount NUMERIC(18,2), + rewardName TEXT, + settleType TEXT, + siteAddress TEXT, + siteBusinessTel TEXT, + siteId BIGINT, + siteName TEXT, + tenantId BIGINT, + tenantName TEXT, + ticketCustomContent TEXT, + ticketRemark TEXT, + voucherMoney NUMERIC(18,2), + memberProfile JSONB, + orderItem JSONB, + tenantMemberCardLogs JSONB, + payload JSONB NOT NULL, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now() +); + +COMMENT ON TABLE billiards_ods.settlement_ticket_details IS '对应JSON字段:settlement_ticket_details.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 settlement_ticket_details-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderSettleId IS '对应JSON字段:orderSettleId,说明::同 data.data.orderSettleId,为结算单 ID 的冗余。,示例值及对应分析:orderType'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.actualPayment IS '对应JSON字段:actualPayment,说明::本单实际支付金额总和(顾客本次实际付出:现金 + 线上 + 会员余额等)。,示例值及对应分析:一般应与支付记录中各支付流水金额汇总相匹配。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.adjustAmount IS '对应JSON字段:adjustAmount,说明::台费层面的人工调价金额(仅台费部分)。,示例值及对应分析:memberDiscountAmount'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.assistantManualDiscount IS '对应JSON字段:assistantManualDiscount,说明::针对“助教项目”的人工减免金额汇总(整单维度)。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.balanceAmount IS '对应JSON字段:balanceAmount,说明::本单通过“会员余额/储值卡”支付的金额(从余额中扣除的总额)。,示例值及对应分析:对应 结账记录.json 的同名字段。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.cashierName IS '对应JSON字段:cashierName,说明::本单结算操作员名称(带角色前缀文字)。,示例值及对应分析:对应员工维表中的某个账号,便于小票上展示“收银员:XXX”。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.consumeMoney IS '对应JSON字段:consumeMoney,说明::本单“消费金额总计”(原价层面),即台费 + 商品 + 助教 + 服务等消费项目的金额总和(未扣除各类优惠)。,示例值及对应分析:对应 结账记录.json 的 consumeMoney 字段。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.couponAmount IS '对应JSON字段:couponAmount,说明::本单由优惠券抵扣的金额汇总。,示例值及对应分析:结构上:应与 orderCouponLedgers.discountAmount 的合计存在关系,但当前导出未填充。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.deliveryAddress IS '对应JSON字段:deliveryAddress,说明::配送地址(若存在外送业务时使用)。,示例值及对应分析:对于球房场景,当前时间范围内未使用。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.deliveryFee IS '对应JSON字段:deliveryFee,说明::配送费金额(如果支持外送业务)。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.ledgerAmount IS '对应JSON字段:ledgerAmount,说明::按台账口径对应的金额,一般与 discountAmount 一致或有固定关系。,示例值及对应分析:rewardPromotionMoney'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.memberDeductAmount IS '对应JSON字段:memberDeductAmount,说明:(结构上):会员抵扣的某种数量或金额(例如积分抵现金额、次卡次数抵扣等),当前数据未启用。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.memberOfferAmount IS '对应JSON字段:memberOfferAmount,说明::由“会员权益/折扣”产生的优惠金额总计(整单维度)。,示例值及对应分析:与 memberProfile 以及台费/商品明细中的 memberDiscountAmount 有对应关系。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.onlineReturnAmount IS '对应JSON字段:onlineReturnAmount,说明::本单通过线上支付渠道退回的金额(如微信/支付宝退款)。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderRemark IS '对应JSON字段:orderRemark,说明::订单备注,由收银员录入,用于记录与本单相关的特殊说明。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderSettleNumber IS '对应JSON字段:orderSettleNumber,说明:(推测):结算单编号(与 ID 独立的一套编号体系,如流水号)。当前导出时间段内未启用。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.payMemberBalance IS '对应JSON字段:payMemberBalance,说明:(结构上):使用会员余额支付的金额,用于区分与 balanceAmount 的不同维度(如“本次支付使用余额部分”与“余额本身变化”等),当前未实际使用。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.payTime IS '对应JSON字段:payTime,说明::本单最终支付成功时间。,示例值及对应分析:和 结账记录.json 中的 payTime 对应,一般与 支付记录.create_time/pay_time 在同一时间段。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.paymentMethod IS '对应JSON字段:paymentMethod,说明::结算主支付方式编码(汇总视角)。,示例值及对应分析:对应 结账记录.json 中的 paymentMethod 字段;'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.pointDiscountCost IS '对应JSON字段:pointDiscountCost,说明::积分抵扣对应的成本金额(成本侧)。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.pointDiscountPrice IS '对应JSON字段:pointDiscountPrice,说明::积分抵扣对应的金额(售价侧)。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.prepayMoney IS '对应JSON字段:prepayMoney,说明::预付金/定金在本单中使用的金额。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.refundAmount IS '对应JSON字段:refundAmount,说明::本单涉及的退款金额(汇总)。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.returnGoodsAmount IS '对应JSON字段:returnGoodsAmount,说明::本单涉及的退货金额汇总。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.rewardName IS '对应JSON字段:rewardName,说明:(结构上):用于标识本单适用的激励方案名称,可能用于内部绩效或活动名称展示。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.settleType IS '对应JSON字段:settleType,说明::结算类型字符串标识。,示例值及对应分析:"SiteOrder":店内消费订单结算。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.siteAddress IS '对应JSON字段:siteAddress,说明::门店地址(详细地址)。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.siteBusinessTel IS '对应JSON字段:siteBusinessTel,说明::门店电话。,示例值及对应分析:用途:用于小票打印上的客服电话。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.siteId IS '对应JSON字段:siteId,说明::门店 ID。,示例值及对应分析:关联:'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.siteName IS '对应JSON字段:siteName,说明::门店名称,如“朗朗桌球”。,示例值及对应分析:用途:小票上展示门店名。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.tenantId IS '对应JSON字段:tenantId,说明::租户 / 商户 ID(品牌维度)。,示例值及对应分析:当前数据:恒定为同一值,表示所有记录都来自同一商户。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.tenantName IS '对应JSON字段:tenantName,说明::租户名称,如“朗朗桌球”。,示例值及对应分析:当前数据:全表统一一个值。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.ticketCustomContent IS '对应JSON字段:ticketCustomContent,说明::自定义小票内容,如商家自定义宣传语、条款等。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.ticketRemark IS '对应JSON字段:ticketRemark,说明::小票备注内容,可用于打印在小票底部或顶部(例如活动说明、特别提示)。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.voucherMoney IS '对应JSON字段:voucherMoney,说明::代金券类金额字段(可能用于某类“代金券余额”或“券面值”记录)。,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.memberProfile IS '对应JSON字段:memberProfile,说明::,示例值及对应分析:不是会员卡主键,而是本次结账时的会员信息快照;'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.orderItem IS '对应JSON字段:orderItem,说明::本次结算对应的“订单明细列表”,这部分是连接“台费流水 / 商品出库 / 券使用”等多个子领域的关键结构。,示例值及对应分析:下面专门展开 orderItem 及其子结构。'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.tenantMemberCardLogs IS '对应JSON字段:tenantMemberCardLogs,说明:?????? settlement_ticket_details-Analysis.md,示例值及对应分析:?? settlement_ticket_details-Analysis.md'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.settlement_ticket_details.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; + +CREATE TABLE IF NOT EXISTS billiards_ods.store_goods_master ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + site_id BIGINT, + siteName TEXT, + tenant_goods_id BIGINT, + goods_name TEXT, + goods_bar_code TEXT, + goods_category_id BIGINT, + goods_second_category_id BIGINT, + oneCategoryName TEXT, + twoCategoryName TEXT, + unit TEXT, + sale_price NUMERIC(18,4), + cost_price NUMERIC(18,4), + cost_price_type INT, + min_discount_price NUMERIC(18,4), + safe_stock NUMERIC(18,4), + stock NUMERIC(18,4), + stock_A NUMERIC(18,4), + sale_num NUMERIC(18,4), + total_purchase_cost NUMERIC(18,4), + total_sales NUMERIC(18,4), + average_monthly_sales NUMERIC(18,4), + batch_stock_quantity NUMERIC(18,2), + days_available INT, + provisional_total_cost NUMERIC(18,2), + enable_status INT, + audit_status INT, + goods_state INT, + is_delete INT, + is_warehousing INT, + able_discount INT, + able_site_transfer INT, + forbid_sell_status INT, + "freeze" INT, + send_state INT, + custom_label_type INT, + option_required INT, + sale_channel INT, + sort INT, + remark TEXT, + pinyin_initial TEXT, + goods_cover TEXT, + create_time TIMESTAMP, + update_time TIMESTAMP, + payload JSONB NOT NULL, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now() +); + +COMMENT ON TABLE billiards_ods.store_goods_master IS '对应JSON字段:store_goods_master.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 store_goods_master-Analysis.md'; +COMMENT ON COLUMN billiards_ods.store_goods_master.id IS '对应JSON字段:id,说明::门店商品 ID,门店维度的商品主键。,示例值及对应分析:用途:在其它文件中经常以 site_goods_id 的名字出现,与这里的 id 一致,用来关联库存记录、销售记录等。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.tenant_id IS '对应JSON字段:tenant_id,说明::租户/品牌 ID。同一品牌下多个门店共享一个 tenant_id。,示例值及对应分析:枚举情况:本文件中为单一固定值(同一品牌)。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.site_id IS '对应JSON字段:site_id,说明::门店 ID。,示例值及对应分析:枚举情况:本文件中为单一固定值(同一家门店“朗朗桌球”),和其它 JSON 中的 site_id 一致。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.siteName IS '对应JSON字段:siteName,说明::门店名称,是对 site_id 的冗余展示,方便直接阅读,无需再去关联门店档案。,示例值及对应分析:2. 商品标识和分类维度'; +COMMENT ON COLUMN billiards_ods.store_goods_master.tenant_goods_id IS '对应JSON字段:tenant_goods_id,说明::租户/品牌维度的商品 ID,相当于“全局商品 ID”。,示例值及对应分析:用途:用于跨门店或与“商品档案(商品档案.json)”对齐时使用。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.goods_name IS '对应JSON字段:goods_name,说明::商品名称,例如“合味道泡面”“地道肠”“麻将房茶位费”等。,示例值及对应分析:用途:业务展示字段,历史流水里也会冗余存一份商品名。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.goods_bar_code IS '对应JSON字段:goods_bar_code,说明::商品条形码(如 EAN-13 编码),用于扫码销售。此字段设计为可填,但此店目前未配置。,示例值及对应分析:?? store_goods_master-Analysis.md'; +COMMENT ON COLUMN billiards_ods.store_goods_master.goods_category_id IS '对应JSON字段:goods_category_id,说明::商品一级分类 ID。,示例值及对应分析:用途:'; +COMMENT ON COLUMN billiards_ods.store_goods_master.goods_second_category_id IS '对应JSON字段:goods_second_category_id,说明::商品二级分类 ID。,示例值及对应分析:用途:'; +COMMENT ON COLUMN billiards_ods.store_goods_master.oneCategoryName IS '对应JSON字段:oneCategoryName,说明::一级分类名称,如“零食”“酒水”“服务费”等。,示例值及对应分析:说明:与 goods_category_id 一一对应,是易读文本字段。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.twoCategoryName IS '对应JSON字段:twoCategoryName,说明::二级分类名称,如“面”“洋酒”“纸巾”等。,示例值及对应分析:说明:与 goods_second_category_id 对应。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.unit IS '对应JSON字段:unit,说明::商品计量单位(销售单位)。,示例值及对应分析:?? store_goods_master-Analysis.md'; +COMMENT ON COLUMN billiards_ods.store_goods_master.sale_price IS '对应JSON字段:sale_price,说明::商品标准销售价(挂牌价),单位为元。,示例值及对应分析:说明:实际结算时可能会打折或用券抵扣,但这个字段表示“定价”。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.cost_price IS '对应JSON字段:cost_price,说明::商品成本价(单件成本)。,示例值及对应分析:观察:'; +COMMENT ON COLUMN billiards_ods.store_goods_master.cost_price_type IS '对应JSON字段:cost_price_type,说明:(结合成本字段推测):,示例值及对应分析:1 代表使用“固定成本价”(手工维护的 cost_price),provisional_total_cost 按“数量 × cost_price”算。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.min_discount_price IS '对应JSON字段:min_discount_price,说明::最低允许成交价(限价)。,示例值及对应分析:用法逻辑(推测):'; +COMMENT ON COLUMN billiards_ods.store_goods_master.safe_stock IS '对应JSON字段:safe_stock,说明::安全库存量(阈值),低于该值时系统可以提示补货。,示例值及对应分析:当前门店尚未设置安全库存,所以全部为 0,仅起到结构占位作用。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.stock IS '对应JSON字段:stock,说明::当前可用库存数量(以 unit 为单位)。,示例值及对应分析:特征:可以是 0(库存卖完),也可以非常大(例如纸巾、茶位费这种按“份”计的虚拟库存设定)。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.stock_A IS '对应JSON字段:stock_A,说明:(系统设计):副单位库存数量。如果商品存在双单位(例如箱/瓶),stock_A 通常用于记录副单位库存。当前门店没有启用副单位库存管理,因此为 0。,示例值及对应分析:batch_stock_quantity'; +COMMENT ON COLUMN billiards_ods.store_goods_master.sale_num IS '对应JSON字段:sale_num,说明::在当前统计口径下的销售数量(总销量,单位同 unit)。,示例值及对应分析:特征:和 total_sales 完全一致(当前导出时的统计口径下),说明两者是同一统计周期。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.total_purchase_cost IS '对应JSON字段:total_purchase_cost,说明::总采购成本,单位为元。,示例值及对应分析:当前数据:与 provisional_total_cost 完全相等。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.total_sales IS '对应JSON字段:total_sales,说明:(从命名看):累计销售数量。,示例值及对应分析:实际:当前数据中 total_sales == sale_num,说明此接口的统计区间 = “截至当前的全部历史”,因此数量一致。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.average_monthly_sales IS '对应JSON字段:average_monthly_sales,说明::平均月销量(件/月),根据某个统计周期内的销售数据折算而来。,示例值及对应分析:结构特征:'; +COMMENT ON COLUMN billiards_ods.store_goods_master.enable_status IS '对应JSON字段:enable_status,说明:(结合名称与常见编码):,示例值及对应分析:1:启用。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.audit_status IS '对应JSON字段:audit_status,说明:(典型业务语义):,示例值及对应分析:2:审核通过。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.goods_state IS '对应JSON字段:goods_state,说明:类型:int,枚举,示例值及对应分析:观察值:'; +COMMENT ON COLUMN billiards_ods.store_goods_master.is_delete IS '对应JSON字段:is_delete,说明::逻辑删除标志。,示例值及对应分析:0:未删除(有效档案);'; +COMMENT ON COLUMN billiards_ods.store_goods_master.is_warehousing IS '对应JSON字段:is_warehousing,说明::是否纳入库存管理。,示例值及对应分析:1:启用库存管理(会有出入库流水)。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.able_discount IS '对应JSON字段:able_discount,说明:(结合命名):,示例值及对应分析:是否允许参与折扣。当前全部为 1,说明所有商品都允许打折。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.able_site_transfer IS '对应JSON字段:able_site_transfer,说明:(结合命名与值分布):,示例值及对应分析:表示是否允许跨门店调拨或跨站点共享库存。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.forbid_sell_status IS '对应JSON字段:forbid_sell_status,说明:类型:int,枚举,示例值及对应分析:观察值:全部为 1。'; +COMMENT ON COLUMN billiards_ods.store_goods_master."freeze" IS '对应JSON字段:freeze,说明::冻结状态。,示例值及对应分析:0:未冻结;'; +COMMENT ON COLUMN billiards_ods.store_goods_master.send_state IS '对应JSON字段:send_state,说明:(命名趋近“上架状态/可售状态”):,示例值及对应分析:1:可销售/可下单。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.custom_label_type IS '对应JSON字段:custom_label_type,说明:(推测):自定义标签类型。,示例值及对应分析:1:使用系统默认标签(未出现);'; +COMMENT ON COLUMN billiards_ods.store_goods_master.option_required IS '对应JSON字段:option_required,说明:(推测):是否需要在销售时选择规格/选项。,示例值及对应分析:1:不要求额外选项(单规格商品);'; +COMMENT ON COLUMN billiards_ods.store_goods_master.sale_channel IS '对应JSON字段:sale_channel,说明::销售渠道类型。,示例值及对应分析:常见模式:'; +COMMENT ON COLUMN billiards_ods.store_goods_master.sort IS '对应JSON字段:sort,说明::前端展示或内部配置的排序号,数值越小/越大排前取决于业务约定。'; +COMMENT ON COLUMN billiards_ods.store_goods_master.remark IS '对应JSON字段:remark,说明::商品备注(可以写口味说明、供应商、注意事项等)。当前尚未使用。,示例值及对应分析:sort'; +COMMENT ON COLUMN billiards_ods.store_goods_master.pinyin_initial IS '对应JSON字段:pinyin_initial,说明::商品名称的拼音首字母缩写,有时多个别名用逗号分隔。,示例值及对应分析:作用:'; +COMMENT ON COLUMN billiards_ods.store_goods_master.goods_cover IS '对应JSON字段:goods_cover,说明::商品图片 URL(如 OSS 对象存储地址),用于前端展示商品图片。,示例值及对应分析:?? store_goods_master-Analysis.md'; +COMMENT ON COLUMN billiards_ods.store_goods_master.create_time IS '对应JSON字段:create_time,说明::门店商品档案创建时间(商品在门店建立档案的时间点)。,示例值及对应分析:?? store_goods_master-Analysis.md'; +COMMENT ON COLUMN billiards_ods.store_goods_master.update_time IS '对应JSON字段:update_time,说明::最后一次修改该商品档案的时间(包括价格调整、状态变更等)。,示例值及对应分析:days_available'; +COMMENT ON COLUMN billiards_ods.store_goods_master.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.store_goods_master.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.store_goods_master.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.store_goods_master.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; + +CREATE TABLE IF NOT EXISTS billiards_ods.store_goods_sales_records ( + id BIGINT PRIMARY KEY, + tenant_id BIGINT, + site_id BIGINT, + siteid BIGINT, + sitename TEXT, + site_goods_id BIGINT, + tenant_goods_id BIGINT, + order_settle_id BIGINT, + order_trade_no TEXT, + order_goods_id BIGINT, + ordergoodsid BIGINT, + order_pay_id BIGINT, + order_coupon_id BIGINT, + ledger_name TEXT, + ledger_group_name TEXT, + ledger_amount NUMERIC(18,2), + ledger_count NUMERIC(18,4), + ledger_unit_price NUMERIC(18,4), + ledger_status INT, + discount_money NUMERIC(18,2), + discount_price NUMERIC(18,2), + coupon_deduct_money NUMERIC(18,2), + member_discount_amount NUMERIC(18,2), + option_coupon_deduct_money NUMERIC(18,2), + option_member_discount_money NUMERIC(18,2), + point_discount_money NUMERIC(18,2), + point_discount_money_cost NUMERIC(18,2), + real_goods_money NUMERIC(18,2), + cost_money NUMERIC(18,2), + push_money NUMERIC(18,2), + sales_type INT, + is_single_order INT, + is_delete INT, + goods_remark TEXT, + option_price NUMERIC(18,2), + option_value_name TEXT, + option_name TEXT, + member_coupon_id BIGINT, + package_coupon_id BIGINT, + sales_man_org_id BIGINT, + salesman_name TEXT, + salesman_role_id BIGINT, + salesman_user_id BIGINT, + operator_id BIGINT, + operator_name TEXT, + openSalesman TEXT, + returns_number INT, + site_table_id BIGINT, + tenant_goods_business_id BIGINT, + tenant_goods_category_id BIGINT, + create_time TIMESTAMP, + payload JSONB NOT NULL, + source_file TEXT, + source_endpoint TEXT, + fetched_at TIMESTAMPTZ DEFAULT now() +); + +COMMENT ON TABLE billiards_ods.store_goods_sales_records IS '对应JSON字段:store_goods_sales_records.json,说明:ODS 原始明细表(保留payload),示例值及对应分析:详见 store_goods_sales_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.id IS '对应JSON字段:id,说明::本条「门店销售流水」记录的主键 ID。,示例值及对应分析:用途:在系统内部唯一标识这一条销售明细。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_id IS '对应JSON字段:tenant_id,说明::租户/品牌 ID。,示例值及对应分析:特征:所有记录为同一个值,对应「非球科技系统中你的商户」。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.site_id IS '对应JSON字段:site_id,说明::门店 ID(系统主键)。,示例值及对应分析:关系:'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.site_goods_id IS '对应JSON字段:site_goods_id,说明::门店商品 ID。,示例值及对应分析:关系:'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_goods_id IS '对应JSON字段:tenant_goods_id,说明::租户(品牌)级商品 ID(全局商品 ID)。,示例值及对应分析:关系:'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_settle_id IS '对应JSON字段:order_settle_id,说明:与台费、助教、团购套餐流水等表共享,形成「订单主表(结算)– 多种明细表」的结构。,示例值及对应分析:如果结账记录表有数据,order_settle_id 对应那里的主键,create_time 与订单结束时间基本一致。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_trade_no IS '对应JSON字段:order_trade_no,说明:与台费、助教、团购套餐流水等表共享,形成「订单主表(结算)– 多种明细表」的结构。,示例值及对应分析:如果结账记录表有数据,order_settle_id 对应那里的主键,create_time 与订单结束时间基本一致。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_goods_id IS '对应JSON字段:order_goods_id,说明::订单商品明细 ID(订单内部的商品行主键)。,示例值及对应分析:关系:'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_pay_id IS '对应JSON字段:order_pay_id,说明:连接到「支付记录」中的一条支付流水,再通过支付的 relate_type/relate_id 把支付和订单、充值等业务区分开。,示例值及对应分析:对于退款,则通过退款记录里的 relate_type/relate_id 反向关联到原来的订单或支付。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.order_coupon_id IS '对应JSON字段:order_coupon_id,说明::订单级优惠券 ID。,示例值及对应分析:关系:'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_name IS '对应JSON字段:ledger_name,说明::销售项目名称(商品名称),例如 “哇哈哈矿泉水”“地道肠”“东方树叶”等。,示例值及对应分析:说明:业务展示用字段,历史流水即使商品改名,这里会保留当时的名字。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_group_name IS '对应JSON字段:ledger_group_name,说明::销售项目所属的「门店内部分组名称」,类似前台菜单分组或大类标签。,示例值及对应分析:关系:'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_amount IS '对应JSON字段:ledger_amount,说明::原始应收金额,公式上接近 ledger_unit_price × ledger_count。,示例值及对应分析:说明:这是未考虑优惠前的金额基础,用于后续计算折扣和抵扣。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_count IS '对应JSON字段:ledger_count,说明::销售数量(以 unit 为单位,unit 字段在门店商品档案中)。,示例值及对应分析:观测值:如 1, 2, 3, 6, 36 等。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_unit_price IS '对应JSON字段:ledger_unit_price,说明::商品在该次销售中的「结算单价」(元/单位)。,示例值及对应分析:观测值示例:5.0, 8.0, 2.0, 10.0, 72.0 等。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.ledger_status IS '对应JSON字段:ledger_status,说明::销售流水状态。,示例值及对应分析:1:正常有效。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.discount_money IS '对应JSON字段:discount_money,说明::本条销售明细的「价格优惠金额」,即原价部分被减免掉的金额。,示例值及对应分析:典型关系:'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.coupon_deduct_money IS '对应JSON字段:coupon_deduct_money,说明::被优惠券 / 团购券直接抵扣到这条商品明细上的金额。,示例值及对应分析:说明:'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.member_discount_amount IS '对应JSON字段:member_discount_amount,说明::由会员身份(会员折扣)针对这一行商品产生的优惠金额。,示例值及对应分析:说明:尽管字段存在,但当前实际折扣可能合并反映在 discount_money 中,这个字段没有拆开体现。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_coupon_deduct_money IS '对应JSON字段:option_coupon_deduct_money,说明::由优惠券抵扣“选项价格”的金额。,示例值及对应分析:上面这三个 option_* 字段,是为“主商品 + 选项”的更复杂计价方式预留的,本店当前所有记录都是单规格,选项体系未启用。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_member_discount_money IS '对应JSON字段:option_member_discount_money,说明::由会员折扣作用在“选项价格”上的优惠金额。,示例值及对应分析:?? store_goods_sales_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.point_discount_money IS '对应JSON字段:point_discount_money,说明::由积分抵扣的金额(顾客兑换积分抵现金额)。,示例值及对应分析:?? store_goods_sales_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.point_discount_money_cost IS '对应JSON字段:point_discount_money_cost,说明::积分抵扣对应的“成本金额”(后台核算用),例如按积分成本来计提费用。,示例值及对应分析:?? store_goods_sales_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.real_goods_money IS '对应JSON字段:real_goods_money,说明::商品实际入账金额(考虑折扣、可能还会考虑其它抵扣后的实际销售金额)。,示例值及对应分析:观测值:5.0, 10.0, 8.0, 6.0, 4.0 等。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.cost_money IS '对应JSON字段:cost_money,说明::本条销售对应的成本金额(以元计)。,示例值及对应分析:观测示例:0.01, 0.00, 3.58, 1.79, 0.64 等。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.push_money IS '对应JSON字段:push_money,说明::本条销售对应的提成金额(给营业员/促销员的提成)。,示例值及对应分析:在启用营业员体系时,这里才会出现正数。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.sales_type IS '对应JSON字段:sales_type,说明::销售类型。,示例值及对应分析:1:正常销售;'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.is_single_order IS '对应JSON字段:is_single_order,说明::是否单独订单标识。,示例值及对应分析:1:作为独立明细参与某个订单结算;'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.is_delete IS '对应JSON字段:is_delete,说明::逻辑删除标志。,示例值及对应分析:0:正常有效;'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.goods_remark IS '对应JSON字段:goods_remark,说明::商品备注/口味说明/特殊说明。,示例值及对应分析:用途:点单时如果需要额外说明,可以写在这里。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_price IS '对应JSON字段:option_price,说明::商品选项(规格/加料)的附加价格。,示例值及对应分析:说明:如加冰、加料、升级大杯等产生附加费用时,理论上应该体现到这里。当前门店未使用此功能。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_value_name IS '对应JSON字段:option_value_name,说明::商品选项名称(如规格、口味:大杯/小杯,不加冰等)。,示例值及对应分析:结构用途:'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.option_name IS '对应JSON字段:option_name,说明:?????? store_goods_sales_records-Analysis.md,示例值及对应分析:?? store_goods_sales_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.member_coupon_id IS '对应JSON字段:member_coupon_id,说明::会员券 ID(比如会员专享优惠券)。,示例值及对应分析:当前数据未使用,属于为会员权益预留的字段。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.package_coupon_id IS '对应JSON字段:package_coupon_id,说明::套餐券 ID。,示例值及对应分析:关系:'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.sales_man_org_id IS '对应JSON字段:sales_man_org_id,说明::营业员所属组织/部门 ID。,示例值及对应分析:当前门店全部为 0,说明未启用这套销售员分组织的体系。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.salesman_name IS '对应JSON字段:salesman_name,说明::营业员姓名(如果有为具体销售员记业绩,则在此填姓名)。,示例值及对应分析:?? store_goods_sales_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.salesman_role_id IS '对应JSON字段:salesman_role_id,说明::营业员的系统角色 ID(例如某个角色代码表示“销售员”)。,示例值及对应分析:?? store_goods_sales_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.salesman_user_id IS '对应JSON字段:salesman_user_id,说明::营业员用户 ID(系统账号 ID)。,示例值及对应分析:?? store_goods_sales_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.operator_id IS '对应JSON字段:operator_id,说明::操作员 ID(录入这笔销售的员工)。,示例值及对应分析:关系:'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.operator_name IS '对应JSON字段:operator_name,说明::操作员姓名,文字冗余。,示例值及对应分析:?? store_goods_sales_records-Analysis.md'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.openSalesman IS '对应JSON字段:openSalesman,说明:(结合系统其它文件推断):,示例值及对应分析:1:启用“营业员/销售员”机制(要指定 salesman);'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.site_table_id IS '对应JSON字段:site_table_id,说明::球台 ID。,示例值及对应分析:非 0:销售记录关联到具体某张桌台(例如顾客在台上点饮料)。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_goods_business_id IS '对应JSON字段:tenant_goods_business_id,说明::租户级商品「业务大类」ID(例如“零食类”“酒水类”等更高维度)。,示例值及对应分析:2.2 门店 / 球台维度字段'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.tenant_goods_category_id IS '对应JSON字段:tenant_goods_category_id,说明::租户级商品一级分类 ID。,示例值及对应分析:关系:'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.create_time IS '对应JSON字段:create_time,说明::销售记录创建时间,通常就是结账时间或录入时间。,示例值及对应分析:用途:用于按时间维度查询销售流水,与订单层的时间字段对齐。'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.payload IS '对应JSON字段:payload,说明:完整原始 JSON 内容,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.source_file IS '对应JSON字段:source_file,说明:原始文件名(含时间戳后缀),示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.source_endpoint IS '对应JSON字段:source_endpoint,说明:抓取来源接口/URL 标识,示例值及对应分析:???????'; +COMMENT ON COLUMN billiards_ods.store_goods_sales_records.fetched_at IS '对应JSON字段:fetched_at,说明:入库时间(ETL 拉取时间),示例值及对应分析:???????'; diff --git a/tmp/schema_dwd_doc.sql b/tmp/schema_dwd_doc.sql new file mode 100644 index 0000000..b4d2d3d --- /dev/null +++ b/tmp/schema_dwd_doc.sql @@ -0,0 +1,1878 @@ +-- Generated from DWD?????.docx; includes column comments from?? +CREATE SCHEMA IF NOT EXISTS billiards_dwd; +SET search_path TO billiards_dwd; + +-- SCD2 字段统一默认值、中文注释、唯一性(业务键 + 时间段不重叠)控制 +CREATE EXTENSION IF NOT EXISTS btree_gist; + +DO $$ +DECLARE + rec RECORD; +BEGIN + -- 统一 SCD2 默认值与注释,避免后续手工遗漏 + FOR rec IN + SELECT table_name + FROM information_schema.columns + WHERE table_schema = 'billiards_dwd' + AND column_name = 'scd2_start_time' + LOOP + EXECUTE format('ALTER TABLE billiards_dwd.%I ALTER COLUMN scd2_start_time SET DEFAULT now()', rec.table_name); + EXECUTE format('ALTER TABLE billiards_dwd.%I ALTER COLUMN scd2_end_time SET DEFAULT ''9999-12-31''', rec.table_name); + EXECUTE format('ALTER TABLE billiards_dwd.%I ALTER COLUMN scd2_is_current SET DEFAULT 1', rec.table_name); + EXECUTE format('ALTER TABLE billiards_dwd.%I ALTER COLUMN scd2_version SET DEFAULT 1', rec.table_name); + + EXECUTE format('COMMENT ON COLUMN billiards_dwd.%I.scd2_start_time IS ''SCD2 开始时间(版本生效起点)''', rec.table_name); + EXECUTE format('COMMENT ON COLUMN billiards_dwd.%I.scd2_end_time IS ''SCD2 结束时间(默认 9999-12-31,表示当前版本仍有效)''', rec.table_name); + EXECUTE format('COMMENT ON COLUMN billiards_dwd.%I.scd2_is_current IS ''SCD2 当前版本标记:1=当前版本,0=历史版本''', rec.table_name); + EXECUTE format('COMMENT ON COLUMN billiards_dwd.%I.scd2_version IS ''SCD2 版本号,自增,配合时间段避免重叠''', rec.table_name); + END LOOP; + + -- 约束:同一业务键时间段不重叠,且仅有一条当前版本 + FOR rec IN ( + SELECT tc.table_name, + string_agg(format('%I WITH =', kcu.column_name), ', ' ORDER BY kcu.ordinal_position) AS pk_eq_expr, + string_agg(format('%I', kcu.column_name), ', ' ORDER BY kcu.ordinal_position) AS pk_cols + FROM information_schema.table_constraints tc + JOIN information_schema.key_column_usage kcu + ON tc.table_schema = kcu.table_schema + AND tc.table_name = kcu.table_name + AND tc.constraint_name = kcu.constraint_name + WHERE tc.table_schema = 'billiards_dwd' + AND tc.constraint_type = 'PRIMARY KEY' + AND EXISTS ( + SELECT 1 FROM information_schema.columns c + WHERE c.table_schema = 'billiards_dwd' + AND c.table_name = tc.table_name + AND c.column_name = 'scd2_start_time' + ) + GROUP BY tc.table_name + ) + LOOP + IF NOT EXISTS ( + SELECT 1 FROM pg_constraint + WHERE conname = format('%s_scd2_no_overlap', rec.table_name) + AND conrelid = format('billiards_dwd.%s', rec.table_name)::regclass + ) THEN + EXECUTE format( + 'ALTER TABLE billiards_dwd.%I ADD CONSTRAINT %I EXCLUDE USING gist (%s, tstzrange(scd2_start_time, scd2_end_time) WITH &&) WHERE (scd2_is_current = 1);', + rec.table_name, + rec.table_name || '_scd2_no_overlap', + rec.pk_eq_expr + ); + END IF; + + IF to_regclass(format('billiards_dwd.%s_scd2_current_unique_idx', rec.table_name)) IS NULL THEN + EXECUTE format( + 'CREATE UNIQUE INDEX %I ON billiards_dwd.%I (%s) WHERE (scd2_is_current = 1);', + rec.table_name || '_scd2_current_unique_idx', + rec.table_name, + rec.pk_cols + ); + END IF; + END LOOP; +END +$$; + +-- SCD2 统一约定(DIM 表使用): +-- SCD2_start_time TIMESTAMPTZ DEFAULT now() -- 版本开始时间 +-- SCD2_end_time TIMESTAMPTZ DEFAULT '9999-12-31' -- 版本结束时间 +-- SCD2_is_current INT DEFAULT 1 -- 当前版本标记(1当前/0历史) +-- SCD2_version INT DEFAULT 1 -- 版本号,自增 + +-- dim_site +CREATE TABLE IF NOT EXISTS dim_site ( + site_id BIGINT, + org_id BIGINT, + tenant_id BIGINT, + shop_name TEXT, + site_label TEXT, + full_address TEXT, + address TEXT, + longitude NUMERIC(10,6), + latitude NUMERIC(10,6), + tenant_site_region_id BIGINT, + business_tel TEXT, + site_type INTEGER, + shop_status INTEGER, + SCD2_start_time TIMESTAMPTZ DEFAULT now(), + SCD2_end_time TIMESTAMPTZ DEFAULT '9999-12-31', + SCD2_is_current INT DEFAULT 1, + SCD2_version INT DEFAULT 1, + PRIMARY KEY (site_id) +); +COMMENT ON COLUMN dim_site.site_id IS '???? ID?????????????????? site_id ??? | ??: siteProfile.id | ??: ??'; +COMMENT ON COLUMN dim_site.org_id IS '???? ID?????????? | ??: siteProfile.org_id | ??: ??'; +COMMENT ON COLUMN dim_site.tenant_id IS '?? ID????? tenant_id ??? | ??: siteProfile.tenant_id | ??: ??'; +COMMENT ON COLUMN dim_site.shop_name IS '????????? | ??: siteProfile.shop_name'; +COMMENT ON COLUMN dim_site.site_label IS '???????????????? | ??: siteProfile.site_label'; +COMMENT ON COLUMN dim_site.full_address IS '??????? | ??: siteProfile.full_address'; +COMMENT ON COLUMN dim_site.address IS '???????????? | ??: siteProfile.address'; +COMMENT ON COLUMN dim_site.longitude IS '???????? | ??: siteProfile.longitude'; +COMMENT ON COLUMN dim_site.latitude IS '???????? | ??: siteProfile.latitude'; +COMMENT ON COLUMN dim_site.tenant_site_region_id IS '????/?????????? | ??: siteProfile.tenant_site_region_id'; +COMMENT ON COLUMN dim_site.business_tel IS '????? | ??: siteProfile.business_tel'; +COMMENT ON COLUMN dim_site.site_type IS '??????????????????? | ??: siteProfile.site_type'; +COMMENT ON COLUMN dim_site.shop_status IS '??????????????????? | ??: siteProfile.shop_status'; + +-- dim_site_Ex +CREATE TABLE IF NOT EXISTS dim_site_Ex ( + site_id BIGINT, + avatar TEXT, + address TEXT, + longitude NUMERIC(9,6), + latitude NUMERIC(9,6), + tenant_site_region_id BIGINT, + auto_light INTEGER, + light_status INTEGER, + light_type INTEGER, + light_token TEXT, + site_type INTEGER, + site_label TEXT, + attendance_enabled INTEGER, + attendance_distance INTEGER, + customer_service_qrcode TEXT, + customer_service_wechat TEXT, + fixed_pay_qrCode TEXT, + prod_env TEXT, + shop_status INTEGER, + create_time TIMESTAMPTZ, + update_time TIMESTAMPTZ, + SCD2_start_time TIMESTAMPTZ DEFAULT now(), + SCD2_end_time TIMESTAMPTZ DEFAULT '9999-12-31', + SCD2_is_current INT DEFAULT 1, + SCD2_version INT DEFAULT 1, + PRIMARY KEY (site_id) +); +COMMENT ON COLUMN dim_site_Ex.site_id IS '门店主键 ID,唯一标识一家门店。与所有事实表中的 site_id 对应。 | 来源: siteProfile.id | 角色: 主键'; +COMMENT ON COLUMN dim_site_Ex.avatar IS '门店头像 URL。 | 来源: siteProfile.avatar'; +COMMENT ON COLUMN dim_site_Ex.address IS '地址简写。 | 来源: siteProfile.address'; +COMMENT ON COLUMN dim_site_Ex.longitude IS '经度。 | 来源: siteProfile.longitude'; +COMMENT ON COLUMN dim_site_Ex.latitude IS '纬度。 | 来源: siteProfile.latitude'; +COMMENT ON COLUMN dim_site_Ex.tenant_site_region_id IS '地区编码。 | 来源: siteProfile.tenant_site_region_id'; +COMMENT ON COLUMN dim_site_Ex.auto_light IS '是否自动控制灯光:1=是,2=否(根据系统约定)。 | 来源: siteProfile.auto_light'; +COMMENT ON COLUMN dim_site_Ex.light_status IS '灯光状态,系统预留字段。 | 来源: siteProfile.light_status'; +COMMENT ON COLUMN dim_site_Ex.light_type IS '灯光类型,预留字段。 | 来源: siteProfile.light_type'; +COMMENT ON COLUMN dim_site_Ex.light_token IS '灯光控制令牌。 | 来源: siteProfile.light_token'; +COMMENT ON COLUMN dim_site_Ex.site_type IS '门店类型枚举(未在导出中说明,视系统配置)。 | 来源: siteProfile.site_type'; +COMMENT ON COLUMN dim_site_Ex.site_label IS '门店标签,展示用。 | 来源: siteProfile.site_label'; +COMMENT ON COLUMN dim_site_Ex.attendance_enabled IS '门店是否启用考勤功能:1=启用,2=不启用。 | 来源: siteProfile.attendance_enabled'; +COMMENT ON COLUMN dim_site_Ex.attendance_distance IS '考勤打卡距离限制(米)。 | 来源: siteProfile.attendance_distance'; +COMMENT ON COLUMN dim_site_Ex.customer_service_qrcode IS '客服二维码 URL。 | 来源: siteProfile.customer_service_qrcode'; +COMMENT ON COLUMN dim_site_Ex.customer_service_wechat IS '客服微信号。 | 来源: siteProfile.customer_service_wechat'; +COMMENT ON COLUMN dim_site_Ex.fixed_pay_qrCode IS '固定收款二维码。 | 来源: siteProfile.fixed_pay_qrCode'; +COMMENT ON COLUMN dim_site_Ex.prod_env IS '环境标记(生产/测试)。 | 来源: siteProfile.prod_env'; +COMMENT ON COLUMN dim_site_Ex.shop_status IS '门店状态,未在文档解释。 | 来源: siteProfile.shop_status'; +COMMENT ON COLUMN dim_site_Ex.create_time IS '门店创建时间。 | 来源: siteProfile.create_time'; +COMMENT ON COLUMN dim_site_Ex.update_time IS '门店最近更新时间。 | 来源: siteProfile.update_time'; + +-- dim_table +CREATE TABLE IF NOT EXISTS dim_table ( + table_id BIGINT, + site_id BIGINT, + table_name TEXT, + site_table_area_id BIGINT, + site_table_area_name TEXT, + tenant_table_area_id BIGINT, + table_price NUMERIC(18,2), + SCD2_start_time TIMESTAMPTZ DEFAULT now(), + SCD2_end_time TIMESTAMPTZ DEFAULT '9999-12-31', + SCD2_is_current INT DEFAULT 1, + SCD2_version INT DEFAULT 1, + PRIMARY KEY (table_id) +); +COMMENT ON COLUMN dim_table.table_id IS '台桌主键,唯一标识一张台或包厢。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_table.site_id IS '门店 ID。 | 来源: siteId | 角色: 外键'; +COMMENT ON COLUMN dim_table.table_name IS '台桌名称/编号,如 A17、888。 | 来源: tableName'; +COMMENT ON COLUMN dim_table.site_table_area_id IS '门店区 ID,用于区分 A区/B区/补时区等。 | 来源: siteTableAreaId | 角色: 外键'; +COMMENT ON COLUMN dim_table.site_table_area_name IS '区域名称,如 “A区”“补时长”。 | 来源: siteTableAreaName'; +COMMENT ON COLUMN dim_table.tenant_table_area_id IS '租户级区域 ID。 | 来源: tenantTableAreaId | 角色: 外键'; +COMMENT ON COLUMN dim_table.table_price IS '台桌基础单价,从table_fee_transactions取值。方法:对应本表id,table_fee_transactions表的site_table_id。'; + +-- dim_table_Ex +CREATE TABLE IF NOT EXISTS dim_table_Ex ( + table_id BIGINT, + show_status INTEGER, + is_online_reservation INTEGER, + table_cloth_use_time INTEGER, + table_cloth_use_cycle INTEGER, + table_status INTEGER, + SCD2_start_time TIMESTAMPTZ DEFAULT now(), + SCD2_end_time TIMESTAMPTZ DEFAULT '9999-12-31', + SCD2_is_current INT DEFAULT 1, + SCD2_version INT DEFAULT 1, + PRIMARY KEY (table_id) +); +COMMENT ON COLUMN dim_table_Ex.table_id IS '台桌主键,唯一标识一张台或包厢。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_table_Ex.show_status IS '显示状态:1=正常台;其他值=特殊用途(包厢、补时长等)。 | 来源: showStatus'; +COMMENT ON COLUMN dim_table_Ex.is_online_reservation IS '是否可线上预约:1=是,2=否。 | 来源: isOnlineReservation'; +COMMENT ON COLUMN dim_table_Ex.table_cloth_use_time IS '已使用台呢时长(秒)。 | 来源: tableClothUseTime'; +COMMENT ON COLUMN dim_table_Ex.table_cloth_use_cycle IS '台呢更换周期阈值(秒)。 | 来源: tableClothUseCycle'; +COMMENT ON COLUMN dim_table_Ex.table_status IS '当前台桌状态:1=空闲,2=使用中,3=暂停中,4=锁定。 | 来源: tableStatus'; + +-- dim_assistant +CREATE TABLE IF NOT EXISTS dim_assistant ( + assistant_id BIGINT, + user_id BIGINT, + assistant_no TEXT, + real_name TEXT, + nickname TEXT, + mobile TEXT, + tenant_id BIGINT, + site_id BIGINT, + team_id BIGINT, + team_name TEXT, + level INTEGER, + entry_time TIMESTAMPTZ, + resign_time TIMESTAMPTZ, + leave_status INTEGER, + assistant_status INTEGER, + SCD2_start_time TIMESTAMPTZ, + SCD2_end_time TIMESTAMPTZ, + SCD2_is_current INT, + SCD2_version INT, + PRIMARY KEY (assistant_id) +); +COMMENT ON COLUMN dim_assistant.assistant_id IS '助教账号 ID,关联助教服务流水表。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_assistant.user_id IS '系统用户 ID,用于统一跨模块身份。 | 来源: user_id | 角色: 外键'; +COMMENT ON COLUMN dim_assistant.assistant_no IS '助教工号/编号,业务识别用。 | 来源: assistant_no'; +COMMENT ON COLUMN dim_assistant.real_name IS '助教真实姓名。 | 来源: real_name'; +COMMENT ON COLUMN dim_assistant.nickname IS '前台展示昵称。 | 来源: nickname'; +COMMENT ON COLUMN dim_assistant.mobile IS '手机号码。 | 来源: mobile'; +COMMENT ON COLUMN dim_assistant.tenant_id IS '租户 ID。 | 来源: tenant_id | 角色: 外键'; +COMMENT ON COLUMN dim_assistant.site_id IS '门店 ID。 | 来源: site_id | 角色: 外键'; +COMMENT ON COLUMN dim_assistant.team_id IS '助教团队 ID。 | 来源: team_id | 角色: 外键'; +COMMENT ON COLUMN dim_assistant.team_name IS '团队名称。 | 来源: team_name'; +COMMENT ON COLUMN dim_assistant.level IS '助教等级:8=管理员、10=初级、20=中级、30=高级、40=专家。 | 来源: level'; +COMMENT ON COLUMN dim_assistant.entry_time IS '入职时间。 | 来源: entry_time'; +COMMENT ON COLUMN dim_assistant.resign_time IS '离职时间;远未来日期表示在职。 | 来源: resign_time'; +COMMENT ON COLUMN dim_assistant.leave_status IS '在职状态:0=在职,1=已离职。 | 来源: leave_status'; +COMMENT ON COLUMN dim_assistant.assistant_status IS '账号启用状态:1=启用,2=停用/冻结。 | 来源: assistant_status'; + +-- dim_assistant_Ex +CREATE TABLE IF NOT EXISTS dim_assistant_Ex ( + assistant_id BIGINT, + gender INTEGER, + birth_date TIMESTAMPTZ, + avatar TEXT, + introduce TEXT, + video_introduction_url TEXT, + height NUMERIC(5,2), + weight NUMERIC(5,2), + shop_name TEXT, + group_id BIGINT, + group_name TEXT, + person_org_id BIGINT, + staff_id BIGINT, + staff_profile_id BIGINT, + assistant_grade DOUBLE PRECISION, + sum_grade DOUBLE PRECISION, + get_grade_times INTEGER, + charge_way INTEGER, + allow_cx INTEGER, + is_guaranteed INTEGER, + salary_grant_enabled INTEGER, + entry_type INTEGER, + entry_sign_status INTEGER, + resign_sign_status INTEGER, + work_status INTEGER, + show_status INTEGER, + show_sort INTEGER, + online_status INTEGER, + is_delete INTEGER, + criticism_status INTEGER, + create_time TIMESTAMPTZ, + update_time TIMESTAMPTZ, + start_time TIMESTAMPTZ, + end_time TIMESTAMPTZ, + last_table_id BIGINT, + last_table_name TEXT, + last_update_name TEXT, + order_trade_no BIGINT, + ding_talk_synced INTEGER, + site_light_cfg_id BIGINT, + light_equipment_id TEXT, + light_status INTEGER, + is_team_leader INTEGER, + serial_number BIGINT, + SCD2_start_time TIMESTAMPTZ, + SCD2_end_time TIMESTAMPTZ, + SCD2_is_current INT, + SCD2_version INT, + PRIMARY KEY (assistant_id) +); +COMMENT ON COLUMN dim_assistant_Ex.assistant_id IS '助教账号 ID,关联助教服务流水表。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_assistant_Ex.gender IS '性别枚举:0=未填/保密,1=男,2=女。 | 来源: gender'; +COMMENT ON COLUMN dim_assistant_Ex.birth_date IS '出生日期,默认为 0001-01-01 表示未设置。 | 来源: birth_date'; +COMMENT ON COLUMN dim_assistant_Ex.avatar IS '头像 URL。 | 来源: avatar'; +COMMENT ON COLUMN dim_assistant_Ex.introduce IS '个人简介文案(目前为空)。 | 来源: introduce'; +COMMENT ON COLUMN dim_assistant_Ex.video_introduction_url IS '视频介绍 URL。 | 来源: video_introduction_url'; +COMMENT ON COLUMN dim_assistant_Ex.height IS '身高(厘米),0 表示未填。 | 来源: height'; +COMMENT ON COLUMN dim_assistant_Ex.weight IS '体重(公斤),0 表示未填。 | 来源: weight'; +COMMENT ON COLUMN dim_assistant_Ex.shop_name IS '门店名称。 | 来源: shop_name'; +COMMENT ON COLUMN dim_assistant_Ex.group_id IS '上级分组 ID,未使用。 | 来源: group_id'; +COMMENT ON COLUMN dim_assistant_Ex.group_name IS '上级分组名称,空。 | 来源: group_name'; +COMMENT ON COLUMN dim_assistant_Ex.person_org_id IS '人事组织 ID,用于权限和报表分组。 | 来源: person_org_id'; +COMMENT ON COLUMN dim_assistant_Ex.staff_id IS '预留员工 ID(全部为0)。 | 来源: staff_id'; +COMMENT ON COLUMN dim_assistant_Ex.staff_profile_id IS '外部人事档案 ID(全部为0)。 | 来源: staff_profile_id'; +COMMENT ON COLUMN dim_assistant_Ex.assistant_grade IS '平均评分(0 表示暂无)。 | 来源: assistant_grade'; +COMMENT ON COLUMN dim_assistant_Ex.sum_grade IS '总评分累加值。 | 来源: sum_grade'; +COMMENT ON COLUMN dim_assistant_Ex.get_grade_times IS '累计评分次数。 | 来源: get_grade_times'; +COMMENT ON COLUMN dim_assistant_Ex.charge_way IS '计费方式:2=计时,其他未出现。 | 来源: charge_way'; +COMMENT ON COLUMN dim_assistant_Ex.allow_cx IS '是否允许促销计费:1=允许。 | 来源: allow_cx'; +COMMENT ON COLUMN dim_assistant_Ex.is_guaranteed IS '是否有保底:1=是。 | 来源: is_guaranteed'; +COMMENT ON COLUMN dim_assistant_Ex.salary_grant_enabled IS '薪资发放开关(值2,具体含义未知)。 | 来源: salary_grant_enabled'; +COMMENT ON COLUMN dim_assistant_Ex.entry_type IS '入职类型:1=正式;其他未出现。 | 来源: entry_type'; +COMMENT ON COLUMN dim_assistant_Ex.entry_sign_status IS '入职签约状态:0=未签约,1=已签约(未出现)。 | 来源: entry_sign_status'; +COMMENT ON COLUMN dim_assistant_Ex.resign_sign_status IS '离职签约状态,未出现非 0。 | 来源: resign_sign_status'; +COMMENT ON COLUMN dim_assistant_Ex.work_status IS '工作状态:1=在岗,2=离岗。与 leave_status 呼应。 | 来源: work_status'; +COMMENT ON COLUMN dim_assistant_Ex.show_status IS '前台展示状态:1=显示;其他值未出现。 | 来源: show_status'; +COMMENT ON COLUMN dim_assistant_Ex.show_sort IS '前端排序序号。 | 来源: show_sort'; +COMMENT ON COLUMN dim_assistant_Ex.online_status IS '在线状态:1=在线。 | 来源: online_status'; +COMMENT ON COLUMN dim_assistant_Ex.is_delete IS '逻辑删除标记:0=未删除,1=已删除。 | 来源: is_delete'; +COMMENT ON COLUMN dim_assistant_Ex.criticism_status IS '投诉状态:1=正常,2=有投诉。 | 来源: criticism_status'; +COMMENT ON COLUMN dim_assistant_Ex.create_time IS '账号创建时间。 | 来源: create_time'; +COMMENT ON COLUMN dim_assistant_Ex.update_time IS '账号最近修改时间。 | 来源: update_time'; +COMMENT ON COLUMN dim_assistant_Ex.start_time IS '配置生效开始时间。 | 来源: start_time'; +COMMENT ON COLUMN dim_assistant_Ex.end_time IS '配置生效结束时间。 | 来源: end_time'; +COMMENT ON COLUMN dim_assistant_Ex.last_table_id IS '最近服务的台桌 ID(未必存在)。 | 来源: last_table_id'; +COMMENT ON COLUMN dim_assistant_Ex.last_table_name IS '最近服务球台名称。 | 来源: last_table_name'; +COMMENT ON COLUMN dim_assistant_Ex.last_update_name IS '最近更新该账号的管理员。 | 来源: last_update_name'; +COMMENT ON COLUMN dim_assistant_Ex.order_trade_no IS '最近关联的订单号(非外键,仅做展示)。 | 来源: order_trade_no'; +COMMENT ON COLUMN dim_assistant_Ex.ding_talk_synced IS '是否同步钉钉:1=已同步。 | 来源: ding_talk_synced'; +COMMENT ON COLUMN dim_assistant_Ex.site_light_cfg_id IS '灯控配置 ID(未启用)。 | 来源: site_light_cfg_id'; +COMMENT ON COLUMN dim_assistant_Ex.light_equipment_id IS '灯控设备 ID(未启用)。 | 来源: light_equipment_id'; +COMMENT ON COLUMN dim_assistant_Ex.light_status IS '灯控状态(值2,具体含义未知)。 | 来源: light_status'; +COMMENT ON COLUMN dim_assistant_Ex.is_team_leader IS '是否团队长:0=否,1=是。 | 来源: is_team_leader'; +COMMENT ON COLUMN dim_assistant_Ex.serial_number IS '来源: serial_number'; + +-- dim_member +CREATE TABLE IF NOT EXISTS dim_member ( + member_id BIGINT, + system_member_id BIGINT, + tenant_id BIGINT, + register_site_id BIGINT, + mobile TEXT, + nickname TEXT, + member_card_grade_code BIGINT, + member_card_grade_name TEXT, + create_time TIMESTAMPTZ, + update_time TIMESTAMPTZ, + SCD2_start_time TIMESTAMPTZ, + SCD2_end_time TIMESTAMPTZ, + SCD2_is_current INT, + SCD2_version INT, + PRIMARY KEY (member_id) +); +COMMENT ON COLUMN dim_member.member_id IS '租户内会员主键。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_member.system_member_id IS '跨租户全局会员 ID。 | 来源: system_member_id | 角色: 外键'; +COMMENT ON COLUMN dim_member.tenant_id IS '租户 ID。 | 来源: tenant_id | 角色: 外键'; +COMMENT ON COLUMN dim_member.register_site_id IS '注册门店 ID。 | 来源: register_site_id | 角色: 外键'; +COMMENT ON COLUMN dim_member.mobile IS '会员手机号。 | 来源: mobile'; +COMMENT ON COLUMN dim_member.nickname IS '昵称(未必是真实姓名)。 | 来源: nickname'; +COMMENT ON COLUMN dim_member.member_card_grade_code IS '会员等级代码:1=金卡?2=银卡?3=钻石卡?4=黑卡?(按照 MD 文档枚举)。 | 来源: member_card_grade_code'; +COMMENT ON COLUMN dim_member.member_card_grade_name IS '等级名称,中文描述。 | 来源: member_card_grade_name'; +COMMENT ON COLUMN dim_member.create_time IS '会员档案创建时间。 | 来源: create_time'; + +-- dim_member_Ex +CREATE TABLE IF NOT EXISTS dim_member_Ex ( + member_id BIGINT, + referrer_member_id BIGINT, + point NUMERIC(18,2), + register_site_name TEXT, + growth_value NUMERIC(18,2), + user_status INTEGER, + status INTEGER, + SCD2_start_time TIMESTAMPTZ, + SCD2_end_time TIMESTAMPTZ, + SCD2_is_current INT, + SCD2_version INT, + PRIMARY KEY (member_id) +); +COMMENT ON COLUMN dim_member_Ex.member_id IS '租户内会员主键。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_member_Ex.referrer_member_id IS '推荐人会员 ID,营销分析用。 | 来源: referrer_member_id'; +COMMENT ON COLUMN dim_member_Ex.point IS '积分余额(暂未启用)。 | 来源: point'; +COMMENT ON COLUMN dim_member_Ex.register_site_name IS '注册门店名称。 | 来源: site_name'; +COMMENT ON COLUMN dim_member_Ex.growth_value IS '成长值,暂未启用。 | 来源: growth_value'; +COMMENT ON COLUMN dim_member_Ex.user_status IS '会员状态枚举:1=正常,其它值未出现。 | 来源: user_status'; +COMMENT ON COLUMN dim_member_Ex.status IS '帐户状态:1=正常;其它值未出现。 | 来源: status'; + +-- dim_member_card_account +CREATE TABLE IF NOT EXISTS dim_member_card_account ( + member_card_id BIGINT, + tenant_id BIGINT, + register_site_id BIGINT, + tenant_member_id BIGINT, + system_member_id BIGINT, + card_type_id BIGINT, + member_card_grade_code BIGINT, + member_card_grade_code_name TEXT, + member_card_type_name TEXT, + member_name TEXT, + member_mobile TEXT, + balance NUMERIC(18,2), + start_time TIMESTAMPTZ, + end_time TIMESTAMPTZ, + last_consume_time TIMESTAMPTZ, + status INTEGER, + is_delete INTEGER, + SCD2_start_time TIMESTAMPTZ, + SCD2_end_time TIMESTAMPTZ, + SCD2_is_current INT, + SCD2_version INT, + PRIMARY KEY (member_card_id) +); +COMMENT ON COLUMN dim_member_card_account.member_card_id IS '会员卡账户主键,唯一标识一张具体卡。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_member_card_account.tenant_id IS '租户/品牌 ID,用于分隔不同业务主体。 | 来源: tenant_id | 角色: 外键'; +COMMENT ON COLUMN dim_member_card_account.register_site_id IS '开卡门店 ID,对应 dim_site.site_id。 | 来源: register_site_id | 角色: 外键'; +COMMENT ON COLUMN dim_member_card_account.tenant_member_id IS '对应会员档案中的 member_id(本租户内)。0 表示未绑定会员。 | 来源: tenant_member_id | 角色: 外键'; +COMMENT ON COLUMN dim_member_card_account.system_member_id IS '全局会员 ID,用于跨租户统一会员身份。0 表示未绑定会员。 | 来源: system_member_id | 角色: 外键'; +COMMENT ON COLUMN dim_member_card_account.card_type_id IS '卡种 ID,指向卡种配置表。与下面的 grade_code 共同定义卡类别。 | 来源: card_type_id | 角色: 外键'; +COMMENT ON COLUMN dim_member_card_account.member_card_grade_code IS '卡等级/卡类代码,区别不同类别卡。2790683528022853=储值卡,2790683528022856=活动抵用券,2790683528022855=台费卡,2790683528022858=酒水卡,2790683528022857=月卡'; +COMMENT ON COLUMN dim_member_card_account.member_card_grade_code_name IS '卡等级中文名称,与 member_card_grade_code 一一对应。 | 来源: member_card_grade_code_name'; +COMMENT ON COLUMN dim_member_card_account.member_card_type_name IS '卡类型名称,通常与 grade_code_name 相同,纯展示字段。 | 来源: member_card_type_name'; +COMMENT ON COLUMN dim_member_card_account.member_name IS '持卡会员姓名快照,部分为空表示未绑定。 | 来源: member_name'; +COMMENT ON COLUMN dim_member_card_account.member_mobile IS '持卡会员手机号快照。 | 来源: member_mobile'; +COMMENT ON COLUMN dim_member_card_account.balance IS '当前余额或额度。对储值卡表示余额,对其他卡表示剩余金额或次数。 | 来源: balance'; +COMMENT ON COLUMN dim_member_card_account.start_time IS '卡片有效期开始时间。 | 来源: start_time'; +COMMENT ON COLUMN dim_member_card_account.end_time IS '卡片有效期结束时间。 | 来源: end_time'; +COMMENT ON COLUMN dim_member_card_account.last_consume_time IS '最近一次消费时间;若为 "1970-01-01" 表示未消费过。 | 来源: last_consume_time'; +COMMENT ON COLUMN dim_member_card_account.status IS '卡状态:1=正常可用;4=过期/停用。其他值在数据中未出现。 | 来源: status'; +COMMENT ON COLUMN dim_member_card_account.is_delete IS '逻辑删除标记:0=未删除;1=已删除。 | 来源: is_delete'; + +-- dim_member_card_account_Ex +CREATE TABLE IF NOT EXISTS dim_member_card_account_Ex ( + member_card_id BIGINT, + site_name TEXT, + tenant_name VARCHAR(64), + tenantAvatar TEXT, + effect_site_id BIGINT, + able_cross_site INTEGER, + card_physics_type INTEGER, + card_no TEXT, + bind_password TEXT, + use_scene TEXT, + denomination NUMERIC(18,2), + create_time TIMESTAMPTZ, + disable_start_time TIMESTAMPTZ, + disable_end_time TIMESTAMPTZ, + is_allow_give INTEGER, + is_allow_order_deduct INTEGER, + sort INTEGER, + table_discount NUMERIC(10,2), + goods_discount NUMERIC(10,2), + assistant_discount NUMERIC(10,2), + assistant_reward_discount NUMERIC(10,2), + table_service_discount NUMERIC(10,2), + goods_service_discount NUMERIC(10,2), + assistant_service_discount NUMERIC(10,2), + coupon_discount NUMERIC(10,2), + table_discount_sub_switch INTEGER, + goods_discount_sub_switch INTEGER, + assistant_discount_sub_switch INTEGER, + assistant_reward_discount_sub_switch INTEGER, + goods_discount_range_type INTEGER, + table_deduct_radio NUMERIC(10,2), + goods_deduct_radio NUMERIC(10,2), + assistant_deduct_radio NUMERIC(10,2), + table_service_deduct_radio NUMERIC(10,2), + goods_service_deduct_radio NUMERIC(10,2), + assistant_service_deduct_radio NUMERIC(10,2), + assistant_reward_deduct_radio NUMERIC(10,2), + coupon_deduct_radio NUMERIC(10,2), + cardSettleDeduct NUMERIC(18,2), + tableCardDeduct NUMERIC(18,2), + tableServiceCardDeduct NUMERIC(18,2), + goodsCarDeduct NUMERIC(18,2), + goodsServiceCardDeduct NUMERIC(18,2), + assistantCardDeduct NUMERIC(18,2), + assistantServiceCardDeduct NUMERIC(18,2), + assistantRewardCardDeduct NUMERIC(18,2), + couponCardDeduct NUMERIC(18,2), + deliveryFeeDeduct NUMERIC(18,2), + tableAreaId TEXT, + goodsCategoryId TEXT, + pdAssisnatLevel TEXT, + cxAssisnatLevel TEXT, + SCD2_start_time TIMESTAMPTZ, + SCD2_end_time TIMESTAMPTZ, + SCD2_is_current INT, + SCD2_version INT, + PRIMARY KEY (member_card_id) +); +COMMENT ON COLUMN dim_member_card_account_Ex.member_card_id IS '会员卡账户主键,唯一标识一张具体卡。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_member_card_account_Ex.site_name IS '门店名称展示字段(全部相同)。 | 来源: site_name'; +COMMENT ON COLUMN dim_member_card_account_Ex.tenant_name IS '租户名称(当前导出为空)。 | 来源: tenantName'; +COMMENT ON COLUMN dim_member_card_account_Ex.tenantAvatar IS '租户头像 URL(当前导出为空)。 | 来源: tenantAvatar'; +COMMENT ON COLUMN dim_member_card_account_Ex.effect_site_id IS '卡片限定生效门店 ID。0 表示不限门店,配合 able_cross_site=1 表示全店通用。 | 来源: effect_site_id'; +COMMENT ON COLUMN dim_member_card_account_Ex.able_cross_site IS '是否允许跨门店使用该卡:1=允许跨店;0=仅限开卡门店。 | 来源: able_cross_site'; +COMMENT ON COLUMN dim_member_card_account_Ex.card_physics_type IS '物理卡类型:1=实体/标准卡;其他值未出现,含义未知。 | 来源: card_physics_type'; +COMMENT ON COLUMN dim_member_card_account_Ex.card_no IS '物理卡号或条码(当前全部为空)。 | 来源: card_no'; +COMMENT ON COLUMN dim_member_card_account_Ex.bind_password IS '卡绑定密码(未启用)。 | 来源: bind_password'; +COMMENT ON COLUMN dim_member_card_account_Ex.use_scene IS '使用场景说明(当前为空)。 | 来源: use_scene'; +COMMENT ON COLUMN dim_member_card_account_Ex.denomination IS '面额或初始储值额度(当前均为 0.0,未启用)。 | 来源: denomination'; +COMMENT ON COLUMN dim_member_card_account_Ex.create_time IS '卡片创建时间。 | 来源: create_time'; +COMMENT ON COLUMN dim_member_card_account_Ex.disable_start_time IS '卡片禁用开始时间,当前为默认值表示未禁用。 | 来源: disable_start_time'; +COMMENT ON COLUMN dim_member_card_account_Ex.disable_end_time IS '卡片禁用结束时间,当前为默认值表示未禁用。 | 来源: disable_end_time'; +COMMENT ON COLUMN dim_member_card_account_Ex.is_allow_give IS '是否允许转赠给他人:0=不允许;1=允许。 | 来源: is_allow_give'; +COMMENT ON COLUMN dim_member_card_account_Ex.is_allow_order_deduct IS '是否允许在订单层面统一扣款:0=不允许;1=允许。 | 来源: is_allow_order_deduct'; +COMMENT ON COLUMN dim_member_card_account_Ex.sort IS '前端排序序号。 | 来源: sort'; +COMMENT ON COLUMN dim_member_card_account_Ex.table_discount IS '台费折扣率(折扣百分比,10.0=不打折,9.0=九折等)。当前全部 10.0。 | 来源: table_discount'; +COMMENT ON COLUMN dim_member_card_account_Ex.goods_discount IS '商品折扣率,当前为 10.0 表示无折扣。 | 来源: goods_discount'; +COMMENT ON COLUMN dim_member_card_account_Ex.assistant_discount IS '助教服务折扣率,当前为 10.0。 | 来源: assistant_discount'; +COMMENT ON COLUMN dim_member_card_account_Ex.assistant_reward_discount IS '助教奖励折扣率,当前为 10.0(未启用)。 | 来源: assistant_reward_discount'; +COMMENT ON COLUMN dim_member_card_account_Ex.table_service_discount IS '台费服务类折扣率,当前为 10.0。 | 来源: table_service_discount'; +COMMENT ON COLUMN dim_member_card_account_Ex.goods_service_discount IS '商品服务折扣率,当前为 10.0。 | 来源: goods_service_discount'; +COMMENT ON COLUMN dim_member_card_account_Ex.assistant_service_discount IS '助教服务类折扣率,当前为 10.0。 | 来源: assistant_service_discount'; +COMMENT ON COLUMN dim_member_card_account_Ex.coupon_discount IS '使用券的折扣比例(全部 10.0,未使用)。 | 来源: coupon_discount'; +COMMENT ON COLUMN dim_member_card_account_Ex.table_discount_sub_switch IS '台费折扣叠加开关:1=叠加其他折扣;2=不叠加,仅用卡折扣。 | 来源: table_discount_sub_switch'; +COMMENT ON COLUMN dim_member_card_account_Ex.goods_discount_sub_switch IS '商品折扣叠加开关,意义同上。 | 来源: goods_discount_sub_switch'; +COMMENT ON COLUMN dim_member_card_account_Ex.assistant_discount_sub_switch IS '助教折扣叠加开关,意义同上。 | 来源: assistant_discount_sub_switch'; +COMMENT ON COLUMN dim_member_card_account_Ex.assistant_reward_discount_sub_switch IS '助教奖励折扣叠加开关(未启用)。 | 来源: assistant_reward_discount_sub_switch'; +COMMENT ON COLUMN dim_member_card_account_Ex.goods_discount_range_type IS '商品折扣范围类型,未在文档说明具体含义。 | 来源: goods_discount_range_type'; +COMMENT ON COLUMN dim_member_card_account_Ex.table_deduct_radio IS '台费抵扣比例(百分比)。100.0 表示允许全额抵扣;0=不允许。 | 来源: table_deduct_radio'; +COMMENT ON COLUMN dim_member_card_account_Ex.goods_deduct_radio IS '商品抵扣比例,意义同上。 | 来源: goods_deduct_radio'; +COMMENT ON COLUMN dim_member_card_account_Ex.assistant_deduct_radio IS '助教抵扣比例,意义同上。 | 来源: assistant_deduct_radio'; +COMMENT ON COLUMN dim_member_card_account_Ex.table_service_deduct_radio IS '台费服务金抵扣比例。 | 来源: table_service_deduct_radio'; +COMMENT ON COLUMN dim_member_card_account_Ex.goods_service_deduct_radio IS '商品服务金抵扣比例。 | 来源: goods_service_deduct_radio'; +COMMENT ON COLUMN dim_member_card_account_Ex.assistant_service_deduct_radio IS '助教服务金抵扣比例。 | 来源: assistant_service_deduct_radio'; +COMMENT ON COLUMN dim_member_card_account_Ex.assistant_reward_deduct_radio IS '助教奖励金抵扣比例(未启用)。 | 来源: assistant_reward_deduct_radio'; +COMMENT ON COLUMN dim_member_card_account_Ex.coupon_deduct_radio IS '券抵扣比例(未启用)。 | 来源: coupon_deduct_radio'; +COMMENT ON COLUMN dim_member_card_account_Ex.cardSettleDeduct IS '结算时统一扣卡金额配置(当前为 0.0,未使用)。 | 来源: cardSettleDeduct'; +COMMENT ON COLUMN dim_member_card_account_Ex.tableCardDeduct IS '台费扣卡金额配置,当前 0.0。 | 来源: tableCardDeduct'; +COMMENT ON COLUMN dim_member_card_account_Ex.tableServiceCardDeduct IS '台费服务金扣卡金额配置。 | 来源: tableServiceCardDeduct'; +COMMENT ON COLUMN dim_member_card_account_Ex.goodsCarDeduct IS '商品扣卡金额配置。 | 来源: goodsCarDeduct'; +COMMENT ON COLUMN dim_member_card_account_Ex.goodsServiceCardDeduct IS '商品服务金扣卡金额配置。 | 来源: goodsServiceCardDeduct'; +COMMENT ON COLUMN dim_member_card_account_Ex.assistantCardDeduct IS '助教扣卡金额配置。 | 来源: assistantCardDeduct'; +COMMENT ON COLUMN dim_member_card_account_Ex.assistantServiceCardDeduct IS '助教服务金扣卡金额配置。 | 来源: assistantServiceCardDeduct'; +COMMENT ON COLUMN dim_member_card_account_Ex.assistantRewardCardDeduct IS '助教奖励金扣卡金额配置(未启用)。 | 来源: assistantRewardCardDeduct'; +COMMENT ON COLUMN dim_member_card_account_Ex.couponCardDeduct IS '使用券扣卡金额配置。 | 来源: couponCardDeduct'; +COMMENT ON COLUMN dim_member_card_account_Ex.deliveryFeeDeduct IS '配送费扣卡金额配置(未启用)。 | 来源: deliveryFeeDeduct'; +COMMENT ON COLUMN dim_member_card_account_Ex.tableAreaId IS '可用台区 ID 列表,空表示不限台区。 | 来源: tableAreaId'; +COMMENT ON COLUMN dim_member_card_account_Ex.goodsCategoryId IS '可用商品分类 ID 列表,空表示不限制商品类别。 | 来源: goodsCategoryId'; +COMMENT ON COLUMN dim_member_card_account_Ex.pdAssisnatLevel IS '允许的陪打助教等级列表,空表示不限。 | 来源: pdAssisnatLevel'; +COMMENT ON COLUMN dim_member_card_account_Ex.cxAssisnatLevel IS '允许的促销助教等级列表,空表示不限。 | 来源: cxAssisnatLevel'; + +-- dim_tenant_goods +CREATE TABLE IF NOT EXISTS dim_tenant_goods ( + tenant_goods_id BIGINT, + tenant_id BIGINT, + supplier_id BIGINT, + category_name VARCHAR(64), + goods_category_id BIGINT, + goods_second_category_id BIGINT, + goods_name VARCHAR(128), + goods_number VARCHAR(64), + unit VARCHAR(16), + market_price NUMERIC(18,2), + goods_state INTEGER, + create_time TIMESTAMPTZ, + update_time TIMESTAMPTZ, + is_delete INTEGER, + SCD2_start_time TIMESTAMPTZ, + SCD2_end_time TIMESTAMPTZ, + SCD2_is_current INT, + SCD2_version INT, + PRIMARY KEY (tenant_goods_id) +); +COMMENT ON COLUMN dim_tenant_goods.tenant_goods_id IS '租户级商品档案主键 ID,唯一标识一条商品档案。所有业务事实表(销售、库存等)中引用租户级商品时应指向此字段。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_tenant_goods.tenant_id IS '租户/品牌 ID,用于区分不同商户。当前样本中全表同一值,但模型上应作为维表外键,用于关联租户维度。 | 来源: tenant_id | 角色: 外键'; +COMMENT ON COLUMN dim_tenant_goods.supplier_id IS '供应商 ID,用于关联供应商档案维度。当前样本全部为 0,说明门店尚未维护供应商信息或导出视图未包含真实供应商关联,但字段含义明确。 | 来源: supplier_id | 角色: 外键'; +COMMENT ON COLUMN dim_tenant_goods.category_name IS '商品一级分类名称(可读名称),例如:零食、饮料、香烟、雪糕、小吃、酒水、面、槟榔等。真实分类关联通过 goods_category_id 与 goods_second_category_id 实现,此字段主要用于展示和直观分析。 | 来源: categoryName'; +COMMENT ON COLUMN dim_tenant_goods.goods_category_id IS '商品一级分类 ID。与分类维表(例如 dim_goods_category)关联,构成商品分类的第一层。一个 goods_category_id 对应一个 category_name。 | 来源: goods_category_id | 角色: 外键'; +COMMENT ON COLUMN dim_tenant_goods.goods_second_category_id IS '商品二级分类 ID。与分类维表的二级节点关联,用于更细粒度的品类统计。取值数目约十四种,每个值属于某个一级分类之下。 | 来源: goods_second_category_id | 角色: 外键'; +COMMENT ON COLUMN dim_tenant_goods.goods_name IS '商品名称(前台展示名),如 “东方树叶”“红烧牛肉面”“百威 235 毫升”等。当前样本中基本唯一。作为用户认知的主显示名称,用于报表、前台展示、小票打印。 | 来源: goods_name'; +COMMENT ON COLUMN dim_tenant_goods.goods_number IS '商品内部编号或自定义货号。当前样本中各记录不重复,如 “1”“2”“10”“11” 等。可用于与其他系统对接或人工查找,有一定对账和排错价值。 | 来源: goods_number'; +COMMENT ON COLUMN dim_tenant_goods.unit IS '商品计量单位,例如:瓶、包、个、份、根、盒、杯、桶、盘、支等。用于解释数量含义,是销售数量与库存数量的度量单位。 | 来源: unit'; +COMMENT ON COLUMN dim_tenant_goods.market_price IS '商品标价或标准销售单价。例如 2、5、6、8、10、12、15、18、20、28 元。POS 默认销售价格,结算时的基础金额字段。 | 来源: market_price'; +COMMENT ON COLUMN dim_tenant_goods.goods_state IS '商品状态枚举。当前样本全部为 1,推测含义为“正常”“已上架”或“有效”。其他值(数据中未出现)通常表示下架、停用或草稿状态。用于控制商品是否可销售。 | 来源: goods_state'; +COMMENT ON COLUMN dim_tenant_goods.create_time IS '商品档案创建时间,格式为 “YYYY-MM-DD HH:MM:SS”。每条记录唯一。用于增量抽取和审计,也可用于分析商品生命周期。 | 来源: create_time'; +COMMENT ON COLUMN dim_tenant_goods.update_time IS '商品档案最近一次修改时间,可为空(表示自创建后未修改)。用于增量同步、变化跟踪和审计分析。 | 来源: update_time'; +COMMENT ON COLUMN dim_tenant_goods.is_delete IS '逻辑删除标志。枚举:0 表示未删除(有效商品);1 表示已逻辑删除(在前台不再展示)。当前样本全部为 0。用于软删除控制和历史数据保留。 | 来源: is_delete'; + +-- dim_tenant_goods_Ex +CREATE TABLE IF NOT EXISTS dim_tenant_goods_Ex ( + tenant_goods_id BIGINT, + remark_name VARCHAR(128), + pinyin_initial VARCHAR(128), + goods_cover VARCHAR(512), + goods_bar_code VARCHAR(64), + commodity_code VARCHAR(64), + commodity_code_list VARCHAR(256), + min_discount_price NUMERIC(18,2), + cost_price NUMERIC(18,2), + cost_price_type INTEGER, + able_discount INTEGER, + sale_channel INTEGER, + is_warehousing INTEGER, + is_in_site BOOLEAN, + able_site_transfer INTEGER, + common_sale_royalty INTEGER, + point_sale_royalty INTEGER, + out_goods_id BIGINT, + SCD2_start_time TIMESTAMPTZ, + SCD2_end_time TIMESTAMPTZ, + SCD2_is_current INT, + SCD2_version INT, + PRIMARY KEY (tenant_goods_id) +); +COMMENT ON COLUMN dim_tenant_goods_Ex.tenant_goods_id IS '租户级商品档案主键 ID,唯一标识一条商品档案。所有业务事实表(销售、库存等)中引用租户级商品时应指向此字段。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_tenant_goods_Ex.remark_name IS '商品备注名或别名,目前样本中均为空。设计用途为简写名、特殊展示名或内部备注,在当前门店尚未启用。 | 来源: remark_name'; +COMMENT ON COLUMN dim_tenant_goods_Ex.pinyin_initial IS '商品拼音首字母或助记码,用于前台按拼音检索,如 “DFSY,DFSX”“HSNRM,GSNRM”“SP” 等。主要为操作便利,对经营分析影响较小。 | 来源: pinyin_initial'; +COMMENT ON COLUMN dim_tenant_goods_Ex.goods_cover IS '商品封面图片 URL,用于前端展示商品图片。多个商品可能共用同一图片。对经营和结算逻辑无直接影响。 | 来源: goods_cover'; +COMMENT ON COLUMN dim_tenant_goods_Ex.goods_bar_code IS '商品条码(如 EAN 码)。当前样本全部为空。含义明确但尚未使用,未来可用于扫码收银或与第三方商品库对接。 | 来源: goods_bar_code'; +COMMENT ON COLUMN dim_tenant_goods_Ex.commodity_code IS '对外商品编码或系列编码,用于与外部系统或其他内部模块对接。例如 “10000”“100000”“10000028”等。一个编码在多条商品上复用,说明它不是主键而是“系列标识”或“外部编码”。具体业务含义依赖上游系统定义。 | 来源: commodity_code'; +COMMENT ON COLUMN dim_tenant_goods_Ex.commodity_code_list IS '商品编码列表的序列化形式,对应源 JSON 的数组字段(当前每条记录仅一个元素)。设计上支持 “一个商品多个编码” 场景,目前仅为 commodity_code 的冗余表现形式。 | 来源: commodityCode'; +COMMENT ON COLUMN dim_tenant_goods_Ex.min_discount_price IS '商品可售最低价(底价)。部分记录为 0.00,表示未设置底价或沿用系统默认规则。用于限制打折或手动改价的下限,防止亏损销售。 | 来源: min_discount_price'; +COMMENT ON COLUMN dim_tenant_goods_Ex.cost_price IS '商品成本价,当前大多数为 0.00,仅少数录入 2.0、2.5、3.0 等。用于成本核算与毛利分析。虽当前门店未完整维护,但字段含义清晰,属于成本分析必备结构。 | 来源: cost_price'; +COMMENT ON COLUMN dim_tenant_goods_Ex.cost_price_type IS '成本价格类型枚举,用于标识成本价的来源或计算方式。已知取值:1 和 2。常见推测:1 表示手工录入成本;2 表示按最近进货价或加权平均价生成。具体含义需结合系统枚举字典确认。 | 来源: cost_price_type'; +COMMENT ON COLUMN dim_tenant_goods_Ex.able_discount IS '是否允许该商品参与折扣的标志。已知取值:1。按命名推断枚举约定为:1 表示允许参与打折;0 表示不允许参与打折(当前样本未出现)。配合活动、整单折扣等控制哪些商品可享优惠。 | 来源: able_discount'; +COMMENT ON COLUMN dim_tenant_goods_Ex.sale_channel IS '销售渠道类型枚举。当前样本全部为 1,推测为“线下门店正常销售渠道”。理论上可扩展为不同渠道值,例如外卖、小程序、电商等,用于渠道维度分析。具体枚举说明依赖系统配置。 | 来源: sale_channel'; +COMMENT ON COLUMN dim_tenant_goods_Ex.is_warehousing IS '是否纳入库存管理的标志。已知取值:1,表示纳入库存管理;0 则表示不纳入库存管理(虚拟商品等,当前未出现)。本门店所有商品均启用库存管理。 | 来源: is_warehousing'; +COMMENT ON COLUMN dim_tenant_goods_Ex.is_in_site IS '是否在当前门店启用或上架。当前样本全部为 false。由于该文件是租户级商品档案视图,且 isInSite 全为 false,该字段在本视图的实际含义存在不确定性,可能仅在门店级商品表中才有明确业务意义。 | 来源: isInSite'; +COMMENT ON COLUMN dim_tenant_goods_Ex.able_site_transfer IS '是否允许门店间调拨或门店级操作的枚举。已知取值:2 为绝大多数,0 为少数一条。按命名推测大致含义为:2 表示允许调拨或默认允许;0 表示禁止调拨。实际枚举定义需查阅系统配置,当前无法完全确定具体业务规则。 | 来源: able_site_transfer'; +COMMENT ON COLUMN dim_tenant_goods_Ex.common_sale_royalty IS '普通销售提成或佣金配置字段,单位和含义需结合上游系统(可能为金额或比例)。当前样本全部为 0,说明未启用商品级提成配置。 | 来源: common_sale_royalty'; +COMMENT ON COLUMN dim_tenant_goods_Ex.point_sale_royalty IS '积分销售相关的提成或赠送规则配置字段。当前样本全部为 0,同样未启用该功能。具体数值含义(百分比或固定值)需结合系统定义。 | 来源: point_sale_royalty'; +COMMENT ON COLUMN dim_tenant_goods_Ex.out_goods_id IS '外部系统商品 ID,用于对接第三方平台或统一商品库时作为映射主键。目前样本全部为 0,说明尚未配置外部商品映射,具体对接规则依赖上游系统。 | 来源: out_goods_id'; + +-- dim_store_goods +CREATE TABLE IF NOT EXISTS dim_store_goods ( + site_goods_id BIGINT, + tenant_id BIGINT, + site_id BIGINT, + tenant_goods_id BIGINT, + goods_name TEXT, + goods_category_id BIGINT, + goods_second_category_id BIGINT, + category_level1_name TEXT, + category_level2_name TEXT, + batch_stock_qty INTEGER, + sale_qty INTEGER, + total_sales_qty INTEGER, + sale_price NUMERIC(18,2), + created_at TIMESTAMPTZ, + updated_at TIMESTAMPTZ, + avg_monthly_sales NUMERIC(18,4), + goods_state INTEGER, + enable_status INTEGER, + send_state INTEGER, + is_delete INTEGER, + SCD2_start_time TIMESTAMPTZ, + SCD2_end_time TIMESTAMPTZ, + SCD2_is_current INT, + SCD2_version INT, + PRIMARY KEY (site_goods_id) +); +COMMENT ON COLUMN dim_store_goods.site_goods_id IS '门店级商品 ID,本表主键;其它业务表中的 site_goods_id 与此对应,用于库存、销售等关联。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_store_goods.tenant_id IS '租户/品牌 ID,同一品牌下多个门店共享,用于跨门店汇总分析。 | 来源: tenant_id | 角色: 外键'; +COMMENT ON COLUMN dim_store_goods.site_id IS '门店 ID,对应门店维度表主键。 | 来源: site_id | 角色: 外键'; +COMMENT ON COLUMN dim_store_goods.tenant_goods_id IS '租户级(品牌级)商品 ID,用于关联 dim_tenant_goods,实现跨门店统一商品档案。 | 来源: tenant_goods_id | 角色: 外键'; +COMMENT ON COLUMN dim_store_goods.goods_name IS '商品名称,例如“合味道泡面”“地道肠”“茶位费”。 | 来源: goods_name'; +COMMENT ON COLUMN dim_store_goods.goods_category_id IS '商品一级分类 ID,对应商品分类维表主键,与 category_level1_name 一一对应。 | 来源: goods_category_id | 角色: 外键'; +COMMENT ON COLUMN dim_store_goods.goods_second_category_id IS '商品二级分类 ID,其父分类为 goods_category_id。 | 来源: goods_second_category_id | 角色: 外键'; +COMMENT ON COLUMN dim_store_goods.category_level1_name IS '一级分类名称,如“零食”“酒水”“服务费”,用于报表维度展示。 | 来源: oneCategoryName'; +COMMENT ON COLUMN dim_store_goods.category_level2_name IS '二级分类名称,如“面”“洋酒”“纸巾”,用于更细粒度分类分析。 | 来源: twoCategoryName'; +COMMENT ON COLUMN dim_store_goods.batch_stock_qty IS '当前成本批次的库存数量,用于按 cost_price 估算库存价值。 | 来源: batch_stock_quantity'; +COMMENT ON COLUMN dim_store_goods.sale_qty IS '截至导出时的销售数量(件),当前数据中与 total_sales_qty 相同。 | 来源: sale_num'; +COMMENT ON COLUMN dim_store_goods.total_sales_qty IS '累计销售数量;当前导出周期下与 sale_qty 一致,为历史全量口径。 | 来源: total_sales'; +COMMENT ON COLUMN dim_store_goods.sale_price IS '商品标准销售价(挂牌价),单位为元。实际结算可能有折扣或券抵扣。 | 来源: sale_price'; +COMMENT ON COLUMN dim_store_goods.created_at IS '门店商品档案创建时间(在门店建立该商品档案时的时间点)。 | 来源: create_time'; +COMMENT ON COLUMN dim_store_goods.updated_at IS '最近一次修改商品档案的时间(包括价格调整、状态变更等)。 | 来源: update_time'; +COMMENT ON COLUMN dim_store_goods.avg_monthly_sales IS '平均月销量(件/月),由某个统计周期内销售数据折算而来,用于补货和品类管理分析。 | 来源: average_monthly_sales'; +COMMENT ON COLUMN dim_store_goods.goods_state IS '商品基础状态枚举:1=正常状态(主流值),2=特殊状态(如新建未完全启用或停售但未彻底下架,通常伴随 stock=0、days_on_shelf=0)。 | 来源: goods_state'; +COMMENT ON COLUMN dim_store_goods.enable_status IS '档案启用状态:1=启用;2=停用(推测,样本中未出现);控制商品档案是否参与业务处理。 | 来源: enable_status'; +COMMENT ON COLUMN dim_store_goods.send_state IS '销售端可售状态:1=可销售/可下单;其他值可能代表停售或仅内部使用(当前样本全部为 1)。 | 来源: send_state'; +COMMENT ON COLUMN dim_store_goods.is_delete IS '逻辑删除标志:0=未删除(有效档案);1=已删除(逻辑删除,不再参与业务但保留历史引用)。 | 来源: is_delete'; + +-- dim_store_goods_Ex +CREATE TABLE IF NOT EXISTS dim_store_goods_Ex ( + site_goods_id BIGINT, + site_name TEXT, + unit TEXT, + goods_barcode TEXT, + goods_cover_url TEXT, + pinyin_initial TEXT, + stock_qty INTEGER, + stock_secondary_qty INTEGER, + safety_stock_qty INTEGER, + cost_price NUMERIC(18,4), + cost_price_type INTEGER, + provisional_total_cost NUMERIC(18,2), + total_purchase_cost NUMERIC(18,2), + min_discount_price NUMERIC(18,2), + is_discountable INTEGER, + days_on_shelf INTEGER, + audit_status INTEGER, + sale_channel INTEGER, + is_warehousing INTEGER, + freeze_status INTEGER, + forbid_sell_status INTEGER, + able_site_transfer INTEGER, + custom_label_type INTEGER, + option_required INTEGER, + remark TEXT, + sort_order INTEGER, + SCD2_start_time TIMESTAMPTZ, + SCD2_end_time TIMESTAMPTZ, + SCD2_is_current INT, + SCD2_version INT, + PRIMARY KEY (site_goods_id) +); +COMMENT ON COLUMN dim_store_goods_Ex.site_goods_id IS '门店级商品 ID,本表主键;其它业务表中的 site_goods_id 与此对应,用于库存、销售等关联。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_store_goods_Ex.site_name IS '门店名称,例如“朗朗桌球”,是对 site_id 的冗余展示,方便直接阅读。 | 来源: siteName'; +COMMENT ON COLUMN dim_store_goods_Ex.unit IS '销售计量单位,如“包”“瓶”“个”“份”“杯”等。 | 来源: unit'; +COMMENT ON COLUMN dim_store_goods_Ex.goods_barcode IS '商品条形码,用于扫码销售;当前样本多为空。 | 来源: goods_bar_code'; +COMMENT ON COLUMN dim_store_goods_Ex.goods_cover_url IS '商品图片 URL,用于前端展示商品图片。 | 来源: goods_cover'; +COMMENT ON COLUMN dim_store_goods_Ex.pinyin_initial IS '商品名称拼音首字母缩写,有时多个别名用逗号分隔,用于按字母快速检索和排序。 | 来源: pinyin_initial'; +COMMENT ON COLUMN dim_store_goods_Ex.stock_qty IS '当前主单位可用库存数量,以 unit 为单位。 | 来源: stock'; +COMMENT ON COLUMN dim_store_goods_Ex.stock_secondary_qty IS '副单位库存数量;若商品存在双单位(如箱/瓶),用于记录副单位库存;当前门店未启用双单位库存,样本中为 0。 | 来源: stock_A'; +COMMENT ON COLUMN dim_store_goods_Ex.safety_stock_qty IS '安全库存阈值,低于该值时系统可提示补货;当前门店尚未配置,样本中为 0。 | 来源: safe_stock'; +COMMENT ON COLUMN dim_store_goods_Ex.cost_price IS '商品单件成本价,单位元;部分商品为 0,表示未录入或由其它模块结转成本。 | 来源: cost_price'; +COMMENT ON COLUMN dim_store_goods_Ex.cost_price_type IS '成本类型枚举:1=固定成本价(按 cost_price 计),2=动态成本价(按采购单等方式结转,当前多数仍为暂估)。 | 来源: cost_price_type'; +COMMENT ON COLUMN dim_store_goods_Ex.provisional_total_cost IS '当前库存暂估总成本,单位元;通常约等于 batch_stock_qty × cost_price。 | 来源: provisional_total_cost'; +COMMENT ON COLUMN dim_store_goods_Ex.total_purchase_cost IS '当前库存总采购成本,单位元;当前样本中与 provisional_total_cost 相等,为后续精算成本预留。 | 来源: total_purchase_cost'; +COMMENT ON COLUMN dim_store_goods_Ex.min_discount_price IS '最低允许成交价(限价),单位元;收银改价时需保证成交价 ≥ 此值,为 0 时表示未设置限价或由其它规则控制。 | 来源: min_discount_price'; +COMMENT ON COLUMN dim_store_goods_Ex.is_discountable IS '是否允许参与折扣的标志:1=允许参与折扣;0=不参与任何折扣策略。当前样本全部为 1。 | 来源: able_discount'; +COMMENT ON COLUMN dim_store_goods_Ex.days_on_shelf IS '商品在架天数或可售天数,大致等于当前时间减去首次上架时间;0 通常表示刚建档或刚启用。 | 来源: days_available'; +COMMENT ON COLUMN dim_store_goods_Ex.audit_status IS '审核状态枚举:2=审核通过(当前唯一值);其他值可能代表待提交、待审核、审核不通过等。 | 来源: audit_status'; +COMMENT ON COLUMN dim_store_goods_Ex.sale_channel IS '销售渠道枚举:当前样本全部为 1 表示线下门店渠道;其他值可用于区分外卖、线上商城等渠道。 | 来源: sale_channel'; +COMMENT ON COLUMN dim_store_goods_Ex.is_warehousing IS '是否纳入库存管理:1=参与库存管理(有出入库流水);0 或其他值可能表示不计库存(样本中全部为 1)。 | 来源: is_warehousing'; +COMMENT ON COLUMN dim_store_goods_Ex.freeze_status IS '冻结状态:0=未冻结;非 0 可能表示锁定库存或禁止出库,具体业务规则需系统确认。 | 来源: freeze'; +COMMENT ON COLUMN dim_store_goods_Ex.forbid_sell_status IS '禁止销售状态:1=未禁止,允许销售;2=被禁止销售,即使上架也不能卖(含义基于命名和行业惯例推测)。 | 来源: forbid_sell_status'; +COMMENT ON COLUMN dim_store_goods_Ex.able_site_transfer IS '是否允许跨门店调拨或跨站点共享库存:2=不允许跨店调拨(当前主流值);0=未配置(个别记录),含义为是否参与跨店调拨功能。 | 来源: able_site_transfer'; +COMMENT ON COLUMN dim_store_goods_Ex.custom_label_type IS '自定义标签类型(基于字段名和取值推测):2=使用自定义标签;1 可能表示使用系统默认标签。具体影响哪些标签功能需业务确认。 | 来源: custom_label_type'; +COMMENT ON COLUMN dim_store_goods_Ex.option_required IS '是否需要额外选项或规格(基于字段名和取值推测):1=不需要额外选项,按单规格销售;其他值可能表示必须选择配料或口味。当前样本全部为 1。 | 来源: option_required'; +COMMENT ON COLUMN dim_store_goods_Ex.remark IS '商品备注,可填写口味说明、供应商信息、注意事项等;当前样本全部为空。 | 来源: remark'; +COMMENT ON COLUMN dim_store_goods_Ex.sort_order IS '前端展示排序权重,控制商品在列表中的显示顺序,具体规则(数值越大还是越小排前)由业务配置决定。 | 来源: sort'; + +-- dim_goods_category +CREATE TABLE IF NOT EXISTS dim_goods_category ( + category_id BIGINT, + tenant_id BIGINT, + category_name VARCHAR(50), + alias_name VARCHAR(50), + parent_category_id BIGINT, + business_name VARCHAR(50), + tenant_goods_business_id BIGINT, + category_level INTEGER, + is_leaf INTEGER, + open_salesman INTEGER, + sort_order INTEGER, + is_warehousing INTEGER, + SCD2_start_time TIMESTAMPTZ, + SCD2_end_time TIMESTAMPTZ, + SCD2_is_current INT, + SCD2_version INT, + PRIMARY KEY (category_id) +); +COMMENT ON COLUMN dim_goods_category.category_id IS '分类节点主键。来自分类树节点的 id,在整个商品分类维度内唯一。用于在事实表中作为商品分类外键引用。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_goods_category.tenant_id IS '租户 ID(商户/品牌 ID)。当前所有节点取值相同,表示同一个租户下的分类树。事实表可通过该字段与租户维度或门店维度间接关联。 | 来源: tenant_id | 角色: 外键'; +COMMENT ON COLUMN dim_goods_category.category_name IS '分类名称。一级大类示例:槟榔、器材、酒水、水果、零食、雪糕、香烟、其他、小吃。二级子类示例:槟榔、皮头、球杆、其他、饮料、酒水、茶水、咖啡、加料、洋酒、果盘、面、小吃等。用于前台展示和报表按细分类统计。 | 来源: category_name'; +COMMENT ON COLUMN dim_goods_category.alias_name IS '分类别名。当前样例数据全部为空字符串,预留给业务方做简称或别名展示。对现阶段经营分析无影响。 | 来源: alias_name'; +COMMENT ON COLUMN dim_goods_category.parent_category_id IS '父级分类 ID。根节点取值为 0,表示没有父分类;子节点取值为父分类的 id。与 category_id 共同形成树形层级关系。 | 来源: pid | 角色: 外键'; +COMMENT ON COLUMN dim_goods_category.business_name IS '业务大类名称。将多个细分类归入同一业务线。观测值与一级大类相同:槟榔、器材、酒水、水果、零食、雪糕、香烟、其他、小吃。子类的 business_name 继承所属根节点的大类名称。用于按业务线汇总库存和销售。 | 来源: business_name'; +COMMENT ON COLUMN dim_goods_category.tenant_goods_business_id IS '业务大类 ID。每个 business_name 对应唯一一个 tenant_goods_business_id,根节点和其下所有子节点共享同一取值。例如“酒水”大类及其子类饮料、茶水、咖啡、加料、洋酒拥有相同的业务 ID。可作为外键连接“业务线维度表”。 | 来源: tenant_goods_business_id | 角色: 外键'; +COMMENT ON COLUMN dim_goods_category.category_level IS '分类层级:1 表示一级大类(pid = 0),2 表示二级子类(pid ≠ 0)。方便在报表中区分大类与子类进行分组和展示层级控制。 | 来源: 由 pid 推导'; +COMMENT ON COLUMN dim_goods_category.is_leaf IS '是否叶子节点:1 表示叶子分类(categoryBoxes 为空列表),0 表示非叶子分类(存在子分类)。当前样例数据中,一级大类是非叶子节点,二级分类是叶子节点。用于树状导航或限制只能在叶子分类建商品。 | 来源: 由 categoryBoxes 推导'; +COMMENT ON COLUMN dim_goods_category.open_salesman IS '营业员开关控制。枚举含义根据业务系统定义,一般设计为:1 表示启用营业员/导购相关功能,2 表示关闭或不启用。当前样例所有分类取值为 2,说明这一套分类在库存模块中统一未启用营业员逻辑。对目前的经营分析影响较小。 | 来源: open_salesman'; +COMMENT ON COLUMN dim_goods_category.sort_order IS '分类排序序号。来自 sort 字段,用于前端展示顺序控制,数值越小越靠前。当前大部分分类为 0,仅少数为 1,说明排序配置较为粗略。对指标统计无实质影响。 | 来源: sort'; +COMMENT ON COLUMN dim_goods_category.is_warehousing IS '是否参与库存管理。枚举:1 表示参与库存管理,0 表示不参与(如服务类商品、手工费用)。当前文件中所有分类取值为 1,表示这一份分类树只包含“走库存”的商品分类。可在库存报表中用作过滤条件。 | 来源: is_warehousing'; + +-- dim_groupbuy_package +CREATE TABLE IF NOT EXISTS dim_groupbuy_package ( + groupbuy_package_id BIGINT, + tenant_id BIGINT, + site_id BIGINT, + package_name VARCHAR(200), + package_template_id BIGINT, + selling_price NUMERIC(10,2), + coupon_face_value NUMERIC(10,2), + duration_seconds INTEGER, + start_time TIMESTAMPTZ, + end_time TIMESTAMPTZ, + table_area_name VARCHAR(100), + is_enabled INTEGER, + is_delete INTEGER, + create_time TIMESTAMPTZ, + tenant_table_area_id_list VARCHAR(512), + card_type_ids VARCHAR(255), + SCD2_start_time TIMESTAMPTZ, + SCD2_end_time TIMESTAMPTZ, + SCD2_is_current INT, + SCD2_version INT, + PRIMARY KEY (groupbuy_package_id) +); +COMMENT ON COLUMN dim_groupbuy_package.groupbuy_package_id IS '门店侧团购套餐主键。每条记录一个套餐定义,供团购券核销记录指向。平台验券记录中的 group_package_id 通常指向这里。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_groupbuy_package.tenant_id IS '租户(品牌/商户)ID。本数据集中全表相同,表示同一品牌。 | 来源: tenant_id | 角色: 外键(指向租户维)'; +COMMENT ON COLUMN dim_groupbuy_package.site_id IS '门店 ID,本表所有记录属于同一门店。与其他 JSON 的 site_id 一致。 | 来源: site_id | 角色: 外键(指向门店维)'; +COMMENT ON COLUMN dim_groupbuy_package.package_name IS '团购套餐名称,用于前台展示及核销界面,例如“早场特惠一小时”“KTV欢唱四小时”等。 | 来源: package_name'; +COMMENT ON COLUMN dim_groupbuy_package.package_template_id IS '上层套餐 ID 或总部/系统级套餐 ID。多个 groupbuy_package_id 可能共享同一个 package_template_id,表示同一业务套餐在不同门店或不同版本下的配置。 | 来源: package_id | 角色: 外键(指向套餐模板维,后续可建)'; +COMMENT ON COLUMN dim_groupbuy_package.selling_price IS '团购售卖价,面向顾客在外部平台的成交价格。当前样本全部为 0,实际平台售价可能在外部系统,不在本地落地。 | 来源: selling_price'; +COMMENT ON COLUMN dim_groupbuy_package.coupon_face_value IS '券面值或内部结算面值。表示此套餐在门店侧可以抵扣的金额,用于验券或套餐流水时记账。例如“早场特惠一小时”可配置为 40.00,“KTV欢唱四小时”可配置为 200.00。当前样本为 0 但字段设计上非常关键。 | 来源: coupon_money'; +COMMENT ON COLUMN dim_groupbuy_package.duration_seconds IS '套餐包含的时长,单位为秒。常见取值:3600 表示 1 小时,7200 表示 2 小时,14400 表示 4 小时。核销时可用于换算可用台费时长。 | 来源: duration'; +COMMENT ON COLUMN dim_groupbuy_package.start_time IS '套餐整体生效开始时间。例如“2025-07-20 00:00:00”。通常从某日零点开始。 | 来源: start_time'; +COMMENT ON COLUMN dim_groupbuy_package.end_time IS '套餐整体生效结束时间。在该时间点之后不可使用。极大日期(如 9999-12-31 23:59:59)可视为长期有效。 | 来源: end_time'; +COMMENT ON COLUMN dim_groupbuy_package.table_area_name IS '套餐适用的门店台区名称,例如“A区中八”“B区中八”“斯诺克”“包厢”“KTV”等。主要用于展示和过滤,配合区域 ID 列实现人类可读的说明。 | 来源: table_area_name'; +COMMENT ON COLUMN dim_groupbuy_package.is_enabled IS '启用状态枚举。1 表示启用或上架;2 表示停用或下架。侧重表示“配置是否上架”,与 effective_status 区分。 | 来源: is_enabled'; +COMMENT ON COLUMN dim_groupbuy_package.is_delete IS '逻辑删除标志。0 表示正常;1 表示逻辑删除(数据仍保留但不再使用)。当前样本全部为 0。 | 来源: is_delete'; +COMMENT ON COLUMN dim_groupbuy_package.create_time IS '套餐配置在系统中的创建时间,用于审计和版本追踪。 | 来源: create_time'; +COMMENT ON COLUMN dim_groupbuy_package.tenant_table_area_id_list IS '租户级台区分组 ID 列表。当前每条记录为一个大整数(例如 2791960001957765)字符串,表示“台区分组”主键。系统通过此分组再关联到具体多个台区。 | 来源: tenant_table_area_id_list | 角色: 外键(指向台区分组维,后续可建)'; +COMMENT ON COLUMN dim_groupbuy_package.card_type_ids IS '允许使用本套餐的会员卡类型 ID 列表。当前样本统一为字符串“0”,表示未限制卡种,任意顾客或任意会员卡都可使用。若未来启用,将以分隔的 ID 列表形式记录限定卡种。 | 来源: card_type_ids | 角色: 外键(潜在指向卡种维)'; + +-- dim_groupbuy_package_Ex +CREATE TABLE IF NOT EXISTS dim_groupbuy_package_Ex ( + groupbuy_package_id BIGINT, + site_name VARCHAR(100), + usable_count INTEGER, + date_type INTEGER, + usable_range VARCHAR(255), + date_info VARCHAR(255), + start_clock VARCHAR(16), + end_clock VARCHAR(16), + add_start_clock VARCHAR(16), + add_end_clock VARCHAR(16), + area_tag_type INTEGER, + table_area_id BIGINT, + tenant_table_area_id BIGINT, + table_area_id_list VARCHAR(512), + group_type INTEGER, + system_group_type INTEGER, + package_type INTEGER, + effective_status INTEGER, + max_selectable_categories INTEGER, + creator_name VARCHAR(100), + SCD2_start_time TIMESTAMPTZ, + SCD2_end_time TIMESTAMPTZ, + SCD2_is_current INT, + SCD2_version INT, + PRIMARY KEY (groupbuy_package_id) +); +COMMENT ON COLUMN dim_groupbuy_package_Ex.groupbuy_package_id IS '门店侧团购套餐主键。每条记录一个套餐定义,供团购券核销记录指向。平台验券记录中的 group_package_id 通常指向这里。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.site_name IS '门店名称,当前均为“朗朗桌球”。属于冗余展示字段,可用于报表标题。 | 来源: site_name'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.usable_count IS '可使用次数上限。当前全部为 9999999,用作“无限次使用”的哨兵值。若未来限制次数,只需配置为具体次数。 | 来源: usable_count'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.date_type IS '日期限制类型枚举。当前样本全部为 1。推测常见含义:1 表示“全部日期可用”;其他值可用于区分工作日、周末或指定日期等模式。 | 来源: date_type'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.usable_range IS '日期范围说明的文本,例如“周一至周五”等。当前全部为空字符串,实际规则由 date_type 与时间段字段控制。 | 来源: usable_range'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.date_info IS '更细粒度的日期信息,可能用于存储具体日期列表或节假日规则,形式可能是编码或 JSON 字符串。当前几乎全部为空,仅有极少记录为“0”。 | 来源: date_info'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.start_clock IS '每日可用时间段的起始时间(第一段),字符串格式 HH:MM:SS,例如“10:00:00”“00:00:00”。与 end_clock 组合定义日内时段。 | 来源: start_clock'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.end_clock IS '每日可用时间段的结束时间(第一段),字符串格式 HH:MM:SS。与 start_clock 共同描述第一段可用时段。 | 来源: end_clock'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.add_start_clock IS '附加可用时段的起始时间(第二段),格式 HH:MM:SS。当前样本常见值为“00:00:00”或“10:00:00”。用于配置早场加夜场等双时段场景。 | 来源: add_start_clock'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.add_end_clock IS '附加可用时段的结束时间(第二段)。常见值如“1.00:00:00”“18:00:00”“23:59:00”。其中“1.00:00:00”表示跨至次日零点,用于表示“可用到第二天凌晨”的场景。 | 来源: add_end_clock'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.area_tag_type IS '区域标记类型枚举。当前样本全部为 1。推测 1 表示“按台区标签限制”(如 A 区、B 区、中八、斯诺克、包厢、KTV 等)。其他取值可能对应按具体台桌或其它规则限用。 | 来源: area_tag_type'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.table_area_id IS '单一台区 ID。当前样本全部为 0。原始设计用于限定只能在一个具体区域使用,但由于已引入多选逻辑,实际使用已迁移到 tenant_table_area_id_list。 | 来源: table_area_id'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.tenant_table_area_id IS '租户级台区 ID,单值版本。当前样本全部为 0。与 table_area_id 类似,已被多选列表字段取代。 | 来源: tenant_table_area_id'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.table_area_id_list IS '门店级台区 ID 列表。当前样本全部为空字符串。根据命名推测原本用于存储多个 table_area_id,实际实现已转向租户维度列表字段。 | 来源: table_area_id_list'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.group_type IS '团购类型枚举。当前样本全部为 1。推测 1 表示“计时类/台费类套餐”。其他取值可能用于商品类套餐、代金券类等,需结合系统配置进一步确认。 | 来源: group_type'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.system_group_type IS '系统级团购类型枚举。当前样本全部为 1。推测 1 表示“券码类团购”,即通过券码核销。其他取值可能为卡内套餐、内部套餐等,具体含义有待业务确认。 | 来源: system_group_type'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.package_type IS '内部业务子类型枚举。样本中取值有 1 与 2,各占比不同。具体含义不明,可能区分不同产品线或套餐来源,例如“平台合作套餐”与“自定义套餐”等,需要参考业务文档。 | 来源: type'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.effective_status IS '当前有效状态枚举,由系统根据时间及配置动态计算。观测值:1 表示当前有效,可正常核销;3 表示失效或已过期(即使 is_enabled 仍为 1,也不可使用)。可用于分析时过滤失效套餐。 | 来源: effective_status'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.max_selectable_categories IS '最大可选择分类数或子项数,具体含义未在样本和说明中体现,当前值全部为 0。可能用于“组合型套餐”中限制可选项目数量。 | 来源: max_selectable_categories'; +COMMENT ON COLUMN dim_groupbuy_package_Ex.creator_name IS '创建人名称,例如“店长:郑丽珊”。主要用于审计追踪和后台展示。 | 来源: creator_name'; + +-- dwd_settlement_head +CREATE TABLE IF NOT EXISTS dwd_settlement_head ( + order_settle_id BIGINT, + tenant_id BIGINT, + site_id BIGINT, + site_name VARCHAR(100), + table_id BIGINT, + settle_name VARCHAR(100), + order_trade_no BIGINT, + create_time TIMESTAMPTZ, + pay_time TIMESTAMPTZ, + settle_type INTEGER, + revoke_order_id BIGINT, + member_id BIGINT, + member_name VARCHAR(100), + member_phone VARCHAR(50), + member_card_account_id BIGINT, + member_card_type_name VARCHAR(100), + is_bind_member BOOLEAN, + member_discount_amount NUMERIC(18,2), + consume_money NUMERIC(18,2), + table_charge_money NUMERIC(18,2), + goods_money NUMERIC(18,2), + real_goods_money NUMERIC(18,2), + assistant_pd_money NUMERIC(18,2), + assistant_cx_money NUMERIC(18,2), + adjust_amount NUMERIC(18,2), + pay_amount NUMERIC(18,2), + balance_amount NUMERIC(18,2), + recharge_card_amount NUMERIC(18,2), + gift_card_amount NUMERIC(18,2), + coupon_amount NUMERIC(18,2), + rounding_amount NUMERIC(18,2), + point_amount NUMERIC(18,2), + PRIMARY KEY (order_settle_id) +); +COMMENT ON COLUMN dwd_settlement_head.order_settle_id IS '结账记录主键 ID(订单结算 ID),全系统统一的结账单号,用于关联台费流水、助教流水、小票等明细表。 | 来源: settleList.id | 角色: 主键'; +COMMENT ON COLUMN dwd_settlement_head.tenant_id IS '租户/商户 ID(品牌维度),与各业务 JSON 中的 tenantId 一致。 | 来源: settleList.tenantId | 角色: 外键'; +COMMENT ON COLUMN dwd_settlement_head.site_id IS '门店 ID,用于关联门店维表 dim_site。 | 来源: settleList.siteId | 角色: 外键'; +COMMENT ON COLUMN dwd_settlement_head.site_name IS '门店名称快照,冗余展示字段,推荐通过 site_id 关联维表获取标准名称。 | 来源: settleList.siteName'; +COMMENT ON COLUMN dwd_settlement_head.table_id IS '结账关联的桌台 ID,对应台桌维表 dim_site_table 的主键。 | 来源: settleList.tableId | 角色: 外键'; +COMMENT ON COLUMN dwd_settlement_head.settle_name IS '结账对象名称,一般为 “区域 + 桌号”,如 “A区 A17”,便于报表展示。 | 来源: settleList.settleName'; +COMMENT ON COLUMN dwd_settlement_head.order_trade_no IS '交易号 / 订单流水号,与台费、助教等明细中的 order_trade_no 一致,用于按“交易维度”串联各业务明细。 | 来源: settleList.settleRelateId'; +COMMENT ON COLUMN dwd_settlement_head.create_time IS '结账创建时间(收银端点击“确认结账”的时间),格式:YYYY-MM-DD HH:MM:SS。 | 来源: settleList.createTime'; +COMMENT ON COLUMN dwd_settlement_head.pay_time IS '实际支付完成时间,通常晚于 create_time,用于资金结算及对账分析。 | 来源: settleList.payTime'; +COMMENT ON COLUMN dwd_settlement_head.settle_type IS '结账类型枚举。样本中主要有:1=正常结账;3=特殊类型结账(如挂账、补单、调整单等,具体需业务确认)。 | 来源: settleList.settleType'; +COMMENT ON COLUMN dwd_settlement_head.revoke_order_id IS '若当前记录属于撤销链路,记录对应的撤销单或原单的结账 ID,形成自关联关系。样本中为 0。 | 来源: settleList.revokeOrderId | 角色: 外键'; +COMMENT ON COLUMN dwd_settlement_head.member_id IS '会员主键 ID,一般对应租户维度的会员 ID,用于关联 dim_member。 | 来源: settleList.memberId | 角色: 外键'; +COMMENT ON COLUMN dwd_settlement_head.member_name IS '会员姓名快照,冗余展示字段;当前样本多为空,推荐通过关联会员维表获取标准姓名。 | 来源: settleList.memberName'; +COMMENT ON COLUMN dwd_settlement_head.member_phone IS '会员手机号快照,冗余展示字段,通常通过会员维表获取更可靠。 | 来源: settleList.memberPhone'; +COMMENT ON COLUMN dwd_settlement_head.member_card_account_id IS '会员卡账户 ID,对应 dim_member_card_account 主键;当前样本多为 0,但结构上是“结账 → 具体卡账户”的外键。 | 来源: settleList.tenantMemberCardId | 角色: 外键'; +COMMENT ON COLUMN dwd_settlement_head.member_card_type_name IS '会员卡类型名称快照,如“储值卡”“次卡”等,便于前端展示和报表查看。 | 来源: settleList.memberCardTypeName'; +COMMENT ON COLUMN dwd_settlement_head.is_bind_member IS '本单是否绑定会员。0=否(散客);1=是(存在 member_id)。样本中多为 0。 | 来源: settleList.isBindMember'; +COMMENT ON COLUMN dwd_settlement_head.member_discount_amount IS '会员折扣产生的优惠金额(元),例如会员卡折扣减免的台费/商品金额,参与整单优惠拆分。 | 来源: settleList.memberDiscountAmount'; +COMMENT ON COLUMN dwd_settlement_head.consume_money IS '本次结账消费总额(原价小计),约等于台费 + 商品 + 助教 + 服务等项目原价金额之和,未扣除任何优惠。 | 来源: settleList.consumeMoney'; +COMMENT ON COLUMN dwd_settlement_head.table_charge_money IS '本单台费(桌台计费部分)的金额(原价侧)。 | 来源: settleList.tableChargeMoney'; +COMMENT ON COLUMN dwd_settlement_head.goods_money IS '本单商品销售原价金额,对应酒水、小吃等商品类消费。 | 来源: settleList.goodsMoney'; +COMMENT ON COLUMN dwd_settlement_head.real_goods_money IS '商品实际计入金额,通常为 goods_money 扣除部分促销/折扣之后的金额。 | 来源: settleList.realGoodsMoney'; +COMMENT ON COLUMN dwd_settlement_head.assistant_pd_money IS '助教“排钟 / 点钟 / 按时长服务”等项目的应计金额(原价侧),与助教流水中的 ledger_amount 汇总对应。 | 来源: settleList.assistantPdMoney'; +COMMENT ON COLUMN dwd_settlement_head.assistant_cx_money IS '助教“超休”类助教项目金额(原价侧),是对助教收入的补充拆分维度,具体业务定义需结合助教模块确认。 | 来源: settleList.assistantCxMoney'; +COMMENT ON COLUMN dwd_settlement_head.adjust_amount IS '手动减免,人工调价金额汇总(整单减免或特殊价格调整),通常正值表示减免额度。 | 来源: settleList.adjustAmount'; +COMMENT ON COLUMN dwd_settlement_head.pay_amount IS '本单顾客“实付金额”(不含券面值这类虚拟抵扣),等于各支付渠道金额之和减去退款等调整。 | 来源: settleList.payAmount'; +COMMENT ON COLUMN dwd_settlement_head.balance_amount IS '从会员储值余额账户中扣除的金额(储值卡消费部分)。 | 来源: settleList.balanceAmount'; +COMMENT ON COLUMN dwd_settlement_head.recharge_card_amount IS '充值卡支付金额(使用充值类卡片余额支付的金额),与储值/充值型卡资金来源相关。 | 来源: settleList.rechargeCardAmount'; +COMMENT ON COLUMN dwd_settlement_head.gift_card_amount IS '礼品卡或代金卡支付金额。 | 来源: settleList.giftCardAmount'; +COMMENT ON COLUMN dwd_settlement_head.coupon_amount IS '本单由优惠券(团购券、代金券等)实际抵扣的金额。 | 来源: settleList.couponAmount'; +COMMENT ON COLUMN dwd_settlement_head.rounding_amount IS '抹零 / 四舍五入产生的金额差值,例如按角、分抹零。 | 来源: settleList.roundingAmount'; +COMMENT ON COLUMN dwd_settlement_head.point_amount IS '积分相关金额或数量。根据系统配置可能表示“使用积分抵扣的金额”或“本单获得的积分折算金额”,文档未给出唯一定义。 | 来源: settleList.pointAmount'; + +-- dwd_settlement_head_Ex +CREATE TABLE IF NOT EXISTS dwd_settlement_head_Ex ( + order_settle_id BIGINT, + serial_number INTEGER, + settle_status INTEGER, + can_be_revoked BOOLEAN, + revoke_order_name VARCHAR(100), + revoke_time TIMESTAMPTZ, + is_first_order BOOLEAN, + service_money NUMERIC(18,2), + cash_amount NUMERIC(18,2), + card_amount NUMERIC(18,2), + online_amount NUMERIC(18,2), + refund_amount NUMERIC(18,2), + prepay_money NUMERIC(18,2), + payment_method INTEGER, + coupon_sale_amount NUMERIC(18,2), + all_coupon_discount NUMERIC(18,2), + goods_promotion_money NUMERIC(18,2), + assistant_promotion_money NUMERIC(18,2), + activity_discount NUMERIC(18,2), + assistant_manual_discount NUMERIC(18,2), + point_discount_price NUMERIC(18,2), + point_discount_cost NUMERIC(18,2), + is_use_coupon BOOLEAN, + is_use_discount BOOLEAN, + is_activity BOOLEAN, + operator_name VARCHAR(100), + salesman_name VARCHAR(100), + order_remark VARCHAR(255), + operator_id BIGINT, + salesman_user_id BIGINT, + PRIMARY KEY (order_settle_id) +); +COMMENT ON COLUMN dwd_settlement_head_Ex.order_settle_id IS '结账记录主键 ID(订单结算 ID),全系统统一的结账单号,用于关联台费流水、助教流水、小票等明细表。 | 来源: settleList.id | 角色: 主键'; +COMMENT ON COLUMN dwd_settlement_head_Ex.serial_number IS '结账序列号或打印序号,当前样本全部为 0,具体业务用途未在文档中明确。 | 来源: settleList.serialNumber'; +COMMENT ON COLUMN dwd_settlement_head_Ex.settle_status IS '结账状态枚举。当前样本值均为 2,表示“已结算/已完成”;其他取值及含义未在样本和文档中出现,需后续补充。 | 来源: settleList.settleStatus'; +COMMENT ON COLUMN dwd_settlement_head_Ex.can_be_revoked IS '本单是否仍允许撤销/冲正。0=否;1=是。样本中均为 0。主要用于运维控制,分析价值有限。 | 来源: settleList.canBeRevoked'; +COMMENT ON COLUMN dwd_settlement_head_Ex.revoke_order_name IS '撤销单名称/标识,用于人工识别撤销关系;当前样本为空。 | 来源: settleList.revokeOrderName'; +COMMENT ON COLUMN dwd_settlement_head_Ex.revoke_time IS '撤销时间。无撤销时通常为系统默认值(如 0001-01-01 00:00:00)。 | 来源: settleList.revokeTime'; +COMMENT ON COLUMN dwd_settlement_head_Ex.is_first_order IS '是否首单(新客首单)标记。0=否;1=是。当前样本全部为 0,且文档中说明为“推测用途”,具体业务定义需确认。 | 来源: settleList.isFirst'; +COMMENT ON COLUMN dwd_settlement_head_Ex.service_money IS '其他服务费金额(如包间服务费等),用于与台费、商品、助教金额区分。 | 来源: settleList.serviceMoney'; +COMMENT ON COLUMN dwd_settlement_head_Ex.cash_amount IS '现金支付金额。 | 来源: settleList.cashAmount'; +COMMENT ON COLUMN dwd_settlement_head_Ex.card_amount IS '刷卡类支付金额(如银行卡/信用卡等),具体包含哪些通道需结合支付模块确认。 | 来源: settleList.cardAmount'; +COMMENT ON COLUMN dwd_settlement_head_Ex.online_amount IS '线上支付金额汇总(如微信、支付宝、云闪付等),不区分具体通道。 | 来源: settleList.onlineAmount'; +COMMENT ON COLUMN dwd_settlement_head_Ex.refund_amount IS '本单涉及的退款金额(元)。普通正常结账为 0,退单或部分退款时为正数。 | 来源: settleList.refundAmount'; +COMMENT ON COLUMN dwd_settlement_head_Ex.prepay_money IS '本单使用的预付金/定金金额。 | 来源: settleList.prepayMoney'; +COMMENT ON COLUMN dwd_settlement_head_Ex.payment_method IS '支付方式整体标记(枚举)。当前样本值统一为 0,具体各枚举值对应的支付方式未在文档中说明,需业务确认。 | 来源: settleList.paymentMethod'; +COMMENT ON COLUMN dwd_settlement_head_Ex.coupon_sale_amount IS '优惠券本身的售卖金额/成本金额(例如顾客为购买套餐券支付的金额),当前样本多为 0。 | 来源: settleList.couponSaleAmount'; +COMMENT ON COLUMN dwd_settlement_head_Ex.all_coupon_discount IS '所有券类优惠折扣的汇总金额,用于统计“券优惠总额”。 | 来源: settleList.allCouponDiscount'; +COMMENT ON COLUMN dwd_settlement_head_Ex.goods_promotion_money IS '商品促销产生的优惠金额(如满减、买赠均摊到商品部分)。 | 来源: settleList.goodsPromotionMoney'; +COMMENT ON COLUMN dwd_settlement_head_Ex.assistant_promotion_money IS '助教项目参与活动/促销产生的优惠金额。 | 来源: settleList.assistantPromotionMoney'; +COMMENT ON COLUMN dwd_settlement_head_Ex.activity_discount IS '整单活动折扣金额(如整单打折、满减活动产生的优惠),不区分具体项目类别。 | 来源: settleList.activityDiscount'; +COMMENT ON COLUMN dwd_settlement_head_Ex.assistant_manual_discount IS '针对助教服务的人工减免金额,与一般商品/台费折扣区分开。 | 来源: settleList.assistantManualDiscount'; +COMMENT ON COLUMN dwd_settlement_head_Ex.point_discount_price IS '积分抵扣对应的金额(售价侧),记录因积分使用而减少的应收金额。 | 来源: settleList.pointDiscountPrice'; +COMMENT ON COLUMN dwd_settlement_head_Ex.point_discount_cost IS '积分抵扣对应的成本金额(成本侧),用于毛利和利润分析。 | 来源: settleList.pointDiscountCost'; +COMMENT ON COLUMN dwd_settlement_head_Ex.is_use_coupon IS '是否使用优惠券。0=未使用;1=使用。当前样本均为 0。 | 来源: settleList.isUseCoupon'; +COMMENT ON COLUMN dwd_settlement_head_Ex.is_use_discount IS '是否使用折扣(包括会员折扣或其他整单折扣)。0=未使用;1=使用。当前样本多为 0。 | 来源: settleList.isUseDiscount'; +COMMENT ON COLUMN dwd_settlement_head_Ex.is_activity IS '是否参与营销活动。0=未参与;1=参与。 | 来源: settleList.isActivity'; +COMMENT ON COLUMN dwd_settlement_head_Ex.operator_name IS '结账操作员名称快照(通常带角色前缀,如“收银员:张三”),用于报表展示。 | 来源: settleList.operatorName'; +COMMENT ON COLUMN dwd_settlement_head_Ex.salesman_name IS '营业员/业务员名称,用于业绩归属及提成分析;样本中多为空。 | 来源: settleList.salesManName'; +COMMENT ON COLUMN dwd_settlement_head_Ex.order_remark IS '订单备注,由收银员手工填写的文字说明,如特殊情况、赠送原因等,主要用于人工复盘。 | 来源: settleList.orderRemark'; +COMMENT ON COLUMN dwd_settlement_head_Ex.operator_id IS '结账操作员用户 ID,用于关联员工/账号维度(如 dim_staff)。 | 来源: settleList.operatorId | 角色: 外键'; +COMMENT ON COLUMN dwd_settlement_head_Ex.salesman_user_id IS '营业员用户 ID,可关联员工维度,用于业绩分析和提成计算。 | 来源: settleList.salesManUserId | 角色: 外键'; + +-- dwd_table_fee_log +CREATE TABLE IF NOT EXISTS dwd_table_fee_log ( + table_fee_log_id BIGINT, + order_trade_no BIGINT, + order_settle_id BIGINT, + order_pay_id BIGINT, + tenant_id BIGINT, + site_id BIGINT, + site_table_id BIGINT, + site_table_area_id BIGINT, + site_table_area_name VARCHAR(64), + tenant_table_area_id BIGINT, + member_id BIGINT, + ledger_name VARCHAR(64), + ledger_unit_price NUMERIC(18,2), + ledger_count INTEGER, + ledger_amount NUMERIC(18,2), + real_table_charge_money NUMERIC(18,2), + coupon_promotion_amount NUMERIC(18,2), + member_discount_amount NUMERIC(18,2), + adjust_amount NUMERIC(18,2), + real_table_use_seconds INTEGER, + add_clock_seconds INTEGER, + start_use_time TIMESTAMPTZ, + ledger_end_time TIMESTAMPTZ, + create_time TIMESTAMPTZ, + ledger_status INTEGER, + is_single_order INTEGER, + is_delete INTEGER, + PRIMARY KEY (table_fee_log_id) +); +COMMENT ON COLUMN dwd_table_fee_log.table_fee_log_id IS '台费流水记录主键。每一条台费使用记录唯一一条。对应一次“台费计费单元”。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_table_fee_log.order_trade_no IS '订单交易号。整笔订单的主编号,用于把同一订单下的台费、商品、助教等多种明细串联在一起。可与支付记录中的交易号对应。 | 来源: order_trade_no | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_log.order_settle_id IS '结算单号 / 结账 ID。对应一次完整的结账操作。与 dwd_settlement_head 的主键关联。 | 来源: order_settle_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_log.order_pay_id IS '订单支付记录 ID。对应支付记录中的 id 或 relate_id(视具体模型)。用于追踪这条台费最终对应哪一条支付流水。 | 来源: order_pay_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_log.tenant_id IS '租户 / 品牌 ID。本文件内所有记录属于同一租户。与其他表的 tenant_id 一致,用于品牌级过滤。 | 来源: tenant_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_log.site_id IS '门店 ID。当前样本为同一门店。与嵌套的 siteProfile.id 以及其他 JSON 中的 site_id 对应,用于门店维度关联。 | 来源: site_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_log.site_table_id IS '桌台 ID。对应“台桌基础表”的主键。用于确定具体哪一张台或包厢。 | 来源: site_table_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_log.site_table_area_id IS '门店内“台桌区域” ID(门店视角的区域,如 A 区、B 区、斯诺克区、包厢区)。与门店内部的区域维度对应。 | 来源: site_table_area_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_log.site_table_area_name IS '台桌区域名称,如 “A区”“B区”“斯诺克区”“VIP包厢” 等。主要用于报表展示和人工阅读。 | 来源: site_table_area_name | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.tenant_table_area_id IS '租户层面的台桌区域 ID。用于品牌层统一定义的区域配置(一个区域可在多门店复用)。对应租户级区域维度。 | 来源: tenant_table_area_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_log.member_id IS '会员 ID。多数为 0 表示散客。非 0 时表示关联会员:0 表示散客或未使用会员;>0 对应会员档案中的 id。用于将台费流水关联到 dim_member。 | 来源: member_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_log.ledger_name IS '台号名称,例如 “A1”“A2”“S1”“VIP包厢” 等。等价于桌台维表中的展示名称,冗余在流水中作为快照。 | 来源: ledger_name | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.ledger_unit_price IS '台费结算时的计费单价(元/小时或元/单位时长)。与 ledger_count 配合计算原始应收台费。常见值如 48.0、58.0、68.0、88.0、98.0、116.0 等。 | 来源: ledger_unit_price | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.ledger_count IS '计费时长单位数。与 ledger_unit_price 共同决定原始应收额。可与 real_table_use_seconds 换算关系约为:时长秒数 ≈ ledger_count × 计费粒度(例如 30 分钟、60 分钟)。 | 来源: ledger_count | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.ledger_amount IS '原始应收台费金额,按单价与计费时长计算出来的台费金额,尚未考虑会员、券、调账等各类优惠拆分。 | 来源: ledger_amount | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.real_table_charge_money IS '实际向顾客收取的台费金额(现金 / 实付维度),不含券方承担、会员承担和内部调账部分。若为 0,则该笔台费完全由券、会员或内部调账承担。 | 来源: real_table_charge_money | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.coupon_promotion_amount IS '由优惠券、活动、团购等促销承担的优惠金额,直接抵扣在台费上。常见值为与单价或整倍数相同,例如 48.0、96.0、136.0、144.0 等。若 real_table_charge_money 为 0 且该字段等于 ledger_amount,说明台费完全由促销承担。 | 来源: coupon_promotion_amount | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.member_discount_amount IS '由会员权益产生的优惠金额,例如会员折扣、会员免费台等。若 ledger_amount = real_table_charge_money = member_discount_amount,表示这笔台费由会员权益承担,但仍作为台费收入进行记录。 | 来源: member_discount_amount | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.adjust_amount IS '手动减免,调整金额 / 调账金额。用于将台费金额转移或冲减到其他项目(例如套餐、包厢统一计费)或做手工调整。若 ledger_amount 完全被 adjust_amount 抵消,则说明该笔台费被整体调出当前台费科目。 | 来源: adjust_amount | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.real_table_use_seconds IS '台费实际计费时长(秒)。用于计算台费单价与费率分析。内部统一以秒为单位。 | 来源: real_table_use_seconds | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.add_clock_seconds IS '加钟时长(秒)。在原有使用基础上追加的累计加钟时长,常见为 2400、4200 等 60 的倍数(对应 40 分钟、70 分钟等)。 | 来源: add_clock_seconds | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.start_use_time IS '台开始使用时间,即实际开台时间。与 ledger_start_time 相同,表示计费起算点。 | 来源: start_use_time | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.ledger_end_time IS '台账计费结束时间。通常与 last_use_time 相差 1 秒。可理解为系统为计费进行的截断时刻。 | 来源: ledger_end_time | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.create_time IS '台费流水记录创建时间,通常接近结账时间。用于区分计费期间与结账时间。 | 来源: create_time | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.ledger_status IS '台费状态。样本中全部为 1。含义:1 表示正常已结算台费。按命名推断,0 可能表示未结算,2 可能表示作废或撤销,需要结合后续数据确认。 | 来源: ledger_status | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.is_single_order IS '是否独立计费单元。枚举:1 表示该记录是独立结算的桌费;0 表示非独立结算条目(可能是合并结账、转台过程中的占位记录)。is_single_order = 0 的记录通常 ledger_count 与 real_table_use_seconds 为 0。 | 来源: is_single_order | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log.is_delete IS '逻辑删除标志。0 表示未删除(有效记录);1 表示已逻辑删除(一般不参与统计)。当前样本全部为 0。 | 来源: is_delete | 角色: 无'; + +-- dwd_table_fee_log_Ex +CREATE TABLE IF NOT EXISTS dwd_table_fee_log_Ex ( + table_fee_log_id BIGINT, + operator_name VARCHAR(64), + salesman_name VARCHAR(64), + used_card_amount NUMERIC(18,2), + service_money NUMERIC(18,2), + mgmt_fee NUMERIC(18,2), + fee_total NUMERIC(18,2), + ledger_start_time TIMESTAMPTZ, + last_use_time TIMESTAMPTZ, + operator_id BIGINT, + salesman_user_id BIGINT, + salesman_org_id BIGINT, + PRIMARY KEY (table_fee_log_id) +); +COMMENT ON COLUMN dwd_table_fee_log_Ex.table_fee_log_id IS '台费流水记录主键。每一条台费使用记录唯一一条。对应一次“台费计费单元”。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_table_fee_log_Ex.operator_name IS '操作员姓名。为冗余展示字段,便于直接阅读而不必联表员工档案。 | 来源: operator_name | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log_Ex.salesman_name IS '营业员姓名。当前样本为空。用于需要对营业员维度做业绩统计时作为冗余展示。 | 来源: salesman_name | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log_Ex.used_card_amount IS '由储值卡、次卡等“卡内余额”直接抵扣到台费的金额。当前样本为 0,但语义明确,用于区分“卡扣款”与“现金收款”。 | 来源: used_card_amount | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log_Ex.service_money IS '服务费 / 成本 /分成金额字段,类似助教流水里的 service_money。当前样本全为 0,门店未启用该字段,未来可能用于台费附加服务费或分成计算。 | 来源: service_money | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log_Ex.mgmt_fee IS '管理费字段。当前样本为 0。推测用于未来支持“台费附加管理费”功能。尚未实际启用。 | 来源: mgmt_fee | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log_Ex.fee_total IS '附加费用合计值字段。当前样本为 0。设计上用于汇总管理费、服务费等附加费用。尚未实际启用。 | 来源: fee_total | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log_Ex.ledger_start_time IS '台账计费起始时间。当前样本与 start_use_time 相同,表示计费与开台同时开始。 | 来源: ledger_start_time | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log_Ex.last_use_time IS '最后使用 / 操作时间,通常略晚于 ledger_end_time。可视为客人最后一次用台或最后一次加钟/操作的时间点。 | 来源: last_use_time | 角色: 无'; +COMMENT ON COLUMN dwd_table_fee_log_Ex.operator_id IS '操作员 ID。负责开台 / 结账的员工账号 ID。与员工 / 账号体系中的用户 ID 对应。 | 来源: operator_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_log_Ex.salesman_user_id IS '营业员用户 ID。目前样本值为 0,表示门店暂未使用此字段做提成员工归属,但语义清晰。 | 来源: salesman_user_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_log_Ex.salesman_org_id IS '营业员所属机构 / 部门 ID。目前样本为 0。用于员工组织结构统计时的归属。 | 来源: salesman_org_id | 角色: 外键'; + +-- dwd_table_fee_adjust +CREATE TABLE IF NOT EXISTS dwd_table_fee_adjust ( + table_fee_adjust_id BIGINT, + order_trade_no BIGINT, + order_settle_id BIGINT, + tenant_id BIGINT, + site_id BIGINT, + table_id BIGINT, + table_area_id BIGINT, + table_area_name VARCHAR(64), + tenant_table_area_id BIGINT, + ledger_amount NUMERIC(18,2), + ledger_status INTEGER, + is_delete INTEGER, + adjust_time TIMESTAMPTZ, + PRIMARY KEY (table_fee_adjust_id) +); +COMMENT ON COLUMN dwd_table_fee_adjust.table_fee_adjust_id IS '台费折扣 / 调整流水主键;一条台费打折或调账操作对应一条记录。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_table_fee_adjust.order_trade_no IS '订单交易号;与台费流水、结账记录等表中的同名字段一致,用于把本次台费调整挂到具体订单上。 | 来源: order_trade_no | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_adjust.order_settle_id IS '结算单 / 小票 ID;与小票、结账头表中的 order_settle_id 对应,用于关联同一次结账。 | 来源: order_settle_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_adjust.tenant_id IS '租户 / 品牌 ID;标识该记录属于哪一个商户。 | 来源: tenant_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_adjust.site_id IS '门店 ID;与 dim_site、其它业务事实表中的 site_id 一致。 | 来源: site_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_adjust.table_id IS '台桌 ID;与 dim_table(site_tables_master.id)以及各类台费、助教流水中的 site_table_id 对应,标识哪一张台发生了折扣/调账。 | 来源: site_table_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_adjust.table_area_id IS '门店维度的台桌区域 ID;与 dim_table 中的 site_table_area_id 对应,例如 “斯诺克区”“VIP包厢”等区域。 | 来源: tableProfile.site_table_area_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_adjust.table_area_name IS '台桌区域名称快照,例如 “斯诺克区”“A区”“VIP包厢”;冗余展示字段,可从 dim_table 通过 table_area_id 获取。 | 来源: tableProfile.site_table_area_name'; +COMMENT ON COLUMN dwd_table_fee_adjust.tenant_table_area_id IS '租户维度的“台桌区域 ID”;同一租户下跨门店复用的区域标识,用于在租户级别统计各区域的折扣分布。 | 来源: tenant_table_area_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_adjust.ledger_amount IS '台费调整金额;等于台费流水中对应记录的 adjust_amount。正数表示被减免/调账掉的台费金额(本批数据全部为正);是衡量台费折扣规模的核心度量。 | 来源: ledger_amount'; +COMMENT ON COLUMN dwd_table_fee_adjust.ledger_status IS '调整记录状态(枚举)。1:生效调整(当前有效的折扣/调账记录);0:失效/被覆盖的历史记录(同一订单有多次调整时,旧记录会标记为 0,仅最新一条为 1)。 | 来源: ledger_status'; +COMMENT ON COLUMN dwd_table_fee_adjust.is_delete IS '逻辑删除标记(枚举)。0:未删除(有效记录);1:已逻辑删除(后台标记删除,不再参与业务统计)。当前数据全部为 0,但字段需保留以适配长期数据。 | 来源: is_delete'; +COMMENT ON COLUMN dwd_table_fee_adjust.adjust_time IS '台费调整记录创建时间,即打折/调账操作被系统写入的时间戳,用于时间分析和与结账时间对比(判断是事前折扣还是事后调账)。 | 来源: create_time'; + +-- dwd_table_fee_adjust_Ex +CREATE TABLE IF NOT EXISTS dwd_table_fee_adjust_Ex ( + table_fee_adjust_id BIGINT, + adjust_type INTEGER, + ledger_count INTEGER, + ledger_name VARCHAR(128), + applicant_name VARCHAR(64), + operator_name VARCHAR(64), + applicant_id BIGINT, + operator_id BIGINT, + PRIMARY KEY (table_fee_adjust_id) +); +COMMENT ON COLUMN dwd_table_fee_adjust_Ex.table_fee_adjust_id IS '台费折扣 / 调整流水主键;一条台费打折或调账操作对应一条记录。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_table_fee_adjust_Ex.adjust_type IS '调整类型(枚举)。当前数据全部为 1。取值示例:1:台费打折 / 台费减免(本门店实际使用的唯一类型);其他值:预留给台费转移、误操作恢复等其他类型(当前未出现,仅推测)。 | 来源: adjust_type'; +COMMENT ON COLUMN dwd_table_fee_adjust_Ex.ledger_count IS '调整次数计数,本数据中恒为 1,表示“一次调整事件”;与台费流水中的 ledger_count(计时长)含义不同。 | 来源: ledger_count'; +COMMENT ON COLUMN dwd_table_fee_adjust_Ex.ledger_name IS '调账项目名称或打折原因名称(设计意图);当前门店所有记录值为空字符串,未实际使用。作用暂不明确,保留以备后续业务启用。 | 来源: ledger_name'; +COMMENT ON COLUMN dwd_table_fee_adjust_Ex.applicant_name IS '申请人姓名快照,通常包含角色前缀(如 “收银员:张三”);是 applicant_id 的冗余展示字段,实际名称应以员工维表为准。 | 来源: applicant_name'; +COMMENT ON COLUMN dwd_table_fee_adjust_Ex.operator_name IS '操作员姓名快照;与 operator_id 对应的姓名冗余字段。 | 来源: operator_name'; +COMMENT ON COLUMN dwd_table_fee_adjust_Ex.applicant_id IS '申请人 ID;发起本次台费折扣/调账的员工账号 ID,用于按员工维度统计折扣行为。 | 来源: applicant_id | 角色: 外键'; +COMMENT ON COLUMN dwd_table_fee_adjust_Ex.operator_id IS '实际执行调账操作的操作员 ID;当前样本中与 applicant_id 相同,但模型上允许“申请人 ≠ 操作人”。 | 来源: operator_id | 角色: 外键'; + +-- dwd_store_goods_sale +CREATE TABLE IF NOT EXISTS dwd_store_goods_sale ( + store_goods_sale_id BIGINT, + order_trade_no BIGINT, + order_settle_id BIGINT, + order_pay_id BIGINT, + order_goods_id BIGINT, + site_id BIGINT, + tenant_id BIGINT, + site_goods_id BIGINT, + tenant_goods_id BIGINT, + tenant_goods_category_id BIGINT, + tenant_goods_business_id BIGINT, + site_table_id BIGINT, + ledger_name VARCHAR(200), + ledger_group_name VARCHAR(100), + ledger_unit_price NUMERIC(18,2), + ledger_count INTEGER, + ledger_amount NUMERIC(18,2), + discount_price NUMERIC(18,2), + real_goods_money NUMERIC(18,2), + cost_money NUMERIC(18,2), + ledger_status INTEGER, + is_delete INTEGER, + create_time TIMESTAMPTZ, + PRIMARY KEY (store_goods_sale_id) +); +COMMENT ON COLUMN dwd_store_goods_sale.store_goods_sale_id IS '商品销售明细主键;每条记录代表一次订单中的一个商品行流水。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_store_goods_sale.order_trade_no IS '订单交易号(业务单号);与台费、助教、团购等表的 order_trade_no 一致,用于把同一订单下各类消费串联起来。 | 来源: order_trade_no | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale.order_settle_id IS '结账记录主键 ID;连接结账记录 / 结算头事实表。 | 来源: order_settle_id | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale.order_pay_id IS '支付记录 ID;连接支付流水事实表,用于还原本条销售对应的收款信息。 | 来源: order_pay_id | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale.order_goods_id IS '当前版本的订单内商品明细 ID;可在订单范围内唯一定位该商品行,用于与小票明细等做行级关联。 | 来源: order_goods_id | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale.site_id IS '门店 ID(系统主键);与其它流水表中的 site_id 一致。 | 来源: site_id | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale.tenant_id IS '租户/品牌 ID;同一品牌下多门店共享同一个 tenant_id。 | 来源: tenant_id | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale.site_goods_id IS '门店级商品 ID;连接门店商品档案 dim_store_goods,与库存变动记录中的 siteGoodsId 一致。 | 来源: site_goods_id | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale.tenant_goods_id IS '租户级(品牌级)商品 ID;连接租户级商品档案维度表,一个 tenant_goods_id 在不同门店可对应多个 site_goods_id。 | 来源: tenant_goods_id | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale.tenant_goods_category_id IS '租户级商品一级分类 ID;连接商品分类维度(如酒水、零食等)。 | 来源: tenant_goods_category_id | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale.tenant_goods_business_id IS '租户级商品业务大类 ID(更高一层的业务分类,如“零食类”“酒水类”等)。 | 来源: tenant_goods_business_id | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale.site_table_id IS '球台 ID;非 0 表示该商品在某张台桌上点单,0 表示前台售卖或与台桌无关。连接台桌维度 dim_table。 | 来源: site_table_id | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale.ledger_name IS '销售项目名称(商品名),如“哇哈哈矿泉水”“地道肠”等;为当时销售时刻的名称快照。 | 来源: ledger_name'; +COMMENT ON COLUMN dwd_store_goods_sale.ledger_group_name IS '门店前台菜单分组名称,如“酒水”“零食”“小吃”等;与品牌统一分类是两套维度。 | 来源: ledger_group_name'; +COMMENT ON COLUMN dwd_store_goods_sale.ledger_unit_price IS '结算单价(元/单位);本次销售实际使用的单价。 | 来源: ledger_unit_price'; +COMMENT ON COLUMN dwd_store_goods_sale.ledger_count IS '销售数量(以商品单位计),如 1、2、6、36 等。 | 来源: ledger_count'; +COMMENT ON COLUMN dwd_store_goods_sale.ledger_amount IS '原始应收金额(未考虑任何折扣/抵扣),通常接近 ledger_unit_price × ledger_count。 | 来源: ledger_amount'; +COMMENT ON COLUMN dwd_store_goods_sale.discount_price IS '折后单价(元/单位);无折扣时等于 ledger_unit_price,有折扣时小于 ledger_unit_price。 | 来源: discount_price'; +COMMENT ON COLUMN dwd_store_goods_sale.real_goods_money IS '本行商品实际入账金额(已考虑折扣及其他抵扣后,实际计入营业额的金额);一定不大于 ledger_amount。 | 来源: real_goods_money'; +COMMENT ON COLUMN dwd_store_goods_sale.cost_money IS '本行商品对应的成本金额,用于毛利和利润分析;源自商品档案成本价及成本核算逻辑。 | 来源: cost_money'; +COMMENT ON COLUMN dwd_store_goods_sale.ledger_status IS '销售流水状态:1=正常有效;其他数值(当前数据未出现)一般表示“待结算”“作废”等。 | 来源: ledger_status'; +COMMENT ON COLUMN dwd_store_goods_sale.is_delete IS '逻辑删除标志:0=正常有效;1=已删除(仅保留历史,不再参与前端展示及统计)(本批数据全部为 0)。 | 来源: is_delete'; +COMMENT ON COLUMN dwd_store_goods_sale.create_time IS '销售记录创建时间,通常为结账时间或录入时间;用于时间维度分析,与订单层时间字段对齐。 | 来源: create_time'; + +-- dwd_store_goods_sale_Ex +CREATE TABLE IF NOT EXISTS dwd_store_goods_sale_Ex ( + store_goods_sale_id BIGINT, + legacy_order_goods_id BIGINT, + site_name TEXT, + legacy_site_id BIGINT, + goods_remark TEXT, + option_value_name TEXT, + operator_name TEXT, + open_salesman_flag INTEGER, + salesman_user_id BIGINT, + salesman_name TEXT, + salesman_role_id BIGINT, + salesman_org_id BIGINT, + discount_money NUMERIC(18,2), + returns_number INTEGER, + coupon_deduct_money NUMERIC(18,2), + member_discount_amount NUMERIC(18,2), + point_discount_money NUMERIC(18,2), + point_discount_money_cost NUMERIC(18,2), + package_coupon_id BIGINT, + order_coupon_id BIGINT, + member_coupon_id BIGINT, + option_price NUMERIC(18,2), + option_member_discount_money NUMERIC(18,2), + option_coupon_deduct_money NUMERIC(18,2), + push_money NUMERIC(18,2), + is_single_order INTEGER, + sales_type INTEGER, + operator_id BIGINT +); +COMMENT ON COLUMN dwd_store_goods_sale_Ex.store_goods_sale_id IS '商品销售明细主键;每条记录代表一次订单中的一个商品行流水。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.legacy_order_goods_id IS '旧版订单商品明细 ID,兼容字段;当前接口已统一使用 order_goods_id,本批数据全部为 0。 | 来源: orderGoodsId'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.site_name IS '门店名称,对 site_id 的冗余文本(例如“朗朗桌球”),用于展示。 | 来源: siteName'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.legacy_site_id IS '历史兼容门店 ID;当前接口统一使用 site_id,本批数据 siteId 全部为 0。 | 来源: siteId'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.goods_remark IS '商品备注/口味说明/特殊说明;部分记录为空,部分与商品名相同。 | 来源: goods_remark'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.option_value_name IS '商品选项名称(规格/口味,如大杯/小杯、不加冰等);当前门店未启用多规格,样本中全部为空。 | 来源: option_value_name'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.operator_name IS '操作员姓名冗余,如“收银员:郑丽珊”;用于展示,不作为关联键。 | 来源: operator_name'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.open_salesman_flag IS '是否启用营业员机制标志:1=启用营业员/提成体系(需指定 salesman_* 字段);2=未启用营业员体系(本批数据全部为 2)。 | 来源: openSalesman'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.salesman_user_id IS '营业员用户 ID(系统账号 ID);当前样本全部为 0,说明门店未启用营业员业绩统计。 | 来源: salesman_user_id | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.salesman_name IS '营业员姓名;当前样本全部为空字符串。 | 来源: salesman_name'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.salesman_role_id IS '营业员角色 ID(例如某角色代码对应“销售员”角色);当前样本全部为 0。 | 来源: salesman_role_id | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.salesman_org_id IS '营业员所属组织/部门 ID;当前样本全部为 0,未启用按组织分组统计。 | 来源: sales_man_org_id | 角色: 外键'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.discount_money IS '本行商品的直接价格优惠金额(打折让利部分);在简单场景下满足:ledger_amount − discount_money ≈ real_goods_money(不含积分、券抵扣)。 | 来源: discount_money'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.returns_number IS '退货数量;当前样本全部为 0,如发生退货则记录退回的件数。 | 来源: returns_number'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.coupon_deduct_money IS '优惠券/团购券直接抵扣到本条商品明细上的金额;当前样本为 0,说明券更多在订单级处理。 | 来源: coupon_deduct_money'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.member_discount_amount IS '由会员折扣针对本行商品产生的优惠金额;当前样本全部为 0,折扣通常体现在 discount_money 中。 | 来源: member_discount_amount'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.point_discount_money IS '由积分抵扣的金额(顾客用积分兑换的抵现金额)。 | 来源: point_discount_money'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.point_discount_money_cost IS '积分抵扣对应的成本金额(积分成本、营销费用等核算用)。 | 来源: point_discount_money_cost'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.package_coupon_id IS '套餐券 ID;当商品来自套餐拆分或与套餐券关联时,用于追溯对应的套餐业务(当前样本为 0)。 | 来源: package_coupon_id'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.order_coupon_id IS '订单级优惠券 ID;整单使用某张券时,可用于记录该券对本行商品的分摊关系(当前样本为 0)。 | 来源: order_coupon_id'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.member_coupon_id IS '会员券 ID(如会员专享优惠券);当前样本为 0,为会员权益预留字段。 | 来源: member_coupon_id'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.option_price IS '商品选项(规格/加料等)的附加价格;当前门店未启用此功能,样本为 0。 | 来源: option_price'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.option_member_discount_money IS '由会员折扣作用在“选项价格”上的优惠金额;当前样本为 0。 | 来源: option_member_discount_money'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.option_coupon_deduct_money IS '由优惠券抵扣“选项价格”的金额;当前样本为 0。 | 来源: option_coupon_deduct_money'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.push_money IS '本行商品对应的提成金额(营业员/业务员提成);当前样本为 0,说明提成体系未启用。 | 来源: push_money'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.is_single_order IS '是否作为独立明细参与订单结算:1=作为独立明细参与订单;0=在特殊业务中可能合并为打包项目(当前样本全部为 1)。 | 来源: is_single_order'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.sales_type IS '销售类型:1=正常销售(当前样本全部为 1);常见扩展用法:2=赠品;3=内部消耗;4=盘点调整等。 | 来源: sales_type'; +COMMENT ON COLUMN dwd_store_goods_sale_Ex.operator_id IS '操作员 ID(录入本条销售的员工);与其它流水中的 operator_id 一致,可统一做员工维度分析。 | 来源: operator_id | 角色: 外键'; + +-- dwd_assistant_service_log +CREATE TABLE IF NOT EXISTS dwd_assistant_service_log ( + assistant_service_id BIGINT, + order_trade_no BIGINT, + order_settle_id BIGINT, + order_pay_id BIGINT, + order_assistant_id BIGINT, + order_assistant_type INTEGER, + tenant_id BIGINT, + site_id BIGINT, + site_table_id BIGINT, + tenant_member_id BIGINT, + system_member_id BIGINT, + assistant_no VARCHAR(64), + nickname VARCHAR(64), + site_assistant_id BIGINT, + user_id BIGINT, + assistant_team_id BIGINT, + person_org_id BIGINT, + assistant_level INTEGER, + level_name VARCHAR(64), + skill_id BIGINT, + skill_name VARCHAR(64), + ledger_unit_price NUMERIC(10,2), + ledger_amount NUMERIC(10,2), + projected_income NUMERIC(10,2), + coupon_deduct_money NUMERIC(10,2), + income_seconds INTEGER, + real_use_seconds INTEGER, + add_clock INTEGER, + create_time TIMESTAMPTZ, + start_use_time TIMESTAMPTZ, + last_use_time TIMESTAMPTZ, + is_delete INTEGER, + PRIMARY KEY (assistant_service_id) +); +COMMENT ON COLUMN dwd_assistant_service_log.assistant_service_id IS '助教服务流水主键,系统内唯一标识一次助教服务记录。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_assistant_service_log.order_trade_no IS '订单交易号,用于与台费、商品、支付等同一订单下的其他明细串联。 | 来源: order_trade_no | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.order_settle_id IS '结算单号,对应结账记录、小票中的结算主键。 | 来源: order_settle_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.order_pay_id IS '支付记录主键 ID,用于关联支付流水。 | 来源: order_pay_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.order_assistant_id IS '订单中“助教项目明细”的内部 ID,一笔订单中多段助教服务时用于区分。 | 来源: order_assistant_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.order_assistant_type IS '助教服务类型枚举:1 表示常规助教服务(如基础课);2 表示附加类助教服务(如附加课);其他值预留。 | 来源: order_assistant_type'; +COMMENT ON COLUMN dwd_assistant_service_log.tenant_id IS '租户/品牌 ID,用于区分商户。 | 来源: tenant_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.site_id IS '门店 ID,对应门店维表中的门店主键。 | 来源: site_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.site_table_id IS '球台/包厢 ID,对应台桌维表主键。 | 来源: site_table_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.tenant_member_id IS '商户维度会员 ID,对应会员档案主键;0 表示非会员或散客。 | 来源: tenant_member_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.system_member_id IS '系统级会员 ID,用于跨门店识别同一会员。 | 来源: system_member_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.assistant_no IS '助教编号/工号,如 “27”;与助教档案中的工号一致。 | 来源: assistantNo'; +COMMENT ON COLUMN dwd_assistant_service_log.nickname IS '助教对外昵称,如“佳怡”“周周”;用于展示,不参与业务逻辑。 | 来源: nickname'; +COMMENT ON COLUMN dwd_assistant_service_log.site_assistant_id IS '门店维度助教 ID,对应助教账号维表主键。 | 来源: site_assistant_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.user_id IS '助教对应的系统用户 ID,对应账号体系中的 user_id。 | 来源: user_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.assistant_team_id IS '助教团队 ID,用于分组统计团队业绩。 | 来源: assistant_team_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.person_org_id IS '助教所属人事组织/部门 ID,如“助教部”;用于组织维度分析。 | 来源: person_org_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.assistant_level IS '助教等级编码:8=助教管理;10=初级;20=中级;30=高级;用于薪酬/评价分层。 | 来源: assistant_level | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.level_name IS '助教等级名称,与 assistant_level 对应,如“初级”“中级”“高级”“助教管理”。 | 来源: levelName'; +COMMENT ON COLUMN dwd_assistant_service_log.skill_id IS '助教服务课程/技能 ID,应对应课程/技能配置表。 | 来源: skill_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log.skill_name IS '助教服务课程/技能名称,如“基础课”“附加课”。 | 来源: skillName'; +COMMENT ON COLUMN dwd_assistant_service_log.ledger_unit_price IS '助教服务标准单价(原价),例如按小时或按节课的标价。 | 来源: ledger_unit_price'; +COMMENT ON COLUMN dwd_assistant_service_log.ledger_amount IS '按标准单价计算的应收金额,近似等于 ledger_unit_price×计费时长换算后的金额。 | 来源: ledger_amount'; +COMMENT ON COLUMN dwd_assistant_service_log.projected_income IS '实际计入门店收入的金额,已经考虑会员权益、券抵扣等后的结果。 | 来源: projected_income'; +COMMENT ON COLUMN dwd_assistant_service_log.coupon_deduct_money IS '由优惠券、团购券等直接抵扣到本次助教服务上的金额;0 表示未使用券。 | 来源: coupon_deduct_money'; +COMMENT ON COLUMN dwd_assistant_service_log.income_seconds IS '计费秒数(用于计算应收收入的时间长度),通常为按分钟取整的秒数。 | 来源: income_seconds'; +COMMENT ON COLUMN dwd_assistant_service_log.real_use_seconds IS '实际服务时长(秒),真实消耗的时间,用于分析助教工作量。 | 来源: real_use_seconds'; +COMMENT ON COLUMN dwd_assistant_service_log.add_clock IS '加钟秒数,在原有预约基础上临时增加的服务时间,数值为 60 的倍数。 | 来源: add_clock'; +COMMENT ON COLUMN dwd_assistant_service_log.create_time IS '助教流水记录创建时间,接近下单/结算时间。 | 来源: create_time'; +COMMENT ON COLUMN dwd_assistant_service_log.start_use_time IS '助教实际开始服务时间,通常与 ledger_start_time 一致。 | 来源: start_use_time'; +COMMENT ON COLUMN dwd_assistant_service_log.last_use_time IS '助教最后一次服务时间,通常与 ledger_end_time 一致。 | 来源: last_use_time'; +COMMENT ON COLUMN dwd_assistant_service_log.is_delete IS '逻辑删除标志:0 未删除;1 已逻辑删除,用于保留历史数据。 | 来源: is_delete'; + +-- dwd_assistant_service_log_Ex +CREATE TABLE IF NOT EXISTS dwd_assistant_service_log_Ex ( + assistant_service_id BIGINT, + table_name VARCHAR(64), + assistant_name VARCHAR(64), + ledger_name VARCHAR(128), + ledger_group_name VARCHAR(128), + ledger_count INTEGER, + member_discount_amount NUMERIC(10,2), + manual_discount_amount NUMERIC(10,2), + service_money NUMERIC(10,2), + returns_clock INTEGER, + ledger_start_time TIMESTAMPTZ, + ledger_end_time TIMESTAMPTZ, + ledger_status INTEGER, + is_confirm INTEGER, + is_single_order INTEGER, + is_not_responding INTEGER, + is_trash INTEGER, + trash_applicant_id BIGINT, + trash_applicant_name VARCHAR(64), + trash_reason VARCHAR(255), + salesman_user_id BIGINT, + salesman_name VARCHAR(64), + salesman_org_id BIGINT, + skill_grade INTEGER, + service_grade INTEGER, + composite_grade NUMERIC(5,2), + sum_grade NUMERIC(10,2), + get_grade_times INTEGER, + grade_status INTEGER, + composite_grade_time TIMESTAMPTZ, + PRIMARY KEY (assistant_service_id) +); +COMMENT ON COLUMN dwd_assistant_service_log_Ex.assistant_service_id IS '助教服务流水主键,系统内唯一标识一次助教服务记录。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.table_name IS '球台名称,如 “A17”“S1”,与 site_table_id 冗余,用于展示。 | 来源: tableName'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.assistant_name IS '助教姓名,如“何海婷”;与助教档案中的真实姓名一致。 | 来源: assistantName'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.ledger_name IS '助教计费项目名称,如“2-佳怡”等,通常为展示用组合字段。 | 来源: ledger_name'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.ledger_group_name IS '助教项目所属的计费分组/套餐分组名称,目前导出数据中为空,未看到实际使用场景。 | 来源: ledger_group_name'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.ledger_count IS '台账计费时长(秒),通常与 real_use_seconds 接近或相等。取income_seconds TEXT'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.member_discount_amount IS '由会员卡折扣产生的优惠金额,当前样本中为 0,但字段语义明确。 | 来源: member_discount_amount'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.manual_discount_amount IS '收银员手动减免金额(人工改价);当前导出数据中为 0。 | 来源: manual_discount_amount'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.service_money IS '与助教结算的金额或服务成本金额,当前数据全部为 0,具体结算规则未见启用。 | 来源: service_money'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.returns_clock IS '退钟秒数(取消加钟或提前结束退回的时间),当前样本中全部为 0,未见业务使用。 | 来源: returns_clock'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.ledger_start_time IS '台账计费起始时间。 | 来源: ledger_start_time'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.ledger_end_time IS '台账计费结束时间,可作为本次服务结束时间。 | 来源: ledger_end_time'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.ledger_status IS '助教流水状态:当前数据为 1,表示正常有效;其他值预留给已作废、未结算等状态。 | 来源: ledger_status'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.is_confirm IS '确认状态:当前样本为 2,一般含义为 1=待确认,2=已确认/已完成(含义基于字段名和现有值推断)。 | 来源: is_confirm'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.is_single_order IS '是否单独订单:1 表示助教服务作为单独订单结算;0 表示与其他项目合单结算。当前样本全部为 1。 | 来源: is_single_order'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.is_not_responding IS '是否存在“未响应/爽约”等异常:0 表示正常;1 表示未响应或爽约(基于字段名推断,当前数据均为 0)。 | 来源: is_not_responding'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.is_trash IS '是否已废除:0 表示正常有效;1 表示已废除,与助教废除记录表(assistant_cancellation_records)对应。 | 来源: is_trash'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.trash_applicant_id IS '提出废除申请的员工 ID,用于追溯谁发起了废除操作。 | 来源: trash_applicant_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.trash_applicant_name IS '废除申请人姓名,仅用于展示,与 trash_applicant_id 冗余。 | 来源: trash_applicant_name'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.trash_reason IS '废除原因文案,如“顾客取消”“录入错误”,便于分析异常原因。 | 来源: trash_reason'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.salesman_user_id IS '营业员/销售员用户 ID,大多为 0,当前门店未明显使用此维度。 | 来源: salesman_user_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.salesman_name IS '营业员/销售员姓名,多数为空字符串。 | 来源: salesman_name'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.salesman_org_id IS '营业员所属组织/部门 ID,多数为 0,尚未看到实际业务使用。 | 来源: salesman_org_id | 角色: 外键'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.skill_grade IS '课程技能评分(整数),当前样本全为 0,评价功能尚未启用。 | 来源: skill_grade'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.service_grade IS '服务态度评分(整数),当前样本全为 0。 | 来源: service_grade'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.composite_grade IS '综合评分(技能+服务等加权结果),当前样本为 0。 | 来源: composite_grade'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.sum_grade IS '累计评分总和,用于计算平均分,当前样本为 0。 | 来源: sum_grade'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.get_grade_times IS '获得评价的次数,当前样本为 0。 | 来源: get_grade_times'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.grade_status IS '评价状态枚举:当前样本为 1,一般含义为“未评价/正常”,其他状态未见实际值。 | 来源: grade_status'; +COMMENT ON COLUMN dwd_assistant_service_log_Ex.composite_grade_time IS '最近一次综合评分时间或评价更新时间,当前为默认时间 “0001-01-01 00:00:00”。 | 来源: composite_grade_time'; + +-- dwd_assistant_trash_event +CREATE TABLE IF NOT EXISTS dwd_assistant_trash_event ( + assistant_trash_event_id BIGINT, + site_id BIGINT, + table_id BIGINT, + table_area_id BIGINT, + assistant_no VARCHAR(32), + assistant_name VARCHAR(64), + charge_minutes_raw INTEGER, + abolish_amount NUMERIC(18,2), + trash_reason VARCHAR(255), + create_time TIMESTAMPTZ, + PRIMARY KEY (assistant_trash_event_id) +); +COMMENT ON COLUMN dwd_assistant_trash_event.assistant_trash_event_id IS '助教废除事件主键。与源 JSON 中 id 一一对应,单表内唯一。没有业务含义,只作为技术主键使用。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_assistant_trash_event.site_id IS '门店 ID。与其他 JSON 中的 siteId / site_id 含义一致。用来关联 dim_site。当前样例全部为同一门店(朗朗桌球),但设计上支持多门店。 | 来源: siteId | 角色: 外键(指向 dim_site)'; +COMMENT ON COLUMN dwd_assistant_trash_event.table_id IS '台桌 ID。对应 site_tables_master.json 中的 id。用于定位哪一张球台发生了助教废除,用于后续软关联台费流水、助教流水时的重要条件。 | 来源: tableId | 角色: 外键(指向 dim_table)'; +COMMENT ON COLUMN dwd_assistant_trash_event.table_area_id IS '台桌区域 ID。应与台桌维或区域维中的 area_id 一致,用于按区域统计(A 区/B 区/VIP 包厢等)。 | 来源: tableAreaId | 角色: 外键(潜在指向 dim_table_area)'; +COMMENT ON COLUMN dwd_assistant_trash_event.assistant_no IS '助教编号(工号/序号),如 ''2''、''4''、''27'' 等。与助教档案表 assistant_accounts_master.assistant_no、助教流水中的 assistantNo 一致,用于标识哪位助教。枚举:在门店内是有限编号集合,但并非硬编码含义。 | 来源: assistantOn | 角色: 外键(指向 dim_assistant)'; +COMMENT ON COLUMN dwd_assistant_trash_event.assistant_name IS '助教姓名/昵称,如 “泡芙”“佳怡”等。为冗余展示字段,真实姓名以助教档案为准。当前数据中与档案一致。 | 来源: assistantName'; +COMMENT ON COLUMN dwd_assistant_trash_event.charge_minutes_raw IS '助教被废除前“已计费时长(分钟)”的原始值。单位为分钟。示例:214、3600、10800 等。0 表示尚未发生有效计费就被废除。当前数据中存在异常大值(例如 10800),这一业务含义需结合实际规则理解,但本字段原样保留。枚举:数值型,无固定枚举。 | 来源: pdChargeMinutes'; +COMMENT ON COLUMN dwd_assistant_trash_event.abolish_amount IS '与本次助教废除操作关联的金额,单位元。字面含义为“助教废除金额”。当前样例均为非负数,如 5.83、570.00、0.00 等。正负方向:按照 ODS/JSON 原样保留,暂不在数仓层赋予“收入/支出”的方向含义,后续在 DWS 层按业务规则解释(例如是退还顾客、扣除收益等)。 | 来源: assistantAbolishAmount'; +COMMENT ON COLUMN dwd_assistant_trash_event.trash_reason IS '废除原因的文本说明,例如可以写“顾客临时取消”“误操作”等。当前样例中全部为空字符串,说明前台并未使用该字段。但从结构上看,是一个自由文本字段,不是枚举。 | 来源: trashReason'; +COMMENT ON COLUMN dwd_assistant_trash_event.create_time IS '这条废除记录创建的时间,格式 YYYY-MM-DD HH:MM:SS。代表系统正式记录“废除操作”的时刻,用于和助教服务流水按时间窗口做软关联(结合 site、table、assistant 等条件)。 | 来源: createTime'; + +-- dwd_assistant_trash_event_Ex +CREATE TABLE IF NOT EXISTS dwd_assistant_trash_event_Ex ( + assistant_trash_event_id BIGINT, + table_name VARCHAR(64), + table_area_name VARCHAR(64), + PRIMARY KEY (assistant_trash_event_id) +); +COMMENT ON COLUMN dwd_assistant_trash_event_Ex.assistant_trash_event_id IS '助教废除事件主键。与源 JSON 中 id 一一对应,单表内唯一。没有业务含义,只作为技术主键使用。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_assistant_trash_event_Ex.table_name IS '台桌名称/编号,便于直观看报表,如 “C1”“B9”“VIP1”等。文案冗余自台桌维度。枚举:在门店范围内是有限集合,但不是固定编码表。 | 来源: tableName'; +COMMENT ON COLUMN dwd_assistant_trash_event_Ex.table_area_name IS '台桌区域名称(中文),如 “A区”“B区”“C区”“VIP包厢”“补时长”等。展示用文本,具体层级信息由区域维表提供。 | 来源: tableArea'; + +-- dwd_member_balance_change +CREATE TABLE IF NOT EXISTS dwd_member_balance_change ( + balance_change_id BIGINT, + tenant_id BIGINT, + site_id BIGINT, + register_site_id BIGINT, + tenant_member_id BIGINT, + system_member_id BIGINT, + tenant_member_card_id BIGINT, + card_type_id BIGINT, + card_type_name VARCHAR(32), + member_name VARCHAR(64), + member_mobile VARCHAR(20), + balance_before NUMERIC(18,2), + change_amount NUMERIC(18,2), + balance_after NUMERIC(18,2), + from_type INTEGER, + payment_method INTEGER, + change_time TIMESTAMPTZ, + is_delete INTEGER, + remark VARCHAR(255), + PRIMARY KEY (balance_change_id) +); +COMMENT ON COLUMN dwd_member_balance_change.balance_change_id IS '余额变动记录主键 ID,来源于源系统的余额变更流水 ID,唯一标识一条余额变动事件。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_member_balance_change.tenant_id IS '租户/品牌 ID,在整体系统中唯一标识一家商户。当前样本中为同一值。 | 来源: tenant_id | 角色: 外键'; +COMMENT ON COLUMN dwd_member_balance_change.site_id IS '本次余额变动发生的门店 ID。通常对应具体门店;样本中:非 0 为“朗朗桌球”,0 代表平台级/虚拟门店场景(如活动抵用券结算)。 | 来源: site_id | 角色: 外键'; +COMMENT ON COLUMN dwd_member_balance_change.register_site_id IS '办卡门店 ID(卡注册门店)。与 site_id 区分:register_site_id=当初办卡门店,site_id=本次余额变动实际发生门店。当前样本中全部相同。 | 来源: register_site_id | 角色: 外键'; +COMMENT ON COLUMN dwd_member_balance_change.tenant_member_id IS '租户维度会员 ID(同一租户内的会员主键),用于关联会员档案。 | 来源: tenant_member_id | 角色: 外键'; +COMMENT ON COLUMN dwd_member_balance_change.system_member_id IS '系统全局会员 ID(跨租户统一的会员标识)。当前只有一个门店,但结构上允许同一人跨租户共享该 ID。 | 来源: system_member_id | 角色: 外键'; +COMMENT ON COLUMN dwd_member_balance_change.tenant_member_card_id IS '会员卡账户 ID(租户内唯一的一张具体卡,例如某人的储值卡/酒水卡/台费卡/活动抵用券等)。本次余额变动作用于这张卡。 | 来源: tenant_member_card_id | 角色: 外键'; +COMMENT ON COLUMN dwd_member_balance_change.card_type_id IS '卡种类型 ID。与 card_type_name 一一对应,用于区分不同卡种(储值卡/活动抵用券/酒水卡/台费卡)。 | 来源: card_type_id | 角色: 外键'; +COMMENT ON COLUMN dwd_member_balance_change.card_type_name IS '卡种名称(中文):• 储值卡:通用储值卡;• 活动抵用券:活动送券型卡;• 酒水卡:指定用于酒水类消费;• 台费卡:指定用于台费消费。 | 来源: memberCardTypeName'; +COMMENT ON COLUMN dwd_member_balance_change.member_name IS '会员姓名/称呼(如“曾丹烨”“葛先生”“胡先生”),主要用于运营、客服和人工识别。 | 来源: memberName'; +COMMENT ON COLUMN dwd_member_balance_change.member_mobile IS '会员手机号(完整号码字符串),是会员识别、营销触达的重要字段。 | 来源: memberMobile'; +COMMENT ON COLUMN dwd_member_balance_change.balance_before IS '本次变动前的卡内余额,单位:元。可为 0、数百、数千等。 | 来源: before'; +COMMENT ON COLUMN dwd_member_balance_change.change_amount IS '本次余额变动金额,单位:元:• 正数:余额增加(充值、赠送、调整加款等);• 负数:余额减少(消费扣款、退款冲减、活动抵扣等)。所有记录严格满足:balance_after = balance_before + change_amount(浮点精度内)。 | 来源: account_data'; +COMMENT ON COLUMN dwd_member_balance_change.balance_after IS '本次变动后的卡内余额,单位:元。由 before + account_data 计算而得,在源数据中已给出。 | 来源: after'; +COMMENT ON COLUMN dwd_member_balance_change.from_type IS '余额变动来源类型枚举(控制业务含义与方向):• 1:日常消费扣款 —— change_amount 为负数,payment_method=0,表示用卡支付消费被扣余额;• 3:充值增加 —— change_amount 为正数,payment_method=4,表示顾客通过外部支付为卡充值(扫码、银行卡等);• 4:调整/赠送增加 —— change_amount 为正数,payment_method=3,通常为后台赠送或手工加款;• 7:充值退款 —— change_amount 为负数,remark=''充值退款'',表示对历史充值做退款,以减少卡内余额方式体现;• 9:活动抵用券相关余额冲减 —— change_amount 为负数,卡种为“活动抵用券”,site_id=0,表示活动券额度被扣回或结算;• 2:其他增加 —— 当前仅 1 条正数样本(+1865.80),具体业务类型不明,但可确定为余额增加类。总体上:1/7/9 为减余额类,2/3/4 为加余额类。 | 来源: from_type'; +COMMENT ON COLUMN dwd_member_balance_change.payment_method IS '支付/变动渠道枚举(与源系统支付方式枚举一致):• 0:内部结算/无外部支付 —— 日常消费扣款、内部扣减、退款冲减等场景,新资金流不在本记录中产生;• 3:赠送/后台调整渠道 —— 与 from_type=4 搭配出现,表示此余额增加不是顾客付钱,而是后台发放或内部调账;• 4:充值外部支付渠道 —— 与 from_type=3 搭配出现,代表顾客通过某外部渠道完成充值(具体是微信/支付宝/银行卡等需要结合支付枚举表进一步映射)。 | 来源: payment_method'; +COMMENT ON COLUMN dwd_member_balance_change.change_time IS '余额变动时间(记录创建时间),格式 YYYY-MM-DD HH:MM:SS。通常紧邻实际交易发生时间,用于按时间线分析资金变动。 | 来源: create_time'; +COMMENT ON COLUMN dwd_member_balance_change.is_delete IS '逻辑删除标记:• 0:正常记录(当前样本全部为 0);• 1:逻辑删除(标记为删除但数据库保留,用于追溯)。分析时通常需要过滤掉 is_delete=1 的记录。 | 来源: is_delete'; +COMMENT ON COLUMN dwd_member_balance_change.remark IS '余额变动备注信息。当前样本中主要为:• 空字符串:无额外说明;• 充值退款:明确标记该条记录为“充值退款”业务,与 from_type=7 完全对应。后续可能出现其他业务备注。 | 来源: remark'; + +-- dwd_member_balance_change_EX +CREATE TABLE IF NOT EXISTS dwd_member_balance_change_EX ( + balance_change_id BIGINT, + pay_site_name VARCHAR(64), + register_site_name VARCHAR(64), + refund_amount NUMERIC(18,2), + operator_id BIGINT, + operator_name VARCHAR(64), + PRIMARY KEY (balance_change_id) +); +COMMENT ON COLUMN dwd_member_balance_change_EX.balance_change_id IS '余额变动记录主键 ID,来源于源系统的余额变更流水 ID,唯一标识一条余额变动事件。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_member_balance_change_EX.pay_site_name IS '余额变动发生门店名称,对应 site_id 的中文名。示例:朗朗桌球;当 site_id = 0 时通常为空字符串。纯展示冗余。 | 来源: paySiteName'; +COMMENT ON COLUMN dwd_member_balance_change_EX.register_site_name IS '办卡门店名称,对应 register_site_id 的中文名。当前样本全部为 朗朗桌球,属于冗余展示。 | 来源: registerSiteName'; +COMMENT ON COLUMN dwd_member_balance_change_EX.refund_amount IS '退款金额字段。在当前样本数据中全部为 0.00,推测用于区分“退回卡内余额”和“原路退回”等更细的退款模式,但目前未启用。 | 来源: refund_amount'; +COMMENT ON COLUMN dwd_member_balance_change_EX.operator_id IS '操作员 ID,执行本次余额变动操作的员工账号主键。可关联员工/账号维度。 | 来源: operator_id | 角色: 外键'; +COMMENT ON COLUMN dwd_member_balance_change_EX.operator_name IS '操作员名称及职位说明,例如:收银员:郑丽珊、店长:谢晓洪 等,是对 operator_id 的可读冗余。 | 来源: operator_name'; + +-- dwd_groupbuy_redemption +CREATE TABLE IF NOT EXISTS dwd_groupbuy_redemption ( + redemption_id BIGINT, + tenant_id BIGINT, + site_id BIGINT, + table_id BIGINT, + tenant_table_area_id BIGINT, + table_charge_seconds INTEGER, + order_trade_no BIGINT, + order_settle_id BIGINT, + order_coupon_id BIGINT, + coupon_origin_id BIGINT, + promotion_activity_id BIGINT, + promotion_coupon_id BIGINT, + order_coupon_channel INTEGER, + ledger_unit_price NUMERIC(18,2), + ledger_count INTEGER, + ledger_amount NUMERIC(18,2), + coupon_money NUMERIC(18,2), + promotion_seconds INTEGER, + coupon_code VARCHAR(64), + is_single_order INTEGER, + is_delete INTEGER, + ledger_name VARCHAR(128), + create_time TIMESTAMPTZ, + PRIMARY KEY (redemption_id) +); +COMMENT ON COLUMN dwd_groupbuy_redemption.redemption_id IS '团购券核销流水主键。一条记录代表一次团购券使用在某次台费上的一条核销明细。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_groupbuy_redemption.tenant_id IS '租户/品牌 ID。与其他表统一的租户标识,用于品牌维度聚合。 | 来源: tenant_id | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption.site_id IS '门店 ID。与门店维度及其他业务事实中的 site_id 一致。 | 来源: site_id | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption.table_id IS '球台 ID。与台桌维度表中的 id 对应,用于确定具体哪一张球台。 | 来源: table_id | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption.tenant_table_area_id IS '租户级台区组合 ID。与团购套餐定义中的 tenant_table_area_id_list 元素对应,表示该券实际使用时所在的台区组合。用于校验券的适用台区是否匹配实际台桌。 | 来源: tenant_table_area_id | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption.table_charge_seconds IS '本次结算中该球台总计计费的秒数(整台计费时间)。当台上除了券覆盖时长之外还有额外计费时间时,该值会大于券核销时长。 | 来源: table_charge_seconds'; +COMMENT ON COLUMN dwd_groupbuy_redemption.order_trade_no IS '订单交易号。与台费流水、商品销售、助教服务、小票详情等表的 order_trade_no 一致,用于将同一笔结账中的所有明细串联起来。 | 来源: order_trade_no | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption.order_settle_id IS '结算单 ID。与结账记录和小票详情中的结算主键对应,用于从团购券核销记录跳转到整单结算。 | 来源: order_settle_id | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption.order_coupon_id IS '订单中的“券使用记录 ID”。与平台或内部券核销表中的主键一致,用于在订单内部定位这条券使用记录。当前与 coupon_origin_id 数值相等。 | 来源: order_coupon_id | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption.coupon_origin_id IS '上游系统或第三方平台中该券记录的主键 ID。可在平台验券记录中查到券的来源平台、原订单等。当前与 order_coupon_id 数值一致,但语义是“券来源 ID”。 | 来源: coupon_origin_id | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption.promotion_activity_id IS '促销活动 ID。每条记录对应一个活动主键,用于识别券所属的促销活动或团购活动。 | 来源: promotion_activity_id | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption.promotion_coupon_id IS '团购套餐定义 ID。与 group_buy_packages.json 中的 id 一一对应,表示当前使用的是哪一种团购套餐(例如某款“一小时套餐”“两小时套餐”)。 | 来源: promotion_coupon_id | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption.order_coupon_channel IS '券渠道类型枚举。观测值:1(大量记录)、2(少量记录)。用于区分券的来源渠道,例如不同团购平台或内部券。具体数值与渠道名称的映射由业务配置决定。 | 来源: order_coupon_channel | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption.ledger_unit_price IS '本次券在台费侧对应的标准单价,单位元/小时。典型值如 29.9、39.9、59.9、69.9 等。与门店台费计费规则中的单价相对应,用于计算券对应的金额。 | 来源: ledger_unit_price'; +COMMENT ON COLUMN dwd_groupbuy_redemption.ledger_count IS '本次券实际核销的计费秒数。大部分记录等于 promotion_seconds,少数略小于标准时长,表示这张券只覆盖了本次台费的一部分时长。 | 来源: ledger_count'; +COMMENT ON COLUMN dwd_groupbuy_redemption.ledger_amount IS '本次团购券实际冲抵台费的金额。大部分记录中该值与 coupon_money 相等,少数存在小数差异,来源于按单价与秒数换算的结果。 | 来源: ledger_amount'; +COMMENT ON COLUMN dwd_groupbuy_redemption.coupon_money IS '本次核销时,团购券在门店侧对应的金额额度(可抵扣金额)。同一种 promotion_coupon_id 下,该值固定,例如某套餐固定为 48.00 元、某套餐固定为 96.00 元等。 | 来源: coupon_money'; +COMMENT ON COLUMN dwd_groupbuy_redemption.promotion_seconds IS '团购套餐定义的标准时长权益,单位秒。观测枚举值为 3600、7200、14400,分别对应 1 小时、2 小时、4 小时。与团购套餐定义表中的 duration 字段一致。 | 来源: promotion_seconds'; +COMMENT ON COLUMN dwd_groupbuy_redemption.coupon_code IS '团购券券码字符串。每条记录一个唯一券码,例如“0107892475999”。用于与平台验券记录、券购买记录等做一一对应,追踪券的全生命周期。 | 来源: coupon_code | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption.is_single_order IS '是否作为单独订单行。观测值:1 为主,表示以独立条目方式结算;0 为个别记录,表示嵌入某种组合结算结构。具体业务含义依赖上层订单结构设计。 | 来源: is_single_order'; +COMMENT ON COLUMN dwd_groupbuy_redemption.is_delete IS '逻辑删除标记。0 表示正常记录,1 表示逻辑删除但数据仍保留用于追溯。当前样本全部为 0,用于过滤有效记录。 | 来源: is_delete'; +COMMENT ON COLUMN dwd_groupbuy_redemption.ledger_name IS '团购项目记账名称,如“全天A区中八一小时”“B区桌球一小时”“中八、斯诺克包厢两小时”等。通常与团购套餐名称相近,用于报表展示和套餐维度分析。 | 来源: ledger_name'; +COMMENT ON COLUMN dwd_groupbuy_redemption.create_time IS '本条团购券核销流水的创建时间,通常即核销时间,格式为“YYYY-MM-DD HH:MM:SS”。用于时间维度分析和数据分区。 | 来源: create_time'; + +-- dwd_groupbuy_redemption_Ex +CREATE TABLE IF NOT EXISTS dwd_groupbuy_redemption_Ex ( + redemption_id BIGINT, + site_name VARCHAR(64), + table_name VARCHAR(64), + table_area_name VARCHAR(64), + order_pay_id BIGINT, + goods_option_price NUMERIC(18,2), + goods_promotion_money NUMERIC(18,2), + table_service_promotion_money NUMERIC(18,2), + assistant_promotion_money NUMERIC(18,2), + assistant_service_promotion_money NUMERIC(18,2), + reward_promotion_money NUMERIC(18,2), + recharge_promotion_money NUMERIC(18,2), + offer_type INTEGER, + ledger_status INTEGER, + operator_id BIGINT, + operator_name VARCHAR(64), + salesman_user_id BIGINT, + salesman_name VARCHAR(64), + salesman_role_id BIGINT, + salesman_org_id BIGINT, + ledger_group_name VARCHAR(128), + PRIMARY KEY (redemption_id) +); +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.redemption_id IS '团购券核销流水主键。一条记录代表一次团购券使用在某次台费上的一条核销明细。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.site_name IS '门店名称。当前样本全部为同一门店,仅作冗余展示。 | 来源: siteName'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.table_name IS '球台名称或台号。如 A7、A11、B1 等。用于业务报表展示与人工识别。 | 来源: tableName'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.table_area_name IS '台区名称。观测枚举值包括 A区、B区、斯诺克区、麻将房。实际取值随门店台区配置变化。 | 来源: tableAreaName'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.order_pay_id IS '支付流水 ID。部分记录为 0,表示未在当前导出范围内关联到具体支付记录。真实含义为“指向支付记录表中的支付流水”。 | 来源: order_pay_id | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.goods_option_price IS '商品规格价格,用于商品类促销分摊时使用。当前在团购券核销场景中全部为 0,仅作为结构预留。 | 来源: goodsOptionPrice'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.goods_promotion_money IS '本次券使用中分摊到“商品”部分的促销金额。当前所有记录为 0,说明本门店的团购券未用于商品抵扣。 | 来源: goods_promotion_money'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.table_service_promotion_money IS '本次券使用中分摊到“台费服务费”部分的促销金额。当前样本全部为 0,结构上用于支持更细粒度的费用拆分。 | 来源: table_service_promotion_money'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.assistant_promotion_money IS '本次券使用中分摊到“助教服务”的促销金额。当前全部为 0,说明团购券尚未用于助教服务的抵扣。 | 来源: assistant_promotion_money'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.assistant_service_promotion_money IS '进一步细分助教服务对应的促销金额。当前为 0,仅预留结构以支持复杂场景。 | 来源: assistant_service_promotion_money'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.reward_promotion_money IS '本次促销中属于“奖励金、积分”等来源的促销金额分摊。当前为 0,预留用于积分或奖励金同时参与活动时的金额拆分。 | 来源: reward_promotion_money'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.recharge_promotion_money IS '来自“充值赠送”等储值优惠的促销金额分摊。当前为 0,预留用于将来区分“券优惠”和“充值赠送优惠”的场景。 | 来源: recharge_promotion_money'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.offer_type IS '优惠类型枚举。当前样本值全部为 1,表示本门店使用的团购券均为同一类型(例如“套餐券”)。其他取值可能对应满减、折扣、代金券等优惠类型,在本数据中未出现。 | 来源: offer_type'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.ledger_status IS '流水状态。观测值全部为 1。常规含义为:1 表示正常有效记录;其他值预留用于表示作废、撤销、未生效等状态。当前导出仅包含正常状态记录。 | 来源: ledger_status'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.operator_id IS '执行本次券核销操作的操作员 ID。可与员工维度表对接,用于分析不同操作员的核销行为与绩效。 | 来源: operator_id | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.operator_name IS '操作员名称及角色说明,例如“收银员:郑丽珊”。与 operator_id 冗余,对报表展示友好,但不参与模型关联。 | 来源: operator_name'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.salesman_user_id IS '营业员用户 ID。当前全部为 0,表示本门店在团购券场景未单独记录营业员信息。 | 来源: salesman_user_id | 角色: 外键'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.salesman_name IS '营业员姓名。当前为空字符串。结构上用于记录拉单或促销的业务员信息。 | 来源: salesman_name'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.salesman_role_id IS '营业员角色 ID。当前为 0,预留用于标识营业员在组织中的角色类型。 | 来源: salesman_role_id'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.salesman_org_id IS '营业员所属组织 ID。来源字段为 sales_man_org_id,DWD 层统一命名为 salesman_org_id。当前为 0,用于将来对接组织架构维度。 | 来源: sales_man_org_id'; +COMMENT ON COLUMN dwd_groupbuy_redemption_Ex.ledger_group_name IS '团购项目的记账分组名称。当前全部为空,预留给将来按团购项目大类分组(例如“团购台费”“团购包厢”)使用。 | 来源: ledger_group_name'; + +-- dwd_platform_coupon_redemption +CREATE TABLE IF NOT EXISTS dwd_platform_coupon_redemption ( + platform_coupon_redemption_id BIGINT, + tenant_id BIGINT, + site_id BIGINT, + coupon_code VARCHAR(64), + coupon_channel INTEGER, + coupon_name VARCHAR(200), + sale_price NUMERIC(10,2), + coupon_money NUMERIC(10,2), + coupon_free_time INTEGER, + channel_deal_id BIGINT, + deal_id BIGINT, + group_package_id BIGINT, + site_order_id BIGINT, + table_id BIGINT, + certificate_id VARCHAR(64), + verify_id VARCHAR(64), + use_status INTEGER, + is_delete INTEGER, + create_time TIMESTAMPTZ, + consume_time TIMESTAMPTZ, + PRIMARY KEY (platform_coupon_redemption_id) +); +COMMENT ON COLUMN dwd_platform_coupon_redemption.platform_coupon_redemption_id IS '平台券核销记录在本系统内的主键 ID。长整型分布式 ID,用于唯一标识本次核销流水。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.tenant_id IS '租户 ID,品牌级别标识。例如整套系统中的“朗朗桌球”品牌。与其他表的 tenant_id 一致,用于划分租户数据域。 | 来源: tenant_id | 角色: 外键'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.site_id IS '门店 ID。与门店维度 dim_site.site_id 对应,用于区分不同门店。siteProfile.id 与此字段相同,本表不再冗余门店快照。 | 来源: site_id | 角色: 外键'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.coupon_code IS '第三方团购券券码,顾客出示的核销码。当前样本中全表唯一,可视为业务自然主键,用于验券、对账、查询。 | 来源: coupon_code'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.coupon_channel IS '券来源渠道枚举,表示第三方平台渠道编号。观测值:1,2。具体含义需结合系统配置,一般可理解为:1 表示平台渠道 1(主平台),2 表示平台渠道 2(其他入口或子平台)。 | 来源: coupon_channel'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.coupon_name IS '第三方团购券产品名称,例如“【全天可用】中八桌球一小时(A区)”“1小时中八台球【11月特惠】(A区)”等。用于报表展示和区分不同团购产品。 | 来源: coupon_name'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.sale_price IS '顾客在第三方平台实际支付的团购售价,例如 11.11、29.90、39.90 等。始终小于 coupon_money,体现“折后价”。 | 来源: sale_price'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.coupon_money IS '券面值或套餐价值,即系统认为该券可抵扣的金额,例如 48.00、58.00、68.00、96.00、116.00、288.00。与 coupon_name 有固定对应关系。 | 来源: coupon_money'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.coupon_free_time IS '券附带的赠送时长,单位:秒。当前样本全部为 0,表示无独立赠送时长。若未来有赠送时间型券,则该字段存储赠送的秒数。 | 来源: coupon_free_time'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.channel_deal_id IS '渠道侧团购商品 ID(第三方平台 dealId)。值域有限(约 9 个值),与 coupon_name 一一对应。用于对接第三方接口和按平台商品维度统计。 | 来源: channel_deal_id | 角色: - 或 外键(预留)'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.deal_id IS '平台/系统侧团购商品 ID。多数记录为非 0 整数,也有部分为 0。与 coupon_name 存在稳定对应关系,0 表示内部未配置或未同步。未来可作为内部团购商品维度外键。 | 来源: deal_id | 角色: 外键(预留)'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.group_package_id IS '内部“团购套餐”定义表主键 ID。当前样本中全部为 0,表示平台券尚未映射到自有团购套餐;从设计上是预留的外键字段。 | 来源: group_package_id | 角色: 外键'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.site_order_id IS '门店内部订单 ID。本次平台券核销所挂靠的店内订单号。用于与结账记录、台费流水、商品销售等事实表通过订单维度关联。 | 来源: site_order_id | 角色: 外键'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.table_id IS '使用团购券的球台 ID。与 dim_site_table.table_id 对应,用于统计每张球台的第三方平台引流情况。 | 来源: table_id | 角色: 外键'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.certificate_id IS '第三方平台侧券实例 ID(凭证 ID),通常为 16–19 位数字字符串。用于与外部平台对账与查询核销结果。存在重复值,不能单独作为唯一键。 | 来源: certificate_id'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.verify_id IS '第三方平台核销记录 ID。大部分记录为空,少量有值。存在时可用于精确反查平台侧核销记录。 | 来源: verify_id'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.use_status IS '券使用状态枚举。观测值:1、2。1 表示已使用/已核销(正常消耗);2 表示已退款/已撤销或使用后反冲的状态。是判断券生命周期状态的核心字段。 | 来源: use_status'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.is_delete IS '逻辑删除标志。0 表示未删除;1 表示已逻辑删除。与 use_status 独立:即便业务状态异常(如 use_status=2),也可能 is_delete 仍为 0 以保留记录。 | 来源: is_delete'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.create_time IS '系统记录创建时间,即核销记录写入本系统的时间。格式为 YYYY-MM-DD HH:MM:SS。通常与 consume_time 相差约 1 秒。 | 来源: create_time'; +COMMENT ON COLUMN dwd_platform_coupon_redemption.consume_time IS '券被核销/使用的业务时间,代表实际团购券使用发生的时间点。后续按核销日期统计核销量时以该字段为准。 | 来源: consume_time'; + +-- dwd_platform_coupon_redemption_Ex +CREATE TABLE IF NOT EXISTS dwd_platform_coupon_redemption_Ex ( + platform_coupon_redemption_id BIGINT, + coupon_cover VARCHAR(255), + coupon_remark VARCHAR(255), + groupon_type INTEGER, + operator_id BIGINT, + operator_name VARCHAR(50), + PRIMARY KEY (platform_coupon_redemption_id) +); +COMMENT ON COLUMN dwd_platform_coupon_redemption_Ex.platform_coupon_redemption_id IS '平台券核销记录在本系统内的主键 ID。长整型分布式 ID,用于唯一标识本次核销流水。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_platform_coupon_redemption_Ex.coupon_cover IS '券封面图片地址 URL,用于前端展示团购券图片。对经营分析和结算逻辑无影响。 | 来源: coupon_cover'; +COMMENT ON COLUMN dwd_platform_coupon_redemption_Ex.coupon_remark IS '券描述或备注信息,用于展示券规则、说明文字。未参与计算和关联逻辑。 | 来源: coupon_remark'; +COMMENT ON COLUMN dwd_platform_coupon_redemption_Ex.groupon_type IS '团购券类型枚举。当前样本全部为 1。推断含义:1 表示标准团购券,其他值预留为次卡、套餐券、权益券等类型。 | 来源: groupon_type'; +COMMENT ON COLUMN dwd_platform_coupon_redemption_Ex.operator_id IS '执行验券操作的员工/收银员账号 ID。当前样本中多数为同一值。可与员工/账号维度表关联。 | 来源: operator_id | 角色: 外键'; +COMMENT ON COLUMN dwd_platform_coupon_redemption_Ex.operator_name IS '操作员姓名或显示名,例如“收银员:郑丽珊”。是 operator_id 的冗余展示字段,用于报表展示。 | 来源: operator_name'; + +-- dwd_recharge_order +CREATE TABLE IF NOT EXISTS dwd_recharge_order ( + recharge_order_id BIGINT, + tenant_id BIGINT, + site_id BIGINT, + member_id BIGINT, + member_name_snapshot TEXT, + member_phone_snapshot TEXT, + tenant_member_card_id BIGINT, + member_card_type_name TEXT, + settle_relate_id BIGINT, + settle_type INTEGER, + settle_name TEXT, + is_first INTEGER, + pay_amount NUMERIC(18,2), + refund_amount NUMERIC(18,2), + point_amount NUMERIC(18,2), + cash_amount NUMERIC(18,2), + payment_method INTEGER, + create_time TIMESTAMPTZ, + pay_time TIMESTAMPTZ, + PRIMARY KEY (recharge_order_id) +); +COMMENT ON COLUMN dwd_recharge_order.recharge_order_id IS '充值结算记录主键;唯一标识一条充值/撤销记录。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_recharge_order.tenant_id IS '租户/品牌 ID;与其他 JSON 中 tenantId 含义一致。 | 来源: tenantId | 角色: 外键(dim_tenant)'; +COMMENT ON COLUMN dwd_recharge_order.site_id IS '门店 ID;与 siteProfile.id 一致,用于关联门店维度。 | 来源: siteId | 角色: 外键(dim_site)'; +COMMENT ON COLUMN dwd_recharge_order.member_id IS '会员 ID;对应会员档案中的 tenantMemberInfos.id。标识给哪个会员充值。 | 来源: memberId | 角色: 外键(dim_member)'; +COMMENT ON COLUMN dwd_recharge_order.member_name_snapshot IS '会员姓名/昵称快照,可能是名称或手机号字符串。 | 来源: memberName'; +COMMENT ON COLUMN dwd_recharge_order.member_phone_snapshot IS '会员手机号快照。 | 来源: memberPhone'; +COMMENT ON COLUMN dwd_recharge_order.tenant_member_card_id IS '会员卡实例 ID(某张具体卡);可关联 dim_member_card_account。 | 来源: tenantMemberCardId | 角色: 外键(dim_member_card_account)'; +COMMENT ON COLUMN dwd_recharge_order.member_card_type_name IS '会员卡类型名称;当前样例主要有:“储值卡”、“月卡”。 | 来源: memberCardTypeName'; +COMMENT ON COLUMN dwd_recharge_order.settle_relate_id IS '结算关联 ID;用于与支付记录等跨表关联(类似业务单 ID)。 | 来源: settleRelateId | 角色: 外键(与支付/结算域软关联)'; +COMMENT ON COLUMN dwd_recharge_order.settle_type IS '结算类型枚举:5=“充值订单”(正常充值);7=“充值撤销”(冲销记录)。 | 来源: settleType'; +COMMENT ON COLUMN dwd_recharge_order.settle_name IS '结算类型名称:"充值订单"、"充值撤销";前端展示用。 | 来源: settleName'; +COMMENT ON COLUMN dwd_recharge_order.is_first IS '是否首充标记。取值:1 或 2。理论含义类似“是否首充”,但 1/2 的精确定义需系统字典确认。 | 来源: isFirst'; +COMMENT ON COLUMN dwd_recharge_order.pay_amount IS '本条记录的充值金额(可为正/负):正数=实际充值金额;负数=撤销流水金额(settleType=7)。 | 来源: payAmount'; +COMMENT ON COLUMN dwd_recharge_order.refund_amount IS '对该充值订单的退款金额(通常为正数);原始充值单上为已退款金额,对应会有一条负数的“充值撤销”记录。 | 来源: refundAmount'; +COMMENT ON COLUMN dwd_recharge_order.point_amount IS '计入会员账户的储值/积分金额;多数情况下等于 pay_amount 的绝对值;撤销记录一般为 0。 | 来源: pointAmount'; +COMMENT ON COLUMN dwd_recharge_order.cash_amount IS '现金收款金额;样本中少数为 3000/5000,其余为 0。 | 来源: cashAmount'; +COMMENT ON COLUMN dwd_recharge_order.payment_method IS '支付方式编码。样本取值:1、2、4;具体对应渠道(现金/微信/支付宝/银行卡等)需系统“支付方式字典”确认。 | 来源: paymentMethod'; +COMMENT ON COLUMN dwd_recharge_order.create_time IS '充值记录创建时间(收银完成时间);用于时间分区、统计。 | 来源: createTime'; +COMMENT ON COLUMN dwd_recharge_order.pay_time IS '支付完成时间;通常与 create_time 接近或相同。 | 来源: payTime'; + +-- dwd_recharge_order_Ex +CREATE TABLE IF NOT EXISTS dwd_recharge_order_Ex ( + recharge_order_id BIGINT, + site_name_snapshot TEXT, + settle_status INTEGER, + is_bind_member BOOLEAN, + is_activity BOOLEAN, + is_use_coupon BOOLEAN, + is_use_discount BOOLEAN, + can_be_revoked BOOLEAN, + online_amount NUMERIC(18,2), + balance_amount NUMERIC(18,2), + card_amount NUMERIC(18,2), + coupon_amount NUMERIC(18,2), + recharge_card_amount NUMERIC(18,2), + gift_card_amount NUMERIC(18,2), + prepay_money NUMERIC(18,2), + consume_money NUMERIC(18,2), + goods_money NUMERIC(18,2), + real_goods_money NUMERIC(18,2), + table_charge_money NUMERIC(18,2), + service_money NUMERIC(18,2), + activity_discount NUMERIC(18,2), + all_coupon_discount NUMERIC(18,2), + goods_promotion_money NUMERIC(18,2), + assistant_promotion_money NUMERIC(18,2), + assistant_pd_money NUMERIC(18,2), + assistant_cx_money NUMERIC(18,2), + assistant_manual_discount NUMERIC(18,2), + coupon_sale_amount NUMERIC(18,2), + member_discount_amount NUMERIC(18,2), + point_discount_price NUMERIC(18,2), + point_discount_cost NUMERIC(18,2), + adjust_amount NUMERIC(18,2), + rounding_amount NUMERIC(18,2), + operator_id BIGINT, + operator_name_snapshot TEXT, + salesman_user_id BIGINT, + salesman_name TEXT, + order_remark TEXT, + table_id INTEGER, + serial_number INTEGER, + revoke_order_id BIGINT, + revoke_order_name TEXT, + revoke_time TIMESTAMPTZ, + PRIMARY KEY (recharge_order_id) +); +COMMENT ON COLUMN dwd_recharge_order_Ex.recharge_order_id IS '充值结算记录主键;唯一标识一条充值/撤销记录。 | 来源: id | 角色: 主键'; +COMMENT ON COLUMN dwd_recharge_order_Ex.site_name_snapshot IS '门店名称快照,如“朗朗桌球”;仅用于展示,门店改名后本字段不变。 | 来源: siteName'; +COMMENT ON COLUMN dwd_recharge_order_Ex.settle_status IS '结算状态;当前数据全部为 2,推测 2=已完成。其它状态未出现在样本中。 | 来源: settleStatus'; +COMMENT ON COLUMN dwd_recharge_order_Ex.is_bind_member IS '是否绑定为会员/其他绑定标记;当前所有记录为 False,而又都有 memberId,实际业务含义不清。 | 来源: isBindMember'; +COMMENT ON COLUMN dwd_recharge_order_Ex.is_activity IS '是否关联营销活动;当前全部为 False,表示样本周期内充值未绑定活动。 | 来源: isActivity'; +COMMENT ON COLUMN dwd_recharge_order_Ex.is_use_coupon IS '本次充值是否使用优惠券;当前样本全部为 False。结构上预留“充值用券”的能力。 | 来源: isUseCoupon'; +COMMENT ON COLUMN dwd_recharge_order_Ex.is_use_discount IS '是否使用折扣(如充值折扣);样本中全为 False。 | 来源: isUseDiscount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.can_be_revoked IS '当前记录是否仍可撤销;样本中全为 False(导出时均不可撤销)。 | 来源: canBeRevoked'; +COMMENT ON COLUMN dwd_recharge_order_Ex.online_amount IS '线上支付金额(如微信、支付宝等);当前样本为 0,但字段为支付渠道拆分预留。 | 来源: onlineAmount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.balance_amount IS '从账户余额中支付的金额;充值场景通常为 0(用余额充值没有实际意义)。 | 来源: balanceAmount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.card_amount IS '从其他储值卡或某种卡余额支付的金额;当前样本全为 0。 | 来源: cardAmount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.coupon_amount IS '使用券直接支付的金额(如储值券);当前样本为 0。 | 来源: couponAmount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.recharge_card_amount IS '充值到卡上的金额(与 point_amount 区分不同资金属性);样本为 0,结构预留。 | 来源: rechargeCardAmount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.gift_card_amount IS '赠送卡金额(如买 1000 送 100 的赠送部分);当前样本为 0。 | 来源: giftCardAmount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.prepay_money IS '预付款金额(订金);当前样本为 0,充值未启用此场景。 | 来源: prepayMoney'; +COMMENT ON COLUMN dwd_recharge_order_Ex.consume_money IS '消费总金额;在充值文件中全部为 0,实际用于消费场景(台费/商品)的结算模型复用字段。 | 来源: consumeMoney'; +COMMENT ON COLUMN dwd_recharge_order_Ex.goods_money IS '商品消费金额(充值记录中为 0)。 | 来源: goodsMoney'; +COMMENT ON COLUMN dwd_recharge_order_Ex.real_goods_money IS '实际应计商品金额(扣除折扣后);充值记录中为 0。 | 来源: realGoodsMoney'; +COMMENT ON COLUMN dwd_recharge_order_Ex.table_charge_money IS '台费金额;充值记录中为 0,来自通用结算模型。 | 来源: tableChargeMoney'; +COMMENT ON COLUMN dwd_recharge_order_Ex.service_money IS '服务项目金额(如助教、其他服务);充值中为 0。 | 来源: serviceMoney'; +COMMENT ON COLUMN dwd_recharge_order_Ex.activity_discount IS '营销活动折扣金额;当前样本为 0。 | 来源: activityDiscount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.all_coupon_discount IS '各类优惠券、团购券综合折扣金额;样本为 0。 | 来源: allCouponDiscount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.goods_promotion_money IS '商品促销优惠金额;样本为 0。 | 来源: goodsPromotionMoney'; +COMMENT ON COLUMN dwd_recharge_order_Ex.assistant_promotion_money IS '助教相关促销优惠金额;样本为 0。 | 来源: assistantPromotionMoney'; +COMMENT ON COLUMN dwd_recharge_order_Ex.assistant_pd_money IS '助教配单金额/相关费用;样本为 0。 | 来源: assistantPdMoney'; +COMMENT ON COLUMN dwd_recharge_order_Ex.assistant_cx_money IS '助教冲销/促销相关金额;样本为 0。 | 来源: assistantCxMoney'; +COMMENT ON COLUMN dwd_recharge_order_Ex.assistant_manual_discount IS '助教手工减免金额;样本为 0。 | 来源: assistantManualDiscount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.coupon_sale_amount IS '券/套餐销售金额(售卖券时使用);充值场景中为 0。 | 来源: couponSaleAmount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.member_discount_amount IS '因会员折扣产生的优惠金额;在充值样本中为 0。 | 来源: memberDiscountAmount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.point_discount_price IS '积分抵扣产生的价差(价格部分);样本为 0。 | 来源: pointDiscountPrice'; +COMMENT ON COLUMN dwd_recharge_order_Ex.point_discount_cost IS '积分抵扣对应的成本金额;样本为 0。 | 来源: pointDiscountCost'; +COMMENT ON COLUMN dwd_recharge_order_Ex.adjust_amount IS '手工调整金额(非抹零);样本为 0。 | 来源: adjustAmount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.rounding_amount IS '抹零金额(四舍五入产生的差额);样本为 0。 | 来源: roundingAmount'; +COMMENT ON COLUMN dwd_recharge_order_Ex.operator_id IS '操作该笔充值的收银员/员工 ID。 | 来源: operatorId | 角色: 外键(将来可关联 dim_staff)'; +COMMENT ON COLUMN dwd_recharge_order_Ex.operator_name_snapshot IS '操作员姓名快照,便于直接阅读;与 operator_id 对应。 | 来源: operatorName'; +COMMENT ON COLUMN dwd_recharge_order_Ex.salesman_user_id IS '营业员用户 ID;当前样本全部为 0。 | 来源: salesManUserId | 角色: 外键(潜在 dim_staff)'; +COMMENT ON COLUMN dwd_recharge_order_Ex.salesman_name IS '营业员/销售员姓名;样本为空字符串。 | 来源: salesManName'; +COMMENT ON COLUMN dwd_recharge_order_Ex.order_remark IS '充值订单备注,如手工说明;当前样本为空。 | 来源: orderRemark'; +COMMENT ON COLUMN dwd_recharge_order_Ex.table_id IS '台桌 ID;充值场景下全部是 0,表示该订单不挂具体球台。 | 来源: tableId'; +COMMENT ON COLUMN dwd_recharge_order_Ex.serial_number IS '流水/小票序号;当前样本全部为 0,本门店未启用。 | 来源: serialNumber'; +COMMENT ON COLUMN dwd_recharge_order_Ex.revoke_order_id IS '撤销相关订单 ID(被撤销原单或撤销单指针);样本中存在值但逻辑未完全启用。 | 来源: revokeOrderId'; +COMMENT ON COLUMN dwd_recharge_order_Ex.revoke_order_name IS '撤销单名称/说明;样本全为空。 | 来源: revokeOrderName'; +COMMENT ON COLUMN dwd_recharge_order_Ex.revoke_time IS '撤销时间;当前样本为空,撤销信息主要通过负数流水与 refund_amount 表达。 | 来源: revokeTime'; + +-- dwd_payment +CREATE TABLE IF NOT EXISTS dwd_payment ( + payment_id BIGINT, + site_id BIGINT, + relate_type INTEGER, + relate_id BIGINT, + pay_amount NUMERIC(18,2), + pay_status INTEGER, + payment_method INTEGER, + online_pay_channel INTEGER, + create_time TIMESTAMPTZ, + pay_time TIMESTAMPTZ, + pay_date DATE, + PRIMARY KEY (payment_id) +); +COMMENT ON COLUMN dwd_payment.payment_id IS '支付流水主键ID。与源系统 id 一致。每条支付流水唯一标识一条支付行为(包括金额为 0 的记录)。 | 来源: payment_transactions.id | 角色: 主键'; +COMMENT ON COLUMN dwd_payment.site_id IS '门店ID。当前样本中全部为同一门店 2790685415443269。在数仓中外键关联 dim_site.site_id。 | 来源: payment_transactions.site_id | 角色: 外键'; +COMMENT ON COLUMN dwd_payment.relate_type IS '业务关联类型枚举,用来区分这条支付流水对应哪一类业务单据:• 2:结账单支付,对应结账记录 settlement_records 中的结账单;• 5:会员卡充值/账户变动类支付,对应会员余额/充值业务单号,在会员余额变更或充值结算中复用;• 1:其他业务类型,目前样本中仅有 1 条记录,具体业务含义待业务侧补充。 | 来源: payment_transactions.relate_type | 角色: −'; +COMMENT ON COLUMN dwd_payment.relate_id IS '关联业务记录ID,配合 relate_type 使用,是一个“多态外键”:• 当 relate_type = 2 时:relate_id = settlement_records.settleList.id(结账记录主键,对应 dwd_settlement_head_di.order_settle_id);• 当 relate_type = 5 时:relate_id = 会员卡余额变动/充值业务单号,在会员余额变更流水中同名字段使用;• 当 relate_type = 1 时:关联具体业务尚未确认,仅可视为预留类型。 | 来源: payment_transactions.relate_id | 角色: 外键(多业务类型)'; +COMMENT ON COLUMN dwd_payment.pay_amount IS '本次支付金额,单位元。为收入类字段,当前样本全部为非负数:• 正数:实际通过该支付方式收取的金额;• 0:仍生成支付流水,但实收金额为 0(例如整单由会员优惠、团购券、余额等抵扣),当前样本中有 140 条记录金额为 0。 | 来源: payment_transactions.pay_amount | 角色: −'; +COMMENT ON COLUMN dwd_payment.pay_status IS '支付状态枚举。当前样本中仅出现:• 2:支付成功。其它可能的状态(未支付、支付中、失败、已退款等)在本次导出中未出现,需以后按系统支付状态配置补充。由于本 JSON 仅导出成功记录,可以视作“成功支付流水视图”。 | 来源: payment_transactions.pay_status | 角色: −'; +COMMENT ON COLUMN dwd_payment.payment_method IS '支付方式枚举。当前样本中出现的取值:• 2:共 140 条记录;• 4:共 60 条记录。具体取值与“支付方式配置表”对应,例如可能代表现金、扫码支付、银行卡等。由于配置表未导出,在数仓中应作为枚举码字段,通过后续 dim_payment_method 进行解码。不要在数仓层擅自写死“2=微信、4=支付宝”等含义。 | 来源: payment_transactions.payment_method | 角色: 外键(预期关联支付方式维度)'; +COMMENT ON COLUMN dwd_payment.online_pay_channel IS '线上支付通道枚举。用于进一步细分线上渠道,例如:• 0:无线上通道/线下,或未区分具体线上通道(当前样本全部为 0);• 1:微信(推测,未在样本中出现);• 2:支付宝(推测,未在样本中出现)。目前门店在当前时间段内尚未使用该字段进行实际区分,业务含义需结合正式配置确认。 | 来源: payment_transactions.online_pay_channel | 角色: −'; +COMMENT ON COLUMN dwd_payment.create_time IS '支付流水创建时间,格式 YYYY-MM-DD HH:MM:SS。通常是发起支付请求的时间。当前样本中 create_time 与 pay_time 多数相同,但模型上允许两者不同(例如异步支付)。 | 来源: payment_transactions.create_time | 角色: −'; +COMMENT ON COLUMN dwd_payment.pay_time IS '支付完成时间(支付成功时间戳),格式 YYYY-MM-DD HH:MM:SS。用于统计资金实际入账时间,以及与结账时间进行对齐分析。 | 来源: payment_transactions.pay_time | 角色: −'; +COMMENT ON COLUMN dwd_payment.pay_date IS '支付日期分区字段,从 pay_time 截取 YYYY-MM-DD 得到。例如 pay_time = ''2025-11-09 23:35:57'' 时,pay_date = ''2025-11-09''。用于 DWD 表按天分区和日粒度汇总。 | 来源: 由 payment_transactions.pay_time 派生 | 角色: −'; + +-- dwd_refund + CREATE TABLE IF NOT EXISTS dwd_refund ( + refund_id BIGINT, + tenant_id BIGINT, + site_id BIGINT, + relate_type INTEGER, + relate_id BIGINT, + pay_amount NUMERIC(18,2), + channel_fee NUMERIC(18,2), + pay_time TIMESTAMPTZ, + create_time TIMESTAMPTZ, + payment_method INTEGER, + member_id BIGINT, + member_card_id BIGINT, + PRIMARY KEY (refund_id) + ); + COMMENT ON COLUMN dwd_refund.refund_id IS '退款流水主键。每条退款记录唯一 ID(雪花ID风格长整型) | 来源: id | 角色: 主键'; + COMMENT ON COLUMN dwd_refund.tenant_id IS '租户/品牌 ID,标识所属商户。与其他表中的 tenant_id 一致。 | 来源: tenant_id | 角色: 外键'; + COMMENT ON COLUMN dwd_refund.site_id IS '门店 ID。与门店维度 dim_site.site_id 对应,用于分门店分析。 | 来源: site_id | 角色: 外键'; + COMMENT ON COLUMN dwd_refund.relate_type IS '业务类型枚举,指示本退款对应哪类业务主单:当前样本值 {2, 5}:2=消费/结账类业务;5=充值/储值类业务(具体定义以业务字典为准)。与 relate_id 组合使用。 | 来源: relate_type'; + COMMENT ON COLUMN dwd_refund.relate_id IS '关联的业务主键 ID,含义依赖 relate_type:relate_type=2 时通常指结账主单 ID;relate_type=5 时通常指充值/储值业务单 ID。同一个 relate_id 可能有多笔退款(分批退款)。 | 来源: relate_id | 角色: 外键'; + COMMENT ON COLUMN dwd_refund.pay_amount IS '本次退款的资金金额,统一为负数。绝对值即退款金额,例如 -5000.00 表示退款 5000 元。 | 来源: pay_amount'; + COMMENT ON COLUMN dwd_refund.channel_fee IS '第三方支付渠道对本次退款收取的手续费。当前样本为 0.00,用于通道成本核算。 | 来源: channel_fee'; + COMMENT ON COLUMN dwd_refund.pay_time IS '退款在支付渠道/系统中发生的时间(退款完成时间),用于对账及按时间统计。 | 来源: pay_time'; + COMMENT ON COLUMN dwd_refund.create_time IS '本条退款流水在系统内创建时间,用于区分记录生成时间与渠道时间。 | 来源: create_time'; + COMMENT ON COLUMN dwd_refund.payment_method IS '支付方式枚举,指本次退款对应的原支付方式(如通道)。样本出现值 4,支付记录中有 {2,4},具体含义需参照支付方式配置表。 | 来源: payment_method'; + COMMENT ON COLUMN dwd_refund.member_id IS '关联的会员 ID,对应会员档案表主键。样本为 0,表示未绑定会员。 | 来源: member_id | 角色: 外键'; + COMMENT ON COLUMN dwd_refund.member_card_id IS '关联的会员卡账户 ID,对应会员卡账户/储值卡维度主键。样本为 0,当前没有“退到会员卡”的记录。 | 来源: member_card_id | 角色: 外键'; + + + CREATE TABLE IF NOT EXISTS dwd_refund_Ex ( + refund_id BIGINT, + tenant_name VARCHAR(64), + pay_sn BIGINT, + refund_amount NUMERIC(18,2), + round_amount NUMERIC(18,2), + balance_frozen_amount NUMERIC(18,2), + card_frozen_amount NUMERIC(18,2), + pay_status INTEGER, + action_type INTEGER, + is_revoke INTEGER, + is_delete INTEGER, + check_status INTEGER, + online_pay_channel INTEGER, + online_pay_type INTEGER, + pay_terminal INTEGER, + pay_config_id INTEGER, + cashier_point_id INTEGER, + operator_id BIGINT, + channel_payer_id VARCHAR(128), + channel_pay_no VARCHAR(128), + PRIMARY KEY (refund_id) + ); + COMMENT ON COLUMN dwd_refund_Ex.refund_id IS '退款流水主键。每条退款记录唯一 ID(雪花ID风格长整型)。 | 来源: id | 角色: 主键'; + COMMENT ON COLUMN dwd_refund_Ex.tenant_name IS '租户名称,例如“朗朗桌球”。与租户维度中的名称冗余。 | 来源: tenantName'; + COMMENT ON COLUMN dwd_refund_Ex.pay_sn IS '支付流水内部序号。退款记录中样本全部为 0,未看到实际使用场景,含义未说明。 | 来源: pay_sn'; + COMMENT ON COLUMN dwd_refund_Ex.refund_amount IS '本次退款金额(正数)设计字段,样本为 0.00,实际使用 pay_amount。 | 来源: refund_amount'; + COMMENT ON COLUMN dwd_refund_Ex.round_amount IS '退款过程中的舍入/抹零金额。 | 来源: round_amount'; + COMMENT ON COLUMN dwd_refund_Ex.balance_frozen_amount IS '与会员余额相关的冻结金额,样本为 0。 | 来源: balance_frozen_amount'; + COMMENT ON COLUMN dwd_refund_Ex.card_frozen_amount IS '与某张会员卡余额相关的冻结金额,样本为 0。 | 来源: card_frozen_amount'; + COMMENT ON COLUMN dwd_refund_Ex.pay_status IS '退款状态枚举。样本中全部为 2(成功/已完成)。 | 来源: pay_status'; + COMMENT ON COLUMN dwd_refund_Ex.action_type IS '资金动作类型枚举。样本全部为 2(退款)。 | 来源: action_type'; + COMMENT ON COLUMN dwd_refund_Ex.is_revoke IS '是否为撤销型退款:0=正常退款;1=撤销原支付。 | 来源: is_revoke'; + COMMENT ON COLUMN dwd_refund_Ex.is_delete IS '逻辑删除标志:0=未删除;1=已逻辑删除。 | 来源: is_delete'; + COMMENT ON COLUMN dwd_refund_Ex.check_status IS '审核状态。样本全部为 1(已审核/通过)。 | 来源: check_status'; + COMMENT ON COLUMN dwd_refund_Ex.online_pay_channel IS '线上支付渠道枚举。样本中全部为 0(线下或默认)。 | 来源: online_pay_channel'; + COMMENT ON COLUMN dwd_refund_Ex.online_pay_type IS '在线退款类型。样本全部为 0(原路退回)。 | 来源: online_pay_type'; + COMMENT ON COLUMN dwd_refund_Ex.pay_terminal IS '退款终端类型。样本全部为 1(前台收银端)。 | 来源: pay_terminal'; + COMMENT ON COLUMN dwd_refund_Ex.pay_config_id IS '支付配置 ID,例如某个具体支付通道(微信商户号、银联通道等)的配置主键。样本全部为 0。 | 来源: pay_config_id | 角色: 外键'; + COMMENT ON COLUMN dwd_refund_Ex.cashier_point_id IS '收银点编号,例如前台1、前台2、自助机等。样本全部为 0。 | 来源: cashier_point_id'; + COMMENT ON COLUMN dwd_refund_Ex.operator_id IS '执行退款操作的操作员 ID。样本全部为 0。 | 来源: operator_id | 角色: 外键'; + COMMENT ON COLUMN dwd_refund_Ex.channel_payer_id IS '支付渠道侧的付款人标识,如 openid、银行卡号掩码等。样本全部为空字符串。 | 来源: channel_payer_id'; + COMMENT ON COLUMN dwd_refund_Ex.channel_pay_no IS '第三方支付平台交易号(如微信支付单号、支付宝交易号等)。当前样本全部为空。 | 来源: channel_pay_no';