Selaa lähdekoodia

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

wangliang 8 kuukautta sitten
vanhempi
commit
c8c3eee679

+ 59 - 0
teachcloud-obe/src/main/java/com/qmth/teachcloud/obe/been/result/report/word/custom/XagyuScoreOtherBean.java

@@ -0,0 +1,59 @@
+package com.qmth.teachcloud.obe.been.result.report.word.custom;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @Description: 西安工业大学课程报告分数bean
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2024/10/11
+ */
+public class XagyuScoreOtherBean implements Serializable {
+
+    @ApiModelProperty(name = "目标名称")
+    String targetName;
+
+    @ApiModelProperty(name = "分数人数")
+    Integer[] scoreSizes;
+
+    @ApiModelProperty(name = "分数百分比")
+    BigDecimal[] scorePercent;
+
+    public XagyuScoreOtherBean() {
+
+    }
+
+    public XagyuScoreOtherBean(String targetName, Integer[] scoreSizes, BigDecimal[] scorePercent) {
+        this.targetName = targetName;
+        this.scoreSizes = scoreSizes;
+        this.scorePercent = scorePercent;
+    }
+
+    public String getTargetName() {
+        return targetName;
+    }
+
+    public void setTargetName(String targetName) {
+        this.targetName = targetName;
+    }
+
+    public Integer[] getScoreSizes() {
+        return scoreSizes;
+    }
+
+    public void setScoreSizes(Integer[] scoreSizes) {
+        this.scoreSizes = scoreSizes;
+    }
+
+    public BigDecimal[] getScorePercent() {
+        return scorePercent;
+    }
+
+    public void setScorePercent(BigDecimal[] scorePercent) {
+        this.scorePercent = scorePercent;
+    }
+}

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

@@ -258,4 +258,21 @@ public interface TRBasicInfoService extends IService<TRBasicInfo> {
      * @return
      */
     public Map<String, Object> buildScoreOtherMap(List<BigDecimal> scoreList);
+
+    /**
+     * 构建西安工业大学课程目标达成度-分数图
+     *
+     * @param scoreListMap
+     * @return
+     */
+    public Map<String, Object> buildXagyuScoreOtherMap(LinkedMultiValueMap<String, BigDecimal> scoreListMap);
+
+    /**
+     * 构建西安工业大学课程目标达成度-课程目标的评价标准
+     *
+     * @param map
+     * @return
+     */
+    public TableRenderData buildXagyuWordTable2(Map<String, Object> map);
+
 }

+ 115 - 5
teachcloud-obe/src/main/java/com/qmth/teachcloud/obe/service/impl/TRBasicInfoServiceImpl.java

@@ -33,6 +33,7 @@ import com.qmth.teachcloud.obe.been.result.report.word.common.CourseReportBean;
 import com.qmth.teachcloud.obe.been.result.report.word.custom.XagyuCourseBasicBean;
 import com.qmth.teachcloud.obe.been.result.report.word.custom.XagyuCourseReportBean;
 import com.qmth.teachcloud.obe.been.result.report.word.custom.XagyuCourseSuggestDto;
+import com.qmth.teachcloud.obe.been.result.report.word.custom.XagyuScoreOtherBean;
 import com.qmth.teachcloud.obe.entity.*;
 import com.qmth.teachcloud.obe.mapper.TRBasicInfoMapper;
 import com.qmth.teachcloud.obe.service.*;
@@ -1271,7 +1272,6 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         XagyuCourseReportBean xagyuCourseReportBean = new XagyuCourseReportBean(trBasicInfo.getOpenTime() + "《" + trBasicInfo.getCourseName() + "》", xagyucourseBasicBean);
         //table1-课程目标目标与毕业要求指标点的对应关系
         xagyuCourseReportBean.setXagyuCourseTargetTable1(trBasicInfoService.buildWordTable1(courseTargetWordDtoList));
