|
@@ -1,41 +1,52 @@
|
|
|
package cn.com.qmth.stmms.admin.exam;
|
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.HashSet;
|
|
|
+import java.util.LinkedList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Set;
|
|
|
+
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+
|
|
|
+import net.sf.json.JSONObject;
|
|
|
+
|
|
|
+import org.apache.commons.lang.StringUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Controller;
|
|
|
+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.ModelAndView;
|
|
|
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
|
|
+
|
|
|
import cn.com.qmth.stmms.admin.dto.ExamStudentDTO;
|
|
|
import cn.com.qmth.stmms.admin.dto.ScoreEditDTO;
|
|
|
-import cn.com.qmth.stmms.admin.thread.ScoreCalculateThread;
|
|
|
import cn.com.qmth.stmms.admin.utils.ExportStudentExcel;
|
|
|
-import cn.com.qmth.stmms.biz.exam.model.*;
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.Exam;
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.ExamPackage;
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
|
|
|
+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.ExamStudentSearchQuery;
|
|
|
-import cn.com.qmth.stmms.biz.exam.service.*;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.CheckStudentService;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.ExamPackageService;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.ExamService;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
|
|
|
import cn.com.qmth.stmms.biz.file.service.FileService;
|
|
|
-import cn.com.qmth.stmms.biz.lock.LockService;
|
|
|
-import cn.com.qmth.stmms.biz.mark.service.MarkService;
|
|
|
-import cn.com.qmth.stmms.biz.report.service.ReportService;
|
|
|
import cn.com.qmth.stmms.biz.utils.ScoreItem;
|
|
|
import cn.com.qmth.stmms.common.annotation.Logging;
|
|
|
import cn.com.qmth.stmms.common.annotation.RoleRequire;
|
|
|
import cn.com.qmth.stmms.common.domain.WebUser;
|
|
|
-import cn.com.qmth.stmms.common.enums.LockType;
|
|
|
import cn.com.qmth.stmms.common.enums.LogType;
|
|
|
import cn.com.qmth.stmms.common.enums.MarkStatus;
|
|
|
import cn.com.qmth.stmms.common.enums.Role;
|
|
|
import cn.com.qmth.stmms.common.utils.ExportExcel;
|
|
|
import cn.com.qmth.stmms.common.utils.RequestUtils;
|
|
|
-import net.sf.json.JSONObject;
|
|
|
-import org.apache.commons.lang.StringUtils;
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-import org.springframework.beans.factory.annotation.Qualifier;
|
|
|
-import org.springframework.core.task.AsyncTaskExecutor;
|
|
|
-import org.springframework.stereotype.Controller;
|
|
|
-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.ModelAndView;
|
|
|
-import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
|
|
-
|
|
|
-import javax.servlet.http.HttpServletRequest;
|
|
|
-import javax.servlet.http.HttpServletResponse;
|
|
|
-import java.util.*;
|
|
|
|
|
|
@Controller
|
|
|
@RequestMapping("/admin/exam/score")
|
|
@@ -56,22 +67,9 @@ public class ScoreController extends BaseExamController {
|
|
|
@Autowired
|
|
|
private MarkGroupService groupService;
|
|
|
|
|
|
- @Qualifier("task-executor")
|
|
|
- @Autowired
|
|
|
- private AsyncTaskExecutor taskExecutor;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private LockService lockService;
|
|
|
-
|
|
|
@Autowired
|
|
|
private ExamService examService;
|
|
|
|
|
|
- @Autowired
|
|
|
- private MarkService markService;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private ReportService reportService;
|
|
|
-
|
|
|
@Autowired
|
|
|
private CheckStudentService checkStudentService;
|
|
|
|
|
@@ -99,8 +97,8 @@ public class ScoreController extends BaseExamController {
|
|
|
buildPackageUrl(student);
|
|
|
buildAnswerUrl(student);
|
|
|
}
|
|
|
- String exportMessage =
|
|
|
- query.getSubjectCode() != null ? enableExport(query.getExamId(), query.getSubjectCode()) : null;
|
|
|
+ String exportMessage = query.getSubjectCode() != null ? enableExport(query.getExamId(), query.getSubjectCode())
|
|
|
+ : null;
|
|
|
if (exportMessage != null) {
|
|
|
view.addObject("exportMessage", exportMessage);
|
|
|
view.addObject("enableExport", false);
|
|
@@ -171,26 +169,6 @@ public class ScoreController extends BaseExamController {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
- @Logging(menu = "重新统分", type = LogType.UPDATE)
|
|
|
- @RequestMapping("/calculate")
|
|
|
- @RoleRequire(Role.SCHOOL_ADMIN)
|
|
|
- public ModelAndView calculate(HttpServletRequest request, RedirectAttributes redirectAttributes) {
|
|
|
- WebUser wu = RequestUtils.getWebUser(request);
|
|
|
- Exam exam = examService.findById(getSessionExamId(request));
|
|
|
- if (exam == null || !exam.getSchoolId().equals(wu.getUser().getSchoolId())) {
|
|
|
- addMessage(redirectAttributes, "请选择正确的考试");
|
|
|
- } else {
|
|
|
- Set<String> subjectSet = getCalculateSubjectCodes(exam.getId());
|
|
|
- if (!subjectSet.isEmpty()) {
|
|
|
- ScoreCalculateThread thread = new ScoreCalculateThread(exam.getId(), subjectSet, lockService,
|
|
|
- studentService, questionService, markService, reportService, examService, subjectService,
|
|
|
- groupService);
|
|
|
- taskExecutor.submit(thread);
|
|
|
- }
|
|
|
- }
|
|
|
- return new ModelAndView("redirect:/admin/exam/score");
|
|
|
- }
|
|
|
-
|
|
|
@Logging(menu = "导出成绩", type = LogType.EXPORT)
|
|
|
@RequestMapping("/export")
|
|
|
@RoleRequire(Role.SCHOOL_ADMIN)
|
|
@@ -203,21 +181,21 @@ public class ScoreController extends BaseExamController {
|
|
|
return "redirect:/admin/exam/score";
|
|
|
}
|
|
|
Set<String> subjectSet = new HashSet<>();
|
|
|
- //单科目导出
|
|
|
+ // 单科目导出
|
|
|
if (query.getSubjectCode() != null) {
|
|
|
String exportMessage = enableExport(query.getExamId(), query.getSubjectCode());
|
|
|
- //判断不允许导出则直接返回
|
|
|
+ // 判断不允许导出则直接返回
|
|
|
if (exportMessage != null) {
|
|
|
addMessage(redirectAttributes, "该科目不能导出成绩 " + exportMessage);
|
|
|
return "redirect:/admin/exam/score";
|
|
|
}
|
|
|
subjectSet.add(query.getSubjectCode());
|
|
|
}
|
|
|
- //全体科目导出
|
|
|
+ // 全体科目导出
|
|
|
else {
|
|
|
List<ExamSubject> list = subjectService.list(query.getExamId());
|
|
|
for (ExamSubject subject : list) {
|
|
|
- //遍历所有科目,判断是否允许导出
|
|
|
+ // 遍历所有科目,判断是否允许导出
|
|
|
if (enableExport(subject.getExamId(), subject.getCode()) == null) {
|
|
|
subjectSet.add(subject.getCode());
|
|
|
}
|
|
@@ -260,8 +238,8 @@ public class ScoreController extends BaseExamController {
|
|
|
|
|
|
private List<String> getOptionHeader(int examId, String subjectCode, String paperType) {
|
|
|
List<String> headerList = new ArrayList<String>();
|
|
|
- List<ExamQuestion> oQuestions = questionService
|
|
|
- .findByExamAndSubjectAndObjectiveAndPaperType(examId, subjectCode, true, paperType);
|
|
|
+ List<ExamQuestion> oQuestions = questionService.findByExamAndSubjectAndObjectiveAndPaperType(examId,
|
|
|
+ subjectCode, true, paperType);
|
|
|
List<ExamQuestion> sQestions = questionService.findByExamAndSubjectAndObjective(examId, subjectCode, false);
|
|
|
for (ExamQuestion examQuestion : oQuestions) {
|
|
|
headerList.add(getTitle(examQuestion) + "选项");
|
|
@@ -295,9 +273,8 @@ public class ScoreController extends BaseExamController {
|
|
|
private List<ScoreItem> buildScoreList(ExamStudent student) {
|
|
|
List<ScoreItem> scoreList = new LinkedList<ScoreItem>();
|
|
|
|
|
|
- List<ExamQuestion> oList = questionService
|
|
|
- .findByExamAndSubjectAndObjectiveAndPaperType(student.getExamId(), student.getSubjectCode(), true,
|
|
|
- student.getPaperType());
|
|
|
+ List<ExamQuestion> oList = questionService.findByExamAndSubjectAndObjectiveAndPaperType(student.getExamId(),
|
|
|
+ student.getSubjectCode(), true, student.getPaperType());
|
|
|
List<ScoreItem> list1 = student.getScoreList(true);
|
|
|
int index = 0;
|
|
|
for (ExamQuestion question : oList) {
|
|
@@ -312,8 +289,8 @@ public class ScoreController extends BaseExamController {
|
|
|
}
|
|
|
scoreList.addAll(list1);
|
|
|
|
|
|
- List<ExamQuestion> sList = questionService
|
|
|
- .findByExamAndSubjectAndObjective(student.getExamId(), student.getSubjectCode(), false);
|
|
|
+ List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjective(student.getExamId(),
|
|
|
+ student.getSubjectCode(), false);
|
|
|
List<ScoreItem> list2 = student.getScoreList(false);
|
|
|
index = 0;
|
|
|
for (ExamQuestion question : sList) {
|
|
@@ -333,10 +310,11 @@ public class ScoreController extends BaseExamController {
|
|
|
|
|
|
private void buildSheetUrl(ExamStudent student) {
|
|
|
// 改为内部原图浏览地址,直接附带标记内容
|
|
|
- //student.setSheetUrls(PictureUrlBuilder
|
|
|
- // .getInnerSheetUrls(student.getExamId(), student.getExamNumber(), student.getSheetCount()));
|
|
|
- student.setSheetUrls(
|
|
|
- fileService.getSheetUris(student.getExamId(), student.getExamNumber(), 1, student.getSheetCount()));
|
|
|
+ // student.setSheetUrls(PictureUrlBuilder
|
|
|
+ // .getInnerSheetUrls(student.getExamId(), student.getExamNumber(),
|
|
|
+ // student.getSheetCount()));
|
|
|
+ student.setSheetUrls(fileService.getSheetUris(student.getExamId(), student.getExamNumber(), 1,
|
|
|
+ student.getSheetCount()));
|
|
|
}
|
|
|
|
|
|
private void buildPackageUrl(ExamStudent student) {
|
|
@@ -351,8 +329,8 @@ public class ScoreController extends BaseExamController {
|
|
|
private void buildAnswerUrl(ExamStudent student) {
|
|
|
ExamSubject subject = subjectService.find(student.getExamId(), student.getSubjectCode());
|
|
|
if (subject != null && subject.getAnswerFileType() != null) {
|
|
|
- student.setAnswerUrl(
|
|
|
- fileService.getAnswerUri(subject.getExamId(), subject.getCode(), subject.getAnswerFileType()));
|
|
|
+ student.setAnswerUrl(fileService.getAnswerUri(subject.getExamId(), subject.getCode(),
|
|
|
+ subject.getAnswerFileType()));
|
|
|
}
|
|
|
if (subject != null) {
|
|
|
student.setSubjectRemark(StringUtils.trimToEmpty(subject.getRemark()));
|
|
@@ -365,8 +343,8 @@ public class ScoreController extends BaseExamController {
|
|
|
return "该科目需要统分";
|
|
|
}
|
|
|
|
|
|
- List<MarkGroup> groups = groupService
|
|
|
- .findByExamAndSubjectAndStatus(examId, subjectCode, MarkStatus.FORMAL, MarkStatus.TRIAL);
|
|
|
+ List<MarkGroup> groups = groupService.findByExamAndSubjectAndStatus(examId, subjectCode, MarkStatus.FORMAL,
|
|
|
+ MarkStatus.TRIAL);
|
|
|
if (groups != null && !groups.isEmpty()) {
|
|
|
return subjectCode + "评卷未完成";
|
|
|
}
|
|
@@ -386,15 +364,4 @@ public class ScoreController extends BaseExamController {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
- private Set<String> getCalculateSubjectCodes(Integer examId) {
|
|
|
- List<ExamSubject> list = subjectService.list(examId);
|
|
|
- Set<String> set = new HashSet<>();
|
|
|
- for (ExamSubject subject : list) {
|
|
|
- if (!lockService.isLocked(LockType.SCORE_CALCULATE, subject.getExamId(), subject.getCode())) {
|
|
|
- set.add(subject.getCode());
|
|
|
- }
|
|
|
- }
|
|
|
- return set;
|
|
|
- }
|
|
|
-
|
|
|
}
|