ting.yin 1 年間 前
コミット
f3878c1d97

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

@@ -20,6 +20,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.core.task.AsyncTaskExecutor;
 import org.springframework.stereotype.Controller;
 import org.springframework.transaction.annotation.Transactional;
@@ -114,6 +115,9 @@ public class MarkGroupController extends BaseExamController {
     @Autowired
     private AsyncTaskExecutor taskExecutor;
 
+    @Value("${mark.group.delete}")
+    private String markDeleteCode;
+
     @Logging(menu = "大题管理查询", type = LogType.QUERY)
     @RequestMapping
     public String list(HttpServletRequest request, Model model, @RequestParam(required = false) String subjectCode) {
@@ -402,13 +406,19 @@ public class MarkGroupController extends BaseExamController {
     @RequestMapping("/delete")
     @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER, Role.COLLEGE_ADMIN })
     public String delete(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
-            @RequestParam String subjectCode, @RequestParam Integer number) {
+            @RequestParam String subjectCode, @RequestParam Integer number,
+            @RequestParam(required = false) String deleteCode) {
         int examId = getSessionExamId(request);
         MarkGroup group = groupService.findOne(examId, subjectCode, number);
         if (group == null) {
             redirectAttributes.addAttribute("subjectCode", subjectCode);
             return "redirect:/admin/exam/group";
         }
+        if (group.getLibraryCount() == group.getMarkedCount() && !markDeleteCode.equals(deleteCode)) {
+            addMessage(redirectAttributes, "删除分组授权码不正确");
+            redirectAttributes.addAttribute("subjectCode", subjectCode);
+            return "redirect:/admin/exam/group";
+        }
         if (lockService.trylock(LockType.GROUP_DELETE, group.getExamId(), group.getSubjectCode(), group.getNumber())) {
             taskExecutor.submit(new MarkGroupDeleteThread(group, markService, lockService));
             RequestUtils.setLog(request, "开始删除分组,subjectCode:" + subjectCode + " number:" + number);

+ 19 - 2
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ScoreController.java

@@ -318,7 +318,7 @@ public class ScoreController extends BaseExamController {
                 byte[] value = os.toByteArray();
                 writer.write(new ByteArrayInputStream(value), fileName);
                 if (!error.isEmpty()) {
-                    writer.write(StringUtils.join(error, ",").getBytes(), "error.txt");
+                    writer.write(StringUtils.join(error, ";").getBytes(), "error.txt");
                 }
                 writer.close();
                 return null;
@@ -460,7 +460,24 @@ public class ScoreController extends BaseExamController {
         query.setManualAbsent(false);
         query.setSubjectCode(subjectCode);
         if (studentService.countByQuery(query) > 0) {
-            return "未上传考生必须人工指定缺考";
+            StringBuilder builder = new StringBuilder(subjectCode + "未上传考生必须人工指定缺考");
+            query.setPageSize(Integer.MAX_VALUE);
+            query = studentService.findByQuery(query);
+            for (ExamStudent s : query.getResult()) {
+                builder.append("," + s.getExamNumber());
+            }
+            return builder.toString();
+        }
+        query.setUpload(true);
+        query.setManualAbsent(true);
+        if (studentService.countByQuery(query) > 0) {
+            StringBuilder builder = new StringBuilder(subjectCode + "已上传考生有人工指定缺考");
+            query.setPageSize(Integer.MAX_VALUE);
+            query = studentService.findByQuery(query);
+            for (ExamStudent s : query.getResult()) {
+                builder.append("," + s.getExamNumber());
+            }
+            return builder.toString();
         }
         return null;
     }

+ 3 - 1
stmms-web/src/main/webapp/WEB-INF/application.properties

@@ -19,6 +19,8 @@ exam.problem.type2=\u8bd5\u5377\u6a21\u7cca
 mark.activeExpireMinute=30
 mark.cleanTaskSchedule=0 0/10 6-23 * * ?
 mark.cleanLockSchedule=0 0 3 * * ?
+##\u5220\u9664\u5206\u7ec4\u6388\u6743\u7801
+mark.group.delete=hu8RabY3rd
 ##\u8bc4\u5377\u5458\u63a7\u5236
 marker.showBtnImportAndBtnUpdateImport=false
 marker.forceMode=
@@ -37,7 +39,7 @@ qmth.examcloud.pageSize=10
 qmth.examcloud.subject.uri=/api/exchange/outer/question/getSubjectivePaperStruct
 qmth.examcloud.subject.paper.uri=/api/exchange/outer/question/getSubjectivePaper
 qmth.examcloud.student.uri=/api/exchange/outer/question/getSubjectiveQuestion
-
+##\u673a\u6784\u5bf9\u63a5\u914d\u7f6e
 school.updateMinute=0 0 0 * * ?
 qmth.solar.host=https://solar.qmth.com.cn
 qmth.solar.org.uri=/api/open/org/query

+ 1 - 1
stmms-web/src/main/webapp/WEB-INF/views/modules/sys/schoolList.jsp

@@ -47,10 +47,10 @@
 			<tr>
 				<td>${school.name}</td>
 				<td>${school.code}</td>
+				<td>${school.subCode}</td>
 				<td><c:if test="${school.doubleTrack}">开启</c:if>
 					<c:if test="${school.doubleTrack==null || !school.doubleTrack}">关闭</c:if>
 				</td>
-				<td>${school.subCode}</td>
 				<td>${school.province}</td>
 				<td>${school.city}</td>
 				<td>