1
0
Эх сурвалжийг харах

更新libraryCount和markedCount操作分离;考生不能修改的属性置灰;批量更新评卷员改为同步操作;

ting.yin 6 жил өмнө
parent
commit
8da6c398a1

+ 6 - 3
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/MarkGroupDao.java

@@ -69,9 +69,12 @@ public interface MarkGroupDao
     Integer sumMarkedCount(Integer examId);
 
     @Modifying
-    @Query("update MarkGroup g set g.libraryCount=?4, g.markedCount=?5, g.leftCount=(?4-?5) where g.pk.examId=?1 and g.pk.subjectCode=?2 and g.pk.number=?3")
-    void updateLibraryCount(Integer examId, String subjectCode, Integer number, Integer totalCount,
-            Integer markedCount);
+    @Query("update MarkGroup g set g.libraryCount=?4, g.leftCount=(?4-g.markedCount) where g.pk.examId=?1 and g.pk.subjectCode=?2 and g.pk.number=?3")
+    void updateLibraryCount(Integer examId, String subjectCode, Integer number, Integer totalCount);
+    
+    @Modifying
+    @Query("update MarkGroup g set g.markedCount=?4, g.leftCount=(g.libraryCount-?4) where g.pk.examId=?1 and g.pk.subjectCode=?2 and g.pk.number=?3")
+    void updateMarkedCount(Integer examId, String subjectCode, Integer number,Integer markedCount);
 
     @Modifying
     @Query("update MarkGroup g set g.leftCount = g.libraryCount, g.markedCount = 0 "

+ 9 - 26
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/MarkCronService.java

@@ -9,7 +9,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.core.task.AsyncTaskExecutor;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
@@ -18,19 +17,16 @@ import cn.com.qmth.stmms.biz.campus.service.CampusService;
 import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
 import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
 import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
+import cn.com.qmth.stmms.biz.exam.model.Marker;
 import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
 import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
 import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
 import cn.com.qmth.stmms.biz.exam.service.MarkerService;
-import cn.com.qmth.stmms.biz.lock.LockService;
 import cn.com.qmth.stmms.biz.lock.impl.MemoryLockProvider;
 import cn.com.qmth.stmms.biz.mark.service.MarkService;
-import cn.com.qmth.stmms.biz.mark.thread.MarkQualityThread;
 import cn.com.qmth.stmms.biz.utils.FormalTaskUtil;
 import cn.com.qmth.stmms.biz.utils.TrialTaskUtil;
-import cn.com.qmth.stmms.common.enums.LockType;
 import cn.com.qmth.stmms.common.enums.MarkStatus;
-import cn.com.qmth.stmms.common.utils.Callback;
 
 /**
  * 与评卷相关的所有定时任务
@@ -67,12 +63,6 @@ public class MarkCronService {
     @Autowired
     private MarkerService markerService;
     
-    @Autowired
-    private AsyncTaskExecutor taskExecutor;
-    
-    @Autowired
-    private LockService mlockService;
-
     @Value("${mark.cleanTimeoutMinute}")
     private long timeoutMinute;
 
@@ -146,25 +136,18 @@ public class MarkCronService {
         	List<MarkGroup> groups = groupService.findByExamAndSubjectAndStatus(examId, subject.getCode(), MarkStatus.FORMAL);
         	for (MarkGroup markGroup : groups) {
         		if(!MarkStatus.FINISH.equals(markGroup.getStatus())){
-        			final String lockKey = getLockKey(examId, subject.getCode(), markGroup.getNumber());
-                    if (mlockService.trylock(LockType.GROUP, lockKey)) {
-                        taskExecutor.submit(new MarkQualityThread(
-                                markerService.findByExamAndSubjectAndGroup(examId, subject.getCode(), markGroup.getNumber()), new Callback() {
-
-                                    @Override
-                                    public void invoke() {
-                                    	mlockService.unlock(LockType.GROUP, lockKey);
-                                    }
-                                }));
-                    }
+                    	List<Marker> markers = markerService.findByExamAndSubjectAndGroup(examId, subject.getCode(), markGroup.getNumber());
+                       for (Marker marker : markers) {
+                           try {
+                               markService.updateQuality(marker);
+                           } catch (Exception e) {
+                               log.error("update marker quality error for markerId="+marker.getId(), e);
+                           }
+                       }
         		}
 			}
         }
 	}
-    
-    private String getLockKey(Integer examId, String subjectCode, Integer groupNumber) {
-        return examId + "_" + subjectCode + "_" + groupNumber;
-    }
 
 	private void buildLibraryByExam(Integer examId, Map<String, Campus> campusMap) {
         // 获取主观题总分大于0的科目

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

@@ -762,14 +762,16 @@ public class MarkServiceImpl implements MarkService {
         if (group.getStatus() == MarkStatus.FORMAL) {
             groupDao.updateLibraryCount(group.getExamId(), group.getSubjectCode(), group.getNumber(),
                     (int) libraryDao.countByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(),
-                            group.getSubjectCode(), group.getNumber()),
-                    (int) libraryDao.countByExamIdAndSubjectCodeAndGroupNumberAndStatus(group.getExamId(),
+                            group.getSubjectCode(), group.getNumber()));
+            groupDao.updateMarkedCount(group.getExamId(), group.getSubjectCode(), group.getNumber(),
+            		(int) libraryDao.countByExamIdAndSubjectCodeAndGroupNumberAndStatus(group.getExamId(),
                             group.getSubjectCode(), group.getNumber(), LibraryStatus.MARKED, LibraryStatus.ARBITRATED));
         } else if (group.getStatus() == MarkStatus.TRIAL) {
             groupDao.updateLibraryCount(group.getExamId(), group.getSubjectCode(), group.getNumber(),
                     (int) trialLibraryDao.countByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(),
-                            group.getSubjectCode(), group.getNumber()),
-                    (int) trialLibraryDao.countMarked(group.getExamId(), group.getSubjectCode(), group.getNumber()));
+                            group.getSubjectCode(), group.getNumber()));
+            groupDao.updateMarkedCount(group.getExamId(), group.getSubjectCode(), group.getNumber(),
+                     (int) trialLibraryDao.countMarked(group.getExamId(), group.getSubjectCode(), group.getNumber()));
         }
     }
 

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

@@ -195,6 +195,7 @@ public class StudentController extends BaseExamController {
                 ExamStudent old = checkExamNumber(student, new HashMap<String, ExamStudent>(), new HashMap<String, ExamStudent>());
                 if(old!=null){
                 	addMessage(redirectAttributes, "准考证号" + student.getExamNumber() + "已经存在");
+                	return "redirect:/admin/exam/student";
                 } else{
                 	studentService.save(student);
                 }

+ 9 - 5
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/studentForm.jsp

@@ -13,15 +13,17 @@
 		<div class="control-group">
 			<label class="control-label">学习中心</label>
 			<div class="controls">
-				<form:select id="campusName" path="campusName" cssClass="required">
-					<form:options items="${campusList}" htmlEscape="false"/>
-				</form:select>
+				<select id="campusName" name="campusName" <c:if test="${student.upload }">disabled="disabled"</c:if>>
+					<c:forEach items="${campusList }" var="campusName">
+					<option value="${campusName}" <c:if test="${student.campusName eq campusName }">selected</c:if>>${campusName }</option>
+					</c:forEach>
+				</select>
 			</div>
 		</div>
 		<div class="control-group">
 			<label class="control-label">科目</label>
 			<div class="controls">
-				<select id="subjectCode" name="subjectCode">
+				<select id="subjectCode" name="subjectCode" <c:if test="${student.upload }">disabled="disabled"</c:if>>
 				<c:forEach items="${subjectList }" var="subject">
 					<option value="${subject.code }" <c:if test="${student.subjectCode eq subject.code }">selected</c:if>>${subject.code}-${subject.name}</option>
 				</c:forEach>
@@ -43,7 +45,7 @@
 		<div class="control-group">
 			<label class="control-label">准考证号</label>
 			<div class="controls">
-				<form:input path="examNumber" htmlEscape="false" maxlength="200" class="required"/>
+				<input path="examNumber" htmlEscape="false" maxlength="200" class="required" <c:if test="${student.upload }">readonly="readonly"</c:if> value="${student.examNumber }"/>
 			</div>
 		</div>
 		<div class="control-group">
@@ -82,6 +84,8 @@
 			
 			submitHandler: function(form){
 				//alert("studentId="+$("#studentId").val()+" subjectCode="+$("#subjectCode").val());
+				 $("#subjectCode").removeAttr("disabled");
+				 $("#campusName").removeAttr("disabled");
 				loading('正在提交,请稍等...');
 				form.submit();
 			},