wangliang 1 жил өмнө
parent
commit
4e7f0765c9

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

@@ -58,14 +58,11 @@ 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();
+        setValue(courseTargetDto);
     }
 
     public CourseTargetWeightDto(Long targetId, String targetName, Map<String, BigDecimal> usualScoreWeight, BigDecimal finalScoreWeight) {
@@ -75,6 +72,16 @@ public class CourseTargetWeightDto implements Serializable {
         this.finalScoreWeight = finalScoreWeight;
     }
 
+    public void setValue(CourseTargetDto courseTargetDto) {
+        this.evaluationId = courseTargetDto.getEvaluationId();
+        this.evaluation = courseTargetDto.getEvaluation();
+        this.evaluationDesc = courseTargetDto.getEvaluationDesc();
+    }
+
+    public void updateInfo(CourseTargetDto courseTargetDto) {
+        setValue(courseTargetDto);
+    }
+
     public String getGraduationRequirement() {
         return graduationRequirement;
     }

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

@@ -4,6 +4,7 @@ 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 org.jetbrains.annotations.NotNull;
 
 import java.io.Serializable;
 
@@ -15,7 +16,7 @@ import java.io.Serializable;
  * @Date: 2024/2/26
  */
 @JsonInclude(JsonInclude.Include.NON_NULL)
-public class DimensionDto implements Serializable {
+public class DimensionDto implements Serializable, Comparable<DimensionDto> {
 
     @JsonSerialize(using = ToStringSerializer.class)
     @ApiModelProperty(value = "知识点id")
@@ -41,13 +42,6 @@ public class DimensionDto implements Serializable {
         this.dimensionScore = dimensionScore;
     }
 
-    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;
     }
@@ -79,4 +73,9 @@ public class DimensionDto implements Serializable {
     public void setDimensionScore(Double dimensionScore) {
         this.dimensionScore = dimensionScore;
     }
+
+    @Override
+    public int compareTo(@NotNull DimensionDto o) {
+        return this.getDimensionCode().compareTo(o.getDimensionCode());
+    }
 }

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

@@ -26,7 +26,6 @@ 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;
@@ -104,13 +103,13 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         Map<Long, List<Double>> finalScoreTargetMap = new LinkedHashMap<>();//汇总各课程目标期末考试分数(用来算最高分,最低分,平均分)
         Map<String, Map<Long, Map<Long, DimensionDto>>> finalScoreExamStudentDimensionMap = new LinkedHashMap<>();//汇总考生课程目标-知识点
         Map<Long, Map<Long, DimensionDto>> finalScoreExamStudentDimensionSumMap = new LinkedHashMap<>();//汇总考生课程目标-知识点总分
+        Map<Long, Map<Long, DimensionDto>> targetDimensionMap = new LinkedHashMap<>();//课程目标-知识点
 
         List<ReportExamStudentDto> examStudentList = null;//考生集合
         Map<String, FinalScoreResult> finalScoreResultMap = null;//考生成绩map
         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));
@@ -142,7 +141,6 @@ 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<>();
@@ -173,11 +171,17 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                                 if (!finalScoreExamStudentDimensionSumMap.containsKey(courseTargetDto.getTargetId())) {
                                     Map<Long, DimensionDto> dimensionMap = new LinkedHashMap<>();
                                     dimensionMap.put(dimensionDto.getDimensionId(), new DimensionDto(dimensionDto, score));
+                                    Map<Long, DimensionDto> dimensionTempMap = new LinkedHashMap<>();
+                                    dimensionTempMap.put(dimensionDto.getDimensionId(), new DimensionDto(dimensionDto, score));
                                     finalScoreExamStudentDimensionSumMap.put(courseTargetDto.getTargetId(), dimensionMap);
+                                    targetDimensionMap.put(courseTargetDto.getTargetId(), dimensionTempMap);
                                 } else {
                                     Map<Long, DimensionDto> dimensionMap = finalScoreExamStudentDimensionSumMap.get(courseTargetDto.getTargetId());
                                     if (!dimensionMap.containsKey(dimensionDto.getDimensionId())) {
                                         dimensionMap.put(dimensionDto.getDimensionId(), new DimensionDto(dimensionDto, score));
+                                        Map<Long, DimensionDto> dimensionTempMap = targetDimensionMap.get(courseTargetDto.getTargetId());
+                                        dimensionTempMap.put(dimensionDto.getDimensionId(), new DimensionDto(dimensionDto, score));
+                                        targetDimensionMap.put(courseTargetDto.getTargetId(), dimensionTempMap);
                                     } else {
                                         DimensionDto dimensionDtoTemp = dimensionMap.get(dimensionDto.getDimensionId());
                                         dimensionDtoTemp.setDimensionScore(dimensionDtoTemp.getDimensionScore().doubleValue() + score.doubleValue());
@@ -209,6 +213,13 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
             }
         }
 
