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

@@ -2,6 +2,8 @@
# - 2026-03-20 | Prompt: R3 项目类型筛选接口重建 | SkillFilterEnum 和 ProjectFilterEnum
# 枚举值从 all/chinese/snooker/mahjong/karaoke 改为 ALL/BILLIARD/SNOOKER/MAHJONG/KTV
# 与 dws.cfg_area_category.category_code 一致,消除前后端映射层。
# - 2026-03-27 | Prompt: board-finance-integration T2.4 | AreaFilterEnum 从 7 项重建为 9 项
# (新增 vip/snooker/ktv移除 teamBuilding与区域筛选对照表一致。
"""三看板接口 Pydantic SchemaBOARD-1/2/3 请求参数枚举 + 响应模型)。"""
@@ -84,13 +86,17 @@ class FinanceTimeEnum(str, Enum):
class AreaFilterEnum(str, Enum):
"""BOARD-3 区域筛选。"""
# CHANGE 2026-03-27 | board-finance-integration T2.4 | 枚举从 7 项重建为 9 项,
# 与区域筛选对照表一致all/hall/hallA-C/vip/snooker/mahjong/ktv
all = "all"
hall = "hall"
hallA = "hallA"
hallB = "hallB"
hallC = "hallC"
vip = "vip"
snooker = "snooker"
mahjong = "mahjong"
teamBuilding = "teamBuilding"
ktv = "ktv"
# ---------------------------------------------------------------------------
@@ -137,6 +143,9 @@ class CoachBoardItem(CamelModel):
class CoachBoardResponse(CamelModel):
items: list[CoachBoardItem]
total: int
page: int
page_size: int
dim_type: str # perf/salary/sv/task
@@ -261,10 +270,10 @@ class OverviewPanel(CamelModel):
discount: float # 负值
discount_rate: float
confirmed_revenue: float
cash_in: float
cash_out: float
cash_balance: float
balance_rate: float
cash_in: float | None = None
cash_out: float | None = None
cash_balance: float | None = None
balance_rate: float | None = None
# occurrence 环比
occurrence_compare: str | None = None
occurrence_down: bool | None = None
@@ -340,6 +349,10 @@ class RechargePanel(CamelModel):
card_balance_compare: str | None = None
card_balance_down: bool | None = None
card_balance_flat: bool | None = None
# 全类别会员卡余额合计环比
all_card_balance_compare: str | None = None
all_card_balance_down: bool | None = None
all_card_balance_flat: bool | None = None
class RevenueStructureRow(CamelModel):
@@ -355,32 +368,53 @@ class RevenueStructureRow(CamelModel):
class RevenueItem(CamelModel):
label: str
desc: str | None = None
amount: float
compare: str | None = None
class ChannelItem(CamelModel):
label: str
desc: str | None = None
amount: float
compare: str | None = None
class RevenuePanel(CamelModel):
structure_rows: list[RevenueStructureRow]
price_items: list[RevenueItem] # 4 项
price_items: list[RevenueItem]
total_occurrence: float
discount_items: list[RevenueItem] # 4 项
total_occurrence_compare: str | None = None
total_occurrence_down: bool | None = None
total_occurrence_flat: bool | None = None
discount_items: list[RevenueItem]
# CHANGE 2026-03-28 | board-finance-phase2 bugfix | 优惠总计供前端展示
discount_total: float = 0.0
discount_total_compare: str | None = None
discount_total_down: bool | None = None
discount_total_flat: bool | None = None
confirmed_total: float
channel_items: list[ChannelItem] # 3 项
confirmed_total_compare: str | None = None
confirmed_total_down: bool | None = None
confirmed_total_flat: bool | None = None
channel_items: list[ChannelItem]
class CashflowItem(CamelModel):
label: str
desc: str | None = None
amount: float
compare: str | None = None
down: bool | None = None
class CashflowPanel(CamelModel):
consume_items: list[CashflowItem] # 3 项
recharge_items: list[CashflowItem] # 1 项
total: float
total_compare: str | None = None
total_down: bool | None = None
total_flat: bool | None = None
class ExpenseItem(CamelModel):
@@ -437,6 +471,6 @@ class FinanceBoardResponse(CamelModel):
overview: OverviewPanel
recharge: RechargePanel | None # area≠all 时为 null
revenue: RevenuePanel
cashflow: CashflowPanel
expense: ExpensePanel
cashflow: CashflowPanel | None # area≠all 时为 null
expense: ExpensePanel | None # area≠all 时为 null
coach_analysis: CoachAnalysisPanel