logistics/utils/Package.py

100 lines
3.4 KiB
Python
Raw Permalink Normal View History

2025-06-17 13:40:20 +08:00
from math import ceil
def data_to_package(package_data):
"""
输入{"包裹1": {"": 20.0, "": 200.0, "": 20.0, "重量": 7500}, "包裹2": {"": 15.0, "": 150.0, "": 15.0, "重量": 5000}}
返回一个packages对象
"""
packages = Package_group()
for name, data in package_data.items():
package = Package(name, data[""],data[""], data[""], data["重量"])
packages.add_package(package)
return packages
class Package:
def __init__(self,name, length, width, height, weight):
self.length = length
self.width = width
self.height = height
self.weight = weight
self.name = name
sizes = sorted([self.length, self.width, self.height])
self.fst_size = sizes[2]
self.sed_size = sizes[1]
self.trd_size = sizes[0]
self.girth = (self.sed_size + self.trd_size) * 2 + self.fst_size
self.volume = self.length * self.width * self.height
self.size_sum = self.fst_size + self.sed_size + self.trd_size # 三边和
self.density = ceil(self.weight / self.volume * 1000)
self.fst_inch = self.fst_size * 0.3937
self.sed_inch = self.sed_size * 0.3937
self.trd_inch = self.trd_size * 0.3937
self.girth_inch = self.girth * 0.3937
self.volume_inch = self.fst_inch *self.sed_inch*self.trd_inch
self.lbs_weight = self.weight/1000 * 2.2046
def get_volume_weight(self, volume_weight_ratio):
volume_weight = (self.length * self.width * self.height) / volume_weight_ratio
return volume_weight
def __repr__(self):
result = "{"
result += f"\"\":{self.length}, \"\"{self.width}, \"\"{self.height}, \"重量\"{self.weight}"
result +="}"
return result
class PackageLogistics(Package):
def __init__(self, length, width, height, weight,convey,company):
super().__init__(length,width,height,weight)
self.company = company
self.convey = convey
class Package_group:
def __init__(self, packages=None):
self.packages = packages if packages else []
self.volume_weight_key = None # 用于存储体积重系数的键
self.density = self.density()
def add_package(self, package):
self.packages.append(package)
# 设置体积重系数的键
def set_volume_weight_key(self, key):
self.volume_weight_key = key
def total_volume_weight(self):
total_volume_weight = 0
for package in self.packages:
if self.volume_weight_key: # 如果设置了体积重系数的键
volume_weight = package[self.volume_weight_key]
total_volume_weight += volume_weight
return total_volume_weight
def density(self):
volume = 0
weight = 0
density = 0
for package in self.packages:
volume += package.length * package.width * package.height
weight += package.weight
density = ceil(weight / volume * 1000)
return density
def __iter__(self):
return iter(self.packages)
def __len__(self):
return len(self.packages)
def __repr__(self):
result = "{"
i=1
for package in self.packages:
result +=f"\"包裹{i}\": {package.__repr__()}"
i+=1
if i>len(self.packages):
break
result += ","
result += "}"
return result