Răsfoiți Sursa

成绩报告

xiatian 1 an în urmă
părinte
comite
a2bcdfbfa3

+ 10 - 3
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/archivescore/QuestionVo.java

@@ -4,9 +4,10 @@ public class QuestionVo {
 	private Integer studentCount;
 	private Integer scoreCount;
 	private Integer fullScoreCount;
+	private Double scoreSum;
 	private String title;
 	private Integer mainNumber;
-	private String subNumber;
+	private Integer subNumber;
 	private Double score;
 	private Double avgScore;
 	private Double scoreRate;
@@ -23,10 +24,10 @@ public class QuestionVo {
 	public void setMainNumber(Integer mainNumber) {
 		this.mainNumber = mainNumber;
 	}
-	public String getSubNumber() {
+	public Integer getSubNumber() {
 		return subNumber;
 	}
-	public void setSubNumber(String subNumber) {
+	public void setSubNumber(Integer subNumber) {
 		this.subNumber = subNumber;
 	}
 	public Double getScore() {
@@ -72,6 +73,12 @@ public class QuestionVo {
 	public void setFullScoreCount(Integer fullScoreCount) {
 		this.fullScoreCount = fullScoreCount;
 	}
+	public Double getScoreSum() {
+		return scoreSum;
+	}
+	public void setScoreSum(Double scoreSum) {
+		this.scoreSum = scoreSum;
+	}
 	
 	
 }

+ 11 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/ScoreItem.java

@@ -15,7 +15,7 @@ public class ScoreItem {
     private Integer subNumber;
 
     private String title;
-
+    private Double totalScore;
     private Double score;
 
     private String answer;
@@ -108,4 +108,14 @@ public class ScoreItem {
             return "";
         }
     }
+
+	public Double getTotalScore() {
+		return totalScore;
+	}
+
+	public void setTotalScore(Double totalScore) {
+		this.totalScore = totalScore;
+	}
+    
+    
 }

+ 1 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkStudent.java

@@ -599,6 +599,7 @@ public class MarkStudent implements Serializable {
                 item.setObjective(objective);
                 item.setMainNumber(question.getMainNumber());
                 item.setTitle(question.getMainTitle());
+                item.setTotalScore(question.getTotalScore());
                 item.setSubNumber(question.getSubNumber());
                 if (item != null) {
                     scoreList.add(item);

+ 71 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java

@@ -2,6 +2,8 @@ package com.qmth.teachcloud.mark.service.impl;
 
 import java.text.DecimalFormat;
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -61,6 +63,7 @@ import com.qmth.teachcloud.mark.bean.student.AbsentManualUpdateVo;
 import com.qmth.teachcloud.mark.bean.student.StudentQuery;
 import com.qmth.teachcloud.mark.bean.student.StudentVo;
 import com.qmth.teachcloud.mark.dto.mark.ScoreInfo;
+import com.qmth.teachcloud.mark.dto.mark.ScoreItem;
 import com.qmth.teachcloud.mark.dto.mark.manage.Task;
 import com.qmth.teachcloud.mark.dto.mark.score.SheetUrlDto;
 import com.qmth.teachcloud.mark.dto.mark.score.StudentObjectiveAnswerDto;
@@ -858,6 +861,8 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
 			}
 		}
 		
+		fillObjective(ret, examId, paperNumber);
+		
 		ret.setSubjective(markSubjectiveScoreService.getSubjectiveVo(examId, paperNumber));
 		if (CollectionUtils.isNotEmpty(ret.getSubjective())) {
 			for (QuestionVo vo : ret.getSubjective()) {
@@ -868,7 +873,73 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
 		}
 		return ret;
 	}
+	
+	private void fillObjective(ScoreReportVo ret, Long examId, String paperNumber) {
+		List<MarkQuestion> qs=markQuestionService.listQuestionByExamIdAndPaperNumber(examId, paperNumber);
+		List<MarkStudent> students=listByExamIdAndPaperNumberAndAbsent(examId, paperNumber, false);
+		Map<String,QuestionVo> map=new HashMap<>();
+		for(MarkStudent s:students) {
+			List<ScoreItem> sis=s.getScoreList(true, qs);
+			if(CollectionUtils.isNotEmpty(sis)) {
+				for(ScoreItem si:sis) {
+					String key=si.getMainNumber()+"-"+si.getSubNumber();
+					QuestionVo vo=map.get(key);
+					if(vo==null) {
+						vo=new QuestionVo();
+						vo.setScoreCount(0);
+						vo.setFullScoreCount(0);
+						vo.setStudentCount(0);
+						vo.setScoreSum(0.0);
+						vo.setTitle(si.getTitle());
+						vo.setScore(si.getTotalScore());
+						map.put(key, vo);
+					}
+					vo.setStudentCount(vo.getStudentCount()+1);
+					vo.setScoreSum(vo.getScoreSum()+si.getScore());
+					if(si.getScore()==si.getTotalScore()) {
+						vo.setFullScoreCount(vo.getFullScoreCount()+1);
+					}
+					if(si.getScore()>0) {
+						vo.setScoreCount(vo.getScoreCount()+1);
+					}
+				}
+			}
+		}
+		if(map.isEmpty()) {
+			return;
+		}
+		List<QuestionVo> list=new ArrayList<>(map.values());
+		Collections.sort(list, new Comparator<QuestionVo>() {
+
+			@Override
+			public int compare(QuestionVo o1, QuestionVo o2) {
+				if (o1.getMainNumber() > o2.getMainNumber()) {
+					return 1;
+				} else if (o1.getSubNumber() < o2.getSubNumber()) {
+					return -1;
+				} else {
+					return 0;
+				}
+			}
 
+		});
+		for (QuestionVo vo : list) {
+			double total = vo.getStudentCount();
+			vo.setScoreRate(Calculator.divide(vo.getScoreCount(), total, 2));
+			vo.setFullScoreRate(Calculator.divide(vo.getFullScoreCount(), total, 2));
+		}
+		ret.setObjective(list);
+	}
+	private List<MarkStudent> listByExamIdAndPaperNumberAndAbsent(Long examId,String paperNumber,Boolean absent) {
+		QueryWrapper<MarkStudent> wrapper = new QueryWrapper<>();
+		LambdaQueryWrapper<MarkStudent> lw = wrapper.lambda();
+		lw.eq(MarkStudent::getExamId, examId);
+		lw.eq(MarkStudent::getPaperNumber, paperNumber);
+		if(absent!=null) {
+			lw.eq(MarkStudent::getAbsent, absent);
+		}
+		return this.list(wrapper);
+	}
 	private void fillScoreRange(ScoreReportVo ret, Long examId, String paperNumber) {
 		int toltal = getCountByPaperNumber(examId, paperNumber);
 		List<ScoreRangeVo> scoreRange = new ArrayList<>();

+ 1 - 0
teachcloud-mark/src/main/resources/mapper/MarkSubjectiveScoreMapper.xml

@@ -28,5 +28,6 @@
         WHERE
             s.exam_id = #{req.examId} and s.paper_number = #{req.paperNumber} 
         group by t.main_title  title,t.main_number,t.sub_number,t.total_score
+        order by t.main_number,t.sub_number
     </select>
 </mapper>