|
@@ -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);
|
|
|
}
|
|
|
}
|