diff --git a/app/api/endpoints/order.py b/app/api/endpoints/order.py index 3d3a4c1..8a9ec64 100644 --- a/app/api/endpoints/order.py +++ b/app/api/endpoints/order.py @@ -185,6 +185,17 @@ async def pre_order( current_user: UserDB = Depends(get_current_user) ): + # 检查是否有配送员在线 + deliveryman_online = db.query(UserDB).filter( + UserDB.roles.contains([UserRole.DELIVERYMAN]), + UserDB.community_id == request.community_id, + UserDB.is_delivering == True + ).first() + + if not deliveryman_online: + return error_response(code=400, message="没有配送员在线, 无法下单") + + # 检查是否有未支付的订单 unpay_order = db.query(ShippingOrderDB).filter( ShippingOrderDB.userid == current_user.userid, diff --git a/app/api/endpoints/user.py b/app/api/endpoints/user.py index 85512d3..c0bec56 100644 --- a/app/api/endpoints/user.py +++ b/app/api/endpoints/user.py @@ -23,7 +23,7 @@ from app.models.user_auth import UserAuthDB, UserAuthCreate, UserAuthInfo from app.core.qcloud import qcloud_manager from app.models.merchant import MerchantDB from app.models.address import AddressDB, AddressInfo -from app.models.user import UserUpdateRoles +from app.models.user import UserUpdateRoles, DeliverymanSetDelivering from app.models.order import ShippingOrderDB, OrderStatus from app.core.redis_client import redis_client import logging @@ -434,6 +434,19 @@ async def change_password( except Exception as e: db.rollback() return error_response(code=500, message=f"修改密码失败: {str(e)}") + +@router.put("/deliveryman/set_delivering", response_model=ResponseModel) +async def deliveryman_set_delivering( + request: DeliverymanSetDelivering, + db: Session = Depends(get_db), + current_user: UserDB = Depends(get_current_user) +): + """配送员设置是否在配送中""" + current_user.is_delivering = request.is_delivering + db.commit() + return success_response(message="设置成功",data={ + "is_delivering": current_user.is_delivering + }) @router.post("/auth", response_model=ResponseModel) async def create_user_auth( diff --git a/app/models/user.py b/app/models/user.py index 234267b..77539c8 100644 --- a/app/models/user.py +++ b/app/models/user.py @@ -52,6 +52,7 @@ class UserDB(Base): update_time = Column(DateTime(timezone=True), onupdate=func.now()) community_id = Column(Integer, ForeignKey("communities.id"), nullable=True) # 归属小区 is_auth = Column(Boolean, nullable=False, default=False) + is_delivering = Column(Boolean, nullable=False, default=False) # 是否在配送中 # 用户所属小区关系 community = relationship("CommunityDB", foreign_keys=[community_id], backref=backref("residents", lazy="dynamic")) @@ -87,7 +88,7 @@ class UserInfo(BaseModel): community_id: Optional[int] = None community_name: Optional[str] = None is_auth: bool = False - + is_delivering: bool = False class Config: from_attributes = True @@ -124,6 +125,9 @@ class UserUpdateRoles(BaseModel): user_id: int roles: List[UserRole] +class DeliverymanSetDelivering(BaseModel): + is_delivering: bool + def generate_user_code(db=None) -> str: """生成6位大写字母+数字的用户编码""" chars = string.ascii_uppercase + string.digits diff --git a/jobs.sqlite b/jobs.sqlite index 3c26678..f6f77ec 100644 Binary files a/jobs.sqlite and b/jobs.sqlite differ