|
@@ -681,272 +681,18 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
|
|
@Override
|
|
@Override
|
|
public TableRenderData buildWordTable5(TRBasicInfo trBasicInfo, CourseReportBean courseReportBean) {
|
|
public TableRenderData buildWordTable5(TRBasicInfo trBasicInfo, CourseReportBean courseReportBean) {
|
|
TableRenderData tableRenderDataExamStudent = null;
|
|
TableRenderData tableRenderDataExamStudent = null;
|
|
- List<TRExamStudent> trExamStudentList = trExamStudentService.list(new QueryWrapper<TRExamStudent>().lambda()
|
|
|
|
- .eq(TRExamStudent::getrBasicInfoId, trBasicInfo.getId()).and(w -> w.ne(TRExamStudent::getStudentCode, "目标分")));
|
|
|
|
- if (!CollectionUtils.isEmpty(trExamStudentList)) {
|
|
|
|
- List<CellRenderData> examStudent_cells_1 = new ArrayList<>(), examStudent_cells_2 = new ArrayList<>();
|
|
|
|
- examStudent_cells_1.add(Cells.of("序号").center().create());
|
|
|
|
- examStudent_cells_1.add(Cells.of("学号").center().create());
|
|
|
|
- examStudent_cells_1.add(Cells.of("姓名").center().create());
|
|
|
|
- examStudent_cells_1.add(Cells.of("行政班级").center().create());
|
|
|
|
- examStudent_cells_2.addAll(examStudent_cells_1);
|
|
|
|
-
|
|
|
|
- Map<String, Integer> targetUsualScoreSizeMap = new LinkedHashMap<>();
|
|
|
|
- Map<Long, BigDecimal> targetCourseDegreeMap = new LinkedHashMap<>();
|
|
|
|
- TRExamStudent trExamStudentTemp = trExamStudentList.get(0);
|
|
|
|
-
|
|
|
|
- RowRenderData[] rowRenderDataExamStudent = new RowRenderData[trExamStudentList.size() + 3];
|
|
|
|
- RowRenderData examStudent_header_1 = new RowRenderData();
|
|
|
|
- examStudent_header_1.setCells(examStudent_cells_1);
|
|
|
|
- examStudent_header_1.setRowStyle(this.getHeadRowStyle());
|
|
|
|
-
|
|
|
|
- RowRenderData examStudent_header_2 = new RowRenderData();
|
|
|
|
- examStudent_header_2.setCells(examStudent_cells_2);
|
|
|
|
- examStudent_header_2.setRowStyle(this.getHeadRowStyle());
|
|
|
|
-
|
|
|
|
- rowRenderDataExamStudent[0] = examStudent_header_1;
|
|
|
|
- rowRenderDataExamStudent[1] = examStudent_header_2;
|
|
|
|
-
|
|
|
|
- ReportCourseEvaluationResultDto reportCourseEvaluationResultDto = JSONObject.parseObject(trBasicInfo.getCourseEvaluationResult(), ReportCourseEvaluationResultDto.class);
|
|
|
|
- List<CourseTargetWebDto> courseTargetWebDtoList = reportCourseEvaluationResultDto.getTargetList();
|
|
|
|
- for (CourseTargetWebDto c : courseTargetWebDtoList) {
|
|
|
|
- if (!CollectionUtils.isEmpty(c.getEvaluationList())) {
|
|
|
|
- targetUsualScoreSizeMap.put(c.getTargetName(), c.getEvaluationList().size() - 1);
|
|
|
|
- } else {
|
|
|
|
- targetUsualScoreSizeMap.put(c.getTargetName(), 0);
|
|
|
|
- }
|
|
|
|
- targetCourseDegreeMap.put(c.getTargetId(), c.getEvaluationValue());
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- Double courseDegree = 0.0d;
|
|
|
|
- if (!CollectionUtils.isEmpty(targetCourseDegreeMap)) {
|
|
|
|
- courseDegree = targetCourseDegreeMap.values().stream().filter(s -> Objects.nonNull(s)).collect(Collectors.toList()).stream().mapToDouble(b -> b.doubleValue()).min().orElse(0);
|
|
|
|
- }
|
|
|
|
- //首行
|
|
|
|
- if (Objects.nonNull(trExamStudentTemp.getResultDetail())) {
|
|
|
|
- List<ReportExamStudentTargetDto> reportExamStudentTargetDtoList = JSONArray.parseArray(trExamStudentTemp.getResultDetail(), ReportExamStudentTargetDto.class);
|
|
|
|
- for (ReportExamStudentTargetDto reportExamStudentTargetDto : reportExamStudentTargetDtoList) {
|
|
|
|
- int finalScoreSize = Objects.nonNull(reportExamStudentTargetDto.getFinalScore()) ? 1 : 0;
|
|
|
|
- int size = finalScoreSize + (Objects.nonNull(reportExamStudentTargetDto.getUsualScore()) && !CollectionUtils.isEmpty(reportExamStudentTargetDto.getUsualScore().getScoreList()) ? reportExamStudentTargetDto.getUsualScore().getScoreList().size() : 0);
|
|
|
|
- examStudent_cells_1.add(Cells.of(reportExamStudentTargetDto.getTargetName()).center().create());
|
|
|
|
- ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = reportExamStudentTargetDto.getUsualScore();
|
|
|
|
- //平常作业
|
|
|
|
- if (Objects.nonNull(reportExamStudentUsualScoreDto) && !CollectionUtils.isEmpty(reportExamStudentUsualScoreDto.getScoreList())) {
|
|
|
|
- List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = reportExamStudentUsualScoreDto.getScoreList();
|
|
|
|
- for (ReportExamStudentUsualScoreObjDto reportExamStudentUsualScoreObjDto : reportExamStudentUsualScoreObjDtoList) {
|
|
|
|
- examStudent_cells_1.add(Cells.of("").center().create());
|
|
|
|
- examStudent_cells_2.add(Cells.of(reportExamStudentUsualScoreObjDto.getEvaluation()).center().create());
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- //期末考试
|
|
|
|
- ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = reportExamStudentTargetDto.getFinalScore();
|
|
|
|
- if (Objects.nonNull(reportExamStudentFinalScoreDto) && Objects.equals(reportExamStudentFinalScoreDto.getEvaluation(), SystemConstant.FINAL_SCORE_STR)) {
|
|
|
|
- examStudent_cells_2.add(Cells.of(SystemConstant.FINAL_SCORE_STR).center().create());
|
|
|
|
- } else {
|
|
|
|
- int usualScoreSize = reportExamStudentTargetDto.getUsualScore().getScoreList().size();
|
|
|
|
- while ((size - usualScoreSize) >= 0) {
|
|
|
|
- examStudent_cells_1.remove(examStudent_cells_1.size() - 1);
|
|
|
|
- size = size - 1;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- examStudent_cells_1.add(Cells.of("综合成绩").center().create());
|
|
|
|
- examStudent_cells_2.add(Cells.of("综合成绩").center().create());
|
|
|
|
- examStudent_cells_1.add(Cells.of("达成系数").center().create());
|
|
|
|
- examStudent_cells_2.add(Cells.of("达成系数").center().create());
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- List<BigDecimal> scoreList = new ArrayList<>();
|
|
|
|
- List<TRExamStudent> sortTrExamStudentList = new ArrayList<>();
|
|
|
|
- sortTrExamStudentList.addAll(trExamStudentList.subList(trExamStudentList.size() - 2, trExamStudentList.size()));
|
|
|
|
-
|
|
|
|
- Collections.reverse(sortTrExamStudentList);
|
|
|
|
- trExamStudentList.remove(trExamStudentList.size() - 1);
|
|
|
|
- trExamStudentList.remove(trExamStudentList.size() - 1);
|
|
|
|
- trExamStudentList.addAll(sortTrExamStudentList);
|
|
|
|
-
|
|
|
|
- List<TRExamStudent> trExamStudentNewList = new ArrayList<>();
|
|
|
|
- trExamStudentNewList.addAll(trExamStudentList);
|
|
|
|
- trExamStudentNewList.remove(trExamStudentNewList.size() - 1);
|
|
|
|
- trExamStudentNewList.remove(trExamStudentNewList.size() - 1);
|
|
|
|
-
|
|
|
|
- BigDecimal targetAvgScore = new BigDecimal(trExamStudentNewList.stream().mapToDouble(s -> s.getScore().doubleValue()).sum()).divide(new BigDecimal(trExamStudentNewList.size()), 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
|
- Map<Long, ConcurrentMap<String, Integer>> scatterYMap = new LinkedHashMap<>();
|
|
|
|
- for (int i = 0; i < trExamStudentList.size(); i++) {
|
|
|
|
- TRExamStudent trExamStudent = trExamStudentList.get(i);
|
|
|
|
- RowRenderData examStudent_row = new RowRenderData();
|
|
|
|
- List<CellRenderData> examStudent_cells = new ArrayList<>();
|
|
|
|
- switch (trExamStudent.getName()) {
|
|
|
|
- case "平均分":
|
|
|
|
- examStudent_cells.add(Cells.of("平均分").create());
|
|
|
|
- examStudent_cells.add(Cells.of("平均分").create());
|
|
|
|
- examStudent_cells.add(Cells.of("平均分").create());
|
|
|
|
- break;
|
|
|
|
- case "各课程目标平均分":
|
|
|
|
- examStudent_cells.add(Cells.of("课程目标达成度").create());
|
|
|
|
- examStudent_cells.add(Cells.of("课程目标达成度").create());
|
|
|
|
- examStudent_cells.add(Cells.of("课程目标达成度").create());
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- examStudent_cells.add(Cells.of(String.valueOf(i + 1)).create());
|
|
|
|
- examStudent_cells.add(Cells.of(trExamStudent.getStudentCode()).create());
|
|
|
|
- examStudent_cells.add(Cells.of(trExamStudent.getName()).create());
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- examStudent_cells.add(Cells.of(trExamStudent.getAdministrativeClass()).create());
|
|
|
|
-
|
|
|
|
- if (Objects.nonNull(trExamStudent.getResultDetail())) {
|
|
|
|
- List<ReportExamStudentTargetDto> reportExamStudentTargetDtoList = JSONArray.parseArray(trExamStudent.getResultDetail(), ReportExamStudentTargetDto.class);
|
|
|
|
- for (ReportExamStudentTargetDto reportExamStudentTargetDto : reportExamStudentTargetDtoList) {
|
|
|
|
- if (Objects.nonNull(reportExamStudentTargetDto)) {
|
|
|
|
- BigDecimal matrixDegree = reportExamStudentTargetDto.getMatrixDegree();
|
|
|
|
- if (!Objects.equals(trExamStudent.getName(), "平均分")
|
|
|
|
- && !Objects.equals(trExamStudent.getName(), "各课程目标平均分")
|
|
|
|
- && Objects.nonNull(matrixDegree)) {
|
|
|
|
- trBasicInfoService.getScatterValue(scatterYMap, reportExamStudentTargetDto);
|
|
|
|
- }
|
|
|
|
- ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = reportExamStudentTargetDto.getUsualScore();
|
|
|
|
- //平常作业
|
|
|
|
- if (Objects.nonNull(reportExamStudentUsualScoreDto) && !CollectionUtils.isEmpty(reportExamStudentUsualScoreDto.getScoreList())) {
|
|
|
|
- List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = reportExamStudentUsualScoreDto.getScoreList();
|
|
|
|
- for (ReportExamStudentUsualScoreObjDto reportExamStudentUsualScoreObjDto : reportExamStudentUsualScoreObjDtoList) {
|
|
|
|
- switch (trExamStudent.getName()) {
|
|
|
|
- case "平均分":
|
|
|
|
- examStudent_cells.add(Cells.of(SystemConstant.df.format(reportExamStudentUsualScoreObjDto.getMatrixAvgScore())).create());
|
|
|
|
- break;
|
|
|
|
- case "各课程目标平均分":
|
|
|
|
- examStudent_cells.add(Cells.of(targetCourseDegreeMap.get(reportExamStudentTargetDto.getTargetId()) + "").create());
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- examStudent_cells.add(Cells.of(SystemConstant.df.format(reportExamStudentUsualScoreObjDto.getScore())).create());
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- //期末考试
|
|
|
|
- ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = reportExamStudentTargetDto.getFinalScore();
|
|
|
|
- if (Objects.nonNull(reportExamStudentFinalScoreDto) && Objects.equals(reportExamStudentFinalScoreDto.getEvaluation(), SystemConstant.FINAL_SCORE_STR)) {
|
|
|
|
- courseReportBean.getCourseBasicBean().setFinalScoreWeight(reportExamStudentFinalScoreDto.getTargetWeight());
|
|
|
|
- switch (trExamStudent.getName()) {
|
|
|
|
- case "平均分":
|
|
|
|
- examStudent_cells.add(Cells.of(SystemConstant.df.format(reportExamStudentFinalScoreDto.getMatrixAvgScore())).create());
|
|
|
|
- break;
|
|
|
|
- case "各课程目标平均分":
|
|
|
|
- examStudent_cells.add(Cells.of(targetCourseDegreeMap.get(reportExamStudentTargetDto.getTargetId()) + "").create());
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- examStudent_cells.add(Cells.of(SystemConstant.df.format(reportExamStudentFinalScoreDto.getTargetScoreSum())).create());
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- switch (trExamStudent.getName()) {
|
|
|
|
- case "平均分":
|
|
|
|
- examStudent_cells.add(Cells.of(SystemConstant.df.format(targetAvgScore.setScale(2, BigDecimal.ROUND_HALF_UP))).create());
|
|
|
|
- break;
|
|
|
|
- case "各课程目标平均分":
|
|
|
|
- examStudent_cells.add(Cells.of("").create());
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- scoreList.add(trExamStudent.getScore());
|
|
|
|
- examStudent_cells.add(Cells.of(SystemConstant.df.format(trExamStudent.getScore())).create());
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- String key = examStudent_cells.get(examStudent_cells.size() - 1).getParagraphs().get(0).getContents().get(0).toString();
|
|
|
|
- if (!Objects.equals(key.trim(), "") && !Objects.equals(key.trim(), "null")) {
|
|
|
|
- examStudent_cells.add(Cells.of(SystemConstant.df.format(new BigDecimal(key).divide(SystemConstant.PERCENT, 2, BigDecimal.ROUND_HALF_UP))).create());
|
|
|
|
- } else {
|
|
|
|
- examStudent_cells.add(Cells.of("").create());
|
|
|
|
- }
|
|
|
|
- examStudent_row.setCells(examStudent_cells);
|
|
|
|
- examStudent_row.setRowStyle(this.getRowStyle());
|
|
|
|
- rowRenderDataExamStudent[i + 2] = examStudent_row;
|
|
|
|
- }
|
|
|
|
- LinkedMultiValueMap<Long, Map<String, String>> finalScatterYMap = trBasicInfoService.getFinalScatterValue(scatterYMap);
|
|
|
|
- List<CellRenderData> cellRenderData_last_cell = new ArrayList<>();
|
|
|
|
- RowRenderData examStudent_last_row = new RowRenderData();
|
|
|
|
- cellRenderData_last_cell.add(Cells.of("课程达成度").create());
|
|
|
|
- cellRenderData_last_cell.add(Cells.of("课程达成度").create());
|
|
|
|
- cellRenderData_last_cell.add(Cells.of("课程达成度").create());
|
|
|
|
- cellRenderData_last_cell.add(Cells.of("课程达成度").create());
|
|
|
|
-
|
|
|
|
- int cellSize = rowRenderDataExamStudent[rowRenderDataExamStudent.length - 2].getCells().size();
|
|
|
|
- for (int i = 4; i < cellSize; i++) {
|
|
|
|
- cellRenderData_last_cell.add(Cells.of(courseDegree + "").center().create());
|
|
|
|
- }
|
|
|
|
- examStudent_last_row.setCells(cellRenderData_last_cell);
|
|
|
|
- examStudent_last_row.setRowStyle(this.getRowStyle());
|
|
|
|
- rowRenderDataExamStudent[rowRenderDataExamStudent.length - 1] = examStudent_last_row;
|
|
|
|
-
|
|
|
|
- //表格合并,根据坐标
|
|
|
|
- MergeCellRule mergeCellRuleExamStudent = MergeCellRule.builder().build();
|
|
|
|
- mergeCellRuleExamStudent.getMapping().add(new MergeCellRule.GridRule(MergeCellRule.Grid.of(0, 0), MergeCellRule.Grid.of(1, 0)));
|
|
|
|
- mergeCellRuleExamStudent.getMapping().add(new MergeCellRule.GridRule(MergeCellRule.Grid.of(0, 1), MergeCellRule.Grid.of(1, 1)));
|
|
|
|
- mergeCellRuleExamStudent.getMapping().add(new MergeCellRule.GridRule(MergeCellRule.Grid.of(0, 2), MergeCellRule.Grid.of(1, 2)));
|
|
|
|
- mergeCellRuleExamStudent.getMapping().add(new MergeCellRule.GridRule(MergeCellRule.Grid.of(0, 3), MergeCellRule.Grid.of(1, 3)));
|
|
|
|
- mergeCellRuleExamStudent.getMapping().add(new MergeCellRule.GridRule(MergeCellRule.Grid.of(rowRenderDataExamStudent.length - 3, 0), MergeCellRule.Grid.of(rowRenderDataExamStudent.length - 3, 3)));
|
|
|
|
- mergeCellRuleExamStudent.getMapping().add(new MergeCellRule.GridRule(MergeCellRule.Grid.of(rowRenderDataExamStudent.length - 2, 0), MergeCellRule.Grid.of(rowRenderDataExamStudent.length - 2, 3)));
|
|
|
|
- mergeCellRuleExamStudent.getMapping().add(new MergeCellRule.GridRule(MergeCellRule.Grid.of(rowRenderDataExamStudent.length - 1, 0), MergeCellRule.Grid.of(rowRenderDataExamStudent.length - 1, 3)));
|
|
|
|
-
|
|
|
|
- //动态扩展列
|
|
|
|
- List<CellRenderData> cellRenderDataList = examStudent_header_1.getCells();
|
|
|
|
- for (int i = 0; i < cellRenderDataList.size(); i++) {
|
|
|
|
- CellRenderData cellRenderData = cellRenderDataList.get(i);
|
|
|
|
- String key = cellRenderData.getParagraphs().get(0).getContents().get(0).toString();
|
|
|
|
- if (targetUsualScoreSizeMap.containsKey(key)) {
|
|
|
|
- Integer cellNum = targetUsualScoreSizeMap.get(key);
|
|
|
|
- if (cellNum.intValue() > 0) {
|
|
|
|
- mergeCellRuleExamStudent.getMapping().add(new MergeCellRule.GridRule(MergeCellRule.Grid.of(0, i), MergeCellRule.Grid.of(0, i + cellNum)));
|
|
|
|
- mergeCellRuleExamStudent.getMapping().add(new MergeCellRule.GridRule(MergeCellRule.Grid.of(rowRenderDataExamStudent.length - 2, i), MergeCellRule.Grid.of(rowRenderDataExamStudent.length - 2, i + cellNum)));
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- mergeCellRuleExamStudent.getMapping().add(new MergeCellRule.GridRule(MergeCellRule.Grid.of(rowRenderDataExamStudent.length - 1, 4), MergeCellRule.Grid.of(rowRenderDataExamStudent.length - 1, cellSize - 1)));
|
|
|
|
- mergeCellRuleExamStudent.getMapping().add(new MergeCellRule.GridRule(MergeCellRule.Grid.of(0, rowRenderDataExamStudent[rowRenderDataExamStudent.length - 1].getCells().size() - 2), MergeCellRule.Grid.of(1, rowRenderDataExamStudent[rowRenderDataExamStudent.length - 1].getCells().size() - 2)));
|
|
|
|
- mergeCellRuleExamStudent.getMapping().add(new MergeCellRule.GridRule(MergeCellRule.Grid.of(0, rowRenderDataExamStudent[rowRenderDataExamStudent.length - 1].getCells().size() - 1), MergeCellRule.Grid.of(1, rowRenderDataExamStudent[rowRenderDataExamStudent.length - 1].getCells().size() - 1)));
|
|
|
|
-
|
|
|
|
- Tables.TableBuilder tableBuilderExamStudent = Tables.ofPercentWidth(tbPercentWidth);
|
|
|
|
- for (int i = 0; i < rowRenderDataExamStudent.length; i++) {
|
|
|
|
- tableBuilderExamStudent.addRow(rowRenderDataExamStudent[i]);
|
|
|
|
- }
|
|
|
|
- tableRenderDataExamStudent = tableBuilderExamStudent.mergeRule(mergeCellRuleExamStudent).left().create();
|
|
|
|
-
|
|
|
|
- if (!CollectionUtils.isEmpty(scoreList)) {
|
|
|
|
- Integer[] scoreSizes = new Integer[]{0, 0, 0, 0, 0};
|
|
|
|
- BigDecimal[] scorePercent = new BigDecimal[]{new BigDecimal(0), new BigDecimal(0), new BigDecimal(0), new BigDecimal(0), new BigDecimal(0)};
|
|
|
|
- Map<String, Object> map = new HashMap<>();
|
|
|
|
- Double maxScore = scoreList.stream().mapToDouble(s -> s.doubleValue()).max().orElse(0.0d);
|
|
|
|
- Double minScore = scoreList.stream().mapToDouble(s -> s.doubleValue()).min().orElse(0.0d);
|
|
|
|
- Double avgScore = scoreList.stream().mapToDouble(s -> s.doubleValue()).average().orElse(0.0d);
|
|
|
|
- for (BigDecimal d : scoreList) {
|
|
|
|
- if (d.doubleValue() <= 100 && d.doubleValue() >= 90d) {
|
|
|
|
- scoreSizes[0] = scoreSizes[0] + 1;
|
|
|
|
- } else if (d.doubleValue() <= 89.99d && d.doubleValue() >= 80d) {
|
|
|
|
- scoreSizes[1] = scoreSizes[1] + 1;
|
|
|
|
- } else if (d.doubleValue() <= 79.99d && d.doubleValue() >= 70d) {
|
|
|
|
- scoreSizes[2] = scoreSizes[2] + 1;
|
|
|
|
- } else if (d.doubleValue() <= 69.99d && d.doubleValue() >= 60d) {
|
|
|
|
- scoreSizes[3] = scoreSizes[3] + 1;
|
|
|
|
- } else {
|
|
|
|
- scoreSizes[4] = scoreSizes[4] + 1;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- for (int i = 0; i < scoreSizes.length; i++) {
|
|
|
|
- scorePercent[i] = new BigDecimal(scoreSizes[i]).divide(new BigDecimal(scoreList.size()), 4, BigDecimal.ROUND_HALF_UP).multiply(SystemConstant.PERCENT).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
|
- }
|
|
|
|
- map.put("scoreSizes", scoreSizes);
|
|
|
|
- map.put("scorePercent", scorePercent);
|
|
|
|
- map.put("maxScore", maxScore);
|
|
|
|
- map.put("minScore", minScore);
|
|
|
|
- map.put("avgScore", avgScore);
|
|
|
|
- map.put("courseTargetWebDtoList", courseTargetWebDtoList);
|
|
|
|
- courseReportBean.setCourseTargetTable6(this.buildWordTable6(map));
|
|
|
|
- courseReportBean.setCourseTargetColumnDiagram1(this.buildCourseTargetColumnDiagram1(map));
|
|
|
|
- courseReportBean.setCourseTargetColumnDiagram2(this.buildCourseTargetColumnDiagram2(map));
|
|
|
|
- this.buildCourseTargetColumnDiagram3(finalScatterYMap, courseReportBean.getCourseBasicBean().getCourseSuggestList(), courseTargetWebDtoList);
|
|
|
|
- }
|
|
|
|
|
|
+ Map<String, Object> map = this.buildExamStudentScoreMap(trBasicInfo);
|
|
|
|
+ if (!CollectionUtils.isEmpty(map)) {
|
|
|
|
+ List<CourseTargetWebDto> courseTargetWebDtoList = (List<CourseTargetWebDto>) map.get("courseTargetWebDtoList");
|
|
|
|
+ tableRenderDataExamStudent = (TableRenderData) map.get("tableRenderDataExamStudent");
|
|
|
|
+ List<BigDecimal> scoreList = (List<BigDecimal>) map.get("scoreList");
|
|
|
|
+ LinkedMultiValueMap<Long, Map<String, String>> finalScatterYMap = (LinkedMultiValueMap<Long, Map<String, String>>) map.get("finalScatterYMap");
|
|
|
|
+ Map<String, Object> mapScore = this.buildScoreOtherMap(scoreList);
|
|
|
|
+ map.putAll(mapScore);
|
|
|
|
+ courseReportBean.setCourseTargetTable6(this.buildWordTable6(map));
|
|
|
|
+ courseReportBean.setCourseTargetColumnDiagram1(this.buildCourseTargetColumnDiagram1(map));
|
|
|
|
+ courseReportBean.setCourseTargetColumnDiagram2(this.buildCourseTargetColumnDiagram2(map));
|
|
|
|
+ this.buildCourseTargetColumnDiagram3(finalScatterYMap, courseReportBean.getCourseBasicBean().getCourseSuggestList(), courseTargetWebDtoList);
|
|
}
|
|
}
|
|
return tableRenderDataExamStudent;
|
|
return tableRenderDataExamStudent;
|
|
}
|
|
}
|
|
@@ -1070,20 +816,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
|
|
CourseTargetWebDto courseTargetWebDto = courseTargetWebDtoMap.get(courseSuggestDto.getTargetId());
|
|
CourseTargetWebDto courseTargetWebDto = courseTargetWebDtoMap.get(courseSuggestDto.getTargetId());
|
|
List<Map<String, String>> list = finalScatterYMap.get(courseSuggestDto.getTargetId());
|
|
List<Map<String, String>> list = finalScatterYMap.get(courseSuggestDto.getTargetId());
|
|
if (Objects.nonNull(courseTargetWebDto) && !CollectionUtils.isEmpty(list)) {
|
|
if (Objects.nonNull(courseTargetWebDto) && !CollectionUtils.isEmpty(list)) {
|
|
- List<String> valueXList = new ArrayList<>();
|
|
|
|
- List<Number> titleYList = new ArrayList<>();
|
|
|
|
- for (Map<String, String> m : list) {
|
|
|
|
- for (Map.Entry<String, String> entry : m.entrySet()) {
|
|
|
|
- valueXList.add(entry.getValue());
|
|
|
|
- titleYList.add(Double.parseDouble(entry.getKey()));
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- ChartMultiSeriesRenderData scatterMap = Charts.ofMultiSeries(courseTargetWebDto.getTargetName(), valueXList.toArray(new String[valueXList.size()]))
|
|
|
|
- .addSeries("Y值", titleYList.toArray(new Number[titleYList.size()]))
|
|
|
|
- .setxAsixTitle("学生代号")
|
|
|
|
- .setyAsixTitle("达成值" + SystemConstant.df.format(courseTargetWebDto.getEvaluationValue()))
|
|
|
|
- .create();
|
|
|
|
- courseSuggestDto.setCourseTargetColumnDiagram3(scatterMap);
|
|
|
|
|
|
+ courseSuggestDto.setCourseTargetColumnDiagram3(this.buildScatterMap(list, courseTargetWebDto));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -1553,6 +1286,50 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
public TableRenderData buildXagyuWordTable1(TRBasicInfo trBasicInfo, XagyuCourseReportBean xagyuCourseReportBean) {
|
|
public TableRenderData buildXagyuWordTable1(TRBasicInfo trBasicInfo, XagyuCourseReportBean xagyuCourseReportBean) {
|
|
|
|
+ TableRenderData tableRenderDataExamStudent = null;
|
|
|
|
+ Map<String, Object> map = this.buildExamStudentScoreMap(trBasicInfo);
|
|
|
|
+ if (!CollectionUtils.isEmpty(map)) {
|
|
|
|
+ List<CourseTargetWebDto> courseTargetWebDtoList = (List<CourseTargetWebDto>) map.get("courseTargetWebDtoList");
|
|
|
|
+ tableRenderDataExamStudent = (TableRenderData) map.get("tableRenderDataExamStudent");
|
|
|
|
+ List<BigDecimal> scoreList = (List<BigDecimal>) map.get("scoreList");
|
|
|
|
+ LinkedMultiValueMap<Long, Map<String, String>> finalScatterYMap = (LinkedMultiValueMap<Long, Map<String, String>>) map.get("finalScatterYMap");
|
|
|
|
+ Map<String, Object> mapScore = this.buildScoreOtherMap(scoreList);
|
|
|
|
+ map.putAll(mapScore);
|
|
|
|
+ xagyuCourseReportBean.setXagyuCourseTargetTable2(this.buildWordTable6(map));
|
|
|
|
+ xagyuCourseReportBean.setXagyuCourseTargetColumnDiagram1(this.buildCourseTargetColumnDiagram2(map));
|
|
|
|
+ this.buildXagyuCourseTargetColumnDiagram1(finalScatterYMap, xagyuCourseReportBean.getXagyuCourseBasicBean().getCourseSuggestList(), courseTargetWebDtoList);
|
|
|
|
+ }
|
|
|
|
+ return tableRenderDataExamStudent;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 构建西安工业大学课程目标达成度(散点图)
|
|
|
|
+ *
|
|
|
|
+ * @param finalScatterYMap
|
|
|
|
+ * @param courseSuggestDtoList
|
|
|
|
+ * @param courseTargetWebDtoList
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public void buildXagyuCourseTargetColumnDiagram1(LinkedMultiValueMap<Long, Map<String, String>> finalScatterYMap, List<XagyuCourseSuggestDto> courseSuggestDtoList, List<CourseTargetWebDto> courseTargetWebDtoList) {
|
|
|
|
+ Map<Long, CourseTargetWebDto> courseTargetWebDtoMap = courseTargetWebDtoList.stream().collect(Collectors.toMap(CourseTargetWebDto::getTargetId, Function.identity(), (dto1, dto2) -> dto1));
|
|
|
|
+ for (XagyuCourseSuggestDto courseSuggestDto : courseSuggestDtoList) {
|
|
|
|
+ CourseTargetWebDto courseTargetWebDto = courseTargetWebDtoMap.get(courseSuggestDto.getTargetId());
|
|
|
|
+ List<Map<String, String>> list = finalScatterYMap.get(courseSuggestDto.getTargetId());
|
|
|
|
+ if (Objects.nonNull(courseTargetWebDto) && !CollectionUtils.isEmpty(list)) {
|
|
|
|
+ courseSuggestDto.setXagyuCourseTargetColumnDiagram2(this.buildScatterMap(list, courseTargetWebDto));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 构建考生成绩
|
|
|
|
+ *
|
|
|
|
+ * @param trBasicInfo
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public Map<String, Object> buildExamStudentScoreMap(TRBasicInfo trBasicInfo) {
|
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
TableRenderData tableRenderDataExamStudent = null;
|
|
TableRenderData tableRenderDataExamStudent = null;
|
|
List<TRExamStudent> trExamStudentList = trExamStudentService.list(new QueryWrapper<TRExamStudent>().lambda()
|
|
List<TRExamStudent> trExamStudentList = trExamStudentService.list(new QueryWrapper<TRExamStudent>().lambda()
|
|
.eq(TRExamStudent::getrBasicInfoId, trBasicInfo.getId()).and(w -> w.ne(TRExamStudent::getStudentCode, "目标分")));
|
|
.eq(TRExamStudent::getrBasicInfoId, trBasicInfo.getId()).and(w -> w.ne(TRExamStudent::getStudentCode, "目标分")));
|
|
@@ -1699,7 +1476,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
|
|
//期末考试
|
|
//期末考试
|
|
ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = reportExamStudentTargetDto.getFinalScore();
|
|
ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = reportExamStudentTargetDto.getFinalScore();
|
|
if (Objects.nonNull(reportExamStudentFinalScoreDto) && Objects.equals(reportExamStudentFinalScoreDto.getEvaluation(), SystemConstant.FINAL_SCORE_STR)) {
|
|
if (Objects.nonNull(reportExamStudentFinalScoreDto) && Objects.equals(reportExamStudentFinalScoreDto.getEvaluation(), SystemConstant.FINAL_SCORE_STR)) {
|
|
- xagyuCourseReportBean.getXagyuCourseBasicBean().setFinalScoreWeight(reportExamStudentFinalScoreDto.getTargetWeight());
|
|
|
|
|
|
+// courseReportBean.getCourseBasicBean().setFinalScoreWeight(reportExamStudentFinalScoreDto.getTargetWeight());
|
|
switch (trExamStudent.getName()) {
|
|
switch (trExamStudent.getName()) {
|
|
case "平均分":
|
|
case "平均分":
|
|
examStudent_cells.add(Cells.of(SystemConstant.df.format(reportExamStudentFinalScoreDto.getMatrixAvgScore())).create());
|
|
examStudent_cells.add(Cells.of(SystemConstant.df.format(reportExamStudentFinalScoreDto.getMatrixAvgScore())).create());
|
|
@@ -1785,73 +1562,75 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
|
|
tableBuilderExamStudent.addRow(rowRenderDataExamStudent[i]);
|
|
tableBuilderExamStudent.addRow(rowRenderDataExamStudent[i]);
|
|
}
|
|
}
|
|
tableRenderDataExamStudent = tableBuilderExamStudent.mergeRule(mergeCellRuleExamStudent).left().create();
|
|
tableRenderDataExamStudent = tableBuilderExamStudent.mergeRule(mergeCellRuleExamStudent).left().create();
|
|
|
|
+ map.put("tableRenderDataExamStudent", tableRenderDataExamStudent);
|
|
|
|
+ map.put("scoreList", scoreList);
|
|
|
|
+ map.put("courseTargetWebDtoList", courseTargetWebDtoList);
|
|
|
|
+ map.put("finalScatterYMap", finalScatterYMap);
|
|
|
|
+ }
|
|
|
|
+ return map;
|
|
|
|
+ }
|
|
|
|
|
|
- if (!CollectionUtils.isEmpty(scoreList)) {
|
|
|
|
- Integer[] scoreSizes = new Integer[]{0, 0, 0, 0, 0};
|
|
|
|
- BigDecimal[] scorePercent = new BigDecimal[]{new BigDecimal(0), new BigDecimal(0), new BigDecimal(0), new BigDecimal(0), new BigDecimal(0)};
|
|
|
|
- Map<String, Object> map = new HashMap<>();
|
|
|
|
- Double maxScore = scoreList.stream().mapToDouble(s -> s.doubleValue()).max().orElse(0.0d);
|
|
|
|
- Double minScore = scoreList.stream().mapToDouble(s -> s.doubleValue()).min().orElse(0.0d);
|
|
|
|
- Double avgScore = scoreList.stream().mapToDouble(s -> s.doubleValue()).average().orElse(0.0d);
|
|
|
|
- for (BigDecimal d : scoreList) {
|
|
|
|
- if (d.doubleValue() <= 100 && d.doubleValue() >= 90d) {
|
|
|
|
- scoreSizes[0] = scoreSizes[0] + 1;
|
|
|
|
- } else if (d.doubleValue() <= 89.99d && d.doubleValue() >= 80d) {
|
|
|
|
- scoreSizes[1] = scoreSizes[1] + 1;
|
|
|
|
- } else if (d.doubleValue() <= 79.99d && d.doubleValue() >= 70d) {
|
|
|
|
- scoreSizes[2] = scoreSizes[2] + 1;
|
|
|
|
- } else if (d.doubleValue() <= 69.99d && d.doubleValue() >= 60d) {
|
|
|
|
- scoreSizes[3] = scoreSizes[3] + 1;
|
|
|
|
- } else {
|
|
|
|
- scoreSizes[4] = scoreSizes[4] + 1;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- for (int i = 0; i < scoreSizes.length; i++) {
|
|
|
|
- scorePercent[i] = new BigDecimal(scoreSizes[i]).divide(new BigDecimal(scoreList.size()), 4, BigDecimal.ROUND_HALF_UP).multiply(SystemConstant.PERCENT).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 构建分数图
|
|
|
|
+ *
|
|
|
|
+ * @param scoreList
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public Map<String, Object> buildScoreOtherMap(List<BigDecimal> scoreList) {
|
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
|
+ if (!CollectionUtils.isEmpty(scoreList)) {
|
|
|
|
+ Integer[] scoreSizes = new Integer[]{0, 0, 0, 0, 0};
|
|
|
|
+ BigDecimal[] scorePercent = new BigDecimal[]{new BigDecimal(0), new BigDecimal(0), new BigDecimal(0), new BigDecimal(0), new BigDecimal(0)};
|
|
|
|
+ Double maxScore = scoreList.stream().mapToDouble(s -> s.doubleValue()).max().orElse(0.0d);
|
|
|
|
+ Double minScore = scoreList.stream().mapToDouble(s -> s.doubleValue()).min().orElse(0.0d);
|
|
|
|
+ Double avgScore = scoreList.stream().mapToDouble(s -> s.doubleValue()).average().orElse(0.0d);
|
|
|
|
+ for (BigDecimal d : scoreList) {
|
|
|
|
+ if (d.doubleValue() <= 100 && d.doubleValue() >= 90d) {
|
|
|
|
+ scoreSizes[0] = scoreSizes[0] + 1;
|
|
|
|
+ } else if (d.doubleValue() <= 89.99d && d.doubleValue() >= 80d) {
|
|
|
|
+ scoreSizes[1] = scoreSizes[1] + 1;
|
|
|
|
+ } else if (d.doubleValue() <= 79.99d && d.doubleValue() >= 70d) {
|
|
|
|
+ scoreSizes[2] = scoreSizes[2] + 1;
|
|
|
|
+ } else if (d.doubleValue() <= 69.99d && d.doubleValue() >= 60d) {
|
|
|
|
+ scoreSizes[3] = scoreSizes[3] + 1;
|
|
|
|
+ } else {
|
|
|
|
+ scoreSizes[4] = scoreSizes[4] + 1;
|
|
}
|
|
}
|
|
- map.put("scoreSizes", scoreSizes);
|
|
|
|
- map.put("scorePercent", scorePercent);
|
|
|
|
- map.put("maxScore", maxScore);
|
|
|
|
- map.put("minScore", minScore);
|
|
|
|
- map.put("avgScore", avgScore);
|
|
|
|
- map.put("courseTargetWebDtoList", courseTargetWebDtoList);
|
|
|
|
- xagyuCourseReportBean.setXagyuCourseTargetTable2(this.buildWordTable6(map));
|
|
|
|
- xagyuCourseReportBean.setXagyuCourseTargetColumnDiagram1(this.buildCourseTargetColumnDiagram2(map));
|
|
|
|
- this.buildXagyuCourseTargetColumnDiagram1(finalScatterYMap, xagyuCourseReportBean.getXagyuCourseBasicBean().getCourseSuggestList(), courseTargetWebDtoList);
|
|
|
|
}
|
|
}
|
|
|
|
+ for (int i = 0; i < scoreSizes.length; i++) {
|
|
|
|
+ scorePercent[i] = new BigDecimal(scoreSizes[i]).divide(new BigDecimal(scoreList.size()), 4, BigDecimal.ROUND_HALF_UP).multiply(SystemConstant.PERCENT).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
|
+ }
|
|
|
|
+ map.put("scoreSizes", scoreSizes);
|
|
|
|
+ map.put("scorePercent", scorePercent);
|
|
|
|
+ map.put("maxScore", maxScore);
|
|
|
|
+ map.put("minScore", minScore);
|
|
|
|
+ map.put("avgScore", avgScore);
|
|
}
|
|
}
|
|
- return tableRenderDataExamStudent;
|
|
|
|
|
|
+ return map;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 构建西安工业大学课程目标达成度(散点图)
|
|
|
|
|
|
+ * 构建散点图
|
|
*
|
|
*
|
|
- * @param finalScatterYMap
|
|
|
|
- * @param courseSuggestDtoList
|
|
|
|
- * @param courseTargetWebDtoList
|
|
|
|
|
|
+ * @param list
|
|
|
|
+ * @param courseTargetWebDto
|
|
|
|
+ * @return
|
|
*/
|
|
*/
|
|
- @Override
|
|
|
|
- public void buildXagyuCourseTargetColumnDiagram1(LinkedMultiValueMap<Long, Map<String, String>> finalScatterYMap, List<XagyuCourseSuggestDto> courseSuggestDtoList, List<CourseTargetWebDto> courseTargetWebDtoList) {
|
|
|
|
- Map<Long, CourseTargetWebDto> courseTargetWebDtoMap = courseTargetWebDtoList.stream().collect(Collectors.toMap(CourseTargetWebDto::getTargetId, Function.identity(), (dto1, dto2) -> dto1));
|
|
|
|
- for (XagyuCourseSuggestDto courseSuggestDto : courseSuggestDtoList) {
|
|
|
|
- CourseTargetWebDto courseTargetWebDto = courseTargetWebDtoMap.get(courseSuggestDto.getTargetId());
|
|
|
|
- List<Map<String, String>> list = finalScatterYMap.get(courseSuggestDto.getTargetId());
|
|
|
|
- if (Objects.nonNull(courseTargetWebDto) && !CollectionUtils.isEmpty(list)) {
|
|
|
|
- List<String> valueXList = new ArrayList<>();
|
|
|
|
- List<Number> titleYList = new ArrayList<>();
|
|
|
|
- for (Map<String, String> m : list) {
|
|
|
|
- for (Map.Entry<String, String> entry : m.entrySet()) {
|
|
|
|
- valueXList.add(entry.getValue());
|
|
|
|
- titleYList.add(Double.parseDouble(entry.getKey()));
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- ChartMultiSeriesRenderData scatterMap = Charts.ofMultiSeries(courseTargetWebDto.getTargetName(), valueXList.toArray(new String[valueXList.size()]))
|
|
|
|
- .addSeries("Y值", titleYList.toArray(new Number[titleYList.size()]))
|
|
|
|
- .setxAsixTitle("学生代号")
|
|
|
|
- .setyAsixTitle("达成值" + SystemConstant.df.format(courseTargetWebDto.getEvaluationValue()))
|
|
|
|
- .create();
|
|
|
|
- courseSuggestDto.setXagyuCourseTargetColumnDiagram2(scatterMap);
|
|
|
|
|
|
+ protected ChartMultiSeriesRenderData buildScatterMap(List<Map<String, String>> list, CourseTargetWebDto courseTargetWebDto) {
|
|
|
|
+ List<String> valueXList = new ArrayList<>();
|
|
|
|
+ List<Number> titleYList = new ArrayList<>();
|
|
|
|
+ for (Map<String, String> m : list) {
|
|
|
|
+ for (Map.Entry<String, String> entry : m.entrySet()) {
|
|
|
|
+ valueXList.add(entry.getValue());
|
|
|
|
+ titleYList.add(Double.parseDouble(entry.getKey()));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ ChartMultiSeriesRenderData scatterMap = Charts.ofMultiSeries(courseTargetWebDto.getTargetName(), valueXList.toArray(new String[valueXList.size()]))
|
|
|
|
+ .addSeries("Y值", titleYList.toArray(new Number[titleYList.size()]))
|
|
|
|
+ .setxAsixTitle("学生代号")
|
|
|
|
+ .setyAsixTitle("达成值" + SystemConstant.df.format(courseTargetWebDto.getEvaluationValue()))
|
|
|
|
+ .create();
|
|
|
|
+ return scatterMap;
|
|
}
|
|
}
|
|
}
|
|
}
|