Files
Neo-ZQYY/db/etl_feiqiu/schemas/app.sql
Neo caf179a5da feat: 2026-04-15~05-02 累积变更基线 — AI 重构 + Runtime Context + DWS 修复
涵盖(每条对应已存的审计记录):
- AI 模块拆分:apps/backend/app/ai/apps -> prompts/(8 个 APP + app2a 派生)
  audit: 2026-04-20__ai-module-complete.md
- admin-web AI 管理套件:AIDashboard / AIOperations / AIRunLogs / AITriggers / TriggerManager
  audit: 2026-04-21__admin-web-ai-management-suite.md
- App2 财务洞察 prompt v3 -> v5.1 + 小程序 AI 接入(chat / board-finance)
  audit: 2026-04-22__app2_prompt_v5_1_and_miniprogram_ai_insight.md
- App2 prewarm 全过滤器 + AI 触发器 cron reschedule
  audit: 2026-04-21__app2-finance-prewarm-all-filters.md
  migration: 20260420_ai_trigger_jobs_and_app2_prewarm.sql / 20260421_app2_prewarm_cron_reschedule.sql
- AppType 联合类型对齐 + adminAiAppTypes.test.ts
  audit: 2026-04-30__admin_web_ai_app_type_alignment.md
- DashScope tokens_used 提取修复
  audit: 2026-04-30__backend_dashscope_tokens_used_extraction.md
- App3 线索完整详情 prompt
  audit: 2026-05-01__backend_app3_full_detail_prompt.md
- Runtime Context 沙箱(5-1~5-2 主线):
  - 后端 schema/service + admin_runtime_context / xcx_runtime_clock 两个 router
  - admin-web RuntimeContext.tsx + miniprogram runtime-clock.ts
  - migration: 20260501__runtime_context_sandbox.sql
  - tools/db/verify_admin_web_sandbox.py + verify_sandbox_end_to_end.py
  - database/changes: 7 份 sandbox_* 验证报告
- 飞球 DWS 修复:finance_area_daily 区域汇总 + task_engine 调整
  + RLS 视图业务日上界(migration 20260502 + scripts/ops/gen_rls_business_date_migration.py)

合规:
- .gitignore 启用 tmp/ 排除
- 不入仓:apps/etl/connectors/feiqiu/.env(API_TOKEN secret,本地修改保留)

待验证清单:
- docs/audit/changes/2026-05-04__cumulative_baseline_pending_verification.md
  每个主题的功能完整性 / 上线验证几乎都未收口,按优先级 P0~P3 逐一处理
2026-05-04 02:30:19 +08:00

