This commit is contained in:
Wenxixi 2025-11-26 14:34:04 +08:00
parent 71cbd4b04d
commit 5b9e4fbc9f
11 changed files with 240120 additions and 211728 deletions

File diff suppressed because it is too large Load Diff

View File

@ -137,30 +137,30 @@ def air_order_price(packages):
return express_fee, express_type
# 美国售价2025
def call_sell_price_2025(price, packages):
def call_sell_price_2025(price, package_dict):
"""
price:采购价
package_dict:包裹数据
head_type:头程类型 海运/空运
"""
# packages = Package_group()
# def extract_number(value):
# # 提取字符串中的第一个数字
# match = re.search(r"[-+]?\d*\.\d+|\d+", str(value))
# return float(match.group()) if match else 0.0
packages = Package_group()
def extract_number(value):
# 提取字符串中的第一个数字
match = re.search(r"[-+]?\d*\.\d+|\d+", str(value))
return float(match.group()) if match else 0.0
# for key, package in package_dict.items():
# package['长'] = extract_number(package['长'])
# package['宽'] = extract_number(package['宽'])
# package['高'] = extract_number(package['高'])
# package['重量'] = extract_number(package['重量'])
for key, package in package_dict.items():
package[''] = extract_number(package[''])
package[''] = extract_number(package[''])
package[''] = extract_number(package[''])
package['重量'] = extract_number(package['重量'])
# if package['长'] == 0 or package['宽'] == 0 or package['高'] == 0 or package['重量'] == 0:
# return 0,0,0
# packages.add_package(Package(key,package['长'], package['宽'], package['高'], package['重量']))
if package[''] == 0 or package[''] == 0 or package[''] == 0 or package['重量'] == 0:
return 0,0,0
packages.add_package(Package(key,package[''], package[''], package[''], package['重量']))
# if packages is None:
# return 0,0,0
if packages is None:
return 0,0,0
litfad = SellPriceBase.litfad_2025(packages, price,1)
# 修改版本,网站售价
sell_price = litfad.cal_sell_price_2025()

View File

