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