package com.ctgu.controller;
import com.ctgu.common.Const;
import com.ctgu.enums.AccountEnum;
import com.ctgu.model.*;
import com.ctgu.service.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.stream.Collectors;
import static com.ctgu.common.Const.TeacherLevel;
@Controller
@RequestMapping(value = "/manage")
public class ManageController {
private static Log LOG = LogFactory.getLog(ManageController.class);
@Autowired
private AccountService accountService;
@Autowired
private SubjectService subjectService;
@Autowired
private ContestService contestService;
@Autowired
private QuestionService questionService;
@Autowired
private GradeService gradeService;
@Autowired
private PostService postService;
@Autowired
private CommentService commentService;
@Autowired
private ClassService classService;
@Autowired
private QuestionnaireService questionnaireService;
/**
* 管理员登录页
*/
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login(HttpServletRequest request, Model model) {
Account currentAccount = (Account) request.getSession().getAttribute(Const.CURRENT_ACCOUNT);
model.addAttribute(Const.CURRENT_ACCOUNT, currentAccount);
if (currentAccount == null) {
return "manage/manage-login";
} else {
return "redirect:/manage/contest/list";
}
}
/**
* 用户管理
*/
@RequestMapping(value = "/account/list", method = RequestMethod.GET)
public String accountList(HttpServletRequest request,
@RequestParam(value = "page", defaultValue = "1") int page,
Model model) {
Account currentAccount = (Account) request.getSession().getAttribute(Const.CURRENT_ACCOUNT);
//TODO::处理
//currentAccount = accountService.getAccountByUsername("admin");
model.addAttribute(Const.CURRENT_ACCOUNT, currentAccount);
if (currentAccount == null || currentAccount.getLevel() < 1) {
//return "redirect:/";
return "error/404";
} else {
//Map<String, Object> data = accountService.getAccounts(page, Const.accountPageSize);
Map<String, Object> data = accountService.getAccountsByLevel(page, Const.accountPageSize, 1);
model.addAttribute(Const.DATA, data);
return "manage/manage-accountList";
}
}
/**
* 用户管理
*/
@RequestMapping(value="/account/{level}/list", method= RequestMethod.GET)
public String accountLevelList(HttpServletRequest request,
@RequestParam(value = "page", defaultValue = "1") int page,
@PathVariable("level") Integer level,
Model model) {
Account currentAccount = (Account) request.getSession().getAttribute(Const.CURRENT_ACCOUNT);
//TODO::处理
//currentAccount = accountService.getAccountByUsername("admin");
model.addAttribute(Const.CURRENT_ACCOUNT, currentAccount);
if (currentAccount == null || currentAccount.getLevel() < 1) {
//return "redirect:/";
return "error/404";
} else {
//Map<String, Object> data = accountService.getAccounts(page, Const.accountPageSize);
Map<String, Object> data = accountService.getAccountsByLevel(page, Const.accountPageSize, level);
data.put("subjects", subjectService.getSubjects());
model.addAttribute(Const.DATA, data);
return "manage/manage-account" + AccountEnum.getAccountEnum(level).getName() + "List";
}
}
/**
* 考试管理
*/
@RequestMapping(value = "/contest/list", method = RequestMethod.GET)
public String contestList(HttpServletRequest request,
@RequestParam(value = "page", defaultValue = "1") int page,
Model model) {
Account currentAccount = (Account) request.getSession().getAttribute(Const.CURRENT_ACCOUNT);
//TODO::处理
//currentAccount = accountService.getAccountByUsername("admin");
model.addAttribute(Const.CURRENT_ACCOUNT, currentAccount);
if (currentAccount == null || currentAccount.getLevel() < 1) {
//return "redirect:/";
return "error/404";
} else {
Map<String, Object> data = null;
if (currentAccount.getLevel() == AccountEnum.ADMIN.getLevel()) {
data = contestService.getContests(page, Const.contestPageSize);
} else {
data = contestService.getContestsByAccountId(page, Const.subjectPageSize, currentAccount.getId());
}
List<Subject> subjects = subjectService.getSubjects();
data.put("subjects", subjects);
model.addAttribute(Const.DATA, data);
return "manage/manage-contestBoard";
}
}
/**
* 考试管理-查看试题
*/
@RequestMapping(value = "/contest/{contestId}/problems", method = RequestMethod.GET)
public String contestProblemList(HttpServletRequest request,
@PathVariable("contestId") Integer contestId, Model model) {
Account currentAccount = (Account) request.getSession().getAttribute(Const.CURRENT_ACCOUNT);
//TODO::处理
//currentAccount = accountService.getAccountByUsername("admin");
model.addAttribute(Const.CURRENT_ACCOUNT, currentAccount);
if (currentAccount == null || currentAccount.getLevel() < 1) {
//return "redirect:/";
return "error/404";
} else {
Map<String, Object> data = new HashMap<>();
List<Question> questions = questionService.getQuestionsByContestId(contestId);
Contest contest = contestService.getContestById(contestId);
data.put("questionsSize", questions.size());
data.put("questions", questions);
data.put("contest", contest);
model.addAttribute(Const.DATA, data);
return "manage/manage-editContestProblem";
}
}
/**
* 題目管理
*/
@RequestMapping(value = "/question/list", method = RequestMethod.GET)
public String questionList(HttpServletRequest request,
@RequestParam(value = "page", defaultValue = "1") int page,
@RequestParam(value = "content", defaultValue = "") String content,
Model model) {
Account currentAccount = (Account) request.getSession().getAttribute(Const.CURRENT_ACCOUNT);
//TODO::处理
//currentAccount = accountService.getAccountByUsername("admin");
model.addAttribute(Const.CURRENT_ACCOUNT, currentAccount);
if (currentAccount == null || currentAccount.getLevel() < 1) {
//return "redirect:/";
return "error/404";
} else {
Map<String, Object> data = questionService.getQuestionsByContent(page,
Const.questionPageSize, content);
List<Question> questions = (List<Question>) data.get("questions");
List<Subject> subjects = subjectService.getSubjects();
Map<Integer, String> subjectId2name = subjects.stream().
collect(Collectors.toMap(Subject::getId, Subj