售价数据源改至数据库
This commit is contained in:
parent
0f67dd6553
commit
b6ee600e78
|
|
@ -62,19 +62,21 @@ def spu_head_type(base_df: pd.DataFrame):
|
|||
|
||||
class SellPriceBase:
|
||||
parent_current_directory = Path(__file__).parent.parent
|
||||
df_2025 = None
|
||||
df_2024 = None
|
||||
sell_usps = None
|
||||
sell_uandf = None
|
||||
sell_fedex = None
|
||||
_instance = None
|
||||
def __new__(cls, *args, **kwargs):
|
||||
"""实现单例模式,只加载一次文件"""
|
||||
if cls._instance is None:
|
||||
cls._instance = super().__new__(cls)
|
||||
|
||||
with DBconnect() as db:
|
||||
if cls.df_2024 is None:
|
||||
cls.df_2024 = pd.read_sql("select * from sell_price_ending_2024", db.eng)
|
||||
if cls.df_2025 is None:
|
||||
cls.df_2025 = pd.read_sql("select * from sell_price_ending_2025", db.eng)
|
||||
if cls.sell_usps is None: # 快递费usps小件
|
||||
cls.sell_usps = pd.read_sql("select * from sell_usps", db.eng)
|
||||
if cls.sell_uandf is None: # 快递费uandf小件
|
||||
cls.sell_uandf = pd.read_sql("select * from sell_uandf", db.eng)
|
||||
if cls.sell_fedex is None: # 快递费fedex
|
||||
cls.sell_fedex = pd.read_sql("select * from sell_fedex", db.eng)
|
||||
return cls._instance
|
||||
return cls._instance
|
||||
def __init__(self, packages, purchase_price, shipping_type, ocean_first_cny, ocean_first_usd, air_first_usd,
|
||||
|
|
@ -92,36 +94,6 @@ class SellPriceBase:
|
|||
self.shipping_type = shipping_type # 1为海运0为空运,由spu定好的
|
||||
self.tax_rate = tax_rate # 税率
|
||||
|
||||
|
||||
# def get_fee_df(self):
|
||||
# if self.df_status == 0:
|
||||
# self.df_status = 1
|
||||
# self.mat = MySQLconnect('mat')
|
||||
# self.engine = self.mat.engine()
|
||||
# self.adf = pd.read_sql('SELECT * FROM `usps_0814`', self.engine)
|
||||
# self.bdf = pd.read_sql('SELECT * FROM `uandf_0814`', self.engine)
|
||||
# self.cdf = pd.read_sql('SELECT * FROM `fedex_2504`', self.engine)
|
||||
# # 获取对应价格表
|
||||
# def get_fee(self, head_type,adf,bdf,cdf):
|
||||
# mat = MySQLconnect('mat')
|
||||
# engine = mat.engine()
|
||||
|
||||
# try:
|
||||
# if head_type == 0:
|
||||
# df = self.adf
|
||||
# elif head_type == 1:
|
||||
# df = self.bdf
|
||||
# elif head_type == 2:
|
||||
# df = self.cdf
|
||||
# else:
|
||||
# df = pd.DataFrame([99999], columns=['错误'])
|
||||
# except Exception as e:
|
||||
# print(f"发生错误: {e}")
|
||||
# df = pd.DataFrame()
|
||||
# finally:
|
||||
# engine.dispose()
|
||||
# return df
|
||||
|
||||
# 计算快递费用
|
||||
def cal_express_fee(self):
|
||||
head_type = 0 # 默认为USPS
|
||||
|
|
@ -152,19 +124,19 @@ class SellPriceBase:
|
|||
ahs_dimension = 0
|
||||
if head_type == 0:
|
||||
try:
|
||||
express_base_fee = self.df_2024[self.df_2024['oz'] == oz_weight]['最终费用'].iloc[0] / self.profit_rate
|
||||
express_base_fee = self.sell_usps[self.sell_usps['oz'] == oz_weight]['最终费用_v1'].iloc[0] / self.profit_rate
|
||||
except:
|
||||
head_type = 1
|
||||
# USPSA2/FEDEXA1
|
||||
if head_type == 1:
|
||||
try:
|
||||
express_base_fee = self.df_2024[self.df_2024['lbs小'] == lbs_weight]['加权价格'].iloc[0] / self.profit_rate
|
||||
express_base_fee = self.sell_uandf[self.sell_uandf['lbs'] == lbs_weight]['加权价格_v1'].iloc[0] / self.profit_rate
|
||||
except:
|
||||
head_type = 2
|
||||
# FEDEX
|
||||
if head_type == 2:
|
||||
try:
|
||||
express_base_fee = self.df_2024[self.df_2024['lbs大'] == lbs_weight]['售价尾端价格'].iloc[0]
|
||||
express_base_fee = self.sell_fedex[self.sell_fedex['lbs'] == lbs_weight]['售价尾端价格_v1'].iloc[0]
|
||||
except:
|
||||
express_base_fee = 99999
|
||||
head_type = 3
|
||||
|
|
@ -272,22 +244,21 @@ class SellPriceBase:
|
|||
oversize_charge = 0
|
||||
ahs_weight = 0
|
||||
ahs_dimension = 0
|
||||
# 本来是从数据库拿数据,我这里直接把数据放这里
|
||||
if head_type == 0:
|
||||
try:
|
||||
express_base_fee = self.df_2025[self.df_2025['oz'] == oz_weight]['最终费用'].iloc[0] / self.profit_rate
|
||||
express_base_fee = self.sell_usps[self.sell_usps['oz'] == oz_weight]['最终费用_v2'].iloc[0] / self.profit_rate
|
||||
except:
|
||||
head_type = 1
|
||||
# USPSA2/FEDEXA1
|
||||
if head_type == 1:
|
||||
try:
|
||||
express_base_fee = self.df_2025[self.df_2025['lbs小'] == lbs_weight]['加权价格'].iloc[0] / self.profit_rate
|
||||
express_base_fee = self.sell_uandf[self.sell_uandf['lbs'] == lbs_weight]['加权价格_v2'].iloc[0] / self.profit_rate
|
||||
except:
|
||||
head_type = 2
|
||||
# FEDEX
|
||||
if head_type == 2:
|
||||
try:
|
||||
express_base_fee = self.df_2025[self.df_2025['lbs大'] == lbs_weight]['售价尾端价格'].iloc[0]
|
||||
express_base_fee = self.sell_fedex[self.sell_fedex['lbs'] == lbs_weight]['售价尾端价格_v2'].iloc[0]
|
||||
except:
|
||||
express_base_fee = 99999
|
||||
head_type = 3
|
||||
|
|
|
|||
|
|
@ -5,18 +5,17 @@ import sys
|
|||
import pandas as pd
|
||||
from sell.base_sell_price import SellPriceBase
|
||||
from utils.Package import Package, Package_group
|
||||
from utils.gtools import MySQLconnect
|
||||
from utils.gtools import MySQLconnect,DBconnect
|
||||
import math
|
||||
import re
|
||||
express_price = pd.read_excel(r'D:\workspace\logistics\data\售价尾端价格.xlsx', sheet_name='2025')
|
||||
key_column = express_price.iloc[:, 8] # 第 I 列
|
||||
value_column = express_price.iloc[:, 9] # 第 J 列
|
||||
small_column = express_price.iloc[:, 10] # 第 K 列
|
||||
big_column = express_price.iloc[:, 11] # 第 L 列
|
||||
air_small_dict = dict(zip(key_column, small_column))
|
||||
air_big_dict = dict(zip(key_column, big_column))
|
||||
# 转换成字典
|
||||
ocean_price_dict = dict(zip(key_column, value_column))
|
||||
# 取计算订单物流费的参数
|
||||
with DBconnect() as db:
|
||||
express_dict= pd.read_sql("SELECT * FROM us_shop_logistics",db.eng)
|
||||
|
||||
# 构建字典
|
||||
air_small_dict = dict(zip(express_dict['g'], express_dict["空运usps_v2"]))
|
||||
air_big_dict = dict(zip(express_dict['g'], express_dict["空运fedex_v2"]))
|
||||
ocean_price_dict = dict(zip(express_dict['g'], express_dict["海运物流配置_v2"]))
|
||||
def ocean_order_price(packages):
|
||||
express_fee = 0 # 快递基础费
|
||||
long_fee = 0 # 超长费
|
||||
|
|
@ -137,8 +136,8 @@ def air_order_price(packages):
|
|||
express_type='FEDEX'
|
||||
return express_fee, express_type
|
||||
|
||||
# 美国售价,订单物流费,订单类型,分海运空运
|
||||
def call_sell_and_order_price(price, package_dict,head_type):
|
||||
# 美国售价2025
|
||||
def call_sell_price_2025(price, package_dict):
|
||||
"""
|
||||
price:采购价
|
||||
package_dict:包裹数据
|
||||
|
|
@ -165,12 +164,8 @@ def call_sell_and_order_price(price, package_dict,head_type):
|
|||
litfad = SellPriceBase.litfad_2025(packages, price,1)
|
||||
# 修改版本,网站售价
|
||||
sell_price = litfad.cal_sell_price_2025()
|
||||
# 订单物流费
|
||||
if "海" in head_type:
|
||||
order_price, order_type = ocean_order_price(packages)
|
||||
else:
|
||||
order_price, order_type = air_order_price(packages)
|
||||
return sell_price,order_price,order_type
|
||||
|
||||
return sell_price
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
|||
19888
售价模型计算.ipynb
19888
售价模型计算.ipynb
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue