diff --git a/b/cntoai/get_user_balance.dspy b/b/cntoai/get_user_balance.dspy index bbec0cb..dfc3d55 100644 --- a/b/cntoai/get_user_balance.dspy +++ b/b/cntoai/get_user_balance.dspy @@ -6,6 +6,7 @@ async def get_user_balance(ns={}): :return: 账户余额(与 getCustomerBalance 返回值一致) """ apikey = ns.get('apikey') + userid = ns.get('userid') db = DBPools() async with db.sqlorContext('kboss') as sor: if not apikey: @@ -17,10 +18,15 @@ async def get_user_balance(ns={}): if not userid_li: return { 'status': False, - 'msg': '用户未同步到系统' + 'msg': 'apikey无效,请联系管理员' } - userid = userid_li[0]['userid'] + # userid = userid_li[0]['userid'] user = await sor.R('users', {'id': userid}) + if not user: + return { + 'status': False, + 'msg': '用户不存在' + } orgid = await sor.R('organization', {'id': user[0]['orgid']}) balance = await getCustomerBalance(sor, orgid[0]['id']) return { diff --git a/b/cntoai/process_user_billing.dspy b/b/cntoai/process_user_billing.dspy index f443765..5cb17c1 100644 --- a/b/cntoai/process_user_billing.dspy +++ b/b/cntoai/process_user_billing.dspy @@ -224,20 +224,13 @@ async def process_user_billing(ns={}): :return: dict,含 status、msg;成功时含 orderid、amount """ apikey = ns.get('apikey') + userid = ns.get('userid') providername = ns.get('providername') productname = ns.get('productname') amount = ns.get('amount') use_saleprotocol = ns.get('use_saleprotocol', False) quantity = int(ns.get('quantity', 1)) - userid_li = await sor.R('user_api_keys', {'opc_apikey': apikey}) - if not userid_li: - return { - 'status': False, - 'msg': '用户未同步到系统' - } - userid = userid_li[0]['userid'] - try: amount = round(float(amount), 2) except (TypeError, ValueError): @@ -252,6 +245,14 @@ async def process_user_billing(ns={}): if not provider_list: return {'status': False, 'msg': '厂商不存在 %s' % providername} + userid_li = await sor.R('user_api_keys', {'opc_apikey': apikey}) + if not userid_li: + return { + 'status': False, + 'msg': 'apikey无效,请联系管理员' + } + # userid = userid_li[0]['userid'] + user_list = await sor.R('users', {'id': userid}) if not user_list: return {'status': False, 'msg': '用户不存在 %s' % userid} diff --git a/b/cntoai/sync_cn_ai_user.dspy b/b/cntoai/sync_cn_ai_user.dspy index 48383ed..e199667 100644 --- a/b/cntoai/sync_cn_ai_user.dspy +++ b/b/cntoai/sync_cn_ai_user.dspy @@ -18,10 +18,10 @@ async def sync_cn_ai_user(ns={}): name = user_info[0]['name'] email = user_info[0]['email'] + debug(f"sync_cn_ai_user同步用户: {userid}, {orgid}, {username}, {name}, {email}") already_sync_user_key = '2i68AZ81di_q5f8AySDrJ' already_sync_user_dappid = 'cndemo' - # 目标URL url = "https://ai.atvoe.com/rbac/usersync" # url = 'https://ai.atvoe.com/tmp/env.dspy' @@ -52,11 +52,11 @@ async def sync_cn_ai_user(ns={}): # 发送POST请求 async with session.post(url, headers=headers, data=json.dumps(payload)) as response: # 打印响应状态码 - print(f"状态码: {response.status}") + debug(f"sync_cn_ai_user状态码: {response.status}") result_sysnc = await response.json() if not result_sysnc.get('status') == 'success': - print(f"同步用户失败: {result_sysnc}") + debug(f"sync_cn_ai_user同步用户失败: {result_sysnc}") return { 'status': False } @@ -71,30 +71,31 @@ async def sync_cn_ai_user(ns={}): records = await sor.R('user_api_keys', {'opc_apikey': apikey}) if records: - print(f"用户{payload['user']['id']}已存在") + debug(f"sync_cn_ai_user用户{payload['user']['id']}已存在") return { 'status': False, - 'msg': f'用户opc_apikey已存在, {result_sysnc}' + 'msg': '用户opc_apikey已存在' } - print(f"{result_sysnc}") await sor.C('user_api_keys', { 'userid': userid, 'opc_apikey': apikey, 'appid': appid, 'secretkey': secretkey, + 'action': 'sync', 'expire_time': None, }) + debug(f"sync_cn_ai_user用户{payload['user']['id']}同步成功") return { 'status': True, 'msg': '用户同步成功' } except Exception as e: - print(f"同步用户失败: {e}") + debug(f"sync_cn_ai_user{userid}同步用户失败: {e}") return { 'status': False, - 'msg': f"同步用户失败: {e}" + 'msg': f"sync_cn_ai_user{userid}同步用户失败: {e}" } diff --git a/b/customer/registerUser.dspy b/b/customer/registerUser.dspy index e7a4a25..0118a5a 100644 --- a/b/customer/registerUser.dspy +++ b/b/customer/registerUser.dspy @@ -113,7 +113,7 @@ async def registerUser(ns): if ns.get('password'): # 至少8位,包含大小写字母、特殊字符、数字 - if len(ns.get('password')) < 8 or not re.search(r'[a-zA-Z]', ns.get('password')) or not re.search(r'[0-9]', ns.get('password')) or not re.search(r'[!@#$%^&*()_+{}|:"<>?]', ns.get('password')): + if len(ns.get('password')) < 8 or not re.search(r'[a-zA-Z]', ns.get('password')) or not re.search(r'[0-9]', ns.get('password')): return {'status': False, 'msg': '密码至少8位,包含大小写字母、特殊字符、数字'} if not ns.get('codeid'): diff --git a/b/product/get_firstpage_product_tree.dspy b/b/product/get_firstpage_product_tree.dspy index 63c29b0..2e899fc 100644 --- a/b/product/get_firstpage_product_tree.dspy +++ b/b/product/get_firstpage_product_tree.dspy @@ -543,7 +543,7 @@ async def get_firstpage_product_tree(ns={}): "product_service": [ { "id": "1", - "firTitle": "云", + "firTitle": "基础云", "secMenu": [ { "id": "10", @@ -576,43 +576,77 @@ async def get_firstpage_product_tree(ns={}): ] }, { - 'id': "2", 'firTitle': "算", 'secMenu': [ - { - 'id': '21', 'secTitle': '智算', 'thrMenu': [ + 'id': "2", 'firTitle': "TOKEN市集", 'secMenu': [ { - 'id': '211', - 'thrTitle': None, - 'value': [#{'id': '2111', 'name': '容器云'}, - {'id': '2113', 'name': '裸金属'}, - #{'id': '2114', 'name': '裸金属-910B'}, - {'id': '2115', 'name': '一体机-昆仑芯'}, - {'id': '2112', 'name': '一体机-天数智芯'},] - }, - ], - }, - ] - }, - { - "id": "3", - "firTitle": "网", - "secMenu": [ - { - "id": "31", - "secTitle": "算力网络", - "thrMenu": [ - { - "id": "311", - "thrTitle": None, - "value": [{'id': '3111', 'name': '互联网专线'}, - {'id': '3121', 'name': 'SDWAN'}, - {'id': '3131', 'name': 'DCI'}, - {'id': '3141', 'name': 'AI专线'} - ] - } - ] + # 'id': '21', 'secTitle': '智算', 'thrMenu': [ + # { + # 'id': '211', + # 'thrTitle': None, + # 'value': [#{'id': '2111', 'name': '容器云'}, + # {'id': '2113', 'name': '裸金属'}, + # #{'id': '2114', 'name': '裸金属-910B'}, + # {'id': '2115', 'name': '一体机-昆仑芯'}, + # {'id': '2112', 'name': '一体机-天数智芯'},] + # }, + # ], }, ] }, + { + 'id': "2", 'firTitle': "元境", 'secMenu': [ + # { + # 'id': '21', 'secTitle': '智算', 'thrMenu': [ + # { + # 'id': '211', + # 'thrTitle': None, + # 'value': [#{'id': '2111', 'name': '容器云'}, + # {'id': '2113', 'name': '裸金属'}, + # #{'id': '2114', 'name': '裸金属-910B'}, + # {'id': '2115', 'name': '一体机-昆仑芯'}, + # {'id': '2112', 'name': '一体机-天数智芯'},] + # }, + # ], + # }, + ] + }, + # { + # 'id': "2", 'firTitle': "算", 'secMenu': [ + # { + # 'id': '21', 'secTitle': '智算', 'thrMenu': [ + # { + # 'id': '211', + # 'thrTitle': None, + # 'value': [#{'id': '2111', 'name': '容器云'}, + # {'id': '2113', 'name': '裸金属'}, + # #{'id': '2114', 'name': '裸金属-910B'}, + # {'id': '2115', 'name': '一体机-昆仑芯'}, + # {'id': '2112', 'name': '一体机-天数智芯'},] + # }, + # ], + # }, + # ] + # }, + # { + # "id": "3", + # "firTitle": "网", + # "secMenu": [ + # { + # "id": "31", + # "secTitle": "算力网络", + # "thrMenu": [ + # { + # "id": "311", + # "thrTitle": None, + # "value": [{'id': '3111', 'name': '互联网专线'}, + # {'id': '3121', 'name': 'SDWAN'}, + # {'id': '3131', 'name': 'DCI'}, + # {'id': '3141', 'name': 'AI专线'} + # ] + # } + # ] + # }, + # ] + # }, # { # "id": "4", # "firTitle": "模型", @@ -623,38 +657,38 @@ async def get_firstpage_product_tree(ns={}): # "firTitle": "服务", # "secMenu": [] # }, - { - "id": "6", - "firTitle": "用", - "secMenu": [ - { - "id": "61", - "secTitle": "AI应用", - "thrMenu": [ - { - "id": "611", - "thrTitle": "智慧医疗", - "value": [ - { - "id": "6111", - "name": "灵医智能体" - } - ] - }, - { - "id": "612", - "thrTitle": "智慧客服", - "value": [ - { - "id": "6112", - "name": "客悦·智能客服" - } - ] - }, - ] - }, - ] - } + # { + # "id": "6", + # "firTitle": "用", + # "secMenu": [ + # { + # "id": "61", + # "secTitle": "AI应用", + # "thrMenu": [ + # { + # "id": "611", + # "thrTitle": "智慧医疗", + # "value": [ + # { + # "id": "6111", + # "name": "灵医智能体" + # } + # ] + # }, + # { + # "id": "612", + # "thrTitle": "智慧客服", + # "value": [ + # { + # "id": "6112", + # "name": "客悦·智能客服" + # } + # ] + # }, + # ] + # }, + # ] + # } ] } db = DBPools()