52 lines
1.6 KiB
Python
52 lines
1.6 KiB
Python
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'))
|