package com.cn.service.impl; // 定义服务实现类的包名

import java.sql.SQLException; // 导入SQLException，用于处理数据库操作中可能抛出的异常
import java.util.ArrayList; // 导入ArrayList类，用于创建动态数组
import java.util.List; // 导入List接口，用于操作列表集合

import org.apache.log4j.Logger; // 导入Logger类，用于记录日志信息

import com.cn.dao.TrainDao; // 导入TrainDao接口，用于访问车次数据
import com.cn.dao.impl.TrainDaoImpl; // 导入TrainDao接口的实现类，用于具体的数据库操作
import com.cn.domain.Train; // 导入Train类，该类定义了车次的数据结构
import com.cn.service.TrainService; // 导入TrainService接口，该接口定义了车次服务的方法

/**
 * 实现TrainService接口的类，提供车次服务的具体实现。
 * @ClassName: TrainServiceImpl 类名：TrainServiceImpl
 * @Description: TrainService的实现类，用于处理车次相关的业务逻辑。
 * @author: ljy 实现类的作者
 * @date: 2019年9月14日 下午10:47:50 实现类的创建日期和时间
 */
public class TrainServiceImpl implements TrainService {
	
	private TrainDao trainDao = new TrainDaoImpl(); // 成员变量，用于数据库操作的TrainDao对象，使用TrainDaoImpl实现类
	private static Logger logger = Logger.getLogger(TrainServiceImpl.class); // 日志记录器，用于记录日志信息

	/**
	 * 添加车次的方法实现。
	 * @param train 要添加的车次对象。
	 * @return 返回记录数，表示添加操作影响的行数。
	 */
	@Override
	public int add(Train train) {
		int recordNumber = 0; // 记录数，默认为0
		if(train!=null) { // 检查传入的车次对象是否为null
			try {
				recordNumber = trainDao.add(train); // 调用TrainDao的add方法添加车次
			} catch (SQLException e) {
				logger.error(e.toString()); // 记录错误日志
				e.printStackTrace(); // 打印异常堆栈跟踪
			}
		}else {
			logger.debug("TrainServiceImpl.add 中 train为null"); // 记录调试日志，当train为null时
		}
		return recordNumber; // 返回记录数
	}

	/**
	 * 根据车次ID删除车次的方法实现。
	 * @param trainId 要删除的车次ID。
	 * @return 返回记录数，表示删除操作影响的行数。
	 */
	@Override
	public int delete(Integer trainId) {
		int recordNumber = 0; // 记录数，默认为0
		if(trainId!=null && trainId!=0) { // 检查传入的车次ID是否为null或0
			try {
				recordNumber = trainDao.delete(trainId); // 调用TrainDao的delete方法删除车次
			} catch (SQLException e) {
				logger.error(e.toString()); // 记录错误日志
				e.printStackTrace(); // 打印异常堆栈跟踪
			}
		}else {
			logger.debug("TrainServiceImpl.delete 中 trainId为null或0"); // 记录调试日志，当trainId为null或0时
		}
		return recordNumber; // 返回记录数
	}

	/**
	 * 更新车次的方法实现。
	 * @param train 包含更新信息的车次对象。
	 * @return 返回记录数，表示更新操作影响的行数。
	 */
	@Override
	public int update(Train train) {
		int recordNumber = 0; // 记录数，默认为0
		if(train!=null) { // 检查传入的车次对象是否为null
			try {
				recordNumber = trainDao.update(train); // 调用TrainDao的update方法更新车次
			} catch (SQLException e) {
				logger.error(e.toString()); // 记录错误日志
				e.printStackTrace(); // 打印异常堆栈跟踪
			}
		}else {
			logger.debug("TrainServiceImpl.update 中 train为null"); // 记录调试日志，当train为null时
		}
		return recordNumber; // 返回记录数
	}

	/**
	 * 获取所有车次信息的方法实现。
	 * @return 返回包含所有车次信息的列表。
	 */
	@Override
	public List<Train> getAll() {
		List<Train> list = null; // 车次列表，默认为null
		try {
			list = trainDao.getAll(); // 调用TrainDao的getAll方法获取所有车次信息
		} catch (SQLException e) {
			logger.error(e.toString()); // 记录错误日志
			e.printStackTrace(); // 打印异常堆栈跟踪
		}
		return list; // 返回车次列表
	}

