Browse Source

Merge remote-tracking branch 'origin/dev_v3.3.0' into dev_v3.3.0

# Conflicts:
#	teachcloud-mark/src/main/resources/mapper/MarkStudentMapper.xml
xiaofei 1 year ago
parent
commit
12c4671e38

+ 14 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/archivescore/ClassVo.java

@@ -1,6 +1,8 @@
 package com.qmth.teachcloud.mark.bean.archivescore;
 
 public class ClassVo {
+	private Integer studentCount;
+	private Integer absentCount;
 	private String className;
 	private Double avgScore;
 	private Double maxScore;
@@ -59,5 +61,17 @@ public class ClassVo {
 	public void setExcellentRate(String excellentRate) {
 		this.excellentRate = excellentRate;
 	}
+	public Integer getStudentCount() {
+		return studentCount;
+	}
+	public void setStudentCount(Integer studentCount) {
+		this.studentCount = studentCount;
+	}
+	public Integer getAbsentCount() {
+		return absentCount;
+	}
+	public void setAbsentCount(Integer absentCount) {
+		this.absentCount = absentCount;
+	}
 	
 }

+ 14 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/archivescore/CollegeVo.java

@@ -2,6 +2,8 @@ package com.qmth.teachcloud.mark.bean.archivescore;
 
 public class CollegeVo {
 	private String college;
+	private Integer studentCount;
+	private Integer absentCount;
 	private Double avgScore;
 	private Double maxScore;
 	private Double minScore;
@@ -57,5 +59,17 @@ public class CollegeVo {
 	public void setExcellentRate(String excellentRate) {
 		this.excellentRate = excellentRate;
 	}
+	public Integer getStudentCount() {
+		return studentCount;
+	}
+	public void setStudentCount(Integer studentCount) {
+		this.studentCount = studentCount;
+	}
+	public Integer getAbsentCount() {
+		return absentCount;
+	}
+	public void setAbsentCount(Integer absentCount) {
+		this.absentCount = absentCount;
+	}
 	
 }

+ 27 - 5
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/archivescore/QuestionVo.java

@@ -1,12 +1,15 @@
 package com.qmth.teachcloud.mark.bean.archivescore;
 
 public class QuestionVo {
+	private Integer studentCount;
+	private Integer scoreCount;
+	private Integer fullScoreCount;
 	private String title;
 	private Integer mainNumber;
 	private String subNumber;
 	private Double score;
 	private Double avgScore;
-	private Double socreRate;
+	private Double scoreRate;
 	private Double fullScoreRate;
 	public String getTitle() {
 		return title;
@@ -38,11 +41,12 @@ public class QuestionVo {
 	public void setAvgScore(Double avgScore) {
 		this.avgScore = avgScore;
 	}
-	public Double getSocreRate() {
-		return socreRate;
+	
+	public Double getScoreRate() {
+		return scoreRate;
 	}
-	public void setSocreRate(Double socreRate) {
-		this.socreRate = socreRate;
+	public void setScoreRate(Double scoreRate) {
+		this.scoreRate = scoreRate;
 	}
 	public Double getFullScoreRate() {
 		return fullScoreRate;
@@ -50,6 +54,24 @@ public class QuestionVo {
 	public void setFullScoreRate(Double fullScoreRate) {
 		this.fullScoreRate = fullScoreRate;
 	}
+	public Integer getStudentCount() {
+		return studentCount;
+	}
+	public void setStudentCount(Integer studentCount) {
+		this.studentCount = studentCount;
+	}
+	public Integer getScoreCount() {
+		return scoreCount;
+	}
+	public void setScoreCount(Integer scoreCount) {
+		this.scoreCount = scoreCount;
+	}
+	public Integer getFullScoreCount() {
+		return fullScoreCount;
+	}
+	public void setFullScoreCount(Integer fullScoreCount) {
+		this.fullScoreCount = fullScoreCount;
+	}
 	
 	
 }

+ 6 - 5
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/archivescore/ScoreReportVo.java

@@ -8,7 +8,7 @@ public class ScoreReportVo {
 
 	private List<ScoreRangeVo> scoreRange;
 	
-	private List<CollegeVo> collegeVo;
+	private List<CollegeVo> college;
 	
 	private List<ClassVo> classData;
 	
@@ -34,12 +34,12 @@ public class ScoreReportVo {
 		this.scoreRange = scoreRange;
 	}
 
-	public List<CollegeVo> getCollegeVo() {
-		return collegeVo;
+	public List<CollegeVo> getCollege() {
+		return college;
 	}
 
-	public void setCollegeVo(List<CollegeVo> collegeVo) {
-		this.collegeVo = collegeVo;
+	public void setCollege(List<CollegeVo> college) {
+		this.college = college;
 	}
 
 	public List<ClassVo> getClassData() {
@@ -73,6 +73,7 @@ public class ScoreReportVo {
 	public void setSubjective(List<QuestionVo> subjective) {
 		this.subjective = subjective;
 	}
+
 	
 	
 	

+ 14 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/archivescore/TeacherVo.java

@@ -1,6 +1,8 @@
 package com.qmth.teachcloud.mark.bean.archivescore;
 
 public class TeacherVo {
+	private Integer studentCount;
+	private Integer absentCount;
 	private String teacher;
 	private Double avgScore;
 	private Double maxScore;
@@ -59,5 +61,17 @@ public class TeacherVo {
 	public void setExcellentRate(String excellentRate) {
 		this.excellentRate = excellentRate;
 	}
+	public Integer getStudentCount() {
+		return studentCount;
+	}
+	public void setStudentCount(Integer studentCount) {
+		this.studentCount = studentCount;
+	}
+	public Integer getAbsentCount() {
+		return absentCount;
+	}
+	public void setAbsentCount(Integer absentCount) {
+		this.absentCount = absentCount;
+	}
 	
 }

+ 7 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkStudentMapper.java

@@ -5,7 +5,10 @@ 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.ClassVo;
+import com.qmth.teachcloud.mark.bean.archivescore.CollegeVo;
 import com.qmth.teachcloud.mark.bean.archivescore.OverViewVo;
+import com.qmth.teachcloud.mark.bean.archivescore.TeacherVo;
 import com.qmth.teachcloud.mark.bean.scananswer.AnswerQueryDomain;
 import com.qmth.teachcloud.mark.bean.scananswer.AnswerQueryVo;
 import com.qmth.teachcloud.mark.bean.student.StudentQuery;
@@ -55,4 +58,8 @@ public interface MarkStudentMapper extends BaseMapper<MarkStudent> {
 
 	int getCountByScoreRange(@Param("examId") Long examId, @Param("paperNumber") String paperNumber,
 			@Param("start") Double start, @Param("end") Double end);
+
+	List<CollegeVo> college(@Param("examId") Long examId, @Param("paperNumber") String paperNumber);
+	List<ClassVo> classData(@Param("examId") Long examId, @Param("paperNumber") String paperNumber);
+	List<TeacherVo> teacher(@Param("examId") Long examId, @Param("paperNumber") String paperNumber);
 }

+ 8 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkSubjectiveScoreMapper.java

@@ -1,6 +1,12 @@
 package com.qmth.teachcloud.mark.mapper;
 
+import com.qmth.teachcloud.mark.bean.archivescore.QuestionVo;
 import com.qmth.teachcloud.mark.entity.MarkSubjectiveScore;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 /**
@@ -13,4 +19,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface MarkSubjectiveScoreMapper extends BaseMapper<MarkSubjectiveScore> {
 
+	List<QuestionVo> getSubjectiveVo(@Param("examId") Long examId, @Param("paperNumber") String paperNumber);
+
 }

+ 3 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkSubjectiveScoreService.java

@@ -1,5 +1,6 @@
 package com.qmth.teachcloud.mark.service;
 
+import com.qmth.teachcloud.mark.bean.archivescore.QuestionVo;
 import com.qmth.teachcloud.mark.entity.MarkSubjectiveScore;
 import com.baomidou.mybatisplus.extension.service.IService;
 
@@ -25,4 +26,6 @@ public interface MarkSubjectiveScoreService extends IService<MarkSubjectiveScore
     void deleteByStudentId(Long studentId);
 
     void deleteByExamIdAndPaperNumberAndGroupNumber(Long examId, String paperNumber, Integer groupNumber);
+
+	List<QuestionVo> getSubjectiveVo(Long examId, String paperNumber);
 }

+ 78 - 27
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java

@@ -40,9 +40,13 @@ import com.qmth.teachcloud.common.util.ServletUtil;
 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.ClassVo;
+import com.qmth.teachcloud.mark.bean.archivescore.CollegeVo;
+import com.qmth.teachcloud.mark.bean.archivescore.QuestionVo;
 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.archivescore.TeacherVo;
 import com.qmth.teachcloud.mark.bean.omredit.OmrEditDomain;
 import com.qmth.teachcloud.mark.bean.omredit.OmrEditPaper;
 import com.qmth.teachcloud.mark.bean.scananswer.AnswerPageVo;
@@ -81,6 +85,7 @@ import com.qmth.teachcloud.mark.service.MarkPaperService;
 import com.qmth.teachcloud.mark.service.MarkQuestionService;
 import com.qmth.teachcloud.mark.service.MarkService;
 import com.qmth.teachcloud.mark.service.MarkStudentService;
+import com.qmth.teachcloud.mark.service.MarkSubjectiveScoreService;
 import com.qmth.teachcloud.mark.service.MarkUserGroupService;
 import com.qmth.teachcloud.mark.service.ScanAnswerCardService;
 import com.qmth.teachcloud.mark.service.ScanOmrTaskService;
@@ -131,6 +136,9 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
 	private TaskService taskService;
 	@Resource
 	private MarkUserGroupService markUserGroupService;
+	
+	@Autowired
+	private MarkSubjectiveScoreService markSubjectiveScoreService;
 
 	@Override
 	public List<String> listClassByExamIdAndCourseCode(Long examId, String paperNumber) {
@@ -806,21 +814,64 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
 
 	@Override
 	public ScoreReportVo scoreReport(Long examId, String paperNumber) {
-		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)+"%");
-		}
+		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));
+		
+		ret.setCollege(baseMapper.college(examId, paperNumber));
+		if (CollectionUtils.isNotEmpty(ret.getCollege())) {
+			for (CollegeVo vo : ret.getCollege()) {
+				double total = vo.getStudentCount() - vo.getAbsentCount();
+				vo.setPassRate(Calculator.divide2String(Calculator.multiply(vo.getPassCount(), 100), total, 2) + "%");
+				vo.setExcellentRate(
+						Calculator.divide2String(Calculator.multiply(vo.getExcellentCount(), 100), total, 2) + "%");
+			}
+		}
+		
+		ret.setClassData(baseMapper.classData(examId, paperNumber));
+		if (CollectionUtils.isNotEmpty(ret.getClassData())) {
+			for (ClassVo vo : ret.getClassData()) {
+				double total = vo.getStudentCount() - vo.getAbsentCount();
+				vo.setPassRate(Calculator.divide2String(Calculator.multiply(vo.getPassCount(), 100), total, 2) + "%");
+				vo.setExcellentRate(
+						Calculator.divide2String(Calculator.multiply(vo.getExcellentCount(), 100), total, 2) + "%");
+			}
+		}
+		
+		ret.setTeacher(baseMapper.teacher(examId, paperNumber));
+		if (CollectionUtils.isNotEmpty(ret.getTeacher())) {
+			for (TeacherVo vo : ret.getTeacher()) {
+				double total = vo.getStudentCount() - vo.getAbsentCount();
+				vo.setPassRate(Calculator.divide2String(Calculator.multiply(vo.getPassCount(), 100), total, 2) + "%");
+				vo.setExcellentRate(
+						Calculator.divide2String(Calculator.multiply(vo.getExcellentCount(), 100), total, 2) + "%");
+			}
+		}
+		
+		ret.setSubjective(markSubjectiveScoreService.getSubjectiveVo(examId, paperNumber));
+		if (CollectionUtils.isNotEmpty(ret.getSubjective())) {
+			for (QuestionVo vo : ret.getSubjective()) {
+				double total = vo.getStudentCount();
+				vo.setScoreRate(Calculator.divide(vo.getScoreCount(), total, 2));
+				vo.setFullScoreRate(Calculator.divide(vo.getFullScoreCount(), total, 2));
+			}
+		}
 		return ret;
 	}
-	
-	private void fillScoreRange(ScoreReportVo ret,Long examId, String paperNumber) {
-		int toltal=getCountByPaperNumber(examId, paperNumber);
-		List<ScoreRangeVo> scoreRange=new ArrayList<>();
+
+	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));
@@ -833,26 +884,26 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
 		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);
+
+	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);
+		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);
+		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);
+
+	private int getCount(Long examId, String paperNumber, Double start, Double end) {
+		return baseMapper.getCountByScoreRange(examId, paperNumber, start, end);
 	}
 }

+ 6 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkSubjectiveScoreServiceImpl.java

@@ -3,6 +3,7 @@ package com.qmth.teachcloud.mark.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.teachcloud.mark.bean.archivescore.QuestionVo;
 import com.qmth.teachcloud.mark.entity.MarkSubjectiveScore;
 import com.qmth.teachcloud.mark.mapper.MarkSubjectiveScoreMapper;
 import com.qmth.teachcloud.mark.service.MarkSubjectiveScoreService;
@@ -93,4 +94,9 @@ public class MarkSubjectiveScoreServiceImpl extends ServiceImpl<MarkSubjectiveSc
         });
     }
 
+	@Override
+	public List<QuestionVo> getSubjectiveVo(Long examId, String paperNumber) {
+		return this.baseMapper.getSubjectiveVo(examId, paperNumber);
+	}
+
 }

+ 45 - 0
teachcloud-mark/src/main/resources/mapper/MarkStudentMapper.xml

@@ -278,6 +278,51 @@
             and s.is_absent !=1 and s.objective_score+s.subjective_score&gt;=#{start}
             and s.objective_score+s.subjective_score&lt;=#{end}
     </select>
+    <select id="college" resultType="com.qmth.teachcloud.mark.bean.archivescore.CollegeVo">
+        SELECT
+        s.college,
+        count(*) studentCount,
+        sum(case when s.is_absent =1 then 1 else 0 end) absentCount,
+        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}
+        group by s.college
+    </select>
+    <select id="classData" resultType="com.qmth.teachcloud.mark.bean.archivescore.ClassVo">
+        SELECT
+        s.class_name,
+        count(*) studentCount,
+        sum(case when s.is_absent =1 then 1 else 0 end) absentCount,
+        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}
+        group by s.class_name
+    </select>
+    <select id="teacher" resultType="com.qmth.teachcloud.mark.bean.archivescore.TeacherVo">
+        SELECT
+        s.teacher,
+        count(*) studentCount,
+        sum(case when s.is_absent =1 then 1 else 0 end) absentCount,
+        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}
+        group by s.teacher
+    </select>
     <select id="findOne" resultType="com.qmth.teachcloud.mark.bean.student.StudentVo"
             parameterType="com.qmth.teachcloud.mark.bean.student.StudentQuery">
         select * from mark_student

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

@@ -15,5 +15,18 @@
         <result column="score" property="score" />
         <result column="uncalculate" property="uncalculate" />
     </resultMap>
-
+    <select id="getSubjectiveVo" resultType="com.qmth.teachcloud.mark.bean.archivescore.QuestionVo">
+        SELECT 
+        t.main_title  title,t.main_number,t.sub_number,t.total_score score
+        count(*) studentCount,
+        avg(s.score) avgScore,
+        sum(case when s.score>0 then 1 else 0 end) socreCount,
+        sum(case when s.score=t.total_score then 1 else 0 end) fullScoreCount
+        FROM mark_subjective_score s 
+        left join mark_question t on t.exam_id=s.exam_id and t.paper_number=s.paper_number 
+        and t.main_number=s.main_number and t.sub_number=s.sub_number
+        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
+    </select>
 </mapper>