Ver código fonte

成绩报告

xiatian 1 ano atrás
pai
commit
194eff56a9

+ 7 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/archivescore/ScoreRangeVo.java

@@ -29,5 +29,12 @@ public class ScoreRangeVo {
 	public void setRate(Double rate) {
 		this.rate = rate;
 	}
+	public ScoreRangeVo(Integer studentCount, Double minScore, Double maxScore, Double rate) {
+		super();
+		this.studentCount = studentCount;
+		this.minScore = minScore;
+		this.maxScore = maxScore;
+		this.rate = rate;
+	}
 	
 }

+ 21 - 6
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkStudentMapper.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.teachcloud.mark.bean.archivescore.ArchiveStudentQuery;
 import com.qmth.teachcloud.mark.bean.archivescore.ArchiveStudentVo;
+import com.qmth.teachcloud.mark.bean.archivescore.OverViewVo;
 import com.qmth.teachcloud.mark.bean.scananswer.AnswerQueryDomain;
 import com.qmth.teachcloud.mark.bean.scananswer.AnswerQueryVo;
 import com.qmth.teachcloud.mark.bean.student.StudentQuery;
@@ -25,19 +26,33 @@ import java.util.List;
  */
 public interface MarkStudentMapper extends BaseMapper<MarkStudent> {
 
-    IPage<StudentScoreDetailDto> pageStudentScore(@Param("page") Page<StudentScoreDetailDto> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("college") String college, @Param("className") String className, @Param("teacher") String teacher, @Param("filter") Integer filter, @Param("absent") Boolean absent, @Param("breach") Boolean breach, @Param("startScore") Double startScore, @Param("endScore") Double endScore, @Param("subScore") Double subScore, @Param("objectiveScoreLt") Double objectiveScoreLt, @Param("studentName") String studentName, @Param("studentCode") String studentCode);
+	IPage<StudentScoreDetailDto> pageStudentScore(@Param("page") Page<StudentScoreDetailDto> page,
+			@Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("college") String college,
+			@Param("className") String className, @Param("teacher") String teacher, @Param("filter") Integer filter,
+			@Param("absent") Boolean absent, @Param("breach") Boolean breach, @Param("startScore") Double startScore,
+			@Param("endScore") Double endScore, @Param("subScore") Double subScore,
+			@Param("objectiveScoreLt") Double objectiveScoreLt, @Param("studentName") String studentName,
+			@Param("studentCode") String studentCode);
 
-    List<MarkStudent> listAbsentOrBreachMarkTaskStudent(@Param("examId") Long examId, @Param("paperNumber") String paperNumber);
+	List<MarkStudent> listAbsentOrBreachMarkTaskStudent(@Param("examId") Long examId,
+			@Param("paperNumber") String paperNumber);
 
-    IPage<MarkStudent> listUnMarkTaskStudent(@Param("page") Page<MarkStudent> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber);
+	IPage<MarkStudent> listUnMarkTaskStudent(@Param("page") Page<MarkStudent> page, @Param("examId") Long examId,
+			@Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber);
 
 	StudentVo findOne(@Param("req") StudentQuery query);
 
-	IPage<AnswerQueryVo> queryPage(Page<AnswerQueryVo> page,@Param("query") AnswerQueryDomain query);
+	IPage<AnswerQueryVo> queryPage(Page<AnswerQueryVo> page, @Param("query") AnswerQueryDomain query);
 
 	List<String> querySummary(@Param("query") AnswerQueryDomain query);
 
-    List<Long> findIdByExamIdAndPaperNumberAndSubjectiveStatus(@Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("unmark") String unmark, @Param("marked") String marked);
+	List<Long> findIdByExamIdAndPaperNumberAndSubjectiveStatus(@Param("examId") Long examId,
+			@Param("paperNumber") String paperNumber, @Param("unmark") String unmark, @Param("marked") String marked);
 
-	List<ArchiveStudentVo> studentList(@Param("req")ArchiveStudentQuery query);
+	List<ArchiveStudentVo> studentList(@Param("req") ArchiveStudentQuery query);
+
+	OverViewVo overview(@Param("examId") Long examId, @Param("paperNumber") String paperNumber);
+
+	int getCountByScoreRange(@Param("examId") Long examId, @Param("paperNumber") String paperNumber,
+			@Param("start") Double start, @Param("end") Double end);
 }

+ 50 - 2
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java

@@ -41,6 +41,7 @@ import com.qmth.teachcloud.mark.bean.UpdateTimeVo;
 import com.qmth.teachcloud.mark.bean.archivescore.ArchiveStudentQuery;
 import com.qmth.teachcloud.mark.bean.archivescore.ArchiveStudentVo;
 import com.qmth.teachcloud.mark.bean.archivescore.ScanPaperPageVo;
+import com.qmth.teachcloud.mark.bean.archivescore.ScoreRangeVo;
 import com.qmth.teachcloud.mark.bean.archivescore.ScoreReportVo;
 import com.qmth.teachcloud.mark.bean.omredit.OmrEditDomain;
 import com.qmth.teachcloud.mark.bean.omredit.OmrEditPaper;
@@ -89,6 +90,7 @@ import com.qmth.teachcloud.mark.service.ScanPaperService;
 import com.qmth.teachcloud.mark.service.ScanStudentPaperService;
 import com.qmth.teachcloud.mark.service.TaskService;
 import com.qmth.teachcloud.mark.utils.BatchGetDataUtil;
+import com.qmth.teachcloud.mark.utils.Calculator;
 import com.qmth.teachcloud.mark.utils.ScoreCalculateUtil;
 
 /**
@@ -804,7 +806,53 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
 
 	@Override
 	public ScoreReportVo scoreReport(Long examId, String paperNumber) {
-		// TODO Auto-generated method stub
-		return null;
+		ScoreReportVo ret=new ScoreReportVo();
+		ret.setOverview(baseMapper.overview(examId,paperNumber));
+		if(ret.getOverview()!=null) {
+			double total=ret.getOverview().getStudentCount()-ret.getOverview().getAbsentCount();
+			ret.getOverview().setPassRate(Calculator.divide2String(Calculator.multiply(ret.getOverview().getPassCount(), 100),total, 2)+"%");
+			ret.getOverview().setExcellentRate(Calculator.divide2String(Calculator.multiply(ret.getOverview().getExcellentCount(), 100),total, 2)+"%");
+		}
+		fillScoreRange(ret, examId, paperNumber);
+		ret.setOverview(baseMapper.overview(examId,paperNumber));
+		return ret;
+	}
+	
+	private void fillScoreRange(ScoreReportVo ret,Long examId, String paperNumber) {
+		int toltal=getCountByPaperNumber(examId, paperNumber);
+		List<ScoreRangeVo> scoreRange=new ArrayList<>();
+		ret.setScoreRange(scoreRange);
+		scoreRange.add(getScoreRangeVo(toltal, examId, paperNumber, 1.0, 9.5));
+		scoreRange.add(getScoreRangeVo(toltal, examId, paperNumber, 10.0, 19.5));
+		scoreRange.add(getScoreRangeVo(toltal, examId, paperNumber, 20.0, 29.5));
+		scoreRange.add(getScoreRangeVo(toltal, examId, paperNumber, 30.0, 39.5));
+		scoreRange.add(getScoreRangeVo(toltal, examId, paperNumber, 40.0, 49.5));
+		scoreRange.add(getScoreRangeVo(toltal, examId, paperNumber, 50.0, 59.5));
+		scoreRange.add(getScoreRangeVo(toltal, examId, paperNumber, 60.0, 69.5));
+		scoreRange.add(getScoreRangeVo(toltal, examId, paperNumber, 70.0, 79.5));
+		scoreRange.add(getScoreRangeVo(toltal, examId, paperNumber, 80.0, 89.5));
+		scoreRange.add(getScoreRangeVo(toltal, examId, paperNumber, 90.0, 100.0));
+	}
+	
+	private ScoreRangeVo getScoreRangeVo(int toltal,Long examId, String paperNumber,Double start,Double end) {
+		int count=getCount(examId, paperNumber, start, end);
+		Double rate=null;
+		if(toltal!=0) {
+			rate=Calculator.multiply(count, toltal, 2);
+		}
+		ScoreRangeVo vo=new ScoreRangeVo(count, start, end, rate);
+		return vo;
+	}
+	
+	private int getCountByPaperNumber(Long examId, String paperNumber) {
+		QueryWrapper<MarkStudent> wrapper = new QueryWrapper<>();
+        LambdaQueryWrapper<MarkStudent> lw = wrapper.lambda();
+        lw.eq(MarkStudent::getExamId, examId);
+        lw.eq(MarkStudent::getPaperNumber, paperNumber);
+        return this.count(wrapper);
+	}
+	
+	private int getCount(Long examId, String paperNumber,Double start,Double end) {
+		return baseMapper.getCountByScoreRange(examId,paperNumber,start,end);
 	}
 }

+ 24 - 1
teachcloud-mark/src/main/resources/mapper/MarkStudentMapper.xml

@@ -254,5 +254,28 @@
         </if>
         order by t.id
     </select>
-    
+    <select id="overview" resultType="com.qmth.teachcloud.mark.bean.archivescore.OverViewVo">
+        SELECT 
+        count(*) studentCount,
+        sum(case when s.is_absent =1 then 0 else 1 end) actualCount,
+        sum(case when s.is_absent =1 then 1 else 0 end) absentCount,
+        sum(case when s.is_breach =1 then 1 else 0 end) breachCount,
+        avg(case when s.is_absent !=1 then s.objective_score+s.subjective_score else null end) avgScore,
+        max(case when s.is_absent !=1 then s.objective_score+s.subjective_score else null end) maxScore,
+        min(case when s.is_absent !=1 then s.objective_score+s.subjective_score else null end) minScore,
+        sum(case when s.objective_score+s.subjective_score >=t.pass_score then 1 else 0 end) passCount,
+        sum(case when s.objective_score+s.subjective_score >=t.excellent_score then 1 else 0 end) excellentCount
+        FROM mark_student s 
+        WHERE
+            s.exam_id = #{req.examId} and s.paper_number = #{req.paperNumber} 
+    </select>
+    <select id="getCountByScoreRange" resultType="int">
+        SELECT 
+        count(*) 
+        FROM mark_student s 
+        WHERE
+            s.exam_id = #{examId} and s.paper_number = #{paperNumber} 
+            and s.is_absent !=1 and s.objective_score+s.subjective_score&gt;=#{start}
+            and s.objective_score+s.subjective_score&lt;=#{end}
+    </select>
 </mapper>