fix order issue.

This commit is contained in:
aaron 2025-01-13 18:04:54 +08:00
parent fe41fcc12b
commit 5028e1148c
5 changed files with 74 additions and 27 deletions

View File

@ -37,7 +37,7 @@ deactivate () {
# unset irrelevant variables # unset irrelevant variables
deactivate nondestructive deactivate nondestructive
VIRTUAL_ENV="/Users/aaron/Desktop/code/deliveryman/.venv" VIRTUAL_ENV="/Users/aaron/source_code/beefast-api/.venv"
export VIRTUAL_ENV export VIRTUAL_ENV
_OLD_VIRTUAL_PATH="$PATH" _OLD_VIRTUAL_PATH="$PATH"

View File

@ -8,7 +8,7 @@ alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PA
# Unset irrelevant variables. # Unset irrelevant variables.
deactivate nondestructive deactivate nondestructive
setenv VIRTUAL_ENV "/Users/aaron/Desktop/code/deliveryman/.venv" setenv VIRTUAL_ENV "/Users/aaron/source_code/beefast-api/.venv"
set _OLD_VIRTUAL_PATH="$PATH" set _OLD_VIRTUAL_PATH="$PATH"
setenv PATH "$VIRTUAL_ENV/bin:$PATH" setenv PATH "$VIRTUAL_ENV/bin:$PATH"

View File

@ -29,7 +29,7 @@ end
# Unset irrelevant variables. # Unset irrelevant variables.
deactivate nondestructive deactivate nondestructive
set -gx VIRTUAL_ENV "/Users/aaron/Desktop/code/deliveryman/.venv" set -gx VIRTUAL_ENV "/Users/aaron/source_code/beefast-api/.venv"
set -gx _OLD_VIRTUAL_PATH $PATH set -gx _OLD_VIRTUAL_PATH $PATH
set -gx PATH "$VIRTUAL_ENV/bin" $PATH set -gx PATH "$VIRTUAL_ENV/bin" $PATH

View File

@ -1,6 +1,6 @@
from fastapi import APIRouter, Depends from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from typing import List from typing import List, Optional
from app.models.order import ( from app.models.order import (
ShippingOrderDB, ShippingOrderDB,
ShippingOrderPackageDB, ShippingOrderPackageDB,
@ -15,12 +15,13 @@ from app.models.order import (
OrderComplete OrderComplete
) )
from app.models.database import get_db from app.models.database import get_db
from app.api.deps import get_current_user from app.api.deps import get_current_user, get_deliveryman_user
from app.models.user import UserDB from app.models.user import UserDB
from app.core.response import success_response, error_response, ResponseModel from app.core.response import success_response, error_response, ResponseModel
from app.models.coupon import UserCouponDB, CouponStatus from app.models.coupon import UserCouponDB, CouponStatus
from datetime import datetime, timezone from datetime import datetime, timezone
from app.core.config import settings from app.core.config import settings
from app.models.address import AddressDB
router = APIRouter() router = APIRouter()
@ -51,18 +52,14 @@ async def create_shipping_order(
# 计算优惠券折扣 # 计算优惠券折扣
coupon_discount = 0 coupon_discount = 0
coupon_id = None coupon_id = None
if order.price_request.coupon_id: # 查询用户优惠券
# 查询用户优惠券 user_coupon = db.query(UserCouponDB).filter(
user_coupon = db.query(UserCouponDB).filter( UserCouponDB.user_id == current_user.userid,
UserCouponDB.id == order.price_request.coupon_id, UserCouponDB.status == CouponStatus.UNUSED,
UserCouponDB.user_id == current_user.userid, UserCouponDB.expire_time > datetime.now(timezone.utc)
UserCouponDB.status == CouponStatus.UNUSED, ).first()
UserCouponDB.expire_time > datetime.now(timezone.utc)
).first() if user_coupon:
if not user_coupon:
return error_response(code=400, message="优惠券无效或已过期")
coupon_discount = user_coupon.coupon_amount coupon_discount = user_coupon.coupon_amount
coupon_id = user_coupon.id coupon_id = user_coupon.id
# 更新优惠券状态 # 更新优惠券状态
@ -284,4 +281,50 @@ async def complete_order(
) )
except Exception as e: except Exception as e:
db.rollback() db.rollback()
return error_response(code=500, message=f"完成订单失败: {str(e)}") return error_response(code=500, message=f"完成订单失败: {str(e)}")
@router.get("/delivery", response_model=ResponseModel)
async def get_delivery_orders(
status: Optional[OrderStatus] = None,
community_building_id: Optional[int] = None,
skip: int = 0,
limit: int = 10,
db: Session = Depends(get_db),
deliveryman: UserDB = Depends(get_deliveryman_user) # 使用已有的配送员权限检查
):
"""获取配送订单列表(仅配送员可用)
Args:
status: 订单状态筛选
community_building_id: 社区楼栋ID筛选
skip: 分页偏移
limit: 每页数量
"""
# 基础查询
query = db.query(ShippingOrderDB).join(
AddressDB,
ShippingOrderDB.addressid == AddressDB.id
)
# 添加状态筛选
if status:
query = query.filter(ShippingOrderDB.status == status)
# 添加社区楼栋筛选
if community_building_id:
query = query.filter(
AddressDB.community_building_id == community_building_id
)
# 获取总数
total = query.count()
# 获取分页数据并按创建时间倒序排序
orders = query.order_by(
ShippingOrderDB.create_time.desc()
).offset(skip).limit(limit).all()
return success_response(data={
"total": total,
"items": [OrderInfo.model_validate(o) for o in orders]
})

View File

@ -7,15 +7,15 @@ from .database import Base
import enum import enum
class OrderStatus(str, enum.Enum): class OrderStatus(str, enum.Enum):
CREATED = "created" # 已下单 CREATED = "CREATED" # 已下单
ACCEPTED = "accepted" # 已接单 ACCEPTED = "ACCEPTED" # 已接单
UNPAID = "unpaid" # 未支付 UNPAID = "UNPAID" # 未支付
COMPLETED = "completed" # 已完成 COMPLETED = "COMPLETED" # 已完成
CANCELLED = "cancelled" # 已取消 CANCELLED = "CANCELLED" # 已取消
class DeliveryMethod(str, enum.Enum): class DeliveryMethod(str, enum.Enum):
DELIVERY_TO_DOOR = "delivery_to_door" # 放在门口 DELIVERY_AT_DOORSTEP = "DELIVERY_AT_DOORSTEP" # 放在门口
DELIVERY_TO_ROOM = "delivery_to_room" # 投递到家 DELIVERY_TO_ROOM = "DELIVERY_TO_ROOM" # 投递到家
# 数据库模型 # 数据库模型
class ShippingOrderDB(Base): class ShippingOrderDB(Base):
@ -33,7 +33,11 @@ class ShippingOrderDB(Base):
cancel_reason = Column(String(200), nullable=True) # 取消原因 cancel_reason = Column(String(200), nullable=True) # 取消原因
complete_images = Column(String(1000), nullable=True) # 完成订单的图片URL多个URL用逗号分隔 complete_images = Column(String(1000), nullable=True) # 完成订单的图片URL多个URL用逗号分隔
create_time = Column(DateTime(timezone=True), server_default=func.now()) create_time = Column(DateTime(timezone=True), server_default=func.now())
delivery_method = Column(Enum(DeliveryMethod), nullable=False, default=DeliveryMethod.DELIVERY_TO_DOOR) delivery_method = Column(
Enum(DeliveryMethod),
nullable=False,
default=DeliveryMethod.DELIVERY_AT_DOORSTEP
)
class ShippingOrderPackageDB(Base): class ShippingOrderPackageDB(Base):
__tablename__ = "shipping_order_packages" __tablename__ = "shipping_order_packages"
@ -58,7 +62,7 @@ class OrderCreate(BaseModel):
addressid: int addressid: int
price_request: OrderPriceCalculateRequest price_request: OrderPriceCalculateRequest
delivery_method: DeliveryMethod = Field( delivery_method: DeliveryMethod = Field(
default=DeliveryMethod.DELIVERY_TO_DOOR, default=DeliveryMethod.DELIVERY_AT_DOORSTEP,
description="配送方式:放在门口或投递到家" description="配送方式:放在门口或投递到家"
) )