47 lines
1.6 KiB
Python
47 lines
1.6 KiB
Python
# 英国海运订单费用,返回单个sku的订单费用和订单类型
|
|
def uk_ocean_order_price(packages,k):
|
|
"""
|
|
入参:packages的类型是Package_group,里面包含多个Package,这是一个类,这个类今天在群里发过
|
|
入参:k是物流分摊费,也就是k
|
|
|
|
出参: 订单物流费,订单类型
|
|
"""
|
|
# 计算uk经济直达费用
|
|
order_fee = 0
|
|
express_fee = 0
|
|
order_type1 = '' # 订单类型
|
|
num = len(packages)
|
|
if num > 30:
|
|
return 0, '包裹数超过30'
|
|
for package in packages:
|
|
base_fee = 0
|
|
other_fee1 = 0
|
|
if package.fst_size <= 175 and package.girth <= 339 and package.weight <= 40000:
|
|
base_fee = 3.7/0.359*1.3-k-0.8*package.get_volume_weight(6000)
|
|
else:
|
|
base_fee = 999999
|
|
if package.fst_size >=100 and package.sed_size >=60 and package.weight >=30000:
|
|
other_fee1 =45
|
|
order_type1 += '大包裹'
|
|
|
|
express_fee += (base_fee + other_fee1)
|
|
express_fee = round(express_fee, 2)
|
|
|
|
# 卡派 主计费实重,辅计费抛重
|
|
ltl_fee = 0
|
|
order_type2 = '卡派'
|
|
sku_total_cubic_feet = 0
|
|
for package in packages:
|
|
cubic_feet= package.length * package.width * package.height / 6000
|
|
sku_total_cubic_feet += cubic_feet
|
|
if package.length >310:
|
|
return 999999,'包裹超尺寸'
|
|
ltl_fee = max(151/0.359 - 2.4 /7 * sku_total_cubic_feet,2.5)
|
|
|
|
if express_fee <= ltl_fee:
|
|
order_fee = express_fee
|
|
order_type = order_type1
|
|
else:
|
|
order_fee = ltl_fee
|
|
order_type = order_type2
|
|
return max(round(order_fee,2),2), order_type |