7.1 KiB
7.1 KiB
In [ ]:
# 根据订单号,查询实际包裹尺寸,实际包裹实重,实际包裹体积重, # bill账单给头程单价,实际尾端计费重,预估尾端成本,尾端附加费 import os import pandas as pd from utils.Package import Package,Package_group from utils.gtools import MySQLconnect from utils.countryOperator import OperateCountry from utils.logisticsBill import BillFactory, Billing import requests import json ods = MySQLconnect("ods") engine = ods.engine() def get_package_info_by_sql(order_df): packages = Package_group() packages_str = "" for index, row in order_df.iterrows(): if row['包裹数据'] is None: return None,"" row['包裹数据'] = json.loads(row['包裹数据']) item_list = [ {key: float(value) for key, value in package.items()} for package in row['包裹数据'].values() ] for item in item_list: if item['长'] == 0 or item['宽'] == 0 or item['高'] == 0 or item['重量'] == 0: return None,"" package = Package(row['SKU'], item['长'], item['宽'], item['高'], item['重量']) packages.add_package(package) # 实际包裹尺寸 package_str = f"{ item['重量']}|{item['长']}*{ item['宽']}*{item['高']}" packages_str += package_str + "," return packages,packages_str def get_biaozhun_bill(opCountry,order_id,postcode,convey,amount): print(order_id) # 取标准包裹数据 sql = """SELECT order_id, opl.SKU, 包裹数据 FROM dws.order_product_list opl LEFT JOIN ads.sku_package_new spi ON opl.SKU =spi.SKU WHERE order_id = %s AND opl.order_product_id REGEXP "[0-9]{15}_[0-9]*$" """ order_package_date = pd.read_sql(sql, engine, params=(order_id,)) print(order_package_date) if order_package_date['包裹数据'] is None: return "",0,0,0,0,0,"","",0 # 取账单数据 beizhu = amount conveys = 1 if convey == "海运" else 0 try: packages,packages_str = get_package_info_by_sql(order_package_date) if packages is None: return "",0,0,0,0,0,"","",0 bill = Billing(str(order_id),opCountry,packages,postcode,company_name=None,head_type=conveys,beizhu=beizhu) print(bill) tail_amount = bill.bill_dict()["预测尾端"] total_weight = sum([p.weight/1000 for p in packages.packages]) _type = bill.bill_dict()["尾端渠道"] head_amount = bill.bill_dict()["预测头程CNY"] total_amount = bill.bill_dict()["总金额USD"] volume_weight = bill.bill_dict()["体积重"] per_head = bill.bill_dict()["头程单价"] other_detail = bill.get_other_fee() return packages_str,total_weight,volume_weight,per_head,head_amount,tail_amount,other_detail,_type,total_amount except ZeroDivisionError as e: print(e) return "",0,0,0,0,0,"","",0
In [ ]:
sql = """SELECT CONCAT("[",GROUP_CONCAT(pr.包裹号),"]") AS package_group , ol.order_id , ol.postcode, ol.delivery_country, ol.convey, ols.`货币`, ols.`订单总额`, ols.支付方式, ol.order_price_dollar FROM parcel pr LEFT JOIN dwd.order_list ol ON ol.order_id = pr.订单号 left JOIN ods.order_list_supplement ols ON ol.order_id = ols.订单号 WHERE order_id IN (250111180013924 , 250114055637547 , 250113020908795 , 250113090041954 , 250112064002567 , 250112105838284 , 250111100026591 , 250112131002633 , 250113090613446 , 250115164425035 , 250111231028179 , 250117024809584 , 250117005435286 , 250117100906322 , 250113100616085 , 250117053614017 , 250113011509113 , 250119211402563 , 250119153413596 , 250117234053287 , 250127001437947 , 250127175227235 , 250129051002053 , 250121125819971 , 250122061036006 , 250129112827456 , 250121212647006 , 250124213014331 , 250202204402848 , 250130194409986 , 250128015414537 , 250201063711441 , 250129075002066 ) GROUP BY ol.order_id """ order_id_df = pd.read_sql(sql,engine) order_id_df[["包裹尺寸详情","实重","体积重","头程单价","头程费用(CNY)","尾端费用(当地货币)","尾端附加费","尾端渠道","总金额(USD)"]] = order_id_df.apply(lambda x: get_biaozhun_bill(OperateCountry(x['delivery_country']), x['order_id'], x['postcode'], x['convey'], x['order_price_dollar']),axis=1,result_type='expand')
In [ ]:
In [ ]:
order_id_df.to_clipboard()
In [ ]:
#