Files
Neo-ZQYY/packages/shared/src/neozqyy_shared/area_mapping.py
Neo 6f8f12314f feat: 累积功能变更 — 聊天集成、租户管理、小程序更新、ETL 增强、迁移脚本
包含多个会话的累积代码变更:
- backend: AI 聊天服务、触发器调度、认证增强、WebSocket、调度器最小间隔
- admin-web: ETL 状态页、任务管理、调度配置、登录优化
- miniprogram: 看板页面、聊天集成、UI 组件、导航更新
- etl: DWS 新任务(finance_area_daily/board_cache)、连接器增强
- tenant-admin: 项目初始化
- db: 19 个迁移脚本(etl_feiqiu 11 + zqyy_app 8)
- packages/shared: 枚举和工具函数更新
- tools: 数据库工具、报表生成、健康检查
- docs: PRD/架构/部署/合约文档更新

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

57 lines
2.3 KiB
Python
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.
# -*- coding: utf-8 -*-
"""区域映射配置 — ETL 和后端共用。
将 dim_table.site_table_area_name物理区域名称映射到标准 area_code。
区域编码体系9 个值):
- 7 个具体区域hallA / hallB / hallC / vip / snooker / mahjong / ktv
- hall = 台球大厅hallA + hallB + hallC
- all = 所有区域之和
"""
from __future__ import annotations
# ── 核心映射area_code → 物理区域名称列表 ──────────────────────────
AREA_LABEL_MAP: dict[str, list[str]] = {
"hallA": ["A区"],
"hallB": ["B区"],
"hallC": ["C区", "TV台", "美洲豹赛台"],
"vip": ["VIP包厢"],
"snooker": ["斯诺克区"],
"mahjong": ["麻将房", "M7", "M8", "666", "发财"],
"ktv": ["K包", "k包活动区", "幸会158"],
}
# ── 派生常量 ────────────────────────────────────────────────────────
SPECIFIC_AREA_CODES: list[str] = list(AREA_LABEL_MAP.keys())
"""7 个具体区域编码(不含 all / hall"""
ALL_AREA_CODES: list[str] = ["all", "hall"] + SPECIFIC_AREA_CODES
"""全部 9 个区域编码。"""
# ── 反向映射:物理区域名称 → area_code ──────────────────────────────
_REVERSE_MAP: dict[str, str] = {
label: code
for code, labels in AREA_LABEL_MAP.items()
for label in labels
}
# ── 公开函数 ────────────────────────────────────────────────────────
def resolve_area_code(area_name: str | None) -> str | None:
"""输入 site_table_area_name返回对应的 area_code。
未匹配返回 None由调用方ETL决定是否记录警告。
"""
if area_name is None:
return None
return _REVERSE_MAP.get(area_name)
def get_area_labels(area_code: str) -> list[str] | None:
"""输入 area_code返回对应的物理区域名称列表。
all / hall 不对应具体物理区域,返回 None。
未知 area_code 同样返回 None。
"""
return AREA_LABEL_MAP.get(area_code)