Browse Source

测试报告

wangliang 1 year ago
parent
commit
f5a7d50f14

+ 0 - 75
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/FinalScoreDimensionOverviewDto.java

@@ -1,75 +0,0 @@
-package com.qmth.distributed.print.business.bean.dto.report;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModelProperty;
-
-import java.io.Serializable;
-
-/**
- * @Description: 期末成绩知识点分数图dto
- * @Param:
- * @return:
- * @Author: wangliang
- * @Date: 2024/2/26
- */
-@JsonInclude(JsonInclude.Include.NON_NULL)
-public class FinalScoreDimensionOverviewDto implements Serializable {
-
-    @JsonSerialize(using = ToStringSerializer.class)
-    @ApiModelProperty(value = "知识点id")
-    private Long dimensionId;
-
-    @ApiModelProperty(value = "最高分")
-    private Double maxScore;
-
-    @ApiModelProperty(value = "最低分")
-    private Double minScore;
-
-    @ApiModelProperty(value = "平均分")
-    private Double avgScore;
-
-    public FinalScoreDimensionOverviewDto() {
-
-    }
-
-    public FinalScoreDimensionOverviewDto(Long dimensionId, Double maxScore, Double minScore, Double avgScore) {
-        this.dimensionId = dimensionId;
-        this.maxScore = maxScore;
-        this.minScore = minScore;
-        this.avgScore = avgScore;
-    }
-
-    public Long getDimensionId() {
-        return dimensionId;
-    }
-
-    public void setDimensionId(Long dimensionId) {
-        this.dimensionId = dimensionId;
-    }
-
-    public Double getMaxScore() {
-        return maxScore;
-    }
-
-    public void setMaxScore(Double maxScore) {
-        this.maxScore = maxScore;
-    }
-
-    public Double getMinScore() {
-        return minScore;
-    }
-
-    public void setMinScore(Double minScore) {
-        this.minScore = minScore;
-    }
-
-    public Double getAvgScore() {
-        return avgScore;
-    }
-
-    public void setAvgScore(Double avgScore) {
-        this.avgScore = avgScore;
-    }
-}

+ 0 - 101
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/FinalScoreOverviewDto.java

@@ -1,101 +0,0 @@
-package com.qmth.distributed.print.business.bean.dto.report;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import io.swagger.annotations.ApiModelProperty;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-
-/**
- * @Description: 期末成绩分数图dto
- * @Param:
- * @return:
- * @Author: wangliang
- * @Date: 2024/2/26
- */
-@JsonInclude(JsonInclude.Include.NON_NULL)
-public class FinalScoreOverviewDto implements Serializable {
-
-    @JsonSerialize(using = ToStringSerializer.class)
-    @ApiModelProperty(value = "目标id")
-    private Long targetId;
-
-    @JsonSerialize(using = ToStringSerializer.class)
-    @ApiModelProperty(value = "评价方式id")
-    private Long evaluationId;
-
-    @ApiModelProperty(value = "评价方式")
-    private String evaluation;
-
-    @ApiModelProperty(value = "评价方式描述")
-    private String evaluationDesc;
-
-    @ApiModelProperty(value = "目标分")
-    private Double targetScore;
-
-    @ApiModelProperty(value = "目标权重")
-    private BigDecimal targetWeight;
-
-    public FinalScoreOverviewDto() {
-
-    }
-
-    public FinalScoreOverviewDto(Long targetId, Long evaluationId, String evaluation, String evaluationDesc, Double targetScore, BigDecimal targetWeight) {
-        this.targetId = targetId;
-        this.evaluationId = evaluationId;
-        this.evaluation = evaluation;
-        this.evaluationDesc = evaluationDesc;
-        this.targetScore = targetScore;
-        this.targetWeight = targetWeight;
-    }
-
-    public Long getTargetId() {
-        return targetId;
-    }
-
-    public void setTargetId(Long targetId) {
-        this.targetId = targetId;
-    }
-
-    public Long getEvaluationId() {
-        return evaluationId;
-    }
-
-    public void setEvaluationId(Long evaluationId) {
-        this.evaluationId = evaluationId;
-    }
-
-    public String getEvaluation() {
-        return evaluation;
-    }
-
-    public void setEvaluation(String evaluation) {
-        this.evaluation = evaluation;
-    }
-
-    public String getEvaluationDesc() {
-        return evaluationDesc;
-    }
-
-    public void setEvaluationDesc(String evaluationDesc) {
-        this.evaluationDesc = evaluationDesc;
-    }
-
-    public Double getTargetScore() {
-        return targetScore;
-    }
-
-    public void setTargetScore(Double targetScore) {
-        this.targetScore = targetScore;
-    }
-
-    public BigDecimal getTargetWeight() {
-        return targetWeight;
-    }
-
-    public void setTargetWeight(BigDecimal targetWeight) {
-        this.targetWeight = targetWeight;
-    }
-}

+ 24 - 26
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TRBasicInfoServiceImpl.java

@@ -41,6 +41,7 @@ import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.text.DecimalFormat;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Function;
@@ -75,6 +76,8 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
     @Resource
     CourseWeightService courseWeightService;
 
+    protected final static DecimalFormat df = new DecimalFormat("0.##");
+
     /**
      * 获取课程目标考核分布-分数图
      *
@@ -472,13 +475,13 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                 }
                 if (reportEvaluationDtoMap.containsKey(key)) {
                     BigDecimal targetScore = reportEvaluationDtoMap.get(key).getTargetScore();
-                    rowData.add(targetScore.toString());
+                    rowData.add(df.format(targetScore));
                     sumScore = sumScore.add(targetScore);
                 } else {
                     rowData.add("0");
                 }
             }
-            rowData.add(sumScore.toString());
+            rowData.add(df.format(sumScore));
             targetSum = targetSum.add(sumScore);
             rowRenderData2SumMap.put("目标分值统计", targetSum);
             rowRenderData2[i + 2] = Rows.of(rowData.toArray(new String[header2_2List.size()])).rowStyle(this.getRowStyle()).create();
@@ -490,7 +493,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         header2FootList.add("合计");
         header2FootList.add("");
         for (int y = 2; y < header2_2List.size(); y++) {
-            header2FootList.add(rowRenderData2SumMap.get(header2_2List.get(y)).toString());
+            header2FootList.add(df.format(rowRenderData2SumMap.get(header2_2List.get(y))));
         }
 
         RowRenderData header2_foot = Rows.of(header2FootList.toArray(new String[header2_2List.size()])).rowStyle(this.getRowStyle()).create();
@@ -536,13 +539,13 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
             usualScoreTargetSumWeight3 = usualScoreTargetSumWeight3.add(usualScoreWordDto.getUsualScoreTargetSumWeight());
         }
         usualScoreTargetSumWeight3 = usualScoreTargetSumWeight3.divide(new BigDecimal(courseTargetWordDtoList.size()), 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
-        tableFootTitle3 = tableFootTitle3.replace("${usualScoreSum}", usualScoreSum3.toString());
-        tableFootTitle3 = tableFootTitle3.replace("${usualScoreSumWeight}", usualScoreTargetSumWeight3.toString());
+        tableFootTitle3 = tableFootTitle3.replace("${usualScoreSum}", df.format(usualScoreSum3));
+        tableFootTitle3 = tableFootTitle3.replace("${usualScoreSumWeight}", df.format(usualScoreTargetSumWeight3));
 
         RowRenderData[] rowRenderData3 = new RowRenderData[courseTargetTableBean3List.size() + 2];
         for (int i = 0; i < courseTargetTableBean3List.size(); i++) {
             CourseTargetTableBean3 courseTargetTableBean3 = courseTargetTableBean3List.get(i);
-            rowRenderData3[i + 1] = Rows.of(courseTargetTableBean3.getNum().toString(), courseTargetTableBean3.getProject(), courseTargetTableBean3.getContent(), courseTargetTableBean3.getTarget().toString(), courseTargetTableBean3.getCourseTarget()).rowStyle(this.getRowStyle()).create();
+            rowRenderData3[i + 1] = Rows.of(courseTargetTableBean3.getNum().toString(), courseTargetTableBean3.getProject(), courseTargetTableBean3.getContent(), df.format(courseTargetTableBean3.getTarget()), courseTargetTableBean3.getCourseTarget()).rowStyle(this.getRowStyle()).create();
         }
         rowRenderData3[0] = header3_1;
         RowRenderData header3_foot = Rows.of(tableFootTitle3, "", "", "", "").center().create();
@@ -584,13 +587,13 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         }
         finalScoreTargetSumWeight4 = finalScoreTargetSumWeight4.divide(new BigDecimal(courseTargetWordDtoList.size()), 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
         String tableFootTitle4 = "合计${dimensionScoreSum}分,占课程总评成绩的${dimensionSumWeight}%";
-        tableFootTitle4 = tableFootTitle4.replace("${dimensionScoreSum}", finalScoreSum4.toString());
-        tableFootTitle4 = tableFootTitle4.replace("${dimensionSumWeight}", finalScoreTargetSumWeight4.toString());
+        tableFootTitle4 = tableFootTitle4.replace("${dimensionScoreSum}", df.format(finalScoreSum4));
+        tableFootTitle4 = tableFootTitle4.replace("${dimensionSumWeight}", df.format(finalScoreTargetSumWeight4));
 
         RowRenderData[] rowRenderData4 = new RowRenderData[courseTargetTableBean4List.size() + 2];
         for (int i = 0; i < courseTargetTableBean4List.size(); i++) {
             CourseTargetTableBean4 courseTargetTableBean4 = courseTargetTableBean4List.get(i);
-            rowRenderData4[i + 1] = Rows.of(courseTargetTableBean4.getNum().toString(), courseTargetTableBean4.getProject(), courseTargetTableBean4.getContent(), courseTargetTableBean4.getTargetScore().toString(), courseTargetTableBean4.getCourseTarget()).rowStyle(this.getRowStyle()).create();
+            rowRenderData4[i + 1] = Rows.of(courseTargetTableBean4.getNum().toString(), courseTargetTableBean4.getProject(), courseTargetTableBean4.getContent(), df.format(courseTargetTableBean4.getTargetScore()), courseTargetTableBean4.getCourseTarget()).rowStyle(this.getRowStyle()).create();
         }
         rowRenderData4[0] = header4_1;
         RowRenderData header4_foot = Rows.of(tableFootTitle4, "", "", "", "").center().create();
@@ -650,13 +653,8 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                     //平常作业
                     if (Objects.nonNull(reportExamStudentUsualScoreDto) && !CollectionUtils.isEmpty(reportExamStudentUsualScoreDto.getScoreList())) {
                         List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = reportExamStudentUsualScoreDto.getScoreList();
+                        targetUsualScoreSizeMap.put(reportExamStudentTargetDto.getTargetId(), reportExamStudentUsualScoreObjDtoList.size());
                         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());
                         }
@@ -711,18 +709,18 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                                 for (ReportExamStudentUsualScoreObjDto reportExamStudentUsualScoreObjDto : reportExamStudentUsualScoreObjDtoList) {
                                     switch (trExamStudent.getName()) {
                                         case "目标分":
-                                            examStudent_cells.add(Cells.of(reportExamStudentUsualScoreObjDto.getTargetScore().toString()).create());
+                                            examStudent_cells.add(Cells.of(df.format(reportExamStudentUsualScoreObjDto.getTargetScore())).create());
                                             targetSumScore = targetSumScore.add(reportExamStudentUsualScoreObjDto.getTargetScore());
                                             break;
                                         case "平均分":
-                                            examStudent_cells.add(Cells.of(reportExamStudentUsualScoreObjDto.getMatrixAvgScore().toString()).create());
+                                            examStudent_cells.add(Cells.of(df.format(reportExamStudentUsualScoreObjDto.getMatrixAvgScore())).create());
                                             targetAvgScore = targetAvgScore.add(new BigDecimal(reportExamStudentUsualScoreObjDto.getMatrixAvgScore()));
                                             break;
                                         case "各课程目标平均分":
-                                            examStudent_cells.add(Cells.of(reportExamStudentTargetDto.getTargetMatrixAvgScore().toString()).create());
+                                            examStudent_cells.add(Cells.of(df.format(reportExamStudentTargetDto.getTargetMatrixAvgScore())).create());
                                             break;
                                         default:
-                                            examStudent_cells.add(Cells.of(reportExamStudentUsualScoreObjDto.getScore().toString()).create());
+                                            examStudent_cells.add(Cells.of(df.format(reportExamStudentUsualScoreObjDto.getScore())).create());
                                             break;
                                     }
                                 }
@@ -732,18 +730,18 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                             if (Objects.nonNull(reportExamStudentFinalScoreDto) && !CollectionUtils.isEmpty(reportExamStudentFinalScoreDto.getDimensionList())) {
                                 switch (trExamStudent.getName()) {
                                     case "目标分":
-                                        examStudent_cells.add(Cells.of(reportExamStudentFinalScoreDto.getTargetScore().toString()).create());
+                                        examStudent_cells.add(Cells.of(df.format(reportExamStudentFinalScoreDto.getTargetScore())).create());
                                         targetSumScore = targetSumScore.add(reportExamStudentFinalScoreDto.getTargetScore());
                                         break;
                                     case "平均分":
-                                        examStudent_cells.add(Cells.of(reportExamStudentFinalScoreDto.getTargetMatrixSumScore().toString()).create());
+                                        examStudent_cells.add(Cells.of(df.format(reportExamStudentFinalScoreDto.getTargetMatrixSumScore())).create());
                                         targetAvgScore = targetAvgScore.add(new BigDecimal(reportExamStudentFinalScoreDto.getTargetMatrixSumScore()));
                                         break;
                                     case "各课程目标平均分":
-                                        examStudent_cells.add(Cells.of(reportExamStudentTargetDto.getTargetMatrixAvgScore().toString()).create());
+                                        examStudent_cells.add(Cells.of(df.format(reportExamStudentTargetDto.getTargetMatrixAvgScore())).create());
                                         break;
                                     default:
-                                        examStudent_cells.add(Cells.of(reportExamStudentFinalScoreDto.getTargetMatrixSumScore().toString()).create());
+                                        examStudent_cells.add(Cells.of(df.format(reportExamStudentFinalScoreDto.getTargetMatrixSumScore())).create());
                                         break;
                                 }
                             }
@@ -752,16 +750,16 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                 }
                 switch (trExamStudent.getName()) {
                     case "目标分":
-                        examStudent_cells.add(Cells.of(targetSumScore.setScale(2, BigDecimal.ROUND_HALF_UP).toString()).create());
+                        examStudent_cells.add(Cells.of(df.format(targetSumScore.setScale(2, BigDecimal.ROUND_HALF_UP))).create());
                         break;
                     case "平均分":
-                        examStudent_cells.add(Cells.of(targetAvgScore.setScale(2, BigDecimal.ROUND_HALF_UP).toString()).create());
+                        examStudent_cells.add(Cells.of(df.format(targetAvgScore.setScale(2, BigDecimal.ROUND_HALF_UP))).create());
                         break;
                     case "各课程目标平均分":
                         examStudent_cells.add(Cells.of("").create());
                         break;
                     default:
-                        examStudent_cells.add(Cells.of(trExamStudent.getScore().toString()).create());
+                        examStudent_cells.add(Cells.of(df.format(trExamStudent.getScore())).create());
                         break;
                 }
                 examStudent_row.setCells(examStudent_cells);

+ 16 - 13
distributed-print/src/main/java/com/qmth/distributed/print/api/TRBasicInfoController.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.deepoove.poi.XWPFTemplate;
 import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.boot.api.exception.ApiException;
 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;
@@ -20,15 +21,12 @@ import com.qmth.distributed.print.business.service.TRExamStudentService;
 import com.qmth.teachcloud.common.annotation.OperationLogDetail;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;
-import com.qmth.teachcloud.common.enums.ImportTemplateEnum;
 import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
-import com.qmth.teachcloud.common.util.FileUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
 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.commons.io.FileUtils;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.validation.BindingResult;
@@ -39,9 +37,7 @@ import javax.validation.Valid;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
-import java.io.InputStream;
 import java.util.*;
 
 /**
@@ -191,15 +187,22 @@ public class TRBasicInfoController {
             //examstudent-课程目标达成评价依据-考生
             courseReportBean.setExamStudentTable1(trBasicInfoService.buildWordTable5(trBasicInfo, courseReportBean));
 
-            InputStream inputStream = FileUtil.getStream("static/" + ImportTemplateEnum.STATIC_COURSE_DEGREE_REPORT.getTemplateName());
-            txtFileTemp = SystemConstant.getFileTempVar(SystemConstant.WORD_PREFIX);
-            FileUtils.copyInputStreamToFile(inputStream, txtFileTemp);
-            XWPFTemplate template = XWPFTemplate.compile(txtFileTemp.getAbsolutePath()).render(courseReportBean);
-            template.writeToFile(txtFileTemp.getAbsolutePath());
-            // 导出
-            FileUtil.outputFile(ServletUtil.getResponse(), new FileInputStream(txtFileTemp), ImportTemplateEnum.STATIC_COURSE_DEGREE_REPORT.getFileName() + "_" + courseReportBean.getTitle1() + SystemConstant.WORD_PREFIX);
+//            InputStream inputStream = FileUtil.getStream("static/" + ImportTemplateEnum.STATIC_COURSE_DEGREE_REPORT.getTemplateName());
+//            txtFileTemp = SystemConstant.getFileTempVar(SystemConstant.WORD_PREFIX);
+//            FileUtils.copyInputStreamToFile(inputStream, txtFileTemp);
+//            XWPFTemplate template = XWPFTemplate.compile(txtFileTemp.getAbsolutePath()).render(courseReportBean);
+//            template.writeToFile(txtFileTemp.getAbsolutePath());
+//            // 导出
+//            FileUtil.outputFile(ServletUtil.getResponse(), new FileInputStream(txtFileTemp), ImportTemplateEnum.STATIC_COURSE_DEGREE_REPORT.getFileName() + "_" + courseReportBean.getTitle1() + SystemConstant.WORD_PREFIX);
+
+            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");
         } catch (Exception e) {
-            e.printStackTrace();
+            if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, ((ApiException) e).getCode(), e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
         } finally {
             if (Objects.nonNull(txtFileTemp)) {
                 txtFileTemp.delete();