瀏覽代碼

西安工业大学定制课程目标达成度

wangliang 8 月之前
父節點
當前提交
69dcaa0d33

+ 19 - 19
teachcloud-obe/src/main/java/com/qmth/teachcloud/obe/been/result/report/word/common/CourseBasicBean.java

@@ -69,11 +69,11 @@ public class CourseBasicBean implements Serializable {
     @ApiModelProperty(name = "课程目标数")
     Integer courseTargetNum;
 
-    @ApiModelProperty(name = "平时作业权重")
-    BigDecimal usualScoreWeight;
+//    @ApiModelProperty(name = "平时作业权重")
+//    BigDecimal usualScoreWeight;
 
-    @ApiModelProperty(name = "期末考试权重")
-    BigDecimal finalScoreWeight;
+//    @ApiModelProperty(name = "期末考试权重")
+//    BigDecimal finalScoreWeight;
 
     @ApiModelProperty(value = "参评人数")
     private Integer participantCount = 0;
@@ -181,21 +181,21 @@ public class CourseBasicBean implements Serializable {
         this.period = period;
     }
 
-    public BigDecimal getUsualScoreWeight() {
-        return usualScoreWeight;
-    }
-
-    public void setUsualScoreWeight(BigDecimal usualScoreWeight) {
-        this.usualScoreWeight = usualScoreWeight;
-    }
-
-    public BigDecimal getFinalScoreWeight() {
-        return finalScoreWeight;
-    }
-
-    public void setFinalScoreWeight(BigDecimal finalScoreWeight) {
-        this.finalScoreWeight = finalScoreWeight;
-    }
+//    public BigDecimal getUsualScoreWeight() {
+//        return usualScoreWeight;
+//    }
+//
+//    public void setUsualScoreWeight(BigDecimal usualScoreWeight) {
+//        this.usualScoreWeight = usualScoreWeight;
+//    }
+//
+//    public BigDecimal getFinalScoreWeight() {
+//        return finalScoreWeight;
+//    }
+//
+//    public void setFinalScoreWeight(BigDecimal finalScoreWeight) {
+//        this.finalScoreWeight = finalScoreWeight;
+//    }
 
     public String getCourseTarget() {
         return courseTarget;

+ 9 - 9
teachcloud-obe/src/main/java/com/qmth/teachcloud/obe/been/result/report/word/custom/XagyuCourseBasicBean.java

@@ -50,8 +50,8 @@ public class XagyuCourseBasicBean implements Serializable {
     @ApiModelProperty(value = "课程持续改进")
     private List<XagyuCourseSuggestDto> courseSuggestList;
 
-    @ApiModelProperty(name = "期末考试权重")
-    BigDecimal finalScoreWeight;
+//    @ApiModelProperty(name = "期末考试权重")
+//    BigDecimal finalScoreWeight;
 
     public XagyuCourseBasicBean() {
 
@@ -78,13 +78,13 @@ public class XagyuCourseBasicBean implements Serializable {
         }
     }
 
-    public BigDecimal getFinalScoreWeight() {
-        return finalScoreWeight;
-    }
-
-    public void setFinalScoreWeight(BigDecimal finalScoreWeight) {
-        this.finalScoreWeight = finalScoreWeight;
-    }
+//    public BigDecimal getFinalScoreWeight() {
+//        return finalScoreWeight;
+//    }
+//
+//    public void setFinalScoreWeight(BigDecimal finalScoreWeight) {
+//        this.finalScoreWeight = finalScoreWeight;
+//    }
 
     public String getCourseName() {
         return courseName;

+ 17 - 0
teachcloud-obe/src/main/java/com/qmth/teachcloud/obe/service/TRBasicInfoService.java

@@ -16,6 +16,7 @@ import com.qmth.teachcloud.obe.entity.ObeCourseOutline;
 import com.qmth.teachcloud.obe.entity.TRBasicInfo;
 import org.springframework.util.LinkedMultiValueMap;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentMap;
@@ -241,4 +242,20 @@ public interface TRBasicInfoService extends IService<TRBasicInfo> {
     public void buildXagyuCourseTargetColumnDiagram1(LinkedMultiValueMap<Long, Map<String, String>> finalScatterYMap,
                                                      List<XagyuCourseSuggestDto> courseSuggestDtoList,
                                                      List<CourseTargetWebDto> courseTargetWebDtoList);
+
+    /**
+     * 构建考生成绩
+     *
+     * @param trBasicInfo
+     * @return
+     */
+    public Map<String, Object> buildExamStudentScoreMap(TRBasicInfo trBasicInfo);
+
+    /**
+     * 构建分数图
+     *
+     * @param scoreList
+     * @return
+     */
+    public Map<String, Object> buildScoreOtherMap(List<BigDecimal> scoreList);
 }

+ 117 - 338
teachcloud-obe/src/main/java/com/qmth/teachcloud/obe/service/impl/TRBasicInfoServiceImpl.java

@@ -681,272 +681,18 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
     @Override
     public TableRenderData buildWordTable5(TRBasicInfo trBasicInfo, CourseReportBean courseReportBean) {
         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;
     }
@@ -1070,20 +816,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
             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.setCourseTargetColumnDiagram3(scatterMap);
+                courseSuggestDto.setCourseTargetColumnDiagram3(this.buildScatterMap(list, courseTargetWebDto));
             }
         }
     }
@@ -1553,6 +1286,50 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
      */
     @Override
     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;
         List<TRExamStudent> trExamStudentList = trExamStudentService.list(new QueryWrapper<TRExamStudent>().lambda()
                 .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();
                             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()) {
                                     case "平均分":
                                         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]);
             }
             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;
     }
 }