Selaa lähdekoodia

/api/exam/students接口增加参数,控制返回轨迹是否包含分组总分左上角显示

luoshi 4 vuotta sitten
vanhempi
commit
3f4e6c3079

+ 3 - 3
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ExamStudentService.java

@@ -119,11 +119,11 @@ public interface ExamStudentService {
     List<Integer> findIdByExamIdAndSubjectCodeAndSubjectiveStatus(Integer examId, String subjectCode,
             SubjectiveStatus... status);
 
-    List<PictureTag> buildSheetTags(ExamStudent student, int index);
+    List<PictureTag> buildSheetTags(ExamStudent student, int index, boolean withGroupScore);
 
-    Map<Integer, List<PictureTag>> buildSheetTags(ExamStudent student);
+    Map<Integer, List<PictureTag>> buildSheetTags(ExamStudent student, boolean withGroupScore);
 
-    Map<MarkGroup, List<OriginTag>> getSliceTags(ExamStudent student);
+    Map<MarkGroup, List<OriginTag>> getSliceTags(ExamStudent student, boolean withGroupScore);
 
     boolean updateScanInfo(ExamStudent student);
 

+ 18 - 15
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamStudentServiceImpl.java

@@ -774,7 +774,7 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
      * 根据考生获得某张原图上的评卷标记和分数明细
      */
     @Override
-    public List<PictureTag> buildSheetTags(ExamStudent student, int index) {
+    public List<PictureTag> buildSheetTags(ExamStudent student, int index, boolean withGroupScore) {
         List<PictureTag> list = new LinkedList<>();
         // 第一页原图才需要显示总分明细
         // if (index == 1) {
@@ -788,7 +788,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
             sliceConfig = exam.getSliceConfigList();
         }
         if (!sliceConfig.isEmpty()) {
-            List<PictureTag> tags = PictureConfigTransform.process(sliceConfig, getSliceTags(student)).get(index);
+            List<PictureTag> tags = PictureConfigTransform.process(sliceConfig, getSliceTags(student, withGroupScore))
+                    .get(index);
             if (tags != null) {
                 list.addAll(tags);
             }
@@ -800,7 +801,7 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
      * 根据考生获得所有原图上的评卷标记和分数明细
      */
     @Override
-    public Map<Integer, List<PictureTag>> buildSheetTags(ExamStudent student) {
+    public Map<Integer, List<PictureTag>> buildSheetTags(ExamStudent student, boolean withGroupScore) {
         Map<MarkGroup, List<OriginTag>> tagMap = new HashMap<MarkGroup, List<OriginTag>>();
         Exam exam = examService.findById(student.getExamId());
         ExamSubject subject = subjectService.find(student.getExamId(), student.getSubjectCode());
@@ -810,7 +811,7 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
         }
         if (!sliceConfig.isEmpty()) {
             // 有裁切图配置时才需要获取原始评卷标记信息
-            tagMap = getSliceTags(student);
+            tagMap = getSliceTags(student, withGroupScore);
         }
         Map<Integer, List<PictureTag>> map = PictureConfigTransform.process(sliceConfig, tagMap);
         // List<PictureTag> list = map.get(1);
@@ -826,14 +827,14 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
      * 根据考生获取所有评卷分组的评卷标记内容
      */
     @Override
-    public Map<MarkGroup, List<OriginTag>> getSliceTags(ExamStudent student) {
+    public Map<MarkGroup, List<OriginTag>> getSliceTags(ExamStudent student, boolean withGroupScore) {
         Map<MarkGroup, List<OriginTag>> tagMap = new HashMap<MarkGroup, List<OriginTag>>();
         List<ExamQuestion> questions = questionService
                 .findByExamAndSubjectAndObjective(student.getExamId(), student.getSubjectCode(), false);
         List<ScoreItem> scoreList = student.getScoreList(false);
         List<MarkGroup> markGroups = groupService.findByExamAndSubject(student.getExamId(), student.getSubjectCode());
         for (MarkGroup group : markGroups) {
-            tagMap.put(group, buildOriginTags(student, group, questions, scoreList));
+            tagMap.put(group, buildOriginTags(student, group, questions, scoreList, withGroupScore));
         }
         return tagMap;
     }
@@ -907,7 +908,7 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
      * @return
      */
     private List<OriginTag> buildOriginTags(ExamStudent student, MarkGroup group, List<ExamQuestion> questions,
-            List<ScoreItem> scoreList) {
+            List<ScoreItem> scoreList, boolean withGroupScore) {
         DecimalFormat format = new DecimalFormat("####.###");
         // 从考生主观题得分中拆解出本大题得分
         double score = 0;
@@ -924,14 +925,16 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
         // 原图中需要显示的内容列表
         List<OriginTag> originTags = new LinkedList<>();
         // 首先添加本大题总得分
-        List<PictureConfigItem> configList = group.getPictureConfigList();
-        if (configList.isEmpty()) {
-            // 未设置评卷区域,则自动取第一张裁切图的固定位置
-            originTags.add(new OriginTag(format.format(score), 1, 10, 10));
-        } else {
-            // 取第一个显示区域相对裁切图的位置
-            PictureConfigItem config = configList.get(0);
-            originTags.add(new OriginTag(format.format(score), config.getI(), config.getX(), config.getY()));
+        if (withGroupScore) {
+            List<PictureConfigItem> configList = group.getPictureConfigList();
+            if (configList.isEmpty()) {
+                // 未设置评卷区域,则自动取第一张裁切图的固定位置
+                originTags.add(new OriginTag(format.format(score), 1, 10, 10));
+            } else {
+                // 取第一个显示区域相对裁切图的位置
+                PictureConfigItem config = configList.get(0);
+                originTags.add(new OriginTag(format.format(score), config.getI(), config.getX(), config.getY()));
+            }
         }
         // 检测应该使用哪个评卷任务的轨迹记录
         MarkLibrary selected = null;

+ 1 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkTrackController.java

@@ -69,7 +69,7 @@ public class MarkTrackController extends BaseExamController {
             view.addObject("urls", StringUtils.join(sliceUrls, ","));
 
             JSONArray result = new JSONArray();
-            Map<MarkGroup, List<OriginTag>> maps = studentService.getSliceTags(student);
+            Map<MarkGroup, List<OriginTag>> maps = studentService.getSliceTags(student, false);
             for (Entry<MarkGroup, List<OriginTag>> entry : maps.entrySet()) {
                 MarkGroup group = entry.getKey();
                 JSONObject item = new JSONObject();

+ 32 - 40
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/StudentController.java

@@ -1,29 +1,5 @@
 package cn.com.qmth.stmms.admin.exam;
 
-import java.util.Date;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import net.sf.json.JSONObject;
-
-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.ui.Model;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.servlet.mvc.support.RedirectAttributes;
-
 import cn.com.qmth.stmms.admin.vo.ExamStudentVO;
 import cn.com.qmth.stmms.admin.vo.UploadStudentVO;
 import cn.com.qmth.stmms.biz.exam.model.Exam;
@@ -46,8 +22,24 @@ import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
 import cn.com.qmth.stmms.common.utils.ExportExcel;
 import cn.com.qmth.stmms.common.utils.ImportExcel;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
-
 import com.google.common.collect.Lists;
+import net.sf.json.JSONObject;
+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.ui.Model;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.*;
 
 @Controller("examStudentController")
 @RequestMapping("/admin/exam/student")
@@ -216,11 +208,8 @@ public class StudentController extends BaseExamController {
         if (student != null) {
             studentService.deleteById(id);
             markService.deleteByStudent(student);
-            subjectService.updateUploadCount(
-                    student.getExamId(),
-                    student.getSubjectCode(),
-                    (int) studentService.countUploadedByExamIdAndSubjectCode(student.getExamId(),
-                            student.getSubjectCode()));
+            subjectService.updateUploadCount(student.getExamId(), student.getSubjectCode(), (int) studentService
+                    .countUploadedByExamIdAndSubjectCode(student.getExamId(), student.getSubjectCode()));
             addMessage(redirectAttributes, "删除考生成功");
             RequestUtils.setLog(request, "删除成功,id:" + id);
         } else {
@@ -269,10 +258,10 @@ public class StudentController extends BaseExamController {
 
             for (ExamStudent student : list) {
                 if (StringUtils.isBlank(student.getExamNumber()) || StringUtils.isBlank(student.getName())
-                        || StringUtils.isBlank(student.getSubjectCode())
-                        || StringUtils.isBlank(student.getSubjectName()) || StringUtils.isBlank(student.getCollege())
-                        || StringUtils.isBlank(student.getClassName()) || StringUtils.isBlank(student.getTeacher())
-                        || StringUtils.isBlank(student.getStudentCode())) {
+                        || StringUtils.isBlank(student.getSubjectCode()) || StringUtils
+                        .isBlank(student.getSubjectName()) || StringUtils.isBlank(student.getCollege()) || StringUtils
+                        .isBlank(student.getClassName()) || StringUtils.isBlank(student.getTeacher()) || StringUtils
+                        .isBlank(student.getStudentCode())) {
                     continue;
                 }
 
@@ -343,7 +332,7 @@ public class StudentController extends BaseExamController {
     public Object getSheetTag(HttpServletRequest request, @RequestParam Integer id) {
         ExamStudent student = studentService.findById(id);
         if (student != null) {
-            return studentService.buildSheetTags(student);
+            return studentService.buildSheetTags(student, false);
         } else {
             return new HashMap<>();
         }
@@ -365,7 +354,8 @@ public class StudentController extends BaseExamController {
 
     @Logging(menu = "导入缺考名单", type = LogType.IMPORT_FILE)
     @RequestMapping(value = "/absentImport", method = RequestMethod.POST)
-    public String absentImportFile(HttpServletRequest request, MultipartFile file, RedirectAttributes redirectAttributes) {
+    public String absentImportFile(HttpServletRequest request, MultipartFile file,
+            RedirectAttributes redirectAttributes) {
         int examId = getSessionExamId(request);
         try {
             int successNum = 0;
@@ -417,7 +407,8 @@ public class StudentController extends BaseExamController {
 
     @Logging(menu = "导入违纪名单", type = LogType.IMPORT_FILE)
     @RequestMapping(value = "/breachImport", method = RequestMethod.POST)
-    public String breachImportFile(HttpServletRequest request, MultipartFile file, RedirectAttributes redirectAttributes) {
+    public String breachImportFile(HttpServletRequest request, MultipartFile file,
+            RedirectAttributes redirectAttributes) {
         int examId = getSessionExamId(request);
         // Exam exam = examService.findById(examId);
         try {
@@ -492,7 +483,8 @@ public class StudentController extends BaseExamController {
     }
 
     @RequestMapping(value = "/uploadImport", method = RequestMethod.POST)
-    public String uploadImportFile(HttpServletRequest request, MultipartFile file, RedirectAttributes redirectAttributes) {
+    public String uploadImportFile(HttpServletRequest request, MultipartFile file,
+            RedirectAttributes redirectAttributes) {
         int examId = getSessionExamId(request);
         // Exam exam = examService.findById(examId);
         try {
@@ -571,8 +563,8 @@ public class StudentController extends BaseExamController {
     }
 
     private void buildSheetUrl(ExamStudent student) {
-        student.setSheetUrls(fileService.getSheetUris(student.getExamId(), student.getExamNumber(), 1,
-                student.getSheetCount()));
+        student.setSheetUrls(
+                fileService.getSheetUris(student.getExamId(), student.getExamNumber(), 1, student.getSheetCount()));
     }
 
     private void buildPackageUrl(ExamStudent student) {

+ 19 - 17
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/ExamStudentController.java

@@ -63,8 +63,8 @@ public class ExamStudentController extends BaseApiController {
     @ResponseBody
     public JSONObject checkStudent(HttpServletRequest request, @RequestBody ExamStudent examStudent) {
         JSONObject obj = new JSONObject();
-        ExamStudent student = studentService.findByExamIdAndExamNumber(examStudent.getExamId(),
-                examStudent.getExamNumber());
+        ExamStudent student = studentService
+                .findByExamIdAndExamNumber(examStudent.getExamId(), examStudent.getExamNumber());
         if (student != null) {
             obj.accumulate("examId", examStudent.getExamId());
             obj.accumulate("campusCode", "0");
@@ -104,7 +104,9 @@ public class ExamStudentController extends BaseApiController {
     @ResponseBody
     public JSONArray getStudent(HttpServletRequest request, ExamStudentSearchQuery query,
             @RequestParam(required = false) Boolean withScoreDetail,
-            @RequestParam(required = false) Boolean withMarkTrack, @RequestParam(required = false) Boolean withSheetUrl) {
+            @RequestParam(required = false) Boolean withMarkTrack,
+            @RequestParam(required = false) Boolean withGroupScoreTrack,
+            @RequestParam(required = false) Boolean withSheetUrl) {
         ApiUser user = RequestUtils.getApiUser(request);
         JSONArray array = new JSONArray();
         if (query.getExamId() == null) {
@@ -152,8 +154,9 @@ public class ExamStudentController extends BaseApiController {
                         // 构造客观题得分明细
                         JSONArray objective = new JSONArray();
                         List<ScoreItem> scoreList = student.getScoreList(true);
-                        List<ExamQuestion> questionList = questionService.findByExamAndSubjectAndObjectiveAndPaperType(
-                                student.getExamId(), student.getSubjectCode(), true, student.getPaperType());
+                        List<ExamQuestion> questionList = questionService
+                                .findByExamAndSubjectAndObjectiveAndPaperType(student.getExamId(),
+                                        student.getSubjectCode(), true, student.getPaperType());
                         int i = 0;
                         for (ScoreItem item : scoreList) {
                             i++;
@@ -176,8 +179,8 @@ public class ExamStudentController extends BaseApiController {
                         // 构造主观题得分明细
                         JSONArray subjective = new JSONArray();
                         scoreList = student.getScoreList(false);
-                        questionList = questionService.findByExamAndSubjectAndObjective(student.getExamId(),
-                                student.getSubjectCode(), false);
+                        questionList = questionService
+                                .findByExamAndSubjectAndObjective(student.getExamId(), student.getSubjectCode(), false);
                         i = 0;
                         for (ScoreItem item : scoreList) {
                             i++;
@@ -200,17 +203,15 @@ public class ExamStudentController extends BaseApiController {
                     }
                     // 返回评卷标记
                     if (withMarkTrack != null && withMarkTrack.booleanValue()) {
-                        obj.accumulate("tags", studentService.buildSheetTags(student));
+                        obj.accumulate("tags", studentService.buildSheetTags(student,
+                                withGroupScoreTrack != null && withGroupScoreTrack.booleanValue()));
                     }
                     // 返回原图下载地址
                     if (withSheetUrl != null && withSheetUrl.booleanValue()) {
-                        obj.accumulate(
-                                "sheetUrls",
-                                fileService
-                                        .getSheetUris(student.getExamId(), student.getExamNumber(), 1,
-                                                student.getSheetCount()).stream()
-                                        .map(uri -> fileService.getFileServer().concat(uri))
-                                        .collect(Collectors.toList()));
+                        obj.accumulate("sheetUrls", fileService
+                                .getSheetUris(student.getExamId(), student.getExamNumber(), 1, student.getSheetCount())
+                                .stream().map(uri -> fileService.getFileServer().concat(uri))
+                                .collect(Collectors.toList()));
                     }
                     array.add(obj);
                 } catch (Exception e) {
@@ -262,8 +263,9 @@ public class ExamStudentController extends BaseApiController {
             if (Strings.isNullOrEmpty(examSeqCode)) {
                 student = studentService.findBySchoolIdAndSubjectCodeAndStudentCode(schoolId, subjectCode, studentCode);
             } else {
-                student = studentService.findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(schoolId, subjectCode,
-                        studentCode, examSeqCode);
+                student = studentService
+                        .findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(schoolId, subjectCode, studentCode,
+                                examSeqCode);
             }
             if (student != null) {
                 DecimalFormat df = new DecimalFormat("####.###");