Przeglądaj źródła

修改机考上传试卷逻辑,客观题全量更新,主观题无分组更新

ting.yin 4 lat temu
rodzic
commit
ec4c03724a

+ 0 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ExamQuestionService.java

@@ -72,6 +72,4 @@ public interface ExamQuestionService {
 
 
     Set<String> FindSubjectCodeByExamIdAndObjectiveAndGroupNumberIsNull(int examId, boolean objective);
     Set<String> FindSubjectCodeByExamIdAndObjectiveAndGroupNumberIsNull(int examId, boolean objective);
 
 
-    void deleteByExamAndSubject(Integer examId, String subjectCode);
-
 }
 }

+ 0 - 6
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamQuestionServiceImpl.java

@@ -264,10 +264,4 @@ public class ExamQuestionServiceImpl extends BaseQueryService<ExamQuestion> impl
         return questionDao.FindSubjectCodeByExamIdAndObjectiveAndGroupNumberIsNull(examId, objective);
         return questionDao.FindSubjectCodeByExamIdAndObjectiveAndGroupNumberIsNull(examId, objective);
     }
     }
 
 
-    @Transactional
-    @Override
-    public void deleteByExamAndSubject(Integer examId, String subjectCode) {
-        questionDao.deleteByExamIdAndSubjectCodeAndObjective(examId, subjectCode, false);
-        questionDao.deleteByExamIdAndSubjectCodeAndObjective(examId, subjectCode, true);
-    }
 }
 }

+ 27 - 19
stmms-web/src/main/java/cn/com/qmth/stmms/admin/utils/PaperJsonUtils.java

@@ -1,7 +1,9 @@
 package cn.com.qmth.stmms.admin.utils;
 package cn.com.qmth.stmms.admin.utils;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 
 
 import net.sf.json.JSONArray;
 import net.sf.json.JSONArray;
 import net.sf.json.JSONObject;
 import net.sf.json.JSONObject;
@@ -19,10 +21,12 @@ public class PaperJsonUtils {
     public static final String[] answerArray = new String[] { "#", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
     public static final String[] answerArray = new String[] { "#", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
             "K", "L" };
             "K", "L" };
 
 
-    public static List<ExamQuestion> toSubject(ExamSubject subject, String text) {
+    public static Map<Boolean, List<ExamQuestion>> toSubject(ExamSubject subject, String text) {
         JSONObject paperJson = JSONObject.fromObject(text);
         JSONObject paperJson = JSONObject.fromObject(text);
         JSONArray questionArray = JSONArray.fromObject(paperJson.getString("details"));
         JSONArray questionArray = JSONArray.fromObject(paperJson.getString("details"));
-        List<ExamQuestion> list = new ArrayList<>();
+        Map<Boolean, List<ExamQuestion>> map = new HashMap<Boolean, List<ExamQuestion>>();
+        List<ExamQuestion> olist = new ArrayList<>();
+        List<ExamQuestion> slist = new ArrayList<>();
         for (int i = 0; i < questionArray.size(); i++) {
         for (int i = 0; i < questionArray.size(); i++) {
             JSONObject questionJson = questionArray.getJSONObject(i);
             JSONObject questionJson = questionArray.getJSONObject(i);
             int mainNumber = questionJson.getInt("number");
             int mainNumber = questionJson.getInt("number");
@@ -38,6 +42,13 @@ public class PaperJsonUtils {
                         q.setExamId(subject.getExamId());
                         q.setExamId(subject.getExamId());
                         q.setSubjectCode(subject.getCode());
                         q.setSubjectCode(subject.getCode());
                         q.setPaperType("#");
                         q.setPaperType("#");
+                        q.setMainNumber(mainNumber);
+                        String subNumber = sub.getString("number") + "-" + question.getString("number");
+                        q.setSubNumber(subNumber);
+                        q.setMainTitle(mainTitle);
+                        double score = question.getDouble("score");
+                        q.setTotalScore(score);
+                        q.setIntervalScore(0.5);
                         int structType = question.getInt("structType");
                         int structType = question.getInt("structType");
                         if (structType == 1 || structType == 2 || structType == 3) {
                         if (structType == 1 || structType == 2 || structType == 3) {
                             q.setObjective(true);
                             q.setObjective(true);
@@ -54,23 +65,24 @@ public class PaperJsonUtils {
                                 answer = answerArray[index];
                                 answer = answerArray[index];
                             }
                             }
                             q.setAnswer(answer);
                             q.setAnswer(answer);
+                            olist.add(q);
                         } else {
                         } else {
                             q.setObjective(false);
                             q.setObjective(false);
+                            slist.add(q);
                         }
                         }
-                        q.setMainNumber(mainNumber);
-                        String subNumber = sub.getString("number") + "-" + question.getString("number");
-                        q.setSubNumber(subNumber);
-                        q.setMainTitle(mainTitle);
-                        double score = question.getDouble("score");
-                        q.setTotalScore(score);
-                        q.setIntervalScore(0.5);
-                        list.add(q);
                     }
                     }
                 } else {
                 } else {
                     ExamQuestion q = new ExamQuestion();
                     ExamQuestion q = new ExamQuestion();
                     q.setExamId(subject.getExamId());
                     q.setExamId(subject.getExamId());
                     q.setSubjectCode(subject.getCode());
                     q.setSubjectCode(subject.getCode());
                     q.setPaperType("#");
                     q.setPaperType("#");
+                    q.setMainNumber(mainNumber);
+                    String subNumber = sub.getString("number");
+                    q.setSubNumber(subNumber);
+                    q.setMainTitle(mainTitle);
+                    double score = sub.getDouble("score");
+                    q.setTotalScore(score);
+                    q.setIntervalScore(0.5);
                     int structType = sub.getInt("structType");
                     int structType = sub.getInt("structType");
                     if (structType == 1 || structType == 2 || structType == 3) {
                     if (structType == 1 || structType == 2 || structType == 3) {
                         q.setObjective(true);
                         q.setObjective(true);
@@ -87,21 +99,17 @@ public class PaperJsonUtils {
                             answer = answerArray[index];
                             answer = answerArray[index];
                         }
                         }
                         q.setAnswer(answer);
                         q.setAnswer(answer);
+                        olist.add(q);
                     } else {
                     } else {
                         q.setObjective(false);
                         q.setObjective(false);
+                        slist.add(q);
                     }
                     }
-                    q.setMainNumber(mainNumber);
-                    String subNumber = sub.getString("number");
-                    q.setSubNumber(subNumber);
-                    q.setMainTitle(mainTitle);
-                    double score = sub.getDouble("score");
-                    q.setTotalScore(score);
-                    q.setIntervalScore(0.5);
-                    list.add(q);
                 }
                 }
             }
             }
         }
         }
-        return list;
+        map.put(Boolean.TRUE, olist);
+        map.put(Boolean.FALSE, slist);
+        return map;
     }
     }
 
 
 }
 }

+ 29 - 6
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/FileController.java

@@ -2,6 +2,7 @@ package cn.com.qmth.stmms.api.controller;
 
 
 import java.util.Arrays;
 import java.util.Arrays;
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
 
 
@@ -26,17 +27,20 @@ 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.ExamQuestion;
 import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
 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.ExamSubject;
+import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
 import cn.com.qmth.stmms.biz.exam.service.ExamPackageService;
 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.ExamQuestionService;
 import cn.com.qmth.stmms.biz.exam.service.ExamService;
 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.ExamStudentService;
 import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
 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.enums.FormatType;
 import cn.com.qmth.stmms.biz.file.enums.FormatType;
 import cn.com.qmth.stmms.biz.file.service.FileService;
 import cn.com.qmth.stmms.biz.file.service.FileService;
 import cn.com.qmth.stmms.common.annotation.RoleRequire;
 import cn.com.qmth.stmms.common.annotation.RoleRequire;
 import cn.com.qmth.stmms.common.domain.ApiUser;
 import cn.com.qmth.stmms.common.domain.ApiUser;
 import cn.com.qmth.stmms.common.enums.ExamStatus;
 import cn.com.qmth.stmms.common.enums.ExamStatus;
 import cn.com.qmth.stmms.common.enums.ExamType;
 import cn.com.qmth.stmms.common.enums.ExamType;
+import cn.com.qmth.stmms.common.enums.ObjectiveStatus;
 import cn.com.qmth.stmms.common.enums.Role;
 import cn.com.qmth.stmms.common.enums.Role;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
 
 
@@ -71,6 +75,9 @@ public class FileController extends BaseApiController {
     @Autowired
     @Autowired
     private ExamQuestionService questionService;
     private ExamQuestionService questionService;
 
 
+    @Autowired
+    private MarkGroupService groupService;
+
     private Exam validateExam(ApiUser au, Integer examId, ExamType... types) {
     private Exam validateExam(ApiUser au, Integer examId, ExamType... types) {
         Exam exam = examService.findById(examId);
         Exam exam = examService.findById(examId);
         if (exam == null || !exam.getSchoolId().equals(au.getSchoolId()) || exam.getStatus() != ExamStatus.START) {
         if (exam == null || !exam.getSchoolId().equals(au.getSchoolId()) || exam.getStatus() != ExamStatus.START) {
@@ -221,14 +228,30 @@ public class FileController extends BaseApiController {
         }
         }
         try {
         try {
             if (exam.getType() == ExamType.MULTI_MEDIA) {
             if (exam.getType() == ExamType.MULTI_MEDIA) {
-                questionService.deleteByExamAndSubject(examId, subjectCode);
-                String text = new String(ByteStreams.toByteArray(file.getInputStream()));
-                List<ExamQuestion> questionList = PaperJsonUtils.toSubject(subject, text);
-                questionService.save(questionList);
+                String text = new String(ByteStreams.toByteArray(file.getInputStream()), "UTF-8");
+                Map<Boolean, List<ExamQuestion>> map = PaperJsonUtils.toSubject(subject, text);
+                // 客观题全体更新
+                if (0 != questionService.countByExamIdAndSubjectAndObjectiveAndGroupNumberIsNull(examId, subjectCode,
+                        true)) {
+                    questionService.deleteByExamAndSubjectAndObjective(examId, subjectCode, true);
+                }
+                List<ExamQuestion> oList = map.get(Boolean.TRUE);
+                questionService.save(oList);
                 subjectService.updateScore(examId, subjectCode, true,
                 subjectService.updateScore(examId, subjectCode, true,
                         questionService.sumTotalScore(examId, subjectCode, true));
                         questionService.sumTotalScore(examId, subjectCode, true));
-                subjectService.updateScore(examId, subjectCode, false,
-                        questionService.sumTotalScore(examId, subjectCode, false));
+                examService.updateObjectiveStatus(examId, ObjectiveStatus.WAITING);
+                // 主观题有分组不更新
+                List<MarkGroup> groups = groupService.findByExamAndSubject(examId, subject.getCode());
+                if (groups == null || groups.size() == 0) {
+                    if (0 != questionService.countByExamIdAndSubjectAndObjectiveAndGroupNumberIsNull(examId,
+                            subjectCode, false)) {
+                        questionService.deleteByExamAndSubjectAndObjective(examId, subjectCode, false);
+                    }
+                    List<ExamQuestion> sList = map.get(Boolean.FALSE);
+                    questionService.save(sList);
+                    subjectService.updateScore(examId, subjectCode, false,
+                            questionService.sumTotalScore(examId, subjectCode, false));
+                }
             }
             }
             fileService.uploadPaper(file.getInputStream(), md5, examId, subjectCode, format);
             fileService.uploadPaper(file.getInputStream(), md5, examId, subjectCode, format);
             subject.setPaperFileType(format);
             subject.setPaperFileType(format);