소스 검색

测试报告

wangliang 1 년 전
부모
커밋
3539259553

+ 0 - 46
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/report/word/CourseTargetTableBean1.java

@@ -1,46 +0,0 @@
-package com.qmth.distributed.print.business.bean.result.report.word;
-
-import io.swagger.annotations.ApiModelProperty;
-
-import java.io.Serializable;
-
-/**
- * @Description: 课程报告表格1bean
- * @Param:
- * @return:
- * @Author: wangliang
- * @Date: 2024/1/31
- */
-public class CourseTargetTableBean1 implements Serializable {
-
-    @ApiModelProperty(name = "名称")
-    String name;
-
-    @ApiModelProperty(name = "目标")
-    String target;
-
-    public CourseTargetTableBean1() {
-
-    }
-
-    public CourseTargetTableBean1(String name, String target) {
-        this.name = name;
-        this.target = target;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getTarget() {
-        return target;
-    }
-
-    public void setTarget(String target) {
-        this.target = target;
-    }
-}

+ 0 - 74
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/report/word/ExamStudentScoreBean.java

@@ -1,74 +0,0 @@
-package com.qmth.distributed.print.business.bean.result.report.word;
-
-import io.swagger.annotations.ApiModelProperty;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-
-/**
- * @Description: 考生分数bean
- * @Param:
- * @return:
- * @Author: wangliang
- * @Date: 2024/1/31
- */
-public class ExamStudentScoreBean implements Serializable {
-
-    @ApiModelProperty(name = "作业分数")
-    Double score;
-
-    @ApiModelProperty(name = "课程目标考核要素的目标分")
-    BigDecimal targetAllAvgScore;
-
-    @ApiModelProperty(name = "课程目标考核要素的平均分")
-    Double allScore;
-
-    @ApiModelProperty(name = "各课程目标平均分")
-    Double avgAllScore;
-
-    public ExamStudentScoreBean() {
-
-    }
-
-    public ExamStudentScoreBean(Double score) {
-        this.score = score;
-    }
-
-    public ExamStudentScoreBean(Double score, BigDecimal targetAllAvgScore, Double avgAllScore) {
-        this.score = score;
-        this.targetAllAvgScore = targetAllAvgScore;
-        this.avgAllScore = avgAllScore;
-    }
-
-    public Double getScore() {
-        return score;
-    }
-
-    public void setScore(Double score) {
-        this.score = score;
-    }
-
-    public BigDecimal getTargetAllAvgScore() {
-        return targetAllAvgScore;
-    }
-
-    public void setTargetAllAvgScore(BigDecimal targetAllAvgScore) {
-        this.targetAllAvgScore = targetAllAvgScore;
-    }
-
-    public Double getAllScore() {
-        return allScore;
-    }
-
-    public void setAllScore(Double allScore) {
-        this.allScore = allScore;
-    }
-
-    public Double getAvgAllScore() {
-        return avgAllScore;
-    }
-
-    public void setAvgAllScore(Double avgAllScore) {
-        this.avgAllScore = avgAllScore;
-    }
-}

+ 0 - 103
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/report/word/ExamStudentTableBean.java

@@ -1,103 +0,0 @@
-package com.qmth.distributed.print.business.bean.result.report.word;
-
-import io.swagger.annotations.ApiModelProperty;
-import org.springframework.util.LinkedMultiValueMap;
-
-import java.io.Serializable;
-import java.util.Map;
-
-/**
- * @Description: 考生表格bean
- * @Param:
- * @return:
- * @Author: wangliang
- * @Date: 2024/1/31
- */
-public class ExamStudentTableBean implements Serializable {
-
-    @ApiModelProperty(name = "序号")
-    Integer num = 0;
-
-    @ApiModelProperty(name = "学号")
-    String studentCode;
-
-    @ApiModelProperty(name = "姓名")
-    String name;
-
-    @ApiModelProperty(name = "行政班级")
-    String administrativeClass;
-
-    @ApiModelProperty(name = "目标成绩")
-    LinkedMultiValueMap<Long, Map<String, ExamStudentScoreBean>> map;
-
-    @ApiModelProperty(name = "综合成绩")
-    Double sumScore = 0.0d;
-
-    public ExamStudentTableBean() {
-
-    }
-
-    public ExamStudentTableBean(Integer num, String studentCode, String name, String administrativeClass) {
-        this.num = num;
-        this.studentCode = studentCode;
-        this.name = name;
-        this.administrativeClass = administrativeClass;
-    }
-
-    public ExamStudentTableBean(Integer num, String studentCode, String name, String administrativeClass, LinkedMultiValueMap<Long, Map<String, ExamStudentScoreBean>> map, Double sumScore) {
-        this.num = num;
-        this.studentCode = studentCode;
-        this.name = name;
-        this.administrativeClass = administrativeClass;
-        this.map = map;
-        this.sumScore = sumScore;
-    }
-
-    public LinkedMultiValueMap<Long, Map<String, ExamStudentScoreBean>> getMap() {
-        return map;
-    }
-
-    public void setMap(LinkedMultiValueMap<Long, Map<String, ExamStudentScoreBean>> map) {
-        this.map = map;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public Integer getNum() {
-        return num;
-    }
-
-    public void setNum(Integer num) {
-        this.num = num;
-    }
-
-    public String getStudentCode() {
-        return studentCode;
-    }
-
-    public void setStudentCode(String studentCode) {
-        this.studentCode = studentCode;
-    }
-
-    public String getAdministrativeClass() {
-        return administrativeClass;
-    }
-
-    public void setAdministrativeClass(String administrativeClass) {
-        this.administrativeClass = administrativeClass;
-    }
-
-    public Double getSumScore() {
-        return sumScore;
-    }
-
-    public void setSumScore(Double sumScore) {
-        this.sumScore = sumScore;
-    }
-}

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

@@ -7,6 +7,7 @@ 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;
+import com.qmth.distributed.print.business.bean.result.report.word.CourseReportBean;
 import com.qmth.distributed.print.business.entity.TRBasicInfo;
 import com.qmth.teachcloud.mark.entity.MarkPaper;
 
@@ -101,4 +102,13 @@ public interface TRBasicInfoService extends IService<TRBasicInfo> {
      * @return
      */
     public TableRenderData buildWordTable4(List<CourseTargetWordDto> courseTargetWordDtoList);
+
+    /**
+     * 构建word动态表格5
+     *
+     * @param trBasicInfo
+     * @param courseReportBean
+     * @return
+     */
+    public TableRenderData buildWordTable5(TRBasicInfo trBasicInfo, CourseReportBean courseReportBean);
 }

+ 206 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TRBasicInfoServiceImpl.java

@@ -15,7 +15,7 @@ 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.CourseReportBean;
 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;
@@ -42,6 +42,7 @@ import org.springframework.util.CollectionUtils;
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -423,9 +424,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                 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();
+            RowRenderData row = Rows.of(courseTargetWordDto.getTargetName(), courseTargetWordDto.getGraduationRequirement()).rowStyle(this.getRowStyle()).create();
             tableBuilder1.addRow(row);
         }
         header2_1List.add("目标分值统计");
@@ -549,7 +548,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         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();
 
@@ -597,7 +596,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         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();
 
@@ -608,6 +607,207 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         return tableBuilder4.mergeRule(mergeCellRule4).left().create();
     }
 
+    /**
+     * 构建word动态表格5
+     *
+     * @param trBasicInfo
+     * @param courseReportBean
+     * @return
+     */
+    @Override
+    public TableRenderData buildWordTable5(TRBasicInfo trBasicInfo, CourseReportBean courseReportBean) {
+        TableRenderData tableRenderDataExamStudent = null;
+        List<TRExamStudent> trExamStudentList = trExamStudentService.list(new QueryWrapper<TRExamStudent>().lambda().eq(TRExamStudent::getrBasicInfoId, trBasicInfo.getId()));
+        if (!CollectionUtils.isEmpty(trExamStudentList)) {
+            List<CellRenderData> examStudent_cells_1 = new ArrayList<>(), examStudent_cells_2 = 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);
+
+            Map<Long, Integer> targetUsualScoreSizeMap = new HashMap<>();
+            TRExamStudent trExamStudentTemp = trExamStudentList.get(0);
+
+            RowRenderData[] rowRenderDataExamStudent = new RowRenderData[trExamStudentList.size() + 2];
+            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());
+
+            rowRenderDataExamStudent[0] = examStudent_header_1;
+            rowRenderDataExamStudent[1] = examStudent_header_2;
+
+            //首行
+            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.getEvaluation()).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);
+                RowRenderData examStudent_row = new RowRenderData();
+                List<CellRenderData> examStudent_cells = new ArrayList<>();
+                switch (trExamStudent.getName()) {
+                    case "目标分":
+                        examStudent_cells.add(Cells.of("课程目标考核要素的目标分").create());
+                        examStudent_cells.add(Cells.of("课程目标考核要素的目标分").create());
+                        examStudent_cells.add(Cells.of("课程目标考核要素的目标分").create());
+                        break;
+                    case "平均分":
+                        examStudent_cells.add(Cells.of("课程目标考核要素的平均分").create());
+                        examStudent_cells.add(Cells.of("课程目标考核要素的平均分").create());
+                        examStudent_cells.add(Cells.of("课程目标考核要素的平均分").create());
+                        break;
+                    case "各课程目标平均分":
+                        examStudent_cells.add(Cells.of(trExamStudent.getName()).create());
+                        examStudent_cells.add(Cells.of(trExamStudent.getStudentCode()).create());
+                        examStudent_cells.add(Cells.of(trExamStudent.getName()).create());
+                        break;
+                    default:
+                        examStudent_cells.add(Cells.of(String.valueOf(i + 1)).create());
+                        examStudent_cells.add(Cells.of(trExamStudent.getStudentCode()).create());
+                        examStudent_cells.add(Cells.of(trExamStudent.getName()).create());
+                        break;
+                }
+                examStudent_cells.add(Cells.of(trExamStudent.getAdministrativeClass()).create());
+
+                BigDecimal targetSumScore = new BigDecimal(0), targetAvgScore = new BigDecimal(0);
+                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) {
+                                    switch (trExamStudent.getName()) {
+                                        case "目标分":
+                                            examStudent_cells.add(Cells.of(reportExamStudentUsualScoreObjDto.getTargetScore().toString()).create());
+                                            targetSumScore = targetSumScore.add(reportExamStudentUsualScoreObjDto.getTargetScore());
+                                            break;
+                                        case "平均分":
+                                            examStudent_cells.add(Cells.of(reportExamStudentUsualScoreObjDto.getMatrixAvgScore().toString()).create());
+                                            targetAvgScore = targetAvgScore.add(new BigDecimal(reportExamStudentUsualScoreObjDto.getMatrixAvgScore()));
+                                            break;
+                                        case "各课程目标平均分":
+                                            examStudent_cells.add(Cells.of(reportExamStudentTargetDto.getTargetMatrixAvgScore().toString()).create());
+                                            break;
+                                        default:
+                                            examStudent_cells.add(Cells.of(reportExamStudentUsualScoreObjDto.getScore().toString()).create());
+                                            break;
+                                    }
+                                }
+                            }
+                            //期末考试
+                            ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = reportExamStudentTargetDto.getFinalScore();
+                            if (Objects.nonNull(reportExamStudentFinalScoreDto) && !CollectionUtils.isEmpty(reportExamStudentFinalScoreDto.getDimensionList())) {
+                                switch (trExamStudent.getName()) {
+                                    case "目标分":
+                                        examStudent_cells.add(Cells.of(reportExamStudentFinalScoreDto.getTargetScore().toString()).create());
+                                        targetSumScore = targetSumScore.add(reportExamStudentFinalScoreDto.getTargetScore());
+                                        break;
+                                    case "平均分":
+                                        examStudent_cells.add(Cells.of(reportExamStudentFinalScoreDto.getTargetMatrixSumScore().toString()).create());
+                                        targetAvgScore = targetAvgScore.add(new BigDecimal(reportExamStudentFinalScoreDto.getTargetMatrixSumScore()));
+                                        break;
+                                    case "各课程目标平均分":
+                                        examStudent_cells.add(Cells.of(reportExamStudentTargetDto.getTargetMatrixAvgScore().toString()).create());
+                                        break;
+                                    default:
+                                        examStudent_cells.add(Cells.of(reportExamStudentFinalScoreDto.getTargetMatrixSumScore().toString()).create());
+                                        break;
+                                }
+                            }
+                        }
+                    }
+                }
+                switch (trExamStudent.getName()) {
+                    case "目标分":
+                        examStudent_cells.add(Cells.of(targetSumScore.setScale(2, BigDecimal.ROUND_HALF_UP).toString()).create());
+                        break;
+                    case "平均分":
+                        examStudent_cells.add(Cells.of(targetAvgScore.setScale(2, BigDecimal.ROUND_HALF_UP).toString()).create());
+                        break;
+                    case "各课程目标平均分":
+                        examStudent_cells.add(Cells.of("").create());
+                        break;
+                    default:
+                        examStudent_cells.add(Cells.of(trExamStudent.getScore().toString()).create());
+                        break;
+                }
+                examStudent_row.setCells(examStudent_cells);
+                examStudent_row.setRowStyle(this.getRowStyle());
+                rowRenderDataExamStudent[i + 2] = examStudent_row;
+            }
+
+            String title = trBasicInfo.getTeachingObject();
+            String sumTitle = "学生共${examStudentSum}名";
+            sumTitle = sumTitle.replace("${examStudentSum}", trExamStudentList.size() - 3 + "");
+
+            courseReportBean.setExamStudentTitle1(title + sumTitle);
+            courseReportBean.setExamStudentTitle2(title + "《" + courseReportBean.getCourseBasicBean().getCourseName() + "》");
+
+            //表格合并,根据坐标
+            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]);
+            }
+            tableRenderDataExamStudent = tableBuilderExamStudent.mergeRule(mergeCellRuleExamStudent).left().create();
+        }
+        return tableRenderDataExamStudent;
+    }
+
     /**
      * 获取行样式
      *

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

@@ -124,7 +124,7 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
             //目标分处理
             this.targetScoreHandle(reportExamStudentTargetDto);
             //各课程目标平均分处理
-            this.targetAvgScoreHandle(reportExamStudentTargetAvgDto);
+//            this.targetAvgScoreHandle(reportExamStudentTargetAvgDto);
 
             examStudentList.add(reportExamStudentTargetDto);
             examStudentList.add(reportExamStudentAvgDto);

+ 1 - 247
distributed-print/src/main/java/com/qmth/distributed/print/api/TRBasicInfoController.java

@@ -6,9 +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.style.CellStyle;
-import com.deepoove.poi.data.style.ParagraphStyle;
-import com.deepoove.poi.data.style.RowStyle;
 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;
@@ -29,8 +26,6 @@ import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.mark.entity.MarkPaper;
 import com.qmth.teachcloud.mark.service.MarkPaperService;
 import io.swagger.annotations.*;
-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.validation.BindingResult;
@@ -186,250 +181,9 @@ public class TRBasicInfoController {
         courseReportBean.setCourseTargetTable4(trBasicInfoService.buildWordTable4(courseTargetWordDtoList));
 
         //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);
-//        }
+        courseReportBean.setExamStudentTable1(trBasicInfoService.buildWordTable5(trBasicInfo, courseReportBean));
 
         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");
     }
-
-    /**
-     * 获取行样式
-     *
-     * @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;
-    }
 }