wangliang 1 rok temu
rodzic
commit
0596843e3b

+ 85 - 85
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/report/word/CourseTargetTableBean2.java

@@ -1,85 +1,85 @@
-package com.qmth.distributed.print.business.bean.result.report.word;
-
-import io.swagger.annotations.ApiModelProperty;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-
-/**
- * @Description: 课程报告表格2bean
- * @Param:
- * @return:
- * @Author: wangliang
- * @Date: 2024/1/31
- */
-public class CourseTargetTableBean2 extends CourseTargetTableBean1 implements Serializable {
-
-    @ApiModelProperty(name = "平时表现")
-    BigDecimal expression = new BigDecimal(0);
-
-    @ApiModelProperty(name = "课后作业")
-    BigDecimal homework = new BigDecimal(0);
-
-    @ApiModelProperty(name = "课程实验")
-    BigDecimal test = new BigDecimal(0);
-
-    @ApiModelProperty(name = "期末考试")
-    BigDecimal exam = new BigDecimal(0);
-
-    @ApiModelProperty(name = "目标分值")
-    BigDecimal targetSum = new BigDecimal(0);
-
-    public CourseTargetTableBean2() {
-
-    }
-
-    public CourseTargetTableBean2(String name, String target, BigDecimal expression, BigDecimal homework, BigDecimal test, BigDecimal exam, BigDecimal targetSum) {
-        setName(name);
-        setTarget(target);
-        this.expression = expression;
-        this.homework = homework;
-        this.test = test;
-        this.exam = exam;
-        this.targetSum = targetSum;
-    }
-
-    public BigDecimal getTargetSum() {
-        return targetSum;
-    }
-
-    public void setTargetSum(BigDecimal targetSum) {
-        this.targetSum = targetSum;
-    }
-
-    public BigDecimal getExpression() {
-        return expression;
-    }
-
-    public void setExpression(BigDecimal expression) {
-        this.expression = expression;
-    }
-
-    public BigDecimal getHomework() {
-        return homework;
-    }
-
-    public void setHomework(BigDecimal homework) {
-        this.homework = homework;
-    }
-
-    public BigDecimal getTest() {
-        return test;
-    }
-
-    public void setTest(BigDecimal test) {
-        this.test = test;
-    }
-
-    public BigDecimal getExam() {
-        return exam;
-    }
-
-    public void setExam(BigDecimal exam) {
-        this.exam = exam;
-    }
-}
+//package com.qmth.distributed.print.business.bean.result.report.word;
+//
+//import io.swagger.annotations.ApiModelProperty;
+//
+//import java.io.Serializable;
+//import java.math.BigDecimal;
+//
+///**
+// * @Description: 课程报告表格2bean
+// * @Param:
+// * @return:
+// * @Author: wangliang
+// * @Date: 2024/1/31
+// */
+//public class CourseTargetTableBean2 extends CourseTargetTableBean1 implements Serializable {
+//
+//    @ApiModelProperty(name = "平时表现")
+//    BigDecimal expression = new BigDecimal(0);
+//
+//    @ApiModelProperty(name = "课后作业")
+//    BigDecimal homework = new BigDecimal(0);
+//
+//    @ApiModelProperty(name = "课程实验")
+//    BigDecimal test = new BigDecimal(0);
+//
+//    @ApiModelProperty(name = "期末考试")
+//    BigDecimal exam = new BigDecimal(0);
+//
+//    @ApiModelProperty(name = "目标分值")
+//    BigDecimal targetSum = new BigDecimal(0);
+//
+//    public CourseTargetTableBean2() {
+//
+//    }
+//
+//    public CourseTargetTableBean2(String name, String target, BigDecimal expression, BigDecimal homework, BigDecimal test, BigDecimal exam, BigDecimal targetSum) {
+//        setName(name);
+//        setTarget(target);
+//        this.expression = expression;
+//        this.homework = homework;
+//        this.test = test;
+//        this.exam = exam;
+//        this.targetSum = targetSum;
+//    }
+//
+//    public BigDecimal getTargetSum() {
+//        return targetSum;
+//    }
+//
+//    public void setTargetSum(BigDecimal targetSum) {
+//        this.targetSum = targetSum;
+//    }
+//
+//    public BigDecimal getExpression() {
+//        return expression;
+//    }
+//
+//    public void setExpression(BigDecimal expression) {
+//        this.expression = expression;
+//    }
+//
+//    public BigDecimal getHomework() {
+//        return homework;
+//    }
+//
+//    public void setHomework(BigDecimal homework) {
+//        this.homework = homework;
+//    }
+//
+//    public BigDecimal getTest() {
+//        return test;
+//    }
+//
+//    public void setTest(BigDecimal test) {
+//        this.test = test;
+//    }
+//
+//    public BigDecimal getExam() {
+//        return exam;
+//    }
+//
+//    public void setExam(BigDecimal exam) {
+//        this.exam = exam;
+//    }
+//}

+ 13 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TRBasicInfoServiceImpl.java

@@ -193,7 +193,6 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
             finalScoreResultMap = finalScoreResultList.stream().collect(Collectors.toMap(FinalScoreResult::getStudentCode, Function.identity(), (dto1, dto2) -> dto1));
 
             examStudentList = new ArrayList<>(finalScoreResultList.size());
-            BigDecimal bigDecimal = new BigDecimal(100);
             for (FinalScoreResult finalScoreResult : finalScoreResultList) {
                 //解析期末成绩知识点
                 JSONArray finalScoreDetailJsonArray = JSONArray.parseArray(finalScoreResult.getFinalScoreDetail());
@@ -211,6 +210,19 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                                 //考生知识点
                                 this.calculateFinalScoreByExamStudent(finalScoreExamStudentDimensionMap,
                                         finalScoreResult, courseTargetDto, dimensionDto, score);
+
+                                //目标-考生知识点去重
+                                if (!targetDimensionMap.containsKey(courseTargetDto.getTargetId())) {
+                                    Map<Long, DimensionDto> dimensionMap = new LinkedHashMap<>();
+                                    dimensionMap.put(dimensionDto.getDimensionId(), new DimensionDto(courseTargetDto.getTargetId(), dimensionDto, score));
+                                    targetDimensionMap.put(courseTargetDto.getTargetId(), dimensionMap);
+                                } else {
+                                    Map<Long, DimensionDto> dimensionMap = targetDimensionMap.get(courseTargetDto.getTargetId());
+                                    if (!dimensionMap.containsKey(dimensionDto.getDimensionId())) {
+                                        dimensionMap.put(dimensionDto.getDimensionId(), new DimensionDto(courseTargetDto.getTargetId(), dimensionDto, score));
+                                        targetDimensionMap.put(courseTargetDto.getTargetId(), dimensionMap);
+                                    }
+                                }
                             }
                         }
                     }

+ 271 - 262
distributed-print/src/main/java/com/qmth/distributed/print/api/TRBasicInfoController.java

@@ -33,7 +33,6 @@ import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
 import org.apache.poi.xwpf.usermodel.XWPFTableCell;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
-import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 
@@ -44,8 +43,8 @@ import javax.validation.constraints.Min;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.util.*;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -170,10 +169,6 @@ public class TRBasicInfoController {
         List<CourseTargetWordDto> courseTargetWordDtoList = JSONArray.parseArray(jsonObject.get("targetWordMap").toString(), CourseTargetWordDto.class);
         List<CourseTargetWebDto> courseTargetWebDtoList = JSONArray.parseArray(jsonObject.get("targetWebMap").toString(), CourseTargetWebDto.class);
 
-        //targetMap
-        List<CourseTargetWordDto> courseTargetValueDtoList = JSONArray.parseArray(trBasicInfo.getCourseEvaluationResultDetail(), CourseTargetWordDto.class);
-//        Map<Long, CourseTargetValueDto> courseTargetValueDtoMap = courseTargetValueDtoList.stream().collect(Collectors.toMap(CourseTargetValueDto::getTargetId, Function.identity(), (dto1, dto2) -> dto1));
-
         //table1课程目标目标与毕业要求指标点的对应关系
         RowRenderData header1 = Rows.of("课程目标", "毕业要求指标点").bgColor("F2F2F2").center().create();
         Tables.TableBuilder tableBuilder1 = Tables.ofPercentWidth("100%");
@@ -183,15 +178,15 @@ public class TRBasicInfoController {
         header2_2List.addAll(header2_1List);
         header2_1List.add("考核/评价环节及目标分值");
 
-        for (int i = 0; i < courseTargetValueDtoList.size(); i++) {
-            CourseTargetWordDto courseTargetValueDto = courseTargetValueDtoList.get(i);
-//            Map<String, BigDecimal> usualScoreWeightMap = courseTargetValueDto.getUsualScoreWeight();
-//            usualScoreWeightMap.forEach((k1, v1) -> {
-//                header2_1List.add("");
-//                header2_2List.add(k1);
-//            });
+        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(courseTargetValueDto.getTargetName(), courseTargetValueDto.getGraduationRequirement());
+            CourseTargetTableBean1 courseTargetTableBean1 = new CourseTargetTableBean1(courseTargetWordDto.getTargetName(), courseTargetWordDto.getGraduationRequirement());
             RowRenderData row = Rows.of(courseTargetTableBean1.getName(), courseTargetTableBean1.getTarget()).rowStyle(this.getRowStyle()).create();
             tableBuilder1.addRow(row);
         }
@@ -202,46 +197,60 @@ public class TRBasicInfoController {
         TableRenderData tableRenderData1 = tableBuilder1.left().create();
         courseReportBean.setCourseTargetTable1(tableRenderData1);
 
-        //TODO 等待曹子轩接口table2-课程目标达成评价依据-课程目标毕业要求
         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();
 
-        List<CourseTargetTableBean2> courseTargetTableBean2List = new ArrayList<>();
-        AtomicReference<BigDecimal> bigDecimalExpressionSum = new AtomicReference<>(new BigDecimal(0));
-        AtomicReference<BigDecimal> homeworkSum = new AtomicReference<>(new BigDecimal(0));
-        AtomicReference<BigDecimal> testSum = new AtomicReference<>(new BigDecimal(0));
-        AtomicReference<BigDecimal> examSum = new AtomicReference<>(new BigDecimal(0));
-        AtomicReference<BigDecimal> targetSum2 = new AtomicReference<>(new BigDecimal(0));
-        AtomicInteger atomicReference = new AtomicInteger(0);
-        for (int i = 0; i < courseTargetValueDtoList.size(); i++) {
-            CourseTargetWordDto courseTargetValueDto = courseTargetValueDtoList.get(i);
-            CourseTargetTableBean2 courseTargetTableBean2 = new CourseTargetTableBean2(courseTargetValueDto.getTargetName(), courseTargetValueDto.getGraduationRequirement(), new BigDecimal(atomicReference.get() + 2), new BigDecimal(atomicReference.get() + 3), new BigDecimal(atomicReference.get() + 4), new BigDecimal(atomicReference.get() + 5), new BigDecimal(atomicReference.get() + 10));
-            bigDecimalExpressionSum.set(bigDecimalExpressionSum.get().add(courseTargetTableBean2.getExpression()));
-            homeworkSum.set(homeworkSum.get().add(courseTargetTableBean2.getHomework()));
-            testSum.set(testSum.get().add(courseTargetTableBean2.getTest()));
-            examSum.set(examSum.get().add(courseTargetTableBean2.getExam()));
-            targetSum2.set(targetSum2.get().add(courseTargetTableBean2.getTargetSum()));
-            courseTargetTableBean2List.add(courseTargetTableBean2);
-            atomicReference.decrementAndGet();
-        }
-
-        RowRenderData[] rowRenderData2 = new RowRenderData[courseTargetTableBean2List.size() + 3];
-        for (int i = 0; i < courseTargetTableBean2List.size(); i++) {
-            CourseTargetTableBean2 courseTargetTableBean2 = courseTargetTableBean2List.get(i);
-            rowRenderData2[i + 2] = Rows.of(courseTargetTableBean2.getName(), courseTargetTableBean2.getTarget(), courseTargetTableBean2.getExpression().toString(), courseTargetTableBean2.getHomework().toString(), courseTargetTableBean2.getTest().toString(), courseTargetTableBean2.getExam().toString(), courseTargetTableBean2.getTargetSum().toString()).rowStyle(this.getRowStyle()).create();
-//            rowRenderData[i + 2] = Rows.of(this.getCell(courseTargetTableBean2.getName()), this.getCell(courseTargetTableBean2.getTarget()), this.getCell(courseTargetTableBean2.getExpression().toString()), this.getCell(courseTargetTableBean2.getHomework().toString()), this.getCell(courseTargetTableBean2.getTest().toString()), this.getCell(courseTargetTableBean2.getExam().toString()), this.getCell(courseTargetTableBean2.getTargetSum().toString())).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;
 
-        RowRenderData header2_foot = Rows.of("合计", "", bigDecimalExpressionSum.toString(), homeworkSum.toString(), testSum.toString(), examSum.toString(), targetSum2.toString()).rowStyle(this.getRowStyle()).create();
+        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, 5)).
-                map(MergeCellRule.Grid.of(0, 6), MergeCellRule.Grid.of(1, 6)).
+                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();
 
@@ -294,15 +303,15 @@ public class TRBasicInfoController {
         List<CourseTargetTableBean4> courseTargetTableBean4List = new ArrayList<>();
         BigDecimal sum4 = new BigDecimal(0);
         Integer seq4 = 0;
-        for (int i = 0; i < courseTargetValueDtoList.size(); i++) {
-            CourseTargetWordDto courseTargetValueDto = courseTargetValueDtoList.get(i);
-//            List<DimensionDto> dimensionDtoList = courseTargetValueDto.getDimensionList();
-//            for (DimensionDto dimensionDto : dimensionDtoList) {
-//                sum4 = sum4.add(new BigDecimal(dimensionDto.getDimensionScore()));
-//                seq4 = seq4 + 1;
-//                CourseTargetTableBean4 courseTargetTableBean4 = new CourseTargetTableBean4(seq4, courseTargetValueDto.getGraduationRequirement(), dimensionDto.getDimensionName(), dimensionDto.getDimensionScore(), courseTargetValueDto.getTargetName());
-//                courseTargetTableBean4List.add(courseTargetTableBean4);
-//            }
+        for (int i = 0; i < courseTargetWordDtoList.size(); i++) {
+            CourseTargetWordDto courseTargetWordDto = courseTargetWordDtoList.get(i);
+            List<DimensionDto> dimensionDtoList = courseTargetWordDto.getFinalScoreDto().getDimensionList();
+            for (DimensionDto dimensionDto : dimensionDtoList) {
+                sum4 = sum4.add(new BigDecimal(dimensionDto.getDimensionScore()));
+                seq4 = seq4 + 1;
+                CourseTargetTableBean4 courseTargetTableBean4 = new CourseTargetTableBean4(seq4, courseTargetWordDto.getGraduationRequirement(), dimensionDto.getDimensionName(), dimensionDto.getDimensionScore(), courseTargetWordDto.getTargetName());
+                courseTargetTableBean4List.add(courseTargetTableBean4);
+            }
         }
         String tableFootTitle4 = "合计${sum}分,占课程总评成绩的70%";
         tableFootTitle4 = tableFootTitle4.replace("${sum}", sum4.toString());
@@ -331,216 +340,216 @@ public class TRBasicInfoController {
         courseReportBean.setCourseTargetTable4(tableRenderData4);
 
         //examstudent-课程目标达成评价依据-考生
-        List<TRExamStudent> trExamStudentList = trExamStudentService.list(new QueryWrapper<TRExamStudent>().lambda().eq(TRExamStudent::getrBasicInfoId, trBasicInfo.getId()));
-        if (!CollectionUtils.isEmpty(trExamStudentList)) {
-//            List<FinalScoreResult> finalScoreResultList = tcFinalScoreService.examStudentOverview(trBasicInfo.getExamId(), trBasicInfo.getCourseCode(), trBasicInfo.getPaperNumber());//考生成绩
-//            Map<String, FinalScoreResult> finalScoreResultMap = finalScoreResultList.stream().collect(Collectors.toMap(FinalScoreResult::getStudentCode, Function.identity(), (dto1, dto2) -> dto1));
-
-            List<CellRenderData> examStudent_cells_1 = new ArrayList<>(), examStudent_cells_2 = new ArrayList<>(), examStudent_cells_3 = new ArrayList<>(), examStudent_cells_4 = new ArrayList<>(), examStudent_cells_5 = 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);
-
-            examStudent_cells_3.add(Cells.of("课程目标考核要素的目标分").center().create());
-            examStudent_cells_3.add(Cells.of("").center().create());
-            examStudent_cells_3.add(Cells.of("").center().create());
-            examStudent_cells_3.add(Cells.of("").center().create());
-
-            examStudent_cells_4.add(Cells.of("课程目标考核要素的平均分").center().create());
-            examStudent_cells_4.add(Cells.of("").center().create());
-            examStudent_cells_4.add(Cells.of("").center().create());
-            examStudent_cells_4.add(Cells.of("").center().create());
-
-            examStudent_cells_5.add(Cells.of("各课程目标平均分").center().create());
-            examStudent_cells_5.add(Cells.of("").center().create());
-            examStudent_cells_5.add(Cells.of("").center().create());
-            examStudent_cells_5.add(Cells.of("").center().create());
-
-            List<ExamStudentTableBean> examStudentTableBeanList = new ArrayList<>();
-            int seq5 = 0;
-            Map<Long, Integer> targetUsualScoreSizeMap = new HashMap<>();
-            trExamStudentList.remove(trExamStudentList.size() - 1);
-            TRExamStudent trExamStudentTemp = trExamStudentList.get(0);
-
-            //首行
-            if (Objects.nonNull(trExamStudentTemp.getResultDetail())) {
-                List<ReportExamStudentTargetDto> reportExamStudentTargetDtoList = JSONArray.parseArray(trExamStudentTemp.getResultDetail(), ReportExamStudentTargetDto.class);
-                for (ReportExamStudentTargetDto reportExamStudentTargetDto : reportExamStudentTargetDtoList) {
-                    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) {
-                            if (!targetUsualScoreSizeMap.containsKey(reportExamStudentTargetDto.getTargetId())) {
-                                targetUsualScoreSizeMap.put(reportExamStudentTargetDto.getTargetId(), 1);
-                            } else {
-                                Integer size = targetUsualScoreSizeMap.get(reportExamStudentTargetDto.getTargetId());
-                                targetUsualScoreSizeMap.put(reportExamStudentTargetDto.getTargetId(), size++);
-                            }
-                            examStudent_cells_1.add(Cells.of("").center().create());
-                            //报错暂时去掉,记得恢复
-//                            examStudent_cells_2.add(Cells.of(reportExamStudentUsualScoreObjDto.getName()).center().create());
-                        }
-                    }
-                    //期末考试
-                    ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = reportExamStudentTargetDto.getFinalScore();
-                    if (Objects.nonNull(reportExamStudentFinalScoreDto) && !CollectionUtils.isEmpty(reportExamStudentFinalScoreDto.getDimensionList())) {
-                        examStudent_cells_2.add(Cells.of("期末考试").center().create());
-                    }
-                }
-                examStudent_cells_1.add(Cells.of("综合成绩").center().create());
-                examStudent_cells_2.add(Cells.of("综合成绩").center().create());
-            }
-
-            for (int i = 0; i < trExamStudentList.size(); i++) {
-                TRExamStudent trExamStudent = trExamStudentList.get(i);
-                LinkedMultiValueMap<Long, Map<String, ExamStudentScoreBean>> scoreMap = new LinkedMultiValueMap<>();
-                if (Objects.nonNull(trExamStudent.getResultDetail())) {
-                    List<ReportExamStudentTargetDto> reportExamStudentTargetDtoList = JSONArray.parseArray(trExamStudent.getResultDetail(), ReportExamStudentTargetDto.class);
-                    for (ReportExamStudentTargetDto reportExamStudentTargetDto : reportExamStudentTargetDtoList) {
-                        if (Objects.nonNull(reportExamStudentTargetDto)) {
-                            ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = reportExamStudentTargetDto.getUsualScore();
-                            //平常作业
-                            if (Objects.nonNull(reportExamStudentUsualScoreDto) && !CollectionUtils.isEmpty(reportExamStudentUsualScoreDto.getScoreList())) {
-                                List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = reportExamStudentUsualScoreDto.getScoreList();
-                                for (ReportExamStudentUsualScoreObjDto reportExamStudentUsualScoreObjDto : reportExamStudentUsualScoreObjDtoList) {
-//                                    scoreMap.add(reportExamStudentTargetDto.getTargetId(), Collections.singletonMap(reportExamStudentUsualScoreObjDto.getName(), new ExamStudentScoreBean(reportExamStudentUsualScoreObjDto.getScore())));
-                                }
-                            }
-                            //期末考试
-                            ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = reportExamStudentTargetDto.getFinalScore();
-                            if (Objects.nonNull(reportExamStudentFinalScoreDto) && !CollectionUtils.isEmpty(reportExamStudentFinalScoreDto.getDimensionList())) {
-                                Double sumScore = reportExamStudentFinalScoreDto.getDimensionList().stream().mapToDouble(DimensionDto::getDimensionScore).sum();
-                                scoreMap.add(reportExamStudentTargetDto.getTargetId(), Collections.singletonMap("期末考试", new ExamStudentScoreBean(sumScore)));
-                            }
-                        }
-                    }
-                    seq5 = seq5 + 1;
-                    examStudentTableBeanList.add(new ExamStudentTableBean(seq5, trExamStudent.getStudentCode(), trExamStudent.getName(), trExamStudent.getAdministrativeClass(), scoreMap, 0.0d));
-                }
-            }
-
-            String title = trBasicInfo.getTeachingObject();
-            String sumTitle = "学生共${sum}名";
-            sumTitle = sumTitle.replace("${sum}", trExamStudentList.size() + "");
-
-            courseReportBean.setExamStudentTitle1(title + sumTitle);
-            courseReportBean.setExamStudentTitle2(title + "《" + courseReportBean.getCourseBasicBean().getCourseName() + "》");
-
-            RowRenderData[] rowRenderDataExamStudent = new RowRenderData[trExamStudentList.size() + 5];
-
-            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());
-
-            for (int i = 0; i < examStudentTableBeanList.size(); i++) {
-                ExamStudentTableBean e = examStudentTableBeanList.get(i);
-                RowRenderData examStudent_row = new RowRenderData();
-                List<CellRenderData> examStudent_cells = new ArrayList<>();
-                examStudent_cells.add(Cells.of(e.getNum().toString()).create());
-                examStudent_cells.add(Cells.of(e.getStudentCode()).create());
-                examStudent_cells.add(Cells.of(e.getName()).create());
-                examStudent_cells.add(Cells.of(e.getAdministrativeClass()).create());
-
-                String key = null;
-                LinkedMultiValueMap<Long, Map<String, ExamStudentScoreBean>> map = e.getMap();
-                for (Map.Entry<Long, List<Map<String, ExamStudentScoreBean>>> entry : map.entrySet()) {
-                    List<Map<String, ExamStudentScoreBean>> list = entry.getValue();
-                    BigDecimal courseSumAvg = new BigDecimal(0);
-                    for (int y = 0; y < list.size(); y++) {
-                        Map<String, ExamStudentScoreBean> m = list.get(y);
-                        for (Map.Entry<String, ExamStudentScoreBean> entry1 : m.entrySet()) {
-                            courseSumAvg = courseSumAvg.add(new BigDecimal(entry1.getValue().getScore()));
-                            entry1.getValue().setAllScore(new BigDecimal(new Random().nextInt(10) + 1).doubleValue());
-                            key = entry1.getKey();
-                            examStudent_cells.add(Cells.of(entry1.getValue().getScore().toString()).create());
-                        }
-                        if (y == list.size() - 1) {
-                            courseSumAvg = courseSumAvg.divide(new BigDecimal(list.size()), 2, BigDecimal.ROUND_HALF_UP)
-                                    .setScale(2, BigDecimal.ROUND_HALF_UP);
-                            list.get(y).get(key).setAvgAllScore(courseSumAvg.doubleValue());
-                        }
-                    }
-                }
-                if (i == examStudentTableBeanList.size() - 1) {
-                    LinkedMultiValueMap<Long, Map<String, ExamStudentScoreBean>> map1 = e.getMap();
-                    for (Map.Entry<Long, List<Map<String, ExamStudentScoreBean>>> entry1 : map1.entrySet()) {
-                        List<Map<String, ExamStudentScoreBean>> list1 = entry1.getValue();
-                        for (int k = 0; k < list1.size(); k++) {
-                            Map<String, ExamStudentScoreBean> m = list1.get(k);
-                            for (Map.Entry<String, ExamStudentScoreBean> entry2 : m.entrySet()) {
-                                examStudent_cells_3.add(Cells.of(entry2.getValue().getTargetAllAvgScore().toString()).create());
-                                examStudent_cells_4.add(Cells.of(entry2.getValue().getAllScore().toString()).create());
-                            }
-                        }
-                        examStudent_cells_5.add(Cells.of(list1.get(list1.size() - 1).get(key).getAvgAllScore().toString()).create());
-                        for (int k = 1; k < list1.size(); k++) {
-                            examStudent_cells_5.add(Cells.of("").create());
-                        }
-                    }
-                    examStudent_cells_3.add(Cells.of(e.getSumScore().toString()).create());
-                    examStudent_cells_4.add(Cells.of(e.getSumScore().toString()).create());
-                    examStudent_cells_5.add(Cells.of("").create());
-                }
-                examStudent_cells.add(Cells.of(e.getSumScore().toString()).create());
-                examStudent_row.setCells(examStudent_cells);
-                examStudent_row.setRowStyle(this.getRowStyle());
-                rowRenderDataExamStudent[i + 2] = examStudent_row;
-            }
-
-            rowRenderDataExamStudent[0] = examStudent_header_1;
-            rowRenderDataExamStudent[1] = examStudent_header_2;
-            RowRenderData examStudent_row3 = new RowRenderData();
-            examStudent_row3.setCells(examStudent_cells_3);
-            examStudent_row3.setRowStyle(this.getRowStyle());
-            RowRenderData examStudent_row4 = new RowRenderData();
-            examStudent_row4.setCells(examStudent_cells_4);
-            examStudent_row4.setRowStyle(this.getRowStyle());
-            RowRenderData examStudent_row5 = new RowRenderData();
-            examStudent_row5.setCells(examStudent_cells_5);
-            examStudent_row5.setRowStyle(this.getRowStyle());
-
-            rowRenderDataExamStudent[rowRenderDataExamStudent.length - 3] = examStudent_row3;
-            rowRenderDataExamStudent[rowRenderDataExamStudent.length - 2] = examStudent_row4;
-            rowRenderDataExamStudent[rowRenderDataExamStudent.length - 1] = examStudent_row5;
-
-            // 表格合并,根据坐标
-            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)));
-
-            //动态扩展列
-            AtomicInteger initNum = new AtomicInteger(4);
-            targetUsualScoreSizeMap.forEach((k, v) -> {
-                int increaseNum = 1;
-                while (increaseNum <= v) {
-                    mergeCellRuleExamStudent.getMapping().add(new MergeCellRule.GridRule(MergeCellRule.Grid.of(0, initNum.get()), MergeCellRule.Grid.of(0, initNum.get() + increaseNum)));
-                    mergeCellRuleExamStudent.getMapping().add(new MergeCellRule.GridRule(MergeCellRule.Grid.of(rowRenderDataExamStudent.length - 1, initNum.get()), MergeCellRule.Grid.of(rowRenderDataExamStudent.length - 1, initNum.get() + increaseNum)));
-                    increaseNum++;
-                }
-                initNum.set(initNum.get() + increaseNum);
-            });
-            mergeCellRuleExamStudent.getMapping().add(new MergeCellRule.GridRule(MergeCellRule.Grid.of(0, initNum.get()), MergeCellRule.Grid.of(1, initNum.get())));
-
-            Tables.TableBuilder tableBuilderExamStudent = Tables.ofPercentWidth("100%");
-            for (int i = 0; i < rowRenderDataExamStudent.length; i++) {
-                tableBuilderExamStudent.addRow(rowRenderDataExamStudent[i]);
-            }
-            TableRenderData tableRenderDataExamStudent = tableBuilderExamStudent.mergeRule(mergeCellRuleExamStudent).left().create();
-            courseReportBean.setExamStudentTable1(tableRenderDataExamStudent);
-        }
+//        List<TRExamStudent> trExamStudentList = trExamStudentService.list(new QueryWrapper<TRExamStudent>().lambda().eq(TRExamStudent::getrBasicInfoId, trBasicInfo.getId()));
+//        if (!CollectionUtils.isEmpty(trExamStudentList)) {
+////            List<FinalScoreResult> finalScoreResultList = tcFinalScoreService.examStudentOverview(trBasicInfo.getExamId(), trBasicInfo.getCourseCode(), trBasicInfo.getPaperNumber());//考生成绩
+////            Map<String, FinalScoreResult> finalScoreResultMap = finalScoreResultList.stream().collect(Collectors.toMap(FinalScoreResult::getStudentCode, Function.identity(), (dto1, dto2) -> dto1));
+//
+//            List<CellRenderData> examStudent_cells_1 = new ArrayList<>(), examStudent_cells_2 = new ArrayList<>(), examStudent_cells_3 = new ArrayList<>(), examStudent_cells_4 = new ArrayList<>(), examStudent_cells_5 = 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);
+//
+//            examStudent_cells_3.add(Cells.of("课程目标考核要素的目标分").center().create());
+//            examStudent_cells_3.add(Cells.of("").center().create());
+//            examStudent_cells_3.add(Cells.of("").center().create());
+//            examStudent_cells_3.add(Cells.of("").center().create());
+//
+//            examStudent_cells_4.add(Cells.of("课程目标考核要素的平均分").center().create());
+//            examStudent_cells_4.add(Cells.of("").center().create());
+//            examStudent_cells_4.add(Cells.of("").center().create());
+//            examStudent_cells_4.add(Cells.of("").center().create());
+//
+//            examStudent_cells_5.add(Cells.of("各课程目标平均分").center().create());
+//            examStudent_cells_5.add(Cells.of("").center().create());
+//            examStudent_cells_5.add(Cells.of("").center().create());
+//            examStudent_cells_5.add(Cells.of("").center().create());
+//
+//            List<ExamStudentTableBean> examStudentTableBeanList = new ArrayList<>();
+//            int seq5 = 0;
+//            Map<Long, Integer> targetUsualScoreSizeMap = new HashMap<>();
+//            trExamStudentList.remove(trExamStudentList.size() - 1);
+//            TRExamStudent trExamStudentTemp = trExamStudentList.get(0);
+//
+//            //首行
+//            if (Objects.nonNull(trExamStudentTemp.getResultDetail())) {
+//                List<ReportExamStudentTargetDto> reportExamStudentTargetDtoList = JSONArray.parseArray(trExamStudentTemp.getResultDetail(), ReportExamStudentTargetDto.class);
+//                for (ReportExamStudentTargetDto reportExamStudentTargetDto : reportExamStudentTargetDtoList) {
+//                    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) {
+//                            if (!targetUsualScoreSizeMap.containsKey(reportExamStudentTargetDto.getTargetId())) {
+//                                targetUsualScoreSizeMap.put(reportExamStudentTargetDto.getTargetId(), 1);
+//                            } else {
+//                                Integer size = targetUsualScoreSizeMap.get(reportExamStudentTargetDto.getTargetId());
+//                                targetUsualScoreSizeMap.put(reportExamStudentTargetDto.getTargetId(), size++);
+//                            }
+//                            examStudent_cells_1.add(Cells.of("").center().create());
+//                            //报错暂时去掉,记得恢复
+////                            examStudent_cells_2.add(Cells.of(reportExamStudentUsualScoreObjDto.getName()).center().create());
+//                        }
+//                    }
+//                    //期末考试
+//                    ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = reportExamStudentTargetDto.getFinalScore();
+//                    if (Objects.nonNull(reportExamStudentFinalScoreDto) && !CollectionUtils.isEmpty(reportExamStudentFinalScoreDto.getDimensionList())) {
+//                        examStudent_cells_2.add(Cells.of("期末考试").center().create());
+//                    }
+//                }
+//                examStudent_cells_1.add(Cells.of("综合成绩").center().create());
+//                examStudent_cells_2.add(Cells.of("综合成绩").center().create());
+//            }
+//
+//            for (int i = 0; i < trExamStudentList.size(); i++) {
+//                TRExamStudent trExamStudent = trExamStudentList.get(i);
+//                LinkedMultiValueMap<Long, Map<String, ExamStudentScoreBean>> scoreMap = new LinkedMultiValueMap<>();
+//                if (Objects.nonNull(trExamStudent.getResultDetail())) {
+//                    List<ReportExamStudentTargetDto> reportExamStudentTargetDtoList = JSONArray.parseArray(trExamStudent.getResultDetail(), ReportExamStudentTargetDto.class);
+//                    for (ReportExamStudentTargetDto reportExamStudentTargetDto : reportExamStudentTargetDtoList) {
+//                        if (Objects.nonNull(reportExamStudentTargetDto)) {
+//                            ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = reportExamStudentTargetDto.getUsualScore();
+//                            //平常作业
+//                            if (Objects.nonNull(reportExamStudentUsualScoreDto) && !CollectionUtils.isEmpty(reportExamStudentUsualScoreDto.getScoreList())) {
+//                                List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = reportExamStudentUsualScoreDto.getScoreList();
+//                                for (ReportExamStudentUsualScoreObjDto reportExamStudentUsualScoreObjDto : reportExamStudentUsualScoreObjDtoList) {
+////                                    scoreMap.add(reportExamStudentTargetDto.getTargetId(), Collections.singletonMap(reportExamStudentUsualScoreObjDto.getName(), new ExamStudentScoreBean(reportExamStudentUsualScoreObjDto.getScore())));
+//                                }
+//                            }
+//                            //期末考试
+//                            ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = reportExamStudentTargetDto.getFinalScore();
+//                            if (Objects.nonNull(reportExamStudentFinalScoreDto) && !CollectionUtils.isEmpty(reportExamStudentFinalScoreDto.getDimensionList())) {
+//                                Double sumScore = reportExamStudentFinalScoreDto.getDimensionList().stream().mapToDouble(DimensionDto::getDimensionScore).sum();
+//                                scoreMap.add(reportExamStudentTargetDto.getTargetId(), Collections.singletonMap("期末考试", new ExamStudentScoreBean(sumScore)));
+//                            }
+//                        }
+//                    }
+//                    seq5 = seq5 + 1;
+//                    examStudentTableBeanList.add(new ExamStudentTableBean(seq5, trExamStudent.getStudentCode(), trExamStudent.getName(), trExamStudent.getAdministrativeClass(), scoreMap, 0.0d));
+//                }
+//            }
+//
+//            String title = trBasicInfo.getTeachingObject();
+//            String sumTitle = "学生共${sum}名";
+//            sumTitle = sumTitle.replace("${sum}", trExamStudentList.size() + "");
+//
+//            courseReportBean.setExamStudentTitle1(title + sumTitle);
+//            courseReportBean.setExamStudentTitle2(title + "《" + courseReportBean.getCourseBasicBean().getCourseName() + "》");
+//
+//            RowRenderData[] rowRenderDataExamStudent = new RowRenderData[trExamStudentList.size() + 5];
+//
+//            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());
+//
+//            for (int i = 0; i < examStudentTableBeanList.size(); i++) {
+//                ExamStudentTableBean e = examStudentTableBeanList.get(i);
+//                RowRenderData examStudent_row = new RowRenderData();
+//                List<CellRenderData> examStudent_cells = new ArrayList<>();
+//                examStudent_cells.add(Cells.of(e.getNum().toString()).create());
+//                examStudent_cells.add(Cells.of(e.getStudentCode()).create());
+//                examStudent_cells.add(Cells.of(e.getName()).create());
+//                examStudent_cells.add(Cells.of(e.getAdministrativeClass()).create());
+//
+//                String key = null;
+//                LinkedMultiValueMap<Long, Map<String, ExamStudentScoreBean>> map = e.getMap();
+//                for (Map.Entry<Long, List<Map<String, ExamStudentScoreBean>>> entry : map.entrySet()) {
+//                    List<Map<String, ExamStudentScoreBean>> list = entry.getValue();
+//                    BigDecimal courseSumAvg = new BigDecimal(0);
+//                    for (int y = 0; y < list.size(); y++) {
+//                        Map<String, ExamStudentScoreBean> m = list.get(y);
+//                        for (Map.Entry<String, ExamStudentScoreBean> entry1 : m.entrySet()) {
+//                            courseSumAvg = courseSumAvg.add(new BigDecimal(entry1.getValue().getScore()));
+//                            entry1.getValue().setAllScore(new BigDecimal(new Random().nextInt(10) + 1).doubleValue());
+//                            key = entry1.getKey();
+//                            examStudent_cells.add(Cells.of(entry1.getValue().getScore().toString()).create());
+//                        }
+//                        if (y == list.size() - 1) {
+//                            courseSumAvg = courseSumAvg.divide(new BigDecimal(list.size()), 2, BigDecimal.ROUND_HALF_UP)
+//                                    .setScale(2, BigDecimal.ROUND_HALF_UP);
+//                            list.get(y).get(key).setAvgAllScore(courseSumAvg.doubleValue());
+//                        }
+//                    }
+//                }
+//                if (i == examStudentTableBeanList.size() - 1) {
+//                    LinkedMultiValueMap<Long, Map<String, ExamStudentScoreBean>> map1 = e.getMap();
+//                    for (Map.Entry<Long, List<Map<String, ExamStudentScoreBean>>> entry1 : map1.entrySet()) {
+//                        List<Map<String, ExamStudentScoreBean>> list1 = entry1.getValue();
+//                        for (int k = 0; k < list1.size(); k++) {
+//                            Map<String, ExamStudentScoreBean> m = list1.get(k);
+//                            for (Map.Entry<String, ExamStudentScoreBean> entry2 : m.entrySet()) {
+//                                examStudent_cells_3.add(Cells.of(entry2.getValue().getTargetAllAvgScore().toString()).create());
+//                                examStudent_cells_4.add(Cells.of(entry2.getValue().getAllScore().toString()).create());
+//                            }
+//                        }
+//                        examStudent_cells_5.add(Cells.of(list1.get(list1.size() - 1).get(key).getAvgAllScore().toString()).create());
+//                        for (int k = 1; k < list1.size(); k++) {
+//                            examStudent_cells_5.add(Cells.of("").create());
+//                        }
+//                    }
+//                    examStudent_cells_3.add(Cells.of(e.getSumScore().toString()).create());
+//                    examStudent_cells_4.add(Cells.of(e.getSumScore().toString()).create());
+//                    examStudent_cells_5.add(Cells.of("").create());
+//                }
+//                examStudent_cells.add(Cells.of(e.getSumScore().toString()).create());
+//                examStudent_row.setCells(examStudent_cells);
+//                examStudent_row.setRowStyle(this.getRowStyle());
+//                rowRenderDataExamStudent[i + 2] = examStudent_row;
+//            }
+//
+//            rowRenderDataExamStudent[0] = examStudent_header_1;
+//            rowRenderDataExamStudent[1] = examStudent_header_2;
+//            RowRenderData examStudent_row3 = new RowRenderData();
+//            examStudent_row3.setCells(examStudent_cells_3);
+//            examStudent_row3.setRowStyle(this.getRowStyle());
+//            RowRenderData examStudent_row4 = new RowRenderData();
+//            examStudent_row4.setCells(examStudent_cells_4);
+//            examStudent_row4.setRowStyle(this.getRowStyle());
+//            RowRenderData examStudent_row5 = new RowRenderData();
+//            examStudent_row5.setCells(examStudent_cells_5);
+//            examStudent_row5.setRowStyle(this.getRowStyle());
+//
+//            rowRenderDataExamStudent[rowRenderDataExamStudent.length - 3] = examStudent_row3;
+//            rowRenderDataExamStudent[rowRenderDataExamStudent.length - 2] = examStudent_row4;
+//            rowRenderDataExamStudent[rowRenderDataExamStudent.length - 1] = examStudent_row5;
+//
+//            // 表格合并,根据坐标
+//            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)));
+//
+//            //动态扩展列
+//            AtomicInteger initNum = new AtomicInteger(4);
+//            targetUsualScoreSizeMap.forEach((k, v) -> {
+//                int increaseNum = 1;
+//                while (increaseNum <= v) {
+//                    mergeCellRuleExamStudent.getMapping().add(new MergeCellRule.GridRule(MergeCellRule.Grid.of(0, initNum.get()), MergeCellRule.Grid.of(0, initNum.get() + increaseNum)));
+//                    mergeCellRuleExamStudent.getMapping().add(new MergeCellRule.GridRule(MergeCellRule.Grid.of(rowRenderDataExamStudent.length - 1, initNum.get()), MergeCellRule.Grid.of(rowRenderDataExamStudent.length - 1, initNum.get() + increaseNum)));
+//                    increaseNum++;
+//                }
+//                initNum.set(initNum.get() + increaseNum);
+//            });
+//            mergeCellRuleExamStudent.getMapping().add(new MergeCellRule.GridRule(MergeCellRule.Grid.of(0, initNum.get()), MergeCellRule.Grid.of(1, initNum.get())));
+//
+//            Tables.TableBuilder tableBuilderExamStudent = Tables.ofPercentWidth("100%");
+//            for (int i = 0; i < rowRenderDataExamStudent.length; i++) {
+//                tableBuilderExamStudent.addRow(rowRenderDataExamStudent[i]);
+//            }
+//            TableRenderData tableRenderDataExamStudent = tableBuilderExamStudent.mergeRule(mergeCellRuleExamStudent).left().create();
+//            courseReportBean.setExamStudentTable1(tableRenderDataExamStudent);
+//        }
 
         XWPFTemplate template = XWPFTemplate.compile("/Users/king/git/teachcloud-server/distributed-print/src/main/resources/static/course_degree_report.docx").render(courseReportBean);
         template.writeToFile("/Users/king/Downloads/demo_course_degree_report.docx");