1358 lines
30 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 / appRLS 视图层)
-- 生成日期2026-05-02
-- 来源:测试库(通过脚本自动导出)
-- =============================================================================
CREATE SCHEMA IF NOT EXISTS app;
-- 视图
CREATE OR REPLACE VIEW app.v_assistant AS
SELECT assistant_id,
tenant_id,
site_id,
real_name,
nickname,
mobile,
level,
assistant_status,
leave_status
FROM core.dim_assistant a;
;
CREATE OR REPLACE VIEW app.v_assistant_daily AS
SELECT id,
site_id,
tenant_id,
assistant_id,
assistant_nickname,
stat_date,
total_service_count,
total_hours,
base_hours,
bonus_hours,
room_hours,
total_ledger_amount,
unique_customers,
unique_tables,
created_at
FROM dws.dws_assistant_daily_detail d
WHERE (stat_date <= app.business_date_now());
;
CREATE OR REPLACE VIEW app.v_cfg_area_category AS
SELECT DISTINCT category_code,
category_name,
display_name,
short_name,
sort_order
FROM dws.cfg_area_category
WHERE ((is_active = true) AND ((category_code)::text <> ALL ((ARRAY['SPECIAL'::character varying, 'OTHER'::character varying])::text[])))
ORDER BY sort_order;
;
CREATE OR REPLACE VIEW app.v_cfg_assistant_level_price AS
SELECT price_id,
level_code,
level_name,
base_course_price,
bonus_course_price,
effective_from,
effective_to,
description,
created_at,
updated_at
FROM dws.cfg_assistant_level_price
WHERE ((effective_from <= app.business_date_now()) AND (effective_to >= app.business_date_now()));
;
CREATE OR REPLACE VIEW app.v_cfg_bonus_rules AS
SELECT rule_id,
rule_type,
rule_code,
rule_name,
threshold_hours,
rank_position,
bonus_amount,
is_cumulative,
priority,
effective_from,
effective_to,
description,
created_at,
updated_at
FROM dws.cfg_bonus_rules;
;
CREATE OR REPLACE VIEW app.v_cfg_index_parameters AS
SELECT param_id,
index_type,
param_name,
param_value,
description,
effective_from,
effective_to,
created_at,
updated_at
FROM dws.cfg_index_parameters;
;
CREATE OR REPLACE VIEW app.v_cfg_performance_tier AS
SELECT tier_id,
tier_code,
tier_name,
tier_level,
min_hours,
max_hours,
base_deduction,
bonus_deduction_ratio,
vacation_days,
vacation_unlimited,
is_new_hire_tier,
effective_from,
effective_to,
description,
created_at,
updated_at
FROM dws.cfg_performance_tier
WHERE ((effective_from <= app.business_date_now()) AND (effective_to >= app.business_date_now()));
;
CREATE OR REPLACE VIEW app.v_dim_assistant AS
SELECT assistant_id,
user_id,
assistant_no,
real_name,
nickname,
mobile,
tenant_id,
site_id,
team_id,
team_name,
level,
entry_time,
resign_time,
leave_status,
assistant_status,
scd2_start_time,
scd2_end_time,
scd2_is_current,
scd2_version
FROM dwd.dim_assistant
WHERE (site_id = (current_setting('app.current_site_id'::text))::bigint);
;
CREATE OR REPLACE VIEW app.v_dim_member AS
SELECT member_id,
system_member_id,
tenant_id,
register_site_id,
mobile,
nickname,
member_card_grade_code,
member_card_grade_name,
create_time,
update_time,
pay_money_sum,
recharge_money_sum,
scd2_start_time,
scd2_end_time,
scd2_is_current,
scd2_version,
birthday
FROM dwd.dim_member
WHERE (register_site_id = (current_setting('app.current_site_id'::text))::bigint);
;
CREATE OR REPLACE VIEW app.v_dim_member_card_account AS
SELECT member_card_id,
tenant_id,
register_site_id,
tenant_member_id,
system_member_id,
card_type_id,
member_card_grade_code,
member_card_grade_code_name,
member_card_type_name,
member_name,
member_mobile,
balance,
start_time,
end_time,
last_consume_time,
status,
is_delete,
principal_balance,
member_grade,
scd2_start_time,
scd2_end_time,
scd2_is_current,
scd2_version
FROM dwd.dim_member_card_account
WHERE (register_site_id = (current_setting('app.current_site_id'::text))::bigint);
;
CREATE OR REPLACE VIEW app.v_dim_staff AS
SELECT staff_id,
staff_name,
alias_name,
mobile,
gender,
job,
tenant_id,
site_id,
system_role_id,
staff_identity,
status,
leave_status,
entry_time,
resign_time,
is_delete,
scd2_start_time,
scd2_end_time,
scd2_is_current,
scd2_version
FROM dwd.dim_staff
WHERE (site_id = (current_setting('app.current_site_id'::text))::bigint);
;
CREATE OR REPLACE VIEW app.v_dim_staff_ex AS
SELECT staff_id,
avatar,
job_num,
account_status,
rank_id,
rank_name,
new_rank_id,
new_staff_identity,
is_reserve,
shop_name,
site_label,
tenant_org_id,
system_user_id,
cashier_point_id,
cashier_point_name,
group_id,
group_name,
staff_profile_id,
auth_code,
auth_code_create,
ding_talk_synced,
salary_grant_enabled,
entry_type,
entry_sign_status,
resign_sign_status,
criticism_status,
create_time,
user_roles,
scd2_start_time,
scd2_end_time,
scd2_is_current,
scd2_version
FROM dwd.dim_staff_ex;
;
CREATE OR REPLACE VIEW app.v_dim_table AS
SELECT table_id,
site_id,
table_name,
site_table_area_id,
site_table_area_name,
tenant_table_area_id,
table_price,
order_id,
scd2_start_time,
scd2_end_time,
scd2_is_current,
scd2_version
FROM dwd.dim_table
WHERE (site_id = (current_setting('app.current_site_id'::text))::bigint);
;
CREATE OR REPLACE VIEW app.v_dwd_assistant_service_log AS
SELECT assistant_service_id,
order_trade_no,
order_settle_id,
order_pay_id,
order_assistant_id,
order_assistant_type,
tenant_id,
site_id,
site_table_id,
tenant_member_id,
system_member_id,
assistant_no,
nickname,
site_assistant_id,
user_id,
assistant_team_id,
person_org_id,
assistant_level,
level_name,
skill_id,
skill_name,
ledger_unit_price,
ledger_amount,
projected_income,
coupon_deduct_money,
income_seconds,
real_use_seconds,
add_clock,
create_time,
start_use_time,
last_use_time,
is_delete,
real_service_money
FROM dwd.dwd_assistant_service_log
WHERE ((site_id = (current_setting('app.current_site_id'::text))::bigint) AND (COALESCE((create_time)::date, '0001-01-01'::date) <= app.business_date_now()));
;
CREATE OR REPLACE VIEW app.v_dwd_recharge_order AS
SELECT recharge_order_id,
tenant_id,
site_id,
member_id,
member_name_snapshot,
member_phone_snapshot,
tenant_member_card_id,
member_card_type_name,
settle_relate_id,
settle_type,
settle_name,
is_first,
pay_amount,
refund_amount,
point_amount,
cash_amount,
payment_method,
create_time,
pay_time,
pl_coupon_sale_amount,
mervou_sales_amount,
electricity_money,
real_electricity_money,
electricity_adjust_money
FROM dwd.dwd_recharge_order
WHERE ((site_id = (current_setting('app.current_site_id'::text))::bigint) AND (COALESCE((pay_time)::date, '0001-01-01'::date) <= app.business_date_now()));
;
CREATE OR REPLACE VIEW app.v_dwd_settlement_head AS
SELECT order_settle_id,
tenant_id,
site_id,
site_name,
table_id,
settle_name,
order_trade_no,
create_time,
pay_time,
settle_type,
revoke_order_id,
member_id,
member_name,
member_phone,
member_card_account_id,
member_card_type_name,
is_bind_member,
member_discount_amount,
consume_money,
table_charge_money,
goods_money,
real_goods_money,
assistant_pd_money,
assistant_cx_money,
adjust_amount,
pay_amount,
balance_amount,
recharge_card_amount,
gift_card_amount,
coupon_amount,
rounding_amount,
point_amount,
electricity_money,
real_electricity_money,
electricity_adjust_money,
pl_coupon_sale_amount,
mervou_sales_amount
FROM dwd.dwd_settlement_head
WHERE ((site_id = (current_setting('app.current_site_id'::text))::bigint) AND (COALESCE((create_time)::date, '0001-01-01'::date) <= app.business_date_now()));
;
CREATE OR REPLACE VIEW app.v_dwd_store_goods_sale AS
SELECT store_goods_sale_id,
order_trade_no,
order_settle_id,
order_pay_id,
order_goods_id,
site_id,
tenant_id,
site_goods_id,
tenant_goods_id,
tenant_goods_category_id,
tenant_goods_business_id,
site_table_id,
ledger_name,
ledger_group_name,
ledger_unit_price,
ledger_count,
ledger_amount,
discount_money,
real_goods_money,
cost_money,
ledger_status,
is_delete,
create_time,
coupon_share_money,
discount_price
FROM dwd.dwd_store_goods_sale
WHERE ((site_id = (current_setting('app.current_site_id'::text))::bigint) AND (COALESCE((create_time)::date, '0001-01-01'::date) <= app.business_date_now()));
;
CREATE OR REPLACE VIEW app.v_dwd_table_fee_log AS
SELECT table_fee_log_id,
order_trade_no,
order_settle_id,
order_pay_id,
tenant_id,
site_id,
site_table_id,
site_table_area_id,
site_table_area_name,
tenant_table_area_id,
member_id,
ledger_name,
ledger_unit_price,
ledger_count,
ledger_amount,
real_table_charge_money,
coupon_promotion_amount,
member_discount_amount,
adjust_amount,
real_table_use_seconds,
add_clock_seconds,
start_use_time,
ledger_end_time,
create_time,
ledger_status,
is_single_order,
is_delete,
activity_discount_amount,
real_service_money
FROM dwd.dwd_table_fee_log
WHERE ((site_id = (current_setting('app.current_site_id'::text))::bigint) AND (COALESCE((create_time)::date, '0001-01-01'::date) <= app.business_date_now()));
;
CREATE OR REPLACE VIEW app.v_dws_assistant_customer_stats AS
SELECT DISTINCT ON (assistant_id, member_id) id,
site_id,
tenant_id,
assistant_id,
assistant_nickname,
member_id,
member_nickname,
member_mobile,
stat_date,
first_service_date,
last_service_date,
total_service_count,
total_service_hours,
total_service_amount,
service_count_7d,
service_count_10d,
service_count_15d,
service_count_30d,
service_count_60d,
service_count_90d,
service_hours_7d,
service_hours_10d,
service_hours_15d,
service_hours_30d,
service_hours_60d,
service_hours_90d,
service_amount_7d,
service_amount_10d,
service_amount_15d,
service_amount_30d,
service_amount_60d,
service_amount_90d,
days_since_last,
is_active_7d,
is_active_30d,
created_at,
updated_at
FROM dws.dws_assistant_customer_stats
WHERE (site_id = (current_setting('app.current_site_id'::text))::bigint)
ORDER BY assistant_id, member_id, stat_date DESC;
;
CREATE OR REPLACE VIEW app.v_dws_assistant_daily_detail 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,
penalty_minutes,
penalty_reason,
is_exempt,
per_hour_contribution
FROM dws.dws_assistant_daily_detail
WHERE ((site_id = (current_setting('app.current_site_id'::text))::bigint) AND (stat_date <= app.business_date_now()));
;
CREATE OR REPLACE VIEW app.v_dws_assistant_finance_analysis AS
SELECT id,
site_id,
tenant_id,
stat_date,
assistant_id,
assistant_nickname,
revenue_total,
revenue_base,
revenue_bonus,
revenue_room,
cost_daily,
gross_profit,
gross_margin,
service_count,
service_hours,
room_service_count,
room_service_hours,
unique_customers,
created_at,
updated_at
FROM dws.dws_assistant_finance_analysis
WHERE ((site_id = (current_setting('app.current_site_id'::text))::bigint) AND (stat_date <= app.business_date_now()));
;
CREATE OR REPLACE VIEW app.v_dws_assistant_monthly_summary AS
SELECT id,
site_id,
tenant_id,
assistant_id,
assistant_nickname,
stat_month,
assistant_level_code,
assistant_level_name,
hire_date,
is_new_hire,
work_days,
total_service_count,
base_service_count,
bonus_service_count,
room_service_count,
total_hours,
base_hours,
bonus_hours,
room_hours,
effective_hours,
trashed_hours,
total_ledger_amount,
base_ledger_amount,
bonus_ledger_amount,
room_ledger_amount,
unique_customers,
unique_tables,
avg_service_seconds,
tier_id,
tier_code,
tier_name,
rank_by_hours,
rank_with_ties,
created_at,
updated_at
FROM dws.dws_assistant_monthly_summary
WHERE ((site_id = (current_setting('app.current_site_id'::text))::bigint) AND (stat_month <= (date_trunc('month'::text, (app.business_date_now())::timestamp with time zone))::date));
;
CREATE OR REPLACE VIEW app.v_dws_assistant_order_contribution AS
SELECT contribution_id,
site_id,
tenant_id,
assistant_id,
assistant_nickname,
stat_date,
order_gross_revenue,
order_net_revenue,
time_weighted_revenue,
time_weighted_net_revenue,
order_count,
total_service_seconds,
created_at,
updated_at
FROM dws.dws_assistant_order_contribution
WHERE (site_id = (current_setting('app.current_site_id'::text))::bigint);
;
CREATE OR REPLACE VIEW app.v_dws_assistant_project_tag AS
SELECT id,
site_id,
tenant_id,
assistant_id,
time_window,
category_code,
category_name,
short_name,
duration_seconds,
total_seconds,
percentage,
is_tagged,
computed_at,
created_at,
updated_at
FROM dws.dws_assistant_project_tag
WHERE (site_id = (current_setting('app.current_site_id'::text))::bigint);
;
CREATE OR REPLACE VIEW app.v_dws_assistant_recharge_commission AS
SELECT id,
site_id,
tenant_id,
assistant_id,
assistant_nickname,
commission_month,
recharge_order_id,
recharge_order_no,
recharge_amount,
commission_amount,
commission_ratio,
import_batch_no,
import_file_name,
import_time,
import_user,
remark,
created_at,
updated_at
FROM dws.dws_assistant_recharge_commission
WHERE (site_id = (current_setting('app.current_site_id'::text))::bigint);
;
CREATE OR REPLACE VIEW app.v_dws_assistant_salary_calc AS
SELECT id,
site_id,
tenant_id,
assistant_id,
assistant_nickname,
salary_month,
assistant_level_code,
assistant_level_name,
hire_date,
is_new_hire,
effective_hours,
base_hours,
bonus_hours,
room_hours,
tier_id,
tier_code,
tier_name,
rank_with_ties,
base_course_price,
bonus_course_price,
base_deduction,
bonus_deduction_ratio,
base_income,
bonus_income,
room_income,
total_course_income,
sprint_bonus,
top_rank_bonus,
recharge_commission,
other_bonus,
total_bonus,
gross_salary,
vacation_days,
vacation_unlimited,
calc_notes,
created_at,
updated_at
FROM dws.dws_assistant_salary_calc
WHERE ((site_id = (current_setting('app.current_site_id'::text))::bigint) AND (salary_month <= (date_trunc('month'::text, (app.business_date_now())::timestamp with time zone))::date));
;
CREATE OR REPLACE VIEW app.v_dws_coach_area_hours AS
SELECT id,
site_id,
tenant_id,
stat_month,
assistant_id,
area_code,
base_hours,
bonus_hours,
room_hours,
effective_hours,
trashed_hours,
base_service_count,
bonus_service_count,
room_service_count,
created_at,
updated_at
FROM dws.dws_coach_area_hours
WHERE (site_id = (current_setting('app.current_site_id'::text))::bigint);
;
CREATE OR REPLACE VIEW app.v_dws_finance_area_daily AS
SELECT id,
site_id,
tenant_id,
stat_date,
area_code,
table_fee_amount,
goods_amount,
assistant_pd_amount,
assistant_cx_amount,
gross_amount,
discount_groupbuy,
discount_vip,
discount_manual,
discount_gift_card,
discount_rounding,
discount_other,
discount_total,
confirmed_income,
cash_pay_amount,
cash_paper_amount,
scan_pay_amount,
groupbuy_pay_amount,
recharge_cash_inflow,
cash_inflow_total,
cash_outflow_total,
cash_balance_change,
card_consume_total,
recharge_card_consume,
gift_card_consume,
recharge_cash,
first_recharge_cash,
renewal_cash,
order_count,
created_at,
updated_at,
member_order_count
FROM dws.dws_finance_area_daily
WHERE ((site_id = (current_setting('app.current_site_id'::text))::bigint) AND (stat_date <= app.business_date_now()));
;
CREATE OR REPLACE VIEW app.v_dws_finance_board_cache AS
SELECT id,
site_id,
time_range,
area_code,
start_date,
end_date,
prev_start_date,
prev_end_date,
occurrence,
discount,
discount_rate,
confirmed_revenue,
cash_in,
cash_out,
cash_balance,
balance_rate,
data_fingerprint,
computed_at,
created_at,
updated_at
FROM dws.dws_finance_board_cache
WHERE (site_id = (current_setting('app.current_site_id'::text))::bigint);
;
CREATE OR REPLACE VIEW app.v_dws_finance_daily_summary 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,
cash_paper_amount,
scan_pay_amount,
groupbuy_pay_amount,
platform_settlement_amount,
platform_fee_amount,
recharge_cash_inflow,
card_consume_total,
recharge_card_consume AS cash_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 ((site_id = (current_setting('app.current_site_id'::text))::bigint) AND (stat_date <= app.business_date_now()));
;
CREATE OR REPLACE VIEW app.v_dws_finance_discount_detail AS
SELECT id,
site_id,
tenant_id,
stat_date,
discount_type_code,
discount_type_name,
discount_amount,
discount_ratio,
usage_count,
affected_orders,
created_at,
updated_at
FROM dws.dws_finance_discount_detail
WHERE ((site_id = (current_setting('app.current_site_id'::text))::bigint) AND (stat_date <= app.business_date_now()));
;
CREATE OR REPLACE VIEW app.v_dws_finance_expense_summary AS
SELECT id,
site_id,
tenant_id,
expense_month,
expense_type_code,
expense_type_name,
expense_category,
expense_amount,
expense_detail,
import_batch_no,
import_file_name,
import_time,
import_user,
remark,
created_at,
updated_at
FROM dws.dws_finance_expense_summary
WHERE ((site_id = (current_setting('app.current_site_id'::text))::bigint) AND (expense_month <= (date_trunc('month'::text, (app.business_date_now())::timestamp with time zone))::date));
;
CREATE OR REPLACE VIEW app.v_dws_finance_income_structure AS
SELECT id,
site_id,
tenant_id,
stat_date,
structure_type,
category_code,
category_name,
income_amount,
income_ratio,
order_count,
duration_minutes,
created_at,
updated_at
FROM dws.dws_finance_income_structure
WHERE ((site_id = (current_setting('app.current_site_id'::text))::bigint) AND (stat_date <= app.business_date_now()));
;
CREATE OR REPLACE VIEW app.v_dws_finance_recharge_summary AS
SELECT id,
site_id,
tenant_id,
stat_date,
recharge_count,
recharge_total,
recharge_cash,
recharge_gift,
first_recharge_count,
first_recharge_cash,
first_recharge_gift,
first_recharge_total,
renewal_count,
renewal_cash,
renewal_gift,
renewal_total,
recharge_member_count,
new_member_count,
total_card_balance,
cash_card_balance,
gift_card_balance,
gift_liquor_balance,
gift_table_fee_balance,
gift_voucher_balance,
gift_liquor_recharge,
gift_table_fee_recharge,
gift_voucher_recharge,
created_at,
updated_at
FROM dws.dws_finance_recharge_summary
WHERE ((site_id = (current_setting('app.current_site_id'::text))::bigint) AND (stat_date <= app.business_date_now()));
;
CREATE OR REPLACE VIEW app.v_dws_member_assistant_intimacy AS
SELECT intimacy_id,
site_id,
tenant_id,
member_id,
assistant_id,
session_count,
total_duration_minutes,
basic_session_count,
incentive_session_count,
days_since_last_session,
attributed_recharge_count,
attributed_recharge_amount,
score_frequency,
score_recency,
score_recharge,
score_duration,
burst_multiplier,
raw_score,
display_score,
calc_time,
calc_version,
created_at,
updated_at
FROM dws.dws_member_assistant_intimacy
WHERE (site_id = (current_setting('app.current_site_id'::text))::bigint);
;
CREATE OR REPLACE VIEW app.v_dws_member_assistant_relation_index AS
SELECT DISTINCT ON (member_id, assistant_id) relation_id,
site_id,
tenant_id,
member_id,
assistant_id,
session_count,
total_duration_minutes,
basic_session_count,
incentive_session_count,
days_since_last_session,
rs_f,
rs_d,
rs_r,
rs_raw,
rs_display,
os_share,
os_label,
os_rank,
ms_f_short,
ms_f_long,
ms_raw,
ms_display,
ml_order_count,
ml_allocated_amount,
ml_raw,
ml_display,
calc_time,
created_at,
updated_at,
recall_created_total,
recall_completed_total,
follow_up_created_total,
follow_up_completed_total,
total_created,
total_completed,
stat_date
FROM dws.dws_member_assistant_relation_index
WHERE (site_id = (current_setting('app.current_site_id'::text))::bigint)
ORDER BY member_id, assistant_id, stat_date DESC;
;
CREATE OR REPLACE VIEW app.v_dws_member_consumption_summary AS
SELECT DISTINCT ON (member_id) id,
site_id,
tenant_id,
member_id,
stat_date,
member_nickname,
member_mobile,
card_grade_name,
register_date,
first_consume_date,
last_consume_date,
total_visit_count,
total_consume_amount,
total_recharge_amount,
total_table_fee,
total_goods_amount,
total_assistant_amount,
visit_count_7d,
visit_count_10d,
visit_count_15d,
visit_count_30d,
visit_count_60d,
visit_count_90d,
consume_amount_7d,
consume_amount_10d,
consume_amount_15d,
consume_amount_30d,
consume_amount_60d,
consume_amount_90d,
cash_card_balance,
gift_card_balance,
total_card_balance,
days_since_last,
is_active_7d,
is_active_30d,
is_active_90d,
customer_tier,
created_at,
updated_at,
recharge_count_30d,
recharge_count_60d,
recharge_count_90d,
recharge_amount_30d,
recharge_amount_60d,
recharge_amount_90d,
avg_ticket_amount
FROM dws.dws_member_consumption_summary
WHERE ((site_id = (current_setting('app.current_site_id'::text))::bigint) AND (stat_date <= app.business_date_now()))
ORDER BY member_id, stat_date DESC;
;
CREATE OR REPLACE VIEW app.v_dws_member_newconv_index AS
SELECT DISTINCT ON (member_id) newconv_id,
site_id,
tenant_id,
member_id,
status,
segment,
member_create_time,
first_visit_time,
last_visit_time,
last_recharge_time,
t_v,
t_r,
t_a,
visits_14d,
visits_30d,
visits_60d,
visits_total,
spend_30d,
spend_180d,
sv_balance,
recharge_60d_amt,
interval_count,
need_new,
salvage_new,
recharge_new,
value_new,
welcome_new,
raw_score_welcome,
raw_score_convert,
raw_score,
display_score_welcome,
display_score_convert,
display_score,
last_wechat_touch_time,
calc_time,
calc_version,
created_at,
updated_at,
stat_date
FROM dws.dws_member_newconv_index
WHERE (site_id = (current_setting('app.current_site_id'::text))::bigint)
ORDER BY member_id, stat_date DESC;
;
CREATE OR REPLACE VIEW app.v_dws_member_project_tag AS
SELECT id,
site_id,
tenant_id,
member_id,
time_window,
category_code,
category_name,
short_name,
duration_seconds,
total_seconds,
percentage,
is_tagged,
computed_at,
created_at,
updated_at
FROM dws.dws_member_project_tag
WHERE (site_id = (current_setting('app.current_site_id'::text))::bigint);
;
CREATE OR REPLACE VIEW app.v_dws_member_spending_power_index AS
SELECT spi_id,
site_id,
member_id,
spend_30,
spend_90,
recharge_90,
orders_30,
orders_90,
visit_days_30,
visit_days_90,
avg_ticket_90,
active_weeks_90,
daily_spend_ewma_90,
score_level_raw,
score_speed_raw,
score_stability_raw,
score_level_display,
score_speed_display,
score_stability_display,
raw_score,
display_score,
calc_time,
created_at,
updated_at
FROM dws.dws_member_spending_power_index
WHERE (site_id = (current_setting('app.current_site_id'::text))::bigint);
;
CREATE OR REPLACE VIEW app.v_dws_member_visit_detail AS
SELECT id,
site_id,
tenant_id,
member_id,
order_settle_id,
visit_date,
visit_time,
member_nickname,
member_mobile,
member_birthday,
table_id,
table_name,
area_name,
area_category,
table_fee,
goods_amount,
assistant_amount,
total_consume,
total_discount,
actual_pay,
cash_pay,
balance_pay AS cash_card_pay,
gift_card_pay,
groupbuy_pay,
table_duration_min,
assistant_duration_min,
assistant_services,
created_at,
updated_at
FROM dws.dws_member_visit_detail
WHERE ((site_id = (current_setting('app.current_site_id'::text))::bigint) AND (visit_date <= app.business_date_now()));
;
CREATE OR REPLACE VIEW app.v_dws_member_winback_index AS
SELECT DISTINCT ON (member_id) winback_id,
site_id,
tenant_id,
member_id,
status,
segment,
member_create_time,
first_visit_time,
last_visit_time,
last_recharge_time,
t_v,
t_r,
t_a,
visits_14d,
visits_30d,
visits_60d,
visits_total,
spend_30d,
spend_180d,
sv_balance,
recharge_60d_amt,
interval_count,
overdue_old,
drop_old,
recharge_old,
value_old,
raw_score,
display_score,
last_wechat_touch_time,
calc_time,
calc_version,
created_at,
updated_at,
overdue_cdf_p,
ideal_interval_days,
ideal_next_visit_date,
stat_date
FROM dws.dws_member_winback_index
WHERE ((site_id = (current_setting('app.current_site_id'::text))::bigint) AND (COALESCE((last_visit_time)::date, '0001-01-01'::date) <= app.business_date_now()))
ORDER BY member_id, stat_date DESC;
;
CREATE OR REPLACE VIEW app.v_dws_order_summary AS
SELECT site_id,
order_settle_id,
order_trade_no,
order_date,
tenant_id,
member_id,
member_flag,
recharge_order_flag,
item_count,
total_item_quantity,
table_fee_amount,
assistant_service_amount,
goods_amount,
group_amount,
total_coupon_deduction,
member_discount_amount,
manual_discount_amount,
order_original_amount,
order_final_amount,
stored_card_deduct,
external_paid_amount,
total_paid_amount,
book_table_flow,
book_assistant_flow,
book_goods_flow,
book_group_flow,
book_order_flow,
order_effective_consume_cash,
order_effective_recharge_cash,
order_effective_flow,
refund_amount,
net_income,
created_at,
updated_at
FROM dws.dws_order_summary
WHERE (site_id = (current_setting('app.current_site_id'::text))::bigint);
;
CREATE OR REPLACE VIEW app.v_dws_platform_settlement AS
SELECT id,
site_id,
tenant_id,
settlement_date,
platform_type,
platform_name,
platform_order_no,
order_settle_id,
settlement_amount,
commission_amount,
service_fee,
gross_amount,
import_batch_no,
import_file_name,
import_time,
import_user,
remark,
created_at,
updated_at
FROM dws.dws_platform_settlement
WHERE (site_id = (current_setting('app.current_site_id'::text))::bigint);
;
CREATE OR REPLACE VIEW app.v_finance_daily AS
SELECT id,
site_id,
tenant_id,
stat_date,
gross_amount,
table_fee_amount,
goods_amount,
assistant_pd_amount,
assistant_cx_amount,
discount_total,
confirmed_income,
cash_inflow_total,
recharge_count,
recharge_total,
order_count,
member_order_count,
guest_order_count,
avg_order_amount,
created_at
FROM dws.dws_finance_daily_summary f;
;
CREATE OR REPLACE VIEW app.v_member AS
SELECT member_id,
system_member_id,
tenant_id,
register_site_id AS site_id,
mobile,
nickname,
member_card_grade_name,
status
FROM core.dim_member m;
;
CREATE OR REPLACE VIEW app.v_member_consumption AS
SELECT id,
site_id,
tenant_id,
member_id,
stat_date,
member_nickname,
card_grade_name,
total_visit_count,
total_consume_amount,
total_recharge_amount,
last_consume_date,
first_consume_date,
days_since_last,
customer_tier,
created_at
FROM dws.dws_member_consumption_summary mc;
;
CREATE OR REPLACE VIEW app.v_order_summary AS
SELECT site_id,
order_settle_id,
order_trade_no,
order_date,
tenant_id,
member_id,
member_flag,
order_original_amount,
order_final_amount,
total_paid_amount,
refund_amount,
net_income,
created_at
FROM dws.dws_order_summary os;
;
CREATE OR REPLACE VIEW app.v_site AS
SELECT site_id,
tenant_id,
shop_name,
site_label,
shop_status
FROM core.dim_site s;
;