144 lines
5.6 KiB
Markdown
144 lines
5.6 KiB
Markdown
# 类型更改计划
|
||
## 1. 先解决大量使用xlsx的问题, 统一通过使用LOGISDB数据库进行数据交互
|
||
## 2. 对售价模型或者其他类型的区分,统一使用数据库表管理
|
||
|
||
|
||
# 物流模块介绍
|
||
## [数据模块](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, 备注信息
|
||
|
||
|
||
|