Files
Neo-ZQYY/docs/database/BD_manual_fdw_finance_area.md
Neo 70324d8542 chore: 文档与 IDE 配置整理
- .kiro/specs/ → docs/specs/(41 个历史需求 spec 迁移,移除 .config.kiro)
- CLAUDE.md 三层拆分:根文件精简 + apps/backend/CLAUDE.md + .claude/commands/
- 新增 /spec-close、/pre-change 两个工作流命令
- DDL 基线刷新(从测试库重新导出 11 个文件,dws 35→38 表,biz 18→21 表)
- BD_Manual → BD_manual 命名统一(48 个文件)
- 修复 3 处文档与数据库不一致(auth.users.status 默认值、scheduled_tasks 字段、RLS 视图数)
- 新增 BD_manual_public_rbac_tables.md(public schema 8 张 RBAC/工作流表)
- 合并 biz.trigger_jobs 文档(10→12 字段,归档独立文档)
- docs/database/README.md 索引更新

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 00:02:37 +08:00

84 lines
2.9 KiB
Markdown
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.
# BD_ManualFDW 财务区域查询映射fdw_finance_area
> 目标库:后端通过 `get_etl_readonly_connection(site_id)` 直连 ETL 库
> 关联 SPECboard-finance-dws-area-refactor
> 日期2026-03-28
---
## 1. 变更说明
### 新增 RLS 视图ETL 库 app Schema 自动导出)
本次新增的两张 DWS 表各有一个 RLS 视图,后端通过直连 ETL 库的 `app.v_*` 视图访问(与 RNS1.2 以来的模式一致,不使用 `fdw_etl.*` 外部表)。
| 视图 | 源表 | 用途 |
|------|------|------|
| `dws.v_dws_finance_area_daily` | `dws.dws_finance_area_daily` | 区域日粒度财务数据overview/revenue 板块) |
| `dws.v_dws_finance_board_cache` | `dws.dws_finance_board_cache` | 已完成周期缓存overview 8 项指标) |
### 后端查询函数
| 函数 | 视图 | 用途 |
|------|------|------|
| `get_finance_overview_area()` | `v_dws_finance_area_daily` | 按 area_code 聚合 overview 8 项指标 |
| `get_finance_revenue_area()` | `v_dws_finance_area_daily` | 按 area_code 聚合 revenue 板块数据 |
| `get_finance_board_cache()` | `v_dws_finance_board_cache` | 查询缓存 |
| `set_finance_board_cache()` | `dws.dws_finance_board_cache` | 写入/更新缓存 |
### RLS 隔离
所有查询通过 `SET LOCAL app.current_site_id = :site_id` 设置门店隔离参数RLS 视图的 `WHERE site_id = current_setting('app.current_site_id')::bigint` 自动过滤。
---
## 2. 兼容性影响
| 组件 | 影响 |
|------|------|
| ETL 任务 | 无影响。FDW 配置不修改 ETL 库 |
| 后端 API | `fdw_queries.py` 新增 4 个函数,`board_service.py` 改为调用新函数 |
| 小程序 | 无直接影响API 签名不变) |
| 现有 FDW 外部表 | 无影响。新视图通过直连 ETL 库访问,不经过 `fdw_etl` Schema |
---
## 3. 回滚策略
后端回滚:
1. 恢复 `board_service.py` 到旧逻辑(从 `dws_finance_daily_summary` 取数)
2. 移除 `fdw_queries.py` 中的 4 个新函数
数据库回滚:
```sql
DROP VIEW IF EXISTS dws.v_dws_finance_board_cache;
DROP TABLE IF EXISTS dws.dws_finance_board_cache;
DROP VIEW IF EXISTS dws.v_dws_finance_area_daily;
DROP TABLE IF EXISTS dws.dws_finance_area_daily;
```
---
## 4. 验证 SQL
```sql
-- 1. 验证 RLS 视图可访问(需先设置 site_id
SET LOCAL app.current_site_id = '1';
SELECT COUNT(*) FROM dws.v_dws_finance_area_daily;
-- 2. 验证缓存视图可访问
SET LOCAL app.current_site_id = '1';
SELECT COUNT(*) FROM dws.v_dws_finance_board_cache;
-- 3. 验证 app_reader 角色有 SELECT 权限
SELECT has_table_privilege('app_reader', 'dws.v_dws_finance_area_daily', 'SELECT') AS daily_ok,
has_table_privilege('app_reader', 'dws.v_dws_finance_board_cache', 'SELECT') AS cache_ok;
-- 4. 验证区域日粒度数据完整性(每天 9 行)
SET LOCAL app.current_site_id = '1';
SELECT stat_date, COUNT(*) AS cnt
FROM dws.v_dws_finance_area_daily
GROUP BY stat_date
HAVING COUNT(*) != 9;
```