import pandas # 日本空运 def jp_air_order_price(packages): # 先判断包裹数 if len(packages) > 30: return 0,"包裹数超过30" air_order_price = 0 air_order_type = '空运' for package in packages: m = package.density v = package.get_volume_weight(6) if package.weight <= 2000: order_price = ((min(max(m, 37), 337) * 0.038 + 9.482 - 1.08) / 6 + 1.38 / 6 - 1.06) * v / 1000 / 0.359 + 4.03 elif package.weight <= 5000: order_price = ((min(max(m, 37), 337) * 0.038 + 9.482 - 1.08) / 6 + 1.38 / 6 - 1.06) * v / 1000 / 0.359 + 4.57 elif package.weight <= 10000: order_price = ((min(max(m, 37), 337) * 0.038 + 9.482 - 1.08) / 6 + 1.38 / 6 - 1.06) * v / 1000 / 0.359 + 5.83 elif package.weight <= 20000: order_price = ((min(max(m, 37), 337) * 0.038 + 9.482 - 1.08) / 6 + 1.38 / 6 - 1.06) * v / 1000 / 0.359 + 8.7 elif package.weight <= 30000: order_price = ((min(max(m, 37),337) * 0.038 + 9.482 - 1.08) / 6 + 1.38 / 6 - 1.06) * v / 1000 / 0.359 + 11.48 else: return 999999,"不可发" air_order_price += order_price air_order_price = round(air_order_price, 2) return air_order_price,air_order_type def jp_order_yamato(packages,t): # 先判断包裹数 if len(packages) > 30: return 0,"包裹数超过30" order_type = 'yamato' order_fee = 0 # 判断不可发 for package in packages: v = package.get_volume_weight(6) billing_weight = max(package.weight,v) if package.weight > 30000 or v > 49400: return 999999,"不可发" if billing_weight <= 2000: jp_base_fee = 700 if v<=1400 else 920 order_fee1 = jp_base_fee /0.359/146 -7.82 elif billing_weight <= 5000: jp_base_fee = 920 if v<=3200 else 1162 order_fee1 = jp_base_fee /0.359/146 -6.64 elif billing_weight <= 10000: jp_base_fee = 1162 if v<=6200 else 1382 order_fee1 = jp_base_fee /0.359/146 -6.91 elif billing_weight <=15000: jp_base_fee = 1382 if v<=10700 else 1624 order_fee1 = jp_base_fee /0.359/146 -7.84 elif billing_weight <=20000: jp_base_fee = 1624 if v<=16900 else 1844 order_fee1 = jp_base_fee /0.359/146 -8.83 elif billing_weight <=25000: jp_base_fee = 1844 order_fee1 = jp_base_fee /0.359/146 -10.99 elif billing_weight <=30000: if package.weight >25000 or v >25300: jp_base_fee = 2548 elif v <=25300: jp_base_fee =1844 order_fee1 = jp_base_fee /0.359/146 -12.87 elif billing_weight <=36000: jp_base_fee = 2548 order_fee1 = jp_base_fee /0.359/146 -14.57 elif billing_weight <=49400: jp_base_fee =2988 order_fee1 = jp_base_fee /0.359/146 -17.62 order_fee += (order_fee1 -0.4*v/1000 +t*0.05)/0.97 return round(order_fee,2),order_type def min_price(packages): air_order_fee,air_type = jp_air_order_price(packages) yamato_order_fee,yamato_type = jp_order_yamato(packages) if air_order_fee <= yamato_order_fee: order_fee =air_order_fee order_type = air_type else: order_fee = yamato_order_fee order_type = yamato_type return order_fee,order_type