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,
|
"length": 64,
|
||||||
"nullable": "no"
|
"nullable": "no"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "resource_ref_id",
|
||||||
|
"title": "资源模块内部ID",
|
||||||
|
"type": "str",
|
||||||
|
"length": 64
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "brief_intro",
|
"name": "brief_intro",
|
||||||
"title": "产品简介",
|
"title": "产品简介",
|
||||||
|
|||||||
@ -1187,6 +1187,13 @@ class ProductManager:
|
|||||||
|
|
||||||
return None, product, f'资源模块 {resource_module} 未注册 product_interface'
|
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):
|
async def get_product_display_info(self, product_id=None, product_code=None):
|
||||||
"""获取产品定价展示信息(通过资源模块接口)。"""
|
"""获取产品定价展示信息(通过资源模块接口)。"""
|
||||||
iface, product, err = await self._get_product_interface(
|
iface, product, err = await self._get_product_interface(
|
||||||
@ -1198,7 +1205,10 @@ class ProductManager:
|
|||||||
if not fn:
|
if not fn:
|
||||||
return {'success': False, 'message': '资源模块未实现 get_product_display'}
|
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,
|
async def check_product_availability(self, product_id=None, product_code=None,
|
||||||
user_org_id=None):
|
user_org_id=None):
|
||||||
@ -1212,7 +1222,10 @@ class ProductManager:
|
|||||||
if not fn:
|
if not fn:
|
||||||
return {'available': False, 'reason': '资源模块未实现 check_product_availability'}
|
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,
|
async def check_product_consumable(self, product_id=None, product_code=None,
|
||||||
user_id=None, user_org_id=None):
|
user_id=None, user_org_id=None):
|
||||||
@ -1228,13 +1241,18 @@ class ProductManager:
|
|||||||
return {'consumable': False, 'reason': '资源模块未实现 check_product_consumable',
|
return {'consumable': False, 'reason': '资源模块未实现 check_product_consumable',
|
||||||
'min_balance': 0, 'pricing_available': False}
|
'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:
|
if not user_id:
|
||||||
env = ServerEnv()
|
env = ServerEnv()
|
||||||
user_id = await env.get_user()
|
user_id = await env.get_user()
|
||||||
if not user_org_id:
|
if not user_org_id:
|
||||||
user_org_id = self._get_current_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,
|
async def execute_product(self, product_id=None, product_code=None,
|
||||||
request_data=None, user_id=None, user_org_id=None):
|
request_data=None, user_id=None, user_org_id=None):
|
||||||
@ -1249,14 +1267,17 @@ class ProductManager:
|
|||||||
return {'success': False, 'message': '资源模块未实现 execute_product_service',
|
return {'success': False, 'message': '资源模块未实现 execute_product_service',
|
||||||
'status': 'FAILED'}
|
'status': 'FAILED'}
|
||||||
|
|
||||||
|
ref_id, err = self._get_ref_id(product)
|
||||||
|
if err:
|
||||||
|
return {'success': False, 'message': err, 'status': 'FAILED'}
|
||||||
|
|
||||||
if not user_id:
|
if not user_id:
|
||||||
env = ServerEnv()
|
env = ServerEnv()
|
||||||
user_id = await env.get_user()
|
user_id = await env.get_user()
|
||||||
if not user_org_id:
|
if not user_org_id:
|
||||||
user_org_id = self._get_current_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, request_data or {})
|
||||||
request_data or {})
|
|
||||||
|
|
||||||
async def execute_product_stream(self, product_id=None, product_code=None,
|
async def execute_product_stream(self, product_id=None, product_code=None,
|
||||||
request_data=None, user_id=None,
|
request_data=None, user_id=None,
|
||||||
@ -1276,14 +1297,19 @@ class ProductManager:
|
|||||||
'error': '资源模块未实现 execute_product_service_stream'}
|
'error': '资源模块未实现 execute_product_service_stream'}
|
||||||
return _noimpl_gen()
|
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:
|
if not user_id:
|
||||||
env = ServerEnv()
|
env = ServerEnv()
|
||||||
user_id = await env.get_user()
|
user_id = await env.get_user()
|
||||||
if not user_org_id:
|
if not user_org_id:
|
||||||
user_org_id = self._get_current_org_id()
|
user_org_id = self._get_current_org_id()
|
||||||
|
|
||||||
return fn(product['product_code'], user_id, user_org_id,
|
return fn(ref_id, user_id, user_org_id, request_data or {})
|
||||||
request_data or {})
|
|
||||||
|
|
||||||
async def calculate_product_cost(self, product_id=None, product_code=None,
|
async def calculate_product_cost(self, product_id=None, product_code=None,
|
||||||
usage_data=None, user_org_id=None):
|
usage_data=None, user_org_id=None):
|
||||||
@ -1297,7 +1323,11 @@ class ProductManager:
|
|||||||
if not fn:
|
if not fn:
|
||||||
return {'success': False, 'message': '资源模块未实现 calculate_product_cost'}
|
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:
|
if not user_org_id:
|
||||||
user_org_id = self._get_current_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