118 lines
4.6 KiB
Plaintext
118 lines
4.6 KiB
Plaintext
async def time_convert(resoucetime=None):
|
|
if not resoucetime:
|
|
return
|
|
utc_time = datetime.datetime.strptime(resoucetime, "%Y-%m-%dT%H:%M:%SZ").replace(tzinfo=datetime.timezone.utc)
|
|
beijing_time = utc_time.astimezone(datetime.timezone(datetime.timedelta(hours=8)))
|
|
return beijing_time.strftime("%Y-%m-%d %H:%M:%S")
|
|
|
|
async def baidu_query_by_expire_time(ns={}):
|
|
if ns.get('userid'):
|
|
userid = ns.get('userid')
|
|
else:
|
|
userid = await get_user()
|
|
db = DBPools()
|
|
async with db.sqlorContext('kboss') as sor:
|
|
baiduids = await sor.R('baidu_users', {'user_id': userid})
|
|
if baiduids:
|
|
baiduid = baiduids[0]['baidu_id']
|
|
else:
|
|
return {
|
|
'status': False,
|
|
'msg': 'User not synchronized'
|
|
}
|
|
ns['queryAccountId'] = baiduid
|
|
ns['pageNo'] = int(ns.get('pageno', 1))
|
|
ns['pageSize'] = int(ns.get('pagesize', 100))
|
|
method = 'POST'
|
|
ns_format = '&'.join(['%s=%s' % (k, v) for k, v in ns.items()])
|
|
url = 'https://billing.baidubce.com/v1/resource/queryByExpireTime?%s' % ns_format
|
|
header = {
|
|
"Host": "billing.baidubce.com"
|
|
}
|
|
header = await get_auth_header(method=method, url=url, header=header)
|
|
async with aiohttp_client.request(
|
|
method=method,
|
|
url=url,
|
|
headers=header,
|
|
json=ns) as res:
|
|
data_ = await res.json()
|
|
print('data_', data_)
|
|
if data_.get('pageSize'):
|
|
return {
|
|
'status': True,
|
|
'msg': 'get baidu resource expire time success',
|
|
'data': data_
|
|
}
|
|
else:
|
|
return {
|
|
'status': False,
|
|
'msg': 'get baidu resource expire time failed',
|
|
'data': data_
|
|
}
|
|
|
|
async def calculate_time_diff(time_str=None):
|
|
# 将字符串时间转换为 datetime 对象
|
|
# time_str = '2025-07-13T02:27:43Z'
|
|
# 按照指定格式解析字符串时间
|
|
given_time = datetime.datetime.strptime(time_str, '%Y-%m-%dT%H:%M:%SZ').replace(tzinfo=datetime.timezone.utc)
|
|
|
|
# 获取当前时间
|
|
current_time = datetime.datetime.now(datetime.timezone.utc)
|
|
|
|
# 计算时间差
|
|
time_difference = given_time - current_time
|
|
|
|
# 提取天数
|
|
days_difference = time_difference.days
|
|
return days_difference
|
|
|
|
async def get_resource_expire_time(ns={}):
|
|
if ns.get('userid'):
|
|
userid = ns.get('userid')
|
|
else:
|
|
userid = await get_user()
|
|
data = []
|
|
baidu_resource_data = await baidu_query_by_expire_time(ns)
|
|
if baidu_resource_data.get('data'):
|
|
data_result = baidu_resource_data['data']['result'] if baidu_resource_data['data'].get('result') else []
|
|
# if not data_result:
|
|
# return {
|
|
# 'status': True,
|
|
# 'msg': '无资源数据',
|
|
# 'data': str(baidu_resource_data['data'])
|
|
# }
|
|
for baidubaidu_resource in data_result:
|
|
baidubaidu_resource['id'] = uuid()
|
|
baidubaidu_resource['name'] = baidubaidu_resource['serviceTypeName']
|
|
baidubaidu_resource['instanceid'] = baidubaidu_resource['shortId']
|
|
baidubaidu_resource['expiretime'] = await time_convert(baidubaidu_resource['expireTime'])
|
|
baidubaidu_resource['days'] = await calculate_time_diff(baidubaidu_resource['expireTime'])
|
|
|
|
# 读取数据库表product,匹配跳转链接
|
|
db = DBPools()
|
|
async with db.sqlorContext('kboss') as sor:
|
|
find_sql = """select * from product where providerpid='baidu_%s' and del_flg='0';""" % baidubaidu_resource['serviceType']
|
|
product_li = await sor.sqlExe(find_sql, {})
|
|
spec_note_li = json.loads(product_li[0]['spec_note']) if product_li else []
|
|
for spec_note in spec_note_li:
|
|
if spec_note.get('configName') == 'listUrl':
|
|
baidubaidu_resource['list_url'] = spec_note.get('value')
|
|
break
|
|
else:
|
|
baidubaidu_resource['list_url'] = ''
|
|
|
|
data.append(baidubaidu_resource)
|
|
return {
|
|
'status': True,
|
|
'msg': 'get resouce expire time success',
|
|
'data': data,
|
|
# 分页
|
|
'pagination': {
|
|
'total': baidu_resource_data['data'].get('totalCount'),
|
|
'page_size': baidu_resource_data['data'].get('pageSize'),
|
|
'current_page': baidu_resource_data['data'].get('pageNo')
|
|
}
|
|
}
|
|
|
|
ret = await get_resource_expire_time(params_kw)
|
|
return ret |