ting.yin 3 年之前
父節點
當前提交
4949846a68

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

@@ -94,6 +94,9 @@ public class ExamQuestion implements Serializable {
     @Transient
     private boolean selective;
 
+    @Transient
+    private boolean enableUpdate;
+
     public Integer getId() {
         return id;
     }
@@ -308,4 +311,12 @@ public class ExamQuestion implements Serializable {
         this.type = type;
     }
 
+    public boolean isEnableUpdate() {
+        return enableUpdate;
+    }
+
+    public void setEnableUpdate(boolean enableUpdate) {
+        this.enableUpdate = enableUpdate;
+    }
+
 }

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

@@ -346,7 +346,7 @@ public class ArbitrateController extends BaseExamController {
                 lockService.unwatch(LockType.EXAM_SUBJECT, history.getExamId(), history.getSubjectCode());
             }
         } else {
-            result.accumulate("message", "任务不存在或没有权限");
+            result.accumulate("message", "任务不存在或没有权限");
             result.accumulate("success", false);
         }
         return result;

+ 71 - 9
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/PaperController.java

@@ -177,12 +177,24 @@ public class PaperController extends BaseExamController {
                 list.addAll(objectiveList);
             }
             if (objective == null || !objective) {
+                List<MarkGroup> groups = groupService.findByExamAndSubject(examId, subjectCode);
+                Map<Integer, MarkGroup> maps = new HashMap<Integer, MarkGroup>();
+                for (MarkGroup markGroup : groups) {
+                    maps.put(markGroup.getNumber(), markGroup);
+                }
                 List<ExamQuestion> subjectiveList = mainNumber == null ? questionService
                         .findByExamAndSubjectAndObjective(examId, subjectCode, false) : questionService
                         .findByExamAndSubjectAndObjectiveAndMainNumber(examId, subjectCode, false, mainNumber);
+                for (ExamQuestion examQuestion : subjectiveList) {
+                    if (examQuestion.getGroupNumber() != null
+                            && maps.get(examQuestion.getGroupNumber()).getMarkedCount() > 0) {
+                        examQuestion.setEnableUpdate(false);
+                    } else {
+                        examQuestion.setEnableUpdate(true);
+                    }
+                }
                 list.addAll(subjectiveList);
             }
-
             List<ExamQuestion> mainList = new LinkedList<ExamQuestion>();
             mainList.addAll(questionService.findMainByExamAndSubjectAndObjective(examId, subjectCode, true));
             mainList.addAll(questionService.findMainByExamAndSubjectAndObjective(examId, subjectCode, false));
@@ -478,10 +490,60 @@ public class PaperController extends BaseExamController {
     @Logging(menu = "编辑题目", type = LogType.UPDATE)
     @RequestMapping(value = "/question-edit", method = RequestMethod.POST)
     @RoleRequire(Role.SCHOOL_ADMIN)
-    public String update(@RequestParam Integer id, @RequestParam ExamQuestion question, ExamSubjectSearchQuery query,
-            @RequestParam(required = false) Boolean upload) {
+    public String update(HttpServletRequest request, RedirectAttributes redirectAttributes, @RequestParam Integer id,
+            ExamQuestion question, ExamSubjectSearchQuery query, @RequestParam(required = false) Boolean upload) {
+        int examId = getSessionExamId(request);
+        ExamQuestion old = questionService.findById(id);
         String u = upload == null ? "" : upload.toString();
         String t = query.getTotalScoreNotEqual() == null ? "" : query.getTotalScoreNotEqual().toString();
+        ExamQuestion newQ = questionService.findByExamAndSubjectAndObjectiveAndMainNumberAndSubNumber(examId,
+                question.getSubjectCode(), question.isObjective(), question.getMainNumber(), question.getSubNumber());
+        if (old == null
+                || ((old.getMainNumber() != question.getMainNumber() || old.getSubNumber() != question.getSubNumber()) && newQ != null)) {
+            addMessage(redirectAttributes, "编辑失败,编辑题目不存在或编辑后的题号已存在");
+            return "redirect:/admin/exam/paper/detail?subjectCode=" + question.getSubjectCode() + "&pageNumber="
+                    + query.getPageNumber() + "&code=" + query.getCode() + "&category=" + query.getCategory()
+                    + "&level=" + query.getLevel() + "&upload=" + u + "&totalScoreNotEqual=" + t;
+        }
+        if (!old.isObjective() && old.getGroupNumber() != null) {
+            MarkGroup group = groupService.findOne(examId, old.getSubjectCode(), old.getGroupNumber());
+            if (group.getMarkedCount() > 0) {
+                addMessage(redirectAttributes, "编辑失败,已经开始评卷");
+                return "redirect:/admin/exam/paper/detail?subjectCode=" + question.getSubjectCode() + "&pageNumber="
+                        + query.getPageNumber() + "&code=" + query.getCode() + "&category=" + query.getCategory()
+                        + "&level=" + query.getLevel() + "&upload=" + u + "&totalScoreNotEqual=" + t;
+            }
+        }
+        List<String> error = new LinkedList<String>();
+        if (validate(question, error, new HashMap<Integer, String>())) {
+            old.setMainNumber(question.getMainNumber());
+            old.setSubNumber(question.getSubNumber());
+            old.setMainTitle(question.getMainTitle());
+            old.setTotalScore(question.getTotalScore());
+            old.setIntervalScore(question.getIntervalScore());
+            old.setScorePolicy(question.getScorePolicy());
+            old.setAnswer(question.getAnswer().toUpperCase());
+            questionService.saveAndFlush(old);
+            questionService.updateMainTitle(examId, question.getSubjectCode(), question.isObjective(),
+                    question.getMainNumber(), question.getMainTitle());
+            subjectService.updateScore(examId, question.getSubjectCode(), question.isObjective(),
+                    question.getTotalScore());
+            // 更新分组总分
+            if (!old.isObjective() && old.getGroupNumber() != null) {
+                MarkGroup group = groupService.findOne(examId, old.getSubjectCode(), old.getGroupNumber());
+                List<ExamQuestion> questionGroup = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(
+                        examId, question.getSubjectCode(), false, question.getGroupNumber());
+                BigDecimal totalScore = BigDecimal.ZERO;
+                for (ExamQuestion q : questionGroup) {
+                    totalScore = totalScore.add(BigDecimal.valueOf(q.getTotalScore()));
+                }
+                group.setTotalScore(totalScore.doubleValue());
+                groupService.save(group);
+            }
+        }
+        if (error.size() > 0) {
+            addMessage(redirectAttributes, StringUtils.join(error, "<br\\>"));
+        }
         return "redirect:/admin/exam/paper/detail?subjectCode=" + question.getSubjectCode() + "&pageNumber="
                 + query.getPageNumber() + "&code=" + query.getCode() + "&category=" + query.getCategory() + "&level="
                 + query.getLevel() + "&upload=" + u + "&totalScoreNotEqual=" + t;
@@ -602,17 +664,17 @@ public class PaperController extends BaseExamController {
     @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
     public String delete(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
             @RequestParam Integer[] ids, ExamSubjectSearchQuery query, @RequestParam(required = false) Boolean upload) {
-        String subjectCode = "";
         for (Integer id : ids) {
             ExamQuestion question = questionService.findById(id);
-            subjectCode = question.getSubjectCode();
-            markService.deleteByQuestion(question);
+            if (question != null) {
+                markService.deleteByQuestion(question);
+            }
         }
         String u = upload == null ? "" : upload.toString();
         String t = query.getTotalScoreNotEqual() == null ? "" : query.getTotalScoreNotEqual().toString();
-        return "redirect:/admin/exam/paper/detail?subjectCode=" + subjectCode + "&pageNumber=" + query.getPageNumber()
-                + "&code=" + query.getCode() + "&category=" + query.getCategory() + "&level=" + query.getLevel()
-                + "&upload=" + u + "&totalScoreNotEqual=" + t;
+        return "redirect:/admin/exam/paper/detail?subjectCode=" + query.getCode() + "&pageNumber="
+                + query.getPageNumber() + "&code=" + query.getCode() + "&category=" + query.getCategory() + "&level="
+                + query.getLevel() + "&upload=" + u + "&totalScoreNotEqual=" + t;
     }
 
     @RequestMapping(value = "/question/add", method = RequestMethod.GET)

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

@@ -84,7 +84,8 @@
 				<td><c:if test="${!question.objective}">${question.groupNumber}</c:if>
 				</td>
 				<td>
-					<c:if test="${question.groupNumber==null ||question.groupNumber==0}"><a href="${ctx}/admin/exam/paper/question-edit/${question.id}?pageNumber=${query.pageNumber}&code=${query.code }&category=${ query.category}&level=${query.level }&upload=${ upload}&totalScoreNotEqual=${  query.totalScoreNotEqual}">编辑</a></c:if>
+					<c:if test="${question.objective}"><a href="${ctx}/admin/exam/paper/question-edit/${question.id}?pageNumber=${query.pageNumber}&code=${query.code }&category=${ query.category}&level=${query.level }&upload=${ upload}&totalScoreNotEqual=${  query.totalScoreNotEqual}">编辑</a></c:if>
+					<c:if test="${!question.objective && question.enableUpdate}"><a href="${ctx}/admin/exam/paper/question-edit/${question.id}?pageNumber=${query.pageNumber}&code=${query.code }&category=${ query.category}&level=${query.level }&upload=${ upload}&totalScoreNotEqual=${  query.totalScoreNotEqual}">编辑</a></c:if>
 					<c:if test="${question.groupNumber==null ||question.groupNumber==0}"><a href="${ctx}/admin/exam/paper/question-delete/${question.id}?pageNumber=${query.pageNumber}&code=${query.code }&category=${ query.category}&level=${query.level }&upload=${ upload}&totalScoreNotEqual=${  query.totalScoreNotEqual}" class="delete-button">删除</a></c:if>
 				</td>
 			</tr>

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

@@ -70,13 +70,13 @@
 		<div class="control-group">
 			<label class="control-label">满分</label>
 			<div class="controls">
-			 <input name="totalScore" value="${examQuestion.totalScore }" type="number" htmlEscape="false"  maxlength="10" class="required digits"/>
+			 <input name="totalScore" value="${examQuestion.totalScore }" type="number" htmlEscape="false"  maxlength="10" class="required"/>
 			</div>
 		</div>
 		<div class="control-group">
 	        <label class="control-label">是否客观题</label>
 	        <div class="controls">
-	            <input type="checkbox" id="objective" name="objective">
+	            <input type="checkbox" id="objective" name="objective">
 	        </div>
     	</div>
 			<div class="control-group">

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

@@ -43,6 +43,7 @@
 	 	<input type="hidden" id="upload" name="upload" value="${upload}"/>
 	 	<input type="hidden" id="totalScoreNotEqual" name="totalScoreNotEqual" value="${query.totalScoreNotEqual }"/>
 	 	
+	 	<input type="hidden" name="subjectCode" value="${examQuestion.subjectCode}"/>
 	 	<input type="hidden" name="id" value="${examQuestion.id}"/>
 		<div class="control-group">
 			<label class="control-label">大题名称</label>
@@ -65,13 +66,13 @@
 		<div class="control-group">
 			<label class="control-label">满分</label>
 			<div class="controls">
-			 <input name="totalScore" value="${examQuestion.totalScore }" type="number" htmlEscape="false"  maxlength="10" class="required digits"/>
+			 <input name="totalScore" value="${examQuestion.totalScore }" type="number" htmlEscape="false"  maxlength="10" class="required"/>
 			</div>
 		</div>
 		<div class="control-group">
 	        <label class="control-label">是否客观题</label>
 	        <div class="controls">
-	            <input type="checkbox" id="objective" name="objective" <c:if test="${examQuestion.objective }">checked</c:if> disabled>是
+	            <input type="checkbox" id="objective" name="objective" <c:if test="${examQuestion.objective }">checked</c:if> onclick="return false;">
 	        </div>
     	</div>
 			<div class="control-group">