增加配送员获取订单列表的相关接口。
楼栋列表接口,支持传入 user_id,来获取对应小区的楼栋。
This commit is contained in:
parent
649ab1f493
commit
84ba861814
@ -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)
|
||||
|
||||
# 获取总数
|
||||
|
||||
@ -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(
|
||||
|
||||
@ -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!"}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user