增加 admin 的订单列表

This commit is contained in:
aaron 2025-01-28 00:46:46 +08:00
parent 84fcfdc6c9
commit 67b04950cc

View File

@ -17,7 +17,7 @@ from app.models.order import (
OrderPriceResult
)
from app.models.database import get_db
from app.api.deps import get_current_user, get_deliveryman_user
from app.api.deps import get_current_user, get_deliveryman_user, get_admin_user
from app.models.user import UserDB,UserRole
from app.core.response import success_response, error_response, ResponseModel
from app.models.coupon import UserCouponDB, CouponStatus
@ -301,19 +301,98 @@ async def get_order_detail(
@router.get("/user/list", response_model=ResponseModel)
async def get_user_orders(
status: Optional[OrderStatus] = None,
skip: int = 0,
limit: int = 10,
limit: int = 20,
db: Session = Depends(get_db),
current_user: UserDB = Depends(get_current_user)
):
"""获取用户的订单列表"""
orders = db.query(ShippingOrderDB).filter(
ShippingOrderDB.userid == current_user.userid
).order_by(
ShippingOrderDB.create_time.desc()
).offset(skip).limit(limit).all()
return success_response(data=[OrderInfo.model_validate(o) for o in orders])
"""获取用户订单列表"""
try:
# 查询订单和地址信息
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(
ShippingOrderDB.userid == current_user.userid
)
# 添加状态过滤
if status:
query = query.filter(ShippingOrderDB.status == status)
# 获取总数
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,
"userid": order.userid,
"status": order.status,
"package_count": order.package_count,
"create_time": order.create_time,
"delivery_method": order.delivery_method,
"original_amount": order.original_amount,
"coupon_discount_amount": order.coupon_discount_amount,
"point_discount_amount": order.point_discount_amount,
"final_amount": order.final_amount,
"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,
"address_detail": address.address_detail
}
})
return success_response(data={
"total": total,
"items": orders
})
except Exception as e:
return error_response(code=500, message=f"获取订单列表失败: {str(e)}")
@router.get("/deliveryman/list", response_model=ResponseModel)
async def get_deliveryman_orders(
@ -384,6 +463,7 @@ async def get_deliveryman_orders(
orders.append({
"orderid": order.orderid,
"userid": order.userid,
"status": order.status,
"package_count": order.package_count,
"create_time": order.create_time,
@ -398,7 +478,6 @@ async def get_deliveryman_orders(
"building_id": building.id,
"building_name": building.building_name,
"building_number": building.building_number,
"room_number": address.room_number,
"address_detail": address.address_detail
}
})
@ -574,4 +653,115 @@ async def pickup_order(
)
except Exception as e:
db.rollback()
return error_response(code=500, message=f"操作失败: {str(e)}")
return error_response(code=500, message=f"操作失败: {str(e)}")
@router.get("/admin/list", response_model=ResponseModel)
async def get_orders(
status: Optional[OrderStatus] = None,
user_id: Optional[int] = None,
order_id: Optional[str] = None,
skip: int = 0,
limit: int = 20,
db: Session = Depends(get_db),
admin_user: UserDB = Depends(get_admin_user)
):
"""获取订单列表(管理员接口)
Args:
status: 订单状态过滤
user_id: 用户ID过滤
order_id: 订单号过滤
skip: 跳过记录数
limit: 返回记录数
"""
try:
# 构建基础查询
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
)
# 添加用户ID过滤
if user_id:
query = query.filter(ShippingOrderDB.userid == user_id)
# 添加状态过滤
if status:
query = query.filter(ShippingOrderDB.status == status)
# 添加订单号过滤
if order_id:
query = query.filter(ShippingOrderDB.orderid == order_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,
"userid": order.userid,
"status": order.status,
"package_count": order.package_count,
"create_time": order.create_time,
"delivery_method": order.delivery_method,
"original_amount": order.original_amount,
"coupon_discount_amount": order.coupon_discount_amount,
"point_discount_amount": order.point_discount_amount,
"final_amount": order.final_amount,
"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,
"address_detail": address.address_detail
}
})
return success_response(data={
"total": total,
"items": orders
})
except Exception as e:
return error_response(code=500, message=f"获取订单列表失败: {str(e)}")