	/**
	 * 根据车次ID查询车次的方法实现。
	 * @param trainId 车次ID。
	 * @return 返回包含指定车次ID的车次对象。
	 */
	@Override
	public Train getById(Integer trainId) {
		Train train = null; // 车次对象，默认为null
		if(trainId!=null && trainId!=0) { // 检查传入的车次ID是否为null或0
			try {
				train = trainDao.getById(trainId); // 调用TrainDao的getById方法根据车次ID获取车次
			} catch (SQLException e) {
				logger.error(e.toString()); // 记录错误日志
				e.printStackTrace(); // 打印异常堆栈跟踪
			}
		}else {
			logger.debug("TrainServiceImpl.getById 中 trainId为null或0"); // 记录调试日志，当trainId为null或0时
		}
		return train; // 返回车次对象
	}

	/**
	 * 根据车次号查询车次信息的方法实现。
	 * @param trainNumber 车次号。
	 * @return 返回包含匹配车次号的所有车次信息的列表。
	 */
	@Override
	public List<Train> getByTrainNumber(String trainNumber) {
		List<Train> list = null; // 车次列表，默认为null
		if(trainNumber!=null && !"".equals(trainNumber)) { // 检查传入的车次号是否为空或空字符串
			try {
				list = trainDao.getByTrainNumber(trainNumber); // 调用TrainDao的getByTrainNumber方法根据车次号获取车次
			} catch (SQLException e) {
				logger.error(e.toString()); // 记录错误日志
				e.printStackTrace(); // 打印异常堆栈跟踪
			}
		}
		return list; // 返回车次列表
	}

	/**
	 * 根据起始站、终点站、开车时间查询车次信息的方法实现。
	 * @param startStation 起始站名称。
	 * @param endStation 终点站名称。
	 * @param startTime 开车时间。
	 * @return 返回包含匹配起始站、终点站和开车时间的所有车次信息的列表。
	 */
	@Override
	public List<Train> getByStartEndStation(String startStation, String endStation, String startTime) {
		List<Train> list = null; // 车次列表，默认为null
		if(startStation!=null && !"".equals(startStation) && endStation!=null && !"".equals(endStation) 
				&& startTime!=null && !"".equals(startTime)) { // 检查传入的起始站、终点站和开车时间是否为空或空字符串
			try {
				list = trainDao.getByStartEndStation(startStation, endStation, startTime); // 调用TrainDao的getByStartEndStation方法根据起始站、终点站和开车时间获取车次
			} catch (SQLException e) {
				logger.error(e.toString()); // 记录错误日志
				e.printStackTrace(); // 打印异常堆栈跟踪
			}
			
		} else {
			logger.debug("TrainServiceImpl.getByStartEndStation: 信息不完整！！！"); // 记录调试日志，当起始站、终点站或开车时间信息不完整时
		}
		return list; // 返回车次列表
	}

	/**
	 * 获取所有非重复的起始站的方法实现。
	 * @return 返回包含所有非重复起始站的列表。
	 */
	@Override
	public List<Train> getAllStartStation() {
		List<Train> list = null; // 车次列表，默认为null
		try {
			list = trainDao.getAllStartStation(); // 调用TrainDao的getAllStartStation方法获取所有非重复的起始站
		} catch (SQLException e) {
			logger.error(e.toString()); // 记录错误日志
			e.printStackTrace(); // 打印异常堆栈跟踪
		}
		return list; // 返回车次列表
	}

	/**
	 * 获取所有非重复的终点站的方法实现。
	 * @return 返回包含所有非重复终点站的列表。
	 */
	@Override
	public List<Train> getAllEndStation() {
		List<Train> list = null; // 车次列表，默认为null
		try {
			list = trainDao.getAllEndStation(); // 调用TrainDao的getAllEndStation方法获取所有非重复的终点站
		} catch (SQLException e) {
			logger.error(e.toString()); // 记录错误日志
			e.printStackTrace(); // 打印异常堆栈跟踪
		}
		return list; // 返回车次列表
	}

}