# SPEC: 财务看板前后端联调(board-finance-integration) > 创建日期:2026-03-27 > 状态:进行中 > 优先级:P0 ## 背景 财务看板页面(`pages/board-finance/board-finance`)当前数据全为空——前端只绑定了赠送卡矩阵,其余 5 个板块的 API 返回数据未做 `setData`。同时走查发现多个数据层问题需要修复。 ## 目标 1. 前端完整绑定 API 返回的 6 个板块数据 2. 筛选变更(时间/区域/环比)触发重新加载 3. 修复已确认的数据层问题 4. 优化加载效率 ## 任务清单 ### 阶段 1:DWS 层改造(ETL) #### T1.1 DWS 财务日报新增支付方式拆分字段 - 目标表:`dws.dws_finance_daily_summary` - 新增字段:`cash_paper_amount`(纸币现金)、`scan_pay_amount`(扫码收款) - 数据来源:`dwd_payment` 表按 `payment_method` 拆分(2=现金,4=离线/扫码) - 恒等式:`cash_paper_amount + scan_pay_amount = cash_pay_amount` - 涉及文件: - `db/etl_feiqiu/migrations/2026-03-27__add_payment_split_to_finance_daily.sql`(DDL) - `apps/etl/connectors/feiqiu/tasks/dws/finance_base_task.py`(新增 extract 方法) - `apps/etl/connectors/feiqiu/tasks/dws/finance_daily_task.py`(transform 使用新字段) - `docs/database/ddl/etl_feiqiu__dws.sql`(DDL 基线更新) #### T1.2 RLS 视图更新 - 更新 `app.v_dws_finance_daily_summary` 暴露新字段 - 涉及文件:`db/etl_feiqiu/migrations/2026-03-27__update_finance_daily_view.sql` ### 阶段 2:后端 API 修复 #### T2.1 修复预收资产卡余额聚合(快照值 SUM → 取最后一天) - 文件:`apps/backend/app/services/fdw_queries.py` → `get_finance_recharge()` - 改动:卡余额字段(cash_card_balance/gift_card_balance/total_card_balance 及 gift 细分)改为取时间范围内最后一天的值 - 同时填充 `consumed` 字段(从 `dws_finance_daily_summary.card_consume_total` SUM 聚合) #### T2.2 修复现金流入板块 - 文件:`apps/backend/app/services/fdw_queries.py` → `get_finance_cashflow()` - 改动: - 移除"储值卡消费"项 - 新增"纸币现金"和"扫码收款"两项(从新字段读取) - 保留"团购平台回款"和"会员充值到账" #### T2.3 修复助教分析小时均价 + 补充三列数据 - 文件:`apps/backend/app/services/fdw_queries.py` → `get_finance_coach_analysis()` - 改动: - 基础课用 `base_hours`,激励课用 `bonus_hours` - 新增 `total_pay`(对客收费 = hours × course_price) - 新增 `total_share`(球房分成 = hours × deduction) - SQL 新增 `SUM(base_hours)`、`SUM(bonus_hours)`、`SUM(base_course_price)`、`SUM(bonus_course_price)`、`SUM(base_deduction)`、`SUM(bonus_deduction_ratio)` 的加权计算 #### T2.4 区域筛选枚举重建 - 文件:`apps/backend/app/schemas/xcx_board.py` → `AreaFilterEnum` - 改动:从 7 项改为 9 项(all/hall/hallA/hallB/hallC/vip/snooker/mahjong/ktv) - 后端 service 层传递 area 参数到 FDW 查询(本次不实现 SQL 过滤,仅传参预留) #### T2.5 Pydantic Schema 同步 - 文件:`apps/backend/app/schemas/xcx_board.py` - 确保 FinanceBoardResponse 及子 Panel 的字段与 service 返回一致 ### 阶段 3:前端联调 #### T3.1 重写数据加载函数 - 文件:`apps/miniprogram/miniprogram/pages/board-finance/board-finance.ts` - 改动: - `_loadGiftRows()` → `_loadData()`,绑定全部 6 个板块 - 金额用 `formatMoney()`,百分比用 `toFixed(1) + '%'` - 后端返回原始数字,前端按位置格式化 #### T3.2 筛选联动 - `onTimeChange`/`onAreaChange`/`toggleCompare` 变更后调用 `_loadData()` - 添加 loading 态管理 #### T3.3 区域筛选选项更新 - 前端 `areaOptions` 从 7 项改为 9 项 - 非"全部"时隐藏:预收资产、现金流出、助教分析 #### T3.4 微信开发者工具验证 - 截图对比各板块数据 - 验证筛选切换、环比开关 ## 区域筛选对照表 | code | 前端显示 | 包含的物理区域 | |------|---------|-------------| | all | 全部区域 | 所有 | | hall | 大厅 | A区+B区+C区+TV台+美洲豹赛台 | | hallA | A区 | A区 | | hallB | B区 | B区 | | hallC | C区 | C区+TV台+美洲豹赛台 | | vip | 台球包厢 | VIP包厢 | | snooker | 斯诺克 | 斯诺克区 | | mahjong | 麻将房 | 麻将房+M7+M8+666+发财 | | ktv | 团建房 | K包+k包活动区+幸会158 | ## 区域筛选影响板块 | 板块 | 非"全部"时 | |------|-----------| | 经营一览 | 按区域过滤 | | 预收资产 | 隐藏 | | 应计收入确认 | 按区域过滤 | | 现金流入 | 按区域过滤 | | 现金流出 | 隐藏 | | 助教分析 | 隐藏 | ## 不做 - 区域级 SQL 过滤(DWS 视图改造,后续迭代) - 助教分析按区域统计(已记入 BACKLOG) - 各区域各收费项目对比(已记入 BACKLOG) - 支出数据 Excel 导入功能