将购票和取消订单改为存储过程和触发器
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -37,7 +37,7 @@ def book():
|
||||
|
||||
if not passengers:
|
||||
flash("请至少添加一位乘客", "error")
|
||||
return redirect(url_for('index'))
|
||||
return redirect(url_for('search'))
|
||||
|
||||
conn = pymysql.connect(**db)
|
||||
cursor = conn.cursor()
|
||||
@@ -62,25 +62,8 @@ def book():
|
||||
cursor.execute(price_sql, (flight_id,))
|
||||
price = cursor.fetchone()[0]
|
||||
|
||||
insert_passenger_sql = """
|
||||
INSERT INTO Passengers (ID, Name, Phone_number)
|
||||
VALUES (%s, %s, %s)
|
||||
ON DUPLICATE KEY UPDATE Name=VALUES(Name), Phone_number=VALUES(Phone_number);
|
||||
"""
|
||||
cursor.execute(insert_passenger_sql, (passenger_id, name, phone_number))
|
||||
|
||||
update_seat_sql = f"""
|
||||
UPDATE Flights
|
||||
SET {seat_class.replace(' ', '_').lower()}_seats_remaining = {seat_class.replace(' ', '_').lower()}_seats_remaining - 1
|
||||
WHERE ID = %s
|
||||
"""
|
||||
cursor.execute(update_seat_sql, (flight_id,))
|
||||
|
||||
insert_ticket_sql = """
|
||||
INSERT INTO Tickets (Price, FlightID, Seat_class, PassengerID, OrderID)
|
||||
VALUES (%s, %s, %s, %s, %s)
|
||||
"""
|
||||
cursor.execute(insert_ticket_sql, (price, flight_id, seat_class, passenger_id, order_id))
|
||||
# 调用存储过程
|
||||
cursor.callproc('AddPassengerAndTicket', (passenger_id, name, phone_number, seat_class, flight_id, price, order_id))
|
||||
|
||||
conn.commit()
|
||||
return redirect(url_for('order', order_id=order_id))
|
||||
@@ -89,8 +72,8 @@ def book():
|
||||
conn.rollback()
|
||||
print(e)
|
||||
flash("订票失败", "error")
|
||||
return redirect(url_for('index'))
|
||||
return redirect(url_for('search'))
|
||||
|
||||
finally:
|
||||
cursor.close()
|
||||
conn.close()
|
||||
conn.close()
|
||||
@@ -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'))
|
||||
|
||||
Reference in New Issue
Block a user