Explorar o código

测试word报告

wangliang hai 1 ano
pai
achega
a3f6605d84

+ 45 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TRBasicInfoService.java

@@ -1,6 +1,9 @@
 package com.qmth.distributed.print.business.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.deepoove.poi.data.TableRenderData;
+import com.qmth.distributed.print.business.bean.dto.report.CourseTargetWebDto;
+import com.qmth.distributed.print.business.bean.dto.report.CourseTargetWordDto;
 import com.qmth.distributed.print.business.bean.dto.report.ReportCourseEvaluationResultDto;
 import com.qmth.distributed.print.business.bean.dto.report.ReportScoreViewDto;
 import com.qmth.distributed.print.business.bean.result.report.PaperStructResult;
@@ -56,4 +59,46 @@ public interface TRBasicInfoService extends IService<TRBasicInfo> {
      * @return
      */
     public TRBasicInfo getReportView(TRBasicInfo trBasicInfo, MarkPaper markPaper, Long userId);
+
+    /**
+     * 构建word动态表格1
+     *
+     * @param courseTargetWordDtoList
+     * @param header2_1List
+     * @param header2_2List
+     * @return
+     */
+    public TableRenderData buildWordTable1(List<CourseTargetWordDto> courseTargetWordDtoList,
+                                           List<String> header2_1List,
+                                           List<String> header2_2List);
+
+    /**
+     * 构建word动态表格2
+     *
+     * @param courseTargetWordDtoList
+     * @param courseTargetWebDtoList
+     * @param header2_1List
+     * @param header2_2List
+     * @return
+     */
+    public TableRenderData buildWordTable2(List<CourseTargetWordDto> courseTargetWordDtoList,
+                                           List<CourseTargetWebDto> courseTargetWebDtoList,
+                                           List<String> header2_1List,
+                                           List<String> header2_2List);
+
+    /**
+     * 构建word动态表格3
+     *
+     * @param courseTargetWordDtoList
+     * @return
+     */
+    public TableRenderData buildWordTable3(List<CourseTargetWordDto> courseTargetWordDtoList);
+
+    /**
+     * 构建word动态表格4
+     *
+     * @param courseTargetWordDtoList
+     * @return
+     */
+    public TableRenderData buildWordTable4(List<CourseTargetWordDto> courseTargetWordDtoList);
 }

+ 250 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TRBasicInfoServiceImpl.java

@@ -4,6 +4,10 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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;
 import com.google.gson.reflect.TypeToken;
 import com.qmth.distributed.print.business.bean.dto.CourseWeightDetailDto;
 import com.qmth.distributed.print.business.bean.dto.CourseWeightDto;
@@ -11,6 +15,9 @@ import com.qmth.distributed.print.business.bean.dto.FinalScoreDto;
 import com.qmth.distributed.print.business.bean.dto.report.*;
 import com.qmth.distributed.print.business.bean.result.FinalScoreResult;
 import com.qmth.distributed.print.business.bean.result.report.PaperStructResult;
+import com.qmth.distributed.print.business.bean.result.report.word.CourseTargetTableBean1;
+import com.qmth.distributed.print.business.bean.result.report.word.CourseTargetTableBean3;
+import com.qmth.distributed.print.business.bean.result.report.word.CourseTargetTableBean4;
 import com.qmth.distributed.print.business.entity.TCPaperStruct;
 import com.qmth.distributed.print.business.entity.TRBasicInfo;
 import com.qmth.distributed.print.business.entity.TRExamStudent;
@@ -26,6 +33,8 @@ import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.mark.bean.archivescore.ScoreRangeVo;
 import com.qmth.teachcloud.mark.entity.MarkPaper;
 import com.qmth.teachcloud.mark.utils.Calculator;
+import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
+import org.apache.poi.xwpf.usermodel.XWPFTableCell;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -390,6 +399,247 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         return trBasicInfo;
     }
 
+    /**
+     * 构建word动态表格1
+     *
+     * @param courseTargetWordDtoList
+     * @param header2_1List
+     * @param header2_2List
+     * @return
+     */
+    @Override
+    public TableRenderData buildWordTable1(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);
+
+        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
+     */
+    @Override
+    public TableRenderData buildWordTable2(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
+     */
+    @Override
+    public TableRenderData buildWordTable3(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 = 1;
+        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
+     */
+    @Override
+    public TableRenderData buildWordTable4(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 = 1;
+        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();
+    }
+
+    /**
+     * 获取行样式
+     *
+     * @return
+     */
+    protected RowStyle getRowStyle() {
+        RowStyle rowStyle = new RowStyle();
+        ParagraphStyle paragraphStyle = new ParagraphStyle();
+        paragraphStyle.setAlign(ParagraphAlignment.LEFT);
+        CellStyle cellStyle = new CellStyle();
+        cellStyle.setDefaultParagraphStyle(paragraphStyle);
+        cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
+        rowStyle.setDefaultCellStyle(cellStyle);
+        return rowStyle;
+    }
+
+    /**
+     * 获取行样式
+     *
+     * @return
+     */
+    protected RowStyle getHeadRowStyle() {
+        RowStyle rowStyle = new RowStyle();
+        ParagraphStyle paragraphStyle = new ParagraphStyle();
+        paragraphStyle.setAlign(ParagraphAlignment.CENTER);
+        CellStyle cellStyle = new CellStyle();
+        cellStyle.setDefaultParagraphStyle(paragraphStyle);
+        cellStyle.setBackgroundColor("F2F2F2");
+        rowStyle.setDefaultCellStyle(cellStyle);
+        return rowStyle;
+    }
+
     /**
      * 计算分数范围
      *

+ 6 - 218
distributed-print/src/main/java/com/qmth/distributed/print/api/TRBasicInfoController.java

@@ -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();
-    }
 }