diff --git a/app/api/endpoints/community_building.py b/app/api/endpoints/community_building.py index 5e904c9..73eb227 100644 --- a/app/api/endpoints/community_building.py +++ b/app/api/endpoints/community_building.py @@ -18,11 +18,19 @@ router = APIRouter() @router.get("/list", response_model=ResponseModel) async def get_buildings( community_id: Optional[int] = None, + user_id: Optional[int] = None, skip: int = 0, limit: int = 10, db: Session = Depends(get_db) ): - """获取楼栋列表""" + """获取楼栋列表 + + Args: + community_id: 小区ID + user_id: 用户ID,用于获取用户所属小区的楼栋 + skip: 跳过记录数 + limit: 返回记录数 + """ # 联表查询,获取社区名称 query = db.query( CommunityBuildingDB, @@ -32,7 +40,14 @@ async def get_buildings( CommunityBuildingDB.community_id == CommunityDB.id ) - if community_id: + # 如果指定了用户ID,查询用户所属小区 + if user_id: + user = db.query(UserDB).filter(UserDB.userid == user_id).first() + if not user or not user.community_id: + return error_response(code=400, message="用户未关联小区") + query = query.filter(CommunityBuildingDB.community_id == user.community_id) + # 如果指定了小区ID,直接筛选 + elif community_id: query = query.filter(CommunityBuildingDB.community_id == community_id) # 获取总数 diff --git a/app/api/endpoints/order.py b/app/api/endpoints/order.py index ef25fbb..a7896c9 100644 --- a/app/api/endpoints/order.py +++ b/app/api/endpoints/order.py @@ -199,7 +199,7 @@ async def get_order_detail( "packages": package_list }) -@router.get("/", response_model=ResponseModel) +@router.get("/user/list", response_model=ResponseModel) async def get_user_orders( skip: int = 0, limit: int = 10, @@ -215,6 +215,100 @@ async def get_user_orders( return success_response(data=[OrderInfo.model_validate(o) for o in orders]) +@router.get("/deliveryman/list", response_model=ResponseModel) +async def get_deliveryman_orders( + status: Optional[OrderStatus] = None, + building_id: Optional[int] = None, + skip: int = 0, + limit: int = 20, + db: Session = Depends(get_db), + deliveryman: UserDB = Depends(get_deliveryman_user) +): + """获取配送员订单列表""" + # 基础查询 + query = db.query( + ShippingOrderDB, + AddressDB, + CommunityBuildingDB, + CommunityDB + ).join( + AddressDB, + ShippingOrderDB.addressid == AddressDB.id + ).join( + CommunityBuildingDB, + AddressDB.community_building_id == CommunityBuildingDB.id + ).join( + CommunityDB, + CommunityBuildingDB.community_id == CommunityDB.id + ).filter( + CommunityDB.id == deliveryman.community_id + ) + + # 状态筛选 + if status: + query = query.filter(ShippingOrderDB.status == status) + + # 楼栋筛选 + if building_id: + query = query.filter(AddressDB.community_building_id == building_id) + + # 获取总数 + total = query.count() + + # 获取分页数据 + results = query.order_by( + ShippingOrderDB.create_time.desc() + ).offset(skip).limit(limit).all() + + # 格式化返回数据 + orders = [] + for order, address, building, community in results: + # 查询订单包裹信息 + packages = db.query( + ShippingOrderPackageDB, + StationDB.name.label('station_name') + ).join( + StationDB, + ShippingOrderPackageDB.station_id == StationDB.id + ).filter( + ShippingOrderPackageDB.orderid == order.orderid + ).all() + + # 格式化包裹信息 + package_list = [{ + "id": package.ShippingOrderPackageDB.id, + "station_id": package.ShippingOrderPackageDB.station_id, + "station_name": package.station_name, + "pickup_codes": package.ShippingOrderPackageDB.pickup_codes + } for package in packages] + + orders.append({ + "orderid": order.orderid, + "status": order.status, + "package_count": order.package_count, + "create_time": order.create_time, + "delivery_method": order.delivery_method, + "packages": package_list, + "address": { + "id": address.id, + "name": address.name, + "phone": address.phone, + "community_id": community.id, + "community_name": community.name, + "building_id": building.id, + "building_name": building.building_name, + "building_number": building.building_number, + "room_number": address.room_number, + "address_detail": address.address_detail + } + }) + + return success_response(data={ + "total": total, + "items": orders + }) + + @router.post("/calculate-price", response_model=ResponseModel) async def calculate_order_price( request: OrderPriceCalculateRequest, @@ -346,51 +440,6 @@ async def complete_order( db.rollback() 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] - }) @router.post("/{orderid}/accept", response_model=ResponseModel) async def accept_order( diff --git a/app/main.py b/app/main.py index 21e09bc..318daad 100644 --- a/app/main.py +++ b/app/main.py @@ -32,22 +32,23 @@ app.add_middleware(RequestLoggerMiddleware) # 添加用户路由 app.include_router(wechat.router,prefix="/api/wechat",tags=["微信"]) app.include_router(user.router, prefix="/api/user", tags=["用户"]) +app.include_router(point.router, prefix="/api/point", tags=["用户积分"]) app.include_router(address.router, prefix="/api/address", tags=["配送地址"]) app.include_router(community.router, prefix="/api/community", tags=["社区"]) app.include_router(community_building.router, prefix="/api/community/building", tags=["社区楼栋"]) app.include_router(station.router, prefix="/api/station", tags=["驿站"]) app.include_router(order.router, prefix="/api/order", tags=["订单"]) app.include_router(coupon.router, prefix="/api/coupon", tags=["跑腿券"]) -app.include_router(upload.router, prefix="/api/upload", tags=["文件上传"]) app.include_router(merchant.router, prefix="/api/merchant", tags=["商家"]) app.include_router(merchant_category.router, prefix="/api/merchant-categories", tags=["商家分类"]) app.include_router(merchant_product.router, prefix="/api/merchant/product", tags=["商家产品"]) app.include_router(merchant_order.router, prefix="/api/merchant/order", tags=["商家订单"]) -app.include_router(point.router, prefix="/api/point", tags=["用户积分"]) +app.include_router(upload.router, prefix="/api/upload", tags=["文件上传"]) app.include_router(config.router, prefix="/api/config", tags=["系统配置"]) app.include_router(log.router, prefix="/api/logs", tags=["系统日志"]) + @app.get("/") async def root(): return {"message": "欢迎使用 FastAPI!"}