|
@@ -6,7 +6,6 @@ import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.deepoove.poi.XWPFTemplate;
|
|
|
-import com.deepoove.poi.data.*;
|
|
|
import com.deepoove.poi.data.style.CellStyle;
|
|
|
import com.deepoove.poi.data.style.ParagraphStyle;
|
|
|
import com.deepoove.poi.data.style.RowStyle;
|
|
@@ -14,7 +13,8 @@ import com.qmth.boot.api.constant.ApiConstant;
|
|
|
import com.qmth.distributed.print.business.bean.dto.report.*;
|
|
|
import com.qmth.distributed.print.business.bean.result.ScoreResult;
|
|
|
import com.qmth.distributed.print.business.bean.result.report.ReportResult;
|
|
|
-import com.qmth.distributed.print.business.bean.result.report.word.*;
|
|
|
+import com.qmth.distributed.print.business.bean.result.report.word.CourseBasicBean;
|
|
|
+import com.qmth.distributed.print.business.bean.result.report.word.CourseReportBean;
|
|
|
import com.qmth.distributed.print.business.entity.TRBasicInfo;
|
|
|
import com.qmth.distributed.print.business.entity.TRExamStudent;
|
|
|
import com.qmth.distributed.print.business.service.PrintCommonService;
|
|
@@ -41,10 +41,7 @@ import javax.validation.Valid;
|
|
|
import javax.validation.constraints.Max;
|
|
|
import javax.validation.constraints.Min;
|
|
|
import java.io.IOException;
|
|
|
-import java.math.BigDecimal;
|
|
|
import java.util.*;
|
|
|
-import java.util.function.Function;
|
|
|
-import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
@@ -177,16 +174,16 @@ public class TRBasicInfoController {
|
|
|
List<String> header2_1List = new ArrayList<>(Arrays.asList("课程目标", "支撑毕业要求")), header2_2List = new ArrayList<>();
|
|
|
header2_2List.addAll(header2_1List);
|
|
|
header2_1List.add("考核/评价环节及目标分值");
|
|
|
- courseReportBean.setCourseTargetTable1(this.buildTable1(courseTargetWordDtoList, header2_1List, header2_2List));
|
|
|
+ courseReportBean.setCourseTargetTable1(trBasicInfoService.buildWordTable1(courseTargetWordDtoList, header2_1List, header2_2List));
|
|
|
|
|
|
//table2-课程目标达成评价依据
|
|
|
- courseReportBean.setCourseTargetTable2(this.buildTable2(courseTargetWordDtoList, courseTargetWebDtoList, header2_1List, header2_2List));
|
|
|
+ courseReportBean.setCourseTargetTable2(trBasicInfoService.buildWordTable2(courseTargetWordDtoList, courseTargetWebDtoList, header2_1List, header2_2List));
|
|
|
|
|
|
//table3-课程课后作业考核/评价内容及目标分值
|
|
|
- courseReportBean.setCourseTargetTable3(this.buildTable3(courseTargetWordDtoList));
|
|
|
+ courseReportBean.setCourseTargetTable3(trBasicInfoService.buildWordTable3(courseTargetWordDtoList));
|
|
|
|
|
|
//table4-课程期末考试考核/评价内容及目标分值
|
|
|
- courseReportBean.setCourseTargetTable4(this.buildTable4(courseTargetWordDtoList));
|
|
|
+ courseReportBean.setCourseTargetTable4(trBasicInfoService.buildWordTable4(courseTargetWordDtoList));
|
|
|
|
|
|
//examstudent-课程目标达成评价依据-考生
|
|
|
// List<TRExamStudent> trExamStudentList = trExamStudentService.list(new QueryWrapper<TRExamStudent>().lambda().eq(TRExamStudent::getrBasicInfoId, trBasicInfo.getId()));
|
|
@@ -435,213 +432,4 @@ public class TRBasicInfoController {
|
|
|
rowStyle.setDefaultCellStyle(cellStyle);
|
|
|
return rowStyle;
|
|
|
}
|
|
|
-
|
|
|
- /**
|
|
|
- * 构建word动态表格1
|
|
|
- *
|
|
|
- * @param courseTargetWordDtoList
|
|
|
- * @param header2_1List
|
|
|
- * @param header2_2List
|
|
|
- * @return
|
|
|
- */
|
|
|
- protected TableRenderData buildTable1(List<CourseTargetWordDto> courseTargetWordDtoList,
|
|
|
- List<String> header2_1List,
|
|
|
- List<String> header2_2List) {
|
|
|
- //table1课程目标目标与毕业要求指标点的对应关系
|
|
|
- RowRenderData header1 = Rows.of("课程目标", "毕业要求指标点").bgColor("F2F2F2").center().create();
|
|
|
- Tables.TableBuilder tableBuilder1 = Tables.ofPercentWidth("100%");
|
|
|
- tableBuilder1.addRow(header1);
|
|
|
-
|
|
|
-// List<String> header2_1List = new ArrayList<>(Arrays.asList("课程目标", "支撑毕业要求")), header2_2List = new ArrayList<>();
|
|
|
-// header2_2List.addAll(header2_1List);
|
|
|
-// header2_1List.add("考核/评价环节及目标分值");
|
|
|
-
|
|
|
- for (int i = 0; i < courseTargetWordDtoList.size(); i++) {
|
|
|
- CourseTargetWordDto courseTargetWordDto = courseTargetWordDtoList.get(i);
|
|
|
- List<ReportEvaluationDto> reportEvaluationDtoList = courseTargetWordDto.getUsualScoreDto().getUsualScoreDetailList();
|
|
|
- for (ReportEvaluationDto r : reportEvaluationDtoList) {
|
|
|
- header2_1List.add("");
|
|
|
- header2_2List.add(r.getEvaluation());
|
|
|
- }
|
|
|
-
|
|
|
- CourseTargetTableBean1 courseTargetTableBean1 = new CourseTargetTableBean1(courseTargetWordDto.getTargetName(), courseTargetWordDto.getGraduationRequirement());
|
|
|
- RowRenderData row = Rows.of(courseTargetTableBean1.getName(), courseTargetTableBean1.getTarget()).rowStyle(this.getRowStyle()).create();
|
|
|
- tableBuilder1.addRow(row);
|
|
|
- }
|
|
|
- header2_1List.add("目标分值统计");
|
|
|
- header2_2List.add("期末考试");
|
|
|
- header2_2List.add("目标分值统计");
|
|
|
- return tableBuilder1.left().create();
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 构建word动态表格2
|
|
|
- *
|
|
|
- * @param courseTargetWordDtoList
|
|
|
- * @param courseTargetWebDtoList
|
|
|
- * @param header2_1List
|
|
|
- * @param header2_2List
|
|
|
- * @return
|
|
|
- */
|
|
|
- protected TableRenderData buildTable2(List<CourseTargetWordDto> courseTargetWordDtoList,
|
|
|
- List<CourseTargetWebDto> courseTargetWebDtoList,
|
|
|
- List<String> header2_1List,
|
|
|
- List<String> header2_2List) {
|
|
|
- RowRenderData header2_1 = Rows.of(header2_1List.toArray(new String[header2_1List.size()])).bgColor("F2F2F2").center().create();
|
|
|
- RowRenderData header2_2 = Rows.of(header2_2List.toArray(new String[header2_1List.size()])).bgColor("F2F2F2").center().create();
|
|
|
-
|
|
|
- RowRenderData[] rowRenderData2 = new RowRenderData[courseTargetWordDtoList.size() + 3];
|
|
|
- Map<String, BigDecimal> rowRenderData2SumMap = new LinkedHashMap<>();
|
|
|
- BigDecimal targetSum = new BigDecimal(0);
|
|
|
- for (int i = 0; i < courseTargetWebDtoList.size(); i++) {
|
|
|
- CourseTargetWebDto courseTargetWebDto = courseTargetWebDtoList.get(i);
|
|
|
- List<ReportEvaluationDto> reportEvaluationDtoList = courseTargetWebDto.getEvaluationList();
|
|
|
- Map<String, ReportEvaluationDto> reportEvaluationDtoMap = reportEvaluationDtoList.stream().collect(Collectors.toMap(ReportEvaluationDto::getEvaluation, Function.identity(), (dto1, dto2) -> dto1));
|
|
|
- List<String> rowData = new ArrayList<>();
|
|
|
- BigDecimal sumScore = new BigDecimal(0);
|
|
|
- rowData.add(header2_2List.get(0));
|
|
|
- rowData.add(header2_2List.get(1));
|
|
|
- for (int y = 2; y < header2_2List.size() - 1; y++) {
|
|
|
- String key = header2_2List.get(y);
|
|
|
- if (!rowRenderData2SumMap.containsKey(key) && Objects.nonNull(reportEvaluationDtoMap.get(key))) {
|
|
|
- rowRenderData2SumMap.put(key, reportEvaluationDtoMap.get(key).getTargetScore());
|
|
|
- } else if (Objects.nonNull(reportEvaluationDtoMap.get(key))) {
|
|
|
- BigDecimal bigDecimal = rowRenderData2SumMap.get(key);
|
|
|
- bigDecimal = bigDecimal.add(reportEvaluationDtoMap.get(key).getTargetScore());
|
|
|
- rowRenderData2SumMap.put(key, bigDecimal);
|
|
|
- }
|
|
|
- if (reportEvaluationDtoMap.containsKey(key)) {
|
|
|
- BigDecimal targetScore = reportEvaluationDtoMap.get(key).getTargetScore();
|
|
|
- rowData.add(targetScore.toString());
|
|
|
- sumScore = sumScore.add(targetScore);
|
|
|
- } else {
|
|
|
- rowData.add("0");
|
|
|
- }
|
|
|
- }
|
|
|
- rowData.add(sumScore.toString());
|
|
|
- targetSum = targetSum.add(sumScore);
|
|
|
- rowRenderData2SumMap.put("目标分值统计", targetSum);
|
|
|
- rowRenderData2[i + 2] = Rows.of(rowData.toArray(new String[header2_2List.size()])).rowStyle(this.getRowStyle()).create();
|
|
|
- }
|
|
|
- rowRenderData2[0] = header2_1;
|
|
|
- rowRenderData2[1] = header2_2;
|
|
|
-
|
|
|
- List<String> header2FootList = new ArrayList<>(header2_2List.size());
|
|
|
- header2FootList.add("合计");
|
|
|
- header2FootList.add("");
|
|
|
- for (int y = 2; y < header2_2List.size(); y++) {
|
|
|
- header2FootList.add(rowRenderData2SumMap.get(header2_2List.get(y)).toString());
|
|
|
- }
|
|
|
-
|
|
|
- RowRenderData header2_foot = Rows.of(header2FootList.toArray(new String[header2_2List.size()])).rowStyle(this.getRowStyle()).create();
|
|
|
- rowRenderData2[rowRenderData2.length - 1] = header2_foot;
|
|
|
-
|
|
|
- // 表格合并,根据坐标
|
|
|
- MergeCellRule mergeCellRule2 = MergeCellRule.builder().map(MergeCellRule.Grid.of(0, 0), MergeCellRule.Grid.of(1, 0)).
|
|
|
- map(MergeCellRule.Grid.of(0, 1), MergeCellRule.Grid.of(1, 1)).
|
|
|
- map(MergeCellRule.Grid.of(0, 2), MergeCellRule.Grid.of(0, header2FootList.size() - 2)).
|
|
|
- map(MergeCellRule.Grid.of(0, header2FootList.size() - 1), MergeCellRule.Grid.of(1, header2FootList.size() - 1)).
|
|
|
- map(MergeCellRule.Grid.of(rowRenderData2.length - 1, 0), MergeCellRule.Grid.of(rowRenderData2.length - 1, 1)).
|
|
|
- build();
|
|
|
-
|
|
|
- Tables.TableBuilder tableBuilder2 = Tables.ofPercentWidth("100%");
|
|
|
- for (int i = 0; i < rowRenderData2.length; i++) {
|
|
|
- tableBuilder2.addRow(rowRenderData2[i]);
|
|
|
- }
|
|
|
- return tableBuilder2.mergeRule(mergeCellRule2).left().create();
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 构建word动态表格3
|
|
|
- *
|
|
|
- * @param courseTargetWordDtoList
|
|
|
- * @return
|
|
|
- */
|
|
|
- protected TableRenderData buildTable3(List<CourseTargetWordDto> courseTargetWordDtoList) {
|
|
|
- RowRenderData header3_1 = Rows.of("序号", "项目", "考核内容及要求", "目标分值", "对应的课程目标").bgColor("F2F2F2").center().create();
|
|
|
- String tableFootTitle3 = "合计${usualScoreSum}分,占课程总评成绩的${usualScoreSumWeight}%";
|
|
|
- List<CourseTargetTableBean3> courseTargetTableBean3List = new ArrayList<>();
|
|
|
- BigDecimal usualScoreSum3 = new BigDecimal(0), usualScoreTargetSumWeight3 = new BigDecimal(0);
|
|
|
- Integer seq3 = 0;
|
|
|
- for (CourseTargetWordDto courseTargetWordDto : courseTargetWordDtoList) {
|
|
|
- UsualScoreWordDto usualScoreWordDto = courseTargetWordDto.getUsualScoreDto();
|
|
|
- List<ReportEvaluationDto> reportEvaluationDtoList = usualScoreWordDto.getUsualScoreDetailList();
|
|
|
- for (int i = 0; i < reportEvaluationDtoList.size(); i++) {
|
|
|
- ReportEvaluationDto reportEvaluationDto = reportEvaluationDtoList.get(i);
|
|
|
- CourseTargetTableBean3 courseTargetTableBean3 = new CourseTargetTableBean3(seq3++, reportEvaluationDto.getEvaluation(), reportEvaluationDto.getEvaluationDesc(), reportEvaluationDto.getTargetScore(), courseTargetWordDto.getTargetName());
|
|
|
- courseTargetTableBean3List.add(courseTargetTableBean3);
|
|
|
- }
|
|
|
- usualScoreSum3 = usualScoreSum3.add(usualScoreWordDto.getUsualScoreTargetSumScore());
|
|
|
- usualScoreTargetSumWeight3 = usualScoreTargetSumWeight3.add(usualScoreWordDto.getUsualScoreTargetSumWeight());
|
|
|
- }
|
|
|
- usualScoreTargetSumWeight3 = usualScoreTargetSumWeight3.divide(new BigDecimal(courseTargetWordDtoList.size()), 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
- tableFootTitle3 = tableFootTitle3.replace("${usualScoreSum}", usualScoreSum3.toString());
|
|
|
- tableFootTitle3 = tableFootTitle3.replace("${usualScoreSumWeight}", usualScoreTargetSumWeight3.toString());
|
|
|
-
|
|
|
- RowRenderData[] rowRenderData3 = new RowRenderData[courseTargetTableBean3List.size() + 2];
|
|
|
- for (int i = 0; i < courseTargetTableBean3List.size(); i++) {
|
|
|
- CourseTargetTableBean3 courseTargetTableBean3 = courseTargetTableBean3List.get(i);
|
|
|
- rowRenderData3[i + 1] = Rows.of(courseTargetTableBean3.getNum().toString(), courseTargetTableBean3.getProject(), courseTargetTableBean3.getContent(), courseTargetTableBean3.getTarget().toString(), courseTargetTableBean3.getCourseTarget()).rowStyle(this.getRowStyle()).create();
|
|
|
- }
|
|
|
- rowRenderData3[0] = header3_1;
|
|
|
- RowRenderData header3_foot = Rows.of(tableFootTitle3, "", "", "", "").center().create();
|
|
|
- rowRenderData3[rowRenderData3.length - 1] = header3_foot;
|
|
|
-
|
|
|
- // 表格合并,根据坐标
|
|
|
- MergeCellRule mergeCellRule3 = MergeCellRule.builder().map(MergeCellRule.Grid.of(rowRenderData3.length - 1, 0), MergeCellRule.Grid.of(rowRenderData3.length - 1, 4)).
|
|
|
- build();
|
|
|
-
|
|
|
- Tables.TableBuilder tableBuilder3 = Tables.ofPercentWidth("100%");
|
|
|
- for (int i = 0; i < rowRenderData3.length; i++) {
|
|
|
- tableBuilder3.addRow(rowRenderData3[i]);
|
|
|
- }
|
|
|
- return tableBuilder3.mergeRule(mergeCellRule3).left().create();
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 构建word动态表格4
|
|
|
- *
|
|
|
- * @param courseTargetWordDtoList
|
|
|
- * @return
|
|
|
- */
|
|
|
- protected TableRenderData buildTable4(List<CourseTargetWordDto> courseTargetWordDtoList) {
|
|
|
- RowRenderData header4_1 = Rows.of("序号", "考核项目", "考核内容所涵盖的知识单元", "目标分值", "对应的课程目标").bgColor("F2F2F2").center().create();
|
|
|
- List<CourseTargetTableBean4> courseTargetTableBean4List = new ArrayList<>();
|
|
|
- BigDecimal finalScoreSum4 = new BigDecimal(0), finalScoreTargetSumWeight4 = new BigDecimal(0);
|
|
|
- Integer seq4 = 0;
|
|
|
- for (int i = 0; i < courseTargetWordDtoList.size(); i++) {
|
|
|
- CourseTargetWordDto courseTargetWordDto = courseTargetWordDtoList.get(i);
|
|
|
- FinalScoreWordDto finalScoreWordDto = courseTargetWordDto.getFinalScoreDto();
|
|
|
- finalScoreSum4 = finalScoreSum4.add(finalScoreWordDto.getFinalScoreTargetSumScore());
|
|
|
- finalScoreTargetSumWeight4 = finalScoreTargetSumWeight4.add(finalScoreWordDto.getFinalScoreSumWeight());
|
|
|
- List<DimensionDto> dimensionDtoList = courseTargetWordDto.getFinalScoreDto().getDimensionList();
|
|
|
- for (DimensionDto dimensionDto : dimensionDtoList) {
|
|
|
- CourseTargetTableBean4 courseTargetTableBean4 = new CourseTargetTableBean4(seq4++, courseTargetWordDto.getGraduationRequirement(), dimensionDto.getDimensionName(), dimensionDto.getDimensionScore(), courseTargetWordDto.getTargetName());
|
|
|
- courseTargetTableBean4List.add(courseTargetTableBean4);
|
|
|
- }
|
|
|
- }
|
|
|
- finalScoreTargetSumWeight4 = finalScoreTargetSumWeight4.divide(new BigDecimal(courseTargetWordDtoList.size()), 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
- String tableFootTitle4 = "合计${dimensionScoreSum}分,占课程总评成绩的${dimensionSumWeight}%";
|
|
|
- tableFootTitle4 = tableFootTitle4.replace("${dimensionScoreSum}", finalScoreSum4.toString());
|
|
|
- tableFootTitle4 = tableFootTitle4.replace("${dimensionSumWeight}", finalScoreTargetSumWeight4.toString());
|
|
|
-
|
|
|
- RowRenderData[] rowRenderData4 = new RowRenderData[courseTargetTableBean4List.size() + 2];
|
|
|
- for (int i = 0; i < courseTargetTableBean4List.size(); i++) {
|
|
|
- CourseTargetTableBean4 courseTargetTableBean4 = courseTargetTableBean4List.get(i);
|
|
|
- rowRenderData4[i + 1] = Rows.of(courseTargetTableBean4.getNum().toString(), courseTargetTableBean4.getProject(), courseTargetTableBean4.getContent(), courseTargetTableBean4.getTargetScore().toString(), courseTargetTableBean4.getCourseTarget()).rowStyle(this.getRowStyle()).create();
|
|
|
- }
|
|
|
- rowRenderData4[0] = header4_1;
|
|
|
- RowRenderData header4_foot = Rows.of(tableFootTitle4, "", "", "", "").center().create();
|
|
|
- rowRenderData4[rowRenderData4.length - 1] = header4_foot;
|
|
|
-
|
|
|
- // 表格合并,根据坐标
|
|
|
- MergeCellRule mergeCellRule4 = MergeCellRule.builder().map(MergeCellRule.Grid.of(rowRenderData4.length - 1, 0), MergeCellRule.Grid.of(rowRenderData4.length - 1, 4)).
|
|
|
- build();
|
|
|
-
|
|
|
- Tables.TableBuilder tableBuilder4 = Tables.ofPercentWidth("100%");
|
|
|
- for (int i = 0; i < rowRenderData4.length; i++) {
|
|
|
- tableBuilder4.addRow(rowRenderData4[i]);
|
|
|
- }
|
|
|
- return tableBuilder4.mergeRule(mergeCellRule4).left().create();
|
|
|
- }
|
|
|
}
|