package com.niit.servlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
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.niit.mapper.CourseMapper;
import com.niit.mapper.StudentCourseMapper;
import com.niit.mapper.StudentMapper;
import com.niit.util.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
import com.niit.pojo.Course;
import com.niit.pojo.PageBean;
import com.niit.pojo.Student;
import com.niit.pojo.StudentCourse;
import com.niit.pojo.User;
import com.niit.util.PageUtil;
import com.niit.util.ResponseUtil;
import com.niit.util.StringUtil;
import net.sf.json.JSONObject;
/**
* 学生Servlet类
* @author Administrator
*
*/
public class StudentServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
private SqlSession sqlSession;
private StudentMapper studentMapper;
private StudentCourseMapper studentCourseMapper;
private CourseMapper courseMapper;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String action = request.getParameter("action");
if ("list".equals(action)) {
this.list(request, response);
} else if ("preSave".equals(action)) {
this.preSave(request, response);
} else if ("save".equals(action)) {
this.save(request, response);
} else if ("delete".equals(action)) {
this.delete(request, response);
} else if ("courseList".equals(action)) {
this.courseList(request, response);
} else if ("showInfo".equals(action)) {
this.showInfo(request, response);
} else if ("showScore".equals(action)) {
this.showScore(request, response);
} else if ("preSelect".equals(action)) {
this.preSelect(request, response);
} else if ("selectCourse".equals(action)) {
this.selectCourse(request, response);
} else if ("unSelectCourse".equals(action)) {
this.unSelectCourse(request, response);
}
}
/**
* 显示列表
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
String page = request.getParameter("page");
String s_userName = request.getParameter("s_userName");
Student s_student = new Student();
if (StringUtil.isEmpty(page)) {
page = "1";
s_student.setUserName(s_userName); // 修正此处的拼写错误
session.setAttribute("s_student", s_student);
} else {
s_student = (Student) session.getAttribute("s_student");
}
PageBean pageBean = new PageBean(Integer.parseInt(page), 3);
try {
// 获取新的SqlSession实例
SqlSession sqlSession = MyBatisUtil.getSqlSession();
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
List<Student> studentList = studentMapper.studentList(pageBean, s_student);
int total = studentMapper.studentCount(s_student);
String pageCode = PageUtil.getPagation(request.getContextPath() + "/student?action=list", total, Integer.parseInt(page), 3);
request.setAttribute("pageCode", pageCode);
request.setAttribute("modeName", "学生信息列表");
request.setAttribute("studentList", studentList);
request.setAttribute("mainPage", "student/list.jsp");
request.getRequestDispatcher("main.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (sqlSession != null) {
sqlSession.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 保存预处理
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void preSave(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
SqlSession sqlSession = null;
try {
sqlSession = MyBatisUtil.getSqlSession();
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
if (StringUtil.isNotEmpty(id)) {
request.setAttribute("actionName", "学生信息修改");
Student student = studentMapper.loadStudentById(id);
request.setAttribute("student", student);
} else {
request.setAttribute("actionName", "学生信息添加");
}
request.setAttribute("mainPage", "student/save.jsp");
request.setAttribute("modeName", "学生信息列表");
request.getRequestDispatcher("main.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
request.setAttribute("errorMsg", "加载数据失败: " + e.getMessage());
request.getRequestDispatcher("main.jsp").forward(request, response);
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
}
/**
* 保存修改或添加操作
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void save(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
String userName = request.getParameter("userName");
String password = request.getParameter("password");
String trueName = request.getParameter("trueName");
String stuNo = request.getParameter("stuNo");
String professional = request.getParameter("professional");
Student student = new Student(userName, password, trueName, stuNo, professional);
SqlSession sqlSession = null;
try {
sqlSession = MyBatisUtil.getSqlSession();
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
if (StringUtil.isNotEmpty(id)) { // 修改
student.setId(Integer.parseInt(id));
studentMapper.studentUpdate(student);
} else {
studentMapper.studentAdd(student);
}
sqlSession.commit();
response.sendRedirect("student?action=list");
} catch (Exception e) {
if (sqlSession != null) {
sqlSession.rollback();
}
e.printStackTrace();
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
}
/**
* 删除学生
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void delete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
SqlSession sqlSession = null;
try {
sqlSession = MyBatisUtil.getSqlSession();
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
StudentCourseMapper studentCourseMapper = sqlSession.getMapper(StudentCourseMapper.class);
// 检查学生是否有成绩记录
if (studentCourseMapper.hasScoreByStudentId(Integer.parseInt(id))) {
JSONObject result = new JSONObject();
result.put("success", false);
result.put("errorMsg", "该学生存在成绩记录,无法删除");
try {
ResponseUtil.write(result, response);
} catch (IOException e) {
e.printStackTrace();
}
return;
}
// 先删除关联的选课记录
studentCourseMapper.deleteEnrollmentByStudentId(Integer.parseInt(id));
// 再删除学生信息
studentMapper.studentDelete(Integer.parseInt(id));
sqlSession.commit();
JSONObject result = new JSONObject();
result.put("success", true);
try {
ResponseUtil.write(result, response);
} catch (IOException e) {
e.printStackTrace();
}
} catch (Exception e) {
if (sqlSession != null) {
sqlSession.rollback();
}
e.printStackTrace();
JSONObject result = new JSONObject();
result.put("success", false);
result.put("errorMsg", e.getMessage());
try {
ResponseUtil.write(result, response);
} catch (IOException e2) {
e2.printStackTrace();
} catch (Exception ex) {
throw new RuntimeException(ex);
}
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
}
/**
* 显示当前选课
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void courseList(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
User currentUser = (User) session.getAttribute("currentUser");
try {
SqlSession sqlSession = MyBatisUtil.getSqlSession();
CourseMapper courseMapper = sqlSession.getMapper(CourseMapper.class);
// 查询所有可选课程而非仅已选课程
Course s_course = new Course();
List<Course> courseList = courseMapper.courseList(null, s_course);
request.setAttribute("courseList", courseList);
request.setAttribute("mainPage", "student/courseList.jsp");
request.setAttribute("modeName", "查看选课列表");
request.getRequestDispatcher("main.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
} finally {
sqlSession.close();
}
}
/**
* 查看个人信息
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void showInfo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
User currentUser = (User) session.getAttribute("currentUser");
try {
Student student = studentMapper.loadStudentById(String.valueOf(currentUser.getUserId()));
request.setAttribute("student", student);
request.setAttribute("modeName", "查看个人信息");
request.setAttribute("mainPage", "student/info.jsp");
request.getRequestDispatcher("main.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
} finally {
sqlSession.close();
}
}
/**
* 查看成绩
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void showScore(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
User currentUser = (User) session.getAttribute("currentUser");
try {
List<Course> courseList = studentCourseMapper.getEnrolledCoursesByStudentId(currentUser.getUserId());
request.setAttribute("courseList", courseList);
request.setAttribute("modeName", "查看成绩");
request.setAttribute("mainPage", "student/showScore.jsp");
request.getRequestDispatcher("main.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
} finally {
sqlSession.close();
}
}
/**
* 选课预处理
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void preSelect(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
User currentUser = (User) session.getAttribute("currentUser");
try {
// 查询所有课程
List<Course> courseList = courseMapper.courseList(null, null);
// 查询当前学生已选课程
List<Course> myCourseList = studentCourseMapper.getEnrolledCoursesByStudentId(currentUser.getUserId());
// 查询当前学生已选课程ID
List<Integer> myCourseIdList = new ArrayList<Integer>();
for (Course sc : myCourseList) {
myCourseIdList.add(sc.getId());
}
// 查询可选课程
List<Course> selectCourseList = new ArrayList<Course>();
for (Course c : courseList) {
// 通过课程id判断是否已存在当前学生已选课程ID中,如果不存在则添加到可选课程列表中
if (!myCourseIdList.contains(c.getId())) {
selectCourseList.add(c);
}
}
request.setAttribute("selectCourseList", selectCourseList); // 可选课程列表
request.setAttribute("myCourseList", myCourseList); // 已选课程列表
request.setAttribute("modeName", "查看可选课程及已选课程");
request.setAttribute("mainPage", "student/selectCourse.jsp");
request.getRequestDispatcher("main.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
} finally {
sqlSession.close();
}
}
/**
* 选课
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void selectCourse(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
User currentUser = (User) session.getAttribute("currentUser");
String courseIds = request.getParameter("courseIds"); // 选中课程ID列表
String cIds[] = courseIds.split(",");
try {
for (int i = 0; i < cIds.length; i++) {
int courseId = Integer.parseInt(cIds[i]);
// 检查课程容量
Course course = courseMapper.loadCourseById(String.valueOf(courseId));
if (course.getEnrolled() >= course.getCapacity()) {
JSONObject result = new JSONObject();
result.put("success", false);
result.put("errorMsg", "课程《" + course.getCourseName() + "》已满,无法选择");
ResponseUtil.write(result, response);
return;
}
// 创建选课记录
StudentCourse sc = new StudentCourse();
sc.setStudentId(currentUser.getUserId());
sc.setCourseId(courseId);
studentCourseMapper.createEnrollment(sc);
// 更新课程已选人数
course.setEnrolled(course.getEnrolled() + 1);
courseMapper.courseUpdate(course);
}
JSONObject result = new JSONObject();
result.put("success", true);
ResponseUtil.write(result, response);
} catch (Exception e) {
e.printStackTrace();
} finally {
sqlSession.close();
}
}
/**
* 退课
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void unSelectCourse(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String scIds = request.getParameter("scIds"); // 选中课程ID列表
String scIdsStr[] = scIds.split(",");
boolean flag = true;
try {
JSONObject result = new JSONObject();
for (int i = 0; i < scIdsStr.length; i++) {
if (studentCourseMapper.hasScoreWithCourseId(Integer.parseInt(scIdsStr[i]))) {
flag = false;
} else {
HttpSession session = request.getSession();
User currentUser = (User) session.getAttribute("currentUser");
studentCourseMapper.deleteEnrollment(currentUser.getUserId(), Integer.parseInt(scIdsStr[i]));
}
}
result.put("success", flag);
ResponseUtil.write(result, response);
} catch (Exception e) {
e.printStackTrace();
} finally {
sqlSession.close();
}
}
}