|
@@ -8,7 +8,6 @@ import com.qmth.distributed.print.business.entity.TRBasicInfo;
|
|
|
import com.qmth.distributed.print.business.entity.TRExamStudent;
|
|
|
import com.qmth.distributed.print.business.mapper.TRExamStudentMapper;
|
|
|
import com.qmth.distributed.print.business.service.TRExamStudentService;
|
|
|
-import com.qmth.teachcloud.common.util.JacksonUtil;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.stereotype.Service;
|
|
@@ -17,6 +16,7 @@ import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
@@ -44,7 +44,6 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
|
|
|
Map<String, Map<Long, Map<Long, DimensionDto>>> finalScoreExamStudentDimensionMap = (Map<String, Map<Long, Map<Long, DimensionDto>>>) paramsMap.get("finalScoreExamStudentDimensionMap");
|
|
|
Map<String, FinalScoreResult> finalScoreResultMap = (Map<String, FinalScoreResult>) paramsMap.get("finalScoreResultMap");
|
|
|
Map<Long, CourseTargetWordDto> targetWordMap = (Map<Long, CourseTargetWordDto>) paramsMap.get("targetWordMap");
|
|
|
- Map<Long, Map<Long, DimensionDto>> finalScoreExamStudentDimensionSumMap = (Map<Long, Map<Long, DimensionDto>>) paramsMap.get("finalScoreExamStudentDimensionSumMap");
|
|
|
if (!CollectionUtils.isEmpty(examStudentList)) {
|
|
|
BigDecimal bigDecimal = new BigDecimal(100);
|
|
|
List<TRExamStudent> trExamStudentList = new ArrayList<>(examStudentList.size());
|
|
@@ -53,6 +52,7 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
|
|
|
Map<Long, Map<Long, DimensionDto>> map = finalScoreExamStudentDimensionMap.get(reportExamStudentDto.getStudentCode());
|
|
|
FinalScoreResult finalScoreResult = finalScoreResultMap.get(reportExamStudentDto.getStudentCode());
|
|
|
ReportExamStudentUsualScoreDto reportExamStudentUsualScoreSumDto = finalScoreResult.getUsualScoreDto();
|
|
|
+ //课程目标循环
|
|
|
map.forEach((k, v) -> {
|
|
|
List<DimensionDto> dimensionDtoList = new ArrayList<>(v.values());
|
|
|
List<ReportExamStudentTargetDto> targetList = CollectionUtils.isEmpty(reportExamStudentDto.getTargetList()) ? new ArrayList<>() : reportExamStudentDto.getTargetList();
|
|
@@ -62,95 +62,127 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
|
|
|
ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = new ReportExamStudentFinalScoreDto(courseTargetWordDto.getFinalScoreDto(), dimensionDtoList);
|
|
|
ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = new ReportExamStudentUsualScoreDto(scoreObjDtoList);
|
|
|
|
|
|
+ BigDecimal dimensionMatrixSumScore = new BigDecimal(0);
|
|
|
if (!reportExamStudentTargetDtoMap.containsKey(k)) {
|
|
|
//各知识点转换分数
|
|
|
- List<DimensionDto> dimensionDtoTempList = new ArrayList<>(v.values());
|
|
|
- Double dimensionMatrixSumScore = 0.0d;
|
|
|
for (DimensionDto dimensionDto : dimensionDtoList) {
|
|
|
Double matrixScore = new BigDecimal(dimensionDto.getDimensionScore()).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight()).divide(bigDecimal, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
|
- dimensionDto.setMatrixScore(matrixScore);
|
|
|
- dimensionMatrixSumScore = dimensionMatrixSumScore + matrixScore;
|
|
|
- dimensionDtoTempList.add(new DimensionDto(dimensionDto));
|
|
|
+ dimensionDto.setDimensionMatrixScore(matrixScore);
|
|
|
+ dimensionMatrixSumScore = dimensionMatrixSumScore.add(new BigDecimal(matrixScore)).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ reportExamStudentDto.setScore(reportExamStudentDto.getScore() + matrixScore);
|
|
|
}
|
|
|
- reportExamStudentFinalScoreDto.setDimensionMatrixSumScore(dimensionMatrixSumScore);
|
|
|
-
|
|
|
- List<ReportExamStudentUsualScoreObjDto> scoreObjDtoTempList = new ArrayList<>();
|
|
|
- for (ReportExamStudentUsualScoreObjDto r : scoreObjDtoList) {
|
|
|
- scoreObjDtoTempList.add(new ReportExamStudentUsualScoreObjDto(r));
|
|
|
- }
|
|
|
- ReportExamStudentFinalScoreDto reportExamStudentFinalScoreTempDto = new ReportExamStudentFinalScoreDto(courseTargetWordDto.getFinalScoreDto(), dimensionDtoTempList);
|
|
|
- reportExamStudentFinalScoreTempDto.setDimensionMatrixSumScore(dimensionMatrixSumScore);
|
|
|
- ReportExamStudentTargetDto reportExamStudentTargetDto = new ReportExamStudentTargetDto(courseTargetWordDto, reportExamStudentFinalScoreTempDto, new ReportExamStudentUsualScoreDto(scoreObjDtoTempList));
|
|
|
+ //平时作业总和+累加
|
|
|
+ Double usualMatrixSumScore = scoreObjDtoList.stream().mapToDouble(ReportExamStudentUsualScoreObjDto::getMatrixScore).sum();
|
|
|
+ reportExamStudentDto.setScore(reportExamStudentDto.getScore() + usualMatrixSumScore);
|
|
|
+ reportExamStudentFinalScoreDto.setTargetMatrixSumScore(dimensionMatrixSumScore.doubleValue());
|
|
|
+ ReportExamStudentFinalScoreDto reportExamStudentFinalScoreTempDto = new ReportExamStudentFinalScoreDto(courseTargetWordDto.getFinalScoreDto(), dimensionDtoList.stream().map(DimensionDto::new).collect(Collectors.toList()), dimensionMatrixSumScore.doubleValue());
|
|
|
+ ReportExamStudentTargetDto reportExamStudentTargetDto = new ReportExamStudentTargetDto(courseTargetWordDto, reportExamStudentFinalScoreTempDto, new ReportExamStudentUsualScoreDto(scoreObjDtoList.stream().map(ReportExamStudentUsualScoreObjDto::new).collect(Collectors.toList())));
|
|
|
reportExamStudentTargetDtoMap.put(k, reportExamStudentTargetDto);
|
|
|
} else {
|
|
|
ReportExamStudentTargetDto reportExamStudentTargetDto = reportExamStudentTargetDtoMap.get(k);
|
|
|
ReportExamStudentFinalScoreDto reportExamStudentFinalScoreAvgDto = reportExamStudentTargetDto.getFinalScore();
|
|
|
List<DimensionDto> dimensionDtos = reportExamStudentFinalScoreAvgDto.getDimensionList();
|
|
|
//各知识点转换分数
|
|
|
- Double dimensionMatrixSumScore = 0.0d;
|
|
|
for (int i = 0; i < dimensionDtoList.size(); i++) {
|
|
|
DimensionDto dimensionDto = dimensionDtoList.get(i);
|
|
|
Double matrixScore = new BigDecimal(dimensionDto.getDimensionScore()).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight()).divide(bigDecimal, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
|
- dimensionDtos.get(i).setMatrixScore(dimensionDtos.get(i).getMatrixScore() + matrixScore);
|
|
|
- dimensionDtos.get(i).setDimensionScore(dimensionDtos.get(i).getDimensionScore() + dimensionDto.getDimensionScore());
|
|
|
- dimensionMatrixSumScore = dimensionMatrixSumScore + matrixScore;
|
|
|
+ dimensionDto.setDimensionMatrixScore(matrixScore);
|
|
|
+ reportExamStudentDto.setScore(reportExamStudentDto.getScore() + matrixScore);
|
|
|
+ dimensionDtos.get(i).setDimensionMatrixScore(dimensionDtos.get(i).getDimensionMatrixScore() + matrixScore);
|
|
|
+ dimensionMatrixSumScore = dimensionMatrixSumScore.add(new BigDecimal(matrixScore)).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
}
|
|
|
- reportExamStudentFinalScoreAvgDto.setDimensionMatrixSumScore(reportExamStudentFinalScoreAvgDto.getDimensionMatrixSumScore() + dimensionMatrixSumScore);
|
|
|
+ reportExamStudentFinalScoreDto.setTargetMatrixSumScore(dimensionMatrixSumScore.doubleValue());
|
|
|
+ reportExamStudentFinalScoreAvgDto.setTargetMatrixSumScore(new BigDecimal(reportExamStudentFinalScoreAvgDto.getTargetMatrixSumScore()).add(dimensionMatrixSumScore).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
|
|
|
ReportExamStudentUsualScoreDto reportExamStudentUsualScoreAvgDto = reportExamStudentTargetDto.getUsualScore();
|
|
|
|
|
|
+ //平时作业总和+累加
|
|
|
List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = reportExamStudentUsualScoreDto.getScoreList();
|
|
|
+ List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjAvgDtoList = reportExamStudentUsualScoreAvgDto.getScoreList();
|
|
|
for (int i = 0; i < reportExamStudentUsualScoreObjDtoList.size(); i++) {
|
|
|
ReportExamStudentUsualScoreObjDto reportExamStudentUsualScoreObjDto = reportExamStudentUsualScoreObjDtoList.get(i);
|
|
|
- reportExamStudentUsualScoreAvgDto.getScoreList().get(i).setMatrixScore(reportExamStudentUsualScoreAvgDto.getScoreList().get(i).getMatrixScore() + reportExamStudentUsualScoreObjDto.getMatrixScore());
|
|
|
- reportExamStudentUsualScoreAvgDto.getScoreList().get(i).setScore(reportExamStudentUsualScoreAvgDto.getScoreList().get(i).getScore() + reportExamStudentUsualScoreObjDto.getScore());
|
|
|
+ reportExamStudentDto.setScore(reportExamStudentDto.getScore() + reportExamStudentUsualScoreObjDto.getMatrixScore());
|
|
|
+ reportExamStudentUsualScoreObjAvgDtoList.get(i).setMatrixScore(new BigDecimal(reportExamStudentUsualScoreObjAvgDtoList.get(i).getMatrixScore()).add(new BigDecimal(reportExamStudentUsualScoreObjDto.getMatrixScore())).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
|
|
|
}
|
|
|
reportExamStudentTargetDtoMap.put(k, reportExamStudentTargetDto);
|
|
|
}
|
|
|
- log.info("reportExamStudentTargetDtoMap:{}", JacksonUtil.parseJson(reportExamStudentTargetDtoMap));
|
|
|
targetList.add(new ReportExamStudentTargetDto(courseTargetWordDto, reportExamStudentFinalScoreDto, reportExamStudentUsualScoreDto));
|
|
|
- log.info("targetList:{}", JacksonUtil.parseJson(targetList));
|
|
|
}
|
|
|
reportExamStudentDto.setTargetList(targetList);
|
|
|
});
|
|
|
+ reportExamStudentDto.setScore(new BigDecimal(reportExamStudentDto.getScore()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
|
|
|
Collections.sort(reportExamStudentDto.getTargetList());
|
|
|
trExamStudentList.add(new TRExamStudent(trBasicInfo.getId(), reportExamStudentDto));
|
|
|
}
|
|
|
//加入平均分
|
|
|
-// Double avgScore = new BigDecimal(examStudentList.stream().mapToDouble(ReportExamStudentDto::getScore).average().orElse(0d)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
|
-// ReportExamStudentDto reportExamStudentDto = new ReportExamStudentDto("平均分", "平均分", examStudentList.get(0).getAdministrativeClass(), 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())) {
|
|
|
-// 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.get(0).setTargetList(JSONArray.parseArray(trExamStudentList.get(0).getResultDetail(), ReportExamStudentTargetDto.class));
|
|
|
-// examStudentList.add(reportExamStudentDto);
|
|
|
+ BigDecimal size = new BigDecimal(examStudentList.size());
|
|
|
+ //综合成绩平均分
|
|
|
+ List<ReportExamStudentTargetDto> targetDtoList = new ArrayList<>();
|
|
|
+ Double score = new BigDecimal(examStudentList.stream().mapToDouble(ReportExamStudentDto::getScore).sum()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
|
+ ReportExamStudentDto reportExamStudentTargetDto = new ReportExamStudentDto("目标分", "目标分", null, 100.d, targetDtoList);
|
|
|
+ ReportExamStudentDto reportExamStudentAvgDto = new ReportExamStudentDto("平均分", "平均分", null, score, targetDtoList);
|
|
|
+ ReportExamStudentDto reportExamStudentTargetAvgDto = new ReportExamStudentDto("各课程目标平均分", "各课程目标平均分", null, null, targetDtoList);
|
|
|
+ reportExamStudentTargetDtoMap.forEach((k, v) -> {
|
|
|
+ ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = v.getFinalScore();//课程目标考核要素的平均分
|
|
|
+ reportExamStudentFinalScoreDto.setMatrixAvgScore(new BigDecimal(reportExamStudentFinalScoreDto.getTargetMatrixSumScore()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
|
|
|
+
|
|
|
+ List<DimensionDto> dimensionDtoList = reportExamStudentFinalScoreDto.getDimensionList();
|
|
|
+ for (DimensionDto d : dimensionDtoList) {
|
|
|
+ d.setDimensionMatrixAvgScore(new BigDecimal(d.getDimensionMatrixScore()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
|
|
|
+ }
|
|
|
+
|
|
|
+ v.setTargetMatrixAvgScore(reportExamStudentFinalScoreDto.getTargetMatrixSumScore());
|
|
|
+ ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = v.getUsualScore();
|
|
|
+ List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = reportExamStudentUsualScoreDto.getScoreList();
|
|
|
+ for (ReportExamStudentUsualScoreObjDto r : reportExamStudentUsualScoreObjDtoList) {
|
|
|
+ v.setTargetMatrixAvgScore(v.getTargetMatrixAvgScore() + r.getMatrixScore());
|
|
|
+ r.setMatrixAvgScore(new BigDecimal(r.getMatrixScore()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
|
|
|
+ }
|
|
|
+ v.setTargetMatrixAvgScore(new BigDecimal(v.getTargetMatrixAvgScore()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
|
|
|
+
|
|
|
+ targetDtoList.add(v);
|
|
|
+ });
|
|
|
+ Collections.sort(targetDtoList);
|
|
|
+
|
|
|
+ //目标分处理
|
|
|
+ List<ReportExamStudentTargetDto> reportExamStudentTargetDtoList = reportExamStudentTargetDto.getTargetList();
|
|
|
+ reportExamStudentTargetDtoList = reportExamStudentTargetDtoList.stream().map(ReportExamStudentTargetDto::new).collect(Collectors.toList());
|
|
|
+ reportExamStudentTargetDtoList = reportExamStudentTargetDtoList.stream().peek(e -> {
|
|
|
+ e.setTargetMatrixAvgScore(null);
|
|
|
+ ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = new ReportExamStudentFinalScoreDto(e.getFinalScore());
|
|
|
+ reportExamStudentFinalScoreDto.setTargetMatrixSumScore(null);
|
|
|
+ reportExamStudentFinalScoreDto.setMatrixAvgScore(null);
|
|
|
+ List<DimensionDto> dimensionDtoList = reportExamStudentFinalScoreDto.getDimensionList().stream().map(DimensionDto::new).collect(Collectors.toList());
|
|
|
+ reportExamStudentFinalScoreDto.setDimensionList(dimensionDtoList.stream().peek(s -> {
|
|
|
+ s.setDimensionMatrixScore(null);
|
|
|
+ s.setDimensionMatrixAvgScore(null);
|
|
|
+ }).collect(Collectors.toList()));
|
|
|
+ e.setFinalScore(reportExamStudentFinalScoreDto);
|
|
|
+
|
|
|
+ ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = new ReportExamStudentUsualScoreDto(e.getUsualScore());
|
|
|
+ List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = reportExamStudentUsualScoreDto.getScoreList().stream().map(ReportExamStudentUsualScoreObjDto::new).collect(Collectors.toList());
|
|
|
+ reportExamStudentUsualScoreObjDtoList.stream().peek(k -> {
|
|
|
+ k.setScore(null);
|
|
|
+ k.setMatrixAvgScore(null);
|
|
|
+ k.setMatrixScore(null);
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ e.setUsualScore(reportExamStudentUsualScoreDto);
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ reportExamStudentTargetDto.setTargetList(reportExamStudentTargetDtoList);
|
|
|
+
|
|
|
+ //各课程目标平均分处理
|
|
|
+ List<ReportExamStudentTargetDto> reportExamStudentTargetAvgDtoList = reportExamStudentTargetAvgDto.getTargetList();
|
|
|
+ reportExamStudentTargetAvgDtoList = reportExamStudentTargetAvgDtoList.stream().map(ReportExamStudentTargetDto::new).collect(Collectors.toList()).stream().peek(e -> {
|
|
|
+ e.setUsualScore(null);
|
|
|
+ e.setFinalScore(null);
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ reportExamStudentTargetAvgDto.setTargetList(reportExamStudentTargetAvgDtoList);
|
|
|
|
|
|
- ReportExamStudentDto reportExamStudentDto = new ReportExamStudentDto("平均分", "平均分", null, null);
|
|
|
- trExamStudentList.add(new TRExamStudent(trBasicInfo.getId(), reportExamStudentDto));
|
|
|
+ examStudentList.add(reportExamStudentTargetDto);
|
|
|
+ examStudentList.add(reportExamStudentAvgDto);
|
|
|
+ examStudentList.add(reportExamStudentTargetAvgDto);
|
|
|
+ trExamStudentList.add(new TRExamStudent(trBasicInfo.getId(), reportExamStudentTargetDto));
|
|
|
+ trExamStudentList.add(new TRExamStudent(trBasicInfo.getId(), reportExamStudentAvgDto));
|
|
|
+ trExamStudentList.add(new TRExamStudent(trBasicInfo.getId(), reportExamStudentTargetAvgDto));
|
|
|
this.remove(new QueryWrapper<TRExamStudent>().lambda().eq(TRExamStudent::getrBasicInfoId, trBasicInfo.getId()));
|
|
|
this.saveBatch(trExamStudentList);
|
|
|
}
|