update
This commit is contained in:
parent
314aaa9d85
commit
0b7c9088ad
@ -6,6 +6,7 @@ async def get_user_balance(ns={}):
|
|||||||
:return: 账户余额(与 getCustomerBalance 返回值一致)
|
:return: 账户余额(与 getCustomerBalance 返回值一致)
|
||||||
"""
|
"""
|
||||||
apikey = ns.get('apikey')
|
apikey = ns.get('apikey')
|
||||||
|
userid = ns.get('userid')
|
||||||
db = DBPools()
|
db = DBPools()
|
||||||
async with db.sqlorContext('kboss') as sor:
|
async with db.sqlorContext('kboss') as sor:
|
||||||
if not apikey:
|
if not apikey:
|
||||||
@ -17,10 +18,15 @@ async def get_user_balance(ns={}):
|
|||||||
if not userid_li:
|
if not userid_li:
|
||||||
return {
|
return {
|
||||||
'status': False,
|
'status': False,
|
||||||
'msg': '用户未同步到系统'
|
'msg': 'apikey无效,请联系管理员'
|
||||||
}
|
}
|
||||||
userid = userid_li[0]['userid']
|
# userid = userid_li[0]['userid']
|
||||||
user = await sor.R('users', {'id': userid})
|
user = await sor.R('users', {'id': userid})
|
||||||
|
if not user:
|
||||||
|
return {
|
||||||
|
'status': False,
|
||||||
|
'msg': '用户不存在'
|
||||||
|
}
|
||||||
orgid = await sor.R('organization', {'id': user[0]['orgid']})
|
orgid = await sor.R('organization', {'id': user[0]['orgid']})
|
||||||
balance = await getCustomerBalance(sor, orgid[0]['id'])
|
balance = await getCustomerBalance(sor, orgid[0]['id'])
|
||||||
return {
|
return {
|
||||||
|
|||||||
@ -224,20 +224,13 @@ async def process_user_billing(ns={}):
|
|||||||
:return: dict,含 status、msg;成功时含 orderid、amount
|
:return: dict,含 status、msg;成功时含 orderid、amount
|
||||||
"""
|
"""
|
||||||
apikey = ns.get('apikey')
|
apikey = ns.get('apikey')
|
||||||
|
userid = ns.get('userid')
|
||||||
providername = ns.get('providername')
|
providername = ns.get('providername')
|
||||||
productname = ns.get('productname')
|
productname = ns.get('productname')
|
||||||
amount = ns.get('amount')
|
amount = ns.get('amount')
|
||||||
use_saleprotocol = ns.get('use_saleprotocol', False)
|
use_saleprotocol = ns.get('use_saleprotocol', False)
|
||||||
quantity = int(ns.get('quantity', 1))
|
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:
|
try:
|
||||||
amount = round(float(amount), 2)
|
amount = round(float(amount), 2)
|
||||||
except (TypeError, ValueError):
|
except (TypeError, ValueError):
|
||||||
@ -252,6 +245,14 @@ async def process_user_billing(ns={}):
|
|||||||
if not provider_list:
|
if not provider_list:
|
||||||
return {'status': False, 'msg': '厂商不存在 %s' % providername}
|
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})
|
user_list = await sor.R('users', {'id': userid})
|
||||||
if not user_list:
|
if not user_list:
|
||||||
return {'status': False, 'msg': '用户不存在 %s' % userid}
|
return {'status': False, 'msg': '用户不存在 %s' % userid}
|
||||||
|
|||||||
@ -18,10 +18,10 @@ async def sync_cn_ai_user(ns={}):
|
|||||||
name = user_info[0]['name']
|
name = user_info[0]['name']
|
||||||
email = user_info[0]['email']
|
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_key = '2i68AZ81di_q5f8AySDrJ'
|
||||||
already_sync_user_dappid = 'cndemo'
|
already_sync_user_dappid = 'cndemo'
|
||||||
|
|
||||||
|
|
||||||
# 目标URL
|
# 目标URL
|
||||||
url = "https://ai.atvoe.com/rbac/usersync"
|
url = "https://ai.atvoe.com/rbac/usersync"
|
||||||
# url = 'https://ai.atvoe.com/tmp/env.dspy'
|
# url = 'https://ai.atvoe.com/tmp/env.dspy'
|
||||||
@ -52,11 +52,11 @@ async def sync_cn_ai_user(ns={}):
|
|||||||
# 发送POST请求
|
# 发送POST请求
|
||||||
async with session.post(url, headers=headers, data=json.dumps(payload)) as response:
|
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()
|
result_sysnc = await response.json()
|
||||||
|
|
||||||
if not result_sysnc.get('status') == 'success':
|
if not result_sysnc.get('status') == 'success':
|
||||||
print(f"同步用户失败: {result_sysnc}")
|
debug(f"sync_cn_ai_user同步用户失败: {result_sysnc}")
|
||||||
return {
|
return {
|
||||||
'status': False
|
'status': False
|
||||||
}
|
}
|
||||||
@ -71,30 +71,31 @@ async def sync_cn_ai_user(ns={}):
|
|||||||
|
|
||||||
records = await sor.R('user_api_keys', {'opc_apikey': apikey})
|
records = await sor.R('user_api_keys', {'opc_apikey': apikey})
|
||||||
if records:
|
if records:
|
||||||
print(f"用户{payload['user']['id']}已存在")
|
debug(f"sync_cn_ai_user用户{payload['user']['id']}已存在")
|
||||||
return {
|
return {
|
||||||
'status': False,
|
'status': False,
|
||||||
'msg': f'用户opc_apikey已存在, {result_sysnc}'
|
'msg': '用户opc_apikey已存在'
|
||||||
}
|
}
|
||||||
print(f"{result_sysnc}")
|
|
||||||
await sor.C('user_api_keys', {
|
await sor.C('user_api_keys', {
|
||||||
'userid': userid,
|
'userid': userid,
|
||||||
'opc_apikey': apikey,
|
'opc_apikey': apikey,
|
||||||
'appid': appid,
|
'appid': appid,
|
||||||
'secretkey': secretkey,
|
'secretkey': secretkey,
|
||||||
|
'action': 'sync',
|
||||||
'expire_time': None,
|
'expire_time': None,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
debug(f"sync_cn_ai_user用户{payload['user']['id']}同步成功")
|
||||||
return {
|
return {
|
||||||
'status': True,
|
'status': True,
|
||||||
'msg': '用户同步成功'
|
'msg': '用户同步成功'
|
||||||
}
|
}
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"同步用户失败: {e}")
|
debug(f"sync_cn_ai_user{userid}同步用户失败: {e}")
|
||||||
return {
|
return {
|
||||||
'status': False,
|
'status': False,
|
||||||
'msg': f"同步用户失败: {e}"
|
'msg': f"sync_cn_ai_user{userid}同步用户失败: {e}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -113,7 +113,7 @@ async def registerUser(ns):
|
|||||||
|
|
||||||
if ns.get('password'):
|
if ns.get('password'):
|
||||||
# 至少8位,包含大小写字母、特殊字符、数字
|
# 至少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位,包含大小写字母、特殊字符、数字'}
|
return {'status': False, 'msg': '密码至少8位,包含大小写字母、特殊字符、数字'}
|
||||||
|
|
||||||
if not ns.get('codeid'):
|
if not ns.get('codeid'):
|
||||||
|
|||||||
@ -543,7 +543,7 @@ async def get_firstpage_product_tree(ns={}):
|
|||||||
"product_service": [
|
"product_service": [
|
||||||
{
|
{
|
||||||
"id": "1",
|
"id": "1",
|
||||||
"firTitle": "云",
|
"firTitle": "基础云",
|
||||||
"secMenu": [
|
"secMenu": [
|
||||||
{
|
{
|
||||||
"id": "10",
|
"id": "10",
|
||||||
@ -576,43 +576,77 @@ async def get_firstpage_product_tree(ns={}):
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id': "2", 'firTitle': "算", 'secMenu': [
|
'id': "2", 'firTitle': "TOKEN市集", 'secMenu': [
|
||||||
{
|
|
||||||
'id': '21', 'secTitle': '智算', 'thrMenu': [
|
|
||||||
{
|
{
|
||||||
'id': '211',
|
# 'id': '21', 'secTitle': '智算', 'thrMenu': [
|
||||||
'thrTitle': None,
|
# {
|
||||||
'value': [#{'id': '2111', 'name': '容器云'},
|
# 'id': '211',
|
||||||
{'id': '2113', 'name': '裸金属'},
|
# 'thrTitle': None,
|
||||||
#{'id': '2114', 'name': '裸金属-910B'},
|
# 'value': [#{'id': '2111', 'name': '容器云'},
|
||||||
{'id': '2115', 'name': '一体机-昆仑芯'},
|
# {'id': '2113', 'name': '裸金属'},
|
||||||
{'id': '2112', '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': "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",
|
# "id": "4",
|
||||||
# "firTitle": "模型",
|
# "firTitle": "模型",
|
||||||
@ -623,38 +657,38 @@ async def get_firstpage_product_tree(ns={}):
|
|||||||
# "firTitle": "服务",
|
# "firTitle": "服务",
|
||||||
# "secMenu": []
|
# "secMenu": []
|
||||||
# },
|
# },
|
||||||
{
|
# {
|
||||||
"id": "6",
|
# "id": "6",
|
||||||
"firTitle": "用",
|
# "firTitle": "用",
|
||||||
"secMenu": [
|
# "secMenu": [
|
||||||
{
|
# {
|
||||||
"id": "61",
|
# "id": "61",
|
||||||
"secTitle": "AI应用",
|
# "secTitle": "AI应用",
|
||||||
"thrMenu": [
|
# "thrMenu": [
|
||||||
{
|
# {
|
||||||
"id": "611",
|
# "id": "611",
|
||||||
"thrTitle": "智慧医疗",
|
# "thrTitle": "智慧医疗",
|
||||||
"value": [
|
# "value": [
|
||||||
{
|
# {
|
||||||
"id": "6111",
|
# "id": "6111",
|
||||||
"name": "灵医智能体"
|
# "name": "灵医智能体"
|
||||||
}
|
# }
|
||||||
]
|
# ]
|
||||||
},
|
# },
|
||||||
{
|
# {
|
||||||
"id": "612",
|
# "id": "612",
|
||||||
"thrTitle": "智慧客服",
|
# "thrTitle": "智慧客服",
|
||||||
"value": [
|
# "value": [
|
||||||
{
|
# {
|
||||||
"id": "6112",
|
# "id": "6112",
|
||||||
"name": "客悦·智能客服"
|
# "name": "客悦·智能客服"
|
||||||
}
|
# }
|
||||||
]
|
# ]
|
||||||
},
|
# },
|
||||||
]
|
# ]
|
||||||
},
|
# },
|
||||||
]
|
# ]
|
||||||
}
|
# }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
db = DBPools()
|
db = DBPools()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user