Browse Source

测试报告

wangliang 1 năm trước cách đây
mục cha
commit
358a1c34b7

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

@@ -7,6 +7,7 @@ import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -26,6 +27,22 @@ public class CourseTargetWeightDto implements Serializable {
     @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 Map<String, BigDecimal> usualScoreWeight;
 
@@ -41,6 +58,16 @@ public class CourseTargetWeightDto implements Serializable {
         this.targetName = targetName;
     }
 
+
+    public CourseTargetWeightDto(CourseTargetDto courseTargetDto) {
+        this.targetId = courseTargetDto.getTargetId();
+        this.targetName = courseTargetDto.getTargetName();
+        this.graduationRequirement = courseTargetDto.getGraduationRequirement();
+        this.evaluationId = courseTargetDto.getEvaluationId();
+        this.evaluation = courseTargetDto.getEvaluation();
+        this.evaluationDesc = courseTargetDto.getEvaluationDesc();
+    }
+
     public CourseTargetWeightDto(Long targetId, String targetName, Map<String, BigDecimal> usualScoreWeight, BigDecimal finalScoreWeight) {
         this.targetId = targetId;
         this.targetName = targetName;
@@ -48,6 +75,46 @@ public class CourseTargetWeightDto implements Serializable {
         this.finalScoreWeight = finalScoreWeight;
     }
 
+    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;
+    }
+
+    public List<DimensionDto> getDimensionList() {
+        return dimensionList;
+    }
+
+    public void setDimensionList(List<DimensionDto> dimensionList) {
+        this.dimensionList = dimensionList;
+    }
+
     public Long getTargetId() {
         return targetId;
     }

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

@@ -40,14 +40,16 @@ public class ReportExamStudentDto implements Serializable {
     public ReportExamStudentDto(TRExamStudent trExamStudent) {
         this.name = trExamStudent.getName();
         this.studentCode = trExamStudent.getStudentCode();
+        this.administrativeClass = trExamStudent.getAdministrativeClass();
         this.score = trExamStudent.getScore();
         this.targetList = GsonUtil.fromJson(trExamStudent.getResultDetail(), new TypeToken<List<ReportExamStudentTargetDto>>() {
         }.getType());
     }
 
-    public ReportExamStudentDto(String name, String studentCode, Double score) {
+    public ReportExamStudentDto(String name, String studentCode, String administrativeClass, Double score) {
         this.name = name;
         this.studentCode = studentCode;
+        this.administrativeClass = administrativeClass;
         this.score = score;
     }
 
@@ -55,6 +57,7 @@ public class ReportExamStudentDto implements Serializable {
         this.name = finalScoreResult.getName();
         this.studentCode = finalScoreResult.getStudentCode();
         this.score = finalScoreResult.getFinalScore();
+        this.administrativeClass = finalScoreResult.getAdministrativeClass();
     }
 
     public String getName() {

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

@@ -21,6 +21,9 @@ public class FinalScoreResult implements Serializable {
     @ApiModelProperty(value = "学号")
     private String studentCode;
 
+    @ApiModelProperty(value = "教学班级")
+    private String administrativeClass;
+
     @ApiModelProperty(value = "期末考试分数")
     private Double finalScore;
 
@@ -36,6 +39,14 @@ public class FinalScoreResult implements Serializable {
     @ApiModelProperty(value = "平时成绩集合")
     private ReportExamStudentUsualScoreDto usualScoreDto;
 
+    public String getAdministrativeClass() {
+        return administrativeClass;
+    }
+
+    public void setAdministrativeClass(String administrativeClass) {
+        this.administrativeClass = administrativeClass;
+    }
+
     public String getFinalScoreDetail() {
         return finalScoreDetail;
     }

+ 4 - 4
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/report/word/CourseBasicBean.java

@@ -44,14 +44,14 @@ public class CourseBasicBean implements Serializable {
     String courseTarget;
 
     @ApiModelProperty(name = "课程目标数")
-    String courseTargetNum;
+    Integer courseTargetNum;
 
     public CourseBasicBean() {
 
     }
 
     public CourseBasicBean(String courseName, String courseCode, String courseEnName, String courseType, String credit
-            , String theory, String sampleRange, String people, String date, String courseTarget, String courseTargetNum) {
+            , String theory, String sampleRange, String people, String date, String courseTarget, Integer courseTargetNum) {
         this.courseName = courseName;
         this.courseCode = courseCode;
         this.courseEnName = courseEnName;
@@ -73,11 +73,11 @@ public class CourseBasicBean implements Serializable {
         this.courseTarget = courseTarget;
     }
 
-    public String getCourseTargetNum() {
+    public Integer getCourseTargetNum() {
         return courseTargetNum;
     }
 
-    public void setCourseTargetNum(String courseTargetNum) {
+    public void setCourseTargetNum(Integer courseTargetNum) {
         this.courseTargetNum = courseTargetNum;
     }
 

+ 1 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TRExamStudent.java

@@ -54,6 +54,7 @@ public class TRExamStudent implements Serializable {
         this.id = SystemConstant.getDbUuid();
         this.rBasicInfoId = rBasicInfoId;
         this.name = reportExamStudentDto.getName();
+        this.administrativeClass = reportExamStudentDto.getAdministrativeClass();
         this.studentCode = reportExamStudentDto.getStudentCode();
         this.score = reportExamStudentDto.getScore();
         this.resultDetail = JacksonUtil.parseJson(reportExamStudentDto.getTargetList());

+ 19 - 16
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TRBasicInfoServiceImpl.java

@@ -12,8 +12,10 @@ import com.qmth.distributed.print.business.bean.result.report.PaperStructResult;
 import com.qmth.distributed.print.business.entity.TCPaperStruct;
 import com.qmth.distributed.print.business.entity.TRBasicInfo;
 import com.qmth.distributed.print.business.mapper.TRBasicInfoMapper;
-import com.qmth.distributed.print.business.service.*;
-import com.qmth.teachcloud.common.entity.BasicExam;
+import com.qmth.distributed.print.business.service.TCFinalScoreService;
+import com.qmth.distributed.print.business.service.TCPaperStructService;
+import com.qmth.distributed.print.business.service.TRBasicInfoService;
+import com.qmth.distributed.print.business.service.TRExamStudentService;
 import com.qmth.teachcloud.common.entity.BasicSemester;
 import com.qmth.teachcloud.common.service.BasicSemesterService;
 import com.qmth.teachcloud.common.util.GsonUtil;
@@ -24,6 +26,7 @@ import com.qmth.teachcloud.mark.utils.Calculator;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
+import org.springframework.util.LinkedMultiValueMap;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
@@ -46,9 +49,6 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
     @Resource
     TCFinalScoreService tcFinalScoreService;
 
-    @Resource
-    BasicExamService basicExamService;
-
     @Resource
     BasicSemesterService basicSemesterService;
 
@@ -110,6 +110,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         Map<String, PaperStructResult> paperStructResultMap = null;//试卷蓝图map
         Map<Long, CourseTargetWeightDto> targetMap = null;
 
+        LinkedMultiValueMap<Long, DimensionDto> targetDimensionMap = new LinkedMultiValueMap<>();//课程目标知识点
         if (!CollectionUtils.isEmpty(finalScoreResultList)) {
             //期末成绩明细map
             paperStructResultMap = paperStructResultList.stream().collect(Collectors.toMap(k -> k.getMainNumber() + "-" + k.getSubNumber(), Function.identity(), (dto1, dto2) -> dto1));
@@ -128,7 +129,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                         List<CourseTargetDto> courseTargetDtoList = paperStructResult.getTargetList();
 
                         for (CourseTargetDto courseTargetDto : courseTargetDtoList) {
-                            targetMap.put(courseTargetDto.getTargetId(), new CourseTargetWeightDto(courseTargetDto.getTargetId(), courseTargetDto.getTargetName()));
+                            targetMap.put(courseTargetDto.getTargetId(), new CourseTargetWeightDto(courseTargetDto));
 
                             //课程目标
                             if (!finalScoreTargetMap.containsKey(courseTargetDto.getTargetId())) {
@@ -141,6 +142,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                             //知识点
                             List<DimensionDto> dimensionDtoList = courseTargetDto.getDimensionList();
                             for (DimensionDto dimensionDto : dimensionDtoList) {
+                                targetDimensionMap.add(courseTargetDto.getTargetId(), dimensionDto);
                                 //考生知识点
                                 if (!finalScoreExamStudentDimensionMap.containsKey(finalScoreResult.getStudentCode())) {
                                     Map<Long, Map<Long, DimensionDto>> map = new LinkedHashMap<>();
@@ -278,7 +280,8 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
             List<CourseTargetDto> targetList = new ArrayList<>(targetMap.size());
             AtomicReference<Double> targetValue = new AtomicReference<>(0.0d);
             targetMap.forEach((k, v) -> {
-                Double evaluationValue = 0.0d;
+                Double evaluationAvg = 0.0d, evaluationScore = 0.0d;
+                BigDecimal evaluationWeight = new BigDecimal(0);
                 List<ReportEvaluationDto> reportEvaluationDtoList = new ArrayList<>();
                 if (!CollectionUtils.isEmpty(usualScoreOverviewDtoMap)) {
                     UsualScoreOverviewDto usualScoreOverviewDto = usualScoreOverviewDtoMap.get("作业" + k);
@@ -287,8 +290,9 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
 
                     //课程目标-平时作业达成度计算
                     if (Objects.nonNull(reportEvaluationDto.getWeight()) && reportEvaluationDto.getWeight().doubleValue() > 0d) {
-                        Double evaluationValueTemp = new BigDecimal(reportEvaluationDto.getAvg().doubleValue() + reportEvaluationDto.getScore().doubleValue()).divide(reportEvaluationDto.getWeight(), 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-                        evaluationValue = evaluationValue.doubleValue() + evaluationValueTemp.doubleValue();
+                        evaluationAvg = evaluationAvg.doubleValue() + reportEvaluationDto.getAvg();
+                        evaluationScore = evaluationScore.doubleValue() + reportEvaluationDto.getScore();
+                        evaluationWeight = evaluationWeight.add(reportEvaluationDto.getWeight());
                         Map<String, BigDecimal> usualScoreWeight = v.getUsualScoreWeight();
                         usualScoreWeight = CollectionUtils.isEmpty(usualScoreWeight) ? new LinkedHashMap<>() : usualScoreWeight;
                         usualScoreWeight.put(reportEvaluationDto.getName(), reportEvaluationDto.getWeight().add(new BigDecimal(new Random().nextInt(10))));
@@ -302,15 +306,17 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
 
                     //课程目标-期末成绩达成度计算
                     if (Objects.nonNull(reportEvaluationDto1.getWeight()) && reportEvaluationDto1.getWeight().doubleValue() > 0d) {
-                        Double evaluationValueTemp = new BigDecimal(reportEvaluationDto1.getAvg().doubleValue() + reportEvaluationDto1.getScore().doubleValue()).divide(reportEvaluationDto1.getWeight(), 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-                        evaluationValue = evaluationValue.doubleValue() + evaluationValueTemp.doubleValue();
+                        evaluationAvg = evaluationAvg.doubleValue() + reportEvaluationDto1.getAvg();
+                        evaluationScore = evaluationScore.doubleValue() + reportEvaluationDto1.getScore();
+                        evaluationWeight = evaluationWeight.add(reportEvaluationDto1.getWeight());
                         v.setFinalScoreWeight(reportEvaluationDto1.getWeight().subtract(new BigDecimal(new Random().nextInt(10))));
                     }
                 }
+                Double evaluationValue = new BigDecimal(evaluationAvg).add(new BigDecimal(evaluationScore)).divide(evaluationWeight, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
 
                 CourseTargetDto courseTargetDto = new CourseTargetDto(k, v.getTargetName(), k, "评价方式" + k, "评价方式描述" + k, reportEvaluationDtoList, evaluationValue);
                 targetList.add(courseTargetDto);
-                targetValue.set(targetValue.get().doubleValue() + courseTargetDto.getEvaluationValue().doubleValue());
+                targetValue.set(new BigDecimal(targetValue.get()).add(new BigDecimal(courseTargetDto.getEvaluationValue())).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
             });
             Collections.sort(targetList);
             reportCourseEvaluationResultDto = new ReportCourseEvaluationResultDto("测试课程总目标1", targetValue.get(), targetList);
@@ -329,10 +335,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
     @Override
     @Transactional
     public TRBasicInfo getReportView(TRBasicInfo trBasicInfo, MarkPaper markPaper, Long userId) {
-        BasicExam basicExam = basicExamService.getById(markPaper.getExamId());
-        Objects.requireNonNull(basicExam, "未找到考试信息");
-
-        BasicSemester basicSemester = basicSemesterService.getById(basicExam.getSemesterId());
+        BasicSemester basicSemester = basicSemesterService.selectByExamId(markPaper.getExamId());
         Objects.requireNonNull(basicSemester, "未找到学期信息");
 
         //TODO 有测试数据,待肖飞补充授课对象和任课老师数据

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

@@ -105,7 +105,7 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
             }
             //加入平均分
             Double avgScore = new BigDecimal(examStudentList.stream().mapToDouble(ReportExamStudentDto::getScore).average().orElse(0d)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-            ReportExamStudentDto reportExamStudentDto = new ReportExamStudentDto("平均分", "平均分", avgScore);
+            ReportExamStudentDto reportExamStudentDto = new ReportExamStudentDto("平均分", "平均分", examStudentList.get(0).getAdministrativeClass(), avgScore);
             List<ReportExamStudentTargetDto> reportExamStudentTargetDtoList = new ArrayList<>();
             reportExamStudentTargetDtoList.addAll(examStudentList.get(0).getTargetList());
 

+ 3 - 1
distributed-print-business/src/main/resources/mapper/TCFinalScoreMapper.xml

@@ -59,9 +59,11 @@
             tcfs.student_code as studentCode,
             tcfs.score as finalScore,
             tcfs.score_detail as finalScoreDetail,
-            tcus.score as usualScore
+            tcus.score as usualScore,
+            es.teach_clazz_name as administrativeClass
         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
+        join exam_student es on es.exam_id = tcfs.exam_id and es.paper_number = tcfs.paper_number and es.student_code = tcfs.student_code
         <where>
             <if test="examId != null and examId != ''">
                 and tcfs.exam_id = #{examId}

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

@@ -1,5 +1,6 @@
 package com.qmth.distributed.print.api;
 
+import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -97,15 +98,8 @@ public class TRBasicInfoController {
             trBasicInfo = trBasicInfoService.getReportView(trBasicInfo, markPaper, sysUser.getId());
         } else {
             ReportCourseBasicInfoDto reportCourseBasicInfoDto = new ReportCourseBasicInfoDto(trBasicInfo);
-            ReportCourseEvaluationSpreadDto reportCourseEvaluationSpreadDto = null;
-            if (Objects.nonNull(trBasicInfo.getCourseEvaluationSpread())) {
-                reportCourseEvaluationSpreadDto = JSONObject.parseObject(trBasicInfo.getCourseEvaluationSpread(), ReportCourseEvaluationSpreadDto.class);
-            }
-            ReportCourseEvaluationResultDto reportCourseEvaluationResultDto = null;
-            if (Objects.nonNull(trBasicInfo.getCourseEvaluationResult())) {
-                reportCourseEvaluationResultDto = JSONObject.parseObject(trBasicInfo.getCourseEvaluationResult(), ReportCourseEvaluationResultDto.class);
-            }
-
+            ReportCourseEvaluationSpreadDto reportCourseEvaluationSpreadDto = Objects.nonNull(trBasicInfo.getCourseEvaluationSpread()) ? JSONObject.parseObject(trBasicInfo.getCourseEvaluationSpread(), ReportCourseEvaluationSpreadDto.class) : null;
+            ReportCourseEvaluationResultDto reportCourseEvaluationResultDto = Objects.nonNull(trBasicInfo.getCourseEvaluationResult()) ? JSONObject.parseObject(trBasicInfo.getCourseEvaluationResult(), ReportCourseEvaluationResultDto.class) : null;
             ReportCourseEvaluationResultDetailDto reportCourseEvaluationResultDetailDto = null;
             List<TRExamStudent> trExamStudentList = trExamStudentService.list(new QueryWrapper<TRExamStudent>().lambda().eq(TRExamStudent::getrBasicInfoId, trBasicInfo.getId()));
             if (!CollectionUtils.isEmpty(trExamStudentList)) {
@@ -157,15 +151,22 @@ public class TRBasicInfoController {
         TRBasicInfo trBasicInfo = trBasicInfoService.getOne(new QueryWrapper<TRBasicInfo>().lambda().eq(TRBasicInfo::getExamId, examId).eq(TRBasicInfo::getCourseCode, courseCode).eq(TRBasicInfo::getPaperNumber, paperNumber));
         Objects.requireNonNull(trBasicInfo, "没有报告信息");
 
-        CourseBasicBean courseBasicBean = new CourseBasicBean("启明科目",
-                "qmth", "qm", "自营", "10/2.0", "10/0", "光谷梦工厂", "理想", "2024年1月30日", "我们的目标是没有目标", "2");
-        CourseReportBean courseReportBean = new CourseReportBean("2022-2023(2)学期《测试输出报告》", courseBasicBean);
+        String period = Objects.nonNull(trBasicInfo.getPeriod()) ? trBasicInfo.getPeriod() : null;
+        String credit = Objects.nonNull(trBasicInfo.getCredit()) ? trBasicInfo.getCredit() : null;
+        if (Objects.nonNull(credit)) {
+            period = period + "/" + credit;
+        }
+        ReportCourseEvaluationResultDto reportCourseEvaluationResultDto = Objects.nonNull(trBasicInfo.getCourseEvaluationResult()) ? JSONObject.parseObject(trBasicInfo.getCourseEvaluationResult(), ReportCourseEvaluationResultDto.class) : null;
+        CourseBasicBean courseBasicBean = new CourseBasicBean(trBasicInfo.getCourseName(),
+                trBasicInfo.getCourseCode(), null, trBasicInfo.getCourseType(), period, null, null, trBasicInfo.getDirector(), DateUtil.format(new Date(trBasicInfo.getCreateTime()), SystemConstant.DEFAULT_DATE_PATTERN), "测试:我们的目标是没有目标", Objects.nonNull(reportCourseEvaluationResultDto) && !CollectionUtils.isEmpty(reportCourseEvaluationResultDto.getTargetList()) ? reportCourseEvaluationResultDto.getTargetList().size() : null);
+
+        CourseReportBean courseReportBean = new CourseReportBean(trBasicInfo.getOpenTime() + "《测试输出报告》", courseBasicBean);
 
         //table1
         RowRenderData header1 = Rows.of("课程目标", "毕业要求指标点").bgColor("F2F2F2").center().create();
         Tables.TableBuilder tableBuilder1 = Tables.ofPercentWidth("100%");
-        Map<String, Integer> courseTargetMap = new LinkedHashMap<>();
         tableBuilder1.addRow(header1);
+        Map<String, Integer> courseTargetMap = new LinkedHashMap<>();
         for (int i = 0; i < 2; i++) {
             CourseTargetTableBean1 courseTargetTableBean1 = new CourseTargetTableBean1("课程目标" + (i + 1), "完成目标" + (i + 1));
             RowRenderData row = Rows.of(courseTargetTableBean1.getName(), courseTargetTableBean1.getTarget()).rowStyle(this.getRowStyle()).create();