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

@@ -24,6 +24,7 @@ class CoachTask(CamelModel):
name: str
level: str # star / senior / middle / junior
level_color: str
heart_score: float = 0.0 # CHANGE 2026-03-29 | RSI 关系指数,用于爱心标识
task_type: str
task_color: str
bg_class: str
@@ -32,10 +33,10 @@ class CoachTask(CamelModel):
metrics: list[MetricItem] = []
class FavoriteCoach(CamelModel):
# CHANGE 2026-03-20 | M4 修复: emoji 注释与 P6 权威定义对齐4 级映射)
# intent: 注释应反映 compute_heart_icon() 的实际 4 级映射(💖🧡💛💙)
emoji: str # 💖 / 🧡 / 💛 / 💙
emoji: str
name: str
heart_score: float = 0.0
level: str = ""
relation_index: str
index_color: str
bg_class: str
@@ -46,7 +47,7 @@ class CoachServiceItem(CamelModel):
level: str
level_color: str
course_type: str # "基础课" / "激励课"
hours: float
hours: str # "2.5h" 格式
perf_hours: float | None = None
fee: float
@@ -57,15 +58,15 @@ class ConsumptionRecord(CamelModel):
table_name: str | None = None
start_time: str | None = None
end_time: str | None = None
duration: int | None = None
duration: str | None = None
table_fee: float | None = None
table_orig_price: float | None = None
coaches: list[CoachServiceItem] = []
food_amount: float | None = None
food_orig_price: float | None = None
total_amount: float
total_orig_price: float
pay_method: str
total_orig_price: float | None = None
pay_method: str | None = None
recharge_amount: float | None = None
class RetentionClue(CamelModel):
@@ -126,5 +127,25 @@ class CustomerRecordsResponse(CamelModel):
total_service_count: int
month_count: int
month_hours: float
month_income: float = 0.0
records: list[ServiceRecordItem] = []
has_more: bool = False
class CustomerConsumptionRecordsResponse(CamelModel):
"""CUST-3 响应:客户消费记录(按月)。"""
# Banner
id: int
name: str
phone: str
phone_full: str
balance: float | None = None
consumption_60d: float | None = None
ideal_interval: int | None = None
days_since_visit: int | None = None
# 月度汇总
visit_count: int = 0
consume_total: float = 0.0
recharge_total: float = 0.0
# 消费记录
records: list[ConsumptionRecord] = []