logistics/取订单标准物流费.ipynb

310 lines
12 KiB
Plaintext
Raw Permalink Normal View History

2025-06-17 13:40:20 +08:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"# 根据订单号,查询实际包裹尺寸,实际包裹实重,实际包裹体积重,\n",
"# bill账单给头程单价实际尾端计费重预估尾端成本尾端附加费\n",
"\n",
"import os\n",
"import pandas as pd\n",
"from utils.Package import Package,Package_group\n",
"from utils.gtools import MySQLconnect\n",
"from utils.countryOperator import OperateCountry\n",
"from utils.logisticsBill import BillFactory, Billing\n",
"import requests\n",
"import json\n",
"ods = MySQLconnect(\"ods\")\n",
"engine = ods.engine()\n",
"def get_package_info_by_sql(order_df):\n",
" packages = Package_group()\n",
" packages_str = \"\"\n",
" for index, row in order_df.iterrows():\n",
" if row['包裹数据'] is None:\n",
" return None,\"\"\n",
" row['包裹数据'] = json.loads(row['包裹数据'])\n",
" item_list = [\n",
" {key: float(value) for key, value in package.items()} for package in row['包裹数据'].values()\n",
" ]\n",
" for item in item_list:\n",
" if item['长'] == 0 or item['宽'] == 0 or item['高'] == 0 or item['重量'] == 0:\n",
" return None,\"\"\n",
" package = Package(row['SKU'], item['长'], item['宽'], item['高'], item['重量'])\n",
" packages.add_package(package)\n",
" # 实际包裹尺寸\n",
" package_str = f\"{ item['重量']}|{item['长']}*{ item['宽']}*{item['高']}\"\n",
" packages_str += package_str + \",\"\n",
" return packages,packages_str\n",
"\n",
"def get_biaozhun_bill(opCountry,order_id,postcode,convey,amount):\n",
" print(order_id)\n",
" # 取标准包裹数据\n",
" sql = \"\"\"SELECT\n",
" order_id,\n",
" opl.SKU,\n",
" 包裹数据\n",
" FROM\n",
" dws.order_product_list opl\n",
" LEFT JOIN ads.sku_package_new spi ON opl.SKU =spi.SKU\n",
" WHERE\n",
" order_id = %s\n",
" AND\n",
" opl.order_product_id REGEXP \"[0-9]{15}_[0-9]*$\"\n",
" \"\"\"\n",
" order_package_date = pd.read_sql(sql, engine, params=(order_id,))\n",
" print(order_package_date)\n",
" if order_package_date['包裹数据'] is None:\n",
" return \"\",0,0,0,0,0,\"\",\"\",0\n",
" # 取账单数据\n",
" beizhu = amount\n",
" conveys = 1 if convey == \"海运\" else 0\n",
" try:\n",
" packages,packages_str = get_package_info_by_sql(order_package_date)\n",
" if packages is None:\n",
" return \"\",0,0,0,0,0,\"\",\"\",0\n",
" bill = Billing(str(order_id),opCountry,packages,postcode,company_name=None,head_type=conveys,beizhu=beizhu)\n",
" print(bill)\n",
" tail_amount = bill.bill_dict()[\"预测尾端\"]\n",
" total_weight = sum([p.weight/1000 for p in packages.packages])\n",
" _type = bill.bill_dict()[\"尾端渠道\"]\n",
" head_amount = bill.bill_dict()[\"预测头程CNY\"]\n",
" total_amount = bill.bill_dict()[\"总金额USD\"]\n",
" volume_weight = bill.bill_dict()[\"体积重\"]\n",
" per_head = bill.bill_dict()[\"头程单价\"]\n",
" other_detail = bill.get_other_fee()\n",
" return packages_str,total_weight,volume_weight,per_head,head_amount,tail_amount,other_detail,_type,total_amount\n",
" except ZeroDivisionError as e:\n",
" print(e)\n",
" return \"\",0,0,0,0,0,\"\",\"\",0"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"250111100026591\n",
" order_id SKU 包裹数据\n",
"0 250111100026591 2206000579 None\n",
"250111180013924\n",
" order_id SKU 包裹数据\n",
"0 250111180013924 2204856252 None\n",
"250111231028179\n",
" order_id SKU 包裹数据\n",
"0 250111231028179 2205859024 None\n",
"250112064002567\n",
" order_id SKU 包裹数据\n",
"0 250112064002567 2205793890 None\n",
"250112105838284\n",
" order_id SKU 包裹数据\n",
"0 250112105838284 2205594270 None\n",
"250112131002633\n",
" order_id SKU 包裹数据\n",
"0 250112131002633 2205979853 None\n",
"250113011509113\n",
" order_id SKU 包裹数据\n",
"0 250113011509113 2205380959 None\n",
"250113020908795\n",
" order_id SKU 包裹数据\n",
"0 250113020908795 2201598238 None\n",
"250113090041954\n",
" order_id SKU 包裹数据\n",
"0 250113090041954 2205665390 None\n",
"250113090613446\n",
" order_id SKU 包裹数据\n",
"0 250113090613446 2201598243 None\n",
"250113100616085\n",
" order_id SKU 包裹数据\n",
"0 250113100616085 2204814402 None\n",
"250114055637547\n",
" order_id SKU 包裹数据\n",
"0 250114055637547 2205905912 None\n",
"250115164425035\n",
" order_id SKU 包裹数据\n",
"0 250115164425035 2205672778 None\n",
"250117005435286\n",
" order_id SKU 包裹数据\n",
"0 250117005435286 2205415197 None\n",
"1 250117005435286 2205415198 None\n",
"2 250117005435286 2205415200 None\n",
"250117024809584\n",
" order_id SKU 包裹数据\n",
"0 250117024809584 2203733825 None\n",
"250117053614017\n",
" order_id SKU 包裹数据\n",
"0 250117053614017 2205969448 None\n",
"250117100906322\n",
" order_id SKU 包裹数据\n",
"0 250117100906322 2201598255 None\n",
"250117234053287\n",
" order_id SKU 包裹数据\n",
"0 250117234053287 2205565699 None\n",
"250119153413596\n",
" order_id SKU 包裹数据\n",
"0 250119153413596 2205878673 None\n",
"250119211402563\n",
" order_id SKU 包裹数据\n",
"0 250119211402563 2205520825 None\n",
"250121125819971\n",
" order_id SKU 包裹数据\n",
"0 250121125819971 2202074323 None\n",
"250121212647006\n",
" order_id SKU 包裹数据\n",
"0 250121212647006 2205788907 None\n",
"250122061036006\n",
" order_id SKU 包裹数据\n",
"0 250122061036006 2206135206 None\n",
"250124213014331\n",
" order_id SKU 包裹数据\n",
"0 250124213014331 2205788467 None\n",
"250127001437947\n",
" order_id SKU 包裹数据\n",
"0 250127001437947 2205511833 None\n",
"250127175227235\n",
" order_id SKU 包裹数据\n",
"0 250127175227235 2205780462 None\n",
"250128015414537\n",
" order_id SKU 包裹数据\n",
"0 250128015414537 2206279144 None\n",
"250129051002053\n",
" order_id SKU 包裹数据\n",
"0 250129051002053 2205511832 None\n",
"250129075002066\n",
" order_id SKU 包裹数据\n",
"0 250129075002066 2205905094 None\n",
"250129112827456\n",
" order_id SKU 包裹数据\n",
"0 250129112827456 2205550813 None\n",
"250130194409986\n",
" order_id SKU 包裹数据\n",
"0 250130194409986 2205025464 None\n",
"1 250130194409986 2205025465 None\n",
"2 250130194409986 2205025466 None\n",
"250201063711441\n",
" order_id SKU 包裹数据\n",
"0 250201063711441 2205524464 None\n",
"250202204402848\n",
" order_id SKU 包裹数据\n",
"0 250202204402848 2205780463 None\n"
]
}
],
"source": [
"sql = \"\"\"SELECT\n",
" CONCAT(\"[\",GROUP_CONCAT(pr.包裹号),\"]\") AS package_group ,\n",
" ol.order_id ,\n",
" ol.postcode,\n",
" ol.delivery_country,\n",
" ol.convey,\n",
"\t\t\t\tols.`货币`,\n",
"\t\t\t\tols.`订单总额`,\n",
"\t\t\t\tols.支付方式,\n",
" ol.order_price_dollar\n",
" FROM\n",
" parcel pr\n",
" LEFT JOIN dwd.order_list ol ON ol.order_id = pr.订单号 \n",
"\t\t\t\tleft JOIN ods.order_list_supplement ols ON ol.order_id = ols.订单号\n",
" WHERE\n",
" order_id IN (250111180013924 ,\n",
"250114055637547 ,\n",
"250113020908795 ,\n",
"250113090041954 ,\n",
"250112064002567 ,\n",
"250112105838284 ,\n",
"250111100026591 ,\n",
"250112131002633 ,\n",
"250113090613446 ,\n",
"250115164425035 ,\n",
"250111231028179 ,\n",
"250117024809584 ,\n",
"250117005435286 ,\n",
"250117100906322 ,\n",
"250113100616085 ,\n",
"250117053614017 ,\n",
"250113011509113 ,\n",
"250119211402563 ,\n",
"250119153413596 ,\n",
"250117234053287 ,\n",
"250127001437947 ,\n",
"250127175227235 ,\n",
"250129051002053 ,\n",
"250121125819971 ,\n",
"250122061036006 ,\n",
"250129112827456 ,\n",
"250121212647006 ,\n",
"250124213014331 ,\n",
"250202204402848 ,\n",
"250130194409986 ,\n",
"250128015414537 ,\n",
"250201063711441 ,\n",
"250129075002066 \n",
"\n",
"\n",
")\n",
"GROUP BY ol.order_id\n",
"\"\"\"\n",
"\n",
"order_id_df = pd.read_sql(sql,engine)\n",
"order_id_df[[\"包裹尺寸详情\",\"实重\",\"体积重\",\"头程单价\",\"头程费用(CNY)\",\"尾端费用(当地货币)\",\"尾端附加费\",\"尾端渠道\",\"总金额(USD)\"]] = order_id_df.apply(lambda x: get_biaozhun_bill(OperateCountry(x['delivery_country']),\n",
" x['order_id'],\n",
" x['postcode'], \n",
" x['convey'],\n",
" x['order_price_dollar']),axis=1,result_type='expand')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"order_id_df.to_clipboard()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "base",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}