|
@@ -1,345 +1,347 @@
|
|
-package cn.com.qmth.stmms.admin.exam;
|
|
|
|
-
|
|
|
|
-import java.util.ArrayList;
|
|
|
|
-import java.util.List;
|
|
|
|
-
|
|
|
|
-import javax.servlet.http.HttpServletRequest;
|
|
|
|
-
|
|
|
|
-import org.apache.commons.lang.StringUtils;
|
|
|
|
-import org.slf4j.Logger;
|
|
|
|
-import org.slf4j.LoggerFactory;
|
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
-import org.springframework.stereotype.Controller;
|
|
|
|
-import org.springframework.transaction.annotation.Transactional;
|
|
|
|
-import org.springframework.ui.Model;
|
|
|
|
-import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
|
-import org.springframework.web.bind.annotation.RequestParam;
|
|
|
|
-import org.springframework.web.bind.annotation.ResponseBody;
|
|
|
|
-import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
|
|
|
-
|
|
|
|
-import cn.com.qmth.stmms.admin.dto.SubjectQuestionDTO;
|
|
|
|
-import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
|
|
|
|
-import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
|
|
|
|
-import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
|
|
|
|
-import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
|
|
|
|
-import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
|
|
|
|
-import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
|
|
|
|
-import cn.com.qmth.stmms.biz.exam.service.MarkerService;
|
|
|
|
-import cn.com.qmth.stmms.biz.mark.service.TaskService;
|
|
|
|
-import cn.com.qmth.stmms.common.auth.annotation.RoleRequire;
|
|
|
|
-import cn.com.qmth.stmms.common.domain.WebUser;
|
|
|
|
-import cn.com.qmth.stmms.common.enums.Role;
|
|
|
|
-import cn.com.qmth.stmms.common.utils.RequestUtils;
|
|
|
|
-import net.sf.json.JSONArray;
|
|
|
|
-import net.sf.json.JSONObject;
|
|
|
|
-
|
|
|
|
-@Controller("markGroupController")
|
|
|
|
-@RequestMapping("/admin/exam/group")
|
|
|
|
-public class MarkGroupController extends BaseExamController {
|
|
|
|
-
|
|
|
|
- protected static Logger log = LoggerFactory.getLogger(MarkGroupController.class);
|
|
|
|
-
|
|
|
|
- @Autowired
|
|
|
|
- private ExamSubjectService subjectService;
|
|
|
|
-
|
|
|
|
- @Autowired
|
|
|
|
- private ExamQuestionService questionService;
|
|
|
|
-
|
|
|
|
- @Autowired
|
|
|
|
- private MarkGroupService groupService;
|
|
|
|
-
|
|
|
|
- @Autowired
|
|
|
|
- private MarkerService markerService;
|
|
|
|
-
|
|
|
|
- @Autowired
|
|
|
|
- private TaskService taskService;
|
|
|
|
-
|
|
|
|
- @RequestMapping
|
|
|
|
- public String list(HttpServletRequest request, Model model, @RequestParam String subjectCode) {
|
|
|
|
- WebUser wu = RequestUtils.getWebUser(request);
|
|
|
|
- int examId = getSessionExamId(request);
|
|
|
|
- ExamSubject subject = subjectService.find(examId, subjectCode);
|
|
|
|
- if (subject == null) {
|
|
|
|
- return "redirect:/admin/exam/mark";
|
|
|
|
- }
|
|
|
|
- if (wu.isSubjectHeader() && !subjectCode.equals(wu.getUser().getSubjectCode())) {
|
|
|
|
- return "redirect:/admin/exam/mark";
|
|
|
|
- }
|
|
|
|
- List<MarkGroup> list = groupService.findByExamAndSubject(examId, subjectCode);
|
|
|
|
- for (MarkGroup group : list) {
|
|
|
|
- group.setScoreList(questionService.findByExamAndSubjectAndObjectiveAndMainNumber(examId, subjectCode, false,
|
|
|
|
- group.getNumber()));
|
|
|
|
- group.setMarkerCount(markerService.countByExamAndSubjectAndGroup(examId, subjectCode, group.getNumber()));
|
|
|
|
- group.setCurrentCount(taskService.countCurrent(examId, subjectCode, group.getNumber()));
|
|
|
|
- int percent = group.getLibraryCount() > 0 ? (int) (group.getMarkedCount() * 100.00 / group.getLibraryCount()) : 0;
|
|
|
|
- group.setPercent(percent);
|
|
|
|
- }
|
|
|
|
- model.addAttribute("resultList", list);
|
|
|
|
- model.addAttribute("subject", subject);
|
|
|
|
- model.addAttribute("subjectList", getExamSubject(examId, wu));
|
|
|
|
- return "modules/exam/groupList";
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @RequestMapping("/query")
|
|
|
|
- @ResponseBody
|
|
|
|
- public JSONArray query(HttpServletRequest request, @RequestParam String subjectCode) {
|
|
|
|
- int examId = getSessionExamId(request);
|
|
|
|
- JSONArray array = new JSONArray();
|
|
|
|
- List<MarkGroup> list = groupService.findByExamAndSubject(examId, subjectCode);
|
|
|
|
- for (MarkGroup group : list) {
|
|
|
|
- JSONObject obj = new JSONObject();
|
|
|
|
- obj.accumulate("number", group.getNumber());
|
|
|
|
- obj.accumulate("title", group.getTitle());
|
|
|
|
- obj.accumulate("score", group.getTotalScore());
|
|
|
|
- array.add(obj);
|
|
|
|
- }
|
|
|
|
- return array;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @RequestMapping("/check-count")
|
|
|
|
- @RoleRequire(Role.SCHOOL_ADMIN)
|
|
|
|
- public String ckeckCount(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
|
|
|
|
- @RequestParam String subjectCode) {
|
|
|
|
- int examId = getSessionExamId(request);
|
|
|
|
- ExamSubject subject = subjectService.find(examId, subjectCode);
|
|
|
|
- if (subject == null) {
|
|
|
|
- return "redirect:/admin/exam/mark";
|
|
|
|
- }
|
|
|
|
- groupService.updateLibraryCount(examId, subjectCode);
|
|
|
|
-
|
|
|
|
- redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
|
- return "redirect:/admin/exam/group";
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @RequestMapping("/release")
|
|
|
|
- @RoleRequire(Role.SCHOOL_ADMIN)
|
|
|
|
- public String release(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
|
|
|
|
- @RequestParam String subjectCode, @RequestParam Integer number) {
|
|
|
|
- int examId = getSessionExamId(request);
|
|
|
|
- MarkGroup group = groupService.findOne(examId, subjectCode, number);
|
|
|
|
- if (group == null) {
|
|
|
|
- return "redirect:/admin/exam/mark";
|
|
|
|
- }
|
|
|
|
- taskService.clearCurrent(examId, group.getSubjectCode(), group.getNumber());
|
|
|
|
-
|
|
|
|
- redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
|
- return "redirect:/admin/exam/group";
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @RequestMapping("/reset")
|
|
|
|
- @Transactional
|
|
|
|
- @RoleRequire(Role.SCHOOL_ADMIN)
|
|
|
|
- public String reset(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
|
|
|
|
- @RequestParam String subjectCode, @RequestParam Integer number) {
|
|
|
|
- int examId = getSessionExamId(request);
|
|
|
|
- MarkGroup group = groupService.findOne(examId, subjectCode, number);
|
|
|
|
- if (group == null) {
|
|
|
|
- return "redirect:/admin/exam/mark";
|
|
|
|
- }
|
|
|
|
- groupService.reset(group);
|
|
|
|
-
|
|
|
|
- redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
|
- return "redirect:/admin/exam/group";
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @RequestMapping("/add")
|
|
|
|
- @RoleRequire(Role.SCHOOL_ADMIN)
|
|
|
|
- public String editSimple(HttpServletRequest request, Model model, @RequestParam String subjectCode) {
|
|
|
|
- int examId = getSessionExamId(request);
|
|
|
|
- ExamSubject subject = subjectService.find(examId, subjectCode);
|
|
|
|
- if (subject == null) {
|
|
|
|
- return "redirect:/admin/exam/mark";
|
|
|
|
- }
|
|
|
|
- MarkGroup group = new MarkGroup();
|
|
|
|
- group.setSubjectCode(subjectCode);
|
|
|
|
- model.addAttribute("group", group);
|
|
|
|
- return "modules/exam/groupAdd";
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @RequestMapping("/edit-simple")
|
|
|
|
- @RoleRequire(Role.SCHOOL_ADMIN)
|
|
|
|
- public String editSimple(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
|
|
|
|
- @RequestParam String subjectCode, @RequestParam Integer number) {
|
|
|
|
- int examId = getSessionExamId(request);
|
|
|
|
- MarkGroup group = groupService.findOne(examId, subjectCode, number);
|
|
|
|
- if (group != null) {
|
|
|
|
- model.addAttribute("group", group);
|
|
|
|
- model.addAttribute("questions", questionService.findByExamAndSubjectAndObjectiveAndMainNumber(
|
|
|
|
- group.getExamId(), group.getSubjectCode(), false, group.getNumber()));
|
|
|
|
- return "modules/exam/groupEditSimple";
|
|
|
|
- } else {
|
|
|
|
- redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
|
- return "redirect:/admin/exam/group";
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @RequestMapping("/edit-full")
|
|
|
|
- @RoleRequire(Role.SCHOOL_ADMIN)
|
|
|
|
- public String editFull(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
|
|
|
|
- @RequestParam String subjectCode, @RequestParam Integer number) {
|
|
|
|
- int examId = getSessionExamId(request);
|
|
|
|
- MarkGroup group = groupService.findOne(examId, subjectCode, number);
|
|
|
|
- if (group != null) {
|
|
|
|
- group.setScoreList(
|
|
|
|
- questionService.findByExamAndSubjectAndObjectiveAndMainNumber(examId, subjectCode, false, number));
|
|
|
|
- model.addAttribute("group", group);
|
|
|
|
- return "modules/exam/groupEditFull";
|
|
|
|
- } else {
|
|
|
|
- redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
|
- return "redirect:/admin/exam/group";
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @RequestMapping("/delete")
|
|
|
|
- @Transactional
|
|
|
|
- @RoleRequire(Role.SCHOOL_ADMIN)
|
|
|
|
- public String delete(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
|
|
|
|
- @RequestParam String subjectCode, @RequestParam Integer number) {
|
|
|
|
- int examId = getSessionExamId(request);
|
|
|
|
- MarkGroup group = groupService.findOne(examId, subjectCode, number);
|
|
|
|
- if (group != null) {
|
|
|
|
- groupService.delete(group);
|
|
|
|
- }
|
|
|
|
- redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
|
- redirectAttributes.addAttribute("number", number);
|
|
|
|
- return "redirect:/admin/exam/group";
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @RequestMapping("/save")
|
|
|
|
- @RoleRequire(Role.SCHOOL_ADMIN)
|
|
|
|
- public String save(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
|
|
|
|
- @RequestParam String subjectCode, @RequestParam Integer number,
|
|
|
|
- @RequestParam(required = false) String title, @RequestParam(required = false) String picList,
|
|
|
|
- @RequestParam(required = false) String intervalScoreList,
|
|
|
|
- @RequestParam(required = false) String scoreList) {
|
|
|
|
- int examId = getSessionExamId(request);
|
|
|
|
- MarkGroup group = groupService.findOne(examId, subjectCode, number);
|
|
|
|
- List<ExamQuestion> questionList = questionService.findByExamAndSubjectAndObjectiveAndMainNumber(examId,
|
|
|
|
- subjectCode, false, number);
|
|
|
|
- if (group != null) {
|
|
|
|
- // quick update
|
|
|
|
- List<Integer> pics = SubjectQuestionDTO.buildPicList(picList);
|
|
|
|
- if (pics.size() > 0) {
|
|
|
|
- groupService.updatePicList(examId, subjectCode, number, pics);
|
|
|
|
- }
|
|
|
|
- List<Double> intervalScores = buildDoubleList(intervalScoreList);
|
|
|
|
- if (intervalScores.size() == questionList.size()) {
|
|
|
|
- for (int i = 0; i < questionList.size(); i++) {
|
|
|
|
- ExamQuestion q = questionList.get(i);
|
|
|
|
- q.setIntervalScore(intervalScores.get(i));
|
|
|
|
- questionService.save(q);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- title = StringUtils.trimToNull(title);
|
|
|
|
- if (title != null) {
|
|
|
|
- groupService.updateTitle(examId, subjectCode, number, title);
|
|
|
|
- }
|
|
|
|
- // advance update
|
|
|
|
- List<Double> scores = buildDoubleList(scoreList);
|
|
|
|
- if (scores.size() > 0) {
|
|
|
|
- // reset current mark_library
|
|
|
|
- groupService.reset(group);
|
|
|
|
- // clear and replace exam_question
|
|
|
|
- questionService.deleteByExamAndSubjectAndObjectiveAndMainNumber(examId, subjectCode, false, number);
|
|
|
|
- int i = 0;
|
|
|
|
- double totalScore = 0d;
|
|
|
|
- for (Double score : scores) {
|
|
|
|
- i++;
|
|
|
|
- totalScore += score;
|
|
|
|
- ExamQuestion question = new ExamQuestion();
|
|
|
|
- question.setExamId(examId);
|
|
|
|
- question.setSubjectCode(subjectCode);
|
|
|
|
- question.setMainTitle(group.getTitle());
|
|
|
|
- question.setMainNumber(number);
|
|
|
|
- question.setSubNumber(i);
|
|
|
|
- question.setObjective(false);
|
|
|
|
- question.setTotalScore(score);
|
|
|
|
- question.setIntervalScore(1d);
|
|
|
|
- questionService.save(question);
|
|
|
|
- }
|
|
|
|
- groupService.updateTotalScore(examId, subjectCode, number, totalScore);
|
|
|
|
- subjectService.updateScore(examId, subjectCode);
|
|
|
|
- }
|
|
|
|
- redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
|
- redirectAttributes.addAttribute("number", number);
|
|
|
|
- return "redirect:/admin/exam/group";
|
|
|
|
- } else {
|
|
|
|
- addMessage(redirectAttributes, "找不到对应大题");
|
|
|
|
- redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
|
- redirectAttributes.addAttribute("number", number);
|
|
|
|
- return "redirect:/admin/exam/group/edit-simple";
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @RequestMapping("/insert")
|
|
|
|
- @Transactional
|
|
|
|
- @RoleRequire(Role.SCHOOL_ADMIN)
|
|
|
|
- public String insert(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
|
|
|
|
- @RequestParam String subjectCode, @RequestParam Integer number,
|
|
|
|
- @RequestParam(required = false) String title, @RequestParam(required = false) String picList,
|
|
|
|
- @RequestParam(required = false) String scoreList) {
|
|
|
|
- int examId = getSessionExamId(request);
|
|
|
|
- MarkGroup group = groupService.findOne(examId, subjectCode, number);
|
|
|
|
- if (group != null) {
|
|
|
|
- addMessage(redirectAttributes, "大题号不能重复");
|
|
|
|
- redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
|
- return "redirect:/admin/exam/group/add";
|
|
|
|
- } else {
|
|
|
|
- // create group
|
|
|
|
- group = new MarkGroup(examId, subjectCode, number, StringUtils.trimToNull(title),
|
|
|
|
- SubjectQuestionDTO.buildPicList(picList), 0d);
|
|
|
|
- List<Double> scores = buildDoubleList(scoreList);
|
|
|
|
- if (group.getTitle() != null && group.getPicList() != null && scores.size() > 0) {
|
|
|
|
- // clear and replace exam_question
|
|
|
|
- questionService.deleteByExamAndSubjectAndObjectiveAndMainNumber(examId, subjectCode, false, number);
|
|
|
|
- int i = 0;
|
|
|
|
- double totalScore = 0d;
|
|
|
|
- for (Double score : scores) {
|
|
|
|
- i++;
|
|
|
|
- totalScore += score;
|
|
|
|
- ExamQuestion question = new ExamQuestion();
|
|
|
|
- question.setExamId(examId);
|
|
|
|
- question.setSubjectCode(subjectCode);
|
|
|
|
- question.setMainTitle(group.getTitle());
|
|
|
|
- question.setMainNumber(number);
|
|
|
|
- question.setSubNumber(i);
|
|
|
|
- question.setObjective(false);
|
|
|
|
- question.setTotalScore(score);
|
|
|
|
- question.setIntervalScore(1d);
|
|
|
|
- questionService.save(question);
|
|
|
|
- }
|
|
|
|
- group.setTotalScore(totalScore);
|
|
|
|
- groupService.save(group);
|
|
|
|
- subjectService.updateScore(examId, subjectCode);
|
|
|
|
- redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
|
- return "redirect:/admin/exam/group";
|
|
|
|
- } else {
|
|
|
|
- addMessage(redirectAttributes, "参数有误");
|
|
|
|
- redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
|
- return "redirect:/admin/exam/group/add";
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private List<Double> buildDoubleList(String content) {
|
|
|
|
- List<Double> list = new ArrayList<Double>();
|
|
|
|
- content = StringUtils.trimToNull(content);
|
|
|
|
- if (content != null) {
|
|
|
|
- String[] values = StringUtils.split(content, ",");
|
|
|
|
- if (values != null) {
|
|
|
|
- for (String value : values) {
|
|
|
|
- try {
|
|
|
|
- Double number = Double.valueOf(value);
|
|
|
|
- if (number != null) {
|
|
|
|
- list.add(number);
|
|
|
|
- }
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- return list;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-}
|
|
|
|
|
|
+package cn.com.qmth.stmms.admin.exam;
|
|
|
|
+
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.List;
|
|
|
|
+
|
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
|
+
|
|
|
|
+import org.apache.commons.lang.StringUtils;
|
|
|
|
+import org.slf4j.Logger;
|
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
+import org.springframework.stereotype.Controller;
|
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
+import org.springframework.ui.Model;
|
|
|
|
+import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
|
+import org.springframework.web.bind.annotation.RequestParam;
|
|
|
|
+import org.springframework.web.bind.annotation.ResponseBody;
|
|
|
|
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
|
|
|
+
|
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
|
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
|
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
|
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
|
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
|
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
|
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.MarkerService;
|
|
|
|
+import cn.com.qmth.stmms.biz.mark.model.PictureConfigItem;
|
|
|
|
+import cn.com.qmth.stmms.biz.mark.service.TaskService;
|
|
|
|
+import cn.com.qmth.stmms.common.auth.annotation.RoleRequire;
|
|
|
|
+import cn.com.qmth.stmms.common.domain.WebUser;
|
|
|
|
+import cn.com.qmth.stmms.common.enums.Role;
|
|
|
|
+import cn.com.qmth.stmms.common.utils.RequestUtils;
|
|
|
|
+import net.sf.json.JSONArray;
|
|
|
|
+import net.sf.json.JSONObject;
|
|
|
|
+
|
|
|
|
+@Controller("markGroupController")
|
|
|
|
+@RequestMapping("/admin/exam/group")
|
|
|
|
+public class MarkGroupController extends BaseExamController {
|
|
|
|
+
|
|
|
|
+ protected static Logger log = LoggerFactory.getLogger(MarkGroupController.class);
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private ExamSubjectService subjectService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private ExamQuestionService questionService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private MarkGroupService groupService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private MarkerService markerService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private TaskService taskService;
|
|
|
|
+
|
|
|
|
+ @RequestMapping
|
|
|
|
+ public String list(HttpServletRequest request, Model model, @RequestParam String subjectCode) {
|
|
|
|
+ WebUser wu = RequestUtils.getWebUser(request);
|
|
|
|
+ int examId = getSessionExamId(request);
|
|
|
|
+ ExamSubject subject = subjectService.find(examId, subjectCode);
|
|
|
|
+ if (subject == null) {
|
|
|
|
+ return "redirect:/admin/exam/mark";
|
|
|
|
+ }
|
|
|
|
+ if (wu.isSubjectHeader() && !subjectCode.equals(wu.getUser().getSubjectCode())) {
|
|
|
|
+ return "redirect:/admin/exam/mark";
|
|
|
|
+ }
|
|
|
|
+ List<MarkGroup> list = groupService.findByExamAndSubject(examId, subjectCode);
|
|
|
|
+ for (MarkGroup group : list) {
|
|
|
|
+ group.setScoreList(questionService.findByExamAndSubjectAndObjectiveAndMainNumber(examId, subjectCode, false,
|
|
|
|
+ group.getNumber()));
|
|
|
|
+ group.setMarkerCount(markerService.countByExamAndSubjectAndGroup(examId, subjectCode, group.getNumber()));
|
|
|
|
+ group.setCurrentCount(taskService.countCurrent(examId, subjectCode, group.getNumber()));
|
|
|
|
+ int percent = group.getLibraryCount() > 0
|
|
|
|
+ ? (int) (group.getMarkedCount() * 100.00 / group.getLibraryCount())
|
|
|
|
+ : 0;
|
|
|
|
+ group.setPercent(percent);
|
|
|
|
+ }
|
|
|
|
+ model.addAttribute("resultList", list);
|
|
|
|
+ model.addAttribute("subject", subject);
|
|
|
|
+ model.addAttribute("subjectList", getExamSubject(examId, wu));
|
|
|
|
+ return "modules/exam/groupList";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @RequestMapping("/query")
|
|
|
|
+ @ResponseBody
|
|
|
|
+ public JSONArray query(HttpServletRequest request, @RequestParam String subjectCode) {
|
|
|
|
+ int examId = getSessionExamId(request);
|
|
|
|
+ JSONArray array = new JSONArray();
|
|
|
|
+ List<MarkGroup> list = groupService.findByExamAndSubject(examId, subjectCode);
|
|
|
|
+ for (MarkGroup group : list) {
|
|
|
|
+ JSONObject obj = new JSONObject();
|
|
|
|
+ obj.accumulate("number", group.getNumber());
|
|
|
|
+ obj.accumulate("title", group.getTitle());
|
|
|
|
+ obj.accumulate("score", group.getTotalScore());
|
|
|
|
+ array.add(obj);
|
|
|
|
+ }
|
|
|
|
+ return array;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @RequestMapping("/check-count")
|
|
|
|
+ @RoleRequire(Role.SCHOOL_ADMIN)
|
|
|
|
+ public String ckeckCount(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
|
|
|
|
+ @RequestParam String subjectCode) {
|
|
|
|
+ int examId = getSessionExamId(request);
|
|
|
|
+ ExamSubject subject = subjectService.find(examId, subjectCode);
|
|
|
|
+ if (subject == null) {
|
|
|
|
+ return "redirect:/admin/exam/mark";
|
|
|
|
+ }
|
|
|
|
+ groupService.updateLibraryCount(examId, subjectCode);
|
|
|
|
+
|
|
|
|
+ redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
|
+ return "redirect:/admin/exam/group";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @RequestMapping("/release")
|
|
|
|
+ @RoleRequire(Role.SCHOOL_ADMIN)
|
|
|
|
+ public String release(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
|
|
|
|
+ @RequestParam String subjectCode, @RequestParam Integer number) {
|
|
|
|
+ int examId = getSessionExamId(request);
|
|
|
|
+ MarkGroup group = groupService.findOne(examId, subjectCode, number);
|
|
|
|
+ if (group == null) {
|
|
|
|
+ return "redirect:/admin/exam/mark";
|
|
|
|
+ }
|
|
|
|
+ taskService.clearCurrent(examId, group.getSubjectCode(), group.getNumber());
|
|
|
|
+
|
|
|
|
+ redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
|
+ return "redirect:/admin/exam/group";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @RequestMapping("/reset")
|
|
|
|
+ @Transactional
|
|
|
|
+ @RoleRequire(Role.SCHOOL_ADMIN)
|
|
|
|
+ public String reset(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
|
|
|
|
+ @RequestParam String subjectCode, @RequestParam Integer number) {
|
|
|
|
+ int examId = getSessionExamId(request);
|
|
|
|
+ MarkGroup group = groupService.findOne(examId, subjectCode, number);
|
|
|
|
+ if (group == null) {
|
|
|
|
+ return "redirect:/admin/exam/mark";
|
|
|
|
+ }
|
|
|
|
+ groupService.reset(group);
|
|
|
|
+
|
|
|
|
+ redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
|
+ return "redirect:/admin/exam/group";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @RequestMapping("/add")
|
|
|
|
+ @RoleRequire(Role.SCHOOL_ADMIN)
|
|
|
|
+ public String editSimple(HttpServletRequest request, Model model, @RequestParam String subjectCode) {
|
|
|
|
+ int examId = getSessionExamId(request);
|
|
|
|
+ ExamSubject subject = subjectService.find(examId, subjectCode);
|
|
|
|
+ if (subject == null) {
|
|
|
|
+ return "redirect:/admin/exam/mark";
|
|
|
|
+ }
|
|
|
|
+ MarkGroup group = new MarkGroup();
|
|
|
|
+ group.setSubjectCode(subjectCode);
|
|
|
|
+ model.addAttribute("group", group);
|
|
|
|
+ return "modules/exam/groupAdd";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @RequestMapping("/edit-simple")
|
|
|
|
+ @RoleRequire(Role.SCHOOL_ADMIN)
|
|
|
|
+ public String editSimple(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
|
|
|
|
+ @RequestParam String subjectCode, @RequestParam Integer number) {
|
|
|
|
+ int examId = getSessionExamId(request);
|
|
|
|
+ MarkGroup group = groupService.findOne(examId, subjectCode, number);
|
|
|
|
+ if (group != null) {
|
|
|
|
+ model.addAttribute("group", group);
|
|
|
|
+ model.addAttribute("questions", questionService.findByExamAndSubjectAndObjectiveAndMainNumber(
|
|
|
|
+ group.getExamId(), group.getSubjectCode(), false, group.getNumber()));
|
|
|
|
+ return "modules/exam/groupEditSimple";
|
|
|
|
+ } else {
|
|
|
|
+ redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
|
+ return "redirect:/admin/exam/group";
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @RequestMapping("/edit-full")
|
|
|
|
+ @RoleRequire(Role.SCHOOL_ADMIN)
|
|
|
|
+ public String editFull(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
|
|
|
|
+ @RequestParam String subjectCode, @RequestParam Integer number) {
|
|
|
|
+ int examId = getSessionExamId(request);
|
|
|
|
+ MarkGroup group = groupService.findOne(examId, subjectCode, number);
|
|
|
|
+ if (group != null) {
|
|
|
|
+ group.setScoreList(
|
|
|
|
+ questionService.findByExamAndSubjectAndObjectiveAndMainNumber(examId, subjectCode, false, number));
|
|
|
|
+ model.addAttribute("group", group);
|
|
|
|
+ return "modules/exam/groupEditFull";
|
|
|
|
+ } else {
|
|
|
|
+ redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
|
+ return "redirect:/admin/exam/group";
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @RequestMapping("/delete")
|
|
|
|
+ @Transactional
|
|
|
|
+ @RoleRequire(Role.SCHOOL_ADMIN)
|
|
|
|
+ public String delete(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
|
|
|
|
+ @RequestParam String subjectCode, @RequestParam Integer number) {
|
|
|
|
+ int examId = getSessionExamId(request);
|
|
|
|
+ MarkGroup group = groupService.findOne(examId, subjectCode, number);
|
|
|
|
+ if (group != null) {
|
|
|
|
+ groupService.delete(group);
|
|
|
|
+ }
|
|
|
|
+ redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
|
+ redirectAttributes.addAttribute("number", number);
|
|
|
|
+ return "redirect:/admin/exam/group";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @RequestMapping("/save")
|
|
|
|
+ @RoleRequire(Role.SCHOOL_ADMIN)
|
|
|
|
+ public String save(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
|
|
|
|
+ @RequestParam String subjectCode, @RequestParam Integer number,
|
|
|
|
+ @RequestParam(required = false) String title, @RequestParam(required = false) String picList,
|
|
|
|
+ @RequestParam(required = false) String intervalScoreList,
|
|
|
|
+ @RequestParam(required = false) String scoreList) {
|
|
|
|
+ int examId = getSessionExamId(request);
|
|
|
|
+ MarkGroup group = groupService.findOne(examId, subjectCode, number);
|
|
|
|
+ List<ExamQuestion> questionList = questionService.findByExamAndSubjectAndObjectiveAndMainNumber(examId,
|
|
|
|
+ subjectCode, false, number);
|
|
|
|
+ if (group != null) {
|
|
|
|
+ // quick update
|
|
|
|
+ List<PictureConfigItem> list = PictureConfigItem.parse(picList);
|
|
|
|
+ if (list != null && !list.isEmpty()) {
|
|
|
|
+ groupService.updatePicList(examId, subjectCode, number, list);
|
|
|
|
+ }
|
|
|
|
+ List<Double> intervalScores = buildDoubleList(intervalScoreList);
|
|
|
|
+ if (intervalScores.size() == questionList.size()) {
|
|
|
|
+ for (int i = 0; i < questionList.size(); i++) {
|
|
|
|
+ ExamQuestion q = questionList.get(i);
|
|
|
|
+ q.setIntervalScore(intervalScores.get(i));
|
|
|
|
+ questionService.save(q);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ title = StringUtils.trimToNull(title);
|
|
|
|
+ if (title != null) {
|
|
|
|
+ groupService.updateTitle(examId, subjectCode, number, title);
|
|
|
|
+ }
|
|
|
|
+ // advance update
|
|
|
|
+ List<Double> scores = buildDoubleList(scoreList);
|
|
|
|
+ if (scores.size() > 0) {
|
|
|
|
+ // reset current mark_library
|
|
|
|
+ groupService.reset(group);
|
|
|
|
+ // clear and replace exam_question
|
|
|
|
+ questionService.deleteByExamAndSubjectAndObjectiveAndMainNumber(examId, subjectCode, false, number);
|
|
|
|
+ int i = 0;
|
|
|
|
+ double totalScore = 0d;
|
|
|
|
+ for (Double score : scores) {
|
|
|
|
+ i++;
|
|
|
|
+ totalScore += score;
|
|
|
|
+ ExamQuestion question = new ExamQuestion();
|
|
|
|
+ question.setExamId(examId);
|
|
|
|
+ question.setSubjectCode(subjectCode);
|
|
|
|
+ question.setMainTitle(group.getTitle());
|
|
|
|
+ question.setMainNumber(number);
|
|
|
|
+ question.setSubNumber(i);
|
|
|
|
+ question.setObjective(false);
|
|
|
|
+ question.setTotalScore(score);
|
|
|
|
+ question.setIntervalScore(1d);
|
|
|
|
+ questionService.save(question);
|
|
|
|
+ }
|
|
|
|
+ groupService.updateTotalScore(examId, subjectCode, number, totalScore);
|
|
|
|
+ subjectService.updateScore(examId, subjectCode);
|
|
|
|
+ }
|
|
|
|
+ redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
|
+ redirectAttributes.addAttribute("number", number);
|
|
|
|
+ return "redirect:/admin/exam/group";
|
|
|
|
+ } else {
|
|
|
|
+ addMessage(redirectAttributes, "找不到对应大题");
|
|
|
|
+ redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
|
+ redirectAttributes.addAttribute("number", number);
|
|
|
|
+ return "redirect:/admin/exam/group/edit-simple";
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @RequestMapping("/insert")
|
|
|
|
+ @Transactional
|
|
|
|
+ @RoleRequire(Role.SCHOOL_ADMIN)
|
|
|
|
+ public String insert(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
|
|
|
|
+ @RequestParam String subjectCode, @RequestParam Integer number,
|
|
|
|
+ @RequestParam(required = false) String title, @RequestParam(required = false) String picList,
|
|
|
|
+ @RequestParam(required = false) String scoreList) {
|
|
|
|
+ int examId = getSessionExamId(request);
|
|
|
|
+ MarkGroup group = groupService.findOne(examId, subjectCode, number);
|
|
|
|
+ if (group != null) {
|
|
|
|
+ addMessage(redirectAttributes, "大题号不能重复");
|
|
|
|
+ redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
|
+ return "redirect:/admin/exam/group/add";
|
|
|
|
+ } else {
|
|
|
|
+ // create group
|
|
|
|
+ group = new MarkGroup(examId, subjectCode, number, StringUtils.trimToNull(title),
|
|
|
|
+ PictureConfigItem.parse(picList), 0d);
|
|
|
|
+ List<Double> scores = buildDoubleList(scoreList);
|
|
|
|
+ if (group.getTitle() != null && group.getPicList() != null && scores.size() > 0) {
|
|
|
|
+ // clear and replace exam_question
|
|
|
|
+ questionService.deleteByExamAndSubjectAndObjectiveAndMainNumber(examId, subjectCode, false, number);
|
|
|
|
+ int i = 0;
|
|
|
|
+ double totalScore = 0d;
|
|
|
|
+ for (Double score : scores) {
|
|
|
|
+ i++;
|
|
|
|
+ totalScore += score;
|
|
|
|
+ ExamQuestion question = new ExamQuestion();
|
|
|
|
+ question.setExamId(examId);
|
|
|
|
+ question.setSubjectCode(subjectCode);
|
|
|
|
+ question.setMainTitle(group.getTitle());
|
|
|
|
+ question.setMainNumber(number);
|
|
|
|
+ question.setSubNumber(i);
|
|
|
|
+ question.setObjective(false);
|
|
|
|
+ question.setTotalScore(score);
|
|
|
|
+ question.setIntervalScore(1d);
|
|
|
|
+ questionService.save(question);
|
|
|
|
+ }
|
|
|
|
+ group.setTotalScore(totalScore);
|
|
|
|
+ groupService.save(group);
|
|
|
|
+ subjectService.updateScore(examId, subjectCode);
|
|
|
|
+ redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
|
+ return "redirect:/admin/exam/group";
|
|
|
|
+ } else {
|
|
|
|
+ addMessage(redirectAttributes, "参数有误");
|
|
|
|
+ redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
|
+ return "redirect:/admin/exam/group/add";
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private List<Double> buildDoubleList(String content) {
|
|
|
|
+ List<Double> list = new ArrayList<Double>();
|
|
|
|
+ content = StringUtils.trimToNull(content);
|
|
|
|
+ if (content != null) {
|
|
|
|
+ String[] values = StringUtils.split(content, ",");
|
|
|
|
+ if (values != null) {
|
|
|
|
+ for (String value : values) {
|
|
|
|
+ try {
|
|
|
|
+ Double number = Double.valueOf(value);
|
|
|
|
+ if (number != null) {
|
|
|
|
+ list.add(number);
|
|
|
|
+ }
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return list;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|