Ver código fonte

Merge remote-tracking branch 'origin/stmms_ft_dev' into test_20181225

ting.yin 6 anos atrás
pai
commit
1e006a8e30

+ 1 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/dao/MarkLibraryDao.java

@@ -59,7 +59,7 @@ public interface MarkLibraryDao extends JpaRepository<MarkLibrary, Integer>, Jpa
             LibraryStatus status);
 
     @Modifying(clearAutomatically = true)
-    @Query("update MarkLibrary m set m.status=?2, m.tags=null, m.markerId=null, m.markerTime=null, m.markerScore=null, m.markerScoreList=null where m.markerId=?1 and m.status!=?3 and m.status!=?4 ")
+    @Query("update MarkLibrary m set m.status=?2, m.tags=null, m.markerId=null, m.markerTime=null, m.markerScore=null, m.markerScoreList=null, m.headerId=null , m.headerTime=null , m.headerScore=null , m.headerScoreList=null  where m.markerId=?1 and m.status!=?3 and m.status!=?4 ")
     void resetByMarkerId(Integer markerId, LibraryStatus status,LibraryStatus libraryStatus1,LibraryStatus libraryStatus2);
 
     @Modifying(clearAutomatically = true)

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

@@ -130,7 +130,7 @@ public class TaskServiceImpl implements TaskService {
         task.setExist(true);
         task.setStudentId(library.getExamNumber());
         task.setLibraryId(library.getId());
-        task.setMarkStepList(buildMarkStep(group, student.getId()));
+        task.setMarkStepList(buildMarkStep(group, library.getId()));
         task.setPictureUrls(PictureUrlBuilder.getSliceUrls(library.getExamId(), library.getCampusId(),
                 library.getSubjectCode(), library.getExamNumber(), student.getSliceCount()));
         task.setPictureConfig(group.getPictureConfigList());
@@ -156,7 +156,7 @@ public class TaskServiceImpl implements TaskService {
         return task;
     }
 
-    private List<MarkStepDTO> buildMarkStep(MarkGroup group, Integer studentId) {
+    private List<MarkStepDTO> buildMarkStep(MarkGroup group, Integer libraryId) {
         List<MarkStepDTO> list = new LinkedList<MarkStepDTO>();
         List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjectiveAndMainNumber(group.getExamId(),
                 group.getSubjectCode(), false, group.getNumber());
@@ -176,9 +176,9 @@ public class TaskServiceImpl implements TaskService {
             step.setMin(0d);
             step.setInterval(question.getIntervalScore());
             step.setScoreList(question.getScoreListArray());
-            if (studentId != null) {
+            if (libraryId != null) {
                 // 增加阅卷轨迹列表获取
-                addTrack(step, question, trackService.findByStudentId(studentId));
+                addTrack(step, question, trackService.findByLibraryId(libraryId));
             }
             list.add(step);
         }

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

@@ -35,6 +35,7 @@ import cn.com.qmth.stmms.biz.exam.service.ExamPackageService;
 import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
 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.exam.service.ScoreRateService;
 import cn.com.qmth.stmms.biz.lock.LockService;
@@ -78,6 +79,9 @@ public class ScoreController extends BaseExamController {
     @Autowired
     private MarkLibraryService markLibraryService;
 
+    @Autowired
+    private MarkGroupService groupService;
+
     @Autowired
     private ScoreRateService scoreRateService;
 
@@ -238,7 +242,7 @@ public class ScoreController extends BaseExamController {
         int examId = getSessionExamId(request);
         if (lockService.trylock(LockType.EXAM, examId)) {
             ScoreCalculateThread thread = new ScoreCalculateThread(examId, lockService, studentService, questionService,
-                    subjectService, scoreRateService, markLibraryService, markService);
+                    subjectService, scoreRateService, markService, groupService);
             taskExecutor.submit(thread);
         }
         return new ModelAndView("redirect:/admin/exam/score");

+ 41 - 38
stmms-web/src/main/java/cn/com/qmth/stmms/admin/thread/ScoreCalculateThread.java

@@ -19,14 +19,13 @@ import cn.com.qmth.stmms.biz.exam.model.ScoreRate;
 import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
 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.ScoreRateService;
 import cn.com.qmth.stmms.biz.lock.LockService;
-import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
 import cn.com.qmth.stmms.biz.mark.service.MarkService;
 import cn.com.qmth.stmms.biz.utils.ScoreCalculateUtil;
 import cn.com.qmth.stmms.biz.utils.ScoreInfo;
 import cn.com.qmth.stmms.biz.utils.ScoreItem;
-import cn.com.qmth.stmms.common.enums.LibraryStatus;
 import cn.com.qmth.stmms.common.enums.LockType;
 
 public class ScoreCalculateThread implements Runnable {
@@ -41,9 +40,9 @@ public class ScoreCalculateThread implements Runnable {
 
     private MarkService markService;
 
-    private ScoreRateService scoreRateService;
+    private MarkGroupService groupService;
 
-    private MarkLibraryService libraryService;
+    private ScoreRateService scoreRateService;
 
     private int examId;
 
@@ -59,15 +58,15 @@ public class ScoreCalculateThread implements Runnable {
 
     public ScoreCalculateThread(int examId, LockService lockService, ExamStudentService studentService,
             ExamQuestionService questionService, ExamSubjectService subjectService, ScoreRateService scoreRateService,
-            MarkLibraryService libraryService, MarkService markService) {
+            MarkService markService, MarkGroupService groupService) {
         this.examId = examId;
         this.lockService = lockService;
         this.studentService = studentService;
         this.questionService = questionService;
         this.subjectService = subjectService;
         this.scoreRateService = scoreRateService;
-        this.libraryService = libraryService;
         this.markService = markService;
+        this.groupService = groupService;
         this.objectiveMap = new HashMap<String, List<ExamQuestion>>();
         this.subjectiveMap = new HashMap<String, List<ExamQuestion>>();
         this.scoreRateMap = new HashMap<String, Double>();
@@ -90,12 +89,11 @@ public class ScoreCalculateThread implements Runnable {
                 pageNumber++;
                 list = studentService.findByExamIdAndUploadAndAbsent(examId, true, false, pageNumber, pageSize);
             }
+
             // 统计各科目下每题得分率,主观题评卷完成才统计
-            double total = libraryService.countByExamAndSubjectAndGroupAndStatus(examId, null, 0, null);
-            double finish = libraryService.countByExamAndSubjectAndGroupAndStatus(examId, null, 0,
-                    LibraryStatus.MARKED);
-            double percent = total > 0 ? (finish * 100 / total) : 0;
-            if (percent >= 100) {
+            double total = groupService.sumLibraryCount(examId);
+            double finish = groupService.sumMarkedCount(examId);
+            if (total == finish) {
                 statistics();
             }
         } catch (Exception e) {
@@ -147,46 +145,51 @@ public class ScoreCalculateThread implements Runnable {
     }
 
     private void calculate(ExamStudent student) {
-        ScoreCalculateUtil util = ScoreCalculateUtil.instance(student);
-        ScoreInfo info = util.calculate(findQuestionList(student.getSubjectCode(), true), null);
+        try {
+            ScoreCalculateUtil util = ScoreCalculateUtil.instance(student);
+            ScoreInfo info = util.calculate(findQuestionList(student.getSubjectCode(), true), null);
 
-        student.setObjectiveScore(info.getObjectiveScore());
-        student.setScoreList(info.getScoreList(), true);
+            student.setObjectiveScore(info.getObjectiveScore());
+            student.setScoreList(info.getScoreList(), true);
 
-        studentService.save(student);
-        // 增加主观题总分统计
-        markService.scoreCalculate(student.getExamId(), student.getSubjectCode(), student.getId());
+            studentService.save(student);
 
-        try {
-            if (!student.getScoreList(false).isEmpty()) {// 主观题有分数明细才统分
-                statistics(student);
-            }
+            // 增加主观题总分统计
+            markService.scoreCalculate(student.getExamId(), student.getSubjectCode(), student.getId());
+
+            // 主观题得分统计
+            // 需要重新从数据库读取一遍考生信息
+            statistics(studentService.findById(student.getId()));
         } catch (Exception e) {
             log.error("statistic error", e);
         }
     }
 
     private void statistics(ExamStudent student) {
-        Set<String> campusNames = campusNameMap.get(student.getSubjectCode());
-        if (campusNames == null || campusNames.isEmpty()) {
-            campusNames = new HashSet<>();
-            campusNames.add(student.getCampusName());
-        } else {
-            campusNames.add(student.getCampusName());
-        }
-        this.campusNameMap.put(student.getSubjectCode(), campusNames);
         List<ScoreItem> items = student.getScoreList(false);
+        if (items.isEmpty()) {
+            return;
+        }
         List<ExamQuestion> list = this.findQuestionList(student.getSubjectCode(), false);
-        for (int i = 0; i < list.size(); i++) {
-            ScoreItem scoreItem = items.get(i);
-            String key = getKey(student.getSubjectCode(), student.getCampusName(), list.get(i).getQuestionNumber());
-            Double totalScore = scoreRateMap.get(key);
-            if (totalScore == null) {
-                scoreRateMap.put(key, scoreItem.getScore());
-            } else {
-                scoreRateMap.put(key, totalScore + scoreItem.getScore());
+        int count = list.size();
+        for (int i = 0; i < count; i++) {
+            ScoreItem scoreItem = items.size() > i ? items.get(i) : null;
+            if (scoreItem != null) {
+                String key = getKey(student.getSubjectCode(), student.getCampusName(), list.get(i).getQuestionNumber());
+                Double totalScore = scoreRateMap.get(key);
+                if (totalScore == null) {
+                    scoreRateMap.put(key, scoreItem.getScore());
+                } else {
+                    scoreRateMap.put(key, totalScore + scoreItem.getScore());
+                }
             }
         }
+        Set<String> campusNames = campusNameMap.get(student.getSubjectCode());
+        if (campusNames == null) {
+            campusNames = new HashSet<>();
+            campusNameMap.put(student.getSubjectCode(), campusNames);
+        }
+        campusNames.add(student.getCampusName());
     }
 
     private String getKey(String subjectCode, String campusName, String questionNumber) {

+ 7 - 1
stmms-web/src/main/webapp/static/mark-new/js/modules/specialTag.js

@@ -85,6 +85,12 @@ SpecialTag.prototype.init = function() {
         		$(this).addClass('selected');
         	}
         }
+        if(self.tagName != undefined){
+        	self.markControl.trigger('special.tag.enable');
+        }else{
+        	self.markControl.trigger('special.tag.disable');
+        }
+        
     });
     this.container.find('#undo-button').click(function(){
     	if(self.task!=undefined){
@@ -116,12 +122,12 @@ SpecialTag.prototype.init = function() {
 SpecialTag.prototype.toggle = function(show) {
     if (show == true) {
         this.show = true;
-        this.markControl.trigger('special.tag.enable');
         this.container.show();
     } else {
         this.show = false;
         this.markControl.trigger('special.tag.disable')
         this.container.hide();
+        this.onclickList.find('a').removeClass('selected');
     }
 }
 

+ 7 - 7
stmms-web/src/main/webapp/static/mark-track/js/mark-control.js

@@ -497,13 +497,13 @@ MarkControl.prototype.submitTask = function(submitUrl) {
 
     if (task != undefined && this.context.submitting != true) {
     	
-        //开启强制标记
-        if(this.option.forceSpecialTag===true){
-        	if(task.tagList==undefined ||task.tagList==null ||task.tagList.length <= 0){
-        		markControl.trigger('task.submit.forceSpecialTag');
-        		return;
-        	}
-        }
+//开启强制标记
+//        if(this.option.forceSpecialTag===true){
+//        	if(task.tagList==undefined ||task.tagList==null ||task.tagList.length <= 0){
+//        		markControl.trigger('task.submit.forceSpecialTag');
+//        		return;
+//        	}
+//        }
         
         var submitObj = $.extend(true, {}, task);
         submitObj.markStepList = undefined;

+ 3 - 3
stmms-web/src/main/webapp/static/mark-track/js/modules/mark-history.js

@@ -84,11 +84,11 @@ MarkHistory.prototype.init = function() {
 	this.container.header = getDom(this.header_dom, this.markControl).appendTo(this.container);
 	this.container.paginator = getDom(this.paginator_dom, this.markControl).appendTo(this.container);
 	this.container.list = getDom(this.history_list_dom, this.markControl).appendTo(this.container).find('#history-list');
-
+	var self = this;
 	this.container.header.find('#close-history-button').click(this, function(event) {
 		event.data.toggle(false);
-		this.markControl.context.task = undefined;
-		this.markControl.getTask();
+		self.markControl.context.task = undefined;
+		self.markControl.getTask();
 	})
 	this.container.paginator.find('#last-page-button').click(this, function(event) {
 		var markHistory = event.data;