Kaynağa Gözat

更新导入主观题结果和主观题分组,新增题目删除,多分组关闭

ting.yin 4 yıl önce
ebeveyn
işleme
4d383541c8

+ 9 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamQuestionDao.java

@@ -86,4 +86,13 @@ public interface ExamQuestionDao extends JpaRepository<ExamQuestion, Integer>, J
     public ExamQuestion findByExamIdAndSubjectCodeAndObjectiveAndMainNumberAndSubNumber(Integer examId,
             String subjectCode, boolean objective, Integer mainNumber, String subNumber);
 
+    @Query("select sum(q.totalScore) from ExamQuestion q where q.examId=?1 and q.subjectCode=?2 and q.objective=?3 ")
+    public Double sumTotalScore(int examId, String subjectCode, boolean objective);
+
+    @Modifying
+    @Query("update ExamQuestion q set q.groupNumber = null"
+            + " where q.examId=?1 and q.subjectCode=?2 and q.objective=?3 and q.groupNumber=?4")
+    public void resetByExamIdAndSubjectCodeAndObjectiveAndGroupNumber(Integer examId, String subjectCode,
+            boolean objective, Integer number);
+
 }

+ 16 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/Exam.java

@@ -22,6 +22,7 @@ import cn.com.qmth.stmms.biz.file.enums.FormatType;
 import cn.com.qmth.stmms.biz.mark.model.PictureConfigItem;
 import cn.com.qmth.stmms.common.enums.ExamStatus;
 import cn.com.qmth.stmms.common.enums.ExamType;
+import cn.com.qmth.stmms.common.enums.MarkMode;
 import cn.com.qmth.stmms.common.enums.ObjectiveStatus;
 
 @Entity
@@ -136,6 +137,13 @@ public class Exam implements Serializable {
     @Column(name = "mark_end_time")
     private Date endTime;
 
+    /**
+     * 强制评卷模式
+     */
+    @Column(name = "mark_mode", nullable = true, length = 16)
+    @Enumerated(EnumType.STRING)
+    private MarkMode markMode;
+
     public Integer getId() {
         return id;
     }
@@ -332,4 +340,12 @@ public class Exam implements Serializable {
         this.endTime = endTime;
     }
 
+    public MarkMode getMarkMode() {
+        return markMode;
+    }
+
+    public void setMarkMode(MarkMode markMode) {
+        this.markMode = markMode;
+    }
+
 }

+ 1 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/ExamQuestion.java

@@ -38,7 +38,7 @@ public class ExamQuestion implements Serializable {
     @Column(name = "main_title", nullable = false, length = 32)
     private String mainTitle;
 
-    @Column(name = "group_number", nullable = false)
+    @Column(name = "group_number", nullable = true)
     private Integer groupNumber;
 
     @Column(name = "answer", nullable = true, length = 16)

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

@@ -63,4 +63,8 @@ public interface ExamQuestionService {
 
     List<ExamQuestion> findMainByExamAndSubjectAndObjective(Integer examId, String subjectCode, boolean objective);
 
+    double sumTotalScore(int examId, String subjectCode, boolean objective);
+
+    void deleteById(Integer questionId);
+
 }

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

@@ -221,4 +221,15 @@ public class ExamQuestionServiceImpl extends BaseQueryService<ExamQuestion> impl
         return list;
     }
 
+    @Override
+    public double sumTotalScore(int examId, String subjectCode, boolean objective) {
+        Double score = questionDao.sumTotalScore(examId, subjectCode, objective);
+        return score != null ? score.doubleValue() : 0d;
+    }
+
+    @Override
+    public void deleteById(Integer questionId) {
+        questionDao.delete(questionId);
+    }
+
 }

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

@@ -214,7 +214,7 @@ public class MarkServiceImpl implements MarkService {
         markerDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
                 group.getNumber());
         // 小题数据
-        questionDao.deleteByExamIdAndSubjectCodeAndObjectiveAndGroupNumber(group.getExamId(), group.getSubjectCode(),
+        questionDao.resetByExamIdAndSubjectCodeAndObjectiveAndGroupNumber(group.getExamId(), group.getSubjectCode(),
                 false, group.getNumber());
         // 考生分组状态与得分明细
         groupStudentDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
@@ -224,9 +224,6 @@ public class MarkServiceImpl implements MarkService {
         // 删除分组
         releaseByGroup(group);
         groupDao.delete(group);
-        // 科目总分
-        subjectService.updateScore(group.getExamId(), group.getSubjectCode(), false,
-                sumTotalScore(group.getExamId(), group.getSubjectCode()));
         // 考生整体状态与总分更新
         long groupCount = groupDao.countByExamIdAndSubjectCode(group.getExamId(), group.getSubjectCode());
         if (groupCount == 0) {
@@ -1362,10 +1359,13 @@ public class MarkServiceImpl implements MarkService {
             if (group.getStatus() == MarkStatus.FINISH) {
                 return false;
             }
+        }
+        for (Integer groupNumber : map.keySet()) {
             List<MarkLibrary> list = libraryDao.findByStudentIdAndGroupNumber(student.getId(), groupNumber);
             List<ExamQuestion> questions = questionDao.findByExamIdAndSubjectCodeAndObjectiveAndGroupNumber(
                     student.getExamId(), student.getSubjectCode(), false, groupNumber);
             List<MarkStepDTO> qList = map.get(groupNumber);
+            MarkGroup group = groupDao.findOne(student.getExamId(), student.getSubjectCode(), groupNumber);
             int count = 0;
             for (MarkLibrary library : list) {
                 if (library.getTaskNumber() == 3) {

+ 10 - 4
stmms-web/src/main/java/cn/com/qmth/stmms/admin/dto/SubjectQuestionDTO.java

@@ -104,10 +104,6 @@ public class SubjectQuestionDTO {
                         error.add("[" + subjectCode + "] 有题号为空的记录");
                         return false;
                     }
-                    if (question.getGroupNumber() == null || question.getGroupNumber() < 0) {
-                        error.add("[" + subjectCode + "] 有评卷分组为空的记录");
-                        return false;
-                    }
                     if (question.getTotalScore() == null) {
                         error.add("[" + subjectCode + "] 有满分为空的记录");
                         return false;
@@ -239,4 +235,14 @@ public class SubjectQuestionDTO {
         }
         return null;
     }
+
+    public boolean validateGroupNumber(List<String> error) {
+        for (ExamQuestion question : list) {
+            if (question.getGroupNumber() == null || question.getGroupNumber() < 0) {
+                error.add("[" + subjectCode + "] 有评卷分组为空的记录");
+                return false;
+            }
+        }
+        return true;
+    }
 }

+ 6 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ExamController.java

@@ -42,6 +42,7 @@ import cn.com.qmth.stmms.common.domain.WebUser;
 import cn.com.qmth.stmms.common.enums.ExamStatus;
 import cn.com.qmth.stmms.common.enums.ExamType;
 import cn.com.qmth.stmms.common.enums.LogType;
+import cn.com.qmth.stmms.common.enums.MarkMode;
 import cn.com.qmth.stmms.common.enums.ObjectiveStatus;
 import cn.com.qmth.stmms.common.enums.Role;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
@@ -90,6 +91,7 @@ public class ExamController extends BaseExamController {
         model.addAttribute("exam", exam);
         model.addAttribute("statusList", ExamStatus.values());
         model.addAttribute("typeList", ExamType.values());
+        model.addAttribute("markModeList", MarkMode.values());
         return "modules/exam/examForm";
     }
 
@@ -102,6 +104,7 @@ public class ExamController extends BaseExamController {
         model.addAttribute("pictureConfig", buildPictureConfig(exam.getSheetConfig()));
         model.addAttribute("passScore", exam.getPassScore());
         model.addAttribute("excellentScore", exam.getExcellentScore());
+        model.addAttribute("markModeList", MarkMode.values());
         return "modules/exam/examEdit";
     }
 
@@ -157,6 +160,9 @@ public class ExamController extends BaseExamController {
                 List<PictureConfigItem> list = JSONArray.toList(array, new PictureConfigItem(), new JsonConfig());
                 oldExam.setSheetConfig(list == null ? null : StringUtils.join(list, PictureConfigItem.DB_ITEM_JOINER));
             }
+            oldExam.setStartTime(exam.getStartTime());
+            oldExam.setEndTime(exam.getEndTime());
+            oldExam.setMarkMode(exam.getMarkMode());
             examService.save(oldExam);
         }
         return "redirect:/admin/exam/list";

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

@@ -681,4 +681,28 @@ public class MarkGroupController extends BaseExamController {
         }
         return list;
     }
+
+    @Logging(menu = "大题关闭", type = LogType.QUERY)
+    @RequestMapping("/finish")
+    @RoleRequire(Role.SCHOOL_ADMIN)
+    public String finish(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
+            @RequestParam String subjectCode, @RequestParam Integer[] groupNumbers) {
+        int examId = getSessionExamId(request);
+        for (Integer number : groupNumbers) {
+            MarkGroup group = groupService.findOne(examId, subjectCode, number);
+            if (group == null) {
+                continue;
+            }
+            try {
+                lockService.waitlock(LockType.GROUP, group.getExamId(), group.getSubjectCode(), group.getNumber());
+                if (group.getStatus() == MarkStatus.FORMAL && group.getLeftCount() == 0) {
+                    groupService.updateStatus(examId, subjectCode, number, MarkStatus.FINISH, group.getStatus());
+                }
+            } finally {
+                lockService.unlock(LockType.GROUP, group.getExamId(), group.getSubjectCode(), group.getNumber());
+            }
+        }
+        redirectAttributes.addAttribute("subjectCode", subjectCode);
+        return "redirect:/admin/exam/group";
+    }
 }

+ 118 - 27
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/PaperController.java

@@ -222,37 +222,111 @@ public class PaperController extends BaseExamController {
                             }
                             subjectService.updateScore(examId, subject.getCode(), objective, dto.getTotalScore());
                         } else {
-                            for (MarkGroup group : dto.getGroups().values()) {
-                                MarkGroup old = groupService.findOne(examId, group.getSubjectCode(), group.getNumber());
-                                // 已存在的评卷分组跳过
-                                if (old == null && group.getImportQuestionList() != null) {
-                                    boolean validate = true;
-                                    for (ExamQuestion question : group.getImportQuestionList()) {
-                                        if (questionService.countByExamAndSubjectAndObjectiveAndMainNumberAndSubNumber(
-                                                question.getExamId(), question.getSubjectCode(),
-                                                question.isObjective(), question.getMainNumber(),
-                                                question.getSubNumber()) > 0) {
-                                            error.add("[" + group.getSubjectCode() + "_" + group.getNumber()
-                                                    + "] 有小题已存在");
-                                            validate = false;
-                                            break;
-                                        }
-                                    }
-                                    // 校验通过小题才保存
-                                    if (validate && !group.getImportQuestionList().isEmpty()) {
-                                        questionService.save(group.getImportQuestionList());
-                                    }
-                                    // 有题目的分组才保存
-                                    if (questionService.countByExamAndSubjectAndObjectiveAndGroupNumber(examId,
-                                            group.getSubjectCode(), objective, group.getNumber()) != 0) {
-                                        groupService.save(group);
-                                        studentService.updateSubjectiveStatusAndScoreAndInspectorId(examId,
-                                                group.getSubjectCode(), SubjectiveStatus.UNMARK, 0, null, null, null);
+                            int questionCount = 0;
+                            for (ExamQuestion question : dto.getQuestionList()) {
+                                ExamQuestion old = questionService
+                                        .findByExamAndSubjectAndObjectiveAndMainNumberAndSubNumber(examId,
+                                                subject.getCode(), objective, question.getMainNumber(),
+                                                question.getSubNumber());
+                                if (old != null) {
+                                    if (old.getGroupNumber() != null) {
+                                        error.add("[" + subject.getCode() + "] 大题号" + question.getMainNumber() + " 小题号"
+                                                + question.getSubNumber() + "已有分组");
+                                        continue;
                                     }
+                                    old.setTotalScore(question.getTotalScore());
+                                    old.setIntervalScore(question.getIntervalScore());
+                                    old.setMainTitle(question.getMainTitle());
+                                    questionService.save(old);
+                                } else {
+                                    question.setGroupNumber(null);
+                                    questionService.save(question);
+                                    questionCount++;
                                 }
                             }
+                            if (questionCount > 0) {
+                                studentService.updateSubjectiveStatusAndScoreAndInspectorId(examId, subject.getCode(),
+                                        SubjectiveStatus.UNMARK, 0, null, null, null);
+                            }
                             subjectService.updateScore(examId, subject.getCode(), objective,
-                                    groupService.sumTotalScore(examId, dto.getSubjectCode()));
+                                    questionService.sumTotalScore(examId, subject.getCode(), objective));
+                        }
+                        success++;
+                    }
+                } else {
+                    error.add("[" + dto.getSubjectCode() + "] 科目代码不存在;");
+                }
+            }
+            error.add(0, success + "个科目导入成功;");
+            if (success > 0) {
+                subjectService.updateTotalScore(examId);
+            }
+            RequestUtils.setLog(request, success + "个科目导入成功;");
+        }
+        if (error.size() > 0) {
+            error.add("<br\\> 导入完毕后请重新统分!");
+            addMessage(redirectAttributes, StringUtils.join(error, "<br\\>"));
+        }
+        return "redirect:/admin/exam/paper";
+    }
+
+    @Logging(menu = "导入主观题分组", type = LogType.IMPORT_FILE)
+    @RequestMapping(value = "/importGroup", method = RequestMethod.POST)
+    @RoleRequire(Role.SCHOOL_ADMIN)
+    public String importGroupFile(HttpServletRequest request, MultipartFile file, RedirectAttributes redirectAttributes) {
+        int examId = getSessionExamId(request);
+        List<String> error = new LinkedList<String>();
+        Map<String, SubjectQuestionDTO> map = parseQuestion(file, examId, false, error);
+        if (error.isEmpty()) {
+            int success = 0;
+            for (SubjectQuestionDTO dto : map.values()) {
+                // 每次导入都需要重新统分
+                examService.updateObjectiveStatus(examId, ObjectiveStatus.WAITING);
+                ExamSubject subject = subjectService.find(examId, dto.getSubjectCode());
+                if (subject != null) {
+                    // 验证是否存在分组
+                    List<MarkGroup> groups = groupService.findByExamAndSubject(examId, subject.getCode());
+                    if (groups != null && groups.size() > 0) {
+                        error.add("[" + subject.getCode() + "] 已存在分组");
+                        continue;
+                    }
+                    Map<Integer, String> titleMap = new HashMap<>();
+                    List<ExamQuestion> current = questionService.findByExamAndSubjectAndObjective(examId,
+                            subject.getCode(), false);
+                    for (ExamQuestion question : current) {
+                        titleMap.put(question.getMainNumber(), question.getMainTitle());
+                    }
+                    if (dto.validate(error, titleMap) && dto.validateGroupNumber(error)
+                            && dto.getQuestionList().size() == current.size()) {
+                        for (MarkGroup group : dto.getGroups().values()) {
+                            if (group.getImportQuestionList() != null) {
+                                boolean validate = true;
+                                List<ExamQuestion> questionGroup = new ArrayList<ExamQuestion>();
+                                for (ExamQuestion question : group.getImportQuestionList()) {
+                                    ExamQuestion old = questionService
+                                            .findByExamAndSubjectAndObjectiveAndMainNumberAndSubNumber(examId,
+                                                    subject.getCode(), false, question.getMainNumber(),
+                                                    question.getSubNumber());
+                                    if (old == null) {
+                                        error.add("[" + group.getSubjectCode() + "_" + group.getNumber() + "] 有小题不存在");
+                                        validate = false;
+                                        break;
+                                    }
+                                    old.setGroupNumber(group.getNumber());
+                                    questionGroup.add(old);
+                                }
+                                // 校验通过小题才保存
+                                if (validate && !questionGroup.isEmpty()) {
+                                    questionService.save(questionGroup);
+                                }
+                                // 有题目的分组才保存
+                                if (questionService.countByExamAndSubjectAndObjectiveAndGroupNumber(examId,
+                                        group.getSubjectCode(), false, group.getNumber()) != 0) {
+                                    groupService.save(group);
+                                    studentService.updateSubjectiveStatusAndScoreAndInspectorId(examId,
+                                            group.getSubjectCode(), SubjectiveStatus.UNMARK, 0, null, null, null);
+                                }
+                            }
                         }
                         success++;
                     }
@@ -331,6 +405,23 @@ public class PaperController extends BaseExamController {
         return "redirect:/admin/exam/paper/detail?subjectCode=" + question.getSubjectCode();
     }
 
+    @Logging(menu = "删除题目", type = LogType.DELETE)
+    @RequestMapping(value = "/question-delete/{questionId}", method = RequestMethod.POST)
+    @RoleRequire(Role.SCHOOL_ADMIN)
+    public String delete(HttpServletRequest request, @PathVariable Integer questionId) {
+        ExamQuestion question = questionService.findById(questionId);
+        int examId = getSessionExamId(request);
+        String subjectCode = question.getSubjectCode();
+        boolean objective = question.isObjective();
+        questionService.deleteById(questionId);
+        if (objective) {
+            examService.updateObjectiveStatus(examId, ObjectiveStatus.WAITING);
+        }
+        subjectService.updateScore(examId, subjectCode, objective,
+                questionService.sumTotalScore(examId, subjectCode, objective));
+        return "redirect:/admin/exam/paper/detail?subjectCode=" + subjectCode;
+    }
+
     @Logging(menu = "客观题统分", type = LogType.UPDATE)
     @RequestMapping("/calculate")
     @RoleRequire(Role.SCHOOL_ADMIN)

+ 6 - 2
stmms-web/src/main/java/cn/com/qmth/stmms/mark/MarkController.java

@@ -691,8 +691,12 @@ public class MarkController extends BaseController {
             mode = MarkMode.findByName(forceMarkMode);
             forceMode = true;
         } else {
-            // 没有全局配置,优先从大题配置取强制评卷模式
-            if (group != null && group.getMarkMode() != null) {
+            // 没有全局配置,优先从考试取强制评卷模式
+            if (exam != null && exam.getMarkMode() != null) {
+                mode = exam.getMarkMode();
+                forceMode = true;
+            } else if (group != null && group.getMarkMode() != null) {
+                // 没有全局配置,优先从大题配置取强制评卷模式
                 mode = group.getMarkMode();
                 forceMode = true;
             }

+ 12 - 0
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/examEdit.jsp

@@ -100,6 +100,18 @@
 			</div>
 	</div>
     <c:if test="${exam.type!='MULTI_MEDIA'}">
+    	<div class="control-group">
+	        <label class="control-label">评卷模式</label>
+	        <div class="controls">
+	            <select name="markMode">
+	                <option value="">不限</option>
+	                <c:forEach items="${markModeList}" var="item">
+	                    <option value="${item}"
+	                            <c:if test="${exam.markMode!=null && exam.markMode==item}">selected</c:if>>${item.name}</option>
+	                </c:forEach>
+	            </select>
+	        </div>
+    	</div>
         <div class="control-group">
             <label class="control-label">强制标记</label>
             <div class="controls">

+ 11 - 0
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/examForm.jsp

@@ -98,6 +98,17 @@
 					onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:true});"/>
 			</div>
 	</div>
+	<div class="control-group">
+        <label class="control-label">评卷模式</label>
+        <div class="controls">
+            <select name="markMode">
+                <option value="">不限</option>
+                <c:forEach items="${markModeList}" var="item">
+                    <option value="${item}">${item.name}</option>
+                </c:forEach>
+            </select>
+        </div>
+    </div>
     <div id="forceSpecialTagDiv">
         <div class="control-group">
             <label class="control-label">强制标记</label>

+ 11 - 11
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/groupAdd.jsp

@@ -82,18 +82,18 @@
             <label>0表示跳过试评</label>
         </div>
     </div>
-    <div class="control-group">
-        <label class="control-label">评卷模式</label>
-        <div class="controls">
-            <select name="markMode">
-                <option value="">不限</option>
-                <c:forEach items="${markModeList}" var="item">
-                    <option value="${item}">${item.name}</option>
-                </c:forEach>
-            </select>
-        </div>
-    </div>
     <c:if test="${examType!='MULTI_MEDIA'}">
+	    <div class="control-group">
+	        <label class="control-label">评卷模式</label>
+	        <div class="controls">
+	            <select name="markMode">
+	                <option value="">不限</option>
+	                <c:forEach items="${markModeList}" var="item">
+	                    <option value="${item}">${item.name}</option>
+	                </c:forEach>
+	            </select>
+	        </div>
+	    </div>
         <div class="control-group">
             <label class="control-label">图片显示</label>
             <div class="controls">

+ 27 - 2
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/groupList.jsp

@@ -38,14 +38,18 @@
             </c:if>
             &nbsp;
             <a href="${ctx}/admin/exam/group/check-count?subjectCode=${subject.code}" class="btn">数量校对</a>
+            &nbsp;
+            <input id="btnFinish" class="btn" type="button" value="关闭" onclick="goFinish()"/>
         </c:if>
     </div>
 </form>
 <tags:message content="${message}"/>
+<form id="groupForm" action="${ctx}/admin/exam/group/finish" method="post" class="breadcrumb form-search">
+	<input type="hidden" name="subjectCode" value="${subject.code }"/>
 <table id="contentTable" class="table table-striped table-bordered table-condensed">
     <thead>
     <tr>
-        <th>分组序号</th>
+        <th><input type="checkbox" id="groupNumbers">分组序号</th>
         <th>大题号</th>
         <th>大题名称</th>
         <th>步骤分</th>
@@ -63,7 +67,7 @@
     <tbody>
     <c:forEach items="${resultList}" var="result">
         <tr>
-            <td>${result.number}</td>
+            <td><input type="checkbox" class="groupNumbers" name="groupNumbers" value="${result.number}">${result.number}</td>
             <td>${result.mainNumber}</td>
             <td>${result.title}</td>
             <td>${result.scoreList}</td>
@@ -124,6 +128,7 @@
     </c:forEach>
     </tbody>
 </table>
+</form>
 <script type="text/javascript">
     function page(n, s) {
         $("#pageNumber").val(n);
@@ -145,6 +150,26 @@
     $('#statusButton').click(function () {
         return confirm('确定开始正评吗?');
     });
+    $("#groupNumbers").change(function () {
+        if ($("#groupNumbers").is(':checked')) {
+            $(".groupNumbers").attr("checked", true);
+        } else {
+        	$(".groupNumbers").attr("checked", false);
+        }
+    });
+    
+    function goFinish() {
+    	var check_list = []
+    	$("input[name='groupNumbers']:checked").each(function(){
+    		check_list.push($(this).val())
+    	})
+        if(check_list.length==0) {
+            alert('请选择分组');
+            return false;
+        }
+        $("#groupForm").submit();
+        return false;
+    }
 </script>
 </body>
 </html>

+ 4 - 0
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/paperDetail.jsp

@@ -37,6 +37,7 @@
 				<th>间隔分</th>
 				<th>答案</th>
 				<th>判分策略</th>
+				<th>分组</th>
 				<th>操作</th>
 			</tr>
 		</thead>
@@ -56,8 +57,11 @@
 					${question.objectivePolicy.name}
 					</c:if>
 				</td>
+				<td><c:if test="${!question.objective}">${question.groupNumber}</c:if>
+				</td>
 				<td>
 					<c:if test="${question.objective}"><a href="${ctx}/admin/exam/paper/question-edit/${question.id}">编辑</a></c:if>
+					<c:if test="${question.groupNumber==null ||question.groupNumber==0}"><a href="${ctx}/admin/exam/paper/question-delete/${question.id}">删除</a></c:if>
 				</td>
 			</tr>
 		</c:forEach>

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

@@ -29,6 +29,15 @@
         <a href="${ctx}/admin/exam/paper/template?objective=false">下载模板</a>
     </form>
 </div>
+<div id="groupImportBox" class="hide">
+    <form id="subImportForm" action="${ctx}/admin/exam/paper/importGroup" method="post" enctype="multipart/form-data"
+          style="padding-left:20px;text-align:center;" class="form-search" onsubmit="loading('正在导入,请稍等...');"><br/>
+        <input name="objective" type="hidden" value="false"/>
+        <input name="file" type="file" style="width:330px"/><br/><br/>  
+        <input class="btn btn-primary" type="submit" value="导入" onclick="goGroupImport()"/>
+        <a href="${ctx}/admin/exam/paper/template?objective=false">下载模板</a>
+    </form>
+</div>
 <%-- <%@include file="/WEB-INF/views/include/examInfoNavTabs.jsp" %> --%>
 <form id="searchForm" action="${ctx}/admin/exam/paper" method="post" class="breadcrumb form-search">
     <input type="hidden" id="pageNumber" name="pageNumber" value="${query.pageNumber }"/>
@@ -76,7 +85,8 @@
                 </a>
                 <ul class="dropdown-menu">
                     <li><a href="##" id="obj-import">客观题</a></li>
-                    <li><a href="##" id="sub-import">主观题</a></li>
+                    <li><a href="##" id="sub-import">主观题结构</a></li>
+                    <li><a href="##" id="group-import">主观题分组</a></li>
                 </ul>
             </div>
         </c:if>
@@ -186,11 +196,16 @@
     });
     $("#sub-import").click(function () {
         $.jBox($("#subImportBox").html(), {
-            title: "导入主观题", buttons: {"关闭": true},
+            title: "导入主观题结构", buttons: {"关闭": true},
+            bottomText: "导入文件不能超过5M,仅允许导入“xls”或“xlsx”格式文件!"
+        });
+    });
+    $("#group-import").click(function () {
+        $.jBox($("#groupImportBox").html(), {
+            title: "导入主观题分组", buttons: {"关闭": true},
             bottomText: "导入文件不能超过5M,仅允许导入“xls”或“xlsx”格式文件!"
         });
     });
-
     function goObjImport() {
         alert("导入后请务必重新统分");
     };