You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
2.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

from email.utils import parsedate_to_datetime
from flask import Blueprint, request, jsonify
from flask_jwt_extended import get_jwt_identity, jwt_required
from app import db, LogService
from app.models.order_lib import generateOrder, Order
from presenter.order import OrderPresenter
from utils import create_response, StateCode
from utils.server import verifyOrderPayment
order_bp = Blueprint('order', __name__)
@order_bp.route('/orders', methods=['POST'])
@jwt_required()
def createOrder():
current_user = get_jwt_identity()
data = request.json
new_order = generateOrder(data, current_user)
db.session.add(new_order)
db.session.commit()
order_presenter = OrderPresenter(new_order).as_dict()
LogService.log()
return jsonify(create_response(StateCode.SUCCESS, data=order_presenter)), 200
@order_bp.route('/orders/<string:order_no>/query_payment', methods=['POST'])
@jwt_required()
def queryPayment(order_no):
current_user = get_jwt_identity()
response = verifyOrderPayment(order_no)
if response.status_code == 200:
data = response.json().get("data")
pay_time_str = data["pay_time"] # 如Thu, 05 Jun 2025 20:56:56 GMT
# 解析为 datetime 对象
pay_time = parsedate_to_datetime(pay_time_str)
# 更新订单状态和支付时间
order = Order.setOrderState(order_no, current_user, state=1, payment_time=pay_time)
order_presenter = OrderPresenter(order).as_dict()
LogService.log()
return jsonify(create_response(StateCode.SUCCESS, data=order_presenter)), 200
else:
LogService.log()
return jsonify(create_response(StateCode.ORDER_PAY_ERROR)), 400
@order_bp.route('/orders', methods=['GET'])
@jwt_required()
def queryOrder():
state = request.args.get("state")
current_user = get_jwt_identity()
orders = Order.query.filter(Order.passenger_id == current_user, Order.state == state).all()
order_presenter = [OrderPresenter(order).as_dict() for order in orders]
LogService.log()
return jsonify(create_response(StateCode.SUCCESS, data=order_presenter)), 200