ODS 完成
This commit is contained in:
@@ -1,49 +1,62 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""数据库连接管理"""
|
||||
"""Database connection manager with capped connect_timeout."""
|
||||
|
||||
import psycopg2
|
||||
import psycopg2.extras
|
||||
|
||||
|
||||
class DatabaseConnection:
|
||||
"""数据库连接管理器"""
|
||||
|
||||
"""Wrap psycopg2 connection with session parameters and timeout guard."""
|
||||
|
||||
def __init__(self, dsn: str, session: dict = None, connect_timeout: int = None):
|
||||
self.conn = psycopg2.connect(dsn, connect_timeout=(connect_timeout or 5))
|
||||
timeout_val = connect_timeout if connect_timeout is not None else 5
|
||||
# PRD: database connect_timeout must not exceed 20 seconds.
|
||||
timeout_val = max(1, min(int(timeout_val), 20))
|
||||
|
||||
self.conn = psycopg2.connect(dsn, connect_timeout=timeout_val)
|
||||
self.conn.autocommit = False
|
||||
|
||||
# 设置会话参数
|
||||
|
||||
# Session parameters (timezone, statement timeout, etc.)
|
||||
if session:
|
||||
with self.conn.cursor() as c:
|
||||
if session.get("timezone"):
|
||||
c.execute("SET TIME ZONE %s", (session["timezone"],))
|
||||
if session.get("statement_timeout_ms") is not None:
|
||||
c.execute("SET statement_timeout = %s", (int(session["statement_timeout_ms"]),))
|
||||
c.execute(
|
||||
"SET statement_timeout = %s",
|
||||
(int(session["statement_timeout_ms"]),),
|
||||
)
|
||||
if session.get("lock_timeout_ms") is not None:
|
||||
c.execute("SET lock_timeout = %s", (int(session["lock_timeout_ms"]),))
|
||||
c.execute(
|
||||
"SET lock_timeout = %s", (int(session["lock_timeout_ms"]),)
|
||||
)
|
||||
if session.get("idle_in_tx_timeout_ms") is not None:
|
||||
c.execute("SET idle_in_transaction_session_timeout = %s",
|
||||
(int(session["idle_in_tx_timeout_ms"]),))
|
||||
|
||||
c.execute(
|
||||
"SET idle_in_transaction_session_timeout = %s",
|
||||
(int(session["idle_in_tx_timeout_ms"]),),
|
||||
)
|
||||
|
||||
def query(self, sql: str, args=None):
|
||||
"""执行查询并返回结果"""
|
||||
"""Execute a query and fetch all rows."""
|
||||
with self.conn.cursor(cursor_factory=psycopg2.extras.RealDictCursor) as c:
|
||||
c.execute(sql, args)
|
||||
return c.fetchall()
|
||||
|
||||
|
||||
def execute(self, sql: str, args=None):
|
||||
"""执行SQL语句"""
|
||||
"""Execute a SQL statement without returning rows."""
|
||||
with self.conn.cursor() as c:
|
||||
c.execute(sql, args)
|
||||
|
||||
|
||||
def commit(self):
|
||||
"""提交事务"""
|
||||
"""Commit current transaction."""
|
||||
self.conn.commit()
|
||||
|
||||
|
||||
def rollback(self):
|
||||
"""回滚事务"""
|
||||
"""Rollback current transaction."""
|
||||
self.conn.rollback()
|
||||
|
||||
|
||||
def close(self):
|
||||
"""关闭连接"""
|
||||
"""Safely close the connection."""
|
||||
try:
|
||||
self.conn.close()
|
||||
except Exception:
|
||||
|
||||
@@ -24,8 +24,8 @@ CREATE TABLE IF NOT EXISTS dim_site_Ex (
|
||||
site_id BIGINT,
|
||||
avatar TEXT,
|
||||
address TEXT,
|
||||
longitude NUMERIC(18,2),
|
||||
latitude NUMERIC(18,2),
|
||||
longitude NUMERIC(9,6),
|
||||
latitude NUMERIC(9,6),
|
||||
tenant_site_region_id BIGINT,
|
||||
auto_light INTEGER,
|
||||
light_status INTEGER,
|
||||
@@ -85,7 +85,7 @@ COMMENT ON COLUMN dim_table.table_name IS '台桌名称/编号,如 A17、888
|
||||
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';
|
||||
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 (
|
||||
@@ -151,8 +151,8 @@ CREATE TABLE IF NOT EXISTS dim_assistant_Ex (
|
||||
avatar TEXT,
|
||||
introduce TEXT,
|
||||
video_introduction_url TEXT,
|
||||
height DOUBLE PRECISION,
|
||||
weight DOUBLE PRECISION,
|
||||
height NUMERIC(5,2),
|
||||
weight NUMERIC(5,2),
|
||||
shop_name TEXT,
|
||||
group_id BIGINT,
|
||||
group_name TEXT,
|
||||
@@ -244,7 +244,7 @@ CREATE TABLE IF NOT EXISTS dim_member (
|
||||
register_site_id BIGINT,
|
||||
mobile TEXT,
|
||||
nickname TEXT,
|
||||
member_card_grade_code INTEGER,
|
||||
member_card_grade_code BIGINT,
|
||||
member_card_grade_name TEXT,
|
||||
create_time TIMESTAMPTZ,
|
||||
update_time TIMESTAMPTZ,
|
||||
@@ -307,7 +307,7 @@ COMMENT ON COLUMN dim_member_card_account.register_site_id IS '开卡门店 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 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';
|
||||
@@ -375,58 +375,58 @@ CREATE TABLE IF NOT EXISTS dim_member_card_account_Ex (
|
||||
cxAssisnatLevel TEXT,
|
||||
PRIMARY KEY (member_card_id)
|
||||
);
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.member_card_id IS 'id | 来源: bigint | 角色: 会员卡账户主键,唯一标识一张具体卡。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.site_name IS '门店名称展示字段(全部相同)。 | 来源: site_name | 角色: 门店名称展示字段(全部相同)。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.tenant_name IS 'tenant_name | 来源: string | 角色: 租户名称(当前导出为空)。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.tenantAvatar IS 'tenantAvatar | 来源: string | 角色: 租户头像 URL(当前导出为空)。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.effect_site_id IS 'effect_site_id | 来源: bigint | 角色: 卡片限定生效门店 ID。0 表示不限门店,配合 able_cross_site=1 表示全店通用。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.able_cross_site IS 'able_cross_site | 来源: int | 角色: 是否允许跨门店使用该卡:1=允许跨店;0=仅限开卡门店。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.card_physics_type IS 'card_physics_type | 来源: int | 角色: 物理卡类型:1=实体/标准卡;其他值未出现,含义未知。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.card_no IS 'card_no | 来源: string | 角色: 物理卡号或条码(当前全部为空)。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.bind_password IS 'bind_password | 来源: string | 角色: 卡绑定密码(未启用)。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.use_scene IS 'use_scene | 来源: string | 角色: 使用场景说明(当前为空)。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.denomination IS 'denomination | 来源: decimal | 角色: 面额或初始储值额度(当前均为0.0,未启用)。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.create_time IS 'create_time | 来源: datetime | 角色: 卡片创建时间。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.disable_start_time IS 'disable_start_time | 来源: datetime | 角色: 卡片禁用开始时间,当前为默认值表示未禁用。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.disable_end_time IS 'disable_end_time | 来源: datetime | 角色: 卡片禁用结束时间,当前为默认值表示未禁用。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.is_allow_give IS 'is_allow_give | 来源: int | 角色: 是否允许转赠给他人:0=不允许;1=允许。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.is_allow_order_deduct IS 'is_allow_order_deduct | 来源: int | 角色: 是否允许在订单层面统一扣款:0=不允许;1=允许。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.sort IS 'sort | 来源: int | 角色: 前端排序序号。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.table_discount IS 'table_discount | 来源: float | 角色: 台费折扣率(折扣百分比,10.0=不打折,9.0=九折等)。当前全部 10.0。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.goods_discount IS 'goods_discount | 来源: float | 角色: 商品折扣率,当前为 10.0 表示无折扣。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.assistant_discount IS 'assistant_discount | 来源: float | 角色: 助教服务折扣率,当前为 10.0。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.assistant_reward_discount IS 'assistant_reward_discount | 来源: float | 角色: 助教奖励折扣率,当前为 10.0(未启用)。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.table_service_discount IS 'table_service_discount | 来源: float | 角色: 台费服务类折扣率,当前为 10.0。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.goods_service_discount IS 'goods_service_discount | 来源: float | 角色: 商品服务折扣率,当前为 10.0。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.assistant_service_discount IS 'assistant_service_discount | 来源: float | 角色: 助教服务类折扣率,当前为 10.0。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.coupon_discount IS 'coupon_discount | 来源: float | 角色: 使用券的折扣比例(全部 10.0,未使用)。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.table_discount_sub_switch IS 'table_discount_sub_switch | 来源: int | 角色: 台费折扣叠加开关:1=叠加其他折扣;2=不叠加,仅用卡折扣。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.goods_discount_sub_switch IS 'goods_discount_sub_switch | 来源: int | 角色: 商品折扣叠加开关,意义同上。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.assistant_discount_sub_switch IS 'assistant_discount_sub_switch | 来源: int | 角色: 助教折扣叠加开关,意义同上。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.assistant_reward_discount_sub_switch IS 'assistant_reward_discount_sub_switch | 来源: int | 角色: 助教奖励折扣叠加开关(未启用)。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.goods_discount_range_type IS 'goods_discount_range_type | 来源: int | 角色: 商品折扣范围类型,未在文档说明具体含义。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.table_deduct_radio IS 'table_deduct_radio | 来源: float | 角色: 台费抵扣比例(百分比)。100.0 表示允许全额抵扣;0=不允许。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.goods_deduct_radio IS 'goods_deduct_radio | 来源: float | 角色: 商品抵扣比例,意义同上。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.assistant_deduct_radio IS 'assistant_deduct_radio | 来源: float | 角色: 助教抵扣比例,意义同上。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.table_service_deduct_radio IS 'table_service_deduct_radio | 来源: float | 角色: 台费服务金抵扣比例。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.goods_service_deduct_radio IS 'goods_service_deduct_radio | 来源: float | 角色: 商品服务金抵扣比例。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.assistant_service_deduct_radio IS 'assistant_service_deduct_radio | 来源: float | 角色: 助教服务金抵扣比例。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.assistant_reward_deduct_radio IS 'assistant_reward_deduct_radio | 来源: float | 角色: 助教奖励金抵扣比例(未启用)。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.coupon_deduct_radio IS 'coupon_deduct_radio | 来源: float | 角色: 券抵扣比例(未启用)。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.cardSettleDeduct IS 'cardSettleDeduct | 来源: float | 角色: 结算时统一扣卡金额配置(当前为 0.0,未使用)。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.tableCardDeduct IS 'tableCardDeduct | 来源: float | 角色: 台费扣卡金额配置,当前 0.0。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.tableServiceCardDeduct IS 'tableServiceCardDeduct | 来源: float | 角色: 台费服务金扣卡金额配置。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.goodsCarDeduct IS 'goodsCarDeduct | 来源: float | 角色: 商品扣卡金额配置。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.goodsServiceCardDeduct IS 'goodsServiceCardDeduct | 来源: float | 角色: 商品服务金扣卡金额配置。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.assistantCardDeduct IS 'assistantCardDeduct | 来源: float | 角色: 助教扣卡金额配置。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.assistantServiceCardDeduct IS 'assistantServiceCardDeduct | 来源: float | 角色: 助教服务金扣卡金额配置。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.assistantRewardCardDeduct IS 'assistantRewardCardDeduct | 来源: float | 角色: 助教奖励金扣卡金额配置(未启用)。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.couponCardDeduct IS 'couponCardDeduct | 来源: float | 角色: 使用券扣卡金额配置。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.deliveryFeeDeduct IS 'deliveryFeeDeduct | 来源: float | 角色: 配送费扣卡金额配置(未启用)。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.tableAreaId IS 'tableAreaId | 来源: list | 角色: 可用台区 ID 列表,空表示不限台区。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.goodsCategoryId IS 'goodsCategoryId | 来源: list | 角色: 可用商品分类 ID 列表,空表示不限制商品类别。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.pdAssisnatLevel IS 'pdAssisnatLevel | 来源: list | 角色: 允许的陪打助教等级列表,空表示不限。';
|
||||
COMMENT ON COLUMN dim_member_card_account_Ex.cxAssisnatLevel IS 'cxAssisnatLevel | 来源: list | 角色: 允许的促销助教等级列表,空表示不限。';
|
||||
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 (
|
||||
@@ -523,7 +523,7 @@ CREATE TABLE IF NOT EXISTS dim_store_goods (
|
||||
goods_state INTEGER,
|
||||
enable_status INTEGER,
|
||||
send_state INTEGER,
|
||||
is_deleted INTEGER,
|
||||
is_delete INTEGER,
|
||||
PRIMARY KEY (site_goods_id)
|
||||
);
|
||||
COMMENT ON COLUMN dim_store_goods.site_goods_id IS '门店级商品 ID,本表主键;其它业务表中的 site_goods_id 与此对应,用于库存、销售等关联。 | 来源: id | 角色: 主键';
|
||||
@@ -545,7 +545,7 @@ COMMENT ON COLUMN dim_store_goods.avg_monthly_sales IS '平均月销量(件/
|
||||
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_deleted IS '逻辑删除标志:0=未删除(有效档案);1=已删除(逻辑删除,不再参与业务但保留历史引用)。 | 来源: is_delete';
|
||||
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 (
|
||||
@@ -633,35 +633,6 @@ COMMENT ON COLUMN dim_goods_category.open_salesman IS '营业员开关控制。
|
||||
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_goods_category_Ex
|
||||
CREATE TABLE IF NOT EXISTS dim_goods_category_Ex (
|
||||
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,
|
||||
PRIMARY KEY (category_id)
|
||||
);
|
||||
COMMENT ON COLUMN dim_goods_category_Ex.category_id IS '分类节点主键。来自分类树节点的 id,在整个商品分类维度内唯一。用于在事实表中作为商品分类外键引用。 | 来源: id | 角色: 主键';
|
||||
COMMENT ON COLUMN dim_goods_category_Ex.tenant_id IS '租户 ID(商户/品牌 ID)。当前所有节点取值相同,表示同一个租户下的分类树。事实表可通过该字段与租户维度或门店维度间接关联。 | 来源: tenant_id | 角色: 外键';
|
||||
COMMENT ON COLUMN dim_goods_category_Ex.category_name IS '分类名称。一级大类示例:槟榔、器材、酒水、水果、零食、雪糕、香烟、其他、小吃。二级子类示例:槟榔、皮头、球杆、其他、饮料、酒水、茶水、咖啡、加料、洋酒、果盘、面、小吃等。用于前台展示和报表按细分类统计。 | 来源: category_name';
|
||||
COMMENT ON COLUMN dim_goods_category_Ex.alias_name IS '分类别名。当前样例数据全部为空字符串,预留给业务方做简称或别名展示。对现阶段经营分析无影响。 | 来源: alias_name';
|
||||
COMMENT ON COLUMN dim_goods_category_Ex.parent_category_id IS '父级分类 ID。根节点取值为 0,表示没有父分类;子节点取值为父分类的 id。与 category_id 共同形成树形层级关系。 | 来源: pid | 角色: 外键';
|
||||
COMMENT ON COLUMN dim_goods_category_Ex.business_name IS '业务大类名称。将多个细分类归入同一业务线。观测值与一级大类相同:槟榔、器材、酒水、水果、零食、雪糕、香烟、其他、小吃。子类的 business_name 继承所属根节点的大类名称。用于按业务线汇总库存和销售。 | 来源: business_name';
|
||||
COMMENT ON COLUMN dim_goods_category_Ex.tenant_goods_business_id IS '业务大类 ID。每个 business_name 对应唯一一个 tenant_goods_business_id,根节点和其下所有子节点共享同一取值。例如“酒水”大类及其子类饮料、茶水、咖啡、加料、洋酒拥有相同的业务 ID。可作为外键连接“业务线维度表”。 | 来源: tenant_goods_business_id | 角色: 外键';
|
||||
COMMENT ON COLUMN dim_goods_category_Ex.category_level IS '分类层级:1 表示一级大类(pid = 0),2 表示二级子类(pid ≠ 0)。方便在报表中区分大类与子类进行分组和展示层级控制。 | 来源: 由 pid 推导';
|
||||
COMMENT ON COLUMN dim_goods_category_Ex.is_leaf IS '是否叶子节点:1 表示叶子分类(categoryBoxes 为空列表),0 表示非叶子分类(存在子分类)。当前样例数据中,一级大类是非叶子节点,二级分类是叶子节点。用于树状导航或限制只能在叶子分类建商品。 | 来源: 由 categoryBoxes 推导';
|
||||
COMMENT ON COLUMN dim_goods_category_Ex.open_salesman IS '营业员开关控制。枚举含义根据业务系统定义,一般设计为:1 表示启用营业员/导购相关功能,2 表示关闭或不启用。当前样例所有分类取值为 2,说明这一套分类在库存模块中统一未启用营业员逻辑。对目前的经营分析影响较小。 | 来源: open_salesman';
|
||||
COMMENT ON COLUMN dim_goods_category_Ex.sort_order IS '分类排序序号。来自 sort 字段,用于前端展示顺序控制,数值越小越靠前。当前大部分分类为 0,仅少数为 1,说明排序配置较为粗略。对指标统计无实质影响。 | 来源: sort';
|
||||
COMMENT ON COLUMN dim_goods_category_Ex.is_warehousing IS '是否参与库存管理。枚举:1 表示参与库存管理,0 表示不参与(如服务类商品、手工费用)。当前文件中所有分类取值为 1,表示这一份分类树只包含“走库存”的商品分类。可在库存报表中用作过滤条件。 | 来源: is_warehousing';
|
||||
|
||||
-- dim_groupbuy_package
|
||||
CREATE TABLE IF NOT EXISTS dim_groupbuy_package (
|
||||
groupbuy_package_id BIGINT,
|
||||
@@ -676,7 +647,7 @@ CREATE TABLE IF NOT EXISTS dim_groupbuy_package (
|
||||
end_time TIMESTAMPTZ,
|
||||
table_area_name VARCHAR(100),
|
||||
is_enabled INTEGER,
|
||||
is_deleted INTEGER,
|
||||
is_delete INTEGER,
|
||||
create_time TIMESTAMPTZ,
|
||||
tenant_table_area_id_list VARCHAR(512),
|
||||
card_type_ids VARCHAR(255),
|
||||
@@ -694,7 +665,7 @@ COMMENT ON COLUMN dim_groupbuy_package.start_time IS '套餐整体生效开始
|
||||
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_deleted IS '逻辑删除标志。0 表示正常;1 表示逻辑删除(数据仍保留但不再使用)。当前样本全部为 0。 | 来源: is_delete';
|
||||
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 | 角色: 外键(潜在指向卡种维)';
|
||||
@@ -1082,7 +1053,7 @@ CREATE TABLE IF NOT EXISTS dwd_store_goods_sale_Ex (
|
||||
salesman_user_id BIGINT,
|
||||
salesman_name TEXT,
|
||||
salesman_role_id BIGINT,
|
||||
sales_man_org_id BIGINT,
|
||||
salesman_org_id BIGINT,
|
||||
discount_money NUMERIC(18,2),
|
||||
returns_number INTEGER,
|
||||
coupon_deduct_money NUMERIC(18,2),
|
||||
@@ -1111,7 +1082,7 @@ COMMENT ON COLUMN dwd_store_goods_sale_Ex.open_salesman_flag IS '是否启用营
|
||||
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.sales_man_org_id IS '营业员所属组织/部门 ID;当前样本全部为 0,未启用按组织分组统计。 | 来源: sales_man_org_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';
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
-- Data warehouse schema for the entertainment chain (ODS -> DWD -> DWS)
|
||||
-- ASCII only to keep cross-platform friendly.
|
||||
|
||||
-- ---------- Schemas ----------
|
||||
DROP SCHEMA IF EXISTS billiards_ods CASCADE;
|
||||
CREATE SCHEMA IF NOT EXISTS billiards_ods;
|
||||
CREATE SCHEMA IF NOT EXISTS billiards_dwd;
|
||||
CREATE SCHEMA IF NOT EXISTS billiards_dws;
|
||||
@@ -13,6 +13,9 @@ CREATE TABLE IF NOT EXISTS billiards_ods.ods_member_profile (
|
||||
tenant_id BIGINT,
|
||||
site_id BIGINT NOT NULL,
|
||||
member_id BIGINT NOT NULL,
|
||||
system_member_id BIGINT,
|
||||
register_site_id BIGINT,
|
||||
site_name TEXT,
|
||||
member_name TEXT,
|
||||
nickname TEXT,
|
||||
mobile TEXT,
|
||||
@@ -21,13 +24,17 @@ CREATE TABLE IF NOT EXISTS billiards_ods.ods_member_profile (
|
||||
register_time TIMESTAMPTZ,
|
||||
member_type_id BIGINT,
|
||||
member_type_name TEXT,
|
||||
member_card_grade_code TEXT,
|
||||
status TEXT,
|
||||
user_status TEXT,
|
||||
balance NUMERIC(18,2),
|
||||
points NUMERIC(18,2),
|
||||
growth_value NUMERIC(18,2),
|
||||
last_visit_time TIMESTAMPTZ,
|
||||
wechat_id TEXT,
|
||||
alipay_id TEXT,
|
||||
member_card_no TEXT,
|
||||
referrer_member_id BIGINT,
|
||||
remarks TEXT,
|
||||
source_file TEXT,
|
||||
source_endpoint TEXT,
|
||||
@@ -41,16 +48,28 @@ CREATE TABLE IF NOT EXISTS billiards_ods.ods_member_card (
|
||||
site_id BIGINT NOT NULL,
|
||||
card_id BIGINT NOT NULL,
|
||||
member_id BIGINT,
|
||||
tenant_member_id BIGINT,
|
||||
card_type_id BIGINT,
|
||||
card_type_name TEXT,
|
||||
card_no TEXT,
|
||||
card_physics_type TEXT,
|
||||
card_balance NUMERIC(18,2),
|
||||
denomination NUMERIC(18,2),
|
||||
discount_rate NUMERIC(8,4),
|
||||
table_discount NUMERIC(18,2),
|
||||
goods_discount NUMERIC(18,2),
|
||||
assistant_discount NUMERIC(18,2),
|
||||
assistant_reward_discount NUMERIC(18,2),
|
||||
valid_start_date DATE,
|
||||
valid_end_date DATE,
|
||||
disable_start_date DATE,
|
||||
disable_end_date DATE,
|
||||
last_consume_time TIMESTAMPTZ,
|
||||
status TEXT,
|
||||
is_delete BOOLEAN,
|
||||
activate_time TIMESTAMPTZ,
|
||||
deactivate_time TIMESTAMPTZ,
|
||||
register_site_id BIGINT,
|
||||
issuer_id BIGINT,
|
||||
issuer_name TEXT,
|
||||
source_file TEXT,
|
||||
@@ -65,12 +84,20 @@ CREATE TABLE IF NOT EXISTS billiards_ods.ods_balance_change (
|
||||
site_id BIGINT NOT NULL,
|
||||
change_id BIGINT NOT NULL,
|
||||
member_id BIGINT,
|
||||
tenant_member_id BIGINT,
|
||||
tenant_member_card_id BIGINT,
|
||||
member_name TEXT,
|
||||
member_mobile TEXT,
|
||||
change_amount NUMERIC(18,2),
|
||||
balance_before NUMERIC(18,2),
|
||||
balance_after NUMERIC(18,2),
|
||||
change_type INT,
|
||||
payment_method INT,
|
||||
refund_amount NUMERIC(18,2),
|
||||
relate_id BIGINT,
|
||||
pay_method INT,
|
||||
register_site_id BIGINT,
|
||||
register_site_name TEXT,
|
||||
pay_site_name TEXT,
|
||||
remark TEXT,
|
||||
operator_id BIGINT,
|
||||
operator_name TEXT,
|
||||
@@ -112,8 +139,16 @@ CREATE TABLE IF NOT EXISTS billiards_ods.ods_product (
|
||||
goods_code TEXT,
|
||||
category_id BIGINT,
|
||||
category_name TEXT,
|
||||
goods_second_category_id BIGINT,
|
||||
unit TEXT,
|
||||
price NUMERIC(18,2),
|
||||
cost_price NUMERIC(18,2),
|
||||
market_price NUMERIC(18,2),
|
||||
goods_state TEXT,
|
||||
goods_cover TEXT,
|
||||
goods_bar_code TEXT,
|
||||
able_discount BOOLEAN,
|
||||
is_delete BOOLEAN,
|
||||
status TEXT,
|
||||
source_file TEXT,
|
||||
source_endpoint TEXT,
|
||||
@@ -130,8 +165,16 @@ CREATE TABLE IF NOT EXISTS billiards_ods.ods_store_product (
|
||||
goods_name TEXT,
|
||||
category_id BIGINT,
|
||||
category_name TEXT,
|
||||
unit TEXT,
|
||||
sale_price NUMERIC(18,2),
|
||||
cost_price NUMERIC(18,2),
|
||||
sale_num NUMERIC(18,2),
|
||||
stock_a NUMERIC(18,2),
|
||||
stock NUMERIC(18,2),
|
||||
provisional_total_cost NUMERIC(18,2),
|
||||
total_purchase_cost NUMERIC(18,2),
|
||||
batch_stock_quantity NUMERIC(18,2),
|
||||
goods_state TEXT,
|
||||
status TEXT,
|
||||
source_file TEXT,
|
||||
source_endpoint TEXT,
|
||||
@@ -144,17 +187,32 @@ CREATE TABLE IF NOT EXISTS billiards_ods.ods_store_sale_item (
|
||||
tenant_id BIGINT,
|
||||
site_id BIGINT NOT NULL,
|
||||
sale_item_id BIGINT NOT NULL,
|
||||
order_goods_id BIGINT,
|
||||
order_trade_no TEXT,
|
||||
order_settle_id BIGINT,
|
||||
site_goods_id BIGINT,
|
||||
goods_id BIGINT,
|
||||
goods_name TEXT,
|
||||
category_id BIGINT,
|
||||
quantity NUMERIC(18,4),
|
||||
unit_price NUMERIC(18,2),
|
||||
original_amount NUMERIC(18,2),
|
||||
discount_amount NUMERIC(18,2),
|
||||
final_amount NUMERIC(18,2),
|
||||
is_gift BOOLEAN DEFAULT FALSE,
|
||||
sale_time TIMESTAMPTZ,
|
||||
member_id BIGINT,
|
||||
salesman_id BIGINT,
|
||||
operator_id BIGINT,
|
||||
is_refunded BOOLEAN DEFAULT FALSE,
|
||||
discount_price NUMERIC(18,2),
|
||||
cost_money NUMERIC(18,2),
|
||||
coupon_deduct_amount NUMERIC(18,2),
|
||||
member_discount_amount NUMERIC(18,2),
|
||||
point_discount_money NUMERIC(18,2),
|
||||
point_discount_cost NUMERIC(18,2),
|
||||
sales_type TEXT,
|
||||
goods_remark TEXT,
|
||||
source_file TEXT,
|
||||
source_endpoint TEXT,
|
||||
fetched_at TIMESTAMPTZ DEFAULT now(),
|
||||
@@ -170,6 +228,18 @@ CREATE TABLE IF NOT EXISTS billiards_ods.ods_table_info (
|
||||
table_name TEXT,
|
||||
table_type TEXT,
|
||||
area_name TEXT,
|
||||
site_table_area_id BIGINT,
|
||||
tenant_table_area_id BIGINT,
|
||||
table_price NUMERIC(18,2),
|
||||
table_status TEXT,
|
||||
audit_status INT,
|
||||
show_status INT,
|
||||
light_status INT,
|
||||
virtual_table BOOLEAN,
|
||||
is_rest_area BOOLEAN,
|
||||
charge_free BOOLEAN,
|
||||
table_cloth_use_time INT,
|
||||
table_cloth_use_cycle INT,
|
||||
status TEXT,
|
||||
created_time TIMESTAMPTZ,
|
||||
updated_time TIMESTAMPTZ,
|
||||
@@ -185,15 +255,42 @@ CREATE TABLE IF NOT EXISTS billiards_ods.ods_table_use_log (
|
||||
site_id BIGINT NOT NULL,
|
||||
ledger_id BIGINT NOT NULL,
|
||||
table_id BIGINT,
|
||||
table_name TEXT,
|
||||
order_trade_no TEXT,
|
||||
order_settle_id BIGINT,
|
||||
start_time TIMESTAMPTZ,
|
||||
end_time TIMESTAMPTZ,
|
||||
duration_minutes INT,
|
||||
duration_seconds INT,
|
||||
billing_unit_price NUMERIC(18,4),
|
||||
billing_count NUMERIC(18,4),
|
||||
original_table_fee NUMERIC(18,2),
|
||||
discount_amount NUMERIC(18,2),
|
||||
member_discount_amount NUMERIC(18,2),
|
||||
coupon_discount_amount NUMERIC(18,2),
|
||||
manual_discount_amount NUMERIC(18,2),
|
||||
service_fee NUMERIC(18,2),
|
||||
final_table_fee NUMERIC(18,2),
|
||||
member_id BIGINT,
|
||||
operator_id BIGINT,
|
||||
salesman_id BIGINT,
|
||||
is_canceled BOOLEAN DEFAULT FALSE,
|
||||
cancel_time TIMESTAMPTZ,
|
||||
site_table_area_id BIGINT,
|
||||
tenant_table_area_id BIGINT,
|
||||
site_table_area_name TEXT,
|
||||
is_single_order BOOLEAN,
|
||||
used_card_amount NUMERIC(18,2),
|
||||
adjust_amount NUMERIC(18,2),
|
||||
coupon_promotion_amount NUMERIC(18,2),
|
||||
service_money NUMERIC(18,2),
|
||||
mgmt_fee NUMERIC(18,2),
|
||||
fee_total NUMERIC(18,2),
|
||||
real_table_use_seconds INT,
|
||||
last_use_time TIMESTAMPTZ,
|
||||
ledger_start_time TIMESTAMPTZ,
|
||||
ledger_end_time TIMESTAMPTZ,
|
||||
ledger_status INT,
|
||||
start_use_time TIMESTAMPTZ,
|
||||
add_clock_seconds INT,
|
||||
status TEXT,
|
||||
source_file TEXT,
|
||||
source_endpoint TEXT,
|
||||
@@ -226,8 +323,16 @@ CREATE TABLE IF NOT EXISTS billiards_ods.ods_assistant_account (
|
||||
assistant_id BIGINT NOT NULL,
|
||||
assistant_name TEXT,
|
||||
mobile TEXT,
|
||||
assistant_no INT,
|
||||
team_id BIGINT,
|
||||
team_name TEXT,
|
||||
group_id BIGINT,
|
||||
group_name TEXT,
|
||||
job_num TEXT,
|
||||
entry_type TEXT,
|
||||
leave_status TEXT,
|
||||
assistant_status TEXT,
|
||||
allow_cx BOOLEAN,
|
||||
status TEXT,
|
||||
hired_date DATE,
|
||||
left_date DATE,
|
||||
@@ -243,16 +348,27 @@ CREATE TABLE IF NOT EXISTS billiards_ods.ods_assistant_service_log (
|
||||
site_id BIGINT NOT NULL,
|
||||
ledger_id BIGINT NOT NULL,
|
||||
assistant_id BIGINT,
|
||||
assistant_name TEXT,
|
||||
service_type TEXT,
|
||||
order_trade_no TEXT,
|
||||
order_settle_id BIGINT,
|
||||
start_time TIMESTAMPTZ,
|
||||
end_time TIMESTAMPTZ,
|
||||
duration_minutes INT,
|
||||
duration_seconds INT,
|
||||
original_fee NUMERIC(18,2),
|
||||
discount_amount NUMERIC(18,2),
|
||||
member_discount_amount NUMERIC(18,2),
|
||||
manual_discount_amount NUMERIC(18,2),
|
||||
coupon_discount_amount NUMERIC(18,2),
|
||||
final_fee NUMERIC(18,2),
|
||||
member_id BIGINT,
|
||||
operator_id BIGINT,
|
||||
salesman_id BIGINT,
|
||||
is_canceled BOOLEAN DEFAULT FALSE,
|
||||
cancel_time TIMESTAMPTZ,
|
||||
skill_grade NUMERIC(10,2),
|
||||
service_grade NUMERIC(10,2),
|
||||
composite_grade NUMERIC(10,2),
|
||||
overall_score NUMERIC(10,2),
|
||||
status TEXT,
|
||||
source_file TEXT,
|
||||
source_endpoint TEXT,
|
||||
@@ -268,6 +384,13 @@ CREATE TABLE IF NOT EXISTS billiards_ods.ods_assistant_cancel_log (
|
||||
ledger_id BIGINT,
|
||||
assistant_id BIGINT,
|
||||
order_trade_no TEXT,
|
||||
table_id BIGINT,
|
||||
table_area_id BIGINT,
|
||||
table_area_name TEXT,
|
||||
table_name TEXT,
|
||||
assistant_on INT,
|
||||
pd_charge_minutes INT,
|
||||
assistant_abolish_amount NUMERIC(18,2),
|
||||
reason TEXT,
|
||||
cancel_time TIMESTAMPTZ,
|
||||
operator_id BIGINT,
|
||||
@@ -284,12 +407,24 @@ CREATE TABLE IF NOT EXISTS billiards_ods.ods_group_package (
|
||||
site_id BIGINT NOT NULL,
|
||||
package_id BIGINT NOT NULL,
|
||||
package_name TEXT,
|
||||
table_area_id BIGINT,
|
||||
table_area_name TEXT,
|
||||
platform_code TEXT,
|
||||
status TEXT,
|
||||
face_price NUMERIC(18,2),
|
||||
settle_price NUMERIC(18,2),
|
||||
selling_price NUMERIC(18,2),
|
||||
duration INT,
|
||||
valid_from DATE,
|
||||
valid_to DATE,
|
||||
start_time TIMESTAMPTZ,
|
||||
end_time TIMESTAMPTZ,
|
||||
is_enabled BOOLEAN,
|
||||
is_delete BOOLEAN,
|
||||
package_type TEXT,
|
||||
usable_count INT,
|
||||
creator_name TEXT,
|
||||
tenant_table_area_id BIGINT,
|
||||
source_file TEXT,
|
||||
source_endpoint TEXT,
|
||||
fetched_at TIMESTAMPTZ DEFAULT now(),
|
||||
@@ -310,6 +445,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.ods_group_package_log (
|
||||
used_time TIMESTAMPTZ,
|
||||
deduct_amount NUMERIC(18,2),
|
||||
settle_price NUMERIC(18,2),
|
||||
coupon_code TEXT,
|
||||
source_file TEXT,
|
||||
source_endpoint TEXT,
|
||||
fetched_at TIMESTAMPTZ DEFAULT now(),
|
||||
@@ -323,6 +459,8 @@ CREATE TABLE IF NOT EXISTS billiards_ods.ods_platform_coupon_log (
|
||||
coupon_id BIGINT NOT NULL,
|
||||
platform_code TEXT,
|
||||
verify_code TEXT,
|
||||
coupon_code TEXT,
|
||||
coupon_channel TEXT,
|
||||
order_trade_no TEXT,
|
||||
order_settle_id BIGINT,
|
||||
member_id BIGINT,
|
||||
@@ -330,6 +468,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.ods_platform_coupon_log (
|
||||
used_time TIMESTAMPTZ,
|
||||
deduct_amount NUMERIC(18,2),
|
||||
settle_price NUMERIC(18,2),
|
||||
coupon_money NUMERIC(18,2),
|
||||
source_file TEXT,
|
||||
source_endpoint TEXT,
|
||||
fetched_at TIMESTAMPTZ DEFAULT now(),
|
||||
@@ -343,11 +482,19 @@ CREATE TABLE IF NOT EXISTS billiards_ods.ods_inventory_change (
|
||||
change_id BIGINT NOT NULL,
|
||||
site_goods_id BIGINT,
|
||||
goods_id BIGINT,
|
||||
stock_type TEXT,
|
||||
change_amount NUMERIC(18,2),
|
||||
before_stock NUMERIC(18,2),
|
||||
after_stock NUMERIC(18,2),
|
||||
change_amount_alt NUMERIC(18,2),
|
||||
before_stock_alt NUMERIC(18,2),
|
||||
after_stock_alt NUMERIC(18,2),
|
||||
change_type TEXT,
|
||||
relate_id BIGINT,
|
||||
unit TEXT,
|
||||
price NUMERIC(18,2),
|
||||
goods_category_id BIGINT,
|
||||
goods_second_category_id BIGINT,
|
||||
remark TEXT,
|
||||
operator_id BIGINT,
|
||||
operator_name TEXT,
|
||||
@@ -364,8 +511,20 @@ CREATE TABLE IF NOT EXISTS billiards_ods.ods_inventory_stock (
|
||||
site_id BIGINT NOT NULL,
|
||||
site_goods_id BIGINT NOT NULL,
|
||||
goods_id BIGINT,
|
||||
goods_name TEXT,
|
||||
goods_unit TEXT,
|
||||
goods_category_id BIGINT,
|
||||
goods_second_category_id BIGINT,
|
||||
range_start_stock NUMERIC(18,2),
|
||||
range_end_stock NUMERIC(18,2),
|
||||
range_in NUMERIC(18,2),
|
||||
range_out NUMERIC(18,2),
|
||||
range_inventory NUMERIC(18,2),
|
||||
range_sale NUMERIC(18,2),
|
||||
range_sale_money NUMERIC(18,2),
|
||||
current_stock NUMERIC(18,2),
|
||||
cost_price NUMERIC(18,2),
|
||||
category_name TEXT,
|
||||
snapshot_key TEXT NOT NULL DEFAULT 'default',
|
||||
source_file TEXT,
|
||||
source_endpoint TEXT,
|
||||
@@ -383,6 +542,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.ods_order_settle (
|
||||
settle_type INT,
|
||||
settle_status INT,
|
||||
member_id BIGINT,
|
||||
member_name TEXT,
|
||||
member_phone TEXT,
|
||||
table_id BIGINT,
|
||||
consume_money NUMERIC(18,2),
|
||||
@@ -392,6 +552,9 @@ CREATE TABLE IF NOT EXISTS billiards_ods.ods_order_settle (
|
||||
assistant_pd_money NUMERIC(18,2),
|
||||
assistant_cx_money NUMERIC(18,2),
|
||||
pay_amount NUMERIC(18,2),
|
||||
cash_amount NUMERIC(18,2),
|
||||
online_amount NUMERIC(18,2),
|
||||
point_amount NUMERIC(18,2),
|
||||
coupon_amount NUMERIC(18,2),
|
||||
card_amount NUMERIC(18,2),
|
||||
balance_amount NUMERIC(18,2),
|
||||
@@ -399,9 +562,33 @@ CREATE TABLE IF NOT EXISTS billiards_ods.ods_order_settle (
|
||||
prepay_money NUMERIC(18,2),
|
||||
adjust_amount NUMERIC(18,2),
|
||||
rounding_amount NUMERIC(18,2),
|
||||
member_discount_amount NUMERIC(18,2),
|
||||
coupon_sale_amount NUMERIC(18,2),
|
||||
goods_promotion_money NUMERIC(18,2),
|
||||
assistant_promotion_money NUMERIC(18,2),
|
||||
point_discount_price NUMERIC(18,2),
|
||||
point_discount_cost NUMERIC(18,2),
|
||||
real_goods_money NUMERIC(18,2),
|
||||
assistant_manual_discount NUMERIC(18,2),
|
||||
all_coupon_discount NUMERIC(18,2),
|
||||
is_use_coupon BOOLEAN,
|
||||
is_use_discount BOOLEAN,
|
||||
is_activity BOOLEAN,
|
||||
is_bind_member BOOLEAN,
|
||||
is_first BOOLEAN,
|
||||
recharge_card_amount NUMERIC(18,2),
|
||||
gift_card_amount NUMERIC(18,2),
|
||||
payment_method INT,
|
||||
create_time TIMESTAMPTZ,
|
||||
pay_time TIMESTAMPTZ,
|
||||
revoke_order_id BIGINT,
|
||||
revoke_order_name TEXT,
|
||||
revoke_time TIMESTAMPTZ,
|
||||
can_be_revoked BOOLEAN,
|
||||
serial_number TEXT,
|
||||
sales_man_name TEXT,
|
||||
sales_man_user_id BIGINT,
|
||||
order_remark TEXT,
|
||||
operator_id BIGINT,
|
||||
operator_name TEXT,
|
||||
source_file TEXT,
|
||||
@@ -436,8 +623,13 @@ CREATE TABLE IF NOT EXISTS billiards_ods.ods_payment_record (
|
||||
member_id BIGINT,
|
||||
pay_method_code TEXT,
|
||||
pay_method_name TEXT,
|
||||
pay_status INT,
|
||||
pay_amount NUMERIC(18,2),
|
||||
pay_time TIMESTAMPTZ,
|
||||
online_pay_channel TEXT,
|
||||
transaction_id TEXT,
|
||||
operator_id BIGINT,
|
||||
remark TEXT,
|
||||
relate_type TEXT,
|
||||
relate_id BIGINT,
|
||||
source_file TEXT,
|
||||
@@ -454,10 +646,34 @@ CREATE TABLE IF NOT EXISTS billiards_ods.ods_refund_record (
|
||||
order_trade_no TEXT,
|
||||
order_settle_id BIGINT,
|
||||
member_id BIGINT,
|
||||
pay_sn TEXT,
|
||||
pay_amount NUMERIC(18,2),
|
||||
pay_status INT,
|
||||
is_revoke BOOLEAN,
|
||||
is_delete BOOLEAN,
|
||||
online_pay_channel TEXT,
|
||||
pay_method_code TEXT,
|
||||
refund_amount NUMERIC(18,2),
|
||||
refund_time TIMESTAMPTZ,
|
||||
action_type INT,
|
||||
pay_terminal INT,
|
||||
pay_config_id BIGINT,
|
||||
cashier_point_id BIGINT,
|
||||
operator_id BIGINT,
|
||||
member_card_id BIGINT,
|
||||
balance_frozen_amount NUMERIC(18,2),
|
||||
card_frozen_amount NUMERIC(18,2),
|
||||
round_amount NUMERIC(18,2),
|
||||
online_pay_type INT,
|
||||
channel_payer_id TEXT,
|
||||
channel_pay_no TEXT,
|
||||
check_status INT,
|
||||
channel_fee NUMERIC(18,2),
|
||||
relate_type TEXT,
|
||||
relate_id BIGINT,
|
||||
status TEXT,
|
||||
reason TEXT,
|
||||
related_payment_id BIGINT,
|
||||
source_file TEXT,
|
||||
source_endpoint TEXT,
|
||||
fetched_at TIMESTAMPTZ DEFAULT now(),
|
||||
@@ -470,13 +686,36 @@ CREATE TABLE IF NOT EXISTS billiards_ods.ods_order_receipt_detail (
|
||||
site_id BIGINT NOT NULL,
|
||||
order_settle_id BIGINT NOT NULL,
|
||||
order_trade_no TEXT,
|
||||
order_settle_number TEXT,
|
||||
settle_type INT,
|
||||
receipt_no TEXT,
|
||||
receipt_time TIMESTAMPTZ,
|
||||
total_amount NUMERIC(18,2),
|
||||
discount_amount NUMERIC(18,2),
|
||||
final_amount NUMERIC(18,2),
|
||||
actual_payment NUMERIC(18,2),
|
||||
ledger_amount NUMERIC(18,2),
|
||||
member_offer_amount NUMERIC(18,2),
|
||||
delivery_fee NUMERIC(18,2),
|
||||
adjust_amount NUMERIC(18,2),
|
||||
payment_method INT,
|
||||
pay_time TIMESTAMPTZ,
|
||||
member_id BIGINT,
|
||||
order_remark TEXT,
|
||||
cashier_name TEXT,
|
||||
ticket_remark TEXT,
|
||||
ticket_custom_content TEXT,
|
||||
voucher_money NUMERIC(18,2),
|
||||
reward_name TEXT,
|
||||
consume_money NUMERIC(18,2),
|
||||
refund_amount NUMERIC(18,2),
|
||||
balance_amount NUMERIC(18,2),
|
||||
coupon_amount NUMERIC(18,2),
|
||||
member_deduct_amount NUMERIC(18,2),
|
||||
prepay_money NUMERIC(18,2),
|
||||
delivery_address TEXT,
|
||||
snapshot_raw JSONB,
|
||||
member_snapshot JSONB,
|
||||
source_file TEXT,
|
||||
source_endpoint TEXT,
|
||||
fetched_at TIMESTAMPTZ DEFAULT now(),
|
||||
|
||||
39
etl_billiards/database/seed_ods_tasks.sql
Normal file
39
etl_billiards/database/seed_ods_tasks.sql
Normal file
@@ -0,0 +1,39 @@
|
||||
-- 将新的 ODS 任务注册到 etl_admin.etl_task(根据需要替换 store_id)
|
||||
-- 使用方式(示例):
|
||||
-- psql "$PG_DSN" -f etl_billiards/database/seed_ods_tasks.sql
|
||||
-- 或者在 psql 中执行本文件内容。
|
||||
|
||||
WITH target_store AS (
|
||||
SELECT 2790685415443269::bigint AS store_id -- TODO: 替换为实际 store_id
|
||||
),
|
||||
task_codes AS (
|
||||
SELECT unnest(ARRAY[
|
||||
'ODS_ASSISTANT_ACCOUNTS',
|
||||
'ODS_ASSISTANT_LEDGER',
|
||||
'ODS_ASSISTANT_ABOLISH',
|
||||
'ODS_INVENTORY_CHANGE',
|
||||
'ODS_INVENTORY_STOCK',
|
||||
'ODS_PACKAGE',
|
||||
'ODS_GROUP_BUY_REDEMPTION',
|
||||
'ODS_MEMBER',
|
||||
'ODS_MEMBER_BALANCE',
|
||||
'ODS_MEMBER_CARD',
|
||||
'ODS_PAYMENT',
|
||||
'ODS_REFUND',
|
||||
'ODS_COUPON_VERIFY',
|
||||
'ODS_RECHARGE_SETTLE',
|
||||
'ODS_TABLES',
|
||||
'ODS_GOODS_CATEGORY',
|
||||
'ODS_STORE_GOODS',
|
||||
'ODS_TABLE_DISCOUNT',
|
||||
'ODS_TENANT_GOODS',
|
||||
'ODS_SETTLEMENT_TICKET',
|
||||
'ODS_ORDER_SETTLE'
|
||||
]) AS task_code
|
||||
)
|
||||
INSERT INTO etl_admin.etl_task (task_code, store_id, enabled)
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user