浏览代码

测试报告

wangliang 1 年之前
父节点
当前提交
fb5777d3ab
共有 13 个文件被更改,包括 547 次插入60 次删除
  1. 72 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/FinalScoreDto.java
  2. 11 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/DimensionDto.java
  3. 11 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportExamStudentDto.java
  4. 13 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportExamStudentFinalScoreDto.java
  5. 13 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportExamStudentUsualScoreDto.java
  6. 9 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportExamStudentUsualScoreObjDto.java
  7. 72 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/UsualScoreOverviewDto.java
  8. 94 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/FinalScoreResult.java
  9. 35 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TCFinalScoreMapper.java
  10. 35 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TCFinalScoreService.java
  11. 43 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TCFinalScoreServiceImpl.java
  12. 57 0
      distributed-print-business/src/main/resources/mapper/TCFinalScoreMapper.xml
  13. 82 58
      distributed-print/src/main/java/com/qmth/distributed/print/api/TRBasicInfoController.java

+ 72 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/FinalScoreDto.java

@@ -0,0 +1,72 @@
+package com.qmth.distributed.print.business.bean.dto;
+
+import com.qmth.teachcloud.mark.bean.archivescore.ScoreRangeVo;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description: 期末成绩dto
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2024/2/29
+ */
+public class FinalScoreDto implements Serializable {
+
+    @ApiModelProperty(value = "考生人数")
+    private int studentCount;
+
+    @ApiModelProperty(value = "期末考试最大成绩")
+    private Double finalScoreMaxScore;
+
+    @ApiModelProperty(value = "期末考试最小成绩")
+    private Double finalScoreMinScore;
+
+    @ApiModelProperty(value = "期末考试平均成绩")
+    private Double finalScoreAvgScore;
+
+    @ApiModelProperty(value = "分数范围")
+    private List<ScoreRangeVo> scoreRange;
+
+    public List<ScoreRangeVo> getScoreRange() {
+        return scoreRange;
+    }
+
+    public void setScoreRange(List<ScoreRangeVo> scoreRange) {
+        this.scoreRange = scoreRange;
+    }
+
+    public int getStudentCount() {
+        return studentCount;
+    }
+
+    public void setStudentCount(int studentCount) {
+        this.studentCount = studentCount;
+    }
+
+    public Double getFinalScoreMaxScore() {
+        return finalScoreMaxScore;
+    }
+
+    public void setFinalScoreMaxScore(Double finalScoreMaxScore) {
+        this.finalScoreMaxScore = finalScoreMaxScore;
+    }
+
+    public Double getFinalScoreMinScore() {
+        return finalScoreMinScore;
+    }
+
+    public void setFinalScoreMinScore(Double finalScoreMinScore) {
+        this.finalScoreMinScore = finalScoreMinScore;
+    }
+
+    public Double getFinalScoreAvgScore() {
+        return finalScoreAvgScore;
+    }
+
+    public void setFinalScoreAvgScore(Double finalScoreAvgScore) {
+        this.finalScoreAvgScore = finalScoreAvgScore;
+    }
+}

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

@@ -30,6 +30,17 @@ public class DimensionDto implements Serializable {
     @ApiModelProperty(value = "知识点分数")
     private Double dimensionScore;
 
+    public DimensionDto() {
+
+    }
+
+    public DimensionDto(Long dimensionId, String dimensionCode, String dimensionName, Double dimensionScore) {
+        this.dimensionId = dimensionId;
+        this.dimensionCode = dimensionCode;
+        this.dimensionName = dimensionName;
+        this.dimensionScore = dimensionScore;
+    }
+
     public Long getDimensionId() {
         return dimensionId;
     }

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

@@ -1,6 +1,6 @@
 package com.qmth.distributed.print.business.bean.dto.report;
 
-import com.fasterxml.jackson.annotation.JsonInclude;
+import com.qmth.distributed.print.business.bean.result.FinalScoreResult;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
@@ -30,6 +30,16 @@ public class ReportExamStudentDto implements Serializable {
     @ApiModelProperty(value = "课程目标集合")
     private List<ReportExamStudentTargetDto> targetList;
 
+    public ReportExamStudentDto() {
+
+    }
+
+    public ReportExamStudentDto(FinalScoreResult finalScoreResult) {
+        this.name = finalScoreResult.getName();
+        this.studentCode = finalScoreResult.getStudentCode();
+        this.score = finalScoreResult.getFinalScore();
+    }
+
     public String getName() {
         return name;
     }

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

@@ -22,6 +22,19 @@ public class ReportExamStudentFinalScoreDto implements Serializable {
     @ApiModelProperty(value = "课程目标集合")
     private List<DimensionDto> dimensionList;
 
+    public ReportExamStudentFinalScoreDto() {
+
+    }
+
+    public ReportExamStudentFinalScoreDto(String weight, List<DimensionDto> dimensionList) {
+        this.weight = weight;
+        this.dimensionList = dimensionList;
+    }
+
+    public ReportExamStudentFinalScoreDto(List<DimensionDto> dimensionList) {
+        this.dimensionList = dimensionList;
+    }
+
     public String getWeight() {
         return weight;
     }

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

@@ -22,6 +22,19 @@ public class ReportExamStudentUsualScoreDto implements Serializable {
     @ApiModelProperty(value = "平时成绩对象集合")
     private List<ReportExamStudentUsualScoreObjDto> scoreList;
 
+    public ReportExamStudentUsualScoreDto() {
+
+    }
+
+    public ReportExamStudentUsualScoreDto(String weight, List<ReportExamStudentUsualScoreObjDto> scoreList) {
+        this.weight = weight;
+        this.scoreList = scoreList;
+    }
+
+    public ReportExamStudentUsualScoreDto(List<ReportExamStudentUsualScoreObjDto> scoreList) {
+        this.scoreList = scoreList;
+    }
+
     public String getWeight() {
         return weight;
     }

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

@@ -21,6 +21,15 @@ public class ReportExamStudentUsualScoreObjDto implements Serializable {
     @ApiModelProperty(value = "分数")
     private Double score;
 
+    public ReportExamStudentUsualScoreObjDto() {
+
+    }
+
+    public ReportExamStudentUsualScoreObjDto(String name, Double score) {
+        this.name = name;
+        this.score = score;
+    }
+
     public String getName() {
         return name;
     }

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

@@ -0,0 +1,72 @@
+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 UsualScoreOverviewDto implements Serializable {
+
+    @ApiModelProperty(value = "作业名称")
+    private String name;
+
+    @ApiModelProperty(value = "最高分")
+    private Double maxScore;
+
+    @ApiModelProperty(value = "最低分")
+    private Double minScore;
+
+    @ApiModelProperty(value = "平均分")
+    private Double avgScore;
+
+    public UsualScoreOverviewDto() {
+
+    }
+
+    public UsualScoreOverviewDto(String name, Double maxScore, Double minScore, Double avgScore) {
+        this.name = name;
+        this.maxScore = maxScore;
+        this.minScore = minScore;
+        this.avgScore = avgScore;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    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;
+    }
+}

+ 94 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/FinalScoreResult.java

@@ -0,0 +1,94 @@
+package com.qmth.distributed.print.business.bean.result;
+
+import com.qmth.distributed.print.business.bean.dto.report.ReportExamStudentFinalScoreDto;
+import com.qmth.distributed.print.business.bean.dto.report.ReportExamStudentUsualScoreDto;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 期末成绩dto
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2024/2/29
+ */
+public class FinalScoreResult implements Serializable {
+
+    @ApiModelProperty(value = "考生名称")
+    private String name;
+
+    @ApiModelProperty(value = "学号")
+    private String studentCode;
+
+    @ApiModelProperty(value = "期末考试分数")
+    private Double finalScore;
+
+    @ApiModelProperty(value = "期末考试分数明细")
+    private String finalScoreDetail;
+
+    @ApiModelProperty(value = "平时作业成绩")
+    private String usualScore;
+
+    @ApiModelProperty(value = "期末成绩集合")
+    private ReportExamStudentFinalScoreDto finalScoreDto;
+
+    @ApiModelProperty(value = "平时成绩集合")
+    private ReportExamStudentUsualScoreDto usualScoreDto;
+
+    public String getFinalScoreDetail() {
+        return finalScoreDetail;
+    }
+
+    public void setFinalScoreDetail(String finalScoreDetail) {
+        this.finalScoreDetail = finalScoreDetail;
+    }
+
+    public ReportExamStudentFinalScoreDto getFinalScoreDto() {
+        return finalScoreDto;
+    }
+
+    public void setFinalScoreDto(ReportExamStudentFinalScoreDto finalScoreDto) {
+        this.finalScoreDto = finalScoreDto;
+    }
+
+    public ReportExamStudentUsualScoreDto getUsualScoreDto() {
+        return usualScoreDto;
+    }
+
+    public void setUsualScoreDto(ReportExamStudentUsualScoreDto usualScoreDto) {
+        this.usualScoreDto = usualScoreDto;
+    }
+
+    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 Double getFinalScore() {
+        return finalScore;
+    }
+
+    public void setFinalScore(Double finalScore) {
+        this.finalScore = finalScore;
+    }
+
+    public String getUsualScore() {
+        return usualScore;
+    }
+
+    public void setUsualScore(String usualScore) {
+        this.usualScore = usualScore;
+    }
+}

+ 35 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TCFinalScoreMapper.java

@@ -2,9 +2,12 @@ package com.qmth.distributed.print.business.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.qmth.distributed.print.business.bean.dto.FinalScoreDto;
+import com.qmth.distributed.print.business.bean.result.FinalScoreResult;
 import com.qmth.distributed.print.business.entity.TCFinalScore;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -27,4 +30,36 @@ public interface TCFinalScoreMapper extends BaseMapper<TCFinalScore> {
      * @return
      */
     public IPage<TCFinalScore> finalScoreList(IPage<Map> iPage, @Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber);
+
+    /**
+     * 查找期末成绩分数图
+     *
+     * @param examId
+     * @param courseCode
+     * @param paperNumber
+     * @return
+     */
+    public FinalScoreDto finalScoreScoreOverView(@Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber);
+
+    /**
+     * 查找期末成绩分数区间
+     *
+     * @param examId
+     * @param courseCode
+     * @param paperNumber
+     * @param start
+     * @param end
+     * @return
+     */
+    public int getCountByScoreRange(@Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber, @Param("start") Double start, @Param("end") Double end);
+
+    /**
+     * 查找考生成绩
+     *
+     * @param examId
+     * @param courseCode
+     * @param paperNumber
+     * @return
+     */
+    public List<FinalScoreResult> examStudentOverview(@Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber);
 }

+ 35 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TCFinalScoreService.java

@@ -2,11 +2,13 @@ package com.qmth.distributed.print.business.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.distributed.print.business.bean.dto.FinalScoreDto;
+import com.qmth.distributed.print.business.bean.result.FinalScoreResult;
 import com.qmth.distributed.print.business.entity.TCFinalScore;
-import com.qmth.distributed.print.business.entity.TCUsualScore;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -41,4 +43,36 @@ public interface TCFinalScoreService extends IService<TCFinalScore> {
      * @return
      */
     public IPage<TCFinalScore> finalScoreList(IPage<Map> iPage, Long examId, String courseCode, String paperNumber);
+
+    /**
+     * 查找期末成绩分数图
+     *
+     * @param examId
+     * @param courseCode
+     * @param paperNumber
+     * @return
+     */
+    public FinalScoreDto finalScoreScoreOverView(Long examId, String courseCode, String paperNumber);
+
+    /**
+     * 查找期末成绩分数区间
+     *
+     * @param examId
+     * @param courseCode
+     * @param paperNumber
+     * @param start
+     * @param end
+     * @return
+     */
+    public int getCountByScoreRange(Long examId, String courseCode, String paperNumber, Double start, Double end);
+
+    /**
+     * 查找考生成绩
+     *
+     * @param examId
+     * @param courseCode
+     * @param paperNumber
+     * @return
+     */
+    public List<FinalScoreResult> examStudentOverview(Long examId, String courseCode, String paperNumber);
 }

+ 43 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TCFinalScoreServiceImpl.java

@@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.boot.api.exception.ApiException;
+import com.qmth.distributed.print.business.bean.dto.FinalScoreDto;
+import com.qmth.distributed.print.business.bean.result.FinalScoreResult;
 import com.qmth.distributed.print.business.entity.TCFinalScore;
 import com.qmth.distributed.print.business.enums.SourceEnum;
 import com.qmth.distributed.print.business.mapper.TCFinalScoreMapper;
@@ -167,4 +169,45 @@ public class TCFinalScoreServiceImpl extends ServiceImpl<TCFinalScoreMapper, TCF
     public IPage<TCFinalScore> finalScoreList(IPage<Map> iPage, Long examId, String courseCode, String paperNumber) {
         return this.baseMapper.finalScoreList(iPage, examId, courseCode, paperNumber);
     }
+
+    /**
+     * 查找期末成绩分数图
+     *
+     * @param examId
+     * @param courseCode
+     * @param paperNumber
+     * @return
+     */
+    @Override
+    public FinalScoreDto finalScoreScoreOverView(Long examId, String courseCode, String paperNumber) {
+        return this.baseMapper.finalScoreScoreOverView(examId, courseCode, paperNumber);
+    }
+
+    /**
+     * 查找期末成绩分数区间
+     *
+     * @param examId
+     * @param courseCode
+     * @param paperNumber
+     * @param start
+     * @param end
+     * @return
+     */
+    @Override
+    public int getCountByScoreRange(Long examId, String courseCode, String paperNumber, Double start, Double end) {
+        return this.baseMapper.getCountByScoreRange(examId, courseCode, paperNumber, start, end);
+    }
+
+    /**
+     * 查找考生成绩
+     *
+     * @param examId
+     * @param courseCode
+     * @param paperNumber
+     * @return
+     */
+    @Override
+    public List<FinalScoreResult> examStudentOverview(Long examId, String courseCode, String paperNumber) {
+        return this.baseMapper.examStudentOverview(examId, courseCode, paperNumber);
+    }
 }

+ 57 - 0
distributed-print-business/src/main/resources/mapper/TCFinalScoreMapper.xml

@@ -17,4 +17,61 @@
         </where>
     </select>
 
+    <select id="finalScoreScoreOverView" resultType="com.qmth.distributed.print.business.bean.dto.FinalScoreDto">
+        select count(1) as studentCount,
+            max(case when tcfs.score is not null then tcfs.score else null end) finalScoreMaxScore,
+            min(case when tcfs.score is not null then tcfs.score else null end) finalScoreMinScore,
+            avg(case when tcfs.score is not null then tcfs.score else null end) finalScoreAvgScore
+            from t_c_final_score tcfs
+            join t_c_usual_score tcus on tcfs.exam_id = tcus.exam_id and tcfs.course_code = tcus.course_code and tcfs.paper_number and tcus.paper_number and tcfs.student_code = tcus.student_code
+        <where>
+            <if test="examId != null and examId != ''">
+                and tcfs.exam_id = #{examId}
+            </if>
+            <if test="courseCode != null and courseCode != ''">
+                and tcfs.course_code = #{courseCode}
+            </if>
+            <if test="paperNumber != null and paperNumber != ''">
+                and tcfs.paper_number = #{paperNumber}
+            </if>
+        </where>
+    </select>
+
+    <select id="getCountByScoreRange" resultType="int">
+        SELECT count(1) FROM t_c_final_score tcfs
+        <where>
+            <if test="examId != null and examId != ''">
+                and tcfs.exam_id = #{examId}
+            </if>
+            <if test="courseCode != null and courseCode != ''">
+                and tcfs.course_code = #{courseCode}
+            </if>
+            <if test="paperNumber != null and paperNumber != ''">
+                and tcfs.paper_number = #{paperNumber}
+            </if>
+                and tcfs.score &gt;= #{start} and tcfs.score &lt;= #{end}
+        </where>
+    </select>
+
+    <select id="examStudentOverview" resultType="com.qmth.distributed.print.business.bean.result.FinalScoreResult">
+        select
+            tcfs.name,
+            tcfs.student_code as studentCode,
+            tcfs.score as finalScore,
+            tcfs.score_detail as finalScoreDetail,
+            tcus.score as usualScore
+        from t_c_final_score tcfs
+        join t_c_usual_score tcus on tcfs.exam_id = tcus.exam_id and tcfs.course_code = tcus.course_code and tcfs.paper_number and tcus.paper_number and tcfs.student_code = tcus.student_code
+        <where>
+            <if test="examId != null and examId != ''">
+                and tcfs.exam_id = #{examId}
+            </if>
+            <if test="courseCode != null and courseCode != ''">
+                and tcfs.course_code = #{courseCode}
+            </if>
+            <if test="paperNumber != null and paperNumber != ''">
+                and tcfs.paper_number = #{paperNumber}
+            </if>
+        </where>
+    </select>
 </mapper>

+ 82 - 58
distributed-print/src/main/java/com/qmth/distributed/print/api/TRBasicInfoController.java

@@ -1,11 +1,14 @@
 package com.qmth.distributed.print.api;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.gson.reflect.TypeToken;
 import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.distributed.print.business.bean.dto.FinalScoreDto;
 import com.qmth.distributed.print.business.bean.dto.report.*;
+import com.qmth.distributed.print.business.bean.result.FinalScoreResult;
 import com.qmth.distributed.print.business.bean.result.ScoreResult;
 import com.qmth.distributed.print.business.bean.result.report.PaperStructResult;
 import com.qmth.distributed.print.business.bean.result.report.ReportResult;
@@ -23,14 +26,9 @@ import com.qmth.teachcloud.common.util.GsonUtil;
 import com.qmth.teachcloud.common.util.JacksonUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
-import com.qmth.teachcloud.mark.bean.archivescore.OverViewVo;
 import com.qmth.teachcloud.mark.bean.archivescore.ScoreRangeVo;
-import com.qmth.teachcloud.mark.bean.archivescore.ScoreReportVo;
 import com.qmth.teachcloud.mark.entity.MarkPaper;
-import com.qmth.teachcloud.mark.entity.MarkStudent;
-import com.qmth.teachcloud.mark.mapper.MarkStudentMapper;
 import com.qmth.teachcloud.mark.service.MarkPaperService;
-import com.qmth.teachcloud.mark.service.MarkStudentService;
 import com.qmth.teachcloud.mark.utils.Calculator;
 import io.swagger.annotations.*;
 import org.springframework.transaction.annotation.Transactional;
@@ -43,9 +41,12 @@ import javax.validation.Valid;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -72,9 +73,6 @@ public class TRBasicInfoController {
     @Resource
     BasicSemesterService basicSemesterService;
 
-    @Resource
-    ExamStudentService examStudentService;
-
     @Resource
     BasicExamService basicExamService;
 
@@ -82,10 +80,7 @@ public class TRBasicInfoController {
     TCPaperStructService tcPaperStructService;
 
     @Resource
-    MarkStudentMapper markStudentMapper;
-
-    @Resource
-    MarkStudentService markStudentService;
+    TCFinalScoreService tcFinalScoreService;
 
     @ApiOperation(value = "报告管理列表")
     @RequestMapping(value = "/report/list", method = RequestMethod.POST)
@@ -137,12 +132,11 @@ public class TRBasicInfoController {
         ReportCourseEvaluationSpreadDto reportCourseEvaluationSpreadDto = new ReportCourseEvaluationSpreadDto(paperStructResultList);
 
         //课程目标考核分布-分数图
-        OverViewVo overViewVo = markStudentMapper.overview(examId, paperNumber);
-        Objects.requireNonNull(overViewVo, "未找到分数信息");
+        FinalScoreDto finalScoreDto = tcFinalScoreService.finalScoreScoreOverView(examId, courseCode, paperNumber);
+        Objects.requireNonNull(finalScoreDto, "未找到期末成绩分数信息");
 
-        ScoreReportVo ret = new ScoreReportVo();
-        fillScoreRange(ret, examId, paperNumber, markPaper);
-        List<ScoreRangeVo> scoreRangeVoList = ret.getScoreRange();
+        fillScoreRange(finalScoreDto, examId, paperNumber, markPaper);
+        List<ScoreRangeVo> scoreRangeVoList = finalScoreDto.getScoreRange();
         if (!CollectionUtils.isEmpty(scoreRangeVoList)) {
             Integer failCount = scoreRangeVoList.get(0).getStudentCount();//第一行数据默认为不及格
             Double failRate = scoreRangeVoList.get(0).getRate();
@@ -155,6 +149,65 @@ public class TRBasicInfoController {
         }
         trBasicInfo.setCourseEvaluationSpread(JacksonUtil.parseJson(reportCourseEvaluationSpreadDto));
 
+        //查询考生数据
+        List<FinalScoreResult> finalScoreResultList = tcFinalScoreService.examStudentOverview(examId, courseCode, paperNumber);
+        Map<String, List<Double>> usualScoreMap = new LinkedHashMap<>();//汇总平常成绩分数(用来算最高分,最低分,平均分)
+        Map<String, UsualScoreOverviewDto> usualScoreOverviewDtoMap = new LinkedHashMap<>();//整体平常成绩分数图
+//        Map<Long, Map<String, List<Double>>> finalScoreTargetMap = new LinkedHashMap<>();//汇总目标分数(用来算最高分,最低分,平均分)
+        Map<Long, List<Double>> finalScoreTargetMap = new LinkedHashMap<>();//汇总目标分数(用来算最高分,最低分,平均分)
+        Map<Long, Map<String, List<Double>>> finalScoreDimensionMap = new LinkedHashMap<>();//汇总知识点分数(用来算最高分,最低分,平均分)
+//        LinkedMultiValueMap<Long, UsualScoreOverviewDto> oList = new LinkedMultiValueMap<>();
+        if (!CollectionUtils.isEmpty(finalScoreResultList)) {
+            //期末成绩明细map
+            Map<String, PaperStructResult> paperStructResultMap = paperStructResultList.stream().collect(Collectors.toMap(k -> k.getMainNumber() + "-" + k.getSubNumber(), Function.identity(), (dto1, dto2) -> dto1));
+
+            List<ReportExamStudentDto> examStudentList = new ArrayList<>(finalScoreResultList.size());
+            for (FinalScoreResult finalScoreResult : finalScoreResultList) {
+                //解析期末成绩知识点
+                JSONArray finalScoreDetailJsonArray = JSONArray.parseArray(finalScoreResult.getFinalScoreDetail());
+                for (int i = 0; i < finalScoreDetailJsonArray.size(); i++) {
+                    JSONObject jsonObject = finalScoreDetailJsonArray.getJSONObject(i);
+                    PaperStructResult paperStructResult = paperStructResultMap.get(jsonObject.get("name").toString());
+                    if (Objects.nonNull(paperStructResult)) {
+                        List<CourseTargetDto> courseTargetDtoList = paperStructResult.getTargetList();
+                        for (CourseTargetDto courseTargetDto : courseTargetDtoList) {
+                            if (!finalScoreTargetMap.containsKey(courseTargetDto.getTargetId())) {
+
+                            } else {
+
+                            }
+                            List<DimensionDto> dimensionDtoList = courseTargetDto.getDimensionList();
+                        }
+                    }
+                }
+
+                //解析平时作业分数图
+                JSONArray usualScoreJsonArray = JSONArray.parseArray(finalScoreResult.getUsualScore());
+                List<ReportExamStudentUsualScoreObjDto> scoreList = new ArrayList<>(usualScoreJsonArray.size());
+                for (int i = 0; i < usualScoreJsonArray.size(); i++) {
+                    JSONObject jsonObject = usualScoreJsonArray.getJSONObject(i);
+                    if (!usualScoreMap.containsKey(jsonObject.get("name"))) {
+                        usualScoreMap.put(jsonObject.get("name").toString(), new ArrayList<>(Arrays.asList(Objects.nonNull(jsonObject.get("score")) ? Double.parseDouble(jsonObject.get("score").toString()) : 0d)));
+                    } else {
+                        List<Double> list = usualScoreMap.get(jsonObject.get("name").toString());
+                        list.add(Objects.nonNull(jsonObject.get("score")) ? Double.parseDouble(jsonObject.get("score").toString()) : 0d);
+                        usualScoreMap.put(jsonObject.get("name").toString(), list);
+                    }
+                    scoreList.add(new ReportExamStudentUsualScoreObjDto(jsonObject.get("name").toString(), Objects.nonNull(jsonObject.get("score")) ? Double.parseDouble(jsonObject.get("score").toString()) : 0d));
+                }
+                finalScoreResult.setUsualScoreDto(new ReportExamStudentUsualScoreDto(scoreList));
+                examStudentList.add(new ReportExamStudentDto(finalScoreResult));
+            }
+        }
+
+        //计算平常成绩最高分,最低分,平均分
+        usualScoreMap.forEach((k, v) -> {
+            Double maxScore = v.stream().mapToDouble(Double::doubleValue).max().orElse(0d);
+            Double minScore = v.stream().mapToDouble(Double::doubleValue).min().orElse(0d);
+            Double avgScore = new BigDecimal(v.stream().mapToDouble(Double::doubleValue).average().orElse(0d)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+            usualScoreOverviewDtoMap.put(k, new UsualScoreOverviewDto(k, maxScore, minScore, avgScore));
+        });
+
         //TODO 课程考核成绩评价结果-待曹子轩补充目标/评价方式数据,有测试数据
         ReportCourseEvaluationResultDto reportCourseEvaluationResultDto = null;
         if (!CollectionUtils.isEmpty(paperStructResultList)) {
@@ -223,13 +276,12 @@ public class TRBasicInfoController {
     /**
      * 计算分数范围
      *
-     * @param ret
+     * @param finalScoreDto
      * @param examId
      * @param paperNumber
      * @param markPaper
      */
-    private void fillScoreRange(ScoreReportVo ret, Long examId, String paperNumber, MarkPaper markPaper) {
-        int toltal = getCountByPaperNumber(examId, paperNumber);
+    protected void fillScoreRange(FinalScoreDto finalScoreDto, Long examId, String paperNumber, MarkPaper markPaper) {
         //分数区间
         Double passScore = markPaper.getPassScore();//及格分
         Objects.requireNonNull(passScore, "及格分为空");
@@ -238,75 +290,47 @@ public class TRBasicInfoController {
         Objects.requireNonNull(totalScore, "试卷满分为空");
 
         List<ScoreRangeVo> scoreRange = new ArrayList<>();
-        ret.setScoreRange(scoreRange);
+        finalScoreDto.setScoreRange(scoreRange);
 
         //开始、结束分数区间
         Double startInterval = 0.5d, endInterval = 9.5d, increaseStartScore = passScore - startInterval,
                 increaseEndScore = increaseStartScore + startInterval + endInterval;
-        scoreRange.add(getScoreRangeVo(toltal, examId, paperNumber, 1.0d, increaseStartScore));
+        scoreRange.add(getScoreRangeVo(finalScoreDto.getStudentCount(), examId, markPaper.getCourseCode(), paperNumber, 1.0d, increaseStartScore));
         increaseStartScore = increaseStartScore + startInterval;
         increaseEndScore = increaseStartScore + endInterval;
         if (totalScore.doubleValue() - increaseEndScore.doubleValue() == startInterval || increaseEndScore.doubleValue() >= totalScore.doubleValue()) {
             increaseEndScore = totalScore;
-            scoreRange.add(getScoreRangeVo(toltal, examId, paperNumber, increaseStartScore, increaseEndScore));
+            scoreRange.add(getScoreRangeVo(finalScoreDto.getStudentCount(), examId, markPaper.getCourseCode(), paperNumber, increaseStartScore, increaseEndScore));
         } else {
             while (increaseEndScore.doubleValue() < totalScore.doubleValue()) {
-                scoreRange.add(getScoreRangeVo(toltal, examId, paperNumber, increaseStartScore, increaseEndScore));
+                scoreRange.add(getScoreRangeVo(finalScoreDto.getStudentCount(), examId, markPaper.getCourseCode(), paperNumber, increaseStartScore, increaseEndScore));
                 increaseStartScore = increaseEndScore + startInterval;
                 increaseEndScore = increaseStartScore + endInterval;
                 if (totalScore.doubleValue() - increaseEndScore.doubleValue() == startInterval || increaseEndScore.doubleValue() >= totalScore.doubleValue()) {
                     increaseEndScore = totalScore;
-                    scoreRange.add(getScoreRangeVo(toltal, examId, paperNumber, increaseStartScore, increaseEndScore));
+                    scoreRange.add(getScoreRangeVo(finalScoreDto.getStudentCount(), examId, markPaper.getCourseCode(), paperNumber, increaseStartScore, increaseEndScore));
                 }
             }
         }
     }
 
-    /**
-     * 获取考生人数
-     *
-     * @param examId
-     * @param paperNumber
-     * @return
-     */
-    private int getCountByPaperNumber(Long examId, String paperNumber) {
-        QueryWrapper<MarkStudent> wrapper = new QueryWrapper<>();
-        LambdaQueryWrapper<MarkStudent> lw = wrapper.lambda();
-        lw.eq(MarkStudent::getExamId, examId);
-        lw.eq(MarkStudent::getPaperNumber, paperNumber);
-        return markStudentService.count(wrapper);
-    }
-
     /**
      * 计算分数比率
      *
      * @param toltal
      * @param examId
+     * @param courseCode
      * @param paperNumber
      * @param start
      * @param end
      * @return
      */
-    private ScoreRangeVo getScoreRangeVo(int toltal, Long examId, String paperNumber, Double start, Double end) {
-        int count = getCount(examId, paperNumber, start, end);
+    protected ScoreRangeVo getScoreRangeVo(int toltal, Long examId, String courseCode, String paperNumber, Double start, Double end) {
+        int count = tcFinalScoreService.getCountByScoreRange(examId, courseCode, paperNumber, start, end);
         Double rate = null;
         if (toltal != 0) {
             rate = Calculator.multiply(count, toltal, 2);
         }
-        ScoreRangeVo vo = new ScoreRangeVo(count, start, end, rate);
-        return vo;
-    }
-
-    /**
-     * 计算分数范围人数
-     *
-     * @param examId
-     * @param paperNumber
-     * @param start
-     * @param end
-     * @return
-     */
-    private int getCount(Long examId, String paperNumber, Double start, Double end) {
-        return markStudentMapper.getCountByScoreRange(examId, paperNumber, start, end);
+        return new ScoreRangeVo(count, start, end, rate);
     }
 }