kboss/b/baiduc/update_baidu_order_list.dspy
2025-07-16 14:27:17 +08:00

97 lines
4.5 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 get_order_list_base_page(baidu_id, pageNo=1, pageSize=500):
ns = {'queryAccountId': baidu_id, 'pageNo': pageNo, 'pageSize': pageSize}
method = 'POST'
ns_format = '&'.join(['%s=%s' % (k, v) for k, v in ns.items()])
url = 'https://billing.baidubce.com/v1/order/list?%s' % ns_format
header = {
"Host": "billing.baidubce.com",
"ContentType": "application/json;charset=UTF-8"
}
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_orders = await res.json()
return data_orders
async def update_baidu_order_list(ns={}):
"""
ns = {'queryAccountId': '139fc7a23b314596ad78b6bb8e7c1503', 'orderType': 'REFUND'}
:return:
"""
db = DBPools()
async with db.sqlorContext('kboss') as sor:
username = None
# 更新机构下全部用户订单信息
if ns.get('orgid'):
users_find_sql = """SELECT DISTINCT b.baidu_id FROM organization o INNER JOIN users u ON o.id = u.orgid INNER JOIN baidu_users b ON u.id = b.user_id WHERE o.parentid = '%s' AND b.del_flg = '0';""" % ns.get('orgid')
users = await sor.sqlExe(users_find_sql, {})
# 更新个人订单信息
elif ns.get('userid'):
users = await sor.R('baidu_users', {'user_id': ns['userid']})
username_li = await sor.R('users', {'id': ns['userid']})
username = username_li[0]['username'] if username_li else None
else:
users = []
update_count = 0
add_count = 0
for baidu_id in users:
data_orders = await get_order_list_base_page(baidu_id['baidu_id'], pageNo=1, pageSize=1000)
page_num_count = int(data_orders['totalCount'] / data_orders['pageSize']) + 1
for page_num in range(1, page_num_count + 1):
data_orders = await get_order_list_base_page(baidu_id['baidu_id'], pageNo=page_num, pageSize=1000)
orders = data_orders['orders']
for item in orders:
updatetime = await time_convert(item.get('updateTime')) if item.get('updateTime') else None
ns_dic = {
"id": uuid(),
"orderid": item.get("uuid"),
"ordertype": item.get("type"),
"accountid": item.get("accountId"),
"servicetype": item.get("serviceType"),
"producttype": item.get("productType"),
"shortids": ','.join(item['shortIds']) if item.get('shortIds') else '',
"price": item.get("price"),
"status": item.get("status"),
"autoreneworder": '1' if item.get("autoRenewOrder") else '0',
"createtime": await time_convert(item.get('createTime')) if item.get(
'createTime') else None,
"updatetime": updatetime
}
ns_exist_order = {
'orderid': item.get("uuid")
}
exist_order = await sor.R('baidu_orders', ns_exist_order)
if exist_order and exist_order[0]['updatetime'] != updatetime:
update_refund_sql = """UPDATE baidu_orders SET price = '%s', status = '%s', updatetime = '%s' WHERE orderid = '%s';""" % \
(item.get("price"), item.get("status"), updatetime,
item.get("uuid"))
await sor.sqlExe(update_refund_sql, {})
update_count += 1
if not exist_order:
await sor.C('baidu_orders', ns_dic)
add_count += 1
return {
'status': True,
'msg': '同步数据成功, 新增 %s 条, 更新 %s 条' % (add_count, update_count),
'data': {
'username': username
}
}
ret = await update_baidu_order_list(params_kw)
return ret