From 06bcecafa208a9f70bbde4b4374e9afbb51e7b5d Mon Sep 17 00:00:00 2001 From: ymq Date: Wed, 26 Aug 2026 17:17:22 +0800 Subject: [PATCH] =?UTF-8?q?feat(entitlement):=20execute=5Fproduct=5Fservic?= =?UTF-8?q?e=20=E8=BF=94=E5=9B=9E=E8=B4=A6=E5=8F=B7=E6=9D=83=E7=9B=8A?= =?UTF-8?q?=E4=BF=A1=E6=81=AF(=E6=9C=89=E6=95=88=E6=9C=9F/=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E7=A9=BA=E9=97=B4=E9=85=8D=E9=A2=9D)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../product_interface.cpython-310.pyc | Bin 0 -> 6448 bytes account_resource/product_interface.py | 15 +++++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 account_resource/__pycache__/product_interface.cpython-310.pyc diff --git a/account_resource/__pycache__/product_interface.cpython-310.pyc b/account_resource/__pycache__/product_interface.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..50f58caaca95175c71a6e954753d1fdef3bb4373 GIT binary patch literal 6448 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 literal 0 HcmV?d00001 diff --git a/account_resource/product_interface.py b/account_resource/product_interface.py index 7df21af..1bae003 100644 --- a/account_resource/product_interface.py +++ b/account_resource/product_interface.py @@ -134,10 +134,21 @@ async def execute_product_service(resource_ref_id, user_id, user_org_id, request getattr(spec, 'spec_code'), charge_mode, user_id, user_org_id, subscription_id=(request_data or {}).get('subscription_id', ''), quantity=(request_data or {}).get('quantity', 1)) + # 权益信息(供产品层写 product_subscription) + days = {'trial': 7, 'month': 30, 'year': 365}.get(charge_mode, 30) return {'success': True, - 'message': '账号开通成功(权益生效逻辑待接入)', + 'message': '账号开通成功', 'status': 'SUCCESS', - 'usage': rec} + 'usage': rec, + 'entitlement': { + 'charge_mode': charge_mode, + 'duration_days': days, + 'workspace_max': int(getattr(spec, 'workspace_max', 0) or 0), + 'workspace_gb': float(getattr(spec, 'workspace_gb', 0) or 0), + 'concurrent_task': int(getattr(spec, 'concurrent_task', 0) or 0), + 'member_max': int(getattr(spec, 'member_max', 0) or 0), + 'gpu_allowed': getattr(spec, 'gpu_allowed', '') or '', + }} async def execute_product_service_stream(resource_ref_id, user_id, user_org_id, request_data):