|
|
|
@ -1,80 +1,106 @@
|
|
|
|
|
package com.cn.servlet;
|
|
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.io.PrintWriter;
|
|
|
|
|
import java.sql.Timestamp;
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
|
|
|
|
|
import javax.servlet.ServletException;
|
|
|
|
|
import javax.servlet.http.HttpServlet;
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
import javax.servlet.http.HttpSession;
|
|
|
|
|
|
|
|
|
|
import com.cn.domain.Member;
|
|
|
|
|
import com.cn.domain.Pmember;
|
|
|
|
|
import com.cn.domain.Prep;
|
|
|
|
|
import com.cn.domain.Train;
|
|
|
|
|
import com.cn.service.PmemberService;
|
|
|
|
|
import com.cn.service.PrepService;
|
|
|
|
|
import com.cn.service.TrainService;
|
|
|
|
|
import com.cn.service.impl.PmemberServiceImpl;
|
|
|
|
|
import com.cn.service.impl.PrepServiceImpl;
|
|
|
|
|
import com.cn.service.impl.TrainServiceImpl;
|
|
|
|
|
package com.cn.servlet; // 定义Servlet所在的包名
|
|
|
|
|
|
|
|
|
|
import java.io.IOException; // 导入IOException,用于处理输入输出异常
|
|
|
|
|
import java.io.PrintWriter; // 导入PrintWriter,用于向客户端发送字符文本数据
|
|
|
|
|
import java.sql.Timestamp; // 导入Timestamp类,用于处理数据库时间戳
|
|
|
|
|
import java.util.Date; // 导入Date类,用于处理日期
|
|
|
|
|
|
|
|
|
|
import javax.servlet.ServletException; // 导入ServletException,用于处理Servlet运行时的异常
|
|
|
|
|
import javax.servlet.http.HttpServlet; // 导入HttpServlet,是所有HTTP servlet的父类
|
|
|
|
|
import javax.servlet.http.HttpServletRequest; // 导入HttpServletRequest,代表客户端的请求信息
|
|
|
|
|
import javax.servlet.http.HttpServletResponse; // 导入HttpServletResponse,代表服务器对客户端的响应
|
|
|
|
|
import javax.servlet.http.HttpSession; // 导入HttpSession,代表与客户端的会话
|
|
|
|
|
|
|
|
|
|
import com.cn.domain.Member; // 导入Member类,该类定义了会员的数据结构
|
|
|
|
|
import com.cn.domain.Pmember; // 导入Pmember类,该类定义了会员个人信息的数据结构
|
|
|
|
|
import com.cn.domain.Prep; // 导入Prep类,该类定义了订单的数据结构
|
|
|
|
|
import com.cn.domain.Train; // 导入Train类,该类定义了车次的数据结构
|
|
|
|
|
import com.cn.service.PmemberService; // 导入PmemberService接口,该接口定义了会员个人信息服务的方法
|
|
|
|
|
import com.cn.service.PrepService; // 导入PrepService接口,该接口定义了订单服务的方法
|
|
|
|
|
import com.cn.service.TrainService; // 导入TrainService接口,该接口定义了车次服务的方法
|
|
|
|
|
import com.cn.service.impl.PmemberServiceImpl; // 导入PmemberService接口的实现类,用于具体的会员个人信息业务操作
|
|
|
|
|
import com.cn.service.impl.PrepServiceImpl; // 导入PrepService接口的实现类,用于具体的订单业务操作
|
|
|
|
|
import com.cn.service.impl.TrainServiceImpl; // 导入TrainService接口的实现类,用于具体的车次业务操作
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
*
|
|
|
|
|
* @ClassName: BookingServlet
|
|
|
|
|
* BookingServlet类,用于处理会员订票的请求。
|
|
|
|
|
* @ClassName: BookingServlet 类名:BookingServlet
|
|
|
|
|
* @Description: 会员实现订票功能的Servlet
|
|
|
|
|
* @author: ljy
|
|
|
|
|
* @date: 2019年9月17日 下午11:23:41
|
|
|
|
|
* @author: ljy Servlet的作者
|
|
|
|
|
* @date: 2019年9月17日 下午11:23:41 Servlet创建的日期和时间
|
|
|
|
|
*/
|
|
|
|
|
public class BookingServlet extends HttpServlet {
|
|
|
|
|
private static final long serialVersionUID = 1L;
|
|
|
|
|
private static final long serialVersionUID = 1L; // 用于序列化
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
|
|
|
|
/**
|
|
|
|
|
* 默认构造函数。
|
|
|
|
|
*/
|
|
|
|
|
public BookingServlet() {
|
|
|
|
|
super(); // 调用父类的构造函数
|
|
|
|
|
// TODO Auto-generated constructor stub
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 先执行
|
|
|
|
|
* 处理GET请求的方法,用于显示订票页面。
|
|
|
|
|
* @param request HttpServletRequest对象,包含客户端的请求信息
|
|
|
|
|
* @param response HttpServletResponse对象,包含服务器对客户端的响应信息
|
|
|
|
|
* @throws ServletException 抛出Servlet异常
|
|
|
|
|
* @throws IOException 抛出输入输出异常
|
|
|
|
|
*/
|
|
|
|
|
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
|
|
|
|
|
|
|
|
|
// 获取当前会话
|
|
|
|
|
HttpSession session = request.getSession();
|
|
|
|
|
// 从会话中获取会员对象
|
|
|
|
|
Member member = (Member) session.getAttribute("member");
|
|
|
|
|
|
|
|
|
|
// 从请求中获取车次ID
|
|
|
|
|
Integer trainId = (Integer) request.getAttribute("trainId");
|
|
|
|
|
// 创建车次服务对象
|
|
|
|
|
TrainService trainService = new TrainServiceImpl();
|
|
|
|
|
// 根据车次ID获取车次对象
|
|
|
|
|
Train train = trainService.getById(trainId);
|
|
|
|
|
// 根据会员ID获取会员个人信息
|
|
|
|
|
Integer memberId = member.getMemberId(); // 从Session中获取
|
|
|
|
|
// 根据会员ID获取会员个人信息服务对象
|
|
|
|
|
Integer memberId = member.getMemberId(); // 从Session中获取会员ID
|
|
|
|
|
PmemberService pmemberService = new PmemberServiceImpl();
|
|
|
|
|
// 根据会员ID获取会员个人信息对象
|
|
|
|
|
Pmember pmember = pmemberService.getPmemberByMemberId(memberId);
|
|
|
|
|
|
|
|
|
|
// 将数据转发到界面
|
|
|
|
|
// 将车次对象和会员个人信息对象设置到请求中,以便在JSP页面中使用
|
|
|
|
|
request.setAttribute("train", train);
|
|
|
|
|
request.setAttribute("pmember", pmember);
|
|
|
|
|
// 转发请求到订票页面
|
|
|
|
|
request.getRequestDispatcher("pages/user/booking.jsp").forward(request, response);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 确认后执行,
|
|
|
|
|
* 将订票信息传入prep表
|
|
|
|
|
* 将train表的本车次座位数量-1
|
|
|
|
|
* 处理POST请求的方法,用于处理会员订票的请求。
|
|
|
|
|
* @param request HttpServletRequest对象,包含客户端的请求信息
|
|
|
|
|
* @param response HttpServletResponse对象,包含服务器对客户端的响应信息
|
|
|
|
|
* @throws ServletException 抛出Servlet异常
|
|
|
|
|
* @throws IOException 抛出输入输出异常
|
|
|
|
|
*/
|
|
|
|
|
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
|
|
|
|
|
|
|
|
|
// 从请求中获取车次ID,并转换为Integer类型
|
|
|
|
|
Integer trainId = Integer.valueOf(request.getParameter("trainId"));
|
|
|
|
|
// 创建车次服务对象
|
|
|
|
|
TrainService trainService = new TrainServiceImpl();
|
|
|
|
|
// 根据车次ID获取车次对象
|
|
|
|
|
Train train = trainService.getById(trainId);
|
|
|
|
|
// 根据会员ID获取会员个人信息
|
|
|
|
|
Member member = (Member) request.getSession().getAttribute("member"); // 从Session中获取
|
|
|
|
|
Integer memberId = member.getMemberId();;
|
|
|
|
|
// 从会话中获取会员对象
|
|
|
|
|
Member member = (Member) request.getSession().getAttribute("member"); // 从Session中获取会员对象
|
|
|
|
|
// 获取会员ID
|
|
|
|
|
Integer memberId = member.getMemberId();
|
|
|
|
|
// 创建会员个人信息服务对象
|
|
|
|
|
PmemberService pmemberService = new PmemberServiceImpl();
|
|
|
|
|
// 根据会员ID获取会员个人信息对象
|
|
|
|
|
Pmember pmember = pmemberService.getPmemberByMemberId(memberId);
|
|
|
|
|
|
|
|
|
|
// 创建订单对象
|
|
|
|
|
Prep prep = new Prep();
|
|
|
|
|
// 设置订单属性
|
|
|
|
|
prep.setTrainId(train.getTrainId());
|
|
|
|
|
prep.setPmemberId(pmember.getPmemberId());
|
|
|
|
|
prep.setStartStation(train.getStartStation());
|
|
|
|
@ -84,39 +110,40 @@ public class BookingServlet extends HttpServlet {
|
|
|
|
|
prep.setEndTime(train.getEndTime());
|
|
|
|
|
prep.setPrice(train.getPrice());
|
|
|
|
|
prep.setWay(false);
|
|
|
|
|
prep.setBooktime(new Timestamp(new Date().getTime()));
|
|
|
|
|
|
|
|
|
|
prep.setBooktime(new Timestamp(new Date().getTime())); // 设置订票时间为当前时间
|
|
|
|
|
|
|
|
|
|
// 创建订单服务对象
|
|
|
|
|
PrepService prepService = new PrepServiceImpl();
|
|
|
|
|
// 调用订单服务添加订单,并返回影响的记录数
|
|
|
|
|
int recordNumber = prepService.add(prep);
|
|
|
|
|
|
|
|
|
|
// 获取PrintWriter对象,用于向客户端发送响应
|
|
|
|
|
PrintWriter out = response.getWriter();
|
|
|
|
|
if(recordNumber == 1) {
|
|
|
|
|
// 先将座位数量-1
|
|
|
|
|
// 如果订单添加成功,更新车次的座位数量
|
|
|
|
|
train.setSeatNumber(train.getSeatNumber()-1);
|
|
|
|
|
trainService.update(train);
|
|
|
|
|
|
|
|
|
|
// 获取会话对象
|
|
|
|
|
HttpSession session = request.getSession();
|
|
|
|
|
// 检查是否是改签业务
|
|
|
|
|
String flag = (String) session.getAttribute("changePrep");
|
|
|
|
|
if(flag != null && !"".equals(flag) && "true".equals(flag)) {
|
|
|
|
|
// 是改签业务
|
|
|
|
|
|
|
|
|
|
// 修改session,表示改签结束
|
|
|
|
|
// 如果是改签业务,修改会话属性,表示改签结束
|
|
|
|
|
session.setAttribute("changePrep", "false");
|
|
|
|
|
out.write("<script>alert('改签成功!');"
|
|
|
|
|
+ "window.location.href='MyPrepServlet'</script>");
|
|
|
|
|
// 向客户端发送JavaScript代码,弹出提示并跳转到我的订单页面
|
|
|
|
|
out.write("<script>alert('改签成功!');" + "window.location.href='MyPrepServlet'</script>");
|
|
|
|
|
}
|
|
|
|
|
out.write("<script>alert('订票成功!');"
|
|
|
|
|
+ "window.location.href='GetByStartEndStationServlet'</script>");
|
|
|
|
|
// 向客户端发送JavaScript代码,弹出提示并跳转到车次查询页面
|
|
|
|
|
out.write("<script>alert('订票成功!');" + "window.location.href='GetByStartEndStationServlet'</script>");
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
out.write("<script>alert('很抱歉,订票失败!');"
|
|
|
|
|
+ "window.location.href='GetByStartEndStationServlet'</script>");
|
|
|
|
|
// 如果订单添加失败,向客户端发送JavaScript代码,弹出提示并跳转到车次查询页面
|
|
|
|
|
out.write("<script>alert('很抱歉,订票失败!');" + "window.location.href='GetByStartEndStationServlet'</script>");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 关闭PrintWriter对象
|
|
|
|
|
out.close();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|