yin 10 meses atrás
pai
commit
6f02eb4507

+ 3 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamStudentDao.java

@@ -235,7 +235,7 @@ public interface ExamStudentDao
     @Query("select sum(s.sheetCount) from ExamStudent s where s.examId=?1 and s.subjectCode=?2 ")
     public Long sumSheetCountByExamIdAndSubjectCode(int examId, String subjectCode);
 
-    @Query("select distinct m.subjectCode from ExamStudent m where m.examId=?1 and m.inspected=0 and m.upload=true and m.absent=false and m.breach=false ")
+    @Query("select distinct m.subjectCode from ExamStudent m where m.examId=?1 and m.inspected=false and m.upload=true and m.absent=false and m.breach=false ")
     Set<String> findSubjectUnInspectedByExamId(int examId);
     
     @Query("select distinct m.subjectCode from ExamStudent m where m.examId=?1 and m.subjectiveStatus='MARKED' and m.upload=true and m.absent=false and m.breach=false ")
@@ -316,4 +316,6 @@ public interface ExamStudentDao
     @Modifying
     @Query("update ExamStudent s set s.objectivePageCount=?2 where s.id=?1")
 	public int updateObjectivePageCount(Integer id, Integer objectivePageCount);
+    @Query("select s.id from ExamStudent s where s.examId=?1 and s.subjectCode=?2 and s.subjectiveStatus =?3 and s.upload=?4 and s.absent=?5 and s.breach=?6  ")
+    List<Integer> findIdByExamIdAndSubjectCodeAndSubjectiveStatusAndUploadAndAbsentAndBreach(Integer examId, String subjectCode, SubjectiveStatus status, boolean uplaod, boolean absent, boolean breach);
 }

+ 2 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ExamStudentService.java

@@ -228,4 +228,6 @@ public interface ExamStudentService {
 	long countSubjectiveByExamId(Integer examId);
 
 	long countAllUploadByExamId(Integer examId);
+
+    List<Integer> findIdByExamIdAndSubjectCodeAndSubjectiveStatusAndUploadAndAbsentAndBreach(Integer examId, String subjectCode, SubjectiveStatus status,boolean isuplaod,boolean absent,boolean breach);
 }

+ 5 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamStudentServiceImpl.java

@@ -1292,6 +1292,11 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
         return count == null ? 0 : count;
     }
 