-        xagyuCourseReportBean.setXagyuCourseTargetTable2(trBasicInfoService.buildWordTable1(courseTargetWordDtoList));
         //examstudent-课程目标达成评价依据-考生
         xagyuCourseReportBean.setXagyuExamStudentTable1(trBasicInfoService.buildXagyuWordTable1(trBasicInfo, xagyuCourseReportBean));
         return xagyuCourseReportBean;
@@ -1291,11 +1291,10 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         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<String, BigDecimal> scoreListMap = (LinkedMultiValueMap<String, BigDecimal>) map.get("scoreListMap");
             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));
+            Map<String, Object> mapScore = this.buildXagyuScoreOtherMap(scoreListMap);
+            xagyuCourseReportBean.setXagyuCourseTargetTable2(this.buildXagyuWordTable2(mapScore));
             xagyuCourseReportBean.setXagyuCourseTargetColumnDiagram1(this.buildCourseTargetColumnDiagram2(map));
             this.buildXagyuCourseTargetColumnDiagram1(finalScatterYMap, xagyuCourseReportBean.getXagyuCourseBasicBean().getCourseSuggestList(), courseTargetWebDtoList);
         }
@@ -1406,6 +1405,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                 examStudent_cells_2.add(Cells.of("达成系数").center().create());
             }
 
+            LinkedMultiValueMap<String, BigDecimal> scoreListMap = new LinkedMultiValueMap<>();
             List<BigDecimal> scoreList = new ArrayList<>();
             List<TRExamStudent> sortTrExamStudentList = new ArrayList<>();
             sortTrExamStudentList.addAll(trExamStudentList.subList(trExamStudentList.size() - 2, trExamStudentList.size()));
@@ -1455,6 +1455,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                                     && Objects.nonNull(matrixDegree)) {
                                 trBasicInfoService.getScatterValue(scatterYMap, reportExamStudentTargetDto);
                             }
+                            BigDecimal scoreSum = new BigDecimal(0);
                             ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = reportExamStudentTargetDto.getUsualScore();
                             //平常作业
                             if (Objects.nonNull(reportExamStudentUsualScoreDto) && !CollectionUtils.isEmpty(reportExamStudentUsualScoreDto.getScoreList())) {
@@ -1469,6 +1470,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                                             break;
                                         default:
                                             examStudent_cells.add(Cells.of(SystemConstant.df.format(reportExamStudentUsualScoreObjDto.getScore())).create());
+                                            scoreSum = scoreSum.add(reportExamStudentUsualScoreObjDto.getMatrixScore());
                                             break;
                                     }
                                 }
@@ -1486,9 +1488,14 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                                         break;
                                     default:
                                         examStudent_cells.add(Cells.of(SystemConstant.df.format(reportExamStudentFinalScoreDto.getTargetScoreSum())).create());
+                                        scoreSum = scoreSum.add(reportExamStudentFinalScoreDto.getTargetMatrixSumScore());
                                         break;
                                 }
                             }
+                            if (!Objects.equals(trExamStudent.getName(), "平均分")
+                                    && !Objects.equals(trExamStudent.getName(), "各课程目标平均分")) {
+                                scoreListMap.add(reportExamStudentTargetDto.getTargetName(), scoreSum);
+                            }
                         }
                     }
                 }
@@ -1564,6 +1571,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
             tableRenderDataExamStudent = tableBuilderExamStudent.mergeRule(mergeCellRuleExamStudent).left().create();
             map.put("tableRenderDataExamStudent", tableRenderDataExamStudent);
             map.put("scoreList", scoreList);
+            map.put("scoreListMap", scoreListMap);
             map.put("courseTargetWebDtoList", courseTargetWebDtoList);
             map.put("finalScatterYMap", finalScatterYMap);
         }
@@ -1610,6 +1618,108 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         return map;
     }
 
