from flask import request, redirect, url_for, g from .config import db import pymysql def cancel_order(): order_id = request.args.get('order_id') if not g.user: return redirect(url_for("login")) conn = pymysql.connect(**db) cursor = conn.cursor(pymysql.cursors.DictCursor) # 检查订单是否存在 check_order_sql = "SELECT ID FROM Orders WHERE ID = %s" cursor.execute(check_order_sql, (order_id,)) order_exists = cursor.fetchone() if not order_exists: cursor.close() conn.close() return redirect(url_for("order_list")) # 查询订单中所有机票的航班ID和座位级别 tickets_sql = "SELECT FlightID, Seat_class FROM Tickets WHERE OrderID = %s" cursor.execute(tickets_sql, (order_id,)) tickets = cursor.fetchall() # 恢复航班的对应余座数 for ticket in tickets: flight_id = ticket['FlightID'] seat_class = ticket['Seat_class'] seat_column = seat_class.replace(' ', '_').lower() + "_seats_remaining" update_seat_sql = f""" UPDATE Flights SET {seat_column} = {seat_column} + 1 WHERE ID = %s """ cursor.execute(update_seat_sql, (flight_id,)) # 删除对应的机票 delete_tickets_sql = "DELETE FROM Tickets WHERE OrderID = %s" cursor.execute(delete_tickets_sql, (order_id,)) # 删除订单 delete_order_sql = "DELETE FROM Orders WHERE ID = %s" cursor.execute(delete_order_sql, (order_id,)) conn.commit() cursor.close() conn.close() return redirect(url_for('order_list'))