@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "code",
"execution_count": 4,
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@ -83,119 +83,9 @@
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": null,
"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"
]
}
],
"outputs": [],
"source": [
"sql = \"\"\"SELECT\n",
" CONCAT(\"[\",GROUP_CONCAT(pr.包裹号),\"]\") AS package_group ,\n",
@ -268,7 +158,7 @@
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [

118
各条目规格.ipynb Normal file
View File

@ -0,0 +1,118 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 属性统计\n",
"def parse_attr_set(attr_set_str):\n",
" \"\"\"解析属性集,返回 {属性值: 属性名} 的字典\"\"\"\n",
" mapping = {}\n",
" for item in attr_set_str.split(\";\"):\n",
" item = item.strip()\n",
" if not item:\n",
" continue\n",
" try:\n",
" left, value = item.split(\"~\", 1) # \"231012:大小~23206184:140*80*75\"\n",
" attr_name = left.split(\":\")[1]\n",
" value = value.split(\":\")[1]\n",
" mapping[value] = attr_name\n",
" except Exception:\n",
" continue\n",
" return mapping\n",
"def map_spec_to_attrs(spec, attr_mapping):\n",
" \"\"\"把规格里的值映射为 {属性名: 规格值}\"\"\"\n",
" results = {}\n",
" if not isinstance(attr_mapping, dict): # 如果不是字典,直接返回 None\n",
" return None\n",
"\n",
" for val in str(spec).split(): # spec 也转成 str避免 NaN\n",
" if val in attr_mapping:\n",
" attr_name = attr_mapping[val]\n",
" results[attr_name] = val\n",
" return results if results else None"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"from utils.gtools import MySQLconnect\n",
"\n",
"batch_size = 1000000\n",
"offset = 0\n",
"results = []\n",
"leimu = \"furniture\"\n",
"with MySQLconnect('ods') as ods:\n",
" while True:\n",
" sql = f\"\"\"\n",
" SELECT * FROM erp_{leimu}_sku\n",
" LIMIT {batch_size} OFFSET {offset}\n",
" \"\"\"\n",
" chunk = pd.read_sql(sql, ods.con)\n",
" if chunk.empty:\n",
" break\n",
" chunk[\"规格属性映射\"] = chunk.apply(\n",
" lambda row: map_spec_to_attrs(row[\"规格\"], parse_attr_set(row[\"标准/预设属性集\"])),\n",
" axis=1\n",
" )\n",
" print(f\"处理了 {offset} 到 {offset+batch_size} 条数据\")\n",
" results.append(chunk)\n",
" offset += batch_size\n",
"df = pd.concat(results, ignore_index=True)\n",
"all_attrs = {}\n",
"for mapping in df[\"规格属性映射\"].dropna():\n",
" for attr_name, val in mapping.items():\n",
" if attr_name not in all_attrs: # 只保留一个样本\n",
" all_attrs[attr_name] = val\n",
"\n",
"print(all_attrs)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 保存\n",
"out_df = pd.DataFrame(list(all_attrs.items()), columns=[\"规格属性映射\", \"属性值\"])\n",
"out_df.to_excel(f\"D:/test/logistics/test_excel/{leimu}-规格属性映射.xlsx\", index=False)"
]
},
{
"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
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "code",
"execution_count": 7,
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
@ -42,6 +42,8 @@
" \"\"\"\n",
" engine = ods.engine()\n",
" sku_df = pd.read_sql(SKULIST, engine,params=(order_id,))\n",
" if sku_df.empty:\n",
" return None,None,None\n",
" # print(\"SKU类型:\",sku_df['SKU类型'][0],\"SKU明细:\",sku_df['SKU明细'][0],\"入库采购价:\",sku_df['入库采购价'][0])\n",
" return sku_df['SKU类型'][0],sku_df['SKU明细'][0],sku_df['入库采购价'][0]\n",
"\n",
@ -54,7 +56,7 @@
" packages_weight=0\n",
" packages_vol = 0\n",
" for package_id in packages_id:\n",
" url = f'https://cp.maso.hk/index.php?main=biphp&act=package_fund&key=W6BOYJ7BH27YCGRFCA0LWBVKMU1KRU5Q&package={package_id}'\n",
" url = f'https://cp.baycheer.com/index.php?main=biphp&act=package_fund&key=W6BOYJ7BH27YCGRFCA0LWBVKMU1KRU5Q&package={package_id}'\n",
" resp = requests.get(url).json()\n",
" if resp['code'] == \"0\":\n",
" weight = int(float(resp['data'][0]['weight'])*1000)\n",
@ -154,7 +156,7 @@
},
{
"cell_type": "code",
"execution_count": 8,
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
@ -164,9 +166,9 @@
" 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",
"\t\t\t\tol.`currency`,\n",
"\t\t\t\tol.`order_price`,\n",
"\t\tIF( ol.payment_method IS NULL, ols.支付方式, ol.payment_method ) AS 支付方式,\n",
" ol.order_price_dollar\n",
" FROM\n",
" parcel pr\n",
@ -180,24 +182,8 @@
" `order_express` oe \n",
" WHERE\n",
" oe.包裹号 = pr.包裹号 \n",
" AND oe.包裹状态 = \"已作废\")\n",
" AND order_id IN (250610233027170 ,\n",
"250608163427468 ,\n",
"250521222214528 ,\n",
"250610230415406 ,\n",
"250607044202071 ,\n",
"250607144614471 ,\n",
"250607211414736 ,\n",
"250401032025780 ,\n",
"250531061202721 ,\n",
"250611112802162 ,\n",
"250614114015175 ,\n",
"250610185002525 ,\n",
"250610022439644 ,\n",
"250404163802384 ,\n",
"250531191002625 ,\n",
"250610035602297 ,\n",
"250609232002941 \n",
" AND oe.包裹状态 REGEXP \"作废|--\")\n",
" AND order_id IN (251120212802039 \n",
"\n",
")\n",
" GROUP BY ol.order_id\n",
@ -206,133 +192,22 @@
},
{
"cell_type": "code",
"execution_count": 9,
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"250401032025780\n",
"0 2205003721\n",
"251120212802039\n",
"0 2200885770\n",
"1 2201683904\n",
"2 2201886758\n",
"Name: SKU, dtype: int64\n",
"账单名称: 250401032025780\n",
"账单项:head_amount: 22.307399999999998 CNY base: 7.17 USD residential_delivery: 2.08 USD fuel: 1.66 USD tail_amount: 10.91 USD 总金额: 14.033036 USD\n",
"250404163802384\n",
"0 2205811679\n",
"Name: SKU, dtype: int64\n",
"账单名称: 250404163802384\n",
"账单项:head_amount: 79.78666666666666 CNY base: 11.9 EUR bigpackage: 44.5 EUR fuel: 7.33 EUR tail_amount: 63.73 EUR 总金额: 82.54773333333334 USD\n",
"250521222214528\n",
"0 2202859120\n",
"1 2202859129\n",
"Name: SKU, dtype: int64\n",
"账单名称: 250521222214528\n",
"账单项:head_amount: 2470.0 CNY base: 7.4 GBP tail_amount: 7.4 GBP 总金额: 355.42 USD\n",
"250531061202721\n",
"0 227752959\n",
"Name: SKU, dtype: int64\n",
"账单名称: 250531061202721\n",
"账单项:head_amount: 109.83735000000001 CNY base: 21.9 USD oversize: 8.17 USD remote: 2.17 USD residential_delivery: 2.08 USD fuel: 6.18 USD tail_amount: 40.5 USD 总金额: 55.877229 USD\n",
"250531191002625\n",
"0 2205993938\n",
"Name: SKU, dtype: int64\n",
"账单名称: 250531191002625\n",
"账单项:head_amount: 72.83966666666667 CNY base: 11.9 EUR fuel: 1.55 EUR tail_amount: 13.45 EUR 总金额: 25.261553333333335 USD\n",
"250607044202071\n",
"0 228294469\n",
"Name: SKU, dtype: int64\n",
"账单名称: 250607044202071\n",
"账单项:head_amount: 168.73212180000002 CNY base: 20 USD transfer: 9.37 USD tail_amount: 29.37 USD 总金额: 52.992497052000004 USD\n",
"250607144614471\n",
"0 227555929\n",
"Name: SKU, dtype: int64\n",
"账单名称: 250607144614471\n",
"账单项:head_amount: 37.5 CNY base: 8.18 USD residential_delivery: 2.08 USD fuel: 1.85 USD tail_amount: 12.11 USD 总金额: 17.36 USD\n",
"250607211414736\n",
"0 229586263\n",
"Name: SKU, dtype: int64\n",
"账单名称: 250607211414736\n",
"账单项:head_amount: 47.25 CNY base: 7.77 USD residential_delivery: 2.08 USD fuel: 1.77 USD tail_amount: 11.62 USD 总金额: 18.235 USD\n",
"250608163427468\n",
"0 227658471\n",
"Name: SKU, dtype: int64\n",
"账单名称: 250608163427468\n",
"账单项:head_amount: 554.4 CNY base: 3.7 GBP tail_amount: 3.7 GBP 总金额: 82.426 USD\n",
"250609232002941\n",
"0 2206109629\n",
"Name: SKU, dtype: int64\n",
"账单名称: 250609232002941\n",
"账单项:head_amount: 94.5 CNY base: 10.2 EUR fuel: 1.33 EUR tail_amount: 11.53 EUR 总金额: 26.1436 USD\n",
"250610022439644\n",
"0 2206929691\n",
"Name: SKU, dtype: int64\n",
"账单名称: 250610022439644\n",
"账单项:head_amount: 280.0 CNY base: 11.9 EUR overweight: 2.89 EUR fuel: 1.92 EUR tail_amount: 16.71 EUR 总金额: 57.915200000000006 USD\n",
"250610035602297\n",
"0 2204180587\n",
"Name: SKU, dtype: int64\n",
"账单名称: 250610035602297\n",
"账单项:head_amount: 177.072 CNY base: 20.4 EUR overweight: 2.89 EUR bigpackage: 44.5 EUR fuel: 8.81 EUR tail_amount: 76.6 EUR 总金额: 110.58208 USD\n",
"250610185002525\n",
"0 2203543601\n",
"Name: SKU, dtype: int64\n",
"账单名称: 250610185002525\n",
"账单项:head_amount: 95.33333333333333 CNY base: 11.9 EUR overweight: 2.89 EUR bigpackage: 44.5 EUR fuel: 7.71 EUR tail_amount: 67.0 EUR 总金额: 88.38666666666667 USD\n",
"250610230415406\n",
"0 2205149996\n",
"Name: SKU, dtype: int64\n",
"账单名称: 250610230415406\n",
"账单项:head_amount: 735.0 CNY base: 32.25 USD oversize: 11.83 USD remote: 2.17 USD residential_delivery: 2.08 USD fuel: 8.7 USD tail_amount: 57.02 USD 总金额: 159.92000000000002 USD\n",
"250610233027170\n",
"0 229445257\n",
"Name: SKU, dtype: int64\n",
"账单名称: 250610233027170\n",
"账单项:head_amount: 1645.6533333333334 CNY base: 3.7 GBP tail_amount: 3.7 GBP 总金额: 235.2014666666667 USD\n",
"250611112802162\n",
"0 2206393292\n",
"Name: SKU, dtype: int64\n",
"账单名称: 250611112802162\n",
"账单项:head_amount: 49.6 CNY base: 6.02 AUD fuel: 0.31 AUD tail_amount: 6.33 AUD 总金额: 11.375 USD\n",
"250614114015175\n",
"0 2202252863\n",
"Name: SKU, dtype: int64\n",
"账单名称: 250614114015175\n",
"账单项:head_amount: 270.9 CNY base: 17.08 AUD fuel: 0.87 AUD tail_amount: 17.95 AUD 总金额: 50.491 USD\n",
"账单名称: 250401032025780\n",
"账单项:head_amount: 121.93650000000001 CNY base: 20 USD transfer: 6.77 USD tail_amount: 26.77 USD 总金额: 43.84111 USD\n",
"账单名称: 250404163802384\n",
"账单项:head_amount: 176.11733333333333 CNY base: 111.67 EUR notify: 5 EUR responsibility: 1.85 EUR management: 2 EUR toll: 0.72 EUR tail_amount: 121.24 EUR 总金额: 160.44522666666668 USD\n",
"账单名称: 250521222214528\n",
"账单项:head_amount: 14967.906666666668 CNY base: 55.0 GBP tail_amount: 55.0 GBP 总金额: 2167.0069333333336 USD\n",
"账单名称: 250531061202721\n",
"账单项:head_amount: 694.17 CNY base: 210 USD tail_amount: 210.0 USD 总金额: 307.1838 USD\n",
"账单名称: 250531191002625\n",
"账单项:head_amount: 381.6 CNY base: 11.9 EUR overweight: 2.89 EUR bigpackage: 44.5 EUR fuel: 7.71 EUR tail_amount: 67.0 EUR 总金额: 128.464 USD\n",
"账单名称: 250607044202071\n",
"账单项:head_amount: 1059.24 CNY base: 75 USD transfer: 58.85 USD tail_amount: 133.85 USD 总金额: 282.1436 USD\n",
"账单名称: 250607144614471\n",
"账单项:head_amount: 533.5740000000001 CNY base: 53.85 USD oversize: 8.17 USD residential_delivery: 4.16 USD fuel: 11.91 USD tail_amount: 78.09 USD 总金额: 152.79036000000002 USD\n",
"账单名称: 250607211414736\n",
"账单项:head_amount: 655.1999999999999 CNY base: 59.17 USD oversize: 8.17 USD residential_delivery: 4.16 USD fuel: 12.87 USD tail_amount: 84.38 USD 总金额: 176.108 USD\n",
"账单名称: 250608163427468\n",
"账单项:head_amount: 2968.0 CNY base: 48.02 GBP fuel: 4.8 GBP tail_amount: 52.82 GBP 总金额: 484.18600000000004 USD\n",
"账单名称: 250609232002941\n",
"账单项:head_amount: 351.488 CNY base: 111.41 EUR notify: 5 EUR responsibility: 1.85 EUR management: 2 EUR toll: 1.2 EUR tail_amount: 121.46 EUR 总金额: 185.24352000000002 USD\n",
"账单名称: 250610022439644\n",
"账单项:head_amount: 3410.88 CNY base: 272.46 EUR notify: 5 EUR responsibility: 1.85 EUR management: 2 EUR toll: 2.16 EUR tail_amount: 283.47 EUR 总金额: 795.0096000000001 USD\n",
"账单名称: 250610035602297\n",
"账单项:head_amount: 1189.824 CNY base: 310 EUR fuel: 24.8 EUR tail_amount: 334.8 EUR 总金额: 541.55136 USD\n",
"账单名称: 250610185002525\n",
"账单项:head_amount: 119.25333333333333 CNY base: 136.7 EUR notify: 5 EUR responsibility: 1.85 EUR management: 2 EUR toll: 0.96 EUR tail_amount: 146.51 EUR 总金额: 180.7866666666667 USD\n",
"账单名称: 250610230415406\n",
"账单项:head_amount: 1500.9866666666667 CNY base: 39.39 USD remote: 6.2 USD big_package: 47.73 USD residential_delivery: 5.95 USD fuel: 17.87 USD tail_amount: 117.14 USD 总金额: 327.27813333333336 USD\n",
"账单名称: 250610233027170\n",
"账单项:head_amount: 4055.04 CNY base: 76.65 GBP fuel: 7.66 GBP tail_amount: 84.31 GBP 总金额: 677.3086000000001 USD\n",
"账单名称: 250611112802162\n",
"账单项:head_amount: 793.8000000000001 CNY base: 26.82 AUD fuel: 1.94 AUD tail_amount: 28.76 AUD 总金额: 131.264 USD\n",
"账单名称: 250614114015175\n",
"账单项:head_amount: 1276.5200000000002 CNY base: 71.19 AUD oversize: 15.5 AUD fuel: 6.29 AUD tail_amount: 92.98 AUD 总金额: 243.79880000000003 USD\n"
"账单名称: 251120212802039\n",
"账单项:head_amount: 50.0 CNY base: 10.5 GBP transportation: 0.11 GBP fuel: 0.53 GBP tail_amount: 11.14 GBP 总金额: 21.482000000000003 USD\n",
"账单名称: 251120212802039\n",
"账单项:head_amount: 349.14 CNY base: 10.5 GBP transportation: 0.11 GBP fuel: 0.53 GBP tail_amount: 11.14 GBP 总金额: 63.3616 USD\n"
]
}
],
@ -363,6 +238,15 @@
"order_id_df.to_clipboard()"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [],
"source": [
"order_id_df.to_clipboard()"
]
},
{
"cell_type": "code",
"execution_count": null,
@ -376,7 +260,8 @@
" FROM\n",
" parcel pr \t\n",
" WHERE\n",
" 订单号 IN (250516031202445 \n",
" 订单号 IN (251120212802039 \n",
"\n",
")\n",
"\"\"\"\n",
"package_df = pd.read_sql(sql,engine)\n",
@ -506,14 +391,14 @@
"from utils.logisticsBill import BillFactory, Billing\n",
"packages = Package_group()\n",
"\n",
"packages.add_package(Package(\"包裹1\", 78,35,15, 15000))\n",
"# packages.add_package(Package(\"包裹1\", 55,45,40, 9000))\n",
"# packages.add_package(Package(\"包裹1\", 210,55,20, 32000))\n",
"# packages.add_package(Package(\"包裹1\", 103,42,12, 8000))\n",
"# packages.add_package(Package(\"包裹1\", 103,42,12, 8000))\n",
"packages.add_package(Package(\"包裹1\", 50,50,14, 30000))\n",
"# packages.add_package(Package(\"包裹1\", 125,109,16, 600000))\n",
"# packages.add_package(Package(\"包裹1\",180 ,35,13, 17000))\n",
"# packages.add_package(Package(\"包裹1\", 132,62,3, 6500))\n",
"\n",
"country = 'United Kingdom'\n",
"postcode ='DY13 0RX'\n",
"\n",
"country = 'UK'\n",
"postcode ='AB43 7JB'\n",
"conveys= 0 # 1海运0空运\n",
"\n",
"\n",
@ -527,7 +412,8 @@
"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",
"other_detail = bill.items\n",
"base_amount = [item.amount for item in other_detail if item.item_detail == \"base\"][0]\n",
"\n",
"packages_str = \"\"\n",
"for package in packages.packages:\n",
@ -538,11 +424,11 @@
"print(f\"体积重:{volume_weight}\")\n",
"print(f\"头程单价:{per_head}\")\n",
"print(f\"预测头程CNY:{head_amount}\")\n",
"print(f\"预测尾端(当地货币):{tail_amount}\")\n",
"print(f\"基础运费:{base_amount}\")\n",
"print(f\"其他费用:{other_detail}\")\n",
"print(f\"预测尾端(当地货币):{tail_amount}\")\n",
"print(f\"尾端渠道:{_type}\")\n",
"print(f\"总金额USD:{total_amount}\")\n",
"print(KPASLLogistics_FR.active)"
"print(f\"总金额USD:{total_amount}\")\n"
]
},
{
@ -552,6 +438,13 @@
"查找供应商退货退款金额"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,

File diff suppressed because it is too large Load Diff

View File

@ -94,12 +94,20 @@ def cal_min_fee(raw_data: pd.DataFrame):
opCountry = OperateCountry(group['目的国'].iloc[0])
express_fee = 0
express_type=''
total_weight=0
for index, row in group.iterrows():
# 计算一票一件
total_weight += row['']*row['']*row['']/6000
packages=Package_group()
package = Package(row['package'], row[''], row[''], row[''], row['重量'])
packages.add_package(package)
bill_express = Billing("1",opCountry,packages,row['postcode'],company_name=None,head_type=1,beizhu="")
try:
bill_express = Billing("1", opCountry, packages, row['postcode'], company_name=None, head_type=1, beizhu="")
except ValueError as e:
print(f"无法为包裹 {row['package']} 计算最小费用: {e}")
# 设置一个默认值或跳过该行
df.loc[index, "单票最小费用"] = "无法计算"
continue # 继续处理下一行
if bill_express.tail_amount[0] == 0 or bill_express.tail_amount[0] >=9999:
df.loc[index,"单票最小费用"] = ""
df.loc[index,"单票渠道"] = ""
@ -115,6 +123,7 @@ def cal_min_fee(raw_data: pd.DataFrame):
# 计算一票多件
package_group.add_package(package)
# 计算一票多件
if len(package_group) > 1:
bill_ltl = Billing("1",opCountry,package_group,row['postcode'],company_name=None,head_type=1,beizhu="")
@ -127,10 +136,11 @@ def cal_min_fee(raw_data: pd.DataFrame):
df.loc[df['order_id']==order_id,'最优总费用'] = min_fee
df.loc[df['order_id']==order_id,'最优渠道类型'] = bill_ltl.logistic_type if min_fee == bill_ltl.tail_amount[0] else express_type
else:
min_fee = express_fee
df.loc[df['order_id']==order_id,'最优总费用'] = min_fee
df.loc[df['order_id']==order_id,'最优渠道类型'] = express_type
df.loc[df['order_id']==order_id,'尾端货币'] = bill_express.tail_amount[1]
return df
@ -293,15 +303,17 @@ def local_fee_cal(df: pd.DataFrame):
for index,row in group.iterrows():
if row[''] == 0 or row[''] == 0 or row[''] == 0 or row['重量'] == 0:
continue
total_weight = row['']*row['']*row['']/6000
total_weight += row['']*row['']*row['']/6000
package = Package(row['package'],row[''],row[''],row[''],row['重量'])
packages.add_package(package)
try:
bill = Billing(str(index),opCountry,packages,postcode,company_name=company_name,head_type=1,beizhu='1')
for index,row in group.iterrows():
propertion = bill.bill_dict()["体积重"]/total_weight
propertion=0
propertion = row['体积重']/total_weight
tail_fee = bill.tail_amount[0]*propertion
# 转rmb
tail_fee = 9999999999 if bill.tail_amount[0] >= 9999 else tail_fee
tail_fee = convert_currency(tail_fee, bill.tail_amount[1])
df.loc[df['package']==row['package'],'本地估算RMB'] =round(tail_fee,2) if tail_fee <9999 else "暂无配置"
except:

File diff suppressed because it is too large Load Diff

View File

@ -28,7 +28,7 @@ def get_package_real_vol_by_api(packages_id):
# package_width = resp[0][1]
# package_hight = resp[0][2]
# 拦截
url = f'https://cp.maso.hk/index.php?main=biphp&act=package_fund&key=W6BOYJ7BH27YCGRFCA0LWBVKMU1KRU5Q&package={package_id}'
url = f'https://cp.baycheer.com/index.php?main=biphp&act=package_fund&key=W6BOYJ7BH27YCGRFCA0LWBVKMU1KRU5Q&package={package_id}'
resp = requests.get(url).json()
if resp['code'] == "0":
weight = int(float(resp['data'][0]['weight'])*1000)
@ -45,7 +45,7 @@ def get_package_real_vol_by_api(packages_id):
def get_order_bill(opCountry,order_id,packages_id,postcode,convey,amount):
print(order_id)
beizhu = amount
conveys = 1 if convey == "海运" else 0
conveys = 1 if "海运" in convey else 0
try:
@ -67,7 +67,7 @@ def get_order_bill(opCountry,order_id,packages_id,postcode,convey,amount):
excel_path = r'D:\test\logistics\拦截数据\订单数据.xlsx'
country_list = ['United Kingdom','United States','Australia','Germany','Spain','France']
country_list = ['United States','United Kingdom','Australia','Germany','Spain','France']
# country_list = ['United States']
for country in country_list:
order_id = f"""
@ -82,24 +82,18 @@ for country in country_list:
FROM
parcel pr
LEFT JOIN dwd.order_list ol ON ol.order_id = pr.订单号
LEFT JOIN order_list ol ON ol.order_id = pr.订单号
LEFT JOIN order_express oe ON pr.`包裹号` = oe.`包裹号`
WHERE
# ol.order_date between "2024-10-01" and "2025-03-01"
pr.生成时间 >= DATE_SUB(NOW(), INTERVAL 20 DAY)
oe.打包时间 >= DATE_SUB(NOW(), INTERVAL 20 DAY)
AND fund_status NOT REGEXP "等待"
AND site_name REGEXP "litfad|kwoking|lakiq"
# AND convey = "海运"
# AND delivery_country = "United States"
AND pr.订单号 = ol.order_id
AND delivery_country regexp '{country}'
AND NOT EXISTS (
SELECT
1
FROM
`order_express` oe
WHERE
oe.包裹号 = pr.包裹号
AND oe.包裹状态 = "已作废")
AND oe.包裹状态 NOT regexp "作废|--"
GROUP BY ol.order_id
"""
order_id_df = pd.read_sql(order_id,engine)
@ -110,6 +104,8 @@ for country in country_list:
countries = order_id_df['delivery_country'].unique()
opCountry = OperateCountry(country)
order_id_df_cal = order_id_df.copy()
# 删除order_id_df_cal中已经存在的订单
if os.path.exists(excel_path):
existing_df = pd.read_excel(excel_path)
@ -117,12 +113,15 @@ for country in country_list:
order_id_df_cal['package_group'].isin(existing_df['package_group']))]
if order_id_df_cal.empty:
continue
order_id_df_cal[["体积重","_type","头程单价","头程(CNY)","尾端","总金额(USD)","实际体积"]] = order_id_df_cal.apply(lambda x: get_order_bill(opCountry,
x['order_id'],
eval(x['package_group']),
x['postcode'],
x['convey'],
x['order_price_dollar']),axis=1,result_type='expand')
order_id_df_cal = order_id_df_cal[~(order_id_df_cal['体积重']== "没测量")]
order_id_df_cal['总金额(USD)'] = pd.to_numeric(order_id_df_cal['总金额(USD)'], errors='coerce')
order_id_df_cal = order_id_df_cal.dropna(subset=['总金额(USD)'])
@ -238,7 +237,7 @@ UNION ALL
# order_id去重
updated_df = updated_df.drop_duplicates(subset=['order_id'], keep='last')
updated_df.to_excel(excel_path, index=False, sheet_name='Sheet1')
df = pd.read_excel(excel_path)
df = pd.read_excel(excel_path,engine="openpyxl")
df = df.drop_duplicates(subset=['order_id'], keep='last')
df['拦截处理日期'] = pd.to_datetime(df['拦截处理日期'])
df.to_excel(excel_path, index=False, sheet_name='Sheet1')