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

129 lines
7.4 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_new_update_resouce(ns={}):
"""
百度新购订单刷新定时器
用于解决NEED_CONFIRM后订单刷新不及时 不能获取资源ID 资源起始日期的问题
:param ns:
:return:
"""
db = DBPools()
async with db.sqlorContext('kboss') as sor:
try:
crontab_list = await sor.R('baidu_cron_job', {'source': 'baidu', 'ordertype': 'NEW', 'reason': 'buy success', 'refresh': '0'})
for cronjob in crontab_list:
order_id = cronjob['orderid']
userid = cronjob['userid']
baidu_users = await sor.R('baidu_users', {'user_id': userid,'del_flg':'0'})
# user = await sor.R('users', {'id': userid})
# orgid = await sor.R('organization', {'id': user[0]['orgid']})
nss = {'uuids': [order_id], 'queryAccountId': baidu_users[0]['baidu_id']}
ns_format = '&'.join(['%s=%s' % (k, v) for k, v in ns.items()])
url = 'https://billing.baidubce.com/v1/order/getByUuid?%s' % ns_format
method = 'POST'
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=nss) as res:
data_ = await res.json()
with open('baidu_new_order_after_confirm.txt', 'a+') as f:
f.write(json.dumps(data_) + '\n')
orders = data_['orders']
for item in orders:
order_items = item['orderItems']
for order_info in order_items:
resourceids = ','.join(order_info['shortIds']) if order_info.get('shortIds') else ''
if not resourceids:
ns_cron_job = {
'id': cronjob['id'],
'feedback': '没有获取到资源ID'
}
await sor.U('baidu_cron_job', ns_cron_job)
return
resourcestarttime = await time_convert(order_info.get('resourceStartTime')) if order_info.get(
'resourceStartTime') else None
resourceendtime = await time_convert(order_info.get('resourceEndTime')) if order_info.get(
'resourceEndTime') else None
order_key = order_info['key']
if resourceendtime:
update_order_goods_sql = """ UPDATE order_goods og
JOIN bz_order o ON og.orderid = o.id
SET
og.resourceids = '%s',
og.resourcestarttime = '%s',
og.resourceendtime = '%s'
WHERE
og.orderkey = '%s'
AND o.provider_orderid = '%s'; """ \
% (resourceids, resourcestarttime, resourceendtime, order_key, order_id)
else:
update_order_goods_sql = """ UPDATE order_goods og
JOIN bz_order o ON og.orderid = o.id
SET
og.resourceids = '%s',
og.resourcestarttime = '%s'
WHERE
og.orderkey = '%s'
AND o.provider_orderid = '%s'; """ \
% (resourceids, resourcestarttime, order_key, order_id)
await sor.sqlExe(update_order_goods_sql, {})
if resourceendtime:
update_customer_goods_sql = """ UPDATE customer_goods og
JOIN bz_order o ON og.orderid = o.id
SET
og.resourceid = '%s',
og.start_date = '%s',
og.expire_date = '%s'
WHERE
og.orderkey = '%s'
AND o.provider_orderid = '%s'; """ \
% (resourceids, resourcestarttime, resourceendtime, order_key, order_id)
else:
update_customer_goods_sql = """ UPDATE customer_goods og
JOIN bz_order o ON og.orderid = o.id
SET
og.resourceid = '%s',
og.start_date = '%s'
WHERE
og.orderkey = '%s'
AND o.provider_orderid = '%s'; """ \
% (resourceids, resourcestarttime, order_key, order_id)
await sor.sqlExe(update_customer_goods_sql, {})
ns_cron_job = {
'id': cronjob['id'],
'refresh': '1',
'feedback': 'success'
}
await sor.U('baidu_cron_job', ns_cron_job)
return {
'status': True,
'msg': 'update success'
}
return {
'status': True,
'msg': '没有找到需要更新数据'
}
except Exception as e:
return {
'status': False,
'msg': str(e)
}
ret = await baidu_new_update_resouce(params_kw)
return ret