|
@@ -0,0 +1,108 @@
|
|
|
+package cn.com.qmth.stmms.admin.exam;
|
|
|
+
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.core.task.AsyncTaskExecutor;
|
|
|
+import org.springframework.stereotype.Controller;
|
|
|
+import org.springframework.ui.Model;
|
|
|
+import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
+import org.springframework.web.bind.annotation.RequestParam;
|
|
|
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
|
|
+
|
|
|
+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.query.MarkerSearchQuery;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.MarkerService;
|
|
|
+import cn.com.qmth.stmms.biz.lock.LockService;
|
|
|
+import cn.com.qmth.stmms.biz.mark.service.MarkService;
|
|
|
+import cn.com.qmth.stmms.biz.mark.thread.MarkQualityThread;
|
|
|
+import cn.com.qmth.stmms.common.domain.WebUser;
|
|
|
+import cn.com.qmth.stmms.common.enums.LockType;
|
|
|
+import cn.com.qmth.stmms.common.utils.Callback;
|
|
|
+import cn.com.qmth.stmms.common.utils.RequestUtils;
|
|
|
+
|
|
|
+@Controller("markQualityController")
|
|
|
+@RequestMapping("/admin/exam/quality")
|
|
|
+public class MarkQualityController extends BaseExamController {
|
|
|
+
|
|
|
+ protected static Logger log = LoggerFactory.getLogger(MarkQualityController.class);
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private MarkGroupService groupService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private MarkerService markerService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private MarkService markService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private LockService lockService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private AsyncTaskExecutor taskExecutor;
|
|
|
+
|
|
|
+ @RequestMapping
|
|
|
+ public String list(Model model, HttpServletRequest request, MarkerSearchQuery query) {
|
|
|
+ int examId = getSessionExamId(request);
|
|
|
+ WebUser wu = RequestUtils.getWebUser(request);
|
|
|
+ List<ExamSubject> subjectList = getExamSubject(examId, wu);
|
|
|
+ if (subjectList.isEmpty()) {
|
|
|
+ return "redirect:/admin/exam/mark";
|
|
|
+ }
|
|
|
+ query.setExamId(examId);
|
|
|
+ query.orderById();
|
|
|
+ if (query.getSubjectCode() == null && !subjectList.isEmpty()) {
|
|
|
+ query.setSubjectCode(subjectList.get(0).getCode());
|
|
|
+ }
|
|
|
+ subjectFilter(query, wu);
|
|
|
+ List<MarkGroup> groupList = groupService.findByExamAndSubject(examId, query.getSubjectCode());
|
|
|
+ if (query.getGroupNumber() == null && groupList.size() > 0) {
|
|
|
+ query.setGroupNumber(groupList.get(0).getNumber());
|
|
|
+ }
|
|
|
+ if (query.getSubjectCode() != null && query.getGroupNumber() != null) {
|
|
|
+ query = markerService.findByQuery(query);
|
|
|
+ model.addAttribute("running", lockService.isLocked(LockType.GROUP,
|
|
|
+ getLockKey(examId, query.getSubjectCode(), query.getGroupNumber())));
|
|
|
+ }
|
|
|
+ model.addAttribute("query", query);
|
|
|
+ model.addAttribute("subjectList", subjectList);
|
|
|
+ model.addAttribute("groupList", groupList);
|
|
|
+ return "modules/exam/qualityList";
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping("/update")
|
|
|
+ public String update(HttpServletRequest request, RedirectAttributes redirectAttributes,
|
|
|
+ @RequestParam String subjectCode, @RequestParam Integer groupNumber) {
|
|
|
+ int examId = getSessionExamId(request);
|
|
|
+ MarkGroup group = groupService.findOne(examId, subjectCode, groupNumber);
|
|
|
+ if (group != null) {
|
|
|
+ final String lockKey = getLockKey(examId, subjectCode, groupNumber);
|
|
|
+ if (lockService.trylock(LockType.GROUP, lockKey)) {
|
|
|
+ taskExecutor.submit(new MarkQualityThread(
|
|
|
+ markerService.findByExamAndSubjectAndGroup(examId, subjectCode, groupNumber), markService,
|
|
|
+ new Callback() {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void invoke() {
|
|
|
+ lockService.unlock(LockType.GROUP, lockKey);
|
|
|
+ }
|
|
|
+ }));
|
|
|
+ }
|
|
|
+ redirectAttributes.addAttribute("groupNumber", groupNumber);
|
|
|
+ }
|
|
|
+ redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
+ return "redirect:/admin/exam/quality";
|
|
|
+ }
|
|
|
+
|
|
|
+ private String getLockKey(Integer examId, String subjectCode, Integer groupNumber) {
|
|
|
+ return examId + "_" + subjectCode + "_" + groupNumber;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|