167 lines
7.6 KiB
Plaintext
167 lines
7.6 KiB
Plaintext
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 |