|
@@ -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();
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 构建散点图
|
|
|
*
|