This commit is contained in:
aaron 2025-03-13 23:40:30 +08:00
parent 8a063a7cb2
commit 6b258c669f
5 changed files with 18 additions and 4 deletions

View File

@ -128,6 +128,7 @@ async def get_communities(
"base_price": float(community.base_price),
"extra_package_price": float(community.extra_package_price),
"extra_package_threshold": community.extra_package_threshold,
"more_station_price": float(community.more_station_price),
"distance": float(distance_value) if distance_value is not None else None,
"admin": None if community.admin is None else {
"id": community.admin.userid,

View File

@ -105,12 +105,16 @@ def calculate_price(price_request: OrderPriceCalculateRequest,user: UserDB,db: S
extra_package_price = float(community.extra_package_price)
extra_package_threshold = int(community.extra_package_threshold)
original_amount = round((base_price + extra_package_price * max(0, package_count - extra_package_threshold)), 2)
# 是否有多驿站
more_station_price = float(community.more_station_price) * (len(price_request.packages) - 1) if len(price_request.packages) > 1 else 0
original_amount = round(more_station_price + (base_price + extra_package_price * max(0, package_count - extra_package_threshold)), 2)
result.price_info.package_count = package_count
result.price_info.pickup_images_count = pickup_images_count
result.price_info.pickup_code_count = pickup_code_count
result.price_info.original_amount = original_amount
result.price_info.more_station_price = more_station_price
result.price_info.final_amount = original_amount
remaining_amount = original_amount
@ -145,7 +149,7 @@ def calculate_price(price_request: OrderPriceCalculateRequest,user: UserDB,db: S
result.price_info.final_amount = round(remaining_amount, 2)
# 计算价格详情
result.price_detail_text = f"基础配送费{round(base_price, 1)}元 (含{extra_package_threshold}件包裹),超出部分{round(extra_package_price, 1)}元/件"
result.price_detail_text = f"基础配送费{round(base_price, 1)}元 (含{extra_package_threshold}件包裹),超出部分{round(extra_package_price, 1)}元/件,多驿站费: {round(more_station_price, 1)}元/驿站"
return result
@ -255,6 +259,7 @@ async def create_order(
original_amount=original_amount,
coupon_discount_amount=coupon_discount,
point_discount_amount=price_info.points_discount_amount,
more_station_price=price_info.more_station_price,
coupon_id=coupon_id,
final_amount=price_info.final_amount,
status=OrderStatus.CREATED,
@ -505,6 +510,7 @@ async def get_order_detail(
"original_amount": order.original_amount,
"coupon_discount_amount": order.coupon_discount_amount,
"point_discount_amount": order.point_discount_amount,
"more_station_price": order.more_station_price,
"additional_fee_amount": order.additional_fee_amount,
"coupon_id": order.coupon_id,
"final_amount": order.final_amount,

View File

@ -27,8 +27,9 @@ class CommunityDB(Base):
# 小区定价
base_price = Column(DECIMAL(10,2), nullable=False, default=3.0) # 基础费用
extra_package_price = Column(DECIMAL(10,2), nullable=False, default=0.5) # 额外包裹费用
extra_package_threshold = Column(Integer, nullable=False, default=5) # 额外收费阈值
extra_package_price = Column(DECIMAL(10,2), nullable=False, default=1) # 额外包裹费用
extra_package_threshold = Column(Integer, nullable=False, default=2) # 额外收费阈值
more_station_price = Column(DECIMAL(10,2), nullable=False, default=1.0) # 多驿站加价
create_time = Column(DateTime(timezone=True), server_default=func.now())
update_time = Column(DateTime(timezone=True), onupdate=func.now())
@ -71,7 +72,9 @@ class CommunityUpdate(BaseModel):
base_price: Optional[float] = Field(None)
extra_package_price: Optional[float] = Field(None)
extra_package_threshold: Optional[int] = Field(None)
more_station_price: Optional[float] = Field(None)
admin_id: Optional[int] = Field(None)
class CommunityInfo(BaseModel):
id: int
name: str
@ -85,6 +88,7 @@ class CommunityInfo(BaseModel):
base_price: Optional[float] = None
extra_package_price: Optional[float] = None
extra_package_threshold: Optional[int] = None
more_station_price: Optional[float] = None
optimized_qy_group_qrcode: Optional[str] = None
distance: Optional[float] = None # 距离,单位:米

View File

@ -72,6 +72,7 @@ class ShippingOrderDB(Base):
original_amount = Column(Float, nullable=False)
coupon_discount_amount = Column(Float, default=0)
point_discount_amount = Column(Float, default=0)
more_station_price = Column(Float, default=0)
additional_fee_amount = Column(Float, default=0)
coupon_id = Column(Integer, ForeignKey("user_coupons.id"), nullable=True)
final_amount = Column(Float, nullable=False)
@ -172,6 +173,7 @@ class OrderInfo(BaseModel):
original_amount: float = 0
coupon_discount_amount: float = 0
point_discount_amount: float = 0
more_station_price: float = 0
additional_fee_amount: float = 0
coupon_id: Optional[int] = None
final_amount: float = 0
@ -220,6 +222,7 @@ class OrderPriceInfo(BaseModel):
original_amount: float = 0
coupon_discount_amount: float = 0
points_discount_amount: float = 0
more_station_price: float = 0
coupon_id: Optional[int] = None
final_amount: float = 0

Binary file not shown.