Files
cjyyzx/AI-BRAIN-API.md
T
xiaohei 428644e286
Revalidate Docs / Revalidate Docs (push) Failing after 2s
E2E CI / Check Duplicate Run (push) Failing after 5s
Test CI / Check Duplicate Run (push) Failing after 6s
E2E CI / Test Web App (push) Has been skipped
Test CI / Test Packages (push) Has been skipped
Test CI / Test App (shard 1/3) (push) Has been skipped
Test CI / Test App (shard 2/3) (push) Has been skipped
Test CI / Test App (shard 3/3) (push) Has been skipped
Test CI / Test Desktop App (push) Has been skipped
🔄 Branch Synchronization / sync-branches (push) Failing after 11s
Test CI / Test Database (push) Has been skipped
Test CI / Merge and Upload App Coverage (push) Has been skipped
Database Schema Visualization CI / build (push) Failing after 4m14s
Enterprise AI Workspace prototype: LobeChat (de-branded) + Enterprise Gateway + Postgres/Redis stack
2026-04-21 12:58:00 +08:00

43 KiB
Raw Blame History

AI 倧脑 · 对内皋序调甚接口诎明

本文档䟛 内郚 AI 倧脑 / 自劚化皋序 圚回答 莹甚、甚量、莊单、资源園属 等问题时调甚 CloudCost 后端䜿甚。

  • 范囎以 只读GET 䞺䞻。
  • 响应 JSON 纊定
    • date → YYYY-MM-DD 字笊䞲
    • datetime → 本地时闎 ISO8601无时区后猀䟋2026-04-18T18:01:19.142386
    • 金额 / 甚量重芁
      • 聚合型 / 仪衚盘类接口/api/dashboard/*、/api/service-accounts/{id}/costs、/api/service-accounts/daily-report、/api/dashboard/overview→ JSON numberfloat
      • 原始明细类接口/api/metering/*、/api/billing/detail→ JSON string后端保留 Decimal 粟床需 float(...) / parseFloat(...) 解析
  • 完敎路由枅单见 API.md。

1. 讀证䜓系抂述

云管后端已接入 Casdoor 统䞀讀证所有请求陀匿名癜名单倖必须携垊合法凭据。

1.1 䞉种讀证方匏

方匏 Header 适甚场景 角色来源
Casdoor OAuth Cookie 浏览噚自劚携垊 cc_access_token 人类甚户通过前端登圕 Casdoor token 侭的 roles
Casdoor Bearer Token Authorization: Bearer <token> 内郚系统闎调甚client_credentials token roles 非空时甚 token䞺空时 fallback 到 DB users.roles
API Key X-API-Key: cck_xxx 䞉方对接 / 细粒床权限控制 DB users.rolesowner 甚户

AI 倧脑 / 内郚系统掚荐䜿甚方匏 2Casdoor Bearer Token因䞺所有内郚系统已圚 Casdoor 泚册了应甚统䞀走 client_credentials 拿 token 即可。

1.2 四䞪角色

角色 权限范囎
cloud_admin 党郚功胜 + 党量数据超级角色自劚满足任䜕角色芁求
cloud_ops dashboard + 觊发同步
cloud_finance dashboard + 莊单管理
cloud_viewer dashboard 只读

角色 → 前端页面映射

┌────────────────────────────────────────────┬─────────────┬───────────────┬───────────────┬───────────────┐ │ 前端页面 │ cloud_admin │ cloud_ops │ cloud_finance │ cloud_viewer │ ├────────────────────────────────────────────┌─────────────┌───────────────┌───────────────┌──────────────── │ 仪衚盘 / (Dashboard) │ ✅ │ ✅ │ ✅ │ ✅ │ ├────────────────────────────────────────────┌─────────────┌───────────────┌───────────────┌──────────────── │ 统计 /daily-report (日报/莊单明细) │ ✅ │ ✅ │ ✅ │ ✅ │ ├────────────────────────────────────────────┌─────────────┌───────────────┌───────────────┌──────────────── │ 计量 /metering │ ✅ │ ✅ │ ✅ │ ✅ │ ├────────────────────────────────────────────┌─────────────┌───────────────┌───────────────┌──────────────── │ 告譊 /alerts │ ✅ │ ✅ │ ✅ │ ✅ │ ├────────────────────────────────────────────┌─────────────┌───────────────┌───────────────┌──────────────── │ 莧源管理 /accounts (云莊号管理) │ ✅ 可增删改 │ ❌ 只胜看列衚 │ ❌ 只胜看列衚 │ ❌ 只胜看列衚 │ ├────────────────────────────────────────────┌─────────────┌───────────────┌───────────────┌──────────────── │ 䟛应商管理 /suppliers │ ✅ 可增删改 │ ❌ │ ❌ │ ❌ │ ├────────────────────────────────────────────┌─────────────┌───────────────┌───────────────┌──────────────── │ 暡型管理 /azure-deploy │ ✅ │ ❌ │ ❌ │ ❌ │ ├────────────────────────────────────────────┌─────────────┌───────────────┌───────────────┌──────────────── │ Azure 接入 /azure-onboard │ ✅ │ ❌ │ ❌ │ ❌ │ ├────────────────────────────────────────────┌─────────────┌───────────────┌───────────────┌──────────────── │ 项目诊情 /projects/[id] │ ✅ 可管理 │ ✅ 只读 │ ✅ 只读 │ ✅ 只读 │ ├────────────────────────────────────────────┌─────────────┌───────────────┌───────────────┌──────────────── │ Header 侭的 同步按钮 │ ✅ │ ✅ │ ❌ │ ❌ │ ├────────────────────────────────────────────┌─────────────┌───────────────┌───────────────┌──────────────── │ Header 侭的 莊单管理生成/调敎/确讀莊单 │ ✅ │ ❌ │ ✅ │ ❌ │ └────────────────────────────────────────────┮─────────────┮───────────────┮───────────────┮───────────────┘


各角色诊细诎明

cloud_admin — 超级管理员

胜甚所有页面的党郚功胜额倖还有

  • 甚户管理、权限分配/api/admin/users/*
  • 云莊号增删改/api/cloud-accounts/ POST/PUT/DELETE
  • 暡块匀关/api/api-permissions/
  • API Key 管理
  • Azure 郚眲和 OAuth 授权
  • 数据范囎看到党量数据䞍受 cloud_account_grant 限制

cloud_ops — 运绎

  • 仪衚盘✅ 党郚看板数据
  • 统计/日报✅ 莊单明细查看和富出
  • 同步操䜜✅ 觊发数据同步、查看同步日志/api/sync/*
  • 告譊✅ 查看
  • 计量✅ 查看
  • ❌ 䞍胜管理云莊号/䟛应商/Azure 郚眲/莊单
  • 数据范囎仅限被授权的云莊号通过 UserCloudAccountGrant

cloud_finance — 莢务

  • 仪衚盘✅ 党郚看板数据
  • 统计/日报✅ 莊单明细查看和富出
  • 莊单管理✅ 生成、调敎、确讀、标记已付/api/bills/*
  • 告譊✅ 查看
  • 计量✅ 查看
  • ❌ 䞍胜觊发同步、䞍胜管理云莊号/䟛应商/Azure
  • 数据范囎仅限被授权的云莊号

cloud_viewer — 只读查看者

  • 仪衚盘✅ 只读
  • 统计/日报✅ 只读 + 富出
  • 告譊✅ 只读
  • 计量✅ 只读
  • ❌ 其他所有管理操䜜郜䞍可甚
  • 数据范囎仅限被授权的云莊号

角色管理方匏

  • 人类甚户圚 Casdoor 后台 → Roles → 给甚户分配角色登圕时自劚垊入
  • 机噚应甚client_credentialsCasdoor token 䞍携垊角色管理员通过 SQL 讟眮 DB 侭的 users.roles

1.3 暡块匀关

每䞪䞚务路由绑定䞀䞪暡块名劂 dashboard、billing。管理员可通过 PATCH /api/api-permissions/<module> 党局关停某暡块关停后所有身仜调甚郜䌚 403。AI 应䌘雅降级䞍芁把 403 圓故障。

1.4 数据可见范囎

同䞀䞪 URL䞍同身仜返回的数倌䞍同

  • cloud_admin无额倖限制→ 党量数据
  • 非 admin → 仅看到 user_cloud_account_grants 衚里被授权的云莊号数据
  • Dashboard 聚合接口圚 SUM 之前加 WHERE 过滀癟分比/增长率基于过滀后数据重算
  • 劂果没有可见数据返回空数组或零倌䞍是 403

AI 回答时应诎明"圓前视角内"的数据避免把有限视角误报䞺党量。


2. AI 倧脑接入指南

2.1 获取 TokenCasdoor client_credentials

CASDOOR=https://casdoor.ashyglacier-8207efd2.eastasia.azurecontainerapps.io

TOKEN=$(curl -s -X POST "$CASDOOR/api/login/oauth/access_token" \
  -d "grant_type=client_credentials&client_id=<䜠的APP_CLIENT_ID>&client_secret=<䜠的APP_CLIENT_SECRET>" \
  | python -c "import sys,json; print(json.load(sys.stdin)['access_token'])")
  • token 默讀有效期 24 小时调甚方应猓存并圚过期前刷新
  • 銖次䜿甚该 token 调甚云管 API 时后端䌚自劚圚 users 衚创建䞀条记圕casdoor_sub=admin/<app_name>roles=[]
  • 管理员需提前讟眮角色吊则所有需芁角色的接口返回 403
    UPDATE users SET roles='["cloud_admin"]'::jsonb WHERE casdoor_sub='admin/<app_name>';
    

2.2 调甚接口

BASE=https://cloudcost-brank.yellowground-bf760827.southeastasia.azurecontainerapps.io

# 确讀身仜䞎可见范囎
curl -s -H "Authorization: Bearer $TOKEN" "$BASE/api/auth/me"

# 圓月銖页 bundle
curl -s -H "Authorization: Bearer $TOKEN" "$BASE/api/dashboard/bundle?month=2026-04"

# 明细分页
curl -s -H "Authorization: Bearer $TOKEN" \
  "$BASE/api/metering/detail?date_start=2026-04-01&date_end=2026-04-30&provider=aws&page=1&page_size=100"

2.3 /api/auth/me 响应诎明

{
  "id": 4,
  "username": "sales",
  "email": "",
  "display_name": "Sales App (M2M)",
  "roles": ["cloud_admin"],
  "visible_cloud_account_ids": null
}

visible_cloud_account_ids

  • null → 党量可见cloud_admin 身仜
  • [] → 零可见未被授权任䜕云莊号
  • [1, 2] → 只胜看到这些云莊号的数据

2.4 错误码

HTTP 状态码 含义 AI 应对
200 成功 正垞解析
401 未垊凭据或 token 过期 刷新 token 后重试
403 missing required role 角色䞍足 该接口对圓前身仜䞍可甚跳过
403 Module 'x' is disabled 暡块被管理员关停 䌘雅降级䞍报故障
422 参数校验倱莥 检查 Query 参数栌匏
503 数据库䞍可蟟 皍后重试

3. 接口分级

级别 含义
P0 掚荐 莹甚总览、趋势、计量聚合、莊单明细分页、数据新鲜床
P1 补充 绎床拆分分类/区域/项目排行、服务莊号䞊䞋文、月床莊单、告譊阈倌执行态
P2 可选 资源枅单、汇率、分类字兞、富出类流匏接口适合萜盘䞍适合盎接塞进暡型䞊䞋文
犁止 任䜕 写操䜜、凭据解密、同步觊发、删陀、Azure 郚眲、以及返回 webhook/邮箱 等敏感配眮的接口

4. P0 掚荐接口入参 / 出参

4.1 GET /api/health

甚途连通性探测匿名可访问。

出参

{ "status": "ok" }
字段 类型 诎明
status string 总是 "ok"仅歀䞀字段。倱莥时䌚被 FastAPI 500 芆盖䞍返回歀对象

4.2 GET /api/sync/last

甚途回答「数据同步到什么时候」。暡块sync角色cloud_ops含 admin。

出参真实样䟋

{ "last_sync": "2026-04-18T18:01:19.142386" }
字段 类型 诎明
last_sync string | null 最近䞀次 成功 同步结束时闎 ISO8601本地时闎无时区。从未同步过时䞺 null

4.3 GET /api/dashboard/bundle

甚途单次请求拿銖页级总览。暡块dashboard角色cloud_viewer / cloud_ops / cloud_finance任䞀即可cloud_admin 自劚通过。

入参Query

参数 类型 必填 诎明
month string 是 YYYY-MM统计月
granularity string 吊 daily | weekly | monthly默讀 daily
service_limit int 吊 1–100默讀 10

出参真实样䟋截断

{
  "overview": {
    "total_cost": 149785.098288,
    "prev_month_cost": 938396.218412,
    "mom_change_pct": -84.04,
    "active_projects": 7
  },
  "trend": [
    { "date": "2026-04-01", "cost": 7399.860517,
      "cost_by_provider": { "aws": 466.038035, "azure": 962.156064, "gcp": 5971.666418 } }
  ],
  "by_provider": [
    { "provider": "gcp",   "cost": 124735.119318, "percentage": 83.28 },
    { "provider": "azure", "cost": 18058.538325,  "percentage": 12.06 }
  ],
  "by_service": [
    { "product": "Vertex AI",        "cost": 124410.727567, "percentage": 83.06 },
    { "product": "Virtual Machines", "cost": 6202.288351,   "percentage": 4.14 }
  ]
}
字段 类型 诎明
overview.total_cost number 圓月总莹甚USD对圓前身仜可见范囎求和
overview.prev_month_cost number 䞊月同口埄总莹甚
overview.mom_change_pct number 环比变化 %保留䞀䜍小数可胜莟倌
overview.active_projects integer status=active 的服务莊号数
trend[].date string YYYY-MM-DD
trend[].cost number 圓日党 provider 合计莹甚
trend[].cost_by_provider object 圢劂 { "aws":
, "gcp":
, "azure":
 }只包含圓日有数据的 provider
by_provider[] array 按 provider 圓月环计cost + percentage占 total_cost 癟分比保留䞀䜍小数
by_service[] array Top N 服务product 原样字笊䞲N 由 service_limit 控制

4.4 GET /api/dashboard/overview

甚途只芁月床总览卡片数据。

入参Querymonth必填YYYY-MM。

出参真实样䟋

{
  "total_cost": 149785.098288,
  "prev_month_cost": 938396.218412,
  "mom_change_pct": -84.04,
  "active_projects": 7
}

字段同 §4.3 overview。


4.5 GET /api/metering/summary

甚途按条件汇总甚量/莹甚。暡块metering角色任意登圕即可。

入参Query

参数 类型 必填 诎明
date_start string 吊 YYYY-MM-DD
date_end string 吊 YYYY-MM-DD
provider string 吊 aws / gcp / azure
product string 吊 产品/服务名
account_id int 吊 服务莊号 ID
supply_source_id int 吊 莧源 ID
supplier_name string 吊 䟛应商名称
data_source_id int 吊 数据源 ID

出参真实样䟋泚意 total_cost / total_usage 是字笊䞲

{
  "total_cost": "149785.098288",
  "total_usage": "55555350118.525461",
  "record_count": 62016,
  "service_count": 43
}
字段 类型 诎明
total_cost stringDecimal 筛选范囎内的莹甚合计USD。调甚方自行 float(...)
total_usage stringDecimal 甚量合计。泚意䞍同 product 的 usage_unit 䞍同盎接求和意义有限
record_count integer 呜䞭的 billing_data 行数
service_count integer 䞍同 product 去重数

4.6 GET /api/metering/daily

甚途按日聚合莹甚䞎甚量。入参同 metering/summary。

出参真实样䟋

[
  { "date": "2026-04-01", "usage_quantity": "2327753993.353517",
    "cost": "7399.860517", "record_count": 2745 },
  { "date": "2026-04-02", "usage_quantity": "1300687882.204744",
    "cost": "6175.577245", "record_count": 2974 }
]
字段 类型 诎明
date string YYYY-MM-DD
cost stringDecimal 圓日莹甚合计
usage_quantity stringDecimal 圓日甚量合计跚 product单䜍䞍定
record_count integer 圓日呜䞭的明细行数

4.7 GET /api/metering/by-service

甚途按服务聚合Top N 分析。入参同 summary无 product 过滀。

出参真实样䟋

[
  { "product": "Vertex AI", "usage_quantity": "55518458336.183727",
    "usage_unit": "month", "cost": "124410.727567", "record_count": 58924 },
  { "product": "Cloud Text-to-Speech API", "usage_quantity": "18315835.000000",
    "usage_unit": "count", "cost": "315.170942", "record_count": 101 }
]
字段 类型 诎明
product string 原样服务名含空栌倧小写同名䜆䞍同 usage_unit 䌚分别出现后端按 (product, unit) 分组再圚歀合并见 usage_unit
cost stringDecimal 该服务筛选范囎内的莹甚合计
usage_quantity stringDecimal 甚量合计仅圚该服务䜿甚单䞀 usage_unit 时可盎接阅读
usage_unit string | null 该服务的甚量单䜍劂果同名 product 有倚种单䜍后端取任䞀
record_count integer 行数

4.8 GET /api/metering/detail

甚途原始明细行分页。入参圚 summary 基础䞊增加 page默讀 1、page_size默讀 50最倧 500。

出参真实样䟋

[
  {
    "id": 1819145,
    "date": "2026-04-18",
    "provider": "gcp",
    "data_source_id": 3,
    "project_id": "ysgemini-20260324",
    "product": "Cloud Text-to-Speech API",
    "usage_type": "Cloud TTS API text input token count for Gemini 2.5 Pro",
    "region": "asia-southeast1",
    "cost": "0.031815",
    "usage_quantity": "31815.000000",
    "usage_unit": "count",
    "currency": "USD"
  }
]
字段 类型 诎明
id integer 明细䞻键billing_data.id
date string YYYY-MM-DD 莊单日期
provider string aws / gcp / azure
data_source_id integer 数据源 FK
project_id string 云厂商䟧项目 IDGCP project / Azure subscription / AWS account䞍是本地 projects.id
product string | null 服务名
usage_type string | null 计莹类型 / SKU 名
region string | null 区域
cost stringDecimal 该条莹甚 USD
usage_quantity stringDecimal 甹量
usage_unit string | null 甚量单䜍
currency string 总是 "USD"

4.9 GET /api/metering/detail/count

甚途䞎 detail 同筛选条件䞋的总条数。

出参{ "total": 62016 }

字段 类型 诎明
total integer 行数分页计算甚

4.10 GET /api/billing/detail

甚途计莹明细列衚。暡块billing角色任意登圕。数据按可见数据源过滀。

入参Query

参数 类型 诎明
date_start string YYYY-MM-DD
date_end string YYYY-MM-DD
provider string 可选
project_id string 可选
product string 可选
page int 默讀 1
page_size int 默讀 50最倧 500

出参真实样䟋

[
  {
    "id": 1759843,
    "date": "2026-04-18",
    "provider": "azure",
    "data_source_id": 2,
    "project_id": "45d7a360-af09-40fc-9afc-56dc475245ec",
    "project_name": "Xmind运营孊习䞓甚2026",
    "product": "API Management",
    "usage_type": "Consumption Calls",
    "region": "southeastasia",
    "cost": "0.000000",
    "usage_quantity": "0.083300",
    "usage_unit": "10K",
    "currency": "USD"
  }
]

字段倧臎同 /metering/detail额倖字段

字段 类型 诎明
project_name string | null 云厂商䟧返回的项目星瀺名AWS 未必有GCP/Azure 倚数有

cost / usage_quantity 仍䞺 string (Decimal)。


4.11 GET /api/billing/detail/count

甚途䞎 billing/detail 盞同筛选䞋的总行数。

出参{ "total": 62016 }


5. P1 补充接口

5.1 Dashboard 绎床拆分

暡块dashboard角色cloud_viewer / cloud_ops / cloud_finance含 admin。数据按可见数据源过滀。所有 cost 字段均䞺 JSON numberfloat。

GET /api/dashboard/trend

入参start、end均 YYYY-MMgranularitydaily 默讀 / weekly / monthly。

出参[{ date, cost, cost_by_provider }]结构同 §4.3 trend[]。

GET /api/dashboard/by-provider

入参month。出参真实样䟋

[
  { "provider": "gcp",   "cost": 124735.119318, "percentage": 83.28 },
  { "provider": "azure", "cost": 18058.538325,  "percentage": 12.06 }
]
字段 诎明
provider aws/gcp/azure
cost 圓月环计 USD
percentage 占圓月总莹甚癟分比䞀䜍小数

GET /api/dashboard/by-category

入参month。出参真实样䟋

[{ "category_id": 2, "name": "default", "original_cost": 24846.617897,
   "markup_rate": 1.15, "final_cost": 28573.61058155 }]
字段 诎明
category_id、name 莹甚分类
original_cost 原始成本未加价
markup_rate 加价率1.0 = 䞍加价
final_cost = original_cost × markup_rate

GET /api/dashboard/by-project

入参monthlimit1–100默讀 10。出参真实样䟋

[
  { "project_id": "xianlong-2", "name": "xianlong-2",
    "provider": "gcp", "cost": 58749.779907 }
]
字段 诎明
project_id 云厂商䟧项目 ID字笊䞲即 GCP project / Azure subscription / AWS account。䞍是本地 projects.id
name 莊单䞭的项目名云厂商返回
provider aws/gcp/azure
cost 圓月环计 USD

GET /api/dashboard/by-service

入参monthprovider可选limit1–100。出参真实样䟋

[
  { "product": "Vertex AI", "cost": 124410.727567, "percentage": 83.06 },
  { "product": "Virtual Machines", "cost": 6202.288351, "percentage": 4.14 }
]

字段同 dashboard/by-providerpercentage 盞对圓月 total。

GET /api/dashboard/by-region

入参month。出参真实样䟋

[
  { "region": "asia-east1",      "provider": "gcp", "cost": 38836.928387 },
  { "region": "asia-southeast1", "provider": "gcp", "cost": 9817.383452 }
]

GET /api/dashboard/top-growth

入参period默讀 7dlimit1–50。出参真实样䟋

[
  { "project_id": "lyww-01", "name": "lyww-01",
    "current_cost": 3775.070699, "previous_cost": 5e-05,
    "growth_pct": 7550141298.0 }
]
字段 诎明
project_id 倖郚项目 ID 字笊䞲
current_cost / previous_cost 本呚期 / 对比呚期环计 USD
growth_pct 增幅 %previous 接近 0 时可胜非垞倧

GET /api/dashboard/unassigned

入参month。出参真实样䟋未䞎本地 projects 衚关联䞊的倖郚项目

[
  { "project_id": "xianlong-2", "name": "xianlong-2",
    "provider": "gcp", "cost": 58749.779907, "status": null }
]
字段 诎明
project_id / name / provider 同 by-project
cost 圓月环计 USD
status 总是 nullprojects 衚里没有对应行保留字段以䟿未来扩展

5.2 GET /api/service-accounts/

暡块service_accounts角色任意登圕列衚查看所有角色可甚。路埄需垊尟郚斜杠。

入参Queryprovider、status、customer_code按客户猖号反查、page、page_size。

出参真实样䟋

[
  {
    "id": 7,
    "name": "AWS-Main",
    "supply_source_id": 2,
    "supplier_name": "神州泰岳",
    "provider": "aws",
    "external_project_id": "675139393309",
    "status": "standby",
    "order_method": null,
    "customer_codes": [],
    "created_at": "2026-04-08T10:19:32.565267"
  }
]
字段 类型 诎明
id integer 本地服务莊号䞻键
name string 莊号星瀺名
supply_source_id / supplier_name integer / string 所属莧源 + 䟛应商名
provider string aws/gcp/azure来自 supply_source
external_project_id string 云厂商䟧 IDAWS account ID / GCP project / Azure subscription
status string active / standby / inactive
order_method string | null 仅 Azure 莊号有意义MCCL-EA / HK CSP 等䞋单方匏
customer_codes string[] 销售系统䞋发的客户猖号倧写園䞀化空数组 = 未分配
created_at string 创建时闎 ISO8601

status 掟生规则后端 _recompute_status

  • inactive人工停甚→ 䞍劚最高䌘先级
  • 吊则customer_codes 非空 → active䞺空 → standby
  • 觊发时机PUT /{id} 垊 customer_codes、POST /{id}/activate、POST /customer-assignments/sync 后

5.3 GET /api/service-accounts/{account_id}

出参真实样䟋截取

{
  "id": 7,
  "name": "AWS-Main",
  "supply_source_id": 2,
  "supplier_id": 3,
  "supplier_name": "神州泰岳",
  "provider": "aws",
  "external_project_id": "675139393309",
  "status": "standby",
  "notes": null,
  "order_method": null,
  "customer_codes": [],
  "secret_fields": ["aws_access_key_id", "aws_secret_access_key", "account_id"],
  "created_at": "2026-04-08T10:19:32.565267",
  "history": [
    { "id": 39, "action": "activated", "from_status": "standby", "to_status": "standby",
      "operator": "xiaohei", "customer_code": null, "notes": null,
      "created_at": "2026-04-18T19:21:38.081899" },
    { "id": 36, "action": "customer_unbound", "from_status": "active", "to_status": "active",
      "operator": "sales", "customer_code": "SYNC_C1", "notes": "sales batch sync",
      "created_at": "2026-04-18T19:10:00.000000" }
  ]
}

列衚字段同 §5.2。诊情额倖字段

字段 类型 诎明
supplier_id integer 䟛应商 FK
notes string | null 莊号倇泚
secret_fields string[] 莊号凭据字段名䞍含倌䟋劂 aws_access_key_id、client_secret
history[] array 状态变曎 + 客户猖号变曎历史按 created_at DESC
history[].action string 见䞋衚
history[].from_status / to_status string | null 仅状态类事件非空
history[].operator string | null 觊发者甚户名销售系统同步走 "sales-sync"/机噚莊号名
history[].customer_code string | null 仅 customer_* 事件非空
history[].notes string | null 销售批量同步䌚写 "sales batch sync"

action 枚䞟

倌 含义
created 创建莊号泚老数据可胜记䞺 assigned
suspended 人工停甚
activated 从停甚/倇甚恢倍
customer_bound 绑定䞀䞪客户猖号
customer_unbound 解陀䞀䞪客户猖号
customer_batch_synced 销售批量同步歀事件单独记圕时䜿甚通垞逐䞪写 bound/unbound

5.4 GET /api/service-accounts/{account_id}/costs

角色任意登圕已攟宜。

入参Querystart_date、end_date必填YYYY-MM-DD。

出参真实样䟋截取

{
  "total_cost": 6991.440645000001,
  "total_usage": 5303.442484,
  "services": [
    { "service": "Claude Opus 4.6 (Amazon Bedrock Edition)",
      "cost": 5280.532382, "usage_quantity": 2690.11845, "usage_unit": "Units" },
    { "service": "Claude Sonnet 4.6 (Amazon Bedrock Edition)",
      "cost": 1246.2185079999997, "usage_quantity": 1582.6575039999998, "usage_unit": "Units" }
  ],
  "daily": [
    { "date": "2026-04-01", "cost": 45.23, "usage_quantity": 12.0 }
  ],
  "daily_by_service": [
    { "date": "2026-04-01", "service": "AWS Cost Explorer",
      "cost": 0.01, "usage_quantity": 1.0, "usage_unit": "Requests" }
  ]
}

本接口的 cost/usage 是 JSON numberfloat䞎 /metering/* 䞍同。

字段 诎明
total_cost / total_usage 本莊号圚 date 区闎内的汇总
services[].service 产品名对应 billing_data.product
services[].usage_unit 该产品的甚量单䜍该产品有倚䞪单䜍时后端取其䞀
daily[] 按日莹甚+甚量合计
daily_by_service[] 按日 × 服务拆分甚于堆叠囟

5.5 GET /api/service-accounts/daily-report

角色任意登圕前端『统计』页调甚viewer/ops/finance 郜可访问。

入参Querystart_date、end_date必填provider可选。

出参真实样䟋

[
  {
    "account_id": 88,
    "account_name": "chuhai 自甚",
    "provider": "azure",
    "external_project_id": "09e4b3a6-8159-4f14-b108-e4a18ace9212",
    "date": "2026-04-01",
    "product": "Foundry Models",
    "cost": 2.438673
  }
]

每行 = (莊号, 日期, 产品) 聚合后的 costJSON numberfloat。按 date→external_project_id→product 排序。

字段 诎明
account_id 本地 projects.id
account_name 莊号星瀺名本地 projects.name
provider aws/gcp/azure
external_project_id 云厂商䟧 ID
date / product 莊单日期 + 服务
cost USD

泚歀接口的"每条记圕按 (莊号, 日期, 产品) 聚合"䞚务含义是前端『统计』页。物理挂圚 service_accounts 路由䞋䜆已做端点级权限区分——只读端点列衚 / 诊情 / costs / daily-report任意登圕可甚敏感端点创建/删陀/暂停/恢倍/凭据/批量同步需 cloud_admin。


5.6 GET /api/projects/ 侎 GET /api/projects/{project_id}

暡块projects角色任意登圕读写需 cloud_admin。

/api/projects 是老的 Project CRUD前端䞍䜿甚。和 /api/service-accounts 指向同䞀䞪 projects 衚䜆返回字段和亀互语义略有差匂。AI 通垞调 service-accounts/ 即可这组接口仅䟛历史集成。

列衚入参status、provider、page、page_size。

出参真实样䟋单对象

{
  "id": 7,
  "name": "AWS-Main",
  "supply_source_id": 2,
  "provider": "aws",
  "supplier_name": "神州泰岳",
  "external_project_id": "675139393309",
  "data_source_id": 1,
  "category_id": 2,
  "status": "standby",
  "notes": null,
  "created_at": "2026-04-08T10:19:32.565267",
  "updated_at": "2026-04-18T18:53:30.265359"
}
字段 诎明
data_source_id FK → data_sources对应 /api/data-sources/ 条目
category_id FK → categories莹甚分类 markup_rate可䞺 null
updated_at 最近䞀次 update æ—¶é—Ž
其它字段 同 §5.2

泚意本接口䞍返回 customer_codes、order_method、history。需芁这些甚 /api/service-accounts/{id}。


5.7 GET /api/bills/

暡块bills角色cloud_finance含 admin。

入参QuerymonthYYYY-MM、status、page、page_size。

出参实际调甚该莊号圓月䞺空 []尚未生成莊单。字段衚来自后端 schema

字段 类型 诎明
id integer 莊单 id
month string YYYY-MM
category_id integer 莹甚分类 FK
provider string aws/gcp/azure
original_cost string/number 原始成本 USD
markup_rate string/number 加价率1.0=䞍加价
final_cost string/number 加价后金额
adjustment string/number 人工调敎额正莟皆可
status string draft / confirmed / paid
confirmed_at string | null 确讀时闎
notes string | null 倇泚
created_at string 创建时闎

5.8 GET /api/bills/{bill_id}

单匠月床莊单诊情同䞊结构单对象。


5.9 GET /api/alerts/rule-status

暡块alerts角色任意登圕。

入参Querymonth可选YYYY-MM默讀圓月。

出参空数组 []该环境圓前未配眮告譊规则。字段衚

字段 类型 诎明
rule_id integer 规则 ID
rule_name string 规则星瀺名
threshold_type string monthly_budget / daily_budget / growth_rate / monthly_minimum_commitment 等
threshold_value number 阈倌
actual number 圓前实际倌
pct number actual / threshold_value × 100增长率类型䞺差额 %
triggered boolean 是吊觊发
account_name string 关联的服务莊号名可胜䞺 null衚瀺党局规则
provider string aws/gcp/azure
external_project_id string 云厂商䟧 ID

5.10 GET /api/suppliers/supply-sources/all

暡块suppliers角色cloud_admin敎䞪 suppliers 暡块郜是 admin。

入参supplier_id可选过滀某䞪䟛应商。

出参真实样䟋

[
  { "id": 3, "supplier_id": 1, "supplier_name": "长虹䜳华",
    "provider": "azure", "account_count": 3 },
  { "id": 5, "supplier_id": 2, "supplier_name": "内郚测试䞓甚",
    "provider": "gcp", "account_count": 1 }
]
字段 诎明
id 莧源 IDsupply_sources.id
supplier_id / supplier_name 所属䟛应商
provider 该莧源对应的云
account_count 该莧源䞋的服务莊号数

5.11 GET /api/metering/products

甚途产品去重列衚䞋拉/消歧。

入参provider、account_id、supply_source_id、supplier_name、data_source_id。

出参真实样䟋截取

[
  { "product": "Amazon Simple Notification Service" },
  { "product": "Amazon Simple Queue Service" },
  { "product": "Vertex AI" }
]

单字段 product排重 + 排序。甚于前端 Metering 页的服务过滀䞋拉。


6. P2 可选接口

6.1 GET /api/categories/

角色cloud_admin敎䞪 categories 暡块 admin-only。

出参真实样䟋

[
  { "id": 1, "name": "????", "markup_rate": "1.0000",
    "description": "test",
    "created_at": "2026-04-08T03:43:02.546432",
    "updated_at": "2026-04-08T03:43:02.546432" },
  { "id": 2, "name": "default", "markup_rate": "1.1500",
    "description": "default channel",
    "created_at": "2026-04-08T03:43:28.568331",
    "updated_at": "2026-04-08T10:23:02.934844" }
]
字段 类型 诎明
markup_rate stringDecimal4 䜍小数 加价率
name string 分类名历史数据可胜含占䜍笊

6.2 GET /api/exchange-rates/

角色任意登圕读。入参date可选、from_currency。

出参数组圢劂 [{ from_currency, to_currency, rate, date }]该环境返回 []。

6.3 GET /api/data-sources/

角色cloud_admin。

出参真实样䟋

[
  {
    "id": 1,
    "name": "AWS-675139393309",
    "cloud_account_id": 1,
    "category_id": 2,
    "config": { "account_id": "675139393309" },
    "last_sync_at": "2026-04-18T18:00:19.046951",
    "sync_status": "success",
    "is_active": true,
    "created_at": "2026-04-08T03:48:09.812203"
  }
]
字段 诎明
config 采集噚配眮 JSONBAzure 䌚有 subscription_id/collect_mode/cost_metricAWS 仅 account_id
last_sync_at / sync_status 最近䞀次同步时闎䞎结果

6.4 GET /api/resources/ + GET /api/resources/{id}

角色任意登圕读。入参provider、project_id、resource_type、page、page_size。数据按可见数据源过滀。该环境返回 []。字段衚资源枅单 schemaid、provider、resource_type、resource_id、name、region、project_id、monthly_costnumber最近䞀䞪月䌰算、tags。

6.5 GET /api/billing/export / /api/metering/export

CSV 流匏䞋蜜倧流量适合工具萜盘䞍建议䜜䞺暡型䞊䞋文。入参同 detail响应 Content-Type: text/csv。


7. 销售系统䞓甚接口客户猖号䞋发

面向"销售系统对接"AI 倧脑䞍调甚。暡块service_accounts这䞀条是写操䜜需 cloud_adminservice_accounts 只读端点已攟宜到任意登圕䜆写仍然 admin-only。建议通过 Casdoor client_credentials 拿 token。

7.1 POST /api/service-accounts/customer-assignments/sync

甚途销售系统把"客户猖号 ↔ 服务莊号"关联批量䞋发。幂等。

定䜍键(supplier_name, provider, external_project_id)。匹配䞍到的记圕进 unmatched 返回䞍阻断敎批。

入参Body

{
  "mode": "patch",
  "scope_customer_codes": ["C001", "C002"],
  "assignments": [
    {
      "customer_code": "C001",
      "supplier_name": "xxx 䟛应商",
      "provider": "azure",
      "external_project_id": "5550d5e0-56d3-46b2-8c08-bb9834d8b349"
    }
  ]
}
  • mode=patch只做 upsert从䞍删陀。掚荐䜜䞺默讀暡匏。
  • mode=full对 scope_customer_codes 这批做差分倚删少插。若该字段留空后端回退䞺"按 assignments 里出现的客户猖号䜜䞺 scope"——这种隐匏行䞺建议明确䌠䞀仜。
  • customer_code 自劚 upper().strip() 園䞀化。

出参

{
  "inserted": 1,
  "deleted": 0,
  "unchanged": 0,
  "unmatched": [
    {
      "customer_code": "C002",
      "supplier_name": "bogus",
      "provider": "azure",
      "external_project_id": "does-not-exist",
      "reason": "service account not found"
    }
  ]
}

7.2 PUT /api/service-accounts/{account_id}仅 customer_codes 字段

甚途单䞪服务莊号的客户猖号党量芆盖和 secret_data 同语义undefined 䞍劚[] 枅空[...] 替换。

入参Body

{ "customer_codes": ["C001"] }

出参敎䞪 ServiceAccountDetail见 §5.3。

副䜜甚

  • 新增/删陀䌚写 project_assignment_logsaction=customer_bound / customer_unbound垊 operator。
  • 枅空或銖次绑定郜䌚觊发 _recompute_status自劚把 status 从 active → standby 或反向切换。

8. 犁止对 AI 匀攟的接口

以䞋接口 䞍应 加入 AI 可调工具列衚

类别 路埄 原因
凭据明文 GET /api/service-accounts/{id}/credentials 䌚解密云莊号凭据
写操䜜 所有 POST / PUT / PATCH / DELETE 含同步觊发、莊单调敎、告譊规则变曎、服务莊号变曎等
客户猖号分配销售䞓甚 POST /api/service-accounts/customer-assignments/sync、PUT /api/service-accounts/{id} 垊 customer_codes 仅销售系统走 Casdoor client_credentials 䞋发AI 䞍应写
同步觊发 /api/sync/*陀 GET /last 需 cloud_ops觊发后台任务
Azure 郚眲 /api/azure-deploy/* 需 cloud_admin涉及 ARM Token 䞎资源创建
跚租户授权 /api/azure-consent/* 需 cloud_admin改订阅授权态
讀证管理 /api/admin/users/* · /api/api-keys/* · /api/api-permissions/* 需 cloud_admin管理员䞓甚

service_accounts 暡块混合了只读和凭据接口劂 AI 需芁 §5.2–5.5 的数据工具枅单䞍埗包含 /credentials。


9. 建议调甚顺序

  1. GET /api/health → 连通性探测
  2. GET /api/auth/me → 确讀身仜䞎可见范囎
  3. GET /api/sync/last → 数据新鲜床
  4. GET /api/dashboard/bundle 或 metering/summary → 总览
  5. 钻取 → metering/detail + detail/count 分页或 billing/detail
  6. 䞚务䞻䜓 → service-accounts/ 或 projects/
  7. 是吊超支 → alerts/rule-status

10. 各暡块权限速查

暡块 URL 前猀 所需角色 数据范囎过滀
dashboard /api/dashboard/* viewer / ops / finance含 admin 按可见数据源
billing /api/billing/* 任意登圕 按可见数据源
metering /api/metering/* 任意登圕 支持筛选参数
bills /api/bills/* cloud_finance含 admin 无
sync /api/sync/* cloud_ops含 admin 无
cloud_accounts /api/cloud-accounts/* 读=任意登圕写=cloud_admin 按可见云莊号
resources /api/resources/* 任意登圕 按可见数据源
projects /api/projects/* 读=任意登圕写=cloud_admin 无
alerts /api/alerts/* 读=任意登圕写告譊规则=cloud_ops 无
categories /api/categories/* cloud_admin敎䞪暡块 无
suppliers /api/suppliers/* cloud_admin敎䞪暡块 无
exchange_rates /api/exchange-rates/* 读=任意登圕写=cloud_admin / cloud_finance 无
data_sources /api/data-sources/* cloud_admin敎䞪暡块 无
service_accounts /api/service-accounts/* 读=任意登圕写=cloud_admin 无
azure_deploy /api/azure-deploy/* cloud_admin 无
azure_consent /api/azure-consent/* cloud_admin 无

匿名可访问䞍需芁任䜕凭据/api/health、/api/auth/*、/docs、/redoc、/openapi.json


11. OpenAPI

运行时通过 GET /openapi.json 或 /docs 获取䞎郚眲版本䞀臎的 Schema匿名可访问。若本文䞎 OpenAPI 冲突以 OpenAPI 䞺准。