2025-06-26 00:50:14 +08:00
|
|
|
|
# 类型更改计划
|
|
|
|
|
|
## 1. 先解决大量使用xlsx的问题, 统一通过使用LOGISDB数据库进行数据交互
|
|
|
|
|
|
## 2. 对售价模型或者其他类型的区分,统一使用数据库表管理
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-06-17 13:40:20 +08:00
|
|
|
|
# 物流模块介绍
|
|
|
|
|
|
## [数据模块](data)
|
|
|
|
|
|
> 数据存放地,部分物流的价格表和部分国家的邮编
|
|
|
|
|
|
- [澳洲ALL,TOLL,POST价格表](data/澳洲三大渠道.xlsx)
|
|
|
|
|
|
- [美国偏远邮编](data/contiguous_us.txt)
|
|
|
|
|
|
- [美国超偏远邮编](data/configuous_us_extended.txt)
|
|
|
|
|
|
- [美国超超偏远邮编(夏威夷,阿拉斯加等)](data/contiguous_us_remote.txt)
|
|
|
|
|
|
## [物流实现类](logisticsClass)
|
|
|
|
|
|
> 美国,英国,澳洲,欧洲部分国家(德国,法国)
|
|
|
|
|
|
- [头程/尾端基类](logisticsClass/logisticsBaseClass.py)
|
|
|
|
|
|
- [美国头程](logisticsClass/logisticsHead_US.py)
|
|
|
|
|
|
- [美国尾端](logisticsClass/logisticsTail_US.py)
|
|
|
|
|
|
## [工具模块](utils)
|
|
|
|
|
|
- [数据库连接](utils/gtools.py)
|
|
|
|
|
|
- [包裹类](utils/Package.py)
|
|
|
|
|
|
- [国家类/操作类](utils/countryOperator.py)
|
|
|
|
|
|
- [账单工厂类](utils/logisticsBill.py)
|
|
|
|
|
|
|
|
|
|
|
|
# 新增物流渠道流程
|
|
|
|
|
|
## 1. 新增头程,继承自[HeadLogistics](logisticsClass/logisticsBaseClass.py)
|
|
|
|
|
|
|
|
|
|
|
|
### 1.1 类属性(*必填)
|
|
|
|
|
|
|
|
|
|
|
|
*company: str # 物流公司名称
|
|
|
|
|
|
*country_code: list[str] # 国家代码,若只有一个国家,用str即可
|
|
|
|
|
|
*country: list[str] # 国家全名,若只有一个国家,用str即可
|
|
|
|
|
|
|
|
|
|
|
|
logistics_type = LogisticsType.OCEAN # 运输方式,空运|海运,默认海运
|
|
|
|
|
|
currency = 'CNY' # 货币类型,默认人民币
|
|
|
|
|
|
port: PortType = PortType.DEFAULT # 到达港口,东南西北,默认港口
|
|
|
|
|
|
active: bool = True # 物流状态,默认启用
|
|
|
|
|
|
|
|
|
|
|
|
### 1.2 实例属性(*必填)
|
|
|
|
|
|
|
|
|
|
|
|
*head_ratio: int # 它*6000体积重为头程费用
|
|
|
|
|
|
|
|
|
|
|
|
### 1.3 样例代码
|
|
|
|
|
|
|
|
|
|
|
|
class AirLAXLogistics_US(HeadLogistics):
|
|
|
|
|
|
"""美国空运LAX"""
|
|
|
|
|
|
company = "空LAX"
|
|
|
|
|
|
country_code = "US"
|
|
|
|
|
|
country = "United States"
|
|
|
|
|
|
logistics_type = LogisticsType.AIR
|
|
|
|
|
|
def __init__(self):
|
|
|
|
|
|
super().__init__()
|
|
|
|
|
|
self.head_ratio = 40
|
|
|
|
|
|
|
|
|
|
|
|
## 2.新增尾端,继承自[TailLogistics](logisticsClass/logisticsBaseClass.py)
|
|
|
|
|
|
### 2.1 类属性(*必填)
|
|
|
|
|
|
|
|
|
|
|
|
*company: str # 物流公司名称
|
|
|
|
|
|
*country_code: str # 国家代码
|
|
|
|
|
|
*country: str # 国家全名
|
|
|
|
|
|
|
|
|
|
|
|
logistics_type = LogisticsType.EXPRESS # 运输方式,快递|卡派,默认快递
|
|
|
|
|
|
currency:str = 'USD' # 货币类型,默认美元
|
|
|
|
|
|
port: PortType = PortType.DEFAULT # 到达港口,东南西北,默认港口
|
|
|
|
|
|
active: bool = True # 物流状态,默认启用
|
|
|
|
|
|
|
|
|
|
|
|
### 2.2 实例属性(*必填)
|
|
|
|
|
|
|
|
|
|
|
|
由各渠道情况自行定义实际物流实现类属性,如:
|
|
|
|
|
|
self.oversize_fee: float # 超尺寸费
|
|
|
|
|
|
self.remote_fee: float # 偏远费
|
|
|
|
|
|
self.fuel_rate: float # 燃油费率
|
|
|
|
|
|
|
|
|
|
|
|
### 2.3 样例代码
|
|
|
|
|
|
|
|
|
|
|
|
class Logistics_UK(TailLogistics):
|
|
|
|
|
|
company = '智谷'
|
|
|
|
|
|
country_code = 'UK'
|
|
|
|
|
|
country = 'United Kingdom'
|
|
|
|
|
|
currency = 'GBP'
|
|
|
|
|
|
def __init__(self):
|
|
|
|
|
|
super().__init__()
|
|
|
|
|
|
self.base_fee = 3.7
|
|
|
|
|
|
self.oversize = 26
|
|
|
|
|
|
self.fuel_rate = 0.2 # BT开头的有20%燃油费
|
|
|
|
|
|
self.remote_fee = 35
|
|
|
|
|
|
|
|
|
|
|
|
# 必须实现的接口方法
|
|
|
|
|
|
def calculate_fee(self, packages, postcode):
|
|
|
|
|
|
detail_amount = {
|
|
|
|
|
|
"base":0.00,
|
|
|
|
|
|
"oversize":0.00,
|
|
|
|
|
|
"remote":0.00,
|
|
|
|
|
|
"fuel":0.00,
|
|
|
|
|
|
"total_amount":0.00
|
|
|
|
|
|
}
|
|
|
|
|
|
***
|
|
|
|
|
|
***
|
|
|
|
|
|
return detail_amount
|
|
|
|
|
|
|
|
|
|
|
|
------
|
|
|
|
|
|
# 账单输出流程
|
|
|
|
|
|
1. 实例化[国家类/操作类](utils/countryOperator.py),传入国家或国家代码
|
|
|
|
|
|
|
|
|
|
|
|
opCountry = OperateCountry('UK')
|
|
|
|
|
|
2. 实例化[账单工厂](utils/logisticsBill.py),初始为空
|
|
|
|
|
|
|
|
|
|
|
|
billFactory = BillFactory()
|
|
|
|
|
|
# 该工厂可以对所有账单进行统一管理,包括:
|
|
|
|
|
|
billFactory.create_bill(id,opCountry,packages,postcode,company_name,head_type,beizhu) # 创建账单
|
|
|
|
|
|
billFactory.add_bill(bill) # 添加账单
|
|
|
|
|
|
billFactory.get_bills() # 输出全部账单
|
|
|
|
|
|
billFactory.get_bill(id) # 输出指定账单,id为账单ID
|
|
|
|
|
|
billFactory.bills_to_df() # 输出全部账单到DataFrame格式
|
|
|
|
|
|
3. 实例化[账单类](utils/logisticsBill.py)
|
|
|
|
|
|
|
|
|
|
|
|
bill = Billing(id,operator,packages,postcode,**kwargs)
|
|
|
|
|
|
# 账单传参属性(*必填)
|
|
|
|
|
|
*self.id:str = id
|
|
|
|
|
|
*self.operator:OperateCountry = opCountry
|
|
|
|
|
|
*self.packages:Package_group = packages
|
|
|
|
|
|
*self.postcode:str = postcode
|
|
|
|
|
|
|
|
|
|
|
|
self.company_name = kwargs.get('company_name', None)
|
|
|
|
|
|
self.head_type = kwargs.get('head_type', 1)
|
|
|
|
|
|
self.beizhu = kwargs.get('beizhu', None)
|
|
|
|
|
|
|
|
|
|
|
|
4. 账单传参属性(*必填)
|
|
|
|
|
|
|
|
|
|
|
|
*opCountry = OperateCountry("US") # 实例化国家类/操作类
|
|
|
|
|
|
填写范围:US~UK~AU~JP~DE~CA~FR~SP~IT
|
|
|
|
|
|
|
|
|
|
|
|
*bill = Billing(id,operator,packages,postcode,**kwargs)
|
|
|
|
|
|
*id = "xxx" # str, 账单ID
|
|
|
|
|
|
*operator = opCountry # 国家类/操作类
|
|
|
|
|
|
*packages = Package_group() # Package_group, 包裹组
|
|
|
|
|
|
*postcode = "xxx" # str, 邮编
|
|
|
|
|
|
|
|
|
|
|
|
company_name = "xxx" # str, 物流公司名称(不填则默认获取最小账单费用)
|
|
|
|
|
|
填写范围:operator.companies
|
|
|
|
|
|
head_type = 1 # int, 头程类型,1-海运,0-空运
|
|
|
|
|
|
beizhu = "xxx" # str, 备注信息
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|