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

167 lines
7.6 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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