This commit is contained in:
aaron 2025-02-24 14:09:38 +08:00
parent 3353b88431
commit aaf5fcdeea
4 changed files with 38 additions and 12 deletions

View File

@ -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)

View File

@ -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"

View File

@ -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 # 距离,单位:米

View File

@ -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