|
@@ -3,10 +3,16 @@ package com.qmth.distributed.print.api;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.deepoove.poi.XWPFTemplate;
|
|
|
+import com.deepoove.poi.data.*;
|
|
|
+import com.deepoove.poi.data.style.CellStyle;
|
|
|
+import com.deepoove.poi.data.style.ParagraphStyle;
|
|
|
+import com.deepoove.poi.data.style.RowStyle;
|
|
|
import com.qmth.boot.api.constant.ApiConstant;
|
|
|
import com.qmth.distributed.print.business.bean.dto.report.*;
|
|
|
import com.qmth.distributed.print.business.bean.result.ScoreResult;
|
|
|
import com.qmth.distributed.print.business.bean.result.report.ReportResult;
|
|
|
+import com.qmth.distributed.print.business.bean.result.report.word.*;
|
|
|
import com.qmth.distributed.print.business.entity.TRBasicInfo;
|
|
|
import com.qmth.distributed.print.business.entity.TRExamStudent;
|
|
|
import com.qmth.distributed.print.business.service.PrintCommonService;
|
|
@@ -21,8 +27,11 @@ 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.util.LinkedMultiValueMap;
|
|
|
import org.springframework.validation.BindingResult;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
@@ -31,9 +40,8 @@ import javax.validation.Valid;
|
|
|
import javax.validation.constraints.Max;
|
|
|
import javax.validation.constraints.Min;
|
|
|
import java.io.IOException;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Objects;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
@@ -148,5 +156,340 @@ public class TRBasicInfoController {
|
|
|
@ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber) throws IOException {
|
|
|
TRBasicInfo trBasicInfo = trBasicInfoService.getOne(new QueryWrapper<TRBasicInfo>().lambda().eq(TRBasicInfo::getExamId, examId).eq(TRBasicInfo::getCourseCode, courseCode).eq(TRBasicInfo::getPaperNumber, paperNumber));
|
|
|
Objects.requireNonNull(trBasicInfo, "没有报告信息");
|
|
|
+
|
|
|
+ CourseBasicBean courseBasicBean = new CourseBasicBean("启明科目",
|
|
|
+ "qmth", "qm", "自营", "10/2.0", "10/0", "光谷梦工厂", "理想", "2024年1月30日", "我们的目标是没有目标", "2");
|
|
|
+ CourseReportBean courseReportBean = new CourseReportBean("2022-2023(2)学期《测试输出报告》", courseBasicBean);
|
|
|
+
|
|
|
+ //table1
|
|
|
+ RowRenderData header1 = Rows.of("课程目标", "毕业要求指标点").bgColor("F2F2F2").center().create();
|
|
|
+ Tables.TableBuilder tableBuilder1 = Tables.ofPercentWidth("100%");
|
|
|
+ Map<String, Integer> courseTargetMap = new LinkedHashMap<>();
|
|
|
+ tableBuilder1.addRow(header1);
|
|
|
+ for (int i = 0; i < 2; i++) {
|
|
|
+ CourseTargetTableBean1 courseTargetTableBean1 = new CourseTargetTableBean1("课程目标" + (i + 1), "完成目标" + (i + 1));
|
|
|
+ RowRenderData row = Rows.of(courseTargetTableBean1.getName(), courseTargetTableBean1.getTarget()).rowStyle(this.getRowStyle()).create();
|
|
|
+ tableBuilder1.addRow(row);
|
|
|
+ courseTargetMap.put(courseTargetTableBean1.getName(), i + 1);
|
|
|
+ }
|
|
|
+ TableRenderData tableRenderData1 = tableBuilder1.left().create();
|
|
|
+ courseReportBean.setCourseTargetTable1(tableRenderData1);
|
|
|
+
|
|
|
+ //table2
|
|
|
+ RowRenderData header2_1 = Rows.of("课程目标", "支撑毕业要求", "考核/评价环节及目标分值", "", "", "", "目标分值统计").bgColor("F2F2F2").center().create();
|
|
|
+ RowRenderData header2_2 = Rows.of("课程目标", "支撑毕业要求", "平时表现", "课后作业", "课程实验", "期末考试", "目标分值统计").bgColor("F2F2F2").center().create();
|
|
|
+
|
|
|
+ List<CourseTargetTableBean2> courseTargetTableBean2List = new ArrayList<>();
|
|
|
+ BigDecimal bigDecimalExpressionSum = new BigDecimal(0), homeworkSum = new BigDecimal(0), testSum = new BigDecimal(0), examSum = new BigDecimal(0), targetSum2 = new BigDecimal(0);
|
|
|
+ for (int i = 0; i < 2; i++) {
|
|
|
+ CourseTargetTableBean2 courseTargetTableBean2 = new CourseTargetTableBean2("课程目标" + (i + 1), "考核目标" + (i + 1), new BigDecimal(i + 2), new BigDecimal(i + 3), new BigDecimal(i + 4), new BigDecimal(i + 5), new BigDecimal(i + 10));
|
|
|
+ bigDecimalExpressionSum = bigDecimalExpressionSum.add(courseTargetTableBean2.getExpression());
|
|
|
+ homeworkSum = homeworkSum.add(courseTargetTableBean2.getHomework());
|
|
|
+ testSum = testSum.add(courseTargetTableBean2.getTest());
|
|
|
+ examSum = examSum.add(courseTargetTableBean2.getExam());
|
|
|
+ targetSum2 = targetSum2.add(courseTargetTableBean2.getTargetSum());
|
|
|
+ courseTargetTableBean2List.add(courseTargetTableBean2);
|
|
|
+ }
|
|
|
+
|
|
|
+ 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();
|
|
|
+ }
|
|
|
+ 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();
|
|
|
+ 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(rowRenderData2.length - 1, 0), MergeCellRule.Grid.of(rowRenderData2.length - 1, 1)).
|
|
|
+ build();
|
|
|
+
|
|
|
+ Tables.TableBuilder tableBuilder2 = Tables.ofPercentWidth("100%");
|
|
|
+ for (int i = 0; i < rowRenderData2.length; i++) {
|
|
|
+ tableBuilder2.addRow(rowRenderData2[i]);
|
|
|
+ }
|
|
|
+ TableRenderData tableRenderData2 = tableBuilder2.mergeRule(mergeCellRule2).left().create();
|
|
|
+// TableRenderData tableRenderData2 = Tables.of(rowRenderData2).mergeRule(mergeCellRule2)
|
|
|
+// .width(17f, new double[]{17 / 6, 22 / 6, 15 / 6, 15 / 6, 15 / 6, 15 / 6, 17 / 6})
|
|
|
+// .left().create();
|
|
|
+ courseReportBean.setCourseTargetTable2(tableRenderData2);
|
|
|
+
|
|
|
+ //table3
|
|
|
+ RowRenderData header3_1 = Rows.of("序号", "项目", "考核内容及要求", "目标分值", "对应的课程目标").bgColor("F2F2F2").center().create();
|
|
|
+ List<CourseTargetTableBean3> courseTargetTableBean3List = new ArrayList<>();
|
|
|
+ BigDecimal targetSum3 = new BigDecimal(0);
|
|
|
+ String tableFootTitle3 = "合计${sum}分,占课程总评成绩的30%";
|
|
|
+ for (int i = 0; i < 2; i++) {
|
|
|
+ CourseTargetTableBean3 courseTargetTableBean3 = new CourseTargetTableBean3("" + (i + 1), "项目" + (i + 1), "内容" + (i + 1), new BigDecimal(i + 3), "目标分值" + (i + 1));
|
|
|
+ targetSum3 = targetSum3.add(courseTargetTableBean3.getTarget());
|
|
|
+ courseTargetTableBean3List.add(courseTargetTableBean3);
|
|
|
+ }
|
|
|
+ tableFootTitle3 = tableFootTitle3.replace("${sum}", targetSum3.toString());
|
|
|
+
|
|
|
+ RowRenderData[] rowRenderData3 = new RowRenderData[courseTargetTableBean3List.size() + 2];
|
|
|
+ for (int i = 0; i < courseTargetTableBean3List.size(); i++) {
|
|
|
+ CourseTargetTableBean3 courseTargetTableBean3 = courseTargetTableBean3List.get(i);
|
|
|
+ rowRenderData3[i + 1] = Rows.of(courseTargetTableBean3.getNum(), courseTargetTableBean3.getProject(), courseTargetTableBean3.getContent(), courseTargetTableBean3.getTarget().toString(), courseTargetTableBean3.getCourseTarget()).rowStyle(this.getRowStyle()).create();
|
|
|
+ }
|
|
|
+ rowRenderData3[0] = header3_1;
|
|
|
+ RowRenderData header3_foot = Rows.of(tableFootTitle3, "", "", "", "").center().create();
|
|
|
+ rowRenderData3[rowRenderData3.length - 1] = header3_foot;
|
|
|
+
|
|
|
+ // 表格合并,根据坐标
|
|
|
+ MergeCellRule mergeCellRule3 = MergeCellRule.builder().map(MergeCellRule.Grid.of(rowRenderData3.length - 1, 0), MergeCellRule.Grid.of(rowRenderData3.length - 1, 4)).
|
|
|
+ build();
|
|
|
+
|
|
|
+// TableRenderData tableRenderData3 = Tables.of(rowRenderData3).mergeRule(mergeCellRule3)
|
|
|
+// .width(17f, new double[]{10 / 6, 15 / 6, 24 / 6, 15 / 6, 20 / 6}).left().create();
|
|
|
+ Tables.TableBuilder tableBuilder3 = Tables.ofPercentWidth("100%");
|
|
|
+ for (int i = 0; i < rowRenderData3.length; i++) {
|
|
|
+ tableBuilder3.addRow(rowRenderData3[i]);
|
|
|
+ }
|
|
|
+ TableRenderData tableRenderData3 = tableBuilder3.mergeRule(mergeCellRule3).left().create();
|
|
|
+ courseReportBean.setCourseTargetTable3(tableRenderData3);
|
|
|
+
|
|
|
+ //table4
|
|
|
+ RowRenderData header4_1 = Rows.of("序号", "考核项目", "考核内容所涵盖的知识单元", "目标分值", "对应的课程目标").bgColor("F2F2F2").center().create();
|
|
|
+ List<CourseTargetTableBean4> courseTargetTableBean4List = new ArrayList<>();
|
|
|
+ BigDecimal targetSum4 = new BigDecimal(0);
|
|
|
+ String tableFootTitle4 = "合计${sum}分,占课程总评成绩的70%";
|
|
|
+ for (int i = 0; i < 2; i++) {
|
|
|
+ CourseTargetTableBean4 courseTargetTableBean4 = new CourseTargetTableBean4("" + (i + 1), "考核项目" + (i + 1), "考核内容" + (i + 1), new BigDecimal(i + 3), "考核目标分值" + (i + 1));
|
|
|
+ targetSum4 = targetSum4.add(courseTargetTableBean4.getTarget());
|
|
|
+ courseTargetTableBean4List.add(courseTargetTableBean4);
|
|
|
+ }
|
|
|
+ tableFootTitle4 = tableFootTitle4.replace("${sum}", targetSum4.toString());
|
|
|
+
|
|
|
+ RowRenderData[] rowRenderData4 = new RowRenderData[courseTargetTableBean4List.size() + 2];
|
|
|
+ for (int i = 0; i < courseTargetTableBean4List.size(); i++) {
|
|
|
+ CourseTargetTableBean4 courseTargetTableBean4 = courseTargetTableBean4List.get(i);
|
|
|
+ rowRenderData3[i + 1] = Rows.of(courseTargetTableBean4.getNum(), courseTargetTableBean4.getProject(), courseTargetTableBean4.getContent(), courseTargetTableBean4.getTarget().toString(), courseTargetTableBean4.getCourseTarget()).rowStyle(this.getRowStyle()).create();
|
|
|
+ }
|
|
|
+ rowRenderData3[0] = header4_1;
|
|
|
+ RowRenderData header4_foot = Rows.of(tableFootTitle4, "", "", "", "").center().create();
|
|
|
+ rowRenderData3[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();
|
|
|
+
|
|
|
+// TableRenderData tableRenderData4 = Tables.of(rowRenderData3).mergeRule(mergeCellRule4)
|
|
|
+// .width(17f, new double[]{10 / 6, 15 / 6, 24 / 6, 15 / 6, 20 / 6})
|
|
|
+// .left().create();
|
|
|
+ Tables.TableBuilder tableBuilder4 = Tables.ofPercentWidth("100%");
|
|
|
+ for (int i = 0; i < rowRenderData4.length; i++) {
|
|
|
+ tableBuilder4.addRow(rowRenderData3[i]);
|
|
|
+ }
|
|
|
+ TableRenderData tableRenderData4 = tableBuilder4.mergeRule(mergeCellRule4).left().create();
|
|
|
+ courseReportBean.setCourseTargetTable4(tableRenderData4);
|
|
|
+
|
|
|
+ //examstudent
|
|
|
+ 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 randomHomework = new Random().nextInt(20) + 1;//随机作业
|
|
|
+// int randomHomework = 10;
|
|
|
+ int targetSize = courseTargetMap.size();
|
|
|
+ for (int i = 0; i < 20; i++) {
|
|
|
+ LinkedMultiValueMap<String, Map<String, ExamStudentScoreBean>> scoreMap = new LinkedMultiValueMap<>();
|
|
|
+ int finalI = i;
|
|
|
+ courseTargetMap.forEach((k, v) -> {
|
|
|
+ if (finalI == 0) {
|
|
|
+ examStudent_cells_1.add(Cells.of("目标" + v.toString()).center().create());
|
|
|
+ }
|
|
|
+ for (int y = 0; y < randomHomework; y++) {
|
|
|
+ if (finalI == 0) {
|
|
|
+ examStudent_cells_1.add(Cells.of("").center().create());
|
|
|
+ examStudent_cells_2.add(Cells.of("作业" + v + "_" + (y + 1)).center().create());
|
|
|
+ }
|
|
|
+ scoreMap.add(k, Collections.singletonMap("作业" + v + "_" + (y + 1), new ExamStudentScoreBean(new BigDecimal(new Random().nextInt(100) + 1))));
|
|
|
+ }
|
|
|
+ scoreMap.add(k, Collections.singletonMap("期末考试", new ExamStudentScoreBean(new BigDecimal(new Random().nextInt(100) + 1))));
|
|
|
+ if (finalI == 0) {
|
|
|
+ examStudent_cells_2.add(Cells.of("期末考试").center().create());
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if (finalI == 0) {
|
|
|
+ examStudent_cells_1.add(Cells.of("综合成绩").center().create());
|
|
|
+ examStudent_cells_2.add(Cells.of("综合成绩").center().create());
|
|
|
+ }
|
|
|
+ examStudentTableBeanList.add(new ExamStudentTableBean(i + 1 + "", "2023000" + (i + 1), "测试考生" + (i + 1), "测试班级", scoreMap, new BigDecimal(new Random().nextInt(100) + 1)));
|
|
|
+ }
|
|
|
+
|
|
|
+ String title = "2023级启明大学";
|
|
|
+ String sumTitle = "学生共${sum}名";
|
|
|
+ sumTitle = sumTitle.replace("${sum}", examStudentTableBeanList.size() + "");
|
|
|
+
|
|
|
+ courseReportBean.setExamStudentTitle1(title + sumTitle);
|
|
|
+ courseReportBean.setExamStudentTitle2(title + "《" + courseReportBean.getCourseBasicBean().getCourseName() + "》");
|
|
|
+
|
|
|
+ RowRenderData[] rowRenderDataExamStudent = new RowRenderData[examStudentTableBeanList.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()).create());
|
|
|
+ examStudent_cells.add(Cells.of(e.getExamNumber()).create());
|
|
|
+ examStudent_cells.add(Cells.of(e.getName()).create());
|
|
|
+ examStudent_cells.add(Cells.of(e.getClazz()).create());
|
|
|
+
|
|
|
+ String key = null;
|
|
|
+ LinkedMultiValueMap<String, Map<String, ExamStudentScoreBean>> map = e.getMap();
|
|
|
+ for (Map.Entry<String, 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(entry1.getValue().getScore());
|
|
|
+ entry1.getValue().setAllScore(new BigDecimal(new Random().nextInt(10) + 1));
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (i == examStudentTableBeanList.size() - 1) {
|
|
|
+ LinkedMultiValueMap<String, Map<String, ExamStudentScoreBean>> map1 = e.getMap();
|
|
|
+ for (Map.Entry<String, 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)));
|
|
|
+
|
|
|
+ //动态扩展列
|
|
|
+ int initNum = 4;
|
|
|
+ for (int i = 0; i < targetSize; i++) {
|
|
|
+ mergeCellRuleExamStudent.getMapping().add(new MergeCellRule.GridRule(MergeCellRule.Grid.of(0, initNum), MergeCellRule.Grid.of(0, initNum + randomHomework)));
|
|
|
+ mergeCellRuleExamStudent.getMapping().add(new MergeCellRule.GridRule(MergeCellRule.Grid.of(rowRenderDataExamStudent.length - 1, initNum), MergeCellRule.Grid.of(rowRenderDataExamStudent.length - 1, initNum + randomHomework)));
|
|
|
+ initNum = initNum + randomHomework + 1;
|
|
|
+ }
|
|
|
+ mergeCellRuleExamStudent.getMapping().add(new MergeCellRule.GridRule(MergeCellRule.Grid.of(0, initNum), MergeCellRule.Grid.of(1, initNum)));
|
|
|
+
|
|
|
+ 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");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取行样式
|
|
|
+ *
|
|
|
+ * @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;
|
|
|
}
|
|
|
}
|