+    /**
+     * 构建西安工业大学课程目标达成度-分数图
+     *
+     * @param scoreListMap
+     * @return
+     */
+    @Override
+    public Map<String, Object> buildXagyuScoreOtherMap(LinkedMultiValueMap<String, BigDecimal> scoreListMap) {
+        Map<String, Object> map = new LinkedHashMap<>();
+        if (!CollectionUtils.isEmpty(scoreListMap)) {
+            for (Map.Entry<String, List<BigDecimal>> entry : scoreListMap.entrySet()) {
+                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)};
+                List<BigDecimal> scoreList = entry.getValue();
+                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(entry.getKey(), new XagyuScoreOtherBean(entry.getKey(), scoreSizes, scorePercent));
+            }
+        }
+        return map;
+    }
+
+    /**
+     * 构建西安工业大学课程目标达成度-课程目标的评价标准
+     *
+     * @param map
+     * @return
+     */
+    @Override
+    public TableRenderData buildXagyuWordTable2(Map<String, Object> map) {
+        RowRenderData[] rowRenderData = new RowRenderData[map.size() + 2];
+        List<CellRenderData> cells_1 = new ArrayList<>(), cells_2 = new ArrayList<>();
+        cells_1.add(Cells.of("课程目标").center().create());
+        cells_1.add(Cells.of("评价标准").center().create());
+        cells_1.add(Cells.of("").center().create());
+        cells_1.add(Cells.of("").center().create());
+        cells_1.add(Cells.of("").center().create());
+        cells_1.add(Cells.of("").center().create());
+
+        cells_2.add(Cells.of("").create());
+        cells_2.add(Cells.of("优秀\n(100>x≥90)").create());
+        cells_2.add(Cells.of("良好\n(90>x≥80)").create());
+        cells_2.add(Cells.of("中\n(80>x≥70)").create());
+        cells_2.add(Cells.of("及格\n(70>x≥60)").create());
+        cells_2.add(Cells.of("不及格\n(x<60)").create());
+
+        RowRenderData row_1 = new RowRenderData();
+        row_1.setCells(cells_1);
+        row_1.setRowStyle(this.getHeadRowStyle());
+
+        RowRenderData row_2 = new RowRenderData();
+        row_2.setCells(cells_2);
+        row_2.setRowStyle(this.getHeadRowStyle());
+
+        rowRenderData[0] = row_1;
+        rowRenderData[1] = row_2;
+
+        int index = 2;
+        for (Map.Entry<String, Object> entry : map.entrySet()) {
+            if (Objects.nonNull(entry.getValue())) {
+                RowRenderData score_row = new RowRenderData();
+                List<CellRenderData> score_cells = new ArrayList<>();
+                score_cells.add(Cells.of(entry.getKey()).create());
+                XagyuScoreOtherBean xagyuScoreOtherBean = (XagyuScoreOtherBean) entry.getValue();
+                Integer[] scoreSizes = xagyuScoreOtherBean.getScoreSizes();
+                BigDecimal[] scorePercent = xagyuScoreOtherBean.getScorePercent();
+                for (int i = 0; i < scoreSizes.length; i++) {
+                    score_cells.add(Cells.of(scoreSizes[i] + "(" + SystemConstant.df.format(scorePercent[i]) + "%)").create());
+                }
+                score_row.setCells(score_cells);
+                score_row.setRowStyle(this.getRowStyle());
+                rowRenderData[index] = score_row;
+                index++;
+            }
+        }
+
+        MergeCellRule mergeCellRule2 = MergeCellRule.builder().
+                map(MergeCellRule.Grid.of(0, 0), MergeCellRule.Grid.of(1, 0)).
+                map(MergeCellRule.Grid.of(0, 1), MergeCellRule.Grid.of(0, cells_2.size() - 1)).
+                build();
+
+        Tables.TableBuilder tableBuilder2 = Tables.ofPercentWidth(tbPercentWidth);
+        for (int i = 0; i < rowRenderData.length; i++) {
+            tableBuilder2.addRow(rowRenderData[i]);
+        }
+        return tableBuilder2.mergeRule(mergeCellRule2).left().create();
+    }
+
     /**
      * 构建散点图
      *