+        Map<Long, CourseTargetWeightDto> finalTargetMap = targetMap;
+        targetDimensionMap.forEach((k, v) -> {
+            List<DimensionDto> dimensionDtoList = new ArrayList<>(v.values());
+            Collections.sort(dimensionDtoList);
+            finalTargetMap.get(k).setDimensionList(dimensionDtoList);
+        });
+
         paramsMap.put("finalScoreResultList", finalScoreResultList);
         paramsMap.put("usualScoreMap", usualScoreMap);
         paramsMap.put("finalScoreTargetMap", finalScoreTargetMap);
@@ -316,6 +327,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
 
                 CourseTargetDto courseTargetDto = new CourseTargetDto(k, v.getTargetName(), k, "评价方式" + k, "评价方式描述" + k, reportEvaluationDtoList, evaluationValue);
                 targetList.add(courseTargetDto);
+                v.updateInfo(courseTargetDto);
                 targetValue.set(new BigDecimal(targetValue.get()).add(new BigDecimal(courseTargetDto.getEvaluationValue())).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
             });
             Collections.sort(targetList);
@@ -377,6 +389,10 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         if (Objects.nonNull(reportCourseEvaluationResultDetailDto)) {
             trBasicInfo.getReportResult().setCourseEvaluationResultDetailInfo(reportCourseEvaluationResultDetailDto);
         }
+        if (Objects.nonNull(paramsMap.get("targetMap"))) {
+            Map<Long, CourseTargetWeightDto> targetMap = (Map<Long, CourseTargetWeightDto>) paramsMap.get("targetMap");
+            trBasicInfo.setCourseEvaluationResultDetail(JacksonUtil.parseJson(targetMap));
+        }
 
         trBasicInfo.getReportResult().setCommonInfo(new ReportCommonDto(markPaper.getExamId(), markPaper.getCourseCode(), markPaper.getCourseName(), markPaper.getPaperNumber()));
         return trBasicInfo;

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

@@ -115,7 +115,6 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
             List<DimensionDto> dimensionFinalScoreDtoList = finalScoreAvgDto.getDimensionList();
             for (DimensionDto dimensionFinalScoreDto : dimensionFinalScoreDtoList) {
                 if (dimensionFinalScoreDtoMap.containsKey(dimensionFinalScoreDto.getDimensionId())) {
-                    DimensionDto dimensionDto = dimensionFinalScoreDtoMap.get(dimensionFinalScoreDto.getDimensionId());
                     Double avg = new BigDecimal(dimensionFinalScoreDto.getDimensionScore()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
                     dimensionFinalScoreDto.setDimensionScore(avg);
                 } else {
@@ -135,6 +134,7 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
                 }
             }
             reportExamStudentDto.setTargetList(reportExamStudentTargetDtoList);
+            examStudentList.get(0).setTargetList(JSONArray.parseArray(trExamStudentList.get(0).getResultDetail(), ReportExamStudentTargetDto.class));
             examStudentList.add(reportExamStudentDto);
 
             trExamStudentList.add(new TRExamStudent(trBasicInfo.getId(), reportExamStudentDto));