Przeglądaj źródła

主观题分数增加大题分;复核改为查询大题分;修复删除和新增大题学生复核状态问题;修复问题卷下拉科目问题;更新sql

ting.yin 4 lat temu
rodzic
commit
634c9211b2

+ 15 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/SubjectiveScore.java

@@ -42,6 +42,12 @@ public class SubjectiveScore implements Serializable {
     @Column(name = "group_score", nullable = false)
     private Double groupScore;
 
+    /**
+     * 大题总分
+     */
+    @Column(name = "main_score", nullable = false)
+    private Double mainScore;
+
     /**
      * 小题得分
      */
@@ -115,4 +121,13 @@ public class SubjectiveScore implements Serializable {
     public void setScore(Double score) {
         this.score = score;
     }
+
+    public Double getMainScore() {
+        return mainScore;
+    }
+
+    public void setMainScore(Double mainScore) {
+        this.mainScore = mainScore;
+    }
+
 }

+ 42 - 22
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/query/SubjectiveScoreSearchQuery.java

@@ -12,11 +12,15 @@ public class SubjectiveScoreSearchQuery extends BaseQuery<SubjectiveScore> {
 
     private String subjectCode;
 
-    private Integer groupNumber;
+    // private Integer groupNumber;
+    //
+    // private Double groupStartScore;
+    //
+    // private Double groupEndScore;
 
-    private Double groupStartScore;
+    private Double mainStartScore;
 
-    private Double groupEndScore;
+    private Double mainEndScore;
 
     private Double score;
 
@@ -40,36 +44,52 @@ public class SubjectiveScoreSearchQuery extends BaseQuery<SubjectiveScore> {
         this.subjectCode = subjectCode;
     }
 
-    public Integer getGroupNumber() {
-        return groupNumber;
-    }
-
-    public void setGroupNumber(Integer groupNumber) {
-        this.groupNumber = groupNumber;
-    }
+    // public Integer getGroupNumber() {
+    // return groupNumber;
+    // }
+    //
+    // public void setGroupNumber(Integer groupNumber) {
+    // this.groupNumber = groupNumber;
+    // }
+    //
+    // public Double getGroupStartScore() {
+    // return groupStartScore;
+    // }
+    //
+    // public void setGroupStartScore(Double groupStartScore) {
+    // this.groupStartScore = groupStartScore;
+    // }
+    //
+    // public Double getGroupEndScore() {
+    // return groupEndScore;
+    // }
+    //
+    // public void setGroupEndScore(Double groupEndScore) {
+    // this.groupEndScore = groupEndScore;
+    // }
 
-    public Double getGroupStartScore() {
-        return groupStartScore;
+    public Double getScore() {
+        return score;
     }
 
-    public void setGroupStartScore(Double groupStartScore) {
-        this.groupStartScore = groupStartScore;
+    public void setScore(Double score) {
+        this.score = score;
     }
 
-    public Double getGroupEndScore() {
-        return groupEndScore;
+    public Double getMainStartScore() {
+        return mainStartScore;
     }
 
-    public void setGroupEndScore(Double groupEndScore) {
-        this.groupEndScore = groupEndScore;
+    public void setMainStartScore(Double mainStartScore) {
+        this.mainStartScore = mainStartScore;
     }
 
-    public Double getScore() {
-        return score;
+    public Double getMainEndScore() {
+        return mainEndScore;
     }
 
-    public void setScore(Double score) {
-        this.score = score;
+    public void setMainEndScore(Double mainEndScore) {
+        this.mainEndScore = mainEndScore;
     }
 
 }

+ 30 - 19
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/SubjectiveScoreServiceImpl.java

@@ -17,12 +17,10 @@ import org.springframework.stereotype.Service;
 
 import cn.com.qmth.stmms.biz.common.BaseQueryService;
 import cn.com.qmth.stmms.biz.exam.dao.SubjectiveScoreDao;
-import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
 import cn.com.qmth.stmms.biz.exam.model.SubjectiveScore;
 import cn.com.qmth.stmms.biz.exam.query.SubjectiveScoreSearchQuery;
 import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
 import cn.com.qmth.stmms.biz.exam.service.SubjectiveScoreService;
-import cn.com.qmth.stmms.common.enums.MarkStatus;
 
 @Service
 public class SubjectiveScoreServiceImpl extends BaseQueryService<SubjectiveScore> implements SubjectiveScoreService {
@@ -56,25 +54,38 @@ public class SubjectiveScoreServiceImpl extends BaseQueryService<SubjectiveScore
                 if (StringUtils.isNotBlank(query.getSubjectCode())) {
                     predicates.add(cb.equal(root.get("subjectCode"), query.getSubjectCode()));
                 }
-                if (query.getGroupNumber() != null) {
-                    predicates.add(cb.equal(root.get("groupNumber"), query.getGroupNumber()));
-                } else {
-                    List<MarkGroup> groups = groupService.findByExamAndSubjectAndStatus(query.getExamId(),
-                            query.getSubjectCode(), MarkStatus.FORMAL);
-                    List<Integer> list = new ArrayList<Integer>();
-                    for (MarkGroup markGroup : groups) {
-                        list.add(markGroup.getNumber());
-                    }
-                    predicates.add(root.get("groupNumber").in(list));
-                }
-                if (query.getGroupStartScore() != null) {
-                    Predicate predicate = cb.greaterThan(root.get("groupScore").as(Double.class),
-                            query.getGroupStartScore());
+                // if (query.getGroupNumber() != null) {
+                // predicates.add(cb.equal(root.get("groupNumber"),
+                // query.getGroupNumber()));
+                // } else {
+                // List<MarkGroup> groups =
+                // groupService.findByExamAndSubjectAndStatus(query.getExamId(),
+                // query.getSubjectCode(), MarkStatus.FORMAL);
+                // List<Integer> list = new ArrayList<Integer>();
+                // for (MarkGroup markGroup : groups) {
+                // list.add(markGroup.getNumber());
+                // }
+                // predicates.add(root.get("groupNumber").in(list));
+                // }
+                // if (query.getGroupStartScore() != null) {
+                // Predicate predicate =
+                // cb.greaterThan(root.get("groupScore").as(Double.class),
+                // query.getGroupStartScore());
+                // predicates.add(predicate);
+                // }
+                // if (query.getGroupEndScore() != null) {
+                // Predicate predicate = cb
+                // .lessThan(root.get("groupScore").as(Double.class),
+                // query.getGroupEndScore());
+                // predicates.add(predicate);
+                // }
+                if (query.getMainStartScore() != null) {
+                    Predicate predicate = cb.greaterThan(root.get("mainScore").as(Double.class),
+                            query.getMainStartScore());
                     predicates.add(predicate);
                 }
-                if (query.getGroupEndScore() != null) {
-                    Predicate predicate = cb
-                            .lessThan(root.get("groupScore").as(Double.class), query.getGroupEndScore());
+                if (query.getMainEndScore() != null) {
+                    Predicate predicate = cb.lessThan(root.get("mainScore").as(Double.class), query.getMainEndScore());
                     predicates.add(predicate);
                 }
                 if (query.getScore() != null) {

+ 4 - 4
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/dao/ProblemHistoryDao.java

@@ -12,8 +12,8 @@ import java.util.Date;
 import java.util.List;
 import java.util.Set;
 
-public interface ProblemHistoryDao
-        extends JpaRepository<ProblemHistory, Integer>, JpaSpecificationExecutor<ProblemHistory> {
+public interface ProblemHistoryDao extends JpaRepository<ProblemHistory, Integer>,
+        JpaSpecificationExecutor<ProblemHistory> {
 
     List<ProblemHistory> findByExamIdAndSubjectCode(Integer examId, String subjectCode, Pageable page);
 
@@ -30,8 +30,8 @@ public interface ProblemHistoryDao
     @Query("select count(s) from ProblemHistory s where s.examId=?1 and s.problemId=?2 ")
     long countByExamIdAndProblemId(Integer examId, Integer problemId);
 
-    @Query("select distinct l.subjectCode from ProblemHistory l where l.examId=?1 ")
-    List<String> findProblemSubjectCode(Integer examId);
+    @Query("select distinct l.subjectCode from ProblemHistory l where l.examId=?1 and l.status=?2")
+    List<String> findProblemSubjectCodeAndHistoryStatus(Integer examId, HistoryStatus status);
 
     @Modifying
     @Query("delete from ProblemHistory s where s.studentId in (select m.studentId from MarkLibrary m where m.markerId=?1 ) ")

+ 31 - 4
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/MarkServiceImpl.java

@@ -12,6 +12,7 @@ import cn.com.qmth.stmms.biz.utils.FormalTaskUtil;
 import cn.com.qmth.stmms.biz.utils.ScoreItem;
 import cn.com.qmth.stmms.biz.utils.TrialTaskUtil;
 import cn.com.qmth.stmms.common.enums.*;
+
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -22,6 +23,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
@@ -224,10 +226,15 @@ public class MarkServiceImpl implements MarkService {
                 sumTotalScore(group.getExamId(), group.getSubjectCode()));
         // 考生整体状态与总分更新
         long groupCount = groupDao.countByExamIdAndSubjectCode(group.getExamId(), group.getSubjectCode());
-        List<Integer> studentList = studentService.findIdByExamIdAndSubjectCodeAndSubjectiveStatus(group.getExamId(),
-                group.getSubjectCode(), SubjectiveStatus.UNMARK, SubjectiveStatus.MARKED, SubjectiveStatus.INSPECTED);
-        for (Integer studentId : studentList) {
-            checkStudentSubjective(studentId, groupCount);
+        if (groupCount == 0) {
+            studentService.resetSubjectiveStatusByGroupStatus(group.getExamId(), group.getSubjectCode());
+        } else {
+            List<Integer> studentList = studentService.findIdByExamIdAndSubjectCodeAndSubjectiveStatus(
+                    group.getExamId(), group.getSubjectCode(), SubjectiveStatus.UNMARK, SubjectiveStatus.MARKED,
+                    SubjectiveStatus.INSPECTED);
+            for (Integer studentId : studentList) {
+                checkStudentSubjective(studentId, groupCount);
+            }
         }
     }
 
@@ -784,12 +791,31 @@ public class MarkServiceImpl implements MarkService {
 
     private void scoreCalculate(Integer studentId) {
         List<ScoreItem> scoreList = new ArrayList<>();
+        Map<Integer, List<SubjectiveScore>> map = new HashMap<Integer, List<SubjectiveScore>>();
         double totalScore = 0.0;
         // 循环所有主观得分明细
         List<SubjectiveScore> list = scoreDao.findByStudentId(studentId);
         for (SubjectiveScore ss : list) {
             totalScore += ss.getScore();
             scoreList.add(new ScoreItem(ss));
+            List<SubjectiveScore> mainScoreList = map.get(ss.getMainNumber());
+            if (mainScoreList == null) {
+                mainScoreList = new ArrayList<SubjectiveScore>();
+            }
+            mainScoreList.add(ss);
+            map.put(ss.getMainNumber(), mainScoreList);
+        }
+        // 计算大题分
+        for (Integer mainNumber : map.keySet()) {
+            List<SubjectiveScore> mainScoreList = map.get(mainNumber);
+            double mainScore = 0.0;
+            for (SubjectiveScore subjectiveScore : mainScoreList) {
+                mainScore += subjectiveScore.getScore();
+            }
+            for (SubjectiveScore subjectiveScore : mainScoreList) {
+                subjectiveScore.setMainScore(mainScore);
+            }
+            scoreDao.save(mainScoreList);
         }
         // 全部评完,更新考生主观题得分
         studentService.updateSubjectiveStatusAndScore(studentId, SubjectiveStatus.MARKED, totalScore,
@@ -1258,6 +1284,7 @@ public class MarkServiceImpl implements MarkService {
             ss.setSubjectCode(subjectCode);
             ss.setGroupNumber(groupNumber);
             ss.setGroupScore(score);
+            ss.setMainScore(0.0);
             ss.setMainNumber(question.getMainNumber());
             ss.setSubNumber(question.getSubNumber());
             ss.setScore(item.getScore());

+ 1 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/ProblemHistoryServiceImpl.java

@@ -39,7 +39,7 @@ public class ProblemHistoryServiceImpl extends BaseQueryService<ProblemHistory>
 
     @Override
     public List<String> findProblemSubjectCode(Integer examId) {
-        return historyDao.findProblemSubjectCode(examId);
+        return historyDao.findProblemSubjectCodeAndHistoryStatus(examId, HistoryStatus.WAITING);
     }
 
     @Override

+ 12 - 16
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/InspectedController.java

@@ -90,9 +90,8 @@ public class InspectedController extends BaseExamController {
     @RequestMapping
     public String list(Model model, HttpServletRequest request, ExamStudentSearchQuery query,
             @RequestParam(required = false) SubjectiveStatus status,
-            @RequestParam(required = false) Integer groupNumber,
-            @RequestParam(required = false) Double groupStartScore,
-            @RequestParam(required = false) Double groupEndScore, @RequestParam(required = false) Double questionScore) {
+            @RequestParam(required = false) Double mainStartScore, @RequestParam(required = false) Double mainEndScore,
+            @RequestParam(required = false) Double questionScore) {
         int examId = getSessionExamId(request);
         WebUser wu = RequestUtils.getWebUser(request);
         query.setExamId(examId);
@@ -109,13 +108,12 @@ public class InspectedController extends BaseExamController {
             query.addStatus(SubjectiveStatus.INSPECTED);
             query.addStatus(SubjectiveStatus.MARKED);
         }
-        if (groupNumber != null || groupStartScore != null || groupEndScore != null || questionScore != null) {
+        if (mainStartScore != null || mainEndScore != null || questionScore != null) {
             SubjectiveScoreSearchQuery query2 = new SubjectiveScoreSearchQuery();
             query2.setExamId(examId);
             query2.setSubjectCode(query.getSubjectCode());
-            query2.setGroupNumber(groupNumber);
-            query2.setGroupStartScore(groupStartScore);
-            query2.setGroupEndScore(groupEndScore);
+            query2.setMainStartScore(mainStartScore);
+            query2.setMainEndScore(mainEndScore);
             query2.setScore(questionScore);
             query2.setPageSize(Integer.MAX_VALUE);
             List<Integer> studentIds = scoreService.findStudentIdByQuery(query2);
@@ -136,9 +134,8 @@ public class InspectedController extends BaseExamController {
         model.addAttribute("query", query);
         model.addAttribute("inspectCount", inspectCount);
         model.addAttribute("groupList", groupList);
-        model.addAttribute("groupNumber", groupNumber);
-        model.addAttribute("groupStartScore", groupStartScore);
-        model.addAttribute("groupEndScore", groupEndScore);
+        model.addAttribute("mainStartScore", mainStartScore);
+        model.addAttribute("mainEndScore", mainEndScore);
         model.addAttribute("questionScore", questionScore);
         model.addAttribute("subjectList", subjectList);
         model.addAttribute("statusList", SubjectiveStatus.getOptionList());
@@ -151,8 +148,8 @@ public class InspectedController extends BaseExamController {
     @ResponseBody
     public ModelAndView start(HttpServletRequest request, RedirectAttributes redirectAttributes,
             ExamStudentSearchQuery query, @RequestParam(required = false) Integer groupNumber,
-            @RequestParam(required = false) Double groupStartScore,
-            @RequestParam(required = false) Double groupEndScore, @RequestParam(required = false) Double questionScore) {
+            @RequestParam(required = false) Double mainStartScore, @RequestParam(required = false) Double mainEndScore,
+            @RequestParam(required = false) Double questionScore) {
         int examId = getSessionExamId(request);
         WebUser wu = RequestUtils.getWebUser(request);
         releaseByUser(wu.getUser().getId());
@@ -167,13 +164,12 @@ public class InspectedController extends BaseExamController {
         if (query.getSubjectCode() == null && !subjectList.isEmpty()) {
             query.setSubjectCode(subjectList.get(0).getCode());
         }
-        if (groupNumber != null || groupStartScore != null || groupEndScore != null || questionScore != null) {
+        if (mainStartScore != null || mainEndScore != null || questionScore != null) {
             SubjectiveScoreSearchQuery query2 = new SubjectiveScoreSearchQuery();
             query2.setExamId(examId);
             query2.setSubjectCode(query.getSubjectCode());
-            query2.setGroupNumber(groupNumber);
-            query2.setGroupStartScore(groupStartScore);
-            query2.setGroupEndScore(groupEndScore);
+            query2.setMainStartScore(mainStartScore);
+            query2.setMainEndScore(mainEndScore);
             query2.setScore(questionScore);
             query2.setPageSize(Integer.MAX_VALUE);
             List<Integer> studentIds = scoreService.findStudentIdByQuery(query2);

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

@@ -571,6 +571,7 @@ public class MarkGroupController extends BaseExamController {
                     groupService.save(group);
                     subjectService.updateScore(examId, subjectCode, false,
                             groupService.sumTotalScore(examId, subjectCode));
+                    studentService.resetSubjectiveStatusByGroupStatus(examId, subjectCode);
                     redirectAttributes.addAttribute("subjectCode", subjectCode);
                     return "redirect:/admin/exam/group";
                 } else {

+ 2 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/PaperController.java

@@ -236,6 +236,8 @@ public class PaperController extends BaseExamController {
                                     if (questionService.countByExamAndSubjectAndObjectiveAndGroupNumber(examId,
                                             group.getSubjectCode(), objective, group.getNumber()) != 0) {
                                         groupService.save(group);
+                                        studentService.resetSubjectiveStatusByGroupStatus(examId,
+                                                group.getSubjectCode());
                                     }
                                 }
                             }

+ 4 - 6
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ProblemHistoryController.java

@@ -114,14 +114,12 @@ public class ProblemHistoryController extends BaseExamController {
     private List<ExamSubject> getProblemSubject(int examId, WebUser wu) {
         List<ExamSubject> list = new LinkedList<ExamSubject>();
         List<String> codes = historyService.findProblemSubjectCode(examId);
-        for (String code : codes) {
-            ExamSubject subject = subjectService.find(examId, code);
-            if (subject != null) {
-                list.add(subject);
+        List<ExamSubject> subjects = getExamSubject(examId, wu);
+        for (ExamSubject examSubject : subjects) {
+            if (codes.contains(examSubject.getCode())) {
+                list.add(examSubject);
             }
         }
-        List<ExamSubject> subjects = getExamSubject(examId, wu);
-        list.retainAll(subjects);
         return list;
     }
 

+ 4 - 2
stmms-web/src/main/java/cn/com/qmth/stmms/report/ReportController.java

@@ -86,10 +86,12 @@ public class ReportController {
 
     public static final String ANSWER_SPLIT = ",";
 
+    private static final String NULL_PAPER_TYPE_PLACEHOLDER = "#";
+
     @RequestMapping(value = "/teachAndResearch/{examId}/{subjectCode}", method = RequestMethod.GET)
     public String getSubject(Model model, HttpServletRequest request, @PathVariable Integer examId,
             @PathVariable String subjectCode) {
-        JSONObject result = getJson(examId, subjectCode, null, true);
+        JSONObject result = getJson(examId, subjectCode, NULL_PAPER_TYPE_PLACEHOLDER, true);
         model.addAttribute("data", result);
         return "modules/report/pdf";
     }
@@ -105,7 +107,7 @@ public class ReportController {
     @RequestMapping(value = "/teachAndResearch/simple/{examId}/{subjectCode}", method = RequestMethod.GET)
     public String getSubjectSimple(Model model, HttpServletRequest request, @PathVariable Integer examId,
             @PathVariable String subjectCode) {
-        JSONObject result = getJson(examId, subjectCode, null, false);
+        JSONObject result = getJson(examId, subjectCode, NULL_PAPER_TYPE_PLACEHOLDER, false);
         model.addAttribute("data", result);
         return "modules/report/pdf";
     }

+ 3 - 31
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/inspectedList.jsp

@@ -22,13 +22,6 @@
                 <option value="${subject.code}" <c:if test="${subject.code==query.subjectCode}">selected</c:if>>${subject.code}-${subject.name}</option>
             </c:forEach>
         </select>
-        <label>分组</label>
-        <select class="input-medium" id="group-select" name="groupNumber">
-            <option value="">请选择</option>
-            <c:forEach items="${groupList}" var="item">
-                <option value="${item.number}" <c:if test="${item.number==groupNumber}">selected</c:if>>${item.number}-${item.title}</option>
-            </c:forEach>
-        </select>
         &nbsp;
         <label>状态</label>
         <select class="input-medium" name="status">
@@ -44,9 +37,9 @@
         <input type="text" number="true" id="endScroe" name="endScore" value="${query.endScore}" class="input-mini"/>
         &nbsp;
         <label>大题得分:从</label>
-        <input type="text" number="true" name="groupStartScore" id="groupStartScore" value="${groupStartScore }" class="input-mini"/>
+        <input type="text" number="true" name="mainStartScore" id="mainStartScore" value="${mainStartScore }" class="input-mini"/>
         <label> 到&nbsp;&nbsp;&nbsp;</label>
-        <input type="text" number="true" id="groupEndScroe" name="groupEndScore" value="${groupEndScore }" class="input-mini"/>
+        <input type="text" number="true" id="mainEndScroe" name="mainEndScroe" value="${mainEndScroe }" class="input-mini"/>
         &nbsp;
         
         <label>小题得分</label>
@@ -124,28 +117,7 @@
             initTrackPopover($(this).attr('data-title'), $(this).attr('data-image-url'));
             return false;
         });
-        $('#subject-select').change(function () {
-            var code = $(this).val();
-            $('#group-select').empty();
-            $("<option value=''>请选择</option>").appendTo('#group-select');
-            if (code == '') {
-                $('#group-select').val('').trigger('change');
-                return;
-            }
-
-            $.post('${ctx}/admin/exam/group/query', {subjectCode: code, status: 'FORMAL'}, function (result) {
-                var parent = $('#group-select');
-                var first = '';
-                for (var i = 0; i < result.length; i++) {
-                    var group = result[i];
-                    $('<option value="' + group.number + '">' + group.number + '-' + group.title + '</option>').appendTo(parent);
-                    if (i == 0) {
-                        first = group.number;
-                    }
-                }
-                parent.val(first).trigger('change');
-            });
-        });
+       
     });
 
     function page(n, s) {

+ 1 - 1
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/problemHistory.jsp

@@ -86,7 +86,7 @@
                     <a class="json-link" href="${ctx}/admin/exam/library/getJson?studentId=${result.id}&groupNumber=${result.number}" target="_blank">原图</a>
                 </c:if>
                 <c:if test="${examType!='MULTI_MEDIA'}">
-                    <a class="track-link" href="#" data-image-url="${ctx}/admin/exam/track/byLibrary?libraryId=${result.libraryId}" data-title="${result.secretNumber}">阅卷轨迹</a>
+                    <a class="track-link" href="#" data-image-url="${ctx}/admin/exam/track/byLibrary?libraryId=${result.libraryId}" data-title="${result.secretNumber}">试卷详情</a>
                 </c:if>
                 &nbsp;
                 <a href="##" data-id="${result.libraryId}" class="back-link">打回</a>

+ 1 - 0
stmms-web/src/main/webapp/sql/stmms_ft.sql

@@ -385,6 +385,7 @@ CREATE TABLE `eb_subjective_score`
     `subject_code` varchar(32) NOT NULL COMMENT '科目代码',
     `group_number` int(11)     NOT NULL COMMENT '分组序号',
     `group_score`  double      NOT NULL COMMENT '分组得分',
+    `main_score`   double      NOT NULL COMMENT '大题得分',
     `score`        double      NOT NULL COMMENT '小题得分',
     PRIMARY KEY (`student_id`, `main_number`, `sub_number`),
     KEY `index1` (`exam_id`, `subject_code`, `group_number`)