init: 项目初始提交 - NeoZQYY Monorepo 完整代码

This commit is contained in:
Neo
2026-02-15 14:58:14 +08:00
commit ded6dfb9d8
769 changed files with 182616 additions and 0 deletions

View File

@@ -0,0 +1,161 @@
-- =============================================================================
-- core schema DDL — 统一维度/事实最小字段集层
-- 说明:从 DWD 维度表和事实表提取跨系统共享的核心字段
-- 仅包含 ID、名称、状态、site_id 等最小字段集
-- 第一版保持精简,后续按需扩展
-- =============================================================================
CREATE SCHEMA IF NOT EXISTS core;
SET search_path TO core;
-- -----------------------------------------------------------------------------
-- 1. dim_site — 门店维度(核心字段)
-- 来源dwd.dim_site14 字段 → 6 字段)
-- -----------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS dim_site (
site_id BIGINT PRIMARY KEY,
tenant_id BIGINT NOT NULL,
shop_name TEXT NOT NULL,
site_label TEXT,
shop_status INTEGER,
site_id_alias BIGINT GENERATED ALWAYS AS (site_id) STORED
);
COMMENT ON TABLE core.dim_site IS '门店维度核心表:仅保留跨系统共享的最小字段集。';
COMMENT ON COLUMN core.dim_site.site_id IS '门店 ID主键';
COMMENT ON COLUMN core.dim_site.tenant_id IS '租户/品牌 ID。';
COMMENT ON COLUMN core.dim_site.shop_name IS '门店名称。';
COMMENT ON COLUMN core.dim_site.site_label IS '门店标签(如 A/B 店)。';
COMMENT ON COLUMN core.dim_site.shop_status IS '门店状态枚举。';
-- site_id_alias 用于 RLS 策略中统一使用 site_id 过滤
-- -----------------------------------------------------------------------------
-- 2. dim_member — 会员维度(核心字段)
-- 来源dwd.dim_member12 字段 → 8 字段)
-- -----------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS dim_member (
member_id BIGINT PRIMARY KEY,
system_member_id BIGINT,
tenant_id BIGINT NOT NULL,
register_site_id BIGINT NOT NULL,
mobile TEXT,
nickname TEXT,
member_card_grade_name TEXT,
status INTEGER
);
COMMENT ON TABLE core.dim_member IS '会员维度核心表:仅保留跨系统共享的最小字段集。';
COMMENT ON COLUMN core.dim_member.member_id IS '会员 ID主键';
COMMENT ON COLUMN core.dim_member.system_member_id IS '系统级会员 ID跨门店统一';
COMMENT ON COLUMN core.dim_member.tenant_id IS '租户/品牌 ID。';
COMMENT ON COLUMN core.dim_member.register_site_id IS '注册门店 ID等同 site_id';
COMMENT ON COLUMN core.dim_member.mobile IS '手机号。';
COMMENT ON COLUMN core.dim_member.nickname IS '昵称/姓名。';
COMMENT ON COLUMN core.dim_member.member_card_grade_name IS '会员卡等级名称。';
COMMENT ON COLUMN core.dim_member.status IS '会员状态。';
-- -----------------------------------------------------------------------------
-- 3. dim_assistant — 助教维度(核心字段)
-- 来源dwd.dim_assistant16 字段 → 9 字段)
-- -----------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS dim_assistant (
assistant_id BIGINT PRIMARY KEY,
tenant_id BIGINT NOT NULL,
site_id BIGINT NOT NULL,
real_name TEXT NOT NULL,
nickname TEXT,
mobile TEXT,
level INTEGER,
assistant_status INTEGER,
leave_status INTEGER
);
COMMENT ON TABLE core.dim_assistant IS '助教维度核心表:仅保留跨系统共享的最小字段集。';
COMMENT ON COLUMN core.dim_assistant.assistant_id IS '助教 ID主键';
COMMENT ON COLUMN core.dim_assistant.tenant_id IS '租户/品牌 ID。';
COMMENT ON COLUMN core.dim_assistant.site_id IS '门店 ID。';
COMMENT ON COLUMN core.dim_assistant.real_name IS '真实姓名。';
COMMENT ON COLUMN core.dim_assistant.nickname IS '昵称。';
COMMENT ON COLUMN core.dim_assistant.mobile IS '手机号。';
COMMENT ON COLUMN core.dim_assistant.level IS '助教等级。';
COMMENT ON COLUMN core.dim_assistant.assistant_status IS '助教状态。';
COMMENT ON COLUMN core.dim_assistant.leave_status IS '离职状态。';
-- -----------------------------------------------------------------------------
-- 4. dim_table — 台桌维度(核心字段)
-- 来源dwd.dim_table8 字段 → 5 字段)
-- -----------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS dim_table (
table_id BIGINT PRIMARY KEY,
site_id BIGINT NOT NULL,
table_name TEXT NOT NULL,
site_table_area_name TEXT,
table_price NUMERIC(18,2)
);
COMMENT ON TABLE core.dim_table IS '台桌维度核心表:仅保留跨系统共享的最小字段集。';
COMMENT ON COLUMN core.dim_table.table_id IS '台桌 ID主键';
COMMENT ON COLUMN core.dim_table.site_id IS '门店 ID。';
COMMENT ON COLUMN core.dim_table.table_name IS '台桌名称。';
COMMENT ON COLUMN core.dim_table.site_table_area_name IS '区域名称。';
COMMENT ON COLUMN core.dim_table.table_price IS '台桌单价。';
-- -----------------------------------------------------------------------------
-- 5. dim_goods_category — 商品分类维度(核心字段)
-- 来源dwd.dim_goods_category10 字段 → 5 字段)
-- -----------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS dim_goods_category (
category_id BIGINT PRIMARY KEY,
tenant_id BIGINT NOT NULL,
category_name TEXT NOT NULL,
parent_id BIGINT,
level INTEGER
);
COMMENT ON TABLE core.dim_goods_category IS '商品分类维度核心表。';
-- -----------------------------------------------------------------------------
-- 6. fact_settlement — 结算事实(核心字段)
-- 来源dwd.dwd_settlement_head约 30 字段 → 12 字段)
-- -----------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS fact_settlement (
order_settle_id BIGINT PRIMARY KEY,
site_id BIGINT NOT NULL,
tenant_id BIGINT NOT NULL,
order_trade_no BIGINT,
member_id BIGINT,
total_amount NUMERIC(18,2),
actual_amount NUMERIC(18,2),
discount_amount NUMERIC(18,2),
pay_status INTEGER,
settle_time TIMESTAMPTZ,
created_at TIMESTAMPTZ,
updated_at TIMESTAMPTZ
);
COMMENT ON TABLE core.fact_settlement IS '结算事实核心表:仅保留跨系统共享的最小字段集。';
COMMENT ON COLUMN core.fact_settlement.order_settle_id IS '结账单 ID主键';
COMMENT ON COLUMN core.fact_settlement.site_id IS '门店 ID。';
COMMENT ON COLUMN core.fact_settlement.tenant_id IS '租户 ID。';
COMMENT ON COLUMN core.fact_settlement.total_amount IS '应收总额。';
COMMENT ON COLUMN core.fact_settlement.actual_amount IS '实收金额。';
COMMENT ON COLUMN core.fact_settlement.discount_amount IS '优惠金额。';
-- -----------------------------------------------------------------------------
-- 7. fact_payment — 支付事实(核心字段)
-- 来源dwd.dwd_payment约 12 字段 → 7 字段)
-- -----------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS fact_payment (
payment_id BIGINT PRIMARY KEY,
site_id BIGINT NOT NULL,
order_settle_id BIGINT,
pay_type INTEGER,
pay_amount NUMERIC(18,2),
pay_time TIMESTAMPTZ,
status INTEGER
);
COMMENT ON TABLE core.fact_payment IS '支付事实核心表。';
-- -----------------------------------------------------------------------------
-- 索引
-- -----------------------------------------------------------------------------
CREATE INDEX IF NOT EXISTS idx_core_member_site ON core.dim_member (register_site_id);
CREATE INDEX IF NOT EXISTS idx_core_assistant_site ON core.dim_assistant (site_id);
CREATE INDEX IF NOT EXISTS idx_core_table_site ON core.dim_table (site_id);
CREATE INDEX IF NOT EXISTS idx_core_settlement_site ON core.fact_settlement (site_id);
CREATE INDEX IF NOT EXISTS idx_core_settlement_time ON core.fact_settlement (settle_time);
CREATE INDEX IF NOT EXISTS idx_core_payment_site ON core.fact_payment (site_id);