|
|
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
|