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:
118
apps/backend/app/schemas/admin_task_engine.py
Normal file
118
apps/backend/app/schemas/admin_task_engine.py
Normal file
@@ -0,0 +1,118 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""P18 任务引擎运营看板 — Pydantic v2 Schema
|
||||
|
||||
包含:转移日志、待审核任务、候选助教、参数管理等数据模型。
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
# ---- 转移日志 ----
|
||||
|
||||
class TransferLogItem(BaseModel):
|
||||
id: int
|
||||
site_id: int
|
||||
site_name: str = ""
|
||||
member_id: int
|
||||
member_name: str = ""
|
||||
from_assistant_id: int
|
||||
from_assistant_name: str = ""
|
||||
to_assistant_id: int
|
||||
to_assistant_name: str = ""
|
||||
transfer_reason: str | None = None
|
||||
transfer_score: float | None = None
|
||||
guard_checks: dict | None = None
|
||||
created_at: datetime
|
||||
|
||||
|
||||
class TransferLogPage(BaseModel):
|
||||
items: list[TransferLogItem]
|
||||
total: int
|
||||
|
||||
|
||||
# ---- 待审核任务 ----
|
||||
|
||||
class PendingReviewItem(BaseModel):
|
||||
id: int
|
||||
site_id: int
|
||||
site_name: str = ""
|
||||
member_id: int
|
||||
member_name: str = ""
|
||||
assistant_id: int
|
||||
assistant_name: str = ""
|
||||
task_type: str
|
||||
task_type_label: str = ""
|
||||
transfer_count: int = 0
|
||||
priority_score: float | None = None
|
||||
created_at: datetime
|
||||
|
||||
|
||||
class PendingReviewPage(BaseModel):
|
||||
items: list[PendingReviewItem]
|
||||
total: int
|
||||
|
||||
|
||||
class CandidateAssistant(BaseModel):
|
||||
assistant_id: int
|
||||
assistant_name: str = ""
|
||||
rs_display: float = 0
|
||||
ms_display: float = 0
|
||||
ml_display: float = 0
|
||||
transfer_score: float = 0
|
||||
source: str = "pool"
|
||||
|
||||
|
||||
class CandidateListResponse(BaseModel):
|
||||
candidates: list[CandidateAssistant]
|
||||
|
||||
|
||||
class ReassignRequest(BaseModel):
|
||||
to_assistant_id: int
|
||||
|
||||
|
||||
class ReassignResponse(BaseModel):
|
||||
success: bool
|
||||
new_task_id: int | None = None
|
||||
|
||||
|
||||
class CloseRequest(BaseModel):
|
||||
reason: str = Field(..., min_length=1, max_length=500)
|
||||
|
||||
|
||||
class CloseResponse(BaseModel):
|
||||
success: bool
|
||||
|
||||
|
||||
# ---- 参数管理 ----
|
||||
|
||||
class ConfigParam(BaseModel):
|
||||
id: int
|
||||
site_id: int | None = None
|
||||
site_name: str | None = None
|
||||
param_key: str
|
||||
param_value: float
|
||||
description: str | None = None
|
||||
updated_at: datetime
|
||||
|
||||
|
||||
class ConfigParamList(BaseModel):
|
||||
params: list[ConfigParam]
|
||||
|
||||
|
||||
class ConfigParamUpdate(BaseModel):
|
||||
param_value: float
|
||||
|
||||
|
||||
class ConfigParamCreate(BaseModel):
|
||||
site_id: int
|
||||
param_key: str = Field(..., max_length=64)
|
||||
param_value: float
|
||||
|
||||
|
||||
class ConfigParamResponse(BaseModel):
|
||||
success: bool
|
||||
id: int | None = None
|
||||
Reference in New Issue
Block a user