|
@@ -14,6 +14,7 @@ import com.qmth.distributed.print.business.bean.result.report.PaperStructResult;
|
|
import com.qmth.distributed.print.business.bean.result.report.ReportResult;
|
|
import com.qmth.distributed.print.business.bean.result.report.ReportResult;
|
|
import com.qmth.distributed.print.business.entity.TCPaperStruct;
|
|
import com.qmth.distributed.print.business.entity.TCPaperStruct;
|
|
import com.qmth.distributed.print.business.entity.TRBasicInfo;
|
|
import com.qmth.distributed.print.business.entity.TRBasicInfo;
|
|
|
|
+import com.qmth.distributed.print.business.entity.TRExamStudent;
|
|
import com.qmth.distributed.print.business.service.*;
|
|
import com.qmth.distributed.print.business.service.*;
|
|
import com.qmth.teachcloud.common.annotation.OperationLogDetail;
|
|
import com.qmth.teachcloud.common.annotation.OperationLogDetail;
|
|
import com.qmth.teachcloud.common.contant.SystemConstant;
|
|
import com.qmth.teachcloud.common.contant.SystemConstant;
|
|
@@ -82,6 +83,9 @@ public class TRBasicInfoController {
|
|
@Resource
|
|
@Resource
|
|
TCFinalScoreService tcFinalScoreService;
|
|
TCFinalScoreService tcFinalScoreService;
|
|
|
|
|
|
|
|
+ @Resource
|
|
|
|
+ TRExamStudentService trExamStudentService;
|
|
|
|
+
|
|
@ApiOperation(value = "报告管理列表")
|
|
@ApiOperation(value = "报告管理列表")
|
|
@RequestMapping(value = "/report/list", method = RequestMethod.POST)
|
|
@RequestMapping(value = "/report/list", method = RequestMethod.POST)
|
|
@OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.SEARCH)
|
|
@OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.SEARCH)
|
|
@@ -106,6 +110,11 @@ public class TRBasicInfoController {
|
|
|
|
|
|
SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
|
|
SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
|
|
TRBasicInfo trBasicInfo = trBasicInfoService.getOne(new QueryWrapper<TRBasicInfo>().lambda().eq(TRBasicInfo::getExamId, examId).eq(TRBasicInfo::getCourseCode, courseCode).eq(TRBasicInfo::getPaperNumber, paperNumber));
|
|
TRBasicInfo trBasicInfo = trBasicInfoService.getOne(new QueryWrapper<TRBasicInfo>().lambda().eq(TRBasicInfo::getExamId, examId).eq(TRBasicInfo::getCourseCode, courseCode).eq(TRBasicInfo::getPaperNumber, paperNumber));
|
|
|
|
+
|
|
|
|
+ ReportCourseBasicInfoDto reportCourseBasicInfoDto = null;//课程基本情况
|
|
|
|
+ ReportCourseEvaluationSpreadDto reportCourseEvaluationSpreadDto = null;//课程目标考核分布
|
|
|
|
+ ReportCourseEvaluationResultDto reportCourseEvaluationResultDto = null;//课程考核成绩评价结果
|
|
|
|
+ ReportCourseEvaluationResultDetailDto reportCourseEvaluationResultDetailDto = null;//课程目标达成评价明细结果
|
|
if (Objects.isNull(trBasicInfo)) {
|
|
if (Objects.isNull(trBasicInfo)) {
|
|
BasicExam basicExam = basicExamService.getById(examId);
|
|
BasicExam basicExam = basicExamService.getById(examId);
|
|
Objects.requireNonNull(basicExam, "未找到考试信息");
|
|
Objects.requireNonNull(basicExam, "未找到考试信息");
|
|
@@ -115,337 +124,234 @@ public class TRBasicInfoController {
|
|
|
|
|
|
//TODO 有测试数据,待肖飞补充授课对象和任课老师数据
|
|
//TODO 有测试数据,待肖飞补充授课对象和任课老师数据
|
|
trBasicInfo = new TRBasicInfo(examId, courseCode, markPaper.getCourseName(), paperNumber, basicSemester.getName(), "测试班级1", "测试老师1", 40, sysUser.getId());
|
|
trBasicInfo = new TRBasicInfo(examId, courseCode, markPaper.getCourseName(), paperNumber, basicSemester.getName(), "测试班级1", "测试老师1", 40, sysUser.getId());
|
|
- }
|
|
|
|
- //测试数据
|
|
|
|
|
|
|
|
- //公共信息
|
|
|
|
- ReportCommonDto reportCommonDto = new ReportCommonDto(examId, courseCode, markPaper.getCourseName(), paperNumber);
|
|
|
|
- //课程基本情况
|
|
|
|
- ReportCourseBasicInfoDto reportCourseBasicInfoDto = new ReportCourseBasicInfoDto(trBasicInfo);
|
|
|
|
|
|
+ //测试数据
|
|
|
|
+ //课程基本情况
|
|
|
|
+ reportCourseBasicInfoDto = new ReportCourseBasicInfoDto(trBasicInfo);
|
|
|
|
|
|
- //课程目标考核分布-题目信息
|
|
|
|
- TCPaperStruct tcPaperStruct = tcPaperStructService.getOne(new QueryWrapper<TCPaperStruct>().lambda().eq(TCPaperStruct::getExamId, examId).eq(TCPaperStruct::getCourseCode, courseCode).eq(TCPaperStruct::getPaperNumber, paperNumber));
|
|
|
|
- Objects.requireNonNull(tcPaperStruct, "未找到试卷蓝图信息");
|
|
|
|
|
|
+ //课程目标考核分布-题目信息
|
|
|
|
+ TCPaperStruct tcPaperStruct = tcPaperStructService.getOne(new QueryWrapper<TCPaperStruct>().lambda().eq(TCPaperStruct::getExamId, examId).eq(TCPaperStruct::getCourseCode, courseCode).eq(TCPaperStruct::getPaperNumber, paperNumber));
|
|
|
|
+ Objects.requireNonNull(tcPaperStruct, "未找到试卷蓝图信息");
|
|
|
|
|
|
- List<PaperStructResult> paperStructResultList = GsonUtil.fromJson(tcPaperStruct.getPaperStruct(), new TypeToken<List<PaperStructResult>>() {
|
|
|
|
- }.getType());
|
|
|
|
|
|
+ List<PaperStructResult> paperStructResultList = GsonUtil.fromJson(tcPaperStruct.getPaperStruct(), new TypeToken<List<PaperStructResult>>() {
|
|
|
|
+ }.getType());
|
|
|
|
|
|
- Map<Long, CourseTargetWeightDto> targetMap = new LinkedHashMap<>();//课程目标map
|
|
|
|
- ReportCourseEvaluationSpreadDto reportCourseEvaluationSpreadDto = new ReportCourseEvaluationSpreadDto(paperStructResultList);
|
|
|
|
|
|
+ Map<Long, CourseTargetWeightDto> targetMap = new LinkedHashMap<>();//课程目标map
|
|
|
|
+ reportCourseEvaluationSpreadDto = new ReportCourseEvaluationSpreadDto(paperStructResultList);
|
|
|
|
|
|
- //课程目标考核分布-分数图
|
|
|
|
- FinalScoreDto finalScoreDto = tcFinalScoreService.finalScoreScoreOverView(examId, courseCode, paperNumber);
|
|
|
|
- Objects.requireNonNull(finalScoreDto, "未找到期末成绩分数信息");
|
|
|
|
|
|
+ //课程目标考核分布-分数图
|
|
|
|
+ FinalScoreDto finalScoreDto = tcFinalScoreService.finalScoreScoreOverView(examId, courseCode, paperNumber);
|
|
|
|
+ Objects.requireNonNull(finalScoreDto, "未找到期末成绩分数信息");
|
|
|
|
|
|
- fillScoreRange(finalScoreDto, examId, paperNumber, markPaper);
|
|
|
|
- List<ScoreRangeVo> scoreRangeVoList = finalScoreDto.getScoreRange();
|
|
|
|
- if (!CollectionUtils.isEmpty(scoreRangeVoList)) {
|
|
|
|
- Integer failCount = scoreRangeVoList.get(0).getStudentCount();//第一行数据默认为不及格
|
|
|
|
- Double failRate = scoreRangeVoList.get(0).getRate();
|
|
|
|
|
|
+ fillScoreRange(finalScoreDto, examId, paperNumber, markPaper);
|
|
|
|
+ List<ScoreRangeVo> scoreRangeVoList = finalScoreDto.getScoreRange();
|
|
|
|
+ if (!CollectionUtils.isEmpty(scoreRangeVoList)) {
|
|
|
|
+ Integer failCount = scoreRangeVoList.get(0).getStudentCount();//第一行数据默认为不及格
|
|
|
|
+ Double failRate = scoreRangeVoList.get(0).getRate();
|
|
|
|
|
|
- scoreRangeVoList.remove(0);
|
|
|
|
- List<ReportScoreRangeViewDto> scoreRangeViewDtoList = GsonUtil.fromJson(JacksonUtil.parseJson(scoreRangeVoList), new TypeToken<List<ReportScoreRangeViewDto>>() {
|
|
|
|
- }.getType());
|
|
|
|
- ReportScoreViewDto reportScoreViewDto = new ReportScoreViewDto(failCount, failRate, scoreRangeViewDtoList);
|
|
|
|
- reportCourseEvaluationSpreadDto.setScoreList(reportScoreViewDto);
|
|
|
|
- }
|
|
|
|
- trBasicInfo.setCourseEvaluationSpread(JacksonUtil.parseJson(reportCourseEvaluationSpreadDto));
|
|
|
|
-
|
|
|
|
- //查询考生数据
|
|
|
|
- List<FinalScoreResult> finalScoreResultList = tcFinalScoreService.examStudentOverview(examId, courseCode, paperNumber);//考生成绩
|
|
|
|
- Map<String, List<Double>> usualScoreMap = new LinkedHashMap<>();//汇总平常成绩分数(用来算最高分,最低分,平均分)
|
|
|
|
- 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<>();//各课程目标期末考试知识点分数图
|
|
|
|
- List<ReportExamStudentDto> examStudentList = null;//考生集合
|
|
|
|
- Map<String, FinalScoreResult> finalScoreResultMap = null;//考生成绩map
|
|
|
|
- Map<String, PaperStructResult> paperStructResultMap = null;//试卷蓝图map
|
|
|
|
- if (!CollectionUtils.isEmpty(finalScoreResultList)) {
|
|
|
|
- //期末成绩明细map
|
|
|
|
- paperStructResultMap = paperStructResultList.stream().collect(Collectors.toMap(k -> k.getMainNumber() + "-" + k.getSubNumber(), Function.identity(), (dto1, dto2) -> dto1));
|
|
|
|
- finalScoreResultMap = finalScoreResultList.stream().collect(Collectors.toMap(FinalScoreResult::getStudentCode, Function.identity(), (dto1, dto2) -> dto1));
|
|
|
|
-
|
|
|
|
- examStudentList = new ArrayList<>(finalScoreResultList.size());
|
|
|
|
- for (FinalScoreResult finalScoreResult : finalScoreResultList) {
|
|
|
|
-
|
|
|
|
- //解析期末成绩知识点
|
|
|
|
- JSONArray finalScoreDetailJsonArray = JSONArray.parseArray(finalScoreResult.getFinalScoreDetail());
|
|
|
|
- for (int i = 0; i < finalScoreDetailJsonArray.size(); i++) {
|
|
|
|
- JSONObject jsonObject = finalScoreDetailJsonArray.getJSONObject(i);
|
|
|
|
- Double score = Objects.nonNull(jsonObject.get("score")) ? Double.parseDouble(jsonObject.get("score").toString()) : 0d;
|
|
|
|
- PaperStructResult paperStructResult = paperStructResultMap.get(jsonObject.get("name").toString());
|
|
|
|
- if (Objects.nonNull(paperStructResult)) {
|
|
|
|
- List<CourseTargetDto> courseTargetDtoList = paperStructResult.getTargetList();
|
|
|
|
-
|
|
|
|
- for (CourseTargetDto courseTargetDto : courseTargetDtoList) {
|
|
|
|
- targetMap.put(courseTargetDto.getTargetId(), new CourseTargetWeightDto(courseTargetDto.getTargetId(), courseTargetDto.getTargetName()));
|
|
|
|
-
|
|
|
|
- //课程目标
|
|
|
|
- if (!finalScoreTargetMap.containsKey(courseTargetDto.getTargetId())) {
|
|
|
|
- finalScoreTargetMap.put(courseTargetDto.getTargetId(), new ArrayList<>(Arrays.asList(score)));
|
|
|
|
- } else {
|
|
|
|
- List<Double> list = finalScoreTargetMap.get(courseTargetDto.getTargetId());
|
|
|
|
- list.add(score);
|
|
|
|
- finalScoreTargetMap.put(courseTargetDto.getTargetId(), list);
|
|
|
|
- }
|
|
|
|
- //知识点
|
|
|
|
- List<DimensionDto> dimensionDtoList = courseTargetDto.getDimensionList();
|
|
|
|
- for (DimensionDto dimensionDto : dimensionDtoList) {
|
|
|
|
-// if (!finalScoreDimensionMap.containsKey(courseTargetDto.getTargetId())) {
|
|
|
|
-// Map<Long, List<DimensionDto>> map = new LinkedHashMap<>();
|
|
|
|
-// map.put(dimensionDto.getDimensionId(), new ArrayList<>(Arrays.asList(dimensionDto)));
|
|
|
|
-// finalScoreDimensionMap.put(courseTargetDto.getTargetId(), map);
|
|
|
|
-// } else {
|
|
|
|
-// Map<Long, List<DimensionDto>> map = finalScoreDimensionMap.get(courseTargetDto.getTargetId());
|
|
|
|
-// if (!map.containsKey(dimensionDto.getDimensionId())) {
|
|
|
|
-// map.put(dimensionDto.getDimensionId(), new ArrayList<>(Arrays.asList(dimensionDto)));
|
|
|
|
-// } else {
|
|
|
|
-// List<DimensionDto> list = map.get(dimensionDto.getDimensionId());
|
|
|
|
-// list.add(dimensionDto);
|
|
|
|
-// map.put(dimensionDto.getDimensionId(), list);
|
|
|
|
-// }
|
|
|
|
-// finalScoreDimensionMap.put(courseTargetDto.getTargetId(), map);
|
|
|
|
-// }
|
|
|
|
-
|
|
|
|
- //考生知识点
|
|
|
|
- if (!finalScoreExamStudentDimensionMap.containsKey(finalScoreResult.getStudentCode())) {
|
|
|
|
- Map<Long, Map<Long, DimensionDto>> map = new LinkedHashMap<>();
|
|
|
|
- Map<Long, DimensionDto> dimensionMap = new LinkedHashMap<>();
|
|
|
|
- dimensionMap.put(dimensionDto.getDimensionId(), new DimensionDto(dimensionDto, score));
|
|
|
|
- map.put(courseTargetDto.getTargetId(), dimensionMap);
|
|
|
|
- finalScoreExamStudentDimensionMap.put(finalScoreResult.getStudentCode(), map);
|
|
|
|
|
|
+ scoreRangeVoList.remove(0);
|
|
|
|
+ List<ReportScoreRangeViewDto> scoreRangeViewDtoList = GsonUtil.fromJson(JacksonUtil.parseJson(scoreRangeVoList), new TypeToken<List<ReportScoreRangeViewDto>>() {
|
|
|
|
+ }.getType());
|
|
|
|
+ ReportScoreViewDto reportScoreViewDto = new ReportScoreViewDto(failCount, failRate, scoreRangeViewDtoList);
|
|
|
|
+ reportCourseEvaluationSpreadDto.setScoreList(reportScoreViewDto);
|
|
|
|
+ }
|
|
|
|
+ trBasicInfo.setCourseEvaluationSpread(JacksonUtil.parseJson(reportCourseEvaluationSpreadDto));
|
|
|
|
+
|
|
|
|
+ //查询考生数据
|
|
|
|
+ List<FinalScoreResult> finalScoreResultList = tcFinalScoreService.examStudentOverview(examId, courseCode, paperNumber);//考生成绩
|
|
|
|
+ Map<String, List<Double>> usualScoreMap = new LinkedHashMap<>();//汇总平常成绩分数(用来算最高分,最低分,平均分)
|
|
|
|
+ Map<Long, List<Double>> finalScoreTargetMap = 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<>();//各课程目标期末考试分数图
|
|
|
|
+ List<ReportExamStudentDto> examStudentList = null;//考生集合
|
|
|
|
+ Map<String, FinalScoreResult> finalScoreResultMap = null;//考生成绩map
|
|
|
|
+ Map<String, PaperStructResult> paperStructResultMap = null;//试卷蓝图map
|
|
|
|
+ if (!CollectionUtils.isEmpty(finalScoreResultList)) {
|
|
|
|
+ //期末成绩明细map
|
|
|
|
+ paperStructResultMap = paperStructResultList.stream().collect(Collectors.toMap(k -> k.getMainNumber() + "-" + k.getSubNumber(), Function.identity(), (dto1, dto2) -> dto1));
|
|
|
|
+ finalScoreResultMap = finalScoreResultList.stream().collect(Collectors.toMap(FinalScoreResult::getStudentCode, Function.identity(), (dto1, dto2) -> dto1));
|
|
|
|
+
|
|
|
|
+ examStudentList = new ArrayList<>(finalScoreResultList.size());
|
|
|
|
+ for (FinalScoreResult finalScoreResult : finalScoreResultList) {
|
|
|
|
+ //解析期末成绩知识点
|
|
|
|
+ JSONArray finalScoreDetailJsonArray = JSONArray.parseArray(finalScoreResult.getFinalScoreDetail());
|
|
|
|
+ for (int i = 0; i < finalScoreDetailJsonArray.size(); i++) {
|
|
|
|
+ JSONObject jsonObject = finalScoreDetailJsonArray.getJSONObject(i);
|
|
|
|
+ Double score = Objects.nonNull(jsonObject.get("score")) ? Double.parseDouble(jsonObject.get("score").toString()) : 0d;
|
|
|
|
+ PaperStructResult paperStructResult = paperStructResultMap.get(jsonObject.get("name").toString());
|
|
|
|
+ if (Objects.nonNull(paperStructResult)) {
|
|
|
|
+ List<CourseTargetDto> courseTargetDtoList = paperStructResult.getTargetList();
|
|
|
|
+
|
|
|
|
+ for (CourseTargetDto courseTargetDto : courseTargetDtoList) {
|
|
|
|
+ targetMap.put(courseTargetDto.getTargetId(), new CourseTargetWeightDto(courseTargetDto.getTargetId(), courseTargetDto.getTargetName()));
|
|
|
|
+
|
|
|
|
+ //课程目标
|
|
|
|
+ if (!finalScoreTargetMap.containsKey(courseTargetDto.getTargetId())) {
|
|
|
|
+ finalScoreTargetMap.put(courseTargetDto.getTargetId(), new ArrayList<>(Arrays.asList(score)));
|
|
} else {
|
|
} else {
|
|
- Map<Long, Map<Long, DimensionDto>> map = finalScoreExamStudentDimensionMap.get(finalScoreResult.getStudentCode());
|
|
|
|
- if (!map.containsKey(courseTargetDto.getTargetId())) {
|
|
|
|
|
|
+ List<Double> list = finalScoreTargetMap.get(courseTargetDto.getTargetId());
|
|
|
|
+ list.add(score);
|
|
|
|
+ finalScoreTargetMap.put(courseTargetDto.getTargetId(), list);
|
|
|
|
+ }
|
|
|
|
+ //知识点
|
|
|
|
+ List<DimensionDto> dimensionDtoList = courseTargetDto.getDimensionList();
|
|
|
|
+ for (DimensionDto dimensionDto : dimensionDtoList) {
|
|
|
|
+ //考生知识点
|
|
|
|
+ if (!finalScoreExamStudentDimensionMap.containsKey(finalScoreResult.getStudentCode())) {
|
|
|
|
+ Map<Long, Map<Long, DimensionDto>> map = new LinkedHashMap<>();
|
|
Map<Long, DimensionDto> dimensionMap = new LinkedHashMap<>();
|
|
Map<Long, DimensionDto> dimensionMap = new LinkedHashMap<>();
|
|
dimensionMap.put(dimensionDto.getDimensionId(), new DimensionDto(dimensionDto, score));
|
|
dimensionMap.put(dimensionDto.getDimensionId(), new DimensionDto(dimensionDto, score));
|
|
map.put(courseTargetDto.getTargetId(), dimensionMap);
|
|
map.put(courseTargetDto.getTargetId(), dimensionMap);
|
|
|
|
+ finalScoreExamStudentDimensionMap.put(finalScoreResult.getStudentCode(), map);
|
|
} else {
|
|
} else {
|
|
- Map<Long, DimensionDto> dimensionMap = map.get(courseTargetDto.getTargetId());
|
|
|
|
- if (!dimensionMap.containsKey(dimensionDto.getDimensionId())) {
|
|
|
|
|
|
+ Map<Long, Map<Long, DimensionDto>> map = finalScoreExamStudentDimensionMap.get(finalScoreResult.getStudentCode());
|
|
|
|
+ if (!map.containsKey(courseTargetDto.getTargetId())) {
|
|
|
|
+ Map<Long, DimensionDto> dimensionMap = new LinkedHashMap<>();
|
|
dimensionMap.put(dimensionDto.getDimensionId(), new DimensionDto(dimensionDto, score));
|
|
dimensionMap.put(dimensionDto.getDimensionId(), new DimensionDto(dimensionDto, score));
|
|
|
|
+ map.put(courseTargetDto.getTargetId(), dimensionMap);
|
|
} else {
|
|
} else {
|
|
- DimensionDto dimensionDtoTemp = dimensionMap.get(dimensionDto.getDimensionId());
|
|
|
|
- dimensionDtoTemp.setDimensionScore(dimensionDtoTemp.getDimensionScore().doubleValue() + score.doubleValue());
|
|
|
|
|
|
+ Map<Long, DimensionDto> dimensionMap = map.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());
|
|
|
|
+ }
|
|
|
|
+ map.put(courseTargetDto.getTargetId(), dimensionMap);
|
|
}
|
|
}
|
|
- map.put(courseTargetDto.getTargetId(), dimensionMap);
|
|
|
|
|
|
+ finalScoreExamStudentDimensionMap.put(finalScoreResult.getStudentCode(), map);
|
|
}
|
|
}
|
|
- 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())) {
|
|
|
|
|
|
+ //目标-考生知识点总分
|
|
|
|
+ if (!finalScoreExamStudentDimensionSumMap.containsKey(courseTargetDto.getTargetId())) {
|
|
|
|
+ Map<Long, DimensionDto> dimensionMap = new LinkedHashMap<>();
|
|
dimensionMap.put(dimensionDto.getDimensionId(), new DimensionDto(dimensionDto, score));
|
|
dimensionMap.put(dimensionDto.getDimensionId(), new DimensionDto(dimensionDto, score));
|
|
|
|
+ finalScoreExamStudentDimensionSumMap.put(courseTargetDto.getTargetId(), dimensionMap);
|
|
} else {
|
|
} else {
|
|
- DimensionDto dimensionDtoTemp = dimensionMap.get(dimensionDto.getDimensionId());
|
|
|
|
- dimensionDtoTemp.setDimensionScore(dimensionDtoTemp.getDimensionScore().doubleValue() + score.doubleValue());
|
|
|
|
- dimensionMap.put(dimensionDto.getDimensionId(), dimensionDtoTemp);
|
|
|
|
|
|
+ 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);
|
|
}
|
|
}
|
|
- finalScoreExamStudentDimensionSumMap.put(courseTargetDto.getTargetId(), dimensionMap);
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- }
|
|
|
|
|
|
|
|
- //解析平时作业分数图
|
|
|
|
- JSONArray usualScoreJsonArray = JSONArray.parseArray(finalScoreResult.getUsualScore());
|
|
|
|
- List<ReportExamStudentUsualScoreObjDto> scoreList = new ArrayList<>(usualScoreJsonArray.size());
|
|
|
|
- for (int i = 0; i < usualScoreJsonArray.size(); i++) {
|
|
|
|
- JSONObject jsonObject = usualScoreJsonArray.getJSONObject(i);
|
|
|
|
- if (!usualScoreMap.containsKey(jsonObject.get("name"))) {
|
|
|
|
- usualScoreMap.put(jsonObject.get("name").toString(), new ArrayList<>(Arrays.asList(Objects.nonNull(jsonObject.get("score")) ? Double.parseDouble(jsonObject.get("score").toString()) : 0d)));
|
|
|
|
- } else {
|
|
|
|
- List<Double> list = usualScoreMap.get(jsonObject.get("name").toString());
|
|
|
|
- list.add(Objects.nonNull(jsonObject.get("score")) ? Double.parseDouble(jsonObject.get("score").toString()) : 0d);
|
|
|
|
- usualScoreMap.put(jsonObject.get("name").toString(), list);
|
|
|
|
|
|
+ //解析平时作业分数图
|
|
|
|
+ JSONArray usualScoreJsonArray = JSONArray.parseArray(finalScoreResult.getUsualScore());
|
|
|
|
+ List<ReportExamStudentUsualScoreObjDto> scoreList = new ArrayList<>(usualScoreJsonArray.size());
|
|
|
|
+ for (int i = 0; i < usualScoreJsonArray.size(); i++) {
|
|
|
|
+ JSONObject jsonObject = usualScoreJsonArray.getJSONObject(i);
|
|
|
|
+ if (!usualScoreMap.containsKey(jsonObject.get("name"))) {
|
|
|
|
+ usualScoreMap.put(jsonObject.get("name").toString(), new ArrayList<>(Arrays.asList(Objects.nonNull(jsonObject.get("score")) ? Double.parseDouble(jsonObject.get("score").toString()) : 0d)));
|
|
|
|
+ } else {
|
|
|
|
+ List<Double> list = usualScoreMap.get(jsonObject.get("name").toString());
|
|
|
|
+ list.add(Objects.nonNull(jsonObject.get("score")) ? Double.parseDouble(jsonObject.get("score").toString()) : 0d);
|
|
|
|
+ usualScoreMap.put(jsonObject.get("name").toString(), list);
|
|
|
|
+ }
|
|
|
|
+ scoreList.add(new ReportExamStudentUsualScoreObjDto(jsonObject.get("name").toString(), Objects.nonNull(jsonObject.get("score")) ? Double.parseDouble(jsonObject.get("score").toString()) : 0d));
|
|
}
|
|
}
|
|
- scoreList.add(new ReportExamStudentUsualScoreObjDto(jsonObject.get("name").toString(), Objects.nonNull(jsonObject.get("score")) ? Double.parseDouble(jsonObject.get("score").toString()) : 0d));
|
|
|
|
|
|
+ finalScoreResult.setUsualScoreDto(new ReportExamStudentUsualScoreDto(scoreList));
|
|
|
|
+ examStudentList.add(new ReportExamStudentDto(finalScoreResult));
|
|
}
|
|
}
|
|
- finalScoreResult.setUsualScoreDto(new ReportExamStudentUsualScoreDto(scoreList));
|
|
|
|
- examStudentList.add(new ReportExamStudentDto(finalScoreResult));
|
|
|
|
}
|
|
}
|
|
- }
|
|
|
|
|
|
|
|
- //计算平常成绩最高分,最低分,平均分
|
|
|
|
- usualScoreMap.forEach((k, v) -> {
|
|
|
|
- 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 sumScore = v.stream().mapToDouble(Double::doubleValue).sum();
|
|
|
|
- usualScoreOverviewDtoMap.put(k, new UsualScoreOverviewDto(k, maxScore, minScore, avgScore, sumScore));
|
|
|
|
- });
|
|
|
|
-
|
|
|
|
- //计算各课程目标期末考试最高分,最低分,平均分
|
|
|
|
- finalScoreTargetMap.forEach((k, v) -> {
|
|
|
|
- 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 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));
|
|
|
|
- });
|
|
|
|
-
|
|
|
|
- //计算各课程目标下期末考试知识点最高分,最低分,平均分
|
|
|
|
-// finalScoreDimensionMap.forEach((k, v) -> {
|
|
|
|
-// v.forEach((k1, v1) -> {
|
|
|
|
-// Double maxScore = v1.stream().mapToDouble(DimensionDto::getDimensionScore).max().orElse(0d);
|
|
|
|
-// Double minScore = v1.stream().mapToDouble(DimensionDto::getDimensionScore).min().orElse(0d);
|
|
|
|
-// Double avgScore = new BigDecimal(v1.stream().mapToDouble(DimensionDto::getDimensionScore).average().orElse(0d)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
|
|
-// finalScoreDimensionOverviewDtoMap.put(k, new FinalScoreDimensionOverviewDto(k1, maxScore, minScore, avgScore));
|
|
|
|
-// });
|
|
|
|
-// });
|
|
|
|
-
|
|
|
|
- //TODO 课程考核成绩评价结果-待曹子轩补充目标/评价方式数据,有测试数据
|
|
|
|
- ReportCourseEvaluationResultDto reportCourseEvaluationResultDto = null;
|
|
|
|
- if (!CollectionUtils.isEmpty(paperStructResultList)) {
|
|
|
|
- List<CourseTargetDto> targetList = new ArrayList<>(targetMap.size());
|
|
|
|
- AtomicInteger sequenceId = new AtomicInteger(1);//流程连接id
|
|
|
|
- AtomicReference<Double> targetValue = new AtomicReference<>(0.0d);
|
|
|
|
- targetMap.forEach((k, v) -> {
|
|
|
|
- Double evaluationValue = 0.0d;
|
|
|
|
- List<ReportEvaluationDto> reportEvaluationDtoList = new ArrayList<>();
|
|
|
|
- UsualScoreOverviewDto usualScoreOverviewDto = usualScoreOverviewDtoMap.get("作业" + sequenceId.get());
|
|
|
|
- FinalScoreOverviewDto finalScoreOverviewDto = finalScoreOverviewDtoMap.get(k);
|
|
|
|
-
|
|
|
|
- ReportEvaluationDto reportEvaluationDto = new ReportEvaluationDto(usualScoreOverviewDto.getName(), new BigDecimal(30), 40d, usualScoreOverviewDto.getAvgScore());
|
|
|
|
- reportEvaluationDtoList.add(reportEvaluationDto);
|
|
|
|
-
|
|
|
|
- //课程目标-平时作业达成度计算
|
|
|
|
- if (Objects.nonNull(reportEvaluationDto.getWeight()) && reportEvaluationDto.getWeight().doubleValue() > 0d) {
|
|
|
|
- Double evaluationValueTemp = new BigDecimal(reportEvaluationDto.getAvg().doubleValue() + reportEvaluationDto.getScore().doubleValue()).divide(reportEvaluationDto.getWeight(), 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
|
|
- evaluationValue = evaluationValue.doubleValue() + evaluationValueTemp.doubleValue();
|
|
|
|
- Map<String, BigDecimal> usualScoreWeight = v.getUsualScoreWeight();
|
|
|
|
- usualScoreWeight = CollectionUtils.isEmpty(usualScoreWeight) ? new LinkedHashMap<>() : usualScoreWeight;
|
|
|
|
- usualScoreWeight.put(reportEvaluationDto.getName(), reportEvaluationDto.getWeight().add(new BigDecimal(new Random().nextInt(10))));
|
|
|
|
- v.setUsualScoreWeight(usualScoreWeight);
|
|
|
|
- }
|
|
|
|
|
|
+ //计算平常成绩最高分,最低分,平均分
|
|
|
|
+ usualScoreMap.forEach((k, v) -> {
|
|
|
|
+ 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 sumScore = v.stream().mapToDouble(Double::doubleValue).sum();
|
|
|
|
+ usualScoreOverviewDtoMap.put(k, new UsualScoreOverviewDto(k, maxScore, minScore, avgScore, sumScore));
|
|
|
|
+ });
|
|
|
|
|
|
- ReportEvaluationDto reportEvaluationDto1 = new ReportEvaluationDto("期末考试", new BigDecimal(70), 60d, finalScoreOverviewDto.getAvgScore());
|
|
|
|
- reportEvaluationDtoList.add(reportEvaluationDto1);
|
|
|
|
|
|
+ //计算各课程目标期末考试最高分,最低分,平均分
|
|
|
|
+ finalScoreTargetMap.forEach((k, v) -> {
|
|
|
|
+ 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 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));
|
|
|
|
+ });
|
|
|
|
|
|
- //课程目标-期末成绩达成度计算
|
|
|
|
- if (Objects.nonNull(reportEvaluationDto1.getWeight()) && reportEvaluationDto1.getWeight().doubleValue() > 0d) {
|
|
|
|
- Double evaluationValueTemp = new BigDecimal(reportEvaluationDto1.getAvg().doubleValue() + reportEvaluationDto1.getScore().doubleValue()).divide(reportEvaluationDto1.getWeight(), 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
|
|
- evaluationValue = evaluationValue.doubleValue() + evaluationValueTemp.doubleValue();
|
|
|
|
- v.setFinalScoreWeight(reportEvaluationDto1.getWeight().subtract(new BigDecimal(new Random().nextInt(10))));
|
|
|
|
- }
|
|
|
|
|
|
+ //TODO 课程考核成绩评价结果-待曹子轩补充目标/评价方式数据,有测试数据
|
|
|
|
+ if (!CollectionUtils.isEmpty(paperStructResultList)) {
|
|
|
|
+ List<CourseTargetDto> targetList = new ArrayList<>(targetMap.size());
|
|
|
|
+ AtomicInteger sequenceId = new AtomicInteger(1);//流程连接id
|
|
|
|
+ AtomicReference<Double> targetValue = new AtomicReference<>(0.0d);
|
|
|
|
+ targetMap.forEach((k, v) -> {
|
|
|
|
+ Double evaluationValue = 0.0d;
|
|
|
|
+ List<ReportEvaluationDto> reportEvaluationDtoList = new ArrayList<>();
|
|
|
|
+ UsualScoreOverviewDto usualScoreOverviewDto = usualScoreOverviewDtoMap.get("作业" + sequenceId.get());
|
|
|
|
+ FinalScoreOverviewDto finalScoreOverviewDto = finalScoreOverviewDtoMap.get(k);
|
|
|
|
+
|
|
|
|
+ ReportEvaluationDto reportEvaluationDto = new ReportEvaluationDto(usualScoreOverviewDto.getName(), new BigDecimal(30), 40d, usualScoreOverviewDto.getAvgScore());
|
|
|
|
+ reportEvaluationDtoList.add(reportEvaluationDto);
|
|
|
|
+
|
|
|
|
+ //课程目标-平时作业达成度计算
|
|
|
|
+ if (Objects.nonNull(reportEvaluationDto.getWeight()) && reportEvaluationDto.getWeight().doubleValue() > 0d) {
|
|
|
|
+ Double evaluationValueTemp = new BigDecimal(reportEvaluationDto.getAvg().doubleValue() + reportEvaluationDto.getScore().doubleValue()).divide(reportEvaluationDto.getWeight(), 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
|
|
+ evaluationValue = evaluationValue.doubleValue() + evaluationValueTemp.doubleValue();
|
|
|
|
+ Map<String, BigDecimal> usualScoreWeight = v.getUsualScoreWeight();
|
|
|
|
+ usualScoreWeight = CollectionUtils.isEmpty(usualScoreWeight) ? new LinkedHashMap<>() : usualScoreWeight;
|
|
|
|
+ usualScoreWeight.put(reportEvaluationDto.getName(), reportEvaluationDto.getWeight().add(new BigDecimal(new Random().nextInt(10))));
|
|
|
|
+ v.setUsualScoreWeight(usualScoreWeight);
|
|
|
|
+ }
|
|
|
|
|
|
- CourseTargetDto courseTargetDto = new CourseTargetDto(k, v.getTargetName(), Long.parseLong(String.valueOf(sequenceId.get())), "评价方式" + sequenceId.get(), "评价方式描述" + sequenceId.get(), reportEvaluationDtoList, evaluationValue);
|
|
|
|
- targetList.add(courseTargetDto);
|
|
|
|
- targetValue.set(targetValue.get().doubleValue() + courseTargetDto.getEvaluationValue().doubleValue());
|
|
|
|
- sequenceId.incrementAndGet();
|
|
|
|
- });
|
|
|
|
- reportCourseEvaluationResultDto = new ReportCourseEvaluationResultDto("测试课程总目标1", targetValue.get(), targetList);
|
|
|
|
- trBasicInfo.setCourseEvaluationResult(JacksonUtil.parseJson(reportCourseEvaluationResultDto));
|
|
|
|
- }
|
|
|
|
|
|
+ ReportEvaluationDto reportEvaluationDto1 = new ReportEvaluationDto("期末考试", new BigDecimal(70), 60d, finalScoreOverviewDto.getAvgScore());
|
|
|
|
+ reportEvaluationDtoList.add(reportEvaluationDto1);
|
|
|
|
|
|
- //课程目标达成评价明细结果-考生集合
|
|
|
|
- ReportCourseEvaluationResultDetailDto reportCourseEvaluationResultDetailDto = null;
|
|
|
|
- if (!CollectionUtils.isEmpty(examStudentList)) {
|
|
|
|
- for (ReportExamStudentDto reportExamStudentDto : examStudentList) {
|
|
|
|
- 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);
|
|
|
|
- PaperStructResult paperStructResult = paperStructResultMap.get(jsonObject.get("name").toString());
|
|
|
|
- if (Objects.nonNull(paperStructResult)) {
|
|
|
|
- List<CourseTargetDto> courseTargetDtoList = paperStructResult.getTargetList();
|
|
|
|
- for (CourseTargetDto courseTargetDto : courseTargetDtoList) {
|
|
|
|
- Map<Long, DimensionDto> dimensionDtoMap = map.get(courseTargetDto.getTargetId());
|
|
|
|
- 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);
|
|
|
|
- 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())) {
|
|
|
|
- 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));
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ //课程目标-期末成绩达成度计算
|
|
|
|
+ if (Objects.nonNull(reportEvaluationDto1.getWeight()) && reportEvaluationDto1.getWeight().doubleValue() > 0d) {
|
|
|
|
+ Double evaluationValueTemp = new BigDecimal(reportEvaluationDto1.getAvg().doubleValue() + reportEvaluationDto1.getScore().doubleValue()).divide(reportEvaluationDto1.getWeight(), 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
|
|
+ evaluationValue = evaluationValue.doubleValue() + evaluationValueTemp.doubleValue();
|
|
|
|
+ v.setFinalScoreWeight(reportEvaluationDto1.getWeight().subtract(new BigDecimal(new Random().nextInt(10))));
|
|
}
|
|
}
|
|
- }
|
|
|
|
- }
|
|
|
|
- //加入平均分
|
|
|
|
- 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);
|
|
|
|
- }
|
|
|
|
|
|
+
|
|
|
|
+ CourseTargetDto courseTargetDto = new CourseTargetDto(k, v.getTargetName(), Long.parseLong(String.valueOf(sequenceId.get())), "评价方式" + sequenceId.get(), "评价方式描述" + sequenceId.get(), reportEvaluationDtoList, evaluationValue);
|
|
|
|
+ targetList.add(courseTargetDto);
|
|
|
|
+ targetValue.set(targetValue.get().doubleValue() + courseTargetDto.getEvaluationValue().doubleValue());
|
|
|
|
+ sequenceId.incrementAndGet();
|
|
|
|
+ });
|
|
|
|
+ reportCourseEvaluationResultDto = new ReportCourseEvaluationResultDto("测试课程总目标1", targetValue.get(), targetList);
|
|
|
|
+ trBasicInfo.setCourseEvaluationResult(JacksonUtil.parseJson(reportCourseEvaluationResultDto));
|
|
}
|
|
}
|
|
|
|
|
|
- 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);
|
|
|
|
|
|
+ //课程目标达成评价明细结果-考生集合
|
|
|
|
+ List<ReportExamStudentDto> examStudentNewList = trExamStudentService.getExamStudentReportDetail(trBasicInfo, examStudentList, finalScoreExamStudentDimensionMap,
|
|
|
|
+ finalScoreResultMap, paperStructResultMap, targetMap, finalScoreExamStudentDimensionSumMap,
|
|
|
|
+ usualScoreOverviewDtoMap);
|
|
|
|
+ reportCourseEvaluationResultDetailDto = new ReportCourseEvaluationResultDetailDto(examStudentNewList);
|
|
|
|
+ } else {
|
|
|
|
+ reportCourseBasicInfoDto = new ReportCourseBasicInfoDto(trBasicInfo);
|
|
|
|
+ reportCourseEvaluationSpreadDto = JSONObject.parseObject(trBasicInfo.getCourseEvaluationSpread(), ReportCourseEvaluationSpreadDto.class);
|
|
|
|
+ reportCourseEvaluationResultDto = JSONObject.parseObject(trBasicInfo.getCourseEvaluationResult(), ReportCourseEvaluationResultDto.class);
|
|
|
|
+
|
|
|
|
+ List<TRExamStudent> trExamStudentList = trExamStudentService.list(new QueryWrapper<TRExamStudent>().lambda().eq(TRExamStudent::getrBasicInfoId, trBasicInfo.getId()));
|
|
|
|
+ if (!CollectionUtils.isEmpty(trExamStudentList)) {
|
|
|
|
+ List<ReportExamStudentDto> examStudentList = new ArrayList<>(trExamStudentList.size());
|
|
|
|
+ for (TRExamStudent trExamStudent : trExamStudentList) {
|
|
|
|
+ examStudentList.add(new ReportExamStudentDto(trExamStudent));
|
|
}
|
|
}
|
|
|
|
+ reportCourseEvaluationResultDetailDto = new ReportCourseEvaluationResultDetailDto(examStudentList);
|
|
}
|
|
}
|
|
- reportExamStudentDto.setTargetList(reportExamStudentTargetDtoList);
|
|
|
|
- examStudentList.add(reportExamStudentDto);
|
|
|
|
- reportCourseEvaluationResultDetailDto = new ReportCourseEvaluationResultDetailDto(examStudentList);
|
|
|
|
- trBasicInfo.setCourseEvaluationResultDetail(JacksonUtil.parseJson(reportCourseEvaluationResultDetailDto));
|
|
|
|
}
|
|
}
|
|
|
|
|
|
trBasicInfo.updateInfo(sysUser.getId());
|
|
trBasicInfo.updateInfo(sysUser.getId());
|
|
//课程目标达成评价明细结果-课程目标达成评价值图
|
|
//课程目标达成评价明细结果-课程目标达成评价值图
|
|
trBasicInfoService.saveOrUpdate(trBasicInfo);
|
|
trBasicInfoService.saveOrUpdate(trBasicInfo);
|
|
|
|
|
|
|
|
+ ReportCommonDto reportCommonDto = new ReportCommonDto(examId, courseCode, markPaper.getCourseName(), paperNumber);//公共信息
|
|
trBasicInfo.setReportResult(new ReportResult(reportCommonDto, reportCourseBasicInfoDto, reportCourseEvaluationSpreadDto, reportCourseEvaluationResultDto, reportCourseEvaluationResultDetailDto));
|
|
trBasicInfo.setReportResult(new ReportResult(reportCommonDto, reportCourseBasicInfoDto, reportCourseEvaluationSpreadDto, reportCourseEvaluationResultDto, reportCourseEvaluationResultDetailDto));
|
|
return ResultUtil.ok(trBasicInfo.getReportResult());
|
|
return ResultUtil.ok(trBasicInfo.getReportResult());
|
|
}
|
|
}
|