refactor: dispatch resource_ref_id to resource module interfaces
- product.json: add resource_ref_id field - core.py: _get_ref_id() helper extracts resource_ref_id from product - All dispatch methods pass resource_ref_id instead of product_code - Resource modules no longer need product_code→internal_id mapping
This commit is contained in:
parent
811de2a863
commit
038162b5d9
@ -45,6 +45,12 @@
|
||||
"length": 64,
|
||||
"nullable": "no"
|
||||
},
|
||||
{
|
||||
"name": "resource_ref_id",
|
||||
"title": "资源模块内部ID",
|
||||
"type": "str",
|
||||
"length": 64
|
||||
},
|
||||
{
|
||||
"name": "brief_intro",
|
||||
"title": "产品简介",
|
||||
|
||||
@ -1187,6 +1187,13 @@ class ProductManager:
|
||||
|
||||
return None, product, f'资源模块 {resource_module} 未注册 product_interface'
|
||||
|
||||
def _get_ref_id(self, product):
|
||||
"""Extract resource_ref_id from product record, with fallback error."""
|
||||
ref_id = product.get('resource_ref_id')
|
||||
if not ref_id:
|
||||
return None, '产品未绑定资源模块内部ID(resource_ref_id为空)'
|
||||
return ref_id, None
|
||||
|
||||
async def get_product_display_info(self, product_id=None, product_code=None):
|
||||
"""获取产品定价展示信息(通过资源模块接口)。"""
|
||||
iface, product, err = await self._get_product_interface(
|
||||
@ -1198,7 +1205,10 @@ class ProductManager:
|
||||
if not fn:
|
||||
return {'success': False, 'message': '资源模块未实现 get_product_display'}
|
||||
|
||||
return await fn(product['product_code'])
|
||||
ref_id, err = self._get_ref_id(product)
|
||||
if err:
|
||||
return {'success': False, 'message': err}
|
||||
return await fn(ref_id)
|
||||
|
||||
async def check_product_availability(self, product_id=None, product_code=None,
|
||||
user_org_id=None):
|
||||
@ -1212,7 +1222,10 @@ class ProductManager:
|
||||
if not fn:
|
||||
return {'available': False, 'reason': '资源模块未实现 check_product_availability'}
|
||||
|
||||
return await fn(product['product_code'], user_org_id)
|
||||
ref_id, err = self._get_ref_id(product)
|
||||
if err:
|
||||
return {'available': False, 'reason': err}
|
||||
return await fn(ref_id, user_org_id)
|
||||
|
||||
async def check_product_consumable(self, product_id=None, product_code=None,
|
||||
user_id=None, user_org_id=None):
|
||||
@ -1228,13 +1241,18 @@ class ProductManager:
|
||||
return {'consumable': False, 'reason': '资源模块未实现 check_product_consumable',
|
||||
'min_balance': 0, 'pricing_available': False}
|
||||
|
||||
ref_id, err = self._get_ref_id(product)
|
||||
if err:
|
||||
return {'consumable': False, 'reason': err,
|
||||
'min_balance': 0, 'pricing_available': False}
|
||||
|
||||
if not user_id:
|
||||
env = ServerEnv()
|
||||
user_id = await env.get_user()
|
||||
if not user_org_id:
|
||||
user_org_id = self._get_current_org_id()
|
||||
|
||||
return await fn(product['product_code'], user_id, user_org_id)
|
||||
return await fn(ref_id, user_id, user_org_id)
|
||||
|
||||
async def execute_product(self, product_id=None, product_code=None,
|
||||
request_data=None, user_id=None, user_org_id=None):
|
||||
@ -1249,14 +1267,17 @@ class ProductManager:
|
||||
return {'success': False, 'message': '资源模块未实现 execute_product_service',
|
||||
'status': 'FAILED'}
|
||||
|
||||
ref_id, err = self._get_ref_id(product)
|
||||
if err:
|
||||
return {'success': False, 'message': err, 'status': 'FAILED'}
|
||||
|
||||
if not user_id:
|
||||
env = ServerEnv()
|
||||
user_id = await env.get_user()
|
||||
if not user_org_id:
|
||||
user_org_id = self._get_current_org_id()
|
||||
|
||||
return await fn(product['product_code'], user_id, user_org_id,
|
||||
request_data or {})
|
||||
return await fn(ref_id, user_id, user_org_id, request_data or {})
|
||||
|
||||
async def execute_product_stream(self, product_id=None, product_code=None,
|
||||
request_data=None, user_id=None,
|
||||
@ -1276,14 +1297,19 @@ class ProductManager:
|
||||
'error': '资源模块未实现 execute_product_service_stream'}
|
||||
return _noimpl_gen()
|
||||
|
||||
ref_id, err = self._get_ref_id(product)
|
||||
if err:
|
||||
async def _ref_err_gen():
|
||||
yield {'chunk': None, 'usage_data': None, 'done': True, 'error': err}
|
||||
return _ref_err_gen()
|
||||
|
||||
if not user_id:
|
||||
env = ServerEnv()
|
||||
user_id = await env.get_user()
|
||||
if not user_org_id:
|
||||
user_org_id = self._get_current_org_id()
|
||||
|
||||
return fn(product['product_code'], user_id, user_org_id,
|
||||
request_data or {})
|
||||
return fn(ref_id, user_id, user_org_id, request_data or {})
|
||||
|
||||
async def calculate_product_cost(self, product_id=None, product_code=None,
|
||||
usage_data=None, user_org_id=None):
|
||||
@ -1297,7 +1323,11 @@ class ProductManager:
|
||||
if not fn:
|
||||
return {'success': False, 'message': '资源模块未实现 calculate_product_cost'}
|
||||
|
||||
ref_id, err = self._get_ref_id(product)
|
||||
if err:
|
||||
return {'success': False, 'message': err}
|
||||
|
||||
if not user_org_id:
|
||||
user_org_id = self._get_current_org_id()
|
||||
|
||||
return await fn(product['product_code'], usage_data or {}, user_org_id)
|
||||
return await fn(ref_id, usage_data or {}, user_org_id)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user