From aaf5fcdeeaf9ff477ec4d424e655f6a60f31ffde Mon Sep 17 00:00:00 2001 From: aaron <> Date: Mon, 24 Feb 2025 14:09:38 +0800 Subject: [PATCH] update --- app/api/endpoints/order.py | 31 ++++++++++++++++++++++++------- app/core/config.py | 5 ----- app/models/community.py | 13 +++++++++++++ app/models/order.py | 1 + 4 files changed, 38 insertions(+), 12 deletions(-) diff --git a/app/api/endpoints/order.py b/app/api/endpoints/order.py index 95dca7b..03f808b 100644 --- a/app/api/endpoints/order.py +++ b/app/api/endpoints/order.py @@ -79,16 +79,30 @@ def calculate_price(price_request: OrderPriceCalculateRequest,user: UserDB,db: S points_discount_amount=0, original_amount=0, final_amount=0 - ), - price_detail_text=settings.ORDER_PREORDER_PRICE_TEXT + ) ) - original_amount = settings.ORDER_BASE_PRICE + # 默认定价 + base_price = settings.ORDER_BASE_PRICE + extra_package_price = settings.ORDER_EXTRA_PACKAGE_PRICE + extra_package_threshold = settings.ORDER_EXTRA_PACKAGE_THRESHOLD + + # 获取小区定价 + if price_request.community_id > 0: + community = db.query(CommunityDB).filter( + CommunityDB.id == price_request.community_id + ).first() + if community: + base_price = community.base_price + extra_package_price = community.extra_package_price + extra_package_threshold = community.extra_package_threshold + + original_amount = base_price # 超过阈值的包裹额外收费 - if package_count > settings.ORDER_EXTRA_PACKAGE_THRESHOLD: - extra_count = package_count - settings.ORDER_EXTRA_PACKAGE_THRESHOLD - original_amount += extra_count * settings.ORDER_EXTRA_PACKAGE_PRICE + if package_count > extra_package_threshold: + extra_count = package_count - extra_package_threshold + original_amount += extra_count * extra_package_price result.price_info.package_count = package_count result.price_info.pickup_images_count = pickup_images_count @@ -125,7 +139,10 @@ def calculate_price(price_request: OrderPriceCalculateRequest,user: UserDB,db: S # 计算最终金额 result.price_info.final_amount = remaining_amount - + + # 计算价格详情 + result.price_detail_text = f"基础配送费{round(base_price, 1)}元 (含{extra_package_threshold}件包裹),超出部分{round(extra_package_price, 1)}元/件" + return result @router.post("/pre-order", response_model=ResponseModel) diff --git a/app/core/config.py b/app/core/config.py index 2770ce2..92f4edb 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -20,7 +20,6 @@ class Settings(BaseSettings): #订单创建成功文案 ORDER_SUCCESS_TODAY_TEXT: str = "订单预计今晚前送达,请注意查收" ORDER_SUCCESS_TOMORROW_TEXT: str = "订单预计明晚前送达,请注意查收" - ORDER_PREORDER_PRICE_TEXT: str = "基础费3元 (含5件包裹) 超出部分0.5元/件" # JWT 配置 SECRET_KEY: str = "s10GmiRMmplfYWXYZLSsE3X36Ld4gVZxHgAcdqFGC20v3llv7UdOeWLBEEP3e40p" @@ -84,10 +83,6 @@ class Settings(BaseSettings): #配送订单取消 DELIVERY_ORDER_CANCELLED_TEMPLATE_ID: str = "iGR0rPtOFC_u8Xj5-R730zoDD_4Kbswkf_jSTnSSd6E" - - # 企业微信机器人配置 - WECOM_WEBHOOK_URL: str = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=8d403f6f-2f11-4165-bfd8-851cdd6ba4f7" - class Config: case_sensitive = True env_file = ".env" diff --git a/app/models/community.py b/app/models/community.py index 8627231..6ebdc1f 100644 --- a/app/models/community.py +++ b/app/models/community.py @@ -21,6 +21,12 @@ class CommunityDB(Base): status = Column(Enum(CommunityStatus), nullable=False, default=CommunityStatus.UNOPEN) qy_group_qrcode = Column(String(200), nullable=True) # 企业微信群二维码地址 webot_webhook = Column(String(200), nullable=True) # 企业微信机器人webhook + + # 小区定价 + 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) # 额外收费阈值 + create_time = Column(DateTime(timezone=True), server_default=func.now()) update_time = Column(DateTime(timezone=True), onupdate=func.now()) @@ -48,6 +54,10 @@ class CommunityUpdate(BaseModel): status: Optional[CommunityStatus] = None qy_group_qrcode: Optional[str] = Field(None, max_length=200) webot_webhook: Optional[str] = Field(None, max_length=200) + base_price: Optional[float] = Field(None) + extra_package_price: Optional[float] = Field(None) + extra_package_threshold: Optional[int] = Field(None) + class CommunityInfo(BaseModel): id: int name: str @@ -57,6 +67,9 @@ class CommunityInfo(BaseModel): status: CommunityStatus qy_group_qrcode: Optional[str] = None webot_webhook: Optional[str] = None + base_price: Optional[float] = None + extra_package_price: Optional[float] = None + extra_package_threshold: Optional[int] = 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 8598575..b543908 100644 --- a/app/models/order.py +++ b/app/models/order.py @@ -111,6 +111,7 @@ class OrderPackage(BaseModel): # 先定义 OrderPriceCalculateRequest class OrderPriceCalculateRequest(BaseModel): + community_id: int = 0 pickup_images: Optional[str] = None pickup_images_count: int = 0 packages: Optional[List[OrderPackage]] = None