ylrz_saas_his_scrm构建一套可在 SaaS 场景下稳定运行的统一计费能力,支持:
权限点:
fee:billing:admin:list权限点:
fee:billing:tenant:list当前实现的收费项如下:
FLOW:流量计费FLOW_POSTPAID 单价。CALL:通话计费CALL_OUT、CALL_IN;AI_CALL。TOKEN_SOP:SOP Token 计费。TOKEN_AI_REPLY:AI 回复 Token 计费。ADD_WECHAT:按加微次数计费。OPEN_ACCOUNT:开户费OPEN_ACCOUNT_AI;OPEN_ACCOUNT_NON_AI。planCode + version;PUBLISHED 状态方案可用于计费;租户绑定项:
tenantType(AI / NON_AI)billingMode(PREPAID / POSTPAID)planCodeplanVersion未绑定方案时禁止执行计费。
usage_event.event_id 作为幂等键:
重复事件上报不重复计费。
statement_id is null);event_type 聚合;statement_id,避免重复出账。usage_event;eventId);billing_detail;tenant_wallet_txn;已按“两页面模型”实现:
saas/billingAdmin/indexsaas/billingTenant/indextenantId。以下示例统一返回结构基于项目常见 R:
{
"code": 200,
"msg": "操作成功",
"data": {},
"rows": []
}
POST /api/fee/plan/create请求示例:
{
"planCode": "STANDARD",
"planName": "标准方案",
"version": 1,
"remark": "默认标准方案"
}
响应示例:
{
"code": 200,
"msg": "创建成功"
}
POST /api/fee/plan/item/save请求示例:
{
"planCode": "STANDARD",
"version": 1,
"items": [
{
"itemCode": "FLOW_POSTPAID",
"unit": "KB",
"unitPrice": 0.2,
"tokenUnit": 100000,
"minChargeUnit": 1,
"enabled": 1
},
{
"itemCode": "CALL_OUT",
"unit": "MIN",
"unitPrice": 0.3,
"enabled": 1
}
]
}
POST /api/fee/plan/flow-tier/save请求示例:
{
"planCode": "STANDARD",
"version": 1,
"tiers": [
{
"minPrepayAmount": 0,
"maxPrepayAmount": 100000,
"unitPrice": 0.1,
"sortNo": 1
},
{
"minPrepayAmount": 100000,
"maxPrepayAmount": 200000,
"unitPrice": 0.08,
"sortNo": 2
}
]
}
POST /api/fee/plan/publish?planCode=STANDARD&version=1POST /api/fee/tenant/bind-plan请求示例:
{
"tenantId": 1001,
"tenantType": "NON_AI",
"billingMode": "PREPAID",
"planCode": "STANDARD",
"planVersion": 1
}
POST /api/fee/tenant/change-billing-mode请求示例:
{
"tenantId": 1001,
"billingMode": "POSTPAID"
}
POST /api/fee/tenant/change-type请求示例:
{
"tenantId": 1001,
"tenantType": "AI"
}
GET /api/fee/wallet/{tenantId}响应示例:
{
"code": 200,
"data": {
"tenantId": 1001,
"balanceAmount": 12345.67,
"totalRecharge": 50000,
"totalCost": 37654.33
}
}
POST /api/fee/wallet/recharge请求示例:
{
"tenantId": 1001,
"amount": 10000,
"bizNo": "RC202604210001",
"remark": "线下转账充值"
}
POST /api/fee/usage/report请求示例:
{
"eventId": "EVT_20260421_0001",
"tenantId": 1001,
"eventType": "CALL",
"subType": "CALL_OUT",
"bizId": "ORDER_001",
"usageValue": 125,
"usageUnit": "SECOND",
"occurredAt": "2026-04-21 15:30:00",
"extJson": {
"isAiCall": true
}
}
响应示例:
{
"code": 200,
"data": {
"eventId": "EVT_20260421_0001",
"charged": true,
"amount": 2.4,
"message": "计费成功"
}
}
GET /api/fee/billing/detail/listtenantId(可选)示例:
GET /api/fee/billing/detail/list(全部)GET /api/fee/billing/detail/list?tenantId=1001(指定租户)GET /api/fee/billing/detail/myPOST /api/fee/statement/generatetenantId、periodType、periodStart、periodEnd示例:
POST /api/fee/statement/generate?tenantId=1001&periodType=MONTH&periodStart=2026-04-01%2000:00:00&periodEnd=2026-04-30%2023:59:59
响应示例:
{
"code": 200,
"data": {
"statementId": 88,
"statementNo": "ST1713693258123",
"periodType": "MONTH",
"periodStart": "2026-04-01 00:00:00",
"periodEnd": "2026-04-30 23:59:59",
"totalAmount": 1299.35
}
}
fee_planfee_plan_itemfee_plan_flow_tiertenant_info(新增计费相关字段)
tenant_typebilling_modefee_plan_codefee_plan_versiontenant_wallettenant_wallet_txnusage_eventbilling_detailbilling_statementbilling_statement_itemtenantId;usage_event 入库量与重复率;