logistics/readme.md

144 lines
5.6 KiB
Markdown
Raw Permalink Normal View History

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, 备注信息