Files
Neo-ZQYY/apps/backend/app/routers/xcx_runtime_clock.py
Neo caf179a5da feat: 2026-04-15~05-02 累积变更基线 — AI 重构 + Runtime Context + DWS 修复
涵盖(每条对应已存的审计记录):
- AI 模块拆分:apps/backend/app/ai/apps -> prompts/(8 个 APP + app2a 派生)
  audit: 2026-04-20__ai-module-complete.md
- admin-web AI 管理套件:AIDashboard / AIOperations / AIRunLogs / AITriggers / TriggerManager
  audit: 2026-04-21__admin-web-ai-management-suite.md
- App2 财务洞察 prompt v3 -> v5.1 + 小程序 AI 接入(chat / board-finance)
  audit: 2026-04-22__app2_prompt_v5_1_and_miniprogram_ai_insight.md
- App2 prewarm 全过滤器 + AI 触发器 cron reschedule
  audit: 2026-04-21__app2-finance-prewarm-all-filters.md
  migration: 20260420_ai_trigger_jobs_and_app2_prewarm.sql / 20260421_app2_prewarm_cron_reschedule.sql
- AppType 联合类型对齐 + adminAiAppTypes.test.ts
  audit: 2026-04-30__admin_web_ai_app_type_alignment.md
- DashScope tokens_used 提取修复
  audit: 2026-04-30__backend_dashscope_tokens_used_extraction.md
- App3 线索完整详情 prompt
  audit: 2026-05-01__backend_app3_full_detail_prompt.md
- Runtime Context 沙箱(5-1~5-2 主线):
  - 后端 schema/service + admin_runtime_context / xcx_runtime_clock 两个 router
  - admin-web RuntimeContext.tsx + miniprogram runtime-clock.ts
  - migration: 20260501__runtime_context_sandbox.sql
  - tools/db/verify_admin_web_sandbox.py + verify_sandbox_end_to_end.py
  - database/changes: 7 份 sandbox_* 验证报告
- 飞球 DWS 修复:finance_area_daily 区域汇总 + task_engine 调整
  + RLS 视图业务日上界(migration 20260502 + scripts/ops/gen_rls_business_date_migration.py)

合规:
- .gitignore 启用 tmp/ 排除
- 不入仓:apps/etl/connectors/feiqiu/.env(API_TOKEN secret,本地修改保留)

待验证清单:
- docs/audit/changes/2026-05-04__cumulative_baseline_pending_verification.md
  每个主题的功能完整性 / 上线验证几乎都未收口,按优先级 P0~P3 逐一处理
2026-05-04 02:30:19 +08:00

62 lines
2.1 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 -*-
"""小程序业务时钟路由。
仅用于小程序读取当前门店的"业务日 / 业务年月 / 模式"——sandbox 模式下,
小程序的 performance / task-list / customer-records 等页面应以 RuntimeContext
返回的业务时钟为准,禁止再用 ``new Date()`` 构造请求参数。
端点:
- GET /api/xcx/runtime/clock — 返回当前门店的业务时钟与运行模式live / sandbox
所有端点均需 JWTapproved 状态),但不要求特定模块权限。
"""
from __future__ import annotations
from fastapi import APIRouter, Depends
from app.auth.dependencies import CurrentUser
from app.middleware.permission import require_approved
from app.services.runtime_context import get_runtime_context
from app.trace.decorators import trace_service
router = APIRouter(prefix="/api/xcx/runtime", tags=["小程序业务时钟"])
@router.get("/clock")
@trace_service("获取业务时钟", "Get business clock")
async def get_business_clock(
user: CurrentUser = Depends(require_approved),
):
"""返回当前门店的业务时钟。
返回示例live::
{
"mode": "live",
"business_date": "2026-05-02",
"business_year": 2026,
"business_month": 5,
"business_year_month": "2026-05",
"is_sandbox": false,
"sandbox_date": null
}
sandbox 模式下 ``business_date`` 等于配置的 ``sandbox_date``。
小程序页面应使用本接口结果替代 ``new Date()``,以确保 sandbox 模式下
展示和请求都对齐到 sandbox_date。
"""
ctx = get_runtime_context(user.site_id)
bd = ctx.business_date
return {
"mode": ctx.mode,
"business_date": bd.isoformat(),
"business_year": bd.year,
"business_month": bd.month,
"business_year_month": f"{bd.year:04d}-{bd.month:02d}",
"business_now": ctx.business_now.isoformat(),
"is_sandbox": ctx.is_sandbox,
"sandbox_date": ctx.sandbox_date.isoformat() if ctx.sandbox_date else None,
"sandbox_instance_id": ctx.sandbox_instance_id,
}