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