|
@@ -157,10 +157,11 @@ public class TRBasicInfoController {
|
|
|
Map<Long, List<Double>> finalScoreTargetMap = new LinkedHashMap<>();//汇总各课程目标期末考试分数(用来算最高分,最低分,平均分)
|
|
|
// Map<Long, Map<Long, List<DimensionDto>>> finalScoreDimensionMap = new LinkedHashMap<>();//汇总知识点分数(用来算最高分,最低分,平均分)
|
|
|
Map<String, Map<Long, Map<Long, DimensionDto>>> finalScoreExamStudentDimensionMap = new LinkedHashMap<>();//汇总考生课程目标-知识点
|
|
|
+ Map<Long, Map<Long, DimensionDto>> finalScoreExamStudentDimensionSumMap = new LinkedHashMap<>();//汇总考生课程目标-知识点总分
|
|
|
|
|
|
Map<String, UsualScoreOverviewDto> usualScoreOverviewDtoMap = new LinkedHashMap<>();//整体平常成绩分数图
|
|
|
Map<Long, FinalScoreOverviewDto> finalScoreOverviewDtoMap = new LinkedHashMap<>();//各课程目标期末考试分数图
|
|
|
- Map<Long, FinalScoreDimensionOverviewDto> finalScoreDimensionOverviewDtoMap = new LinkedHashMap<>();//各课程目标期末考试知识点分数图
|
|
|
+// Map<Long, FinalScoreDimensionOverviewDto> finalScoreDimensionOverviewDtoMap = new LinkedHashMap<>();//各课程目标期末考试知识点分数图
|
|
|
List<ReportExamStudentDto> examStudentList = null;//考生集合
|
|
|
Map<String, FinalScoreResult> finalScoreResultMap = null;//考生成绩map
|
|
|
Map<String, PaperStructResult> paperStructResultMap = null;//试卷蓝图map
|
|
@@ -236,6 +237,23 @@ public class TRBasicInfoController {
|
|
|
}
|
|
|
finalScoreExamStudentDimensionMap.put(finalScoreResult.getStudentCode(), map);
|
|
|
}
|
|
|
+
|
|
|
+ //目标-考生知识点总分
|
|
|
+ if (!finalScoreExamStudentDimensionSumMap.containsKey(courseTargetDto.getTargetId())) {
|
|
|
+ Map<Long, DimensionDto> dimensionMap = new LinkedHashMap<>();
|
|
|
+ dimensionMap.put(dimensionDto.getDimensionId(), new DimensionDto(dimensionDto, score));
|
|
|
+ finalScoreExamStudentDimensionSumMap.put(courseTargetDto.getTargetId(), dimensionMap);
|
|
|
+ } else {
|
|
|
+ Map<Long, DimensionDto> dimensionMap = finalScoreExamStudentDimensionSumMap.get(courseTargetDto.getTargetId());
|
|
|
+ if (!dimensionMap.containsKey(dimensionDto.getDimensionId())) {
|
|
|
+ dimensionMap.put(dimensionDto.getDimensionId(), new DimensionDto(dimensionDto, score));
|
|
|
+ } else {
|
|
|
+ DimensionDto dimensionDtoTemp = dimensionMap.get(dimensionDto.getDimensionId());
|
|
|
+ dimensionDtoTemp.setDimensionScore(dimensionDtoTemp.getDimensionScore().doubleValue() + score.doubleValue());
|
|
|
+ dimensionMap.put(dimensionDto.getDimensionId(), dimensionDtoTemp);
|
|
|
+ }
|
|
|
+ finalScoreExamStudentDimensionSumMap.put(courseTargetDto.getTargetId(), dimensionMap);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -265,7 +283,8 @@ public class TRBasicInfoController {
|
|
|
Double maxScore = v.stream().mapToDouble(Double::doubleValue).max().orElse(0d);
|
|
|
Double minScore = v.stream().mapToDouble(Double::doubleValue).min().orElse(0d);
|
|
|
Double avgScore = new BigDecimal(v.stream().mapToDouble(Double::doubleValue).average().orElse(0d)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
|
- usualScoreOverviewDtoMap.put(k, new UsualScoreOverviewDto(k, maxScore, minScore, avgScore));
|
|
|
+ Double sumScore = v.stream().mapToDouble(Double::doubleValue).sum();
|
|
|
+ usualScoreOverviewDtoMap.put(k, new UsualScoreOverviewDto(k, maxScore, minScore, avgScore, sumScore));
|
|
|
});
|
|
|
|
|
|
//计算各课程目标期末考试最高分,最低分,平均分
|
|
@@ -273,8 +292,9 @@ public class TRBasicInfoController {
|
|
|
Double maxScore = v.stream().mapToDouble(Double::doubleValue).max().orElse(0d);
|
|
|
Double minScore = v.stream().mapToDouble(Double::doubleValue).min().orElse(0d);
|
|
|
// Double avgScore = new BigDecimal(v.stream().mapToDouble(Double::doubleValue).average().orElse(0d)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
|
- Double avgScore = new BigDecimal(v.stream().mapToDouble(Double::doubleValue).sum()).divide(new BigDecimal(finalScoreResultList.size()), 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
|
- finalScoreOverviewDtoMap.put(k, new FinalScoreOverviewDto(k, maxScore, minScore, avgScore));
|
|
|
+ Double sumScore = v.stream().mapToDouble(Double::doubleValue).sum();
|
|
|
+ Double avgScore = new BigDecimal(sumScore).divide(new BigDecimal(finalScoreResultList.size()), 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
|
+ finalScoreOverviewDtoMap.put(k, new FinalScoreOverviewDto(k, maxScore, minScore, avgScore, sumScore));
|
|
|
});
|
|
|
|
|
|
//计算各课程目标下期末考试知识点最高分,最低分,平均分
|
|
@@ -338,6 +358,12 @@ public class TRBasicInfoController {
|
|
|
Map<Long, Map<Long, DimensionDto>> map = finalScoreExamStudentDimensionMap.get(reportExamStudentDto.getStudentCode());
|
|
|
FinalScoreResult finalScoreResult = finalScoreResultMap.get(reportExamStudentDto.getStudentCode());
|
|
|
JSONArray finalScoreDetailJsonArray = JSONArray.parseArray(finalScoreResult.getFinalScoreDetail());
|
|
|
+ Map<String, ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoMap = null;
|
|
|
+ if (Objects.nonNull(finalScoreResult.getUsualScore())) {
|
|
|
+ //计算平时作业
|
|
|
+ List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = JSONArray.parseArray(finalScoreResult.getUsualScore(), ReportExamStudentUsualScoreObjDto.class);
|
|
|
+ reportExamStudentUsualScoreObjDtoMap = reportExamStudentUsualScoreObjDtoList.stream().collect(Collectors.toMap(ReportExamStudentUsualScoreObjDto::getName, Function.identity(), (dto1, dto2) -> dto1));
|
|
|
+ }
|
|
|
//计算期末考试知识点分数
|
|
|
for (int i = 0; i < finalScoreDetailJsonArray.size(); i++) {
|
|
|
JSONObject jsonObject = finalScoreDetailJsonArray.getJSONObject(i);
|
|
@@ -349,24 +375,74 @@ public class TRBasicInfoController {
|
|
|
List<DimensionDto> dimensionDtoList = new ArrayList<>(dimensionDtoMap.values());
|
|
|
if (CollectionUtils.isEmpty(reportExamStudentDto.getTargetList())) {
|
|
|
List<ReportExamStudentTargetDto> targetList = new ArrayList<>();
|
|
|
+ ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = null;
|
|
|
ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = new ReportExamStudentFinalScoreDto(targetMap.get(courseTargetDto.getTargetId()).getFinalScoreWeight(), dimensionDtoList);
|
|
|
- targetList.add(new ReportExamStudentTargetDto(courseTargetDto.getTargetId(), courseTargetDto.getTargetName(), reportExamStudentFinalScoreDto));
|
|
|
+ if (!CollectionUtils.isEmpty(reportExamStudentUsualScoreObjDtoMap) && reportExamStudentUsualScoreObjDtoMap.containsKey("作业" + courseTargetDto.getTargetId())) {
|
|
|
+ if (Objects.nonNull(targetMap.get(courseTargetDto.getTargetId())) && Objects.nonNull(targetMap.get(courseTargetDto.getTargetId()).getUsualScoreWeight())
|
|
|
+ && Objects.nonNull(targetMap.get(courseTargetDto.getTargetId()).getUsualScoreWeight().get("作业" + courseTargetDto.getTargetId()))) {
|
|
|
+ ReportExamStudentUsualScoreObjDto reportExamStudentUsualScoreObjDto = reportExamStudentUsualScoreObjDtoMap.get("作业" + courseTargetDto.getTargetId());
|
|
|
+ reportExamStudentUsualScoreDto = new ReportExamStudentUsualScoreDto(targetMap.get(courseTargetDto.getTargetId()).getUsualScoreWeight().get("作业" + courseTargetDto.getTargetId()), Arrays.asList(reportExamStudentUsualScoreObjDto));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ targetList.add(new ReportExamStudentTargetDto(courseTargetDto.getTargetId(), courseTargetDto.getTargetName(), reportExamStudentFinalScoreDto, reportExamStudentUsualScoreDto));
|
|
|
reportExamStudentDto.setTargetList(targetList);
|
|
|
} else {
|
|
|
List<ReportExamStudentTargetDto> targetList = reportExamStudentDto.getTargetList();
|
|
|
Map<Long, ReportExamStudentTargetDto> reportExamStudentTargetDtoMap = targetList.stream().collect(Collectors.toMap(ReportExamStudentTargetDto::getTargetId, Function.identity(), (dto1, dto2) -> dto1));
|
|
|
if (!reportExamStudentTargetDtoMap.containsKey(courseTargetDto.getTargetId())) {
|
|
|
- targetList.add(new ReportExamStudentTargetDto(courseTargetDto.getTargetId(), courseTargetDto.getTargetName(), new ReportExamStudentFinalScoreDto(targetMap.get(courseTargetDto.getTargetId()).getFinalScoreWeight(), dimensionDtoList)));
|
|
|
+ ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = null;
|
|
|
+ if (!CollectionUtils.isEmpty(reportExamStudentUsualScoreObjDtoMap) && reportExamStudentUsualScoreObjDtoMap.containsKey("作业" + courseTargetDto.getTargetId())) {
|
|
|
+ if (Objects.nonNull(targetMap.get(courseTargetDto.getTargetId())) && Objects.nonNull(targetMap.get(courseTargetDto.getTargetId()).getUsualScoreWeight())
|
|
|
+ && Objects.nonNull(targetMap.get(courseTargetDto.getTargetId()).getUsualScoreWeight().get("作业" + courseTargetDto.getTargetId()))) {
|
|
|
+ ReportExamStudentUsualScoreObjDto reportExamStudentUsualScoreObjDto = reportExamStudentUsualScoreObjDtoMap.get("作业" + courseTargetDto.getTargetId());
|
|
|
+ reportExamStudentUsualScoreDto = new ReportExamStudentUsualScoreDto(targetMap.get(courseTargetDto.getTargetId()).getUsualScoreWeight().get("作业" + courseTargetDto.getTargetId()), Arrays.asList(reportExamStudentUsualScoreObjDto));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ targetList.add(new ReportExamStudentTargetDto(courseTargetDto.getTargetId(), courseTargetDto.getTargetName(), new ReportExamStudentFinalScoreDto(targetMap.get(courseTargetDto.getTargetId()).getFinalScoreWeight(), dimensionDtoList), reportExamStudentUsualScoreDto));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ //加入平均分
|
|
|
+ Double avgScore = new BigDecimal(examStudentList.stream().mapToDouble(ReportExamStudentDto::getScore).average().orElse(0d)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
|
+ ReportExamStudentDto reportExamStudentDto = new ReportExamStudentDto("平均分", "平均分", avgScore);
|
|
|
+ List<ReportExamStudentTargetDto> reportExamStudentTargetDtoList = new ArrayList<>();
|
|
|
+ reportExamStudentTargetDtoList.addAll(examStudentList.get(0).getTargetList());
|
|
|
+
|
|
|
+ BigDecimal size = new BigDecimal(examStudentList.size());
|
|
|
+ ReportExamStudentFinalScoreDto finalScoreAvgDto = reportExamStudentTargetDtoList.get(0).getFinalScore();
|
|
|
+ Map<Long, DimensionDto> dimensionFinalScoreDtoMap = finalScoreExamStudentDimensionSumMap.get(reportExamStudentTargetDtoList.get(0).getTargetId());
|
|
|
+ List<DimensionDto> dimensionFinalScoreDtoList = finalScoreAvgDto.getDimensionList();
|
|
|
+ for (DimensionDto dimensionFinalScoreDto : dimensionFinalScoreDtoList) {
|
|
|
+ if (dimensionFinalScoreDtoMap.containsKey(dimensionFinalScoreDto.getDimensionId())) {
|
|
|
+ DimensionDto dimensionDto = dimensionFinalScoreDtoMap.get(dimensionFinalScoreDto.getDimensionId());
|
|
|
+ Double avg = new BigDecimal(dimensionFinalScoreDto.getDimensionScore()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
|
+ dimensionFinalScoreDto.setDimensionScore(avg);
|
|
|
+ } else {
|
|
|
+ dimensionFinalScoreDto.setDimensionScore(0d);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ ReportExamStudentUsualScoreDto usualScoreAvgDto = reportExamStudentTargetDtoList.get(0).getUsualScore();
|
|
|
+ List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = usualScoreAvgDto.getScoreList();
|
|
|
+ for (ReportExamStudentUsualScoreObjDto reportExamStudentUsualScoreObjDto : reportExamStudentUsualScoreObjDtoList) {
|
|
|
+ if (usualScoreOverviewDtoMap.containsKey(reportExamStudentUsualScoreObjDto.getName())) {
|
|
|
+ UsualScoreOverviewDto usualScoreOverviewDto = usualScoreOverviewDtoMap.get(reportExamStudentUsualScoreObjDto.getName());
|
|
|
+ Double avg = new BigDecimal(usualScoreOverviewDto.getSumScore()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
|
+ reportExamStudentUsualScoreObjDto.setScore(avg);
|
|
|
+ } else {
|
|
|
+ reportExamStudentUsualScoreObjDto.setScore(0d);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ reportExamStudentDto.setTargetList(reportExamStudentTargetDtoList);
|
|
|
+ examStudentList.add(reportExamStudentDto);
|
|
|
reportCourseEvaluationResultDetailDto = new ReportCourseEvaluationResultDetailDto(examStudentList);
|
|
|
trBasicInfo.setCourseEvaluationResultDetail(JacksonUtil.parseJson(reportCourseEvaluationResultDetailDto));
|
|
|
}
|
|
|
|
|
|
+ trBasicInfo.updateInfo(sysUser.getId());
|
|
|
//课程目标达成评价明细结果-课程目标达成评价值图
|
|
|
trBasicInfoService.saveOrUpdate(trBasicInfo);
|
|
|
|