diff --git a/app/api/endpoints/community.py b/app/api/endpoints/community.py index 742faa3..930d3e1 100644 --- a/app/api/endpoints/community.py +++ b/app/api/endpoints/community.py @@ -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, diff --git a/app/api/endpoints/order.py b/app/api/endpoints/order.py index 5ce9975..81c4b86 100644 --- a/app/api/endpoints/order.py +++ b/app/api/endpoints/order.py @@ -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, diff --git a/app/models/community.py b/app/models/community.py index f17d53b..fd6514e 100644 --- a/app/models/community.py +++ b/app/models/community.py @@ -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 # 距离,单位:米 diff --git a/app/models/order.py b/app/models/order.py index a885119..7b4a1d1 100644 --- a/app/models/order.py +++ b/app/models/order.py @@ -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 diff --git a/jobs.sqlite b/jobs.sqlite index 0fb2f09..3ee5678 100644 Binary files a/jobs.sqlite and b/jobs.sqlite differ