售价数据源改至数据库

This commit is contained in:
Wenxixi 2025-06-26 19:35:37 +08:00
parent 0f67dd6553
commit b6ee600e78
3 changed files with 19871 additions and 107 deletions

View File

@ -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

View File

@ -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__':

File diff suppressed because it is too large Load Diff