Jelajahi Sumber

新增报告bean

wangliang 1 tahun lalu
induk
melakukan
e6d1c2ed28
22 mengubah file dengan 1301 tambahan dan 8 penghapusan
  1. 110 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/CourseTargetDto.java
  2. 64 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/DimensionDto.java
  3. 64 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportCommonDto.java
  4. 151 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportCourseBasicInfoDto.java
  5. 40 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportCourseEvaluationResultDetailDto.java
  6. 62 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportCourseEvaluationResultDto.java
  7. 41 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportCourseEvaluationSpreadDto.java
  8. 65 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportCourseTargetViewDto.java
  9. 62 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportEvaluationDto.java
  10. 73 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportExamStudentDto.java
  11. 40 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportExamStudentFinalScoreDto.java
  12. 64 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportExamStudentTargetDto.java
  13. 40 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportExamStudentUsualScoreDto.java
  14. 39 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportExamStudentUsualScoreObjDto.java
  15. 61 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportScoreRangeViewDto.java
  16. 51 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportScoreViewDto.java
  17. 132 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/report/PaperStructResult.java
  18. 74 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/report/ReportResult.java
  19. 27 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TRBasicInfo.java
  20. 6 1
      distributed-print/install/mysql/upgrade/3.3.1.sql
  21. 14 3
      distributed-print/src/main/java/com/qmth/distributed/print/api/TCFinalScoreController.java
  22. 21 4
      distributed-print/src/main/java/com/qmth/distributed/print/api/TRBasicInfoController.java

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

@@ -0,0 +1,110 @@
+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.util.List;
+
+/**
+ * @Description: 课程目标dto
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2024/2/26
+ */
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class CourseTargetDto implements Serializable {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "课程目标id")
+    private Long targetId;
+
+    @ApiModelProperty(value = "课程目标名称")
+    private String targetName;
+
+    @ApiModelProperty(value = "毕业要求")
+    private String graduationRequirement;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "评价方式id")
+    private Long evaluationId;
+
+    @ApiModelProperty(value = "评价方式")
+    private String evaluation;
+
+    @ApiModelProperty(value = "评价方式描述")
+    private String evaluationDesc;
+
+    @ApiModelProperty(value = "知识点集合")
+    private List<DimensionDto> dimensionList;
+
+    @ApiModelProperty(value = "评价方式集合")
+    private List<ReportEvaluationDto> evaluationList;
+
+    public List<ReportEvaluationDto> getEvaluationList() {
+        return evaluationList;
+    }
+
+    public void setEvaluationList(List<ReportEvaluationDto> evaluationList) {
+        this.evaluationList = evaluationList;
+    }
+
+    public List<DimensionDto> getDimensionList() {
+        return dimensionList;
+    }
+
+    public void setDimensionList(List<DimensionDto> dimensionList) {
+        this.dimensionList = dimensionList;
+    }
+
+    public Long getTargetId() {
+        return targetId;
+    }
+
+    public void setTargetId(Long targetId) {
+        this.targetId = targetId;
+    }
+
+    public String getTargetName() {
+        return targetName;
+    }
+
+    public void setTargetName(String targetName) {
+        this.targetName = targetName;
+    }
+
+    public String getGraduationRequirement() {
+        return graduationRequirement;
+    }
+
+    public void setGraduationRequirement(String graduationRequirement) {
+        this.graduationRequirement = graduationRequirement;
+    }
+
+    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;
+    }
+}

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

@@ -0,0 +1,64 @@
+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 DimensionDto implements Serializable {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "知识点id")
+    private Long dimensionId;
+
+    @ApiModelProperty(value = "知识点编码")
+    private String dimensionCode;
+
+    @ApiModelProperty(value = "知识点名称")
+    private String dimensionName;
+
+    @ApiModelProperty(value = "知识点分数")
+    private Double dimensionScore;
+
+    public Long getDimensionId() {
+        return dimensionId;
+    }
+
+    public void setDimensionId(Long dimensionId) {
+        this.dimensionId = dimensionId;
+    }
+
+    public String getDimensionCode() {
+        return dimensionCode;
+    }
+
+    public void setDimensionCode(String dimensionCode) {
+        this.dimensionCode = dimensionCode;
+    }
+
+    public String getDimensionName() {
+        return dimensionName;
+    }
+
+    public void setDimensionName(String dimensionName) {
+        this.dimensionName = dimensionName;
+    }
+
+    public Double getDimensionScore() {
+        return dimensionScore;
+    }
+
+    public void setDimensionScore(Double dimensionScore) {
+        this.dimensionScore = dimensionScore;
+    }
+}

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

@@ -0,0 +1,64 @@
+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 ReportCommonDto implements Serializable {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "考试id")
+    private Long examId;
+
+    @ApiModelProperty(value = "课程编码")
+    private String courseCode;
+
+    @ApiModelProperty(value = "课程名称")
+    private String couserName;
+
+    @ApiModelProperty(value = "试卷编码")
+    private String paperNumber;
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    public String getCourseCode() {
+        return courseCode;
+    }
+
+    public void setCourseCode(String courseCode) {
+        this.courseCode = courseCode;
+    }
+
+    public String getCouserName() {
+        return couserName;
+    }
+
+    public void setCouserName(String couserName) {
+        this.couserName = couserName;
+    }
+
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+}

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

@@ -0,0 +1,151 @@
+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 ReportCourseBasicInfoDto implements Serializable {
+
+    @ApiModelProperty(value = "课程性质")
+    private String courseType;
+
+    @ApiModelProperty(value = "学分")
+    private String credit;
+
+    @ApiModelProperty(value = "学时")
+    private String period;
+
+    @ApiModelProperty(value = "考核方式")
+    private String evaluationMode;
+
+    @ApiModelProperty(value = "开课时间")
+    private String openTime;
+
+    @ApiModelProperty(value = "授课对象")
+    private String teachingObject;
+
+    @ApiModelProperty(value = "选课人数")
+    private Integer selectionCount;
+
+    @ApiModelProperty(value = "参评人数")
+    private Integer participantCount;
+
+    @ApiModelProperty(value = "课程目标达成度期望值")
+    private Double courseDegree;
+
+    @ApiModelProperty(value = "任课老师")
+    private String teacher;
+
+    @ApiModelProperty(value = "评价责任人")
+    private String director;
+
+    @ApiModelProperty(value = "评价参与人")
+    private String participant;
+
+    public String getCredit() {
+        return credit;
+    }
+
+    public void setCredit(String credit) {
+        this.credit = credit;
+    }
+
+    public String getPeriod() {
+        return period;
+    }
+
+    public void setPeriod(String period) {
+        this.period = period;
+    }
+
+    public String getCourseType() {
+        return courseType;
+    }
+
+    public void setCourseType(String courseType) {
+        this.courseType = courseType;
+    }
+
+    public String getEvaluationMode() {
+        return evaluationMode;
+    }
+
+    public void setEvaluationMode(String evaluationMode) {
+        this.evaluationMode = evaluationMode;
+    }
+
+    public String getOpenTime() {
+        return openTime;
+    }
+
+    public void setOpenTime(String openTime) {
+        this.openTime = openTime;
+    }
+
+    public String getTeachingObject() {
+        return teachingObject;
+    }
+
+    public void setTeachingObject(String teachingObject) {
+        this.teachingObject = teachingObject;
+    }
+
+    public Integer getSelectionCount() {
+        return selectionCount;
+    }
+
+    public void setSelectionCount(Integer selectionCount) {
+        this.selectionCount = selectionCount;
+    }
+
+    public Integer getParticipantCount() {
+        return participantCount;
+    }
+
+    public void setParticipantCount(Integer participantCount) {
+        this.participantCount = participantCount;
+    }
+
+    public Double getCourseDegree() {
+        return courseDegree;
+    }
+
+    public void setCourseDegree(Double courseDegree) {
+        this.courseDegree = courseDegree;
+    }
+
+    public String getTeacher() {
+        return teacher;
+    }
+
+    public void setTeacher(String teacher) {
+        this.teacher = teacher;
+    }
+
+    public String getDirector() {
+        return director;
+    }
+
+    public void setDirector(String director) {
+        this.director = director;
+    }
+
+    public String getParticipant() {
+        return participant;
+    }
+
+    public void setParticipant(String participant) {
+        this.participant = participant;
+    }
+}

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

@@ -0,0 +1,40 @@
+package com.qmth.distributed.print.business.bean.dto.report;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description: 报告课程考核成绩评价明细结果dto
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2024/2/26
+ */
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class ReportCourseEvaluationResultDetailDto implements Serializable {
+
+    @ApiModelProperty(value = "考生集合")
+    private List<ReportExamStudentDto> examStudentList;
+
+    @ApiModelProperty(value = "课程目标达成评价值图")
+    private List<ReportCourseTargetViewDto> courseTargetList;
+
+    public List<ReportExamStudentDto> getExamStudentList() {
+        return examStudentList;
+    }
+
+    public void setExamStudentList(List<ReportExamStudentDto> examStudentList) {
+        this.examStudentList = examStudentList;
+    }
+
+    public List<ReportCourseTargetViewDto> getCourseTargetList() {
+        return courseTargetList;
+    }
+
+    public void setCourseTargetList(List<ReportCourseTargetViewDto> courseTargetList) {
+        this.courseTargetList = courseTargetList;
+    }
+}

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

@@ -0,0 +1,62 @@
+package com.qmth.distributed.print.business.bean.dto.report;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description: 报告课程考核成绩评价结果dto
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2024/2/26
+ */
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class ReportCourseEvaluationResultDto implements Serializable {
+
+    @ApiModelProperty(value = "课程总目标")
+    private String target;
+
+    @ApiModelProperty(value = "课程目标达成评价值")
+    private String targetValue;
+
+    @ApiModelProperty(value = "目标达成评价值")
+    private String evaluationValue;
+
+    @ApiModelProperty(value = "课程目标集合")
+    private List<CourseTargetDto> targetList;
+
+    public String getTarget() {
+        return target;
+    }
+
+    public void setTarget(String target) {
+        this.target = target;
+    }
+
+    public String getTargetValue() {
+        return targetValue;
+    }
+
+    public void setTargetValue(String targetValue) {
+        this.targetValue = targetValue;
+    }
+
+    public String getEvaluationValue() {
+        return evaluationValue;
+    }
+
+    public void setEvaluationValue(String evaluationValue) {
+        this.evaluationValue = evaluationValue;
+    }
+
+    public List<CourseTargetDto> getTargetList() {
+        return targetList;
+    }
+
+    public void setTargetList(List<CourseTargetDto> targetList) {
+        this.targetList = targetList;
+    }
+}

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

@@ -0,0 +1,41 @@
+package com.qmth.distributed.print.business.bean.dto.report;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.qmth.distributed.print.business.bean.result.report.PaperStructResult;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description: 报告课程目标考核分布dto
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2024/2/26
+ */
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class ReportCourseEvaluationSpreadDto implements Serializable {
+
+    @ApiModelProperty(value = "题目信息集合")
+    private List<PaperStructResult> questionInfo;
+
+    @ApiModelProperty(value = "分数图")
+    private List<ReportScoreViewDto> scoreList;
+
+    public List<PaperStructResult> getQuestionInfo() {
+        return questionInfo;
+    }
+
+    public void setQuestionInfo(List<PaperStructResult> questionInfo) {
+        this.questionInfo = questionInfo;
+    }
+
+    public List<ReportScoreViewDto> getScoreList() {
+        return scoreList;
+    }
+
+    public void setScoreList(List<ReportScoreViewDto> scoreList) {
+        this.scoreList = scoreList;
+    }
+}

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

@@ -0,0 +1,65 @@
+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.util.List;
+
+/**
+ * @Description: 报告课程考核成绩评价明细结果dto
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2024/2/26
+ */
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class ReportCourseTargetViewDto implements Serializable {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "课程目标id")
+    private Long targetId;
+
+    @ApiModelProperty(value = "课程目标名称")
+    private String targetName;
+
+    @ApiModelProperty(value = "平时成绩")
+    private Double usualScore;
+
+    @ApiModelProperty(value = "期末成绩")
+    private Double finalScore;
+
+    public Long getTargetId() {
+        return targetId;
+    }
+
+    public void setTargetId(Long targetId) {
+        this.targetId = targetId;
+    }
+
+    public String getTargetName() {
+        return targetName;
+    }
+
+    public void setTargetName(String targetName) {
+        this.targetName = targetName;
+    }
+
+    public Double getUsualScore() {
+        return usualScore;
+    }
+
+    public void setUsualScore(Double usualScore) {
+        this.usualScore = usualScore;
+    }
+
+    public Double getFinalScore() {
+        return finalScore;
+    }
+
+    public void setFinalScore(Double finalScore) {
+        this.finalScore = finalScore;
+    }
+}

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

@@ -0,0 +1,62 @@
+package com.qmth.distributed.print.business.bean.dto.report;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description: 报告评价方式dto
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2024/2/26
+ */
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class ReportEvaluationDto implements Serializable {
+
+    @ApiModelProperty(value = "名称")
+    private String name;
+
+    @ApiModelProperty(value = "权重")
+    private String weight;
+
+    @ApiModelProperty(value = "目标分值")
+    private Double score;
+
+    @ApiModelProperty(value = "实际平均分")
+    private Double avg;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getWeight() {
+        return weight;
+    }
+
+    public void setWeight(String weight) {
+        this.weight = weight;
+    }
+
+    public Double getScore() {
+        return score;
+    }
+
+    public void setScore(Double score) {
+        this.score = score;
+    }
+
+    public Double getAvg() {
+        return avg;
+    }
+
+    public void setAvg(Double avg) {
+        this.avg = avg;
+    }
+}

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

@@ -0,0 +1,73 @@
+package com.qmth.distributed.print.business.bean.dto.report;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description: 报告课程考核成绩评价明细结果-考生dto
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2024/2/26
+ */
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class ReportExamStudentDto implements Serializable {
+
+    @ApiModelProperty(value = "考生姓名")
+    private String name;
+
+    @ApiModelProperty(value = "学号")
+    private String studentCode;
+
+    @ApiModelProperty(value = "行政班级")
+    private String administrativeClass;
+
+    @ApiModelProperty(value = "成绩")
+    private Double score;
+
+    @ApiModelProperty(value = "课程目标集合")
+    private List<ReportExamStudentTargetDto> targetList;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    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 getScore() {
+        return score;
+    }
+
+    public void setScore(Double score) {
+        this.score = score;
+    }
+
+    public List<ReportExamStudentTargetDto> getTargetList() {
+        return targetList;
+    }
+
+    public void setTargetList(List<ReportExamStudentTargetDto> targetList) {
+        this.targetList = targetList;
+    }
+}

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

@@ -0,0 +1,40 @@
+package com.qmth.distributed.print.business.bean.dto.report;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description: 报告课程考核成绩评价明细结果-考生-期末成绩dto
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2024/2/26
+ */
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class ReportExamStudentFinalScoreDto implements Serializable {
+
+    @ApiModelProperty(value = "权重")
+    private String weight;
+
+    @ApiModelProperty(value = "课程目标集合")
+    private List<DimensionDto> dimensionList;
+
+    public String getWeight() {
+        return weight;
+    }
+
+    public void setWeight(String weight) {
+        this.weight = weight;
+    }
+
+    public List<DimensionDto> getDimensionList() {
+        return dimensionList;
+    }
+
+    public void setDimensionList(List<DimensionDto> dimensionList) {
+        this.dimensionList = dimensionList;
+    }
+}

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

@@ -0,0 +1,64 @@
+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 ReportExamStudentTargetDto implements Serializable {
+
+    @ApiModelProperty(value = "课程目标id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long targetId;
+
+    @ApiModelProperty(value = "课程目标名称")
+    private String targetName;
+
+    @ApiModelProperty(value = "期末成绩")
+    private ReportExamStudentFinalScoreDto finalScore;
+
+    @ApiModelProperty(value = "平时成绩")
+    private ReportExamStudentUsualScoreDto usualScore;
+
+    public Long getTargetId() {
+        return targetId;
+    }
+
+    public void setTargetId(Long targetId) {
+        this.targetId = targetId;
+    }
+
+    public String getTargetName() {
+        return targetName;
+    }
+
+    public void setTargetName(String targetName) {
+        this.targetName = targetName;
+    }
+
+    public ReportExamStudentFinalScoreDto getFinalScore() {
+        return finalScore;
+    }
+
+    public void setFinalScore(ReportExamStudentFinalScoreDto finalScore) {
+        this.finalScore = finalScore;
+    }
+
+    public ReportExamStudentUsualScoreDto getUsualScore() {
+        return usualScore;
+    }
+
+    public void setUsualScore(ReportExamStudentUsualScoreDto usualScore) {
+        this.usualScore = usualScore;
+    }
+}

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

@@ -0,0 +1,40 @@
+package com.qmth.distributed.print.business.bean.dto.report;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description: 报告课程考核成绩评价明细结果-考生-平时成绩dto
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2024/2/26
+ */
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class ReportExamStudentUsualScoreDto implements Serializable {
+
+    @ApiModelProperty(value = "权重")
+    private String weight;
+
+    @ApiModelProperty(value = "平时成绩对象集合")
+    private List<ReportExamStudentUsualScoreObjDto> scoreList;
+
+    public String getWeight() {
+        return weight;
+    }
+
+    public void setWeight(String weight) {
+        this.weight = weight;
+    }
+
+    public List<ReportExamStudentUsualScoreObjDto> getScoreList() {
+        return scoreList;
+    }
+
+    public void setScoreList(List<ReportExamStudentUsualScoreObjDto> scoreList) {
+        this.scoreList = scoreList;
+    }
+}

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

@@ -0,0 +1,39 @@
+package com.qmth.distributed.print.business.bean.dto.report;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+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 ReportExamStudentUsualScoreObjDto implements Serializable {
+
+    @ApiModelProperty(value = "名称")
+    private String name;
+
+    @ApiModelProperty(value = "分数")
+    private Double score;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Double getScore() {
+        return score;
+    }
+
+    public void setScore(Double score) {
+        this.score = score;
+    }
+}

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

@@ -0,0 +1,61 @@
+package com.qmth.distributed.print.business.bean.dto.report;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+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 ReportScoreRangeViewDto implements Serializable {
+
+    @ApiModelProperty(value = "考生人数")
+    private Integer studentCount;
+
+    @ApiModelProperty(value = "最小分")
+    private Double minScore;
+
+    @ApiModelProperty(value = "最大分")
+    private Double maxScore;
+
+    @ApiModelProperty(value = "比率")
+    private Double rate;
+
+    public Integer getStudentCount() {
+        return studentCount;
+    }
+
+    public void setStudentCount(Integer studentCount) {
+        this.studentCount = studentCount;
+    }
+
+    public Double getMinScore() {
+        return minScore;
+    }
+
+    public void setMinScore(Double minScore) {
+        this.minScore = minScore;
+    }
+
+    public Double getMaxScore() {
+        return maxScore;
+    }
+
+    public void setMaxScore(Double maxScore) {
+        this.maxScore = maxScore;
+    }
+
+    public Double getRate() {
+        return rate;
+    }
+
+    public void setRate(Double rate) {
+        this.rate = rate;
+    }
+}

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

@@ -0,0 +1,51 @@
+package com.qmth.distributed.print.business.bean.dto.report;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description: 报告课程目标考核分布-分数dto
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2024/2/26
+ */
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class ReportScoreViewDto implements Serializable {
+
+    @ApiModelProperty(value = "不及格人数")
+    private Integer failCount;
+
+    @ApiModelProperty(value = "不及格比率")
+    private Double failRate;
+
+    @ApiModelProperty(value = "分数范围")
+    private List<ReportScoreRangeViewDto> scoreRange;
+
+    public Integer getFailCount() {
+        return failCount;
+    }
+
+    public void setFailCount(Integer failCount) {
+        this.failCount = failCount;
+    }
+
+    public Double getFailRate() {
+        return failRate;
+    }
+
+    public void setFailRate(Double failRate) {
+        this.failRate = failRate;
+    }
+
+    public List<ReportScoreRangeViewDto> getScoreRange() {
+        return scoreRange;
+    }
+
+    public void setScoreRange(List<ReportScoreRangeViewDto> scoreRange) {
+        this.scoreRange = scoreRange;
+    }
+}

+ 132 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/report/PaperStructResult.java

@@ -0,0 +1,132 @@
+package com.qmth.distributed.print.business.bean.result.report;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.distributed.print.business.bean.dto.report.CourseTargetDto;
+import io.swagger.annotations.ApiModelProperty;
+import org.hibernate.validator.constraints.Range;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description: 试卷蓝图result
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2024/2/19
+ */
+public class PaperStructResult implements Serializable {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "id")
+    private Long id;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "考试id")
+    @NotNull(message = "考试id不能为空")
+    private Long examId;
+
+    @ApiModelProperty(value = "课程编码")
+    @NotNull(message = "课程编码不能为空")
+    private String courseCode;
+
+    @ApiModelProperty(value = "课程名称")
+    @NotNull(message = "课程名称不能为空")
+    private String courseName;
+
+    @ApiModelProperty(value = "试卷编号")
+    @NotNull(message = "试卷编号不能为空")
+    private String paperNumber;
+
+    @ApiModelProperty(value = "大题号")
+    @NotNull(message = "大题号不能为空")
+    @Range(min = 1L, message = "大题号最小为1")
+    private Integer mainNumber;
+
+    @ApiModelProperty(value = "小题号")
+    @NotNull(message = "小题号不能为空")
+    @Range(min = 1L, message = "小题号最小为1")
+    private Integer subNumber;
+
+    @ApiModelProperty(value = "分数")
+    private Double score;
+
+    @ApiModelProperty(value = "课程目标集合")
+    @NotEmpty(message = "课程目标集合不能为空")
+    private List<CourseTargetDto> targetList;
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public Integer getMainNumber() {
+        return mainNumber;
+    }
+
+    public void setMainNumber(Integer mainNumber) {
+        this.mainNumber = mainNumber;
+    }
+
+    public Integer getSubNumber() {
+        return subNumber;
+    }
+
+    public void setSubNumber(Integer subNumber) {
+        this.subNumber = subNumber;
+    }
+
+    public Double getScore() {
+        return score;
+    }
+
+    public void setScore(Double score) {
+        this.score = score;
+    }
+
+    public List<CourseTargetDto> getTargetList() {
+        return targetList;
+    }
+
+    public void setTargetList(List<CourseTargetDto> targetList) {
+        this.targetList = targetList;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    public String getCourseCode() {
+        return courseCode;
+    }
+
+    public void setCourseCode(String courseCode) {
+        this.courseCode = courseCode;
+    }
+
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+}

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

@@ -0,0 +1,74 @@
+package com.qmth.distributed.print.business.bean.result.report;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.distributed.print.business.bean.dto.report.*;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description: 报告result
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2024/2/19
+ */
+public class ReportResult implements Serializable {
+
+    @ApiModelProperty(value = "公共信息")
+    private ReportCommonDto commonInfo;
+
+    @ApiModelProperty(value = "课程基本情况")
+    private ReportCourseBasicInfoDto courseBasicInfo;
+
+    @ApiModelProperty(value = "课程目标考核分布")
+    private ReportCourseEvaluationSpreadDto courseEvaluationSpread;
+
+    @ApiModelProperty(value = "课程考核成绩评价结果")
+    private ReportCourseEvaluationResultDto courseEvaluationResult;
+
+    @ApiModelProperty(value = "课程目标达成评价明细结果")
+    private ReportCourseEvaluationResultDetailDto courseEvaluationResultDetail;
+
+    public ReportCommonDto getCommonInfo() {
+        return commonInfo;
+    }
+
+    public void setCommonInfo(ReportCommonDto commonInfo) {
+        this.commonInfo = commonInfo;
+    }
+
+    public ReportCourseBasicInfoDto getCourseBasicInfo() {
+        return courseBasicInfo;
+    }
+
+    public void setCourseBasicInfo(ReportCourseBasicInfoDto courseBasicInfo) {
+        this.courseBasicInfo = courseBasicInfo;
+    }
+
+    public ReportCourseEvaluationSpreadDto getCourseEvaluationSpread() {
+        return courseEvaluationSpread;
+    }
+
+    public void setCourseEvaluationSpread(ReportCourseEvaluationSpreadDto courseEvaluationSpread) {
+        this.courseEvaluationSpread = courseEvaluationSpread;
+    }
+
+    public ReportCourseEvaluationResultDto getCourseEvaluationResult() {
+        return courseEvaluationResult;
+    }
+
+    public void setCourseEvaluationResult(ReportCourseEvaluationResultDto courseEvaluationResult) {
+        this.courseEvaluationResult = courseEvaluationResult;
+    }
+
+    public ReportCourseEvaluationResultDetailDto getCourseEvaluationResultDetail() {
+        return courseEvaluationResultDetail;
+    }
+
+    public void setCourseEvaluationResultDetail(ReportCourseEvaluationResultDetailDto courseEvaluationResultDetail) {
+        this.courseEvaluationResultDetail = courseEvaluationResultDetail;
+    }
+}

+ 27 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TRBasicInfo.java

@@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
+import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 
 /**
@@ -26,20 +27,30 @@ public class TRBasicInfo implements Serializable {
 
     @ApiModelProperty(value = "考试id")
     @JsonSerialize(using = ToStringSerializer.class)
+    @NotNull(message = "考试id不能为空")
     private Long examId;
 
     @ApiModelProperty(value = "课程编码")
+    @NotNull(message = "课程编码不能为空")
     private String courseCode;
 
     @ApiModelProperty(value = "课程名称")
+    @NotNull(message = "课程名称不能为空")
     private String courseName;
 
     @ApiModelProperty(value = "试卷编码")
+    @NotNull(message = "试卷编码不能为空")
     private String paperNumber;
 
     @ApiModelProperty(value = "课程性质")
     private String courseType;
 
+    @ApiModelProperty(value = "学分")
+    private String credit;
+
+    @ApiModelProperty(value = "学时")
+    private String period;
+
     @ApiModelProperty(value = "考核方式")
     private String evaluationMode;
 
@@ -93,6 +104,22 @@ public class TRBasicInfo implements Serializable {
     @ApiModelProperty(value = "课程考核成绩评价明细结果")
     private String courseEvaluationResultDetail;
 
+    public String getCredit() {
+        return credit;
+    }
+
+    public void setCredit(String credit) {
+        this.credit = credit;
+    }
+
+    public String getPeriod() {
+        return period;
+    }
+
+    public void setPeriod(String period) {
+        this.period = period;
+    }
+
     public Long getId() {
         return id;
     }

+ 6 - 1
distributed-print/install/mysql/upgrade/3.3.1.sql

@@ -213,4 +213,9 @@ CREATE TABLE `t_r_exam_student` (
                                     `score` double COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '学生成绩',
                                     `result_detail` mediumtext DEFAULT NULL COMMENT '考生课程考核成绩评价明细结果',
                                     PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='报告考生表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='报告考生表';
+
+ALTER TABLE t_r_basic_info ADD credit varchar(50) NULL COMMENT '学分';
+ALTER TABLE t_r_basic_info CHANGE credit credit varchar(50) NULL COMMENT '学分' AFTER course_type;
+ALTER TABLE t_r_basic_info ADD period varchar(50) NULL COMMENT '学时';
+ALTER TABLE t_r_basic_info CHANGE period period varchar(50) NULL COMMENT '学时' AFTER credit;

+ 14 - 3
distributed-print/src/main/java/com/qmth/distributed/print/api/TCFinalScoreController.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.distributed.print.business.bean.excel.ExcelField;
 import com.qmth.distributed.print.business.bean.result.EditResult;
+import com.qmth.distributed.print.business.bean.result.report.PaperStructResult;
 import com.qmth.distributed.print.business.entity.TCFinalScore;
 import com.qmth.distributed.print.business.service.PrintCommonService;
 import com.qmth.distributed.print.business.service.TCFinalScoreService;
@@ -15,6 +16,8 @@ import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
 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 com.qmth.teachcloud.mark.service.MarkQuestionService;
 import io.swagger.annotations.*;
 import org.slf4j.Logger;
@@ -22,7 +25,6 @@ import org.slf4j.LoggerFactory;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.validation.BindingResult;
-import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -58,6 +60,9 @@ public class TCFinalScoreController {
     @Resource
     MarkQuestionService markQuestionService;
 
+    @Resource
+    MarkPaperService markPaperService;
+
     @ApiOperation(value = "导入期末成绩-模板下载")
     @RequestMapping(value = "/final_score/template_download", method = RequestMethod.POST)
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.EXPORT)
@@ -155,7 +160,7 @@ public class TCFinalScoreController {
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.UPDATE)
     @ApiResponses({@ApiResponse(code = 200, message = "试卷蓝图保存", response = Object.class)})
     @Transactional
-    public Object finalScorePaperStructSave(@ApiParam(value = "试卷蓝图结构", required = true) @Valid @RequestBody Object body, BindingResult bindingResult) throws IOException {
+    public Object finalScorePaperStructSave(@ApiParam(value = "试卷蓝图结构", required = true) @Valid @RequestBody PaperStructResult paperStructResult, BindingResult bindingResult) throws IOException {
         if (bindingResult.hasErrors()) {
             return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
         }
@@ -165,10 +170,16 @@ public class TCFinalScoreController {
     @ApiOperation(value = "期末成绩试卷蓝图查询")
     @RequestMapping(value = "/final_score/paper_struct/query", method = RequestMethod.POST)
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.SEARCH)
-    @ApiResponses({@ApiResponse(code = 200, message = "试卷蓝图保存", response = Object.class)})
+    @ApiResponses({@ApiResponse(code = 200, message = "试卷蓝图保存", response = PaperStructResult.class)})
     public Object finalScorePaperStructQuery(@ApiParam(value = "考试id", required = true) @RequestParam Long examId,
                                              @ApiParam(value = "科目编码", required = true) @RequestParam String courseCode,
                                              @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber) throws IOException {
+        List<MarkQuestion> markQuestionList = markQuestionService.listQuestionByExamIdAndPaperNumberAndPaperType(examId, paperNumber, null);
+        if (CollectionUtils.isEmpty(markQuestionList)) {
+            throw ExceptionResultEnum.ERROR.exception("未找到试卷结构");
+        }
+        MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
+        Objects.requireNonNull(markPaper, "未找到科目信息");
         return ResultUtil.ok(true);
     }
 }

+ 21 - 4
distributed-print/src/main/java/com/qmth/distributed/print/api/TRBasicInfoController.java

@@ -3,18 +3,25 @@ package com.qmth.distributed.print.api;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.boot.api.constant.ApiConstant;
 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.entity.TRBasicInfo;
 import com.qmth.distributed.print.business.service.PrintCommonService;
 import com.qmth.teachcloud.common.annotation.OperationLogDetail;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
 import com.qmth.teachcloud.common.util.ResultUtil;
+import com.qmth.teachcloud.mark.entity.MarkPaper;
+import com.qmth.teachcloud.mark.service.MarkPaperService;
 import io.swagger.annotations.*;
+import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.validation.Valid;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import java.io.IOException;
+import java.util.Objects;
 
 /**
  * <p>
@@ -32,6 +39,9 @@ public class TRBasicInfoController {
     @Resource
     PrintCommonService printCommonService;
 
+    @Resource
+    MarkPaperService markPaperService;
+
     @ApiOperation(value = "报告管理列表")
     @RequestMapping(value = "/report/list", method = RequestMethod.POST)
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.SEARCH)
@@ -46,10 +56,12 @@ public class TRBasicInfoController {
     @ApiOperation(value = "查看报告")
     @RequestMapping(value = "/report/view", method = RequestMethod.POST)
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.SEARCH)
-    @ApiResponses({@ApiResponse(code = 200, message = "查看报告", response = Object.class)})
+    @ApiResponses({@ApiResponse(code = 200, message = "查看报告", response = ReportResult.class)})
     public Object reportView(@ApiParam(value = "考试id", required = true) @RequestParam Long examId,
                              @ApiParam(value = "科目编码", required = true) @RequestParam String courseCode,
                              @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber) {
+        MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
+        Objects.requireNonNull(markPaper, "未找到科目信息");
         return ResultUtil.ok(true);
     }
 
@@ -57,11 +69,15 @@ public class TRBasicInfoController {
     @RequestMapping(value = "/report/save", method = RequestMethod.POST)
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.UPDATE)
     @ApiResponses({@ApiResponse(code = 200, message = "保存报告", response = Object.class)})
-    public Object reportSave(@ApiParam(value = "保存报告结构", required = true) @RequestBody Object body) {
+    public Object reportSave(@ApiParam(value = "保存报告结构", required = true) @Valid @RequestBody TRBasicInfo trBasicInfo, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(trBasicInfo.getExamId(), trBasicInfo.getPaperNumber());
+        Objects.requireNonNull(markPaper, "未找到科目信息");
         return ResultUtil.ok(true);
     }
 
-
     @ApiOperation(value = "导出报告")
     @RequestMapping(value = "/report/export", method = RequestMethod.POST)
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.EXPORT)
@@ -69,6 +85,7 @@ public class TRBasicInfoController {
     public void reportExport(@ApiParam(value = "考试id", required = true) @RequestParam Long examId,
                              @ApiParam(value = "科目编码", required = true) @RequestParam String courseCode,
                              @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber) throws IOException {
-
+        MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
+        Objects.requireNonNull(markPaper, "未找到科目信息");
     }
 }