将购票和取消订单改为存储过程和触发器

This commit is contained in:
2024-06-14 21:26:48 +08:00
parent e435ae4035
commit 97e7382a6d
6 changed files with 84 additions and 50 deletions

View File

@@ -1,4 +1,4 @@
from flask import request, redirect, url_for, g
from flask import request, redirect, url_for, g, flash
from .config import db
import pymysql
@@ -19,33 +19,23 @@ def cancel_order():
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()
try:
# 删除对应的机票
delete_tickets_sql = "DELETE FROM Tickets WHERE OrderID = %s"
cursor.execute(delete_tickets_sql, (order_id,))
# 恢复航班的对应余座数
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_order_sql = "DELETE FROM Orders WHERE ID = %s"
cursor.execute(delete_order_sql, (order_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()
conn.commit()
flash("订单取消成功", "success")
except Exception as e:
conn.rollback()
print(e)
flash(f"订单取消失败:{e}", "error")
finally:
cursor.close()
conn.close()
return redirect(url_for('order_list'))