logistics/readme.md

144 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 类型更改计划
## 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, 备注信息