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>
This commit is contained in:
Neo
2026-04-06 00:03:48 +08:00
parent 70324d8542
commit 6f8f12314f
515 changed files with 76604 additions and 7456 deletions

View File

@@ -5,6 +5,7 @@
- enums: 字段枚举定义(支付状态、订单状态、会员状态、助教状态等)
- money: 金额精度工具CNYDecimal + ROUND_HALF_UPscale=2
- datetime_utils: 时区转换、日期范围计算
- area_mapping: 区域映射配置ETL 和后端共用)
"""
from neozqyy_shared.enums import (
@@ -24,6 +25,13 @@ from neozqyy_shared.datetime_utils import (
business_week_range,
business_month_range,
)
from neozqyy_shared.area_mapping import (
AREA_LABEL_MAP,
SPECIFIC_AREA_CODES,
ALL_AREA_CODES,
resolve_area_code,
get_area_labels,
)
__all__ = [
# enums
@@ -44,4 +52,10 @@ __all__ = [
"business_day_range",
"business_week_range",
"business_month_range",
# area_mapping
"AREA_LABEL_MAP",
"SPECIFIC_AREA_CODES",
"ALL_AREA_CODES",
"resolve_area_code",
"get_area_labels",
]

View File

@@ -0,0 +1,56 @@
# -*- 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)