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 com.cn.domain.Train; // 导入Train类，该类定义了车次的数据结构
import com.cn.service.TrainService; // 导入TrainService接口，该接口定义了车次服务的方法
import com.cn.service.impl.TrainServiceImpl; // 导入TrainService接口的实现类，用于具体的车次业务操作

/**
 * AddTrainServlet类，用于处理添加车次的操作。
 * @ClassName: AddTrainServlet 类名：AddTrainServlet
 * @Description: 添加车次的Servlet
 * @author: ljy Servlet的作者
 * @date: 2019年9月11日 下午4:41:06 Servlet创建的日期和时间
 */
public class AddTrainServlet extends HttpServlet {
	private static final long serialVersionUID = 1L; // 用于序列化

    /**
     * 默认构造函数。
     */
    public AddTrainServlet() {
        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 {
		// 该方法为空，因为此Servlet主要处理POST请求
	}

	/**
	 * 处理POST请求的方法。
	 * @param request HttpServletRequest对象，包含客户端的请求信息
	 * @param response HttpServletResponse对象，包含服务器对客户端的响应信息
	 * @throws ServletException 抛出Servlet异常
	 * @throws IOException 抛出输入输出异常
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// 获取界面中输入的数据
		String trainNumber = request.getParameter("trainNumber"); // 从请求中获取车次号参数
		String startStation = request.getParameter("startStation"); // 从请求中获取起始站参数
		String endStation = request.getParameter("endStation"); // 从请求中获取终点站参数
		String startTime = request.getParameter("startTime"); // 从请求中获取起始时间参数，并格式化为带时分秒的时间
		startTime = startTime.substring(0, 10)+" "+startTime.substring(11)+":00";
		String endTime = request.getParameter("endTime"); // 从请求中获取结束时间参数，并格式化为带时分秒的时间
		endTime = endTime.substring(0, 10)+" "+endTime.substring(11)+":00";
		Integer price = Integer.valueOf(request.getParameter("price")); // 从请求中获取票价参数，并转换为Integer类型
		Integer seatNumber = Integer.valueOf(request.getParameter("seatNumber")); // 从请求中获取座位数参数，并转换为Integer类型
		// 获取当前时间
		Timestamp addTime = new Timestamp(new Date().getTime()); // 使用当前时间创建Timestamp对象
		
		// 将数据封装成对象
		Train train = new Train(); // 创建Train对象，用于封装车次信息
		train.setTrainNumber(trainNumber); // 设置车次号
		train.setStartStation(startStation); // 设置起始站
		train.setEndStation(endStation); // 设置终点站
		train.setStartTime(startTime); // 设置起始时间
		train.setEndTime(endTime); // 设置结束时间
		train.setPrice(price); // 设置票价
		train.setSeatNumber(seatNumber); // 设置座位数
		train.setAddTime(addTime); // 设置添加时间
		
		// 将数据存入数据库,并返回是否成功的结果
		TrainService trainService = new TrainServiceImpl(); // 创建TrainService的实现类对象，用于车次业务操作
		int recordNumber = trainService.add(train); // 调用TrainService的add方法添加车次，并返回影响的记录数
		
		// 根据返回值判断是否添加车次成功，返回1为成功
		PrintWriter out = response.getWriter(); // 获取PrintWriter对象，用于向客户端发送响应
		if(recordNumber == 1) { // 如果添加成功（影响的记录数为1）
			out.write("<script>alert('添加成功！');" // 向客户端发送JavaScript代码，弹出提示并跳转到车次列表页面
			    + "window.location.href='GetAllTrainServlet'</script>");
		} else { // 如果添加失败
			out.write("<script>alert('很抱歉，添加失败！');" // 向客户端发送JavaScript代码，弹出提示并跳转到添加车次页面
				    + "window.location.href='pages/admin/right/addTrain.jsp'</script>");
		}
		
		out.close(); // 关闭PrintWriter对象
		//response.sendRedirect("pages/admin/right/addTrain.jsp"); // 此行代码被注释，使用JavaScript跳转代替服务器重定向
	}

}