+    @Override
+    public List<Integer> findIdByExamIdAndSubjectCodeAndSubjectiveStatusAndUploadAndAbsentAndBreach(Integer examId, String subjectCode, SubjectiveStatus status, boolean uplaod, boolean absent, boolean breach) {
+        return studentDao.findIdByExamIdAndSubjectCodeAndSubjectiveStatusAndUploadAndAbsentAndBreach(examId, subjectCode, status,uplaod,absent,breach);
+    }
+
     @Override
     public long countSubjectiveByExamId(Integer examId) {
         Long count = studentDao.sumSubjectiveByExamId(examId);

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

@@ -818,15 +818,7 @@ public class MarkServiceImpl implements MarkService {
             List<ScoreItem> scoreItemList2 = list.get(2).getMarkerScoreItem();
             for (int j = 0; j < questionList.size(); j++) {
                 Double arbitrateThreshold = questionList.get(j).getArbitrateThreshold();
-                if(scoreItemList.get(j).getScore()==UN_SELECTIVE_SCORE
-                        && scoreItemList1.get(j).getScore()==UN_SELECTIVE_SCORE
-                        && scoreItemList2.get(j).getScore()==UN_SELECTIVE_SCORE){
-                    continue;
-                }else if(scoreItemList.get(j).getScore()==UN_SELECTIVE_SCORE
-                        || scoreItemList1.get(j).getScore()==UN_SELECTIVE_SCORE
-                        || scoreItemList2.get(j).getScore()==UN_SELECTIVE_SCORE){
-                    arbitrateIndex.add(j + 1);
-                }else if (Math.abs(scoreItemList.get(j).getScore() - scoreItemList1.get(j).getScore()) > arbitrateThreshold
+                if (Math.abs(scoreItemList.get(j).getScore() - scoreItemList1.get(j).getScore()) > arbitrateThreshold
                         && Math.abs(scoreItemList1.get(j).getScore()
                                 - scoreItemList2.get(j).getScore()) > arbitrateThreshold
                         && Math.abs(scoreItemList2.get(j).getScore()
@@ -1117,27 +1109,14 @@ public class MarkServiceImpl implements MarkService {
                     partScoreMap.put(part, partScore.doubleValue());
                 }
             }
-//            判断少选做、多选做、未选做
-            if (partScoreList.size() > 0 && partScoreList.size() < selectiveCount) {
-                lessSelective = true;
-            }
-            if (partScoreList.size() > 0 && partScoreList.size() > selectiveCount) {
-                mutiSelective = true;
-            }
-            if (partScoreList.size() == 0) {
-                notSelective = true;
-            }
-//        从小到大排序
             Collections.sort(partScoreList);
-
             if (policy == null || ScorePolicy.MAX.equals(policy)) {
-                //        最高分从大到小排序
                 Collections.reverse(partScoreList);
             }  if (ScorePolicy.MIN_WITHOUT_ZERO.equals(policy)) {
-                //剔除0分,当part分数多余,从第一个0分开始剔除,直至满足数量
                 while(partScoreList.size()>selectiveCount && partScoreList.get(0)==0){
                     partScoreList.remove(0);
                 }
+//                partScoreList = partScoreList.stream().filter(s -> s.doubleValue() > 0).collect(Collectors.toList());
             }
             // 计算一个选做题分组得分
             for (int i = 0; i < partScoreList.size(); i++) {
@@ -1155,7 +1134,6 @@ public class MarkServiceImpl implements MarkService {
                     }
                 }
             }
-            //剩余未合分的part
             for (Integer part : partScoreMap.keySet()) {
                 List<SelectiveGroup> selectiveGroups = partMap.get(part);
                 for (SelectiveGroup group : selectiveGroups) {
@@ -1165,6 +1143,15 @@ public class MarkServiceImpl implements MarkService {
                     }
                 }
             }
+            if (partScoreList.size() > 0 && partScoreList.size() < selectiveCount) {
+                lessSelective = true;
+            }
+            if (partScoreList.size() > 0 && partScoreList.size() > selectiveCount) {
+                mutiSelective = true;
+            }
+            if (partScoreList.size() == 0) {
+                notSelective = true;
+            }
         }
         // 统一更新得分详情
         for (List<SubjectiveScore> mainScoreList : mainScoreMap.values()) {
@@ -1589,6 +1576,7 @@ public class MarkServiceImpl implements MarkService {
      * @param studentId
      */
     @Override
+    @Transactional
     public void checkStudentSubjective(Integer studentId, long groupCount, long unGroupQuestionCount) {
         if (groupStudentDao.countByStudentIdAndStatus(studentId, SubjectiveStatus.MARKED) == groupCount
                 && unGroupQuestionCount == 0) {

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

@@ -322,8 +322,8 @@ public class MarkGroupController extends BaseExamController {
                         return;
                     }
                     groupCount = groupService.countByExamAndSubject(group.getExamId(), group.getSubjectCode());
-                    List<Integer> studentList = studentService.findIdByExamIdAndSubjectCodeAndSubjectiveStatus(
-                            group.getExamId(), group.getSubjectCode(), SubjectiveStatus.UNMARK);
+                    List<Integer> studentList = studentService.findIdByExamIdAndSubjectCodeAndSubjectiveStatusAndUploadAndAbsentAndBreach(group.getExamId(), group.getSubjectCode(),
+                            SubjectiveStatus.UNMARK,true,false,false);
                     for (Integer studentId : studentList) {
                         lockService.waitlock(LockType.STUDENT, studentId);
                         markService.checkStudentSubjective(studentId, groupCount, unGroupQuestionCount);