feat: gift card breakdown - migrations, fdw queries, finance recharge task, board-finance page updates

This commit is contained in:
Neo
2026-03-20 03:24:17 +08:00
parent 8f8abad4c9
commit 675301f38b
15 changed files with 473 additions and 185 deletions

View File

@@ -0,0 +1,74 @@
-- =============================================================================
-- 迁移:重建 RLS 视图 app.v_dws_finance_recharge_summary新增赠送卡细分字段
-- 日期2026-03-20
-- 关联 SPECgift-card-breakdown赠送卡矩阵细分数据
-- 前置ETL 库已执行 2026-03-20_add_gift_breakdown_fields.sqlDWS 表新增 6 列)
-- =============================================================================
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,
-- 赠送卡细分字段6 个新增)
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;
-- =============================================================================
-- 回滚(恢复为不含细分字段的原始视图)
-- =============================================================================
-- 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,
-- created_at, updated_at
-- FROM dws.dws_finance_recharge_summary
-- WHERE site_id = (current_setting('app.current_site_id'::text))::bigint;
-- =============================================================================
-- 验证
-- =============================================================================
-- 1. 确认视图包含新字段
-- SELECT column_name FROM information_schema.columns
-- WHERE table_schema = 'app' AND table_name = 'v_dws_finance_recharge_summary'
-- AND column_name LIKE 'gift_%'
-- ORDER BY ordinal_position;
-- 预期gift_card_balance + 6 个新字段 = 7 行
-- 2. 确认 RLS 过滤生效(需先 SET app.current_site_id
-- SET app.current_site_id = '12345';
-- SELECT COUNT(*) FROM app.v_dws_finance_recharge_summary;
-- 3. 确认新字段可查询且有默认值
-- SET app.current_site_id = '12345';
-- SELECT gift_liquor_balance, gift_table_fee_balance, gift_voucher_balance,
-- gift_liquor_recharge, gift_table_fee_recharge, gift_voucher_recharge
-- FROM app.v_dws_finance_recharge_summary LIMIT 1;

View File

@@ -0,0 +1,58 @@
-- =============================================================================
-- 迁移:刷新 FDW 外部表 v_dws_finance_recharge_summary同步赠送卡细分字段
-- 日期2026-03-20
-- 关联 SPECgift-card-breakdown赠送卡矩阵细分数据
-- 前置:
-- 1. ETL 库已执行 DDL 迁移DWS 表新增 6 列)
-- 2. ETL 库已执行 RLS 视图重建app.v_dws_finance_recharge_summary 包含 6 个新字段)
-- 幂等策略:先 DROP 外部表再 IMPORT FOREIGN SCHEMA支持重复执行不报错
-- =============================================================================
-- -----------------------------------------------------------------------------
-- 1. 删除旧的外部表IF EXISTS 保证幂等)
-- -----------------------------------------------------------------------------
DROP FOREIGN TABLE IF EXISTS fdw_etl.v_dws_finance_recharge_summary;
-- -----------------------------------------------------------------------------
-- 2. 重新导入外部表(从 ETL 库 app schema 获取最新列定义)
-- LIMIT TO 仅导入目标视图,避免影响其他外部表
-- -----------------------------------------------------------------------------
IMPORT FOREIGN SCHEMA app
LIMIT TO (v_dws_finance_recharge_summary)
FROM SERVER etl_feiqiu_server
INTO fdw_etl;
-- =============================================================================
-- 回滚(恢复为旧版外部表,需重新导入)
-- =============================================================================
-- DROP FOREIGN TABLE IF EXISTS fdw_etl.v_dws_finance_recharge_summary;
-- IMPORT FOREIGN SCHEMA app
-- LIMIT TO (v_dws_finance_recharge_summary)
-- FROM SERVER etl_feiqiu_server
-- INTO fdw_etl;
-- 注意:回滚前需先将 ETL 库的 RLS 视图恢复为不含细分字段的版本
-- =============================================================================
-- 验证 SQL
-- =============================================================================
-- 1. 确认外部表存在且包含新字段(应有 6 个 gift_* 细分字段)
-- SELECT column_name, data_type
-- FROM information_schema.columns
-- WHERE table_schema = 'fdw_etl'
-- AND table_name = 'v_dws_finance_recharge_summary'
-- AND column_name LIKE 'gift_%'
-- ORDER BY ordinal_position;
-- 预期gift_card_balance + 6 个新字段 = 7 行
-- 2. 确认外部表可查询
-- SELECT gift_liquor_balance, gift_table_fee_balance, gift_voucher_balance,
-- gift_liquor_recharge, gift_table_fee_recharge, gift_voucher_recharge
-- FROM fdw_etl.v_dws_finance_recharge_summary
-- LIMIT 1;
-- 3. 确认外部表总列数正确(原有列 + 6 个新列)
-- SELECT COUNT(*) AS column_count
-- FROM information_schema.columns
-- WHERE table_schema = 'fdw_etl'
-- AND table_name = 'v_dws_finance_recharge_summary';