第一次提交
This commit is contained in:
202
app/api/order.py
Normal file
202
app/api/order.py
Normal file
@@ -0,0 +1,202 @@
|
||||
from flask import request, jsonify, current_app
|
||||
from . import api_bp
|
||||
from ..models import Order, Product
|
||||
from .. import db
|
||||
from .decorators import require_admin
|
||||
from datetime import datetime
|
||||
|
||||
@api_bp.route('/orders', methods=['GET'])
|
||||
@require_admin
|
||||
def get_orders():
|
||||
"""获取订单列表(管理员)"""
|
||||
try:
|
||||
# 获取查询参数
|
||||
page = request.args.get('page', 1, type=int)
|
||||
per_page = request.args.get('per_page', 10, type=int)
|
||||
keyword = request.args.get('keyword', '').strip()
|
||||
status = request.args.get('status', type=int)
|
||||
product_id = request.args.get('product_id')
|
||||
date_range = request.args.get('date_range')
|
||||
|
||||
# 构建查询
|
||||
query = Order.query
|
||||
|
||||
# 关键词搜索
|
||||
if keyword:
|
||||
query = query.filter(
|
||||
db.or_(
|
||||
Order.order_number.contains(keyword),
|
||||
Order.contact_person.contains(keyword),
|
||||
Order.phone.contains(keyword)
|
||||
)
|
||||
)
|
||||
|
||||
# 状态筛选
|
||||
if status is not None:
|
||||
query = query.filter(Order.status == status)
|
||||
|
||||
# 产品筛选
|
||||
if product_id:
|
||||
query = query.filter(Order.product_id == product_id)
|
||||
|
||||
# 日期范围筛选
|
||||
if date_range:
|
||||
# 解析日期范围(格式:YYYY-MM-DD to YYYY-MM-DD)
|
||||
try:
|
||||
start_date_str, end_date_str = date_range.split(' to ')
|
||||
start_date = datetime.strptime(start_date_str, '%Y-%m-%d')
|
||||
end_date = datetime.strptime(end_date_str, '%Y-%m-%d')
|
||||
# 设置结束时间为当天23:59:59
|
||||
end_date = end_date.replace(hour=23, minute=59, second=59)
|
||||
query = query.filter(Order.create_time.between(start_date, end_date))
|
||||
except Exception as e:
|
||||
current_app.logger.warning(f"日期范围解析失败: {str(e)}")
|
||||
|
||||
# 排序
|
||||
query = query.order_by(Order.create_time.desc())
|
||||
|
||||
# 分页
|
||||
pagination = query.paginate(
|
||||
page=page, per_page=per_page, error_out=False
|
||||
)
|
||||
|
||||
orders = pagination.items
|
||||
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'data': {
|
||||
'orders': [order.to_dict() for order in orders],
|
||||
'pagination': {
|
||||
'current_page': pagination.page,
|
||||
'per_page': pagination.per_page,
|
||||
'total_pages': pagination.pages,
|
||||
'total_items': pagination.total
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
current_app.logger.error(f"获取订单列表失败: {str(e)}")
|
||||
return jsonify({
|
||||
'success': False,
|
||||
'message': '服务器内部错误'
|
||||
}), 500
|
||||
|
||||
|
||||
@api_bp.route('/orders/<int:order_id>', methods=['GET'])
|
||||
@require_admin
|
||||
def get_order(order_id):
|
||||
"""获取订单详情(管理员)"""
|
||||
try:
|
||||
order = Order.query.get_or_404(order_id)
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'data': order.to_dict()
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
current_app.logger.error(f"获取订单详情失败: {str(e)}")
|
||||
return jsonify({
|
||||
'success': False,
|
||||
'message': '服务器内部错误'
|
||||
}), 500
|
||||
|
||||
|
||||
@api_bp.route('/orders/<int:order_id>/confirm-payment', methods=['POST'])
|
||||
@require_admin
|
||||
def confirm_order_payment(order_id):
|
||||
"""确认订单支付(管理员)"""
|
||||
try:
|
||||
order = Order.query.get_or_404(order_id)
|
||||
|
||||
if order.status != 0: # 只有待支付的订单可以确认支付
|
||||
return jsonify({
|
||||
'success': False,
|
||||
'message': '订单状态不允许此操作'
|
||||
}), 400
|
||||
|
||||
# 更新订单状态
|
||||
order.status = 1 # 已支付
|
||||
order.payment_time = datetime.utcnow()
|
||||
order.payment_method = 'manual' # 手动确认
|
||||
|
||||
db.session.commit()
|
||||
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'message': '订单支付确认成功'
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
db.session.rollback()
|
||||
current_app.logger.error(f"确认订单支付失败: {str(e)}")
|
||||
return jsonify({
|
||||
'success': False,
|
||||
'message': '服务器内部错误'
|
||||
}), 500
|
||||
|
||||
|
||||
@api_bp.route('/orders/<int:order_id>/complete', methods=['POST'])
|
||||
@require_admin
|
||||
def complete_order(order_id):
|
||||
"""完成订单(管理员)"""
|
||||
try:
|
||||
order = Order.query.get_or_404(order_id)
|
||||
|
||||
if order.status != 1: # 只有已支付的订单可以完成
|
||||
return jsonify({
|
||||
'success': False,
|
||||
'message': '订单状态不允许此操作'
|
||||
}), 400
|
||||
|
||||
# 更新订单状态
|
||||
order.status = 3 # 已完成
|
||||
order.update_time = datetime.utcnow()
|
||||
|
||||
db.session.commit()
|
||||
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'message': '订单完成操作成功'
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
db.session.rollback()
|
||||
current_app.logger.error(f"完成订单失败: {str(e)}")
|
||||
return jsonify({
|
||||
'success': False,
|
||||
'message': '服务器内部错误'
|
||||
}), 500
|
||||
|
||||
|
||||
@api_bp.route('/orders/<int:order_id>/cancel', methods=['POST'])
|
||||
@require_admin
|
||||
def cancel_order(order_id):
|
||||
"""取消订单(管理员)"""
|
||||
try:
|
||||
order = Order.query.get_or_404(order_id)
|
||||
|
||||
if order.status not in [0, 1]: # 只有待支付和已支付的订单可以取消
|
||||
return jsonify({
|
||||
'success': False,
|
||||
'message': '订单状态不允许此操作'
|
||||
}), 400
|
||||
|
||||
# 更新订单状态
|
||||
order.status = 2 # 已取消
|
||||
order.update_time = datetime.utcnow()
|
||||
|
||||
db.session.commit()
|
||||
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'message': '订单取消操作成功'
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
db.session.rollback()
|
||||
current_app.logger.error(f"取消订单失败: {str(e)}")
|
||||
return jsonify({
|
||||
'success': False,
|
||||
'message': '服务器内部错误'
|
||||
}), 500
|
||||
Reference in New Issue
Block a user