瀏覽代碼

Merge remote-tracking branch 'origin/dev_1.3.15' into dev_1.3.15

luoshi 1 年之前
父節點
當前提交
4d2cf724b6

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

@@ -512,14 +512,14 @@ public class MarkServiceImpl implements MarkService {
                         library.getStatus());
                         library.getStatus());
                 lockService.waitlock(LockType.STUDENT, library.getStudentId());
                 lockService.waitlock(LockType.STUDENT, library.getStudentId());
                 try {
                 try {
-					updateStudentGroupStatus(library.getStudentId(), library.getExamId(), library.getSubjectCode(),
-							library.getGroupNumber(), SubjectiveStatus.UNMARK);
-					studentService.updateSubjectiveStatusAndScore(library.getStudentId(), SubjectiveStatus.UNMARK, 0,
-							null);
-					inspectedService.cancelByStudent(library.getStudentId());
-				} finally {
-					lockService.unlock(LockType.STUDENT, library.getStudentId());
-				}
+                    updateStudentGroupStatus(library.getStudentId(), library.getExamId(), library.getSubjectCode(),
+                            library.getGroupNumber(), SubjectiveStatus.UNMARK);
+                    studentService.updateSubjectiveStatusAndScore(library.getStudentId(), SubjectiveStatus.UNMARK, 0,
+                            null);
+                    inspectedService.cancelByStudent(library.getStudentId());
+                } finally {
+                    lockService.unlock(LockType.STUDENT, library.getStudentId());
+                }
             }
             }
             markerDao.resetById(marker.getId());
             markerDao.resetById(marker.getId());
         } else if (group.getStatus() == MarkStatus.TRIAL) {
         } else if (group.getStatus() == MarkStatus.TRIAL) {
@@ -595,7 +595,6 @@ public class MarkServiceImpl implements MarkService {
         // 根据评卷状态选择读取不同的评卷任务
         // 根据评卷状态选择读取不同的评卷任务
         if (group.getStatus() == MarkStatus.FORMAL) {
         if (group.getStatus() == MarkStatus.FORMAL) {
             MarkLibrary library = libraryDao.findOne(result.getLibraryId());
             MarkLibrary library = libraryDao.findOne(result.getLibraryId());
-            inspectedService.cancelByStudent(library.getStudentId());
             if (library != null && library.getExamId().equals(group.getExamId())
             if (library != null && library.getExamId().equals(group.getExamId())
                     && library.getSubjectCode().equals(group.getSubjectCode())
                     && library.getSubjectCode().equals(group.getSubjectCode())
                     && library.getGroupNumber().equals(group.getNumber())) {
                     && library.getGroupNumber().equals(group.getNumber())) {
@@ -624,7 +623,6 @@ public class MarkServiceImpl implements MarkService {
             }
             }
         } else if (group.getStatus() == MarkStatus.TRIAL) {
         } else if (group.getStatus() == MarkStatus.TRIAL) {
             TrialLibrary library = trialLibraryDao.findOne(result.getLibraryId());
             TrialLibrary library = trialLibraryDao.findOne(result.getLibraryId());
-            inspectedService.cancelByStudent(library.getStudentId());
             if (library != null && library.getExamId().equals(group.getExamId())
             if (library != null && library.getExamId().equals(group.getExamId())
                     && library.getSubjectCode().equals(group.getSubjectCode())
                     && library.getSubjectCode().equals(group.getSubjectCode())
                     && library.getGroupNumber().equals(group.getNumber())
                     && library.getGroupNumber().equals(group.getNumber())
@@ -655,6 +653,7 @@ public class MarkServiceImpl implements MarkService {
                 }
                 }
                 checkStudentTrial(library, group);
                 checkStudentTrial(library, group);
                 updateMarkedCount(group);
                 updateMarkedCount(group);
+                inspectedService.cancelByStudent(library.getStudentId());
                 return SubmitResult.success(library);
                 return SubmitResult.success(library);
             }
             }
         }
         }
@@ -723,6 +722,8 @@ public class MarkServiceImpl implements MarkService {
             // 条件不符更新失败,直接返回
             // 条件不符更新失败,直接返回
             return false;
             return false;
         }
         }
+        // 取消复核
+        inspectedService.cancelByStudent(library.getStudentId());
         // 保存阅卷轨迹
         // 保存阅卷轨迹
         int unansweredCount = 0;
         int unansweredCount = 0;
         if (result.getTrackList() != null && !result.isUnselective()) {
         if (result.getTrackList() != null && !result.isUnselective()) {
@@ -1001,7 +1002,8 @@ public class MarkServiceImpl implements MarkService {
         List<ScoreItem> scoreList = new ArrayList<>();
         List<ScoreItem> scoreList = new ArrayList<>();
         Map<Integer, List<SubjectiveScore>> mainScoreMap = new HashMap<Integer, List<SubjectiveScore>>();
         Map<Integer, List<SubjectiveScore>> mainScoreMap = new HashMap<Integer, List<SubjectiveScore>>();
         Map<Integer, Double> scoreMap = new HashMap<Integer, Double>();
         Map<Integer, Double> scoreMap = new HashMap<Integer, Double>();
-
+        Integer examId = null;
+        String subjectCode = null;
         // 循环所有主观得分明细
         // 循环所有主观得分明细
         List<SubjectiveScore> list = scoreDao.findByStudentId(studentId);
         List<SubjectiveScore> list = scoreDao.findByStudentId(studentId);
         list.sort(null);
         list.sort(null);
@@ -1010,6 +1012,8 @@ public class MarkServiceImpl implements MarkService {
             if (mainScoreList == null) {
             if (mainScoreList == null) {
                 mainScoreList = new ArrayList<SubjectiveScore>();
                 mainScoreList = new ArrayList<SubjectiveScore>();
             }
             }
+            examId = ss.getExamId();
+            subjectCode = ss.getSubjectCode();
             mainScoreList.add(ss);
             mainScoreList.add(ss);
             mainScoreMap.put(ss.getMainNumber(), mainScoreList);
             mainScoreMap.put(ss.getMainNumber(), mainScoreList);
             scoreList.add(new ScoreItem(ss));
             scoreList.add(new ScoreItem(ss));
@@ -1030,7 +1034,6 @@ public class MarkServiceImpl implements MarkService {
             }
             }
             for (SubjectiveScore subjectiveScore : mainScoreList) {
             for (SubjectiveScore subjectiveScore : mainScoreList) {
                 subjectiveScore.setMainScore(mainScore.doubleValue());
                 subjectiveScore.setMainScore(mainScore.doubleValue());
-                scoreDao.saveAndFlush(subjectiveScore);
             }
             }
             scoreMap.put(mainNumber, mainScore.doubleValue());
             scoreMap.put(mainNumber, mainScore.doubleValue());
         }
         }
@@ -1038,9 +1041,8 @@ public class MarkServiceImpl implements MarkService {
         BigDecimal totalScore = BigDecimal.ZERO;
         BigDecimal totalScore = BigDecimal.ZERO;
         boolean lessSelective = false;
         boolean lessSelective = false;
         boolean mutiSelective = false;
         boolean mutiSelective = false;
-        ExamStudent student = studentService.findById(studentId);
-        Map<Integer, List<SelectiveGroup>> indexMap = selectiveGroupService.findGroupByExamIdAndSubjectCode(
-                student.getExamId(), student.getSubjectCode());
+        Map<Integer, List<SelectiveGroup>> indexMap = selectiveGroupService.findGroupByExamIdAndSubjectCode(examId,
+                subjectCode);
         for (Integer index : indexMap.keySet()) {
         for (Integer index : indexMap.keySet()) {
             // 循环选做题组
             // 循环选做题组
             List<SelectiveGroup> indexGroup = indexMap.get(index);
             List<SelectiveGroup> indexGroup = indexMap.get(index);
@@ -1083,7 +1085,6 @@ public class MarkServiceImpl implements MarkService {
                         List<SubjectiveScore> mainScoreList = mainScoreMap.get(selectiveGroup.getMainNumber());
                         List<SubjectiveScore> mainScoreList = mainScoreMap.get(selectiveGroup.getMainNumber());
                         for (SubjectiveScore ss : mainScoreList) {
                         for (SubjectiveScore ss : mainScoreList) {
                             ss.setUncalculate(true);
                             ss.setUncalculate(true);
-                            scoreDao.saveAndFlush(ss);
                         }
                         }
                     }
                     }
                 } else {
                 } else {
@@ -1121,7 +1122,6 @@ public class MarkServiceImpl implements MarkService {
                     List<SubjectiveScore> mainScoreList = mainScoreMap.get(group.getMainNumber());
                     List<SubjectiveScore> mainScoreList = mainScoreMap.get(group.getMainNumber());
                     for (SubjectiveScore ss : mainScoreList) {
                     for (SubjectiveScore ss : mainScoreList) {
                         ss.setUncalculate(true);
                         ss.setUncalculate(true);
-                        scoreDao.saveAndFlush(ss);
                     }
                     }
                 }
                 }
             }
             }
@@ -1132,13 +1132,18 @@ public class MarkServiceImpl implements MarkService {
                 mutiSelective = true;
                 mutiSelective = true;
             }
             }
         }
         }
-        SelectiveStudent selectiveStudent = selectiveStudentDao.findOne(studentId);
-        if (selectiveStudent == null) {
-            selectiveStudent = new SelectiveStudent();
-            selectiveStudent.setExamId(student.getExamId());
-            selectiveStudent.setSubjectCode(student.getSubjectCode());
-            selectiveStudent.setStudentId(studentId);
+        // 统一更新得分详情
+        for (Integer mainNumber : mainScoreMap.keySet()) {
+            List<SubjectiveScore> mainScoreList = mainScoreMap.get(mainNumber);
+            for (SubjectiveScore ss : mainScoreList) {
+                scoreDao.saveAndFlush(ss);
+            }
         }
         }
+        // 更新考生多选做少选做
+        SelectiveStudent selectiveStudent = new SelectiveStudent();
+        selectiveStudent.setExamId(examId);
+        selectiveStudent.setSubjectCode(subjectCode);
+        selectiveStudent.setStudentId(studentId);
         selectiveStudent.setLessSelective(lessSelective);
         selectiveStudent.setLessSelective(lessSelective);
         selectiveStudent.setMutiSelective(mutiSelective);
         selectiveStudent.setMutiSelective(mutiSelective);
         selectiveStudentDao.saveAndFlush(selectiveStudent);
         selectiveStudentDao.saveAndFlush(selectiveStudent);

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

@@ -351,10 +351,10 @@ public class ArbitrateController extends BaseExamController {
         ArbitrateHistory history = arbitrateService.findById(markResult.getLibraryId());
         ArbitrateHistory history = arbitrateService.findById(markResult.getLibraryId());
         if (history != null && subjectCheck(history.getSubjectCode(), wu)) {
         if (history != null && subjectCheck(history.getSubjectCode(), wu)) {
             try {
             try {
-            	lockService.waitlock(LockType.STUDENT, markResult.getStudentId());
                 lockService.watch(LockType.EXAM_SUBJECT, history.getExamId(), history.getSubjectCode());
                 lockService.watch(LockType.EXAM_SUBJECT, history.getExamId(), history.getSubjectCode());
                 lockService.watch(LockType.GROUP, history.getExamId(), history.getSubjectCode(),
                 lockService.watch(LockType.GROUP, history.getExamId(), history.getSubjectCode(),
                         history.getGroupNumber());
                         history.getGroupNumber());
+                lockService.waitlock(LockType.STUDENT, markResult.getStudentId());
                 markService.processArbitrate(markResult, wu.getUser().getId());
                 markService.processArbitrate(markResult, wu.getUser().getId());
                 releaseTask(history.getId());
                 releaseTask(history.getId());
                 result.accumulate("success", true);
                 result.accumulate("success", true);

+ 5 - 4
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/InspectedController.java

@@ -308,7 +308,8 @@ public class InspectedController extends BaseExamController {
         if (student != null && subjectCheck(student.getSubjectCode(), wu)) {
         if (student != null && subjectCheck(student.getSubjectCode(), wu)) {
             try {
             try {
             	lockService.watch(LockType.EXAM_SUBJECT, student.getExamId(), student.getSubjectCode());
             	lockService.watch(LockType.EXAM_SUBJECT, student.getExamId(), student.getSubjectCode());
-                if (lockService.trylock(LockType.STUDENT, studentId) && inspectedService.cancelByStudent(studentId)) {
+            	lockService.waitlock(LockType.STUDENT, studentId);
+                if (inspectedService.cancelByStudent(studentId)) {
                     obj.accumulate("success", true);
                     obj.accumulate("success", true);
                 } else {
                 } else {
                     obj.accumulate("success", false);
                     obj.accumulate("success", false);
@@ -378,8 +379,8 @@ public class InspectedController extends BaseExamController {
                 obj.accumulate("message", "打回失败");
                 obj.accumulate("message", "打回失败");
                 log.error("back inspected error", e);
                 log.error("back inspected error", e);
             } finally {
             } finally {
+            	lockService.unlock(LockType.STUDENT, student.getId());
                 lockService.unwatch(LockType.EXAM_SUBJECT, student.getExamId(), student.getSubjectCode());
                 lockService.unwatch(LockType.EXAM_SUBJECT, student.getExamId(), student.getSubjectCode());
-                lockService.unlock(LockType.STUDENT, student.getId());
             }
             }
         } else {
         } else {
             obj.accumulate("success", false);
             obj.accumulate("success", false);
@@ -501,8 +502,8 @@ public class InspectedController extends BaseExamController {
             if (student != null && subjectCheck(student.getSubjectCode(), wu)) {
             if (student != null && subjectCheck(student.getSubjectCode(), wu)) {
                 try {
                 try {
                 	lockService.watch(LockType.EXAM_SUBJECT, student.getExamId(), student.getSubjectCode());
                 	lockService.watch(LockType.EXAM_SUBJECT, student.getExamId(), student.getSubjectCode());
-                    if (lockService.trylock(LockType.STUDENT, student.getId()) && inspectedService.cancelByStudent(id)) {
-                    }
+                	lockService.waitlock(LockType.STUDENT, student.getId());
+                    inspectedService.cancelByStudent(id);
                 } catch (Exception e) {
                 } catch (Exception e) {
                     log.error("back inspected error", e);
                     log.error("back inspected error", e);
                 } finally {
                 } finally {

+ 2 - 10
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/LibraryController.java

@@ -176,14 +176,10 @@ public class LibraryController extends BaseExamController {
         if (library != null) {
         if (library != null) {
             if (subjectCheck(library.getSubjectCode(), RequestUtils.getWebUser(request))) {
             if (subjectCheck(library.getSubjectCode(), RequestUtils.getWebUser(request))) {
                 try {
                 try {
-                	if(!lockService.trylock(LockType.STUDENT, library.getStudentId())) {
-                		obj.accumulate("success", false);
-                        obj.accumulate("message", "考生数据繁忙,请稍后再试");
-                        return obj;
-                	}
                     lockService.watch(LockType.EXAM_SUBJECT, library.getExamId(), library.getSubjectCode());
                     lockService.watch(LockType.EXAM_SUBJECT, library.getExamId(), library.getSubjectCode());
                     lockService.watch(LockType.GROUP, library.getExamId(), library.getSubjectCode(),
                     lockService.watch(LockType.GROUP, library.getExamId(), library.getSubjectCode(),
                             library.getGroupNumber());
                             library.getGroupNumber());
+                    lockService.waitlock(LockType.STUDENT, library.getStudentId());
                     if ((library.getStatus().equals(LibraryStatus.MARKED)
                     if ((library.getStatus().equals(LibraryStatus.MARKED)
                             || library.getStatus().equals(LibraryStatus.PROBLEM) || library.getStatus().equals(
                             || library.getStatus().equals(LibraryStatus.PROBLEM) || library.getStatus().equals(
                             LibraryStatus.INSPECTED))
                             LibraryStatus.INSPECTED))
@@ -364,14 +360,10 @@ public class LibraryController extends BaseExamController {
         if (library != null) {
         if (library != null) {
             if (subjectCheck(library.getSubjectCode(), RequestUtils.getWebUser(request))) {
             if (subjectCheck(library.getSubjectCode(), RequestUtils.getWebUser(request))) {
                 try {
                 try {
-                	if(!lockService.trylock(LockType.STUDENT, library.getStudentId())) {
-                		obj.accumulate("success", false);
-                        obj.accumulate("message", "考生数据繁忙,请稍后再试");
-                        return obj;
-                	}
                     lockService.watch(LockType.EXAM_SUBJECT, library.getExamId(), library.getSubjectCode());
                     lockService.watch(LockType.EXAM_SUBJECT, library.getExamId(), library.getSubjectCode());
                     lockService.watch(LockType.GROUP, library.getExamId(), library.getSubjectCode(),
                     lockService.watch(LockType.GROUP, library.getExamId(), library.getSubjectCode(),
                             library.getGroupNumber());
                             library.getGroupNumber());
+                    lockService.waitlock(LockType.STUDENT, library.getStudentId());
 
 
                     if (((libraryService.hasApplied(library, wu.getId())
                     if (((libraryService.hasApplied(library, wu.getId())
                             && (library.getStatus().equals(LibraryStatus.MARKED)) || library.getStatus().equals(
                             && (library.getStatus().equals(LibraryStatus.MARKED)) || library.getStatus().equals(

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

@@ -170,10 +170,10 @@ public class ProblemHistoryController extends BaseExamController {
             MarkLibrary library = libraryService.findById(libraryId);
             MarkLibrary library = libraryService.findById(libraryId);
             if (library != null && subjectCheck(library.getSubjectCode(), RequestUtils.getWebUser(request))) {
             if (library != null && subjectCheck(library.getSubjectCode(), RequestUtils.getWebUser(request))) {
                 try {
                 try {
-                	lockService.waitlock(LockType.STUDENT, library.getStudentId());
                     lockService.watch(LockType.EXAM_SUBJECT, library.getExamId(), library.getSubjectCode());
                     lockService.watch(LockType.EXAM_SUBJECT, library.getExamId(), library.getSubjectCode());
                     lockService.watch(LockType.GROUP, library.getExamId(), library.getSubjectCode(),
                     lockService.watch(LockType.GROUP, library.getExamId(), library.getSubjectCode(),
                             library.getGroupNumber());
                             library.getGroupNumber());
+                    lockService.waitlock(LockType.STUDENT, library.getStudentId());
                     if (library.getStatus().equals(LibraryStatus.PROBLEM)) {
                     if (library.getStatus().equals(LibraryStatus.PROBLEM)) {
                         markService.rejectLibrary(library, wu.getId(), null, true);
                         markService.rejectLibrary(library, wu.getId(), null, true);
                     }
                     }

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

@@ -279,6 +279,7 @@ public class ScoreController extends BaseExamController {
                 query.setPageSize(Integer.MAX_VALUE);
                 query.setPageSize(Integer.MAX_VALUE);
                 query.setRole(wu.getRole());
                 query.setRole(wu.getRole());
                 query.setUserId(wu.getId());
                 query.setUserId(wu.getId());
+                query.orderById();
                 query = studentService.findByQueryPlus(query);
                 query = studentService.findByQueryPlus(query);
                 for (ExamStudent student : query.getResult()) {
                 for (ExamStudent student : query.getResult()) {
                     if (!student.isUpload() || student.isBreach() || student.isAbsent()) {
                     if (!student.isUpload() || student.isBreach() || student.isAbsent()) {

+ 11 - 5
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/SubjectController.java

@@ -82,11 +82,19 @@ public class SubjectController extends BaseExamController {
     @SuppressWarnings("unchecked")
     @SuppressWarnings("unchecked")
     @RequestMapping(value = "/save", method = RequestMethod.POST)
     @RequestMapping(value = "/save", method = RequestMethod.POST)
     @RoleRequire(Role.SCHOOL_ADMIN)
     @RoleRequire(Role.SCHOOL_ADMIN)
-    public String save(HttpServletRequest request, ExamSubject subject, Model model, @RequestParam String picList,
+    public String save(RedirectAttributes redirectAttributes,HttpServletRequest request, ExamSubject subject, Model model, @RequestParam String picList,
             @RequestParam(required = false) Double passScore, @RequestParam(required = false) Double excellentScore,
             @RequestParam(required = false) Double passScore, @RequestParam(required = false) Double excellentScore,
             ExamSubjectSearchQuery query, @RequestParam(required = false) String queryCode,
             ExamSubjectSearchQuery query, @RequestParam(required = false) String queryCode,
             @RequestParam(required = false) Boolean upload) {
             @RequestParam(required = false) Boolean upload) {
+    	String u = upload == null ? "" : upload.toString();
+    	String t = query.getTotalScoreNotEqual() == null ? "" : query.getTotalScoreNotEqual().toString();
+    	String url="redirect:/admin/exam/paper?code=" + queryCode + "&pageNumber=" + query.getPageNumber() + "&category="
+                + query.getCategory() + "&level=" + query.getLevel() + "&upload=" + u + "&totalScoreNotEqual=" + t;
         ExamSubject previous = subjectService.find(getSessionExamId(request), subject.getCode());
         ExamSubject previous = subjectService.find(getSessionExamId(request), subject.getCode());
+        if(previous==null) {
+        	addMessage(redirectAttributes, "科目代码有误,科目不存在");
+        	return url;
+        }
         if (previous != null && StringUtils.isNotBlank(picList)) {
         if (previous != null && StringUtils.isNotBlank(picList)) {
             String sheetConfig = StringEscapeUtils.unescapeHtml(picList);
             String sheetConfig = StringEscapeUtils.unescapeHtml(picList);
             JSONArray array = JSONArray.fromObject(sheetConfig);
             JSONArray array = JSONArray.fromObject(sheetConfig);
@@ -103,9 +111,7 @@ public class SubjectController extends BaseExamController {
                 .getDisplayQuestionName());
                 .getDisplayQuestionName());
         subjectService.save(previous);
         subjectService.save(previous);
         model.addAttribute("message", "修改成功");
         model.addAttribute("message", "修改成功");
-        String u = upload == null ? "" : upload.toString();
-        String t = query.getTotalScoreNotEqual() == null ? "" : query.getTotalScoreNotEqual().toString();
-        return "redirect:/admin/exam/paper?code=" + queryCode + "&pageNumber=" + query.getPageNumber() + "&category="
-                + query.getCategory() + "&level=" + query.getLevel() + "&upload=" + u + "&totalScoreNotEqual=" + t;
+       
+        return url;
     }
     }
 }
 }

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

@@ -89,8 +89,8 @@
             <option value="0" <c:if test="${upload!=null && upload==false}">selected</c:if>>未扫描</option>
             <option value="0" <c:if test="${upload!=null && upload==false}">selected</c:if>>未扫描</option>
         </select>
         </select>
         &nbsp;
         &nbsp;
-        <label>总分不等于</label>
-        <input type="number" name="totalScoreNotEqual" value="${query.totalScoreNotEqual}" maxlength="10" class="input-mini"/>
+        <label>总分</label>
+        <input type="number" name="totalScore" value="${query.totalScore}" maxlength="10" class="input-mini"/>
         <br/><br/>
         <br/><br/>
         &nbsp;
         &nbsp;
         <input id="btnSubmit" class="btn btn-primary" type="button" value="查询" onclick="goSearch()"/>
         <input id="btnSubmit" class="btn btn-primary" type="button" value="查询" onclick="goSearch()"/>