async def query_order_detail(sor=None, orderNumber=None, main_table_id=None, customerid=None): # if not sor: # db = DBPools() # async with db.sqlorContext('kboss') as sor: try: # parameters = QueryOrderParameters(regionId='cn-north-1', orderNumber=orderNumber) parameters = JDAPI.QueryOrderRequest.QueryOrderParameters(regionId='cn-north-1', orderNumber=orderNumber) parameters.setIncludeDetail(True) # request = QueryOrderRequest(parameters) request = JDAPI.QueryOrderRequest.QueryOrderRequest(parameters) # resp = client.send(request) resp = JDAPI.OrderClient.send(request) order_detail_dic = resp.result appname = order_detail_dic['data']['appName'] amount = 0 for order_detail in order_detail_dic['data']['orderItemDetails']: prd_info_list = await sor.R('product', {'providerpid': 'jd_' + order_detail['serviceCode'], 'del_flg': '0'}) # 在产品清单中没有的产品 按原价处理 if not prd_info_list: real_discount = 1.0 prd_id_list = await sor.R('product', {'providerpid': 'jd_originalprice', 'del_flg': '0'}) prd_id = prd_id_list[0]['id'] provider_id = prd_id_list[0]['providerid'] else: prd_id = prd_info_list[0]['id'] provider_id = prd_info_list[0]['providerid'] # 查找产品折扣 get_discount_dic = { 'providerid': provider_id, 'prefix': 'jd', 'servicetype': order_detail['serviceCode'], 'user_orgid': customerid, } real_discount = (await get_discount(get_discount_dic))['discount'] spec_id = uuid() order_goods_id = uuid() specdata_dic = { 'id': spec_id, 'sourceid': order_goods_id, 'spec_data': str(order_detail['extraInfo']), } single_prd_amount = order_detail['actualFee'] * real_discount * order_detail['quantity'] amount += single_prd_amount order_goods_dic = { 'id': order_goods_id, 'orderid': main_table_id, 'productid': prd_id, 'spec_id': spec_id, 'quantity': order_detail['quantity'], 'providerid': provider_id, 'chargeduration': order_detail['chargeDuration'], 'unit': order_detail['unit'], 'chargemode': order_detail['chargeMode'], 'servicename': appname + order_detail['serviceName'], 'list_price': order_detail['actualFee'], 'discount': real_discount, 'price': order_detail['actualFee'] * real_discount, 'amount': order_detail['actualFee'] * real_discount * order_detail['quantity'], 'end_date': order_detail['endTime'][:10] if order_detail.get('endTime') else None } # 判断订单详情是否存在 exist_zi_table = await sor.R('order_goods', {'orderid': main_table_id, 'productid': prd_id}) if exist_zi_table: order_goods_dic['id'] = exist_zi_table[0]['id'] await sor.U('order_goods', order_goods_dic) else: await sor.C('specificdata', specdata_dic) await sor.C('order_goods', order_goods_dic) # 更新bz_order中产品总价 await sor.U('bz_order', {'id': main_table_id, 'amount': amount, 'ordertype': order_detail_dic['data']['orderType']}) except Exception as e: return { 'status': False, 'err_msg': str(e) } async def get_order(page=1): """ 待支付 取消代支付 status都是3 未支付 订单详情status=NO_PAY 订单取消 status=5 已取消 订单详情status=CANCELED :param page: :return: """ # 订单状态:1-已支付,2-失败,3-未支付,4-处理中,5-已取消 # 代付状态: 0-已申请 1-已代付 2-已驳回 3-已取消 # cn-north-1 不影响其他地区 # parameters = GetPartnerOrderListParameters(regionId='cn-north-1') parameters = JDAPI.GetPartnerOrderListRequest.GetPartnerOrderListParameters(regionId='cn-north-1') parameters.setStartTime(int(time.time() * 1000) - 311040000 * 10) parameters.setEndTime(int(time.time() * 1000)) # parameters.setStatus(3) # parameters.setAgentPayStatus(0) parameters.setPageNumber(page) # request = GetPartnerOrderListRequest(parameters) request = JDAPI.GetPartnerOrderListRequest.GetPartnerOrderListRequest(parameters) # resp = client.send(request) resp = JDAPI.OrderClient.send(request) # print(resp.result) return resp.result async def get_partner_order_list(ns={}): db = DBPools() async with db.sqlorContext('kboss') as sor: try: order_result = await get_order(page=ns.get('page')) order_total_page = order_result['totalPage'] order_list = order_result['resultList'] for main_table in order_list: # 去重 exist_flag = 0 order_exist = await sor.R('bz_order', {'provider_orderid': main_table['orderNumber']}) if order_exist: exist_flag = 1 # if main_table['orderNumber'] != '12320169218886594': # continue userid_li = (await sor.R('jd_users', {'pin': main_table['pin']})) if userid_li: userid = userid_li[0]['userid'] else: continue customerid = (await sor.R('users', {'id': userid}))[0]['orgid'] if exist_flag: main_table_id = order_exist[0]['id'] else: main_table_id = uuid() # 订单状态和本地做映射 jd_order_status = main_table['status'] if jd_order_status == '3': local_stauts = 0 elif jd_order_status == '5': local_stauts = 3 elif jd_order_status == '1': local_stauts = 1 else: local_stauts = 100 main_table_dic = { 'id': main_table_id, 'servicename': main_table['appName'] + '-' + main_table['serviceName'], 'customerid': customerid, 'order_date': main_table['createTime'][:10], 'source': '京东云', 'order_status': local_stauts, 'business_op': 'BUY', 'originalprice': main_table['totalFee'], # 'amount': '', 'provider_orderid': main_table['orderNumber'], 'userid': userid, } print('当前页: ****************', ns.get('page')) if not exist_flag: await sor.C('bz_order', main_table_dic) # 子表插入 计费 await query_order_detail(sor=sor, orderNumber=main_table['orderNumber'], main_table_id=main_table_id, customerid=customerid) if order_total_page > int(ns.get('page')): await get_partner_order_list({'page': int(ns['page']) + 1}) except Exception as e: return { 'status': False, 'err_msg': str(e), 'err_line': e.__traceback__.tb_lineno } ret = await get_partner_order_list(params_kw) return ret