Files
Neo-ZQYY/docs/database/ddl/etl_feiqiu__dws.sql

1559 lines
71 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- =============================================================================
-- etl_feiqiu / dws汇总数据层
-- 生成日期2026-02-27
-- 来源:测试库(通过脚本自动导出)
-- =============================================================================
CREATE SCHEMA IF NOT EXISTS dws;
-- 序列
CREATE SEQUENCE IF NOT EXISTS dws.cfg_area_category_category_id_seq AS integer;
CREATE SEQUENCE IF NOT EXISTS dws.cfg_assistant_level_price_price_id_seq AS integer;
CREATE SEQUENCE IF NOT EXISTS dws.cfg_bonus_rules_rule_id_seq AS integer;
CREATE SEQUENCE IF NOT EXISTS dws.cfg_index_parameters_param_id_seq AS integer;
CREATE SEQUENCE IF NOT EXISTS dws.cfg_performance_tier_tier_id_seq AS integer;
CREATE SEQUENCE IF NOT EXISTS dws.cfg_skill_type_skill_type_id_seq AS integer;
CREATE SEQUENCE IF NOT EXISTS dws.dws_assistant_customer_stats_id_seq AS bigint;
CREATE SEQUENCE IF NOT EXISTS dws.dws_assistant_daily_detail_id_seq AS bigint;
CREATE SEQUENCE IF NOT EXISTS dws.dws_assistant_finance_analysis_id_seq AS bigint;
CREATE SEQUENCE IF NOT EXISTS dws.dws_assistant_monthly_summary_id_seq AS bigint;
CREATE SEQUENCE IF NOT EXISTS dws.dws_assistant_order_contribution_contribution_id_seq AS bigint;
CREATE SEQUENCE IF NOT EXISTS dws.dws_assistant_recharge_commission_id_seq AS bigint;
CREATE SEQUENCE IF NOT EXISTS dws.dws_assistant_salary_calc_id_seq AS bigint;
CREATE SEQUENCE IF NOT EXISTS dws.dws_finance_daily_summary_id_seq AS bigint;
CREATE SEQUENCE IF NOT EXISTS dws.dws_finance_discount_detail_id_seq AS bigint;
CREATE SEQUENCE IF NOT EXISTS dws.dws_finance_expense_summary_id_seq AS bigint;
CREATE SEQUENCE IF NOT EXISTS dws.dws_finance_income_structure_id_seq AS bigint;
CREATE SEQUENCE IF NOT EXISTS dws.dws_finance_recharge_summary_id_seq AS bigint;
CREATE SEQUENCE IF NOT EXISTS dws.dws_index_percentile_history_history_id_seq AS bigint;
CREATE SEQUENCE IF NOT EXISTS dws.dws_member_assistant_intimacy_intimacy_id_seq AS bigint;
CREATE SEQUENCE IF NOT EXISTS dws.dws_member_assistant_relation_index_relation_id_seq AS bigint;
CREATE SEQUENCE IF NOT EXISTS dws.dws_member_consumption_summary_id_seq AS bigint;
CREATE SEQUENCE IF NOT EXISTS dws.dws_member_newconv_index_newconv_id_seq AS bigint;
CREATE SEQUENCE IF NOT EXISTS dws.dws_member_recall_index_recall_id_seq AS bigint;
CREATE SEQUENCE IF NOT EXISTS dws.dws_member_spending_power_index_spi_id_seq AS bigint;
CREATE SEQUENCE IF NOT EXISTS dws.dws_member_visit_detail_id_seq AS bigint;
CREATE SEQUENCE IF NOT EXISTS dws.dws_member_winback_index_winback_id_seq AS bigint;
CREATE SEQUENCE IF NOT EXISTS dws.dws_ml_manual_order_alloc_alloc_id_seq AS bigint;
CREATE SEQUENCE IF NOT EXISTS dws.dws_ml_manual_order_source_source_id_seq AS bigint;
CREATE SEQUENCE IF NOT EXISTS dws.dws_platform_settlement_id_seq AS bigint;
-- 表
CREATE TABLE dws.cfg_area_category (
category_id integer DEFAULT nextval('dws.cfg_area_category_category_id_seq'::regclass) NOT NULL,
source_area_name character varying(100) NOT NULL,
source_table_name character varying(100) DEFAULT NULL,
category_code character varying(20) NOT NULL,
category_name character varying(50) NOT NULL,
display_name character varying(50) DEFAULT NULL,
short_name character varying(20) DEFAULT NULL,
match_type character varying(10) DEFAULT 'EXACT'::character varying NOT NULL,
match_priority integer DEFAULT 100 NOT NULL,
is_active boolean DEFAULT true NOT NULL,
description text,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
-- 唯一约束:(source_area_name, source_table_name) 支持同一台区下按台桌细分
CREATE UNIQUE INDEX uk_cfg_area_category
ON dws.cfg_area_category (source_area_name, COALESCE(source_table_name, ''));
CREATE TABLE dws.cfg_assistant_level_price (
price_id integer DEFAULT nextval('dws.cfg_assistant_level_price_price_id_seq'::regclass) NOT NULL,
level_code integer NOT NULL,
level_name character varying(20) NOT NULL,
base_course_price numeric(10,2) NOT NULL,
bonus_course_price numeric(10,2) NOT NULL,
effective_from date DEFAULT '2000-01-01'::date NOT NULL,
effective_to date DEFAULT '9999-12-31'::date NOT NULL,
description text,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
CREATE TABLE dws.cfg_bonus_rules (
rule_id integer DEFAULT nextval('dws.cfg_bonus_rules_rule_id_seq'::regclass) NOT NULL,
rule_type character varying(20) NOT NULL,
rule_code character varying(30) NOT NULL,
rule_name character varying(50) NOT NULL,
threshold_hours numeric(10,2),
rank_position integer,
bonus_amount numeric(12,2) NOT NULL,
is_cumulative boolean DEFAULT false NOT NULL,
priority integer DEFAULT 0 NOT NULL,
effective_from date DEFAULT '2000-01-01'::date NOT NULL,
effective_to date DEFAULT '9999-12-31'::date NOT NULL,
description text,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
CREATE TABLE dws.cfg_index_parameters (
param_id integer DEFAULT nextval('dws.cfg_index_parameters_param_id_seq'::regclass) NOT NULL,
index_type character varying(50) NOT NULL,
param_name character varying(100) NOT NULL,
param_value numeric(14,6) NOT NULL,
description text,
effective_from date DEFAULT CURRENT_DATE NOT NULL,
effective_to date,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
CREATE TABLE dws.cfg_performance_tier (
tier_id integer DEFAULT nextval('dws.cfg_performance_tier_tier_id_seq'::regclass) NOT NULL,
tier_code character varying(20) NOT NULL,
tier_name character varying(50) NOT NULL,
tier_level integer NOT NULL,
min_hours numeric(10,2) NOT NULL,
max_hours numeric(10,2),
base_deduction numeric(10,2) DEFAULT 0 NOT NULL,
bonus_deduction_ratio numeric(7,4) DEFAULT 0 NOT NULL,
vacation_days integer DEFAULT 0 NOT NULL,
vacation_unlimited boolean DEFAULT false NOT NULL,
is_new_hire_tier boolean DEFAULT false NOT NULL,
effective_from date DEFAULT '2000-01-01'::date NOT NULL,
effective_to date DEFAULT '9999-12-31'::date NOT NULL,
description text,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
CREATE TABLE dws.cfg_skill_type (
skill_type_id integer DEFAULT nextval('dws.cfg_skill_type_skill_type_id_seq'::regclass) NOT NULL,
skill_id bigint NOT NULL,
skill_name character varying(50),
course_type_code character varying(10) NOT NULL,
course_type_name character varying(20) NOT NULL,
is_active boolean DEFAULT true NOT NULL,
description text,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
CREATE TABLE dws.dws_assistant_customer_stats (
id bigint DEFAULT nextval('dws.dws_assistant_customer_stats_id_seq'::regclass) NOT NULL,
site_id bigint NOT NULL,
tenant_id bigint NOT NULL,
assistant_id bigint NOT NULL,
assistant_nickname character varying(50),
member_id bigint NOT NULL,
member_nickname character varying(100),
member_mobile character varying(20),
stat_date date NOT NULL,
first_service_date date,
last_service_date date,
total_service_count integer DEFAULT 0 NOT NULL,
total_service_hours numeric(10,2) DEFAULT 0 NOT NULL,
total_service_amount numeric(12,2) DEFAULT 0 NOT NULL,
service_count_7d integer DEFAULT 0 NOT NULL,
service_count_10d integer DEFAULT 0 NOT NULL,
service_count_15d integer DEFAULT 0 NOT NULL,
service_count_30d integer DEFAULT 0 NOT NULL,
service_count_60d integer DEFAULT 0 NOT NULL,
service_count_90d integer DEFAULT 0 NOT NULL,
service_hours_7d numeric(10,2) DEFAULT 0 NOT NULL,
service_hours_10d numeric(10,2) DEFAULT 0 NOT NULL,
service_hours_15d numeric(10,2) DEFAULT 0 NOT NULL,
service_hours_30d numeric(10,2) DEFAULT 0 NOT NULL,
service_hours_60d numeric(10,2) DEFAULT 0 NOT NULL,
service_hours_90d numeric(10,2) DEFAULT 0 NOT NULL,
service_amount_7d numeric(12,2) DEFAULT 0 NOT NULL,
service_amount_10d numeric(12,2) DEFAULT 0 NOT NULL,
service_amount_15d numeric(12,2) DEFAULT 0 NOT NULL,
service_amount_30d numeric(12,2) DEFAULT 0 NOT NULL,
service_amount_60d numeric(12,2) DEFAULT 0 NOT NULL,
service_amount_90d numeric(12,2) DEFAULT 0 NOT NULL,
days_since_last integer,
is_active_7d boolean DEFAULT false NOT NULL,
is_active_30d boolean DEFAULT false NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
CREATE TABLE dws.dws_assistant_daily_detail (
id bigint DEFAULT nextval('dws.dws_assistant_daily_detail_id_seq'::regclass) NOT NULL,
site_id bigint NOT NULL,
tenant_id bigint NOT NULL,
assistant_id bigint NOT NULL,
assistant_nickname character varying(50),
stat_date date NOT NULL,
assistant_level_code integer,
assistant_level_name character varying(20),
total_service_count integer DEFAULT 0 NOT NULL,
base_service_count integer DEFAULT 0 NOT NULL,
bonus_service_count integer DEFAULT 0 NOT NULL,
room_service_count integer DEFAULT 0 NOT NULL,
total_seconds integer DEFAULT 0 NOT NULL,
base_seconds integer DEFAULT 0 NOT NULL,
bonus_seconds integer DEFAULT 0 NOT NULL,
room_seconds integer DEFAULT 0 NOT NULL,
total_hours numeric(10,2) DEFAULT 0 NOT NULL,
base_hours numeric(10,2) DEFAULT 0 NOT NULL,
bonus_hours numeric(10,2) DEFAULT 0 NOT NULL,
room_hours numeric(10,2) DEFAULT 0 NOT NULL,
total_ledger_amount numeric(12,2) DEFAULT 0 NOT NULL,
base_ledger_amount numeric(12,2) DEFAULT 0 NOT NULL,
bonus_ledger_amount numeric(12,2) DEFAULT 0 NOT NULL,
room_ledger_amount numeric(12,2) DEFAULT 0 NOT NULL,
unique_customers integer DEFAULT 0 NOT NULL,
unique_tables integer DEFAULT 0 NOT NULL,
trashed_seconds integer DEFAULT 0 NOT NULL,
trashed_count integer DEFAULT 0 NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL,
penalty_minutes numeric(10,2) DEFAULT 0,
penalty_reason text,
is_exempt boolean DEFAULT false,
per_hour_contribution numeric(14,2)
);
CREATE TABLE dws.dws_assistant_finance_analysis (
id bigint DEFAULT nextval('dws.dws_assistant_finance_analysis_id_seq'::regclass) NOT NULL,
site_id bigint NOT NULL,
tenant_id bigint NOT NULL,
stat_date date NOT NULL,
assistant_id bigint NOT NULL,
assistant_nickname character varying(50),
revenue_total numeric(14,2) DEFAULT 0 NOT NULL,
revenue_base numeric(14,2) DEFAULT 0 NOT NULL,
revenue_bonus numeric(14,2) DEFAULT 0 NOT NULL,
revenue_room numeric(14,2) DEFAULT 0 NOT NULL,
cost_daily numeric(14,2) DEFAULT 0 NOT NULL,
gross_profit numeric(14,2) DEFAULT 0 NOT NULL,
gross_margin numeric(7,4) DEFAULT 0 NOT NULL,
service_count integer DEFAULT 0 NOT NULL,
service_hours numeric(10,2) DEFAULT 0 NOT NULL,
room_service_count integer DEFAULT 0 NOT NULL,
room_service_hours numeric(10,2) DEFAULT 0 NOT NULL,
unique_customers integer DEFAULT 0 NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
CREATE TABLE dws.dws_assistant_monthly_summary (
id bigint DEFAULT nextval('dws.dws_assistant_monthly_summary_id_seq'::regclass) NOT NULL,
site_id bigint NOT NULL,
tenant_id bigint NOT NULL,
assistant_id bigint NOT NULL,
assistant_nickname character varying(50),
stat_month date NOT NULL,
assistant_level_code integer,
assistant_level_name character varying(20),
hire_date date,
is_new_hire boolean DEFAULT false NOT NULL,
work_days integer DEFAULT 0 NOT NULL,
total_service_count integer DEFAULT 0 NOT NULL,
base_service_count integer DEFAULT 0 NOT NULL,
bonus_service_count integer DEFAULT 0 NOT NULL,
room_service_count integer DEFAULT 0 NOT NULL,
total_hours numeric(10,2) DEFAULT 0 NOT NULL,
base_hours numeric(10,2) DEFAULT 0 NOT NULL,
bonus_hours numeric(10,2) DEFAULT 0 NOT NULL,
room_hours numeric(10,2) DEFAULT 0 NOT NULL,
effective_hours numeric(10,2) DEFAULT 0 NOT NULL,
trashed_hours numeric(10,2) DEFAULT 0 NOT NULL,
total_ledger_amount numeric(12,2) DEFAULT 0 NOT NULL,
base_ledger_amount numeric(12,2) DEFAULT 0 NOT NULL,
bonus_ledger_amount numeric(12,2) DEFAULT 0 NOT NULL,
room_ledger_amount numeric(12,2) DEFAULT 0 NOT NULL,
unique_customers integer DEFAULT 0 NOT NULL,
unique_tables integer DEFAULT 0 NOT NULL,
avg_service_seconds numeric(10,2) DEFAULT 0 NOT NULL,
tier_id integer,
tier_code character varying(20),
tier_name character varying(50),
rank_by_hours integer,
rank_with_ties integer,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
CREATE TABLE dws.dws_assistant_order_contribution (
contribution_id bigint DEFAULT nextval('dws.dws_assistant_order_contribution_contribution_id_seq'::regclass) NOT NULL,
site_id bigint NOT NULL,
tenant_id bigint NOT NULL,
assistant_id bigint NOT NULL,
assistant_nickname character varying(100),
stat_date date NOT NULL,
order_gross_revenue numeric(14,2) DEFAULT 0,
order_net_revenue numeric(14,2) DEFAULT 0,
time_weighted_revenue numeric(14,2) DEFAULT 0,
time_weighted_net_revenue numeric(14,2) DEFAULT 0,
order_count integer DEFAULT 0,
total_service_seconds integer DEFAULT 0,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now()
);
CREATE TABLE dws.dws_assistant_recharge_commission (
id bigint DEFAULT nextval('dws.dws_assistant_recharge_commission_id_seq'::regclass) NOT NULL,
site_id bigint NOT NULL,
tenant_id bigint NOT NULL,
assistant_id bigint NOT NULL,
assistant_nickname character varying(50),
commission_month date NOT NULL,
recharge_order_id bigint,
recharge_order_no character varying(50),
recharge_amount numeric(12,2) DEFAULT 0 NOT NULL,
commission_amount numeric(12,2) DEFAULT 0 NOT NULL,
commission_ratio numeric(7,4),
import_batch_no character varying(50),
import_file_name character varying(200),
import_time timestamp with time zone,
import_user character varying(50),
remark text,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
CREATE TABLE dws.dws_assistant_salary_calc (
id bigint DEFAULT nextval('dws.dws_assistant_salary_calc_id_seq'::regclass) NOT NULL,
site_id bigint NOT NULL,
tenant_id bigint NOT NULL,
assistant_id bigint NOT NULL,
assistant_nickname character varying(50),
salary_month date NOT NULL,
assistant_level_code integer,
assistant_level_name character varying(20),
hire_date date,
is_new_hire boolean DEFAULT false NOT NULL,
effective_hours numeric(10,2) DEFAULT 0 NOT NULL,
base_hours numeric(10,2) DEFAULT 0 NOT NULL,
bonus_hours numeric(10,2) DEFAULT 0 NOT NULL,
room_hours numeric(10,2) DEFAULT 0 NOT NULL,
tier_id integer,
tier_code character varying(20),
tier_name character varying(50),
rank_with_ties integer,
base_course_price numeric(10,2) DEFAULT 0 NOT NULL,
bonus_course_price numeric(10,2) DEFAULT 0 NOT NULL,
base_deduction numeric(10,2) DEFAULT 0 NOT NULL,
bonus_deduction_ratio numeric(7,4) DEFAULT 0 NOT NULL,
base_income numeric(12,2) DEFAULT 0 NOT NULL,
bonus_income numeric(12,2) DEFAULT 0 NOT NULL,
room_income numeric(12,2) DEFAULT 0 NOT NULL,
total_course_income numeric(12,2) DEFAULT 0 NOT NULL,
sprint_bonus numeric(12,2) DEFAULT 0 NOT NULL,
top_rank_bonus numeric(12,2) DEFAULT 0 NOT NULL,
recharge_commission numeric(12,2) DEFAULT 0 NOT NULL,
other_bonus numeric(12,2) DEFAULT 0 NOT NULL,
total_bonus numeric(12,2) DEFAULT 0 NOT NULL,
gross_salary numeric(12,2) DEFAULT 0 NOT NULL,
vacation_days integer DEFAULT 0 NOT NULL,
vacation_unlimited boolean DEFAULT false NOT NULL,
calc_notes text,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
CREATE TABLE dws.dws_finance_daily_summary (
id bigint DEFAULT nextval('dws.dws_finance_daily_summary_id_seq'::regclass) NOT NULL,
site_id bigint NOT NULL,
tenant_id bigint NOT NULL,
stat_date date NOT NULL,
gross_amount numeric(14,2) DEFAULT 0 NOT NULL,
table_fee_amount numeric(14,2) DEFAULT 0 NOT NULL,
goods_amount numeric(14,2) DEFAULT 0 NOT NULL,
assistant_pd_amount numeric(14,2) DEFAULT 0 NOT NULL,
assistant_cx_amount numeric(14,2) DEFAULT 0 NOT NULL,
discount_total numeric(14,2) DEFAULT 0 NOT NULL,
discount_groupbuy numeric(14,2) DEFAULT 0 NOT NULL,
discount_vip numeric(14,2) DEFAULT 0 NOT NULL,
discount_gift_card numeric(14,2) DEFAULT 0 NOT NULL,
discount_manual numeric(14,2) DEFAULT 0 NOT NULL,
discount_rounding numeric(14,2) DEFAULT 0 NOT NULL,
discount_other numeric(14,2) DEFAULT 0 NOT NULL,
confirmed_income numeric(14,2) DEFAULT 0 NOT NULL,
cash_inflow_total numeric(14,2) DEFAULT 0 NOT NULL,
cash_pay_amount numeric(14,2) DEFAULT 0 NOT NULL,
groupbuy_pay_amount numeric(14,2) DEFAULT 0 NOT NULL,
platform_settlement_amount numeric(14,2) DEFAULT 0 NOT NULL,
platform_fee_amount numeric(14,2) DEFAULT 0 NOT NULL,
recharge_cash_inflow numeric(14,2) DEFAULT 0 NOT NULL,
card_consume_total numeric(14,2) DEFAULT 0 NOT NULL,
recharge_card_consume numeric(14,2) DEFAULT 0 NOT NULL,
gift_card_consume numeric(14,2) DEFAULT 0 NOT NULL,
cash_outflow_total numeric(14,2) DEFAULT 0 NOT NULL,
cash_balance_change numeric(14,2) DEFAULT 0 NOT NULL,
recharge_count integer DEFAULT 0 NOT NULL,
recharge_total numeric(14,2) DEFAULT 0 NOT NULL,
recharge_cash numeric(14,2) DEFAULT 0 NOT NULL,
recharge_gift numeric(14,2) DEFAULT 0 NOT NULL,
first_recharge_count integer DEFAULT 0 NOT NULL,
first_recharge_amount numeric(14,2) DEFAULT 0 NOT NULL,
renewal_count integer DEFAULT 0 NOT NULL,
renewal_amount numeric(14,2) DEFAULT 0 NOT NULL,
order_count integer DEFAULT 0 NOT NULL,
member_order_count integer DEFAULT 0 NOT NULL,
guest_order_count integer DEFAULT 0 NOT NULL,
avg_order_amount numeric(12,2) DEFAULT 0 NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
CREATE TABLE dws.dws_finance_discount_detail (
id bigint DEFAULT nextval('dws.dws_finance_discount_detail_id_seq'::regclass) NOT NULL,
site_id bigint NOT NULL,
tenant_id bigint NOT NULL,
stat_date date NOT NULL,
discount_type_code character varying(30) NOT NULL,
discount_type_name character varying(50) NOT NULL,
discount_amount numeric(14,2) DEFAULT 0 NOT NULL,
discount_ratio numeric(7,4) DEFAULT 0 NOT NULL,
usage_count integer DEFAULT 0 NOT NULL,
affected_orders integer DEFAULT 0 NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
CREATE TABLE dws.dws_finance_expense_summary (
id bigint DEFAULT nextval('dws.dws_finance_expense_summary_id_seq'::regclass) NOT NULL,
site_id bigint NOT NULL,
tenant_id bigint NOT NULL,
expense_month date NOT NULL,
expense_type_code character varying(30) NOT NULL,
expense_type_name character varying(50) NOT NULL,
expense_category character varying(20),
expense_amount numeric(14,2) DEFAULT 0 NOT NULL,
expense_detail text,
import_batch_no character varying(50),
import_file_name character varying(200),
import_time timestamp with time zone,
import_user character varying(50),
remark text,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
CREATE TABLE dws.dws_finance_income_structure (
id bigint DEFAULT nextval('dws.dws_finance_income_structure_id_seq'::regclass) NOT NULL,
site_id bigint NOT NULL,
tenant_id bigint NOT NULL,
stat_date date NOT NULL,
structure_type character varying(20) NOT NULL,
category_code character varying(30) NOT NULL,
category_name character varying(50) NOT NULL,
income_amount numeric(14,2) DEFAULT 0 NOT NULL,
income_ratio numeric(7,4) DEFAULT 0 NOT NULL,
order_count integer DEFAULT 0 NOT NULL,
duration_minutes integer DEFAULT 0 NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
CREATE TABLE dws.dws_finance_recharge_summary (
id bigint DEFAULT nextval('dws.dws_finance_recharge_summary_id_seq'::regclass) NOT NULL,
site_id bigint NOT NULL,
tenant_id bigint NOT NULL,
stat_date date NOT NULL,
recharge_count integer DEFAULT 0 NOT NULL,
recharge_total numeric(14,2) DEFAULT 0 NOT NULL,
recharge_cash numeric(14,2) DEFAULT 0 NOT NULL,
recharge_gift numeric(14,2) DEFAULT 0 NOT NULL,
first_recharge_count integer DEFAULT 0 NOT NULL,
first_recharge_cash numeric(14,2) DEFAULT 0 NOT NULL,
first_recharge_gift numeric(14,2) DEFAULT 0 NOT NULL,
first_recharge_total numeric(14,2) DEFAULT 0 NOT NULL,
renewal_count integer DEFAULT 0 NOT NULL,
renewal_cash numeric(14,2) DEFAULT 0 NOT NULL,
renewal_gift numeric(14,2) DEFAULT 0 NOT NULL,
renewal_total numeric(14,2) DEFAULT 0 NOT NULL,
recharge_member_count integer DEFAULT 0 NOT NULL,
new_member_count integer DEFAULT 0 NOT NULL,
total_card_balance numeric(14,2) DEFAULT 0 NOT NULL,
cash_card_balance numeric(14,2) DEFAULT 0 NOT NULL,
gift_card_balance numeric(14,2) DEFAULT 0 NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
CREATE TABLE dws.dws_goods_stock_daily_summary (
site_id bigint NOT NULL,
tenant_id bigint,
stat_date date NOT NULL,
site_goods_id bigint NOT NULL,
goods_name text,
goods_unit text,
goods_category_id bigint,
goods_category_second_id bigint,
category_name text,
range_start_stock numeric,
range_end_stock numeric,
range_in numeric,
range_out numeric,
range_sale numeric,
range_sale_money numeric(12,2),
range_inventory numeric,
current_stock numeric,
stat_period text DEFAULT 'daily'::text NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
CREATE TABLE dws.dws_goods_stock_monthly_summary (
site_id bigint NOT NULL,
tenant_id bigint,
stat_date date NOT NULL,
site_goods_id bigint NOT NULL,
goods_name text,
goods_unit text,
goods_category_id bigint,
goods_category_second_id bigint,
category_name text,
range_start_stock numeric,
range_end_stock numeric,
range_in numeric,
range_out numeric,
range_sale numeric,
range_sale_money numeric(12,2),
range_inventory numeric,
current_stock numeric,
stat_period text DEFAULT 'monthly'::text NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
CREATE TABLE dws.dws_goods_stock_weekly_summary (
site_id bigint NOT NULL,
tenant_id bigint,
stat_date date NOT NULL,
site_goods_id bigint NOT NULL,
goods_name text,
goods_unit text,
goods_category_id bigint,
goods_category_second_id bigint,
category_name text,
range_start_stock numeric,
range_end_stock numeric,
range_in numeric,
range_out numeric,
range_sale numeric,
range_sale_money numeric(12,2),
range_inventory numeric,
current_stock numeric,
stat_period text DEFAULT 'weekly'::text NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
CREATE TABLE dws.dws_index_percentile_history (
history_id bigint DEFAULT nextval('dws.dws_index_percentile_history_history_id_seq'::regclass) NOT NULL,
site_id bigint NOT NULL,
index_type character varying(50) NOT NULL,
calc_time timestamp with time zone NOT NULL,
percentile_5 numeric(14,6),
percentile_95 numeric(14,6),
percentile_5_smoothed numeric(14,6),
percentile_95_smoothed numeric(14,6),
record_count integer,
min_raw_score numeric(14,6),
max_raw_score numeric(14,6),
avg_raw_score numeric(14,6),
created_at timestamp with time zone DEFAULT now() NOT NULL
);
CREATE TABLE dws.dws_member_assistant_intimacy (
intimacy_id bigint DEFAULT nextval('dws.dws_member_assistant_intimacy_intimacy_id_seq'::regclass) NOT NULL,
site_id bigint NOT NULL,
tenant_id bigint NOT NULL,
member_id bigint NOT NULL,
assistant_id bigint NOT NULL,
session_count integer DEFAULT 0 NOT NULL,
total_duration_minutes integer DEFAULT 0 NOT NULL,
basic_session_count integer DEFAULT 0 NOT NULL,
incentive_session_count integer DEFAULT 0 NOT NULL,
days_since_last_session integer,
attributed_recharge_count integer DEFAULT 0 NOT NULL,
attributed_recharge_amount numeric(14,2) DEFAULT 0 NOT NULL,
score_frequency numeric(10,4),
score_recency numeric(10,4),
score_recharge numeric(10,4),
score_duration numeric(10,4),
burst_multiplier numeric(7,4),
raw_score numeric(14,6),
display_score numeric(4,2),
calc_time timestamp with time zone DEFAULT now() NOT NULL,
calc_version integer DEFAULT 1 NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
CREATE TABLE dws.dws_member_assistant_relation_index (
relation_id bigint DEFAULT nextval('dws.dws_member_assistant_relation_index_relation_id_seq'::regclass) NOT NULL,
site_id bigint NOT NULL,
tenant_id bigint NOT NULL,
member_id bigint NOT NULL,
assistant_id bigint NOT NULL,
session_count integer DEFAULT 0 NOT NULL,
total_duration_minutes integer DEFAULT 0 NOT NULL,
basic_session_count integer DEFAULT 0 NOT NULL,
incentive_session_count integer DEFAULT 0 NOT NULL,
days_since_last_session integer,
rs_f numeric(14,6) DEFAULT 0 NOT NULL,
rs_d numeric(14,6) DEFAULT 0 NOT NULL,
rs_r numeric(14,6) DEFAULT 0 NOT NULL,
rs_raw numeric(14,6) DEFAULT 0 NOT NULL,
rs_display numeric(4,2) DEFAULT 0 NOT NULL,
os_share numeric(10,6) DEFAULT 0 NOT NULL,
os_label character varying(20) DEFAULT 'POOL'::character varying NOT NULL,
os_rank integer,
ms_f_short numeric(14,6) DEFAULT 0 NOT NULL,
ms_f_long numeric(14,6) DEFAULT 0 NOT NULL,
ms_raw numeric(14,6) DEFAULT 0 NOT NULL,
ms_display numeric(4,2) DEFAULT 0 NOT NULL,
ml_order_count integer DEFAULT 0 NOT NULL,
ml_allocated_amount numeric(14,2) DEFAULT 0 NOT NULL,
ml_raw numeric(14,6) DEFAULT 0 NOT NULL,
ml_display numeric(4,2) DEFAULT 0 NOT NULL,
calc_time timestamp with time zone DEFAULT now() NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
CREATE TABLE dws.dws_member_consumption_summary (
id bigint DEFAULT nextval('dws.dws_member_consumption_summary_id_seq'::regclass) NOT NULL,
site_id bigint NOT NULL,
tenant_id bigint NOT NULL,
member_id bigint NOT NULL,
stat_date date NOT NULL,
member_nickname character varying(100),
member_mobile character varying(20),
card_grade_name character varying(50),
register_date date,
first_consume_date date,
last_consume_date date,
total_visit_count integer DEFAULT 0 NOT NULL,
total_consume_amount numeric(14,2) DEFAULT 0 NOT NULL,
total_recharge_amount numeric(14,2) DEFAULT 0 NOT NULL,
total_table_fee numeric(14,2) DEFAULT 0 NOT NULL,
total_goods_amount numeric(14,2) DEFAULT 0 NOT NULL,
total_assistant_amount numeric(14,2) DEFAULT 0 NOT NULL,
visit_count_7d integer DEFAULT 0 NOT NULL,
visit_count_10d integer DEFAULT 0 NOT NULL,
visit_count_15d integer DEFAULT 0 NOT NULL,
visit_count_30d integer DEFAULT 0 NOT NULL,
visit_count_60d integer DEFAULT 0 NOT NULL,
visit_count_90d integer DEFAULT 0 NOT NULL,
consume_amount_7d numeric(14,2) DEFAULT 0 NOT NULL,
consume_amount_10d numeric(14,2) DEFAULT 0 NOT NULL,
consume_amount_15d numeric(14,2) DEFAULT 0 NOT NULL,
consume_amount_30d numeric(14,2) DEFAULT 0 NOT NULL,
consume_amount_60d numeric(14,2) DEFAULT 0 NOT NULL,
consume_amount_90d numeric(14,2) DEFAULT 0 NOT NULL,
cash_card_balance numeric(14,2) DEFAULT 0 NOT NULL,
gift_card_balance numeric(14,2) DEFAULT 0 NOT NULL,
total_card_balance numeric(14,2) DEFAULT 0 NOT NULL,
days_since_last integer,
is_active_7d boolean DEFAULT false NOT NULL,
is_active_30d boolean DEFAULT false NOT NULL,
is_active_90d boolean DEFAULT false NOT NULL,
customer_tier character varying(20),
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL,
recharge_count_30d integer DEFAULT 0,
recharge_count_60d integer DEFAULT 0,
recharge_count_90d integer DEFAULT 0,
recharge_amount_30d numeric(14,2) DEFAULT 0,
recharge_amount_60d numeric(14,2) DEFAULT 0,
recharge_amount_90d numeric(14,2) DEFAULT 0,
avg_ticket_amount numeric(14,2) DEFAULT 0
);
CREATE TABLE dws.dws_member_newconv_index (
newconv_id bigint DEFAULT nextval('dws.dws_member_newconv_index_newconv_id_seq'::regclass) NOT NULL,
site_id bigint NOT NULL,
tenant_id bigint NOT NULL,
member_id bigint NOT NULL,
status character varying(30),
segment character varying(10),
member_create_time timestamp with time zone,
first_visit_time timestamp with time zone,
last_visit_time timestamp with time zone,
last_recharge_time timestamp with time zone,
t_v numeric(6,2),
t_r numeric(6,2),
t_a numeric(6,2),
visits_14d integer DEFAULT 0 NOT NULL,
visits_60d integer DEFAULT 0 NOT NULL,
visits_total integer DEFAULT 0 NOT NULL,
spend_30d numeric(14,2) DEFAULT 0 NOT NULL,
spend_180d numeric(14,2) DEFAULT 0 NOT NULL,
sv_balance numeric(14,2) DEFAULT 0 NOT NULL,
recharge_60d_amt numeric(14,2) DEFAULT 0 NOT NULL,
interval_count integer DEFAULT 0 NOT NULL,
need_new numeric(10,4),
salvage_new numeric(10,4),
recharge_new numeric(10,4),
value_new numeric(10,4),
welcome_new numeric(10,4),
raw_score_welcome numeric(14,6),
raw_score_convert numeric(14,6),
raw_score numeric(14,6),
display_score_welcome numeric(4,2),
display_score_convert numeric(4,2),
display_score numeric(4,2),
last_wechat_touch_time timestamp with time zone,
calc_time timestamp with time zone DEFAULT now() NOT NULL,
calc_version integer DEFAULT 1 NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
CREATE TABLE dws.dws_member_recall_index (
recall_id bigint DEFAULT nextval('dws.dws_member_recall_index_recall_id_seq'::regclass) NOT NULL,
site_id bigint NOT NULL,
tenant_id bigint NOT NULL,
member_id bigint NOT NULL,
days_since_last_visit integer,
visit_interval_median numeric(10,2),
visit_interval_mad numeric(10,2),
days_since_first_visit integer,
days_since_last_recharge integer,
visits_last_14_days integer DEFAULT 0 NOT NULL,
visits_last_60_days integer DEFAULT 0 NOT NULL,
score_overdue numeric(10,4),
score_new_bonus numeric(10,4),
score_recharge_bonus numeric(10,4),
score_hot_drop numeric(10,4),
raw_score numeric(14,6),
display_score numeric(4,2),
calc_time timestamp with time zone DEFAULT now() NOT NULL,
calc_version integer DEFAULT 1 NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
CREATE TABLE dws.dws_member_spending_power_index (
spi_id bigint DEFAULT nextval('dws.dws_member_spending_power_index_spi_id_seq'::regclass) NOT NULL,
site_id bigint NOT NULL,
member_id bigint NOT NULL,
spend_30 numeric(14,2) DEFAULT 0,
spend_90 numeric(14,2) DEFAULT 0,
recharge_90 numeric(14,2) DEFAULT 0,
orders_30 integer DEFAULT 0,
orders_90 integer DEFAULT 0,
visit_days_30 integer DEFAULT 0,
visit_days_90 integer DEFAULT 0,
avg_ticket_90 numeric(14,2) DEFAULT 0,
active_weeks_90 integer DEFAULT 0,
daily_spend_ewma_90 numeric(14,2) DEFAULT 0,
score_level_raw numeric(10,4) DEFAULT 0,
score_speed_raw numeric(10,4) DEFAULT 0,
score_stability_raw numeric(10,4) DEFAULT 0,
score_level_display numeric(5,2) DEFAULT 0,
score_speed_display numeric(5,2) DEFAULT 0,
score_stability_display numeric(5,2) DEFAULT 0,
raw_score numeric(10,4) DEFAULT 0,
display_score numeric(5,2) DEFAULT 0,
calc_time timestamp with time zone DEFAULT now(),
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now()
);
CREATE TABLE dws.dws_member_visit_detail (
id bigint DEFAULT nextval('dws.dws_member_visit_detail_id_seq'::regclass) NOT NULL,
site_id bigint NOT NULL,
tenant_id bigint NOT NULL,
member_id bigint NOT NULL,
order_settle_id bigint NOT NULL,
visit_date date NOT NULL,
visit_time timestamp with time zone,
member_nickname character varying(100),
member_mobile character varying(20),
member_birthday date,
table_id bigint,
table_name character varying(50),
area_name character varying(50),
area_category character varying(20),
table_fee numeric(12,2) DEFAULT 0 NOT NULL,
goods_amount numeric(12,2) DEFAULT 0 NOT NULL,
assistant_amount numeric(12,2) DEFAULT 0 NOT NULL,
total_consume numeric(12,2) DEFAULT 0 NOT NULL,
total_discount numeric(12,2) DEFAULT 0 NOT NULL,
actual_pay numeric(12,2) DEFAULT 0 NOT NULL,
cash_pay numeric(12,2) DEFAULT 0 NOT NULL,
balance_pay numeric(12,2) DEFAULT 0 NOT NULL,
recharge_card_pay numeric(12,2) DEFAULT 0 NOT NULL,
gift_card_pay numeric(12,2) DEFAULT 0 NOT NULL,
groupbuy_pay numeric(12,2) DEFAULT 0 NOT NULL,
table_duration_min integer DEFAULT 0 NOT NULL,
assistant_duration_min integer DEFAULT 0 NOT NULL,
assistant_services jsonb,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
CREATE TABLE dws.dws_member_winback_index (
winback_id bigint DEFAULT nextval('dws.dws_member_winback_index_winback_id_seq'::regclass) NOT NULL,
site_id bigint NOT NULL,
tenant_id bigint NOT NULL,
member_id bigint NOT NULL,
status character varying(30),
segment character varying(10),
member_create_time timestamp with time zone,
first_visit_time timestamp with time zone,
last_visit_time timestamp with time zone,
last_recharge_time timestamp with time zone,
t_v numeric(6,2),
t_r numeric(6,2),
t_a numeric(6,2),
visits_14d integer DEFAULT 0 NOT NULL,
visits_60d integer DEFAULT 0 NOT NULL,
visits_total integer DEFAULT 0 NOT NULL,
spend_30d numeric(14,2) DEFAULT 0 NOT NULL,
spend_180d numeric(14,2) DEFAULT 0 NOT NULL,
sv_balance numeric(14,2) DEFAULT 0 NOT NULL,
recharge_60d_amt numeric(14,2) DEFAULT 0 NOT NULL,
interval_count integer DEFAULT 0 NOT NULL,
overdue_old numeric(10,4),
drop_old numeric(10,4),
recharge_old numeric(10,4),
value_old numeric(10,4),
raw_score numeric(14,6),
display_score numeric(4,2),
last_wechat_touch_time timestamp with time zone,
calc_time timestamp with time zone DEFAULT now() NOT NULL,
calc_version integer DEFAULT 1 NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL,
overdue_cdf_p numeric(10,4),
ideal_interval_days numeric(10,2),
ideal_next_visit_date date
);
CREATE TABLE dws.dws_ml_manual_order_alloc (
alloc_id bigint DEFAULT nextval('dws.dws_ml_manual_order_alloc_alloc_id_seq'::regclass) NOT NULL,
site_id bigint NOT NULL,
biz_date date NOT NULL,
external_id character varying(128) NOT NULL,
member_id bigint DEFAULT 0 NOT NULL,
pay_time timestamp with time zone NOT NULL,
order_amount numeric(14,2) DEFAULT 0 NOT NULL,
assistant_id bigint NOT NULL,
assistant_name character varying(128),
share_ratio numeric(14,8) DEFAULT 0 NOT NULL,
allocated_amount numeric(14,2) DEFAULT 0 NOT NULL,
currency character varying(16) DEFAULT 'CNY'::character varying NOT NULL,
import_scope_key character varying(128) NOT NULL,
import_batch_no character varying(64) NOT NULL,
import_file_name character varying(255) NOT NULL,
import_time timestamp with time zone DEFAULT now() NOT NULL,
import_user character varying(64),
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
CREATE TABLE dws.dws_ml_manual_order_source (
source_id bigint DEFAULT nextval('dws.dws_ml_manual_order_source_source_id_seq'::regclass) NOT NULL,
site_id bigint NOT NULL,
biz_date date NOT NULL,
external_id character varying(128) NOT NULL,
member_id bigint DEFAULT 0 NOT NULL,
pay_time timestamp with time zone NOT NULL,
order_amount numeric(14,2) DEFAULT 0 NOT NULL,
currency character varying(16) DEFAULT 'CNY'::character varying NOT NULL,
assistant_id_1 bigint,
assistant_name_1 character varying(128),
assistant_id_2 bigint,
assistant_name_2 character varying(128),
assistant_id_3 bigint,
assistant_name_3 character varying(128),
assistant_id_4 bigint,
assistant_name_4 character varying(128),
assistant_id_5 bigint,
assistant_name_5 character varying(128),
import_batch_no character varying(64) NOT NULL,
import_file_name character varying(255) NOT NULL,
import_scope_key character varying(128) NOT NULL,
import_time timestamp with time zone DEFAULT now() NOT NULL,
import_user character varying(64),
row_no integer NOT NULL,
remark text,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
CREATE TABLE dws.dws_order_summary (
site_id bigint NOT NULL,
order_settle_id bigint NOT NULL,
order_trade_no character varying(64),
order_date date NOT NULL,
tenant_id bigint NOT NULL,
member_id bigint,
member_flag boolean DEFAULT false NOT NULL,
recharge_order_flag boolean DEFAULT false NOT NULL,
item_count integer DEFAULT 0 NOT NULL,
total_item_quantity integer DEFAULT 0 NOT NULL,
table_fee_amount numeric(14,2) DEFAULT 0 NOT NULL,
assistant_service_amount numeric(14,2) DEFAULT 0 NOT NULL,
goods_amount numeric(14,2) DEFAULT 0 NOT NULL,
group_amount numeric(14,2) DEFAULT 0 NOT NULL,
total_coupon_deduction numeric(14,2) DEFAULT 0 NOT NULL,
member_discount_amount numeric(14,2) DEFAULT 0 NOT NULL,
manual_discount_amount numeric(14,2) DEFAULT 0 NOT NULL,
order_original_amount numeric(14,2) DEFAULT 0 NOT NULL,
order_final_amount numeric(14,2) DEFAULT 0 NOT NULL,
stored_card_deduct numeric(14,2) DEFAULT 0 NOT NULL,
external_paid_amount numeric(14,2) DEFAULT 0 NOT NULL,
total_paid_amount numeric(14,2) DEFAULT 0 NOT NULL,
book_table_flow numeric(14,2) DEFAULT 0 NOT NULL,
book_assistant_flow numeric(14,2) DEFAULT 0 NOT NULL,
book_goods_flow numeric(14,2) DEFAULT 0 NOT NULL,
book_group_flow numeric(14,2) DEFAULT 0 NOT NULL,
book_order_flow numeric(14,2) DEFAULT 0 NOT NULL,
order_effective_consume_cash numeric(14,2) DEFAULT 0 NOT NULL,
order_effective_recharge_cash numeric(14,2) DEFAULT 0 NOT NULL,
order_effective_flow numeric(14,2) DEFAULT 0 NOT NULL,
refund_amount numeric(14,2) DEFAULT 0 NOT NULL,
net_income numeric(14,2) DEFAULT 0 NOT NULL,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
CREATE TABLE dws.dws_platform_settlement (
id bigint DEFAULT nextval('dws.dws_platform_settlement_id_seq'::regclass) NOT NULL,
site_id bigint NOT NULL,
tenant_id bigint NOT NULL,
settlement_date date NOT NULL,
platform_type character varying(30) NOT NULL,
platform_name character varying(50),
platform_order_no character varying(100),
order_settle_id bigint,
settlement_amount numeric(14,2) DEFAULT 0 NOT NULL,
commission_amount numeric(14,2) DEFAULT 0 NOT NULL,
service_fee numeric(14,2) DEFAULT 0 NOT NULL,
gross_amount numeric(14,2) DEFAULT 0 NOT NULL,
import_batch_no character varying(50),
import_file_name character varying(200),
import_time timestamp with time zone,
import_user character varying(50),
remark text,
created_at timestamp with time zone DEFAULT now() NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
-- 约束(主键 / 唯一 / 外键)
ALTER TABLE dws.cfg_area_category ADD CONSTRAINT cfg_area_category_pkey PRIMARY KEY (category_id);
ALTER TABLE dws.cfg_area_category ADD CONSTRAINT uk_cfg_area_category UNIQUE (source_area_name);
ALTER TABLE dws.cfg_assistant_level_price ADD CONSTRAINT cfg_assistant_level_price_pkey PRIMARY KEY (price_id);
ALTER TABLE dws.cfg_assistant_level_price ADD CONSTRAINT uk_cfg_assistant_level_price UNIQUE (level_code, effective_from);
ALTER TABLE dws.cfg_bonus_rules ADD CONSTRAINT cfg_bonus_rules_pkey PRIMARY KEY (rule_id);
ALTER TABLE dws.cfg_bonus_rules ADD CONSTRAINT uk_cfg_bonus_rules UNIQUE (rule_type, rule_code, effective_from);
ALTER TABLE dws.cfg_index_parameters ADD CONSTRAINT cfg_index_parameters_pkey PRIMARY KEY (param_id);
ALTER TABLE dws.cfg_index_parameters ADD CONSTRAINT uk_cfg_index_parameters UNIQUE (index_type, param_name, effective_from);
ALTER TABLE dws.cfg_performance_tier ADD CONSTRAINT cfg_performance_tier_pkey PRIMARY KEY (tier_id);
ALTER TABLE dws.cfg_performance_tier ADD CONSTRAINT uk_cfg_performance_tier UNIQUE (tier_code, effective_from);
ALTER TABLE dws.cfg_skill_type ADD CONSTRAINT cfg_skill_type_pkey PRIMARY KEY (skill_type_id);
ALTER TABLE dws.cfg_skill_type ADD CONSTRAINT uk_cfg_skill_type UNIQUE (skill_id);
ALTER TABLE dws.dws_assistant_customer_stats ADD CONSTRAINT dws_assistant_customer_stats_pkey PRIMARY KEY (id);
ALTER TABLE dws.dws_assistant_customer_stats ADD CONSTRAINT uk_dws_assistant_customer UNIQUE (site_id, assistant_id, member_id, stat_date);
ALTER TABLE dws.dws_assistant_daily_detail ADD CONSTRAINT dws_assistant_daily_detail_pkey PRIMARY KEY (id);
ALTER TABLE dws.dws_assistant_daily_detail ADD CONSTRAINT uk_dws_assistant_daily UNIQUE (site_id, assistant_id, stat_date);
ALTER TABLE dws.dws_assistant_finance_analysis ADD CONSTRAINT dws_assistant_finance_analysis_pkey PRIMARY KEY (id);
ALTER TABLE dws.dws_assistant_finance_analysis ADD CONSTRAINT uk_dws_assistant_finance UNIQUE (site_id, stat_date, assistant_id);
ALTER TABLE dws.dws_assistant_monthly_summary ADD CONSTRAINT dws_assistant_monthly_summary_pkey PRIMARY KEY (id);
ALTER TABLE dws.dws_assistant_monthly_summary ADD CONSTRAINT uk_dws_assistant_monthly UNIQUE (site_id, assistant_id, stat_month, assistant_level_code);
ALTER TABLE dws.dws_assistant_order_contribution ADD CONSTRAINT dws_assistant_order_contribution_pkey PRIMARY KEY (contribution_id);
ALTER TABLE dws.dws_assistant_recharge_commission ADD CONSTRAINT dws_assistant_recharge_commission_pkey PRIMARY KEY (id);
ALTER TABLE dws.dws_assistant_salary_calc ADD CONSTRAINT dws_assistant_salary_calc_pkey PRIMARY KEY (id);
ALTER TABLE dws.dws_assistant_salary_calc ADD CONSTRAINT uk_dws_assistant_salary UNIQUE (site_id, assistant_id, salary_month, assistant_level_code);
ALTER TABLE dws.dws_finance_daily_summary ADD CONSTRAINT dws_finance_daily_summary_pkey PRIMARY KEY (id);
ALTER TABLE dws.dws_finance_daily_summary ADD CONSTRAINT uk_dws_finance_daily UNIQUE (site_id, stat_date);
ALTER TABLE dws.dws_finance_discount_detail ADD CONSTRAINT dws_finance_discount_detail_pkey PRIMARY KEY (id);
ALTER TABLE dws.dws_finance_discount_detail ADD CONSTRAINT uk_dws_finance_discount_detail UNIQUE (site_id, stat_date, discount_type_code);
ALTER TABLE dws.dws_finance_expense_summary ADD CONSTRAINT dws_finance_expense_summary_pkey PRIMARY KEY (id);
ALTER TABLE dws.dws_finance_expense_summary ADD CONSTRAINT uk_dws_finance_expense UNIQUE (site_id, expense_month, expense_type_code, import_batch_no);
ALTER TABLE dws.dws_finance_income_structure ADD CONSTRAINT dws_finance_income_structure_pkey PRIMARY KEY (id);
ALTER TABLE dws.dws_finance_income_structure ADD CONSTRAINT uk_dws_finance_income_structure UNIQUE (site_id, stat_date, structure_type, category_code);
ALTER TABLE dws.dws_finance_recharge_summary ADD CONSTRAINT dws_finance_recharge_summary_pkey PRIMARY KEY (id);
ALTER TABLE dws.dws_finance_recharge_summary ADD CONSTRAINT uk_dws_finance_recharge UNIQUE (site_id, stat_date);
ALTER TABLE dws.dws_goods_stock_daily_summary ADD CONSTRAINT dws_goods_stock_daily_summary_pkey PRIMARY KEY (site_id, stat_date, site_goods_id);
ALTER TABLE dws.dws_goods_stock_monthly_summary ADD CONSTRAINT dws_goods_stock_monthly_summary_pkey PRIMARY KEY (site_id, stat_date, site_goods_id);
ALTER TABLE dws.dws_goods_stock_weekly_summary ADD CONSTRAINT dws_goods_stock_weekly_summary_pkey PRIMARY KEY (site_id, stat_date, site_goods_id);
ALTER TABLE dws.dws_index_percentile_history ADD CONSTRAINT dws_index_percentile_history_pkey PRIMARY KEY (history_id);
ALTER TABLE dws.dws_index_percentile_history ADD CONSTRAINT uk_dws_index_percentile_history UNIQUE (site_id, index_type, calc_time);
ALTER TABLE dws.dws_member_assistant_intimacy ADD CONSTRAINT dws_member_assistant_intimacy_pkey PRIMARY KEY (intimacy_id);
ALTER TABLE dws.dws_member_assistant_intimacy ADD CONSTRAINT uk_dws_member_assistant_intimacy UNIQUE (site_id, member_id, assistant_id);
ALTER TABLE dws.dws_member_assistant_relation_index ADD CONSTRAINT dws_member_assistant_relation_index_pkey PRIMARY KEY (relation_id);
ALTER TABLE dws.dws_member_assistant_relation_index ADD CONSTRAINT uk_dws_member_assistant_relation_index UNIQUE (site_id, member_id, assistant_id);
ALTER TABLE dws.dws_member_consumption_summary ADD CONSTRAINT dws_member_consumption_summary_pkey PRIMARY KEY (id);
ALTER TABLE dws.dws_member_consumption_summary ADD CONSTRAINT uk_dws_member_consumption UNIQUE (site_id, member_id, stat_date);
ALTER TABLE dws.dws_member_newconv_index ADD CONSTRAINT dws_member_newconv_index_pkey PRIMARY KEY (newconv_id);
ALTER TABLE dws.dws_member_newconv_index ADD CONSTRAINT uk_dws_member_newconv UNIQUE (site_id, member_id);
ALTER TABLE dws.dws_member_recall_index ADD CONSTRAINT dws_member_recall_index_pkey PRIMARY KEY (recall_id);
ALTER TABLE dws.dws_member_recall_index ADD CONSTRAINT uk_dws_member_recall UNIQUE (site_id, member_id);
ALTER TABLE dws.dws_member_spending_power_index ADD CONSTRAINT dws_member_spending_power_index_pkey PRIMARY KEY (spi_id);
ALTER TABLE dws.dws_member_visit_detail ADD CONSTRAINT dws_member_visit_detail_pkey PRIMARY KEY (id);
ALTER TABLE dws.dws_member_visit_detail ADD CONSTRAINT uk_dws_member_visit UNIQUE (site_id, member_id, order_settle_id);
ALTER TABLE dws.dws_member_winback_index ADD CONSTRAINT dws_member_winback_index_pkey PRIMARY KEY (winback_id);
ALTER TABLE dws.dws_member_winback_index ADD CONSTRAINT uk_dws_member_winback UNIQUE (site_id, member_id);
ALTER TABLE dws.dws_ml_manual_order_alloc ADD CONSTRAINT dws_ml_manual_order_alloc_pkey PRIMARY KEY (alloc_id);
ALTER TABLE dws.dws_ml_manual_order_alloc ADD CONSTRAINT uk_dws_ml_manual_order_alloc UNIQUE (site_id, external_id, assistant_id);
ALTER TABLE dws.dws_ml_manual_order_source ADD CONSTRAINT dws_ml_manual_order_source_pkey PRIMARY KEY (source_id);
ALTER TABLE dws.dws_ml_manual_order_source ADD CONSTRAINT uk_dws_ml_manual_order_source UNIQUE (site_id, external_id, import_scope_key, row_no);
ALTER TABLE dws.dws_order_summary ADD CONSTRAINT pk_dws_order_summary PRIMARY KEY (site_id, order_settle_id);
ALTER TABLE dws.dws_platform_settlement ADD CONSTRAINT dws_platform_settlement_pkey PRIMARY KEY (id);
-- 索引
CREATE INDEX idx_cfg_area_category_code ON dws.cfg_area_category USING btree (category_code);
CREATE INDEX idx_cfg_assistant_level_price_effective ON dws.cfg_assistant_level_price USING btree (effective_from, effective_to);
CREATE INDEX idx_cfg_bonus_rules_effective ON dws.cfg_bonus_rules USING btree (effective_from, effective_to);
CREATE INDEX idx_cfg_bonus_rules_type ON dws.cfg_bonus_rules USING btree (rule_type);
CREATE INDEX idx_cfg_index_params_effective ON dws.cfg_index_parameters USING btree (effective_from, effective_to);
CREATE INDEX idx_cfg_index_params_type ON dws.cfg_index_parameters USING btree (index_type);
CREATE INDEX idx_cfg_performance_tier_effective ON dws.cfg_performance_tier USING btree (effective_from, effective_to);
CREATE INDEX idx_cfg_skill_type_course ON dws.cfg_skill_type USING btree (course_type_code);
CREATE INDEX idx_dws_assistant_customer_asst ON dws.dws_assistant_customer_stats USING btree (assistant_id, stat_date);
CREATE INDEX idx_dws_assistant_customer_date ON dws.dws_assistant_customer_stats USING btree (stat_date);
CREATE INDEX idx_dws_assistant_customer_member ON dws.dws_assistant_customer_stats USING btree (member_id, stat_date);
CREATE INDEX idx_dws_assistant_daily_asst_date ON dws.dws_assistant_daily_detail USING btree (assistant_id, stat_date);
CREATE INDEX idx_dws_assistant_daily_date ON dws.dws_assistant_daily_detail USING btree (stat_date);
CREATE INDEX idx_dws_assistant_daily_site_date ON dws.dws_assistant_daily_detail USING btree (site_id, stat_date);
CREATE INDEX idx_dws_assistant_finance_asst ON dws.dws_assistant_finance_analysis USING btree (assistant_id, stat_date);
CREATE INDEX idx_dws_assistant_finance_date ON dws.dws_assistant_finance_analysis USING btree (stat_date);
CREATE INDEX idx_dws_assistant_monthly_asst ON dws.dws_assistant_monthly_summary USING btree (assistant_id, stat_month);
CREATE INDEX idx_dws_assistant_monthly_month ON dws.dws_assistant_monthly_summary USING btree (stat_month);
CREATE INDEX idx_dws_assistant_monthly_tier ON dws.dws_assistant_monthly_summary USING btree (tier_code);
CREATE UNIQUE INDEX idx_aoc_site_assistant_date ON dws.dws_assistant_order_contribution USING btree (site_id, assistant_id, stat_date);
CREATE INDEX idx_aoc_stat_date ON dws.dws_assistant_order_contribution USING btree (site_id, stat_date);
CREATE INDEX idx_dws_assistant_commission_asst ON dws.dws_assistant_recharge_commission USING btree (assistant_id, commission_month);
CREATE INDEX idx_dws_assistant_commission_batch ON dws.dws_assistant_recharge_commission USING btree (import_batch_no);
CREATE INDEX idx_dws_assistant_commission_month ON dws.dws_assistant_recharge_commission USING btree (commission_month);
CREATE INDEX idx_dws_assistant_salary_asst ON dws.dws_assistant_salary_calc USING btree (assistant_id, salary_month);
CREATE INDEX idx_dws_assistant_salary_month ON dws.dws_assistant_salary_calc USING btree (salary_month);
CREATE INDEX idx_dws_finance_daily_date ON dws.dws_finance_daily_summary USING btree (stat_date);
CREATE INDEX idx_dws_finance_daily_site ON dws.dws_finance_daily_summary USING btree (site_id, stat_date);
CREATE INDEX idx_dws_finance_discount_date ON dws.dws_finance_discount_detail USING btree (stat_date);
CREATE INDEX idx_dws_finance_discount_type ON dws.dws_finance_discount_detail USING btree (discount_type_code);
CREATE INDEX idx_dws_finance_expense_batch ON dws.dws_finance_expense_summary USING btree (import_batch_no);
CREATE INDEX idx_dws_finance_expense_month ON dws.dws_finance_expense_summary USING btree (expense_month);
CREATE INDEX idx_dws_finance_expense_type ON dws.dws_finance_expense_summary USING btree (expense_type_code);
CREATE INDEX idx_dws_finance_income_date ON dws.dws_finance_income_structure USING btree (stat_date);
CREATE INDEX idx_dws_finance_income_type ON dws.dws_finance_income_structure USING btree (structure_type, category_code);
CREATE INDEX idx_dws_finance_recharge_date ON dws.dws_finance_recharge_summary USING btree (stat_date);
CREATE INDEX idx_dws_goods_stock_daily_date ON dws.dws_goods_stock_daily_summary USING btree (stat_date);
CREATE INDEX idx_dws_goods_stock_daily_goods ON dws.dws_goods_stock_daily_summary USING btree (site_goods_id, stat_date);
CREATE INDEX idx_dws_goods_stock_daily_site ON dws.dws_goods_stock_daily_summary USING btree (site_id, stat_date);
CREATE INDEX idx_dws_goods_stock_monthly_date ON dws.dws_goods_stock_monthly_summary USING btree (stat_date);
CREATE INDEX idx_dws_goods_stock_monthly_goods ON dws.dws_goods_stock_monthly_summary USING btree (site_goods_id, stat_date);
CREATE INDEX idx_dws_goods_stock_monthly_site ON dws.dws_goods_stock_monthly_summary USING btree (site_id, stat_date);
CREATE INDEX idx_dws_goods_stock_weekly_date ON dws.dws_goods_stock_weekly_summary USING btree (stat_date);
CREATE INDEX idx_dws_goods_stock_weekly_goods ON dws.dws_goods_stock_weekly_summary USING btree (site_goods_id, stat_date);
CREATE INDEX idx_dws_goods_stock_weekly_site ON dws.dws_goods_stock_weekly_summary USING btree (site_id, stat_date);
CREATE INDEX idx_dws_percentile_history ON dws.dws_index_percentile_history USING btree (site_id, index_type, calc_time DESC);
CREATE INDEX idx_dws_intimacy_assistant ON dws.dws_member_assistant_intimacy USING btree (site_id, assistant_id, display_score DESC);
CREATE INDEX idx_dws_intimacy_member ON dws.dws_member_assistant_intimacy USING btree (site_id, member_id, display_score DESC);
CREATE INDEX idx_dws_relation_assistant ON dws.dws_member_assistant_relation_index USING btree (site_id, assistant_id, rs_display DESC);
CREATE INDEX idx_dws_relation_calc_time ON dws.dws_member_assistant_relation_index USING btree (calc_time);
CREATE INDEX idx_dws_relation_member ON dws.dws_member_assistant_relation_index USING btree (site_id, member_id, os_share DESC);
CREATE INDEX idx_dws_member_consumption_date ON dws.dws_member_consumption_summary USING btree (stat_date);
CREATE INDEX idx_dws_member_consumption_member ON dws.dws_member_consumption_summary USING btree (member_id, stat_date);
CREATE INDEX idx_dws_member_consumption_tier ON dws.dws_member_consumption_summary USING btree (customer_tier);
CREATE INDEX idx_dws_newconv_display ON dws.dws_member_newconv_index USING btree (site_id, display_score DESC);
CREATE INDEX idx_dws_recall_display ON dws.dws_member_recall_index USING btree (site_id, display_score DESC);
CREATE INDEX idx_spi_display_score ON dws.dws_member_spending_power_index USING btree (site_id, display_score DESC);
CREATE UNIQUE INDEX idx_spi_site_member ON dws.dws_member_spending_power_index USING btree (site_id, member_id);
CREATE INDEX idx_dws_member_visit_date ON dws.dws_member_visit_detail USING btree (visit_date);
CREATE INDEX idx_dws_member_visit_member ON dws.dws_member_visit_detail USING btree (member_id, visit_date);
CREATE INDEX idx_dws_member_visit_order ON dws.dws_member_visit_detail USING btree (order_settle_id);
CREATE INDEX idx_dws_winback_display ON dws.dws_member_winback_index USING btree (site_id, display_score DESC);
CREATE INDEX idx_dws_ml_alloc_member_assistant ON dws.dws_ml_manual_order_alloc USING btree (site_id, member_id, assistant_id);
CREATE INDEX idx_dws_ml_alloc_scope ON dws.dws_ml_manual_order_alloc USING btree (site_id, biz_date);
CREATE INDEX idx_dws_ml_source_external ON dws.dws_ml_manual_order_source USING btree (site_id, external_id);
CREATE INDEX idx_dws_ml_source_scope ON dws.dws_ml_manual_order_source USING btree (site_id, biz_date);
CREATE INDEX idx_dws_order_summary_member ON dws.dws_order_summary USING btree (member_id, order_date);
CREATE INDEX idx_dws_order_summary_site_date ON dws.dws_order_summary USING btree (site_id, order_date);
CREATE INDEX idx_dws_order_summary_trade_no ON dws.dws_order_summary USING btree (order_trade_no);
CREATE INDEX idx_dws_platform_settlement_batch ON dws.dws_platform_settlement USING btree (import_batch_no);
CREATE INDEX idx_dws_platform_settlement_date ON dws.dws_platform_settlement USING btree (settlement_date);
CREATE INDEX idx_dws_platform_settlement_order ON dws.dws_platform_settlement USING btree (order_settle_id);
CREATE INDEX idx_dws_platform_settlement_platform ON dws.dws_platform_settlement USING btree (platform_type);
CREATE INDEX idx_mv_assistant_daily_l1 ON dws.mv_dws_assistant_daily_detail_l1 USING btree (site_id, stat_date, assistant_id);
CREATE INDEX idx_mv_assistant_daily_l2 ON dws.mv_dws_assistant_daily_detail_l2 USING btree (site_id, stat_date, assistant_id);
CREATE INDEX idx_mv_assistant_daily_l3 ON dws.mv_dws_assistant_daily_detail_l3 USING btree (site_id, stat_date, assistant_id);
CREATE INDEX idx_mv_assistant_daily_l4 ON dws.mv_dws_assistant_daily_detail_l4 USING btree (site_id, stat_date, assistant_id);
CREATE INDEX idx_mv_finance_daily_l1 ON dws.mv_dws_finance_daily_summary_l1 USING btree (site_id, stat_date);
CREATE INDEX idx_mv_finance_daily_l2 ON dws.mv_dws_finance_daily_summary_l2 USING btree (site_id, stat_date);
CREATE INDEX idx_mv_finance_daily_l3 ON dws.mv_dws_finance_daily_summary_l3 USING btree (site_id, stat_date);
CREATE INDEX idx_mv_finance_daily_l4 ON dws.mv_dws_finance_daily_summary_l4 USING btree (site_id, stat_date);
-- 视图
CREATE OR REPLACE VIEW dws.v_member_recall_priority AS
SELECT dws_member_winback_index.site_id,
dws_member_winback_index.tenant_id,
dws_member_winback_index.member_id,
'WBI'::character varying(10) AS index_type,
dws_member_winback_index.status,
dws_member_winback_index.segment,
dws_member_winback_index.member_create_time,
dws_member_winback_index.first_visit_time,
dws_member_winback_index.last_visit_time,
dws_member_winback_index.last_recharge_time,
dws_member_winback_index.t_v,
dws_member_winback_index.t_r,
dws_member_winback_index.t_a,
dws_member_winback_index.visits_14d,
dws_member_winback_index.visits_60d,
dws_member_winback_index.visits_total,
dws_member_winback_index.spend_30d,
dws_member_winback_index.spend_180d,
dws_member_winback_index.sv_balance,
dws_member_winback_index.recharge_60d_amt,
NULL::numeric(10,4) AS need_new,
NULL::numeric(10,4) AS salvage_new,
NULL::numeric(10,4) AS recharge_new,
NULL::numeric(10,4) AS value_new,
NULL::numeric(10,4) AS welcome_new,
NULL::numeric(14,6) AS raw_score_welcome,
NULL::numeric(14,6) AS raw_score_convert,
dws_member_winback_index.raw_score,
NULL::numeric(4,2) AS display_score_welcome,
NULL::numeric(4,2) AS display_score_convert,
dws_member_winback_index.display_score,
dws_member_winback_index.last_wechat_touch_time,
dws_member_winback_index.calc_time
FROM dws.dws_member_winback_index
UNION ALL
SELECT dws_member_newconv_index.site_id,
dws_member_newconv_index.tenant_id,
dws_member_newconv_index.member_id,
'NCI'::character varying(10) AS index_type,
dws_member_newconv_index.status,
dws_member_newconv_index.segment,
dws_member_newconv_index.member_create_time,
dws_member_newconv_index.first_visit_time,
dws_member_newconv_index.last_visit_time,
dws_member_newconv_index.last_recharge_time,
dws_member_newconv_index.t_v,
dws_member_newconv_index.t_r,
dws_member_newconv_index.t_a,
dws_member_newconv_index.visits_14d,
dws_member_newconv_index.visits_60d,
dws_member_newconv_index.visits_total,
dws_member_newconv_index.spend_30d,
dws_member_newconv_index.spend_180d,
dws_member_newconv_index.sv_balance,
dws_member_newconv_index.recharge_60d_amt,
dws_member_newconv_index.need_new,
dws_member_newconv_index.salvage_new,
dws_member_newconv_index.recharge_new,
dws_member_newconv_index.value_new,
dws_member_newconv_index.welcome_new,
dws_member_newconv_index.raw_score_welcome,
dws_member_newconv_index.raw_score_convert,
dws_member_newconv_index.raw_score,
dws_member_newconv_index.display_score_welcome,
dws_member_newconv_index.display_score_convert,
dws_member_newconv_index.display_score,
dws_member_newconv_index.last_wechat_touch_time,
dws_member_newconv_index.calc_time
FROM dws.dws_member_newconv_index;
;
-- 物化视图
CREATE MATERIALIZED VIEW dws.mv_dws_assistant_daily_detail_l1 AS
SELECT id,
site_id,
tenant_id,
assistant_id,
assistant_nickname,
stat_date,
assistant_level_code,
assistant_level_name,
total_service_count,
base_service_count,
bonus_service_count,
room_service_count,
total_seconds,
base_seconds,
bonus_seconds,
room_seconds,
total_hours,
base_hours,
bonus_hours,
room_hours,
total_ledger_amount,
base_ledger_amount,
bonus_ledger_amount,
room_ledger_amount,
unique_customers,
unique_tables,
trashed_seconds,
trashed_count,
created_at,
updated_at
FROM dws.dws_assistant_daily_detail
WHERE (stat_date >= (CURRENT_DATE - '1 day'::interval));
;
CREATE MATERIALIZED VIEW dws.mv_dws_assistant_daily_detail_l2 AS
SELECT id,
site_id,
tenant_id,
assistant_id,
assistant_nickname,
stat_date,
assistant_level_code,
assistant_level_name,
total_service_count,
base_service_count,
bonus_service_count,
room_service_count,
total_seconds,
base_seconds,
bonus_seconds,
room_seconds,
total_hours,
base_hours,
bonus_hours,
room_hours,
total_ledger_amount,
base_ledger_amount,
bonus_ledger_amount,
room_ledger_amount,
unique_customers,
unique_tables,
trashed_seconds,
trashed_count,
created_at,
updated_at
FROM dws.dws_assistant_daily_detail
WHERE (stat_date >= (CURRENT_DATE - '30 days'::interval));
;
CREATE MATERIALIZED VIEW dws.mv_dws_assistant_daily_detail_l3 AS
SELECT id,
site_id,
tenant_id,
assistant_id,
assistant_nickname,
stat_date,
assistant_level_code,
assistant_level_name,
total_service_count,
base_service_count,
bonus_service_count,
room_service_count,
total_seconds,
base_seconds,
bonus_seconds,
room_seconds,
total_hours,
base_hours,
bonus_hours,
room_hours,
total_ledger_amount,
base_ledger_amount,
bonus_ledger_amount,
room_ledger_amount,
unique_customers,
unique_tables,
trashed_seconds,
trashed_count,
created_at,
updated_at
FROM dws.dws_assistant_daily_detail
WHERE (stat_date >= (CURRENT_DATE - '90 days'::interval));
;
CREATE MATERIALIZED VIEW dws.mv_dws_assistant_daily_detail_l4 AS
SELECT id,
site_id,
tenant_id,
assistant_id,
assistant_nickname,
stat_date,
assistant_level_code,
assistant_level_name,
total_service_count,
base_service_count,
bonus_service_count,
room_service_count,
total_seconds,
base_seconds,
bonus_seconds,
room_seconds,
total_hours,
base_hours,
bonus_hours,
room_hours,
total_ledger_amount,
base_ledger_amount,
bonus_ledger_amount,
room_ledger_amount,
unique_customers,
unique_tables,
trashed_seconds,
trashed_count,
created_at,
updated_at
FROM dws.dws_assistant_daily_detail
WHERE ((stat_date >= (date_trunc('month'::text, (CURRENT_DATE)::timestamp with time zone) - '6 mons'::interval)) AND (stat_date < date_trunc('month'::text, (CURRENT_DATE)::timestamp with time zone)));
;
CREATE MATERIALIZED VIEW dws.mv_dws_finance_daily_summary_l1 AS
SELECT id,
site_id,
tenant_id,
stat_date,
gross_amount,
table_fee_amount,
goods_amount,
assistant_pd_amount,
assistant_cx_amount,
discount_total,
discount_groupbuy,
discount_vip,
discount_gift_card,
discount_manual,
discount_rounding,
discount_other,
confirmed_income,
cash_inflow_total,
cash_pay_amount,
groupbuy_pay_amount,
platform_settlement_amount,
platform_fee_amount,
recharge_cash_inflow,
card_consume_total,
recharge_card_consume,
gift_card_consume,
cash_outflow_total,
cash_balance_change,
recharge_count,
recharge_total,
recharge_cash,
recharge_gift,
first_recharge_count,
first_recharge_amount,
renewal_count,
renewal_amount,
order_count,
member_order_count,
guest_order_count,
avg_order_amount,
created_at,
updated_at
FROM dws.dws_finance_daily_summary
WHERE (stat_date >= (CURRENT_DATE - '1 day'::interval));
;
CREATE MATERIALIZED VIEW dws.mv_dws_finance_daily_summary_l2 AS
SELECT id,
site_id,
tenant_id,
stat_date,
gross_amount,
table_fee_amount,
goods_amount,
assistant_pd_amount,
assistant_cx_amount,
discount_total,
discount_groupbuy,
discount_vip,
discount_gift_card,
discount_manual,
discount_rounding,
discount_other,
confirmed_income,
cash_inflow_total,
cash_pay_amount,
groupbuy_pay_amount,
platform_settlement_amount,
platform_fee_amount,
recharge_cash_inflow,
card_consume_total,
recharge_card_consume,
gift_card_consume,
cash_outflow_total,
cash_balance_change,
recharge_count,
recharge_total,
recharge_cash,
recharge_gift,
first_recharge_count,
first_recharge_amount,
renewal_count,
renewal_amount,
order_count,
member_order_count,
guest_order_count,
avg_order_amount,
created_at,
updated_at
FROM dws.dws_finance_daily_summary
WHERE (stat_date >= (CURRENT_DATE - '30 days'::interval));
;
CREATE MATERIALIZED VIEW dws.mv_dws_finance_daily_summary_l3 AS
SELECT id,
site_id,
tenant_id,
stat_date,
gross_amount,
table_fee_amount,
goods_amount,
assistant_pd_amount,
assistant_cx_amount,
discount_total,
discount_groupbuy,
discount_vip,
discount_gift_card,
discount_manual,
discount_rounding,
discount_other,
confirmed_income,
cash_inflow_total,
cash_pay_amount,
groupbuy_pay_amount,
platform_settlement_amount,
platform_fee_amount,
recharge_cash_inflow,
card_consume_total,
recharge_card_consume,
gift_card_consume,
cash_outflow_total,
cash_balance_change,
recharge_count,
recharge_total,
recharge_cash,
recharge_gift,
first_recharge_count,
first_recharge_amount,
renewal_count,
renewal_amount,
order_count,
member_order_count,
guest_order_count,
avg_order_amount,
created_at,
updated_at
FROM dws.dws_finance_daily_summary
WHERE (stat_date >= (CURRENT_DATE - '90 days'::interval));
;
CREATE MATERIALIZED VIEW dws.mv_dws_finance_daily_summary_l4 AS
SELECT id,
site_id,
tenant_id,
stat_date,
gross_amount,
table_fee_amount,
goods_amount,
assistant_pd_amount,
assistant_cx_amount,
discount_total,
discount_groupbuy,
discount_vip,
discount_gift_card,
discount_manual,
discount_rounding,
discount_other,
confirmed_income,
cash_inflow_total,
cash_pay_amount,
groupbuy_pay_amount,
platform_settlement_amount,
platform_fee_amount,
recharge_cash_inflow,
card_consume_total,
recharge_card_consume,
gift_card_consume,
cash_outflow_total,
cash_balance_change,
recharge_count,
recharge_total,
recharge_cash,
recharge_gift,
first_recharge_count,
first_recharge_amount,
renewal_count,
renewal_amount,
order_count,
member_order_count,
guest_order_count,
avg_order_amount,
created_at,
updated_at
FROM dws.dws_finance_daily_summary
WHERE ((stat_date >= (date_trunc('month'::text, (CURRENT_DATE)::timestamp with time zone) - '6 mons'::interval)) AND (stat_date < date_trunc('month'::text, (CURRENT_DATE)::timestamp with time zone)));
;
-- 物化视图索引
CREATE INDEX idx_mv_assistant_daily_l1 ON dws.mv_dws_assistant_daily_detail_l1 USING btree (site_id, stat_date, assistant_id);
CREATE INDEX idx_mv_assistant_daily_l2 ON dws.mv_dws_assistant_daily_detail_l2 USING btree (site_id, stat_date, assistant_id);
CREATE INDEX idx_mv_assistant_daily_l3 ON dws.mv_dws_assistant_daily_detail_l3 USING btree (site_id, stat_date, assistant_id);
CREATE INDEX idx_mv_assistant_daily_l4 ON dws.mv_dws_assistant_daily_detail_l4 USING btree (site_id, stat_date, assistant_id);
CREATE INDEX idx_mv_finance_daily_l1 ON dws.mv_dws_finance_daily_summary_l1 USING btree (site_id, stat_date);
CREATE INDEX idx_mv_finance_daily_l2 ON dws.mv_dws_finance_daily_summary_l2 USING btree (site_id, stat_date);
CREATE INDEX idx_mv_finance_daily_l3 ON dws.mv_dws_finance_daily_summary_l3 USING btree (site_id, stat_date);
CREATE INDEX idx_mv_finance_daily_l4 ON dws.mv_dws_finance_daily_summary_l4 USING btree (site_id, stat_date);
-- =============================================================================
-- 项目标签表2026-03-07 新增)
-- =============================================================================
CREATE SEQUENCE IF NOT EXISTS dws.dws_assistant_project_tag_id_seq AS bigint;
CREATE SEQUENCE IF NOT EXISTS dws.dws_member_project_tag_id_seq AS bigint;
CREATE TABLE dws.dws_assistant_project_tag (
id BIGSERIAL NOT NULL,
site_id BIGINT NOT NULL,
tenant_id BIGINT NOT NULL,
assistant_id BIGINT NOT NULL,
time_window VARCHAR(40) NOT NULL,
category_code VARCHAR(30) NOT NULL,
category_name VARCHAR(50) NOT NULL,
short_name VARCHAR(10) NOT NULL,
duration_seconds BIGINT NOT NULL DEFAULT 0,
total_seconds BIGINT NOT NULL DEFAULT 0,
percentage NUMERIC(5,4) NOT NULL DEFAULT 0,
is_tagged BOOLEAN NOT NULL DEFAULT FALSE,
computed_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
CONSTRAINT pk_dws_assistant_project_tag PRIMARY KEY (id),
CONSTRAINT uk_dws_assistant_project_tag
UNIQUE (site_id, assistant_id, time_window, category_code)
);
COMMENT ON TABLE dws.dws_assistant_project_tag IS '助教项目标签按时间窗口计算各项目时长占比≥25%分配标签';
COMMENT ON COLUMN dws.dws_assistant_project_tag.time_window IS '时间窗口THIS_MONTH/THIS_QUARTER/LAST_MONTH/LAST_3_MONTHS_EXCL_CURRENT/LAST_QUARTER/LAST_6_MONTHS';
COMMENT ON COLUMN dws.dws_assistant_project_tag.is_tagged IS '占比≥0.25时为TRUE表示该助教拥有此项目标签';
CREATE TABLE dws.dws_member_project_tag (
id BIGSERIAL NOT NULL,
site_id BIGINT NOT NULL,
tenant_id BIGINT NOT NULL,
member_id BIGINT NOT NULL,
time_window VARCHAR(40) NOT NULL,
category_code VARCHAR(30) NOT NULL,
category_name VARCHAR(50) NOT NULL,
short_name VARCHAR(10) NOT NULL,
duration_seconds BIGINT NOT NULL DEFAULT 0,
total_seconds BIGINT NOT NULL DEFAULT 0,
percentage NUMERIC(5,4) NOT NULL DEFAULT 0,
is_tagged BOOLEAN NOT NULL DEFAULT FALSE,
computed_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
CONSTRAINT pk_dws_member_project_tag PRIMARY KEY (id),
CONSTRAINT uk_dws_member_project_tag
UNIQUE (site_id, member_id, time_window, category_code)
);
COMMENT ON TABLE dws.dws_member_project_tag IS '客户项目标签按时间窗口计算各项目消费时长占比≥25%分配标签';
COMMENT ON COLUMN dws.dws_member_project_tag.time_window IS '时间窗口LAST_30_DAYS/LAST_60_DAYS';
COMMENT ON COLUMN dws.dws_member_project_tag.is_tagged IS '占比≥0.25时为TRUE表示该客户拥有此项目标签';
-- 部分索引(加速看板查询)
CREATE INDEX idx_apt_site_window_tagged
ON dws.dws_assistant_project_tag (site_id, time_window)
WHERE is_tagged = TRUE;
CREATE INDEX idx_mpt_site_window_tagged
ON dws.dws_member_project_tag (site_id, time_window)
WHERE is_tagged = TRUE;