From aaa06da62ab531f622bb2a2603d270e2bd61eb3d Mon Sep 17 00:00:00 2001
From: xiaoCJ <406612557@qq.com>
Date: Fri, 22 Nov 2024 17:05:13 +0800
Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=80=81=E5=B8=88=E7=AB=AF?=
 =?UTF-8?q?=E7=BB=83=E4=B9=A0=E6=A8=A1=E5=BC=8F=E7=AE=97=E5=88=86=E6=8E=A5?=
 =?UTF-8?q?=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../controller/stu/StuScoreController.java    |  97 +-------
 .../tea/TeaGradeManageController.java         |  77 ++++++-
 .../financial_bigdata/entity/StuUser.java     |   3 +
 .../entity/stu_dto/StuTrainingDto.java        |   3 +-
 .../service/stu/StuScoreService.java          |  15 ++
 .../service/stu/impl/StuScoreServiceImpl.java | 212 ++++++++++++++++++
 6 files changed, 314 insertions(+), 93 deletions(-)
 create mode 100644 src/main/java/com/sztzjy/financial_bigdata/service/stu/StuScoreService.java
 create mode 100644 src/main/java/com/sztzjy/financial_bigdata/service/stu/impl/StuScoreServiceImpl.java

diff --git a/src/main/java/com/sztzjy/financial_bigdata/controller/stu/StuScoreController.java b/src/main/java/com/sztzjy/financial_bigdata/controller/stu/StuScoreController.java
index 86ee03f..8403239 100644
--- a/src/main/java/com/sztzjy/financial_bigdata/controller/stu/StuScoreController.java
+++ b/src/main/java/com/sztzjy/financial_bigdata/controller/stu/StuScoreController.java
@@ -9,6 +9,7 @@ import com.sztzjy.financial_bigdata.mapper.StuTrainingMapper;
 import com.sztzjy.financial_bigdata.mapper.SysWeightMapper;
 import com.sztzjy.financial_bigdata.mapper.TrainingReportMapper;
 import com.sztzjy.financial_bigdata.resourceCenterAPI.CourseAPI;
+import com.sztzjy.financial_bigdata.service.stu.StuScoreService;
 import com.sztzjy.financial_bigdata.service.tea.ITeaGradeManageService;
 import com.sztzjy.financial_bigdata.util.ResultEntity;
 import com.sztzjy.financial_bigdata.util.file.IFileUtil;
@@ -45,7 +46,10 @@ public class StuScoreController {
     @Autowired
     private StuTrainingMapper stuTrainingMapper;
     @Autowired
-    ITeaGradeManageService gradeManageService;
+    private ITeaGradeManageService gradeManageService;
+    @Autowired
+    private StuScoreService stuScoreService;
+
 
     @AnonymousAccess
     @ApiOperation("***得分情况展示")
@@ -54,107 +58,26 @@ public class StuScoreController {
                                                      @RequestParam String chapterId,
                                                      @RequestParam String schoolId,
                                                      @RequestParam String systemOwner) {
+        StuTrainingDto stuTrainingDto = new StuTrainingDto();
+
         StuTrainingExample stuTrainingExample = new StuTrainingExample();
         stuTrainingExample.createCriteria().andUserIdEqualTo(userId).andChapterIdEqualTo(chapterId);
         List<StuTrainingWithBLOBs> stuTrainings = stuTrainingMapper.selectByExampleWithBLOBs(stuTrainingExample);
-
-        StuTrainingDto stuTrainingDto = new StuTrainingDto();
-
         //根据章节ID拿到课程ID 再去拿权重
-            SysThreeCatalog sysCourseChapter = null;
+        SysThreeCatalog sysCourseChapter = null;
         try {
             sysCourseChapter = CourseAPI.selectChapterByChapterId(chapterId);
         } catch (IOException e) {
             return new ResultEntity<>(HttpStatus.BAD_REQUEST, "资源中心根据章节ID查询章节信息失败");
         }
-        SysWeightExample sysWeightExample = new SysWeightExample();
-        sysWeightExample.createCriteria().andCourseIdEqualTo(sysCourseChapter.getTwoId()).andSchoolIdEqualTo(schoolId).andSystemOwnerEqualTo(systemOwner);
-        List<SysWeight> sysWeights = sysWeightMapper.selectByExample(sysWeightExample);
-        if (!sysWeights.isEmpty()) {
-            SysWeight sysWeight = sysWeights.get(0);
-            BeanUtils.copyProperties(sysWeight, stuTrainingDto);  //五个权重
-        }else {
-            //设置默认权重
-            stuTrainingDto.setKnowledgeSummaryDefaultRule(BigDecimal.valueOf(60)); //知识概要默认计分规则 阅读1分钟得60分,1分钟以下不得分,多1分钟加10分。
-            stuTrainingDto.setResourceLearningDefaultRule(BigDecimal.valueOf(60)); //资源学习默认计分规则 观看资源1分钟得60分,1分钟以下不得分,多1分钟加10分。
-            stuTrainingDto.setLearningEvalDefaultRule(BigDecimal.valueOf(10)); //学习测评默认计分规则 客观题10分每道
-            stuTrainingDto.setExpTrainingDefautRule(BigDecimal.valueOf(2));//实训题,输错/选错次数扣2分,最低0分
-            stuTrainingDto.setKnowledgeSummaryWeight(BigDecimal.valueOf(5));
-            stuTrainingDto.setResourceLearningWeight(BigDecimal.valueOf(5));
-            stuTrainingDto.setLearningEvalWeight(BigDecimal.valueOf(20));
-            stuTrainingDto.setExpTrainingWeight(BigDecimal.valueOf(60));
-            stuTrainingDto.setReportWeight(BigDecimal.valueOf(10));
-        }
         if (!stuTrainings.isEmpty()) {
             StuTrainingWithBLOBs stuTrainingWithBLOBs = stuTrainings.get(0);
-            BeanUtils.copyProperties(stuTrainingWithBLOBs, stuTrainingDto); //四个完成情况和四个得分
-            //知识概要得分
-            Integer knowledgeSummaryCompleteStatus=0;
-            BigDecimal knowledgeSummaryScore=BigDecimal.ZERO;
-            if(stuTrainingWithBLOBs.getKnowledgeSummaryCompleteStatus()!=null && stuTrainingWithBLOBs.getKnowledgeSummaryCompleteStatus()!=0){
-                knowledgeSummaryCompleteStatus=stuTrainingWithBLOBs.getKnowledgeSummaryCompleteStatus();
-                knowledgeSummaryScore=stuTrainingDto.getKnowledgeSummaryDefaultRule().add(BigDecimal.valueOf((knowledgeSummaryCompleteStatus-1)*10));
-                if(knowledgeSummaryScore.compareTo(BigDecimal.valueOf(100))>0){
-                    knowledgeSummaryScore= BigDecimal.valueOf(100);
-                }
-                knowledgeSummaryScore=knowledgeSummaryScore.multiply(stuTrainingDto.getKnowledgeSummaryWeight().divide(BigDecimal.valueOf(100),2,BigDecimal.ROUND_HALF_UP));
-            }
-            stuTrainingDto.setKnowledgeSummaryScore(knowledgeSummaryScore);
-            //资源学习得分
-            Integer resourceLearningCompleteStatus=0;
-            BigDecimal resourceLearningScore=BigDecimal.ZERO;
-            if(stuTrainingWithBLOBs.getResourceLearningCompleteStatus()!=null && stuTrainingWithBLOBs.getResourceLearningCompleteStatus()!=0){
-                resourceLearningCompleteStatus=stuTrainingWithBLOBs.getResourceLearningCompleteStatus();
-                resourceLearningScore=stuTrainingDto.getResourceLearningDefaultRule().add(BigDecimal.valueOf((resourceLearningCompleteStatus-1)*10));
-                if(resourceLearningScore.compareTo(BigDecimal.valueOf(100))>0){
-                    resourceLearningScore= BigDecimal.valueOf(100);
-                }
-                resourceLearningScore=resourceLearningScore.multiply(stuTrainingDto.getResourceLearningWeight().divide(BigDecimal.valueOf(100),2,BigDecimal.ROUND_HALF_UP));
-            }
-            stuTrainingDto.setResourceLearningScore(resourceLearningScore);
-
-            //学习评测得分
-            Integer learningEvalCompleteStatus=0;
-            BigDecimal learningEvalScore=BigDecimal.ZERO;
-            if(stuTrainingWithBLOBs.getLearningEvalCompleteStatus()!=null){
-                learningEvalCompleteStatus=stuTrainingWithBLOBs.getLearningEvalCompleteStatus();
-                learningEvalScore = BigDecimal.valueOf(100).subtract(stuTrainingDto.getLearningEvalDefaultRule().multiply(BigDecimal.valueOf(learningEvalCompleteStatus)));
-                if(learningEvalScore.compareTo(BigDecimal.valueOf(0))<0){
-                    learningEvalScore= BigDecimal.valueOf(0);
-                }
-                stuTrainingDto.setLearningEvalScore(learningEvalScore.multiply(stuTrainingDto.getLearningEvalWeight().divide(BigDecimal.valueOf(100),2,BigDecimal.ROUND_HALF_UP)));
-            }else {
-                stuTrainingDto.setLearningEvalScore(learningEvalScore);
-            }
-
-            //实验实训分数计算
-            Integer expTrainingCompleteStatus=0;
-            BigDecimal expTrainingScore=BigDecimal.ZERO;
-            if(stuTrainingWithBLOBs.getExpTrainingCompleteStatus()!=null){
-                expTrainingCompleteStatus=stuTrainingWithBLOBs.getExpTrainingCompleteStatus();
-                expTrainingScore = BigDecimal.valueOf(100).subtract(stuTrainingDto.getExpTrainingDefautRule().multiply(BigDecimal.valueOf(expTrainingCompleteStatus)));
-                if(expTrainingScore.compareTo(BigDecimal.valueOf(0))<0){
-                    expTrainingScore= BigDecimal.valueOf(0);
-                }
-                stuTrainingDto.setCaseStuScore(expTrainingScore.multiply(stuTrainingDto.getExpTrainingWeight().divide(BigDecimal.valueOf(100),2,BigDecimal.ROUND_HALF_UP)));
-            }else {
-                stuTrainingDto.setCaseStuScore(expTrainingScore);
-            }
-
-
-            TrainingReport trainingReport = trainingReportMapper.selectByPrimaryKey(stuTrainingWithBLOBs.getReportId());
-            //设置报告相关数据
-            if (trainingReport == null || trainingReport.getTeacherScore() == null) {
-                stuTrainingDto.setReportCompleteStatus("未提交");
-                stuTrainingDto.setReportScore(null);
-            } else {
-                stuTrainingDto.setReportCompleteStatus("已提交");
-                stuTrainingDto.setReportScore(trainingReport.getTeacherScore());
-            }
+            stuTrainingDto = stuScoreService.getScoreByChapterId(schoolId, systemOwner, stuTrainingWithBLOBs, stuTrainingDto, sysCourseChapter);
         }
         return new ResultEntity<StuTrainingDto>(stuTrainingDto);
     }
 
+
     @AnonymousAccess
     @ApiOperation("实验报告展示")
     @PostMapping("getReportByUserId")
diff --git a/src/main/java/com/sztzjy/financial_bigdata/controller/tea/TeaGradeManageController.java b/src/main/java/com/sztzjy/financial_bigdata/controller/tea/TeaGradeManageController.java
index 77030b1..9d508a3 100644
--- a/src/main/java/com/sztzjy/financial_bigdata/controller/tea/TeaGradeManageController.java
+++ b/src/main/java/com/sztzjy/financial_bigdata/controller/tea/TeaGradeManageController.java
@@ -6,14 +6,17 @@ import com.github.pagehelper.PageInfo;
 import com.sztzjy.financial_bigdata.annotation.AnonymousAccess;
 import com.sztzjy.financial_bigdata.entity.*;
 import com.sztzjy.financial_bigdata.entity.resource_entity.SysObjectiveQuestions;
+import com.sztzjy.financial_bigdata.entity.resource_entity.SysThreeCatalog;
 import com.sztzjy.financial_bigdata.entity.resource_entity.SysTwoCatalog;
 import com.sztzjy.financial_bigdata.entity.resource_entity.TestTestSysCaseQuestionStepWithBLOBs;
+import com.sztzjy.financial_bigdata.entity.stu_dto.StuTrainingDto;
 import com.sztzjy.financial_bigdata.entity.stu_dto.StuUserDto;
 import com.sztzjy.financial_bigdata.entity.tea_dto.*;
 import com.sztzjy.financial_bigdata.mapper.*;
 import com.sztzjy.financial_bigdata.resourceCenterAPI.CaseApi;
 import com.sztzjy.financial_bigdata.resourceCenterAPI.CourseAPI;
 import com.sztzjy.financial_bigdata.resourceCenterAPI.ObjectiveApi;
+import com.sztzjy.financial_bigdata.service.stu.StuScoreService;
 import com.sztzjy.financial_bigdata.service.tea.ITeaGradeManageService;
 import com.sztzjy.financial_bigdata.service.tea.impl.TeaGradeManageServiceImpl;
 import com.sztzjy.financial_bigdata.util.PageUtil;
@@ -71,6 +74,11 @@ public class TeaGradeManageController {
     private SysWeightMapper sysWeightMapper;
     @Autowired
     private StuTheoryExamMapper stuTheoryExamMapper;
+    @Autowired
+    private StuTrainingMapper stuTrainingMapper;
+    @Autowired
+    StuScoreService stuScoreService;
+
 
     @AnonymousAccess
     @PostMapping("/getExamInfo")
@@ -94,7 +102,7 @@ public class TeaGradeManageController {
         }
 
         //存储用户信息
-        StuUserExample example =new StuUserExample();
+        StuUserExample example = new StuUserExample();
         example.createCriteria().andSystemOnwerEqualTo(systemOwner).andZyUseridIn(userIds);
         List<StuUser> stuUsers = userMapper.selectByExample(example);
         for (StuUser stuUser : stuUsers) {
@@ -363,8 +371,7 @@ public class TeaGradeManageController {
         }
         // 构建班级ID列表
         List<String> classIds = stuUsers.stream()
-                .map(StuUser::getClassId)
-                .collect(Collectors.toList());
+                .map(StuUser::getClassId).distinct().collect(Collectors.toList());
 
         // 批量查询学生分数
         StuStudentExamExample studentExamExample = new StuStudentExamExample();
@@ -397,7 +404,7 @@ public class TeaGradeManageController {
             teaExamAndUserDto.setName(stuUser.getName());
             teaExamAndUserDto.setStudentId(stuUser.getStudentId());
             // 从映射关系中获取班级对象
-            if (classMap.get(stuUser.getClassId())==null){
+            if (classMap.get(stuUser.getClassId()) == null) {
                 continue;
             }
             StuClass classdata = classMap.get(stuUser.getClassId());
@@ -614,7 +621,6 @@ public class TeaGradeManageController {
     }
 
 
-
     @AnonymousAccess
     @PostMapping("/getTheoryInfo")
     @ApiOperation("理论考试--页面展示")
@@ -653,6 +659,67 @@ public class TeaGradeManageController {
         return new ResultEntity<>(pageInfo);
     }
 
+//
+//    @AnonymousAccess
+//    @ApiOperation("老师端/练习模式得分详情展示")
+//    @PostMapping("getScoreInfo")
+//    public ResultEntity<List<StuTrainingDto>> getScoreInfo(@RequestParam String userId,
+//                                                           @RequestParam String schoolId,
+//                                                           @RequestParam String systemOwner) {
+//        List<StuTrainingDto> list = new ArrayList<>();
+//
+//        StuTrainingExample stuTrainingExample = new StuTrainingExample();
+//        stuTrainingExample.createCriteria().andUserIdEqualTo(userId);
+//        List<StuTrainingWithBLOBs> stuTrainings = stuTrainingMapper.selectByExampleWithBLOBs(stuTrainingExample);
+//        //根据章节ID拿到课程ID 再去拿权重
+//        try {
+//            for (StuTrainingWithBLOBs stuTraining : stuTrainings) {
+//                StuTrainingDto stuTrainingDto = new StuTrainingDto();
+//                String chapterId = stuTraining.getChapterId();
+//                SysThreeCatalog sysCourseChapter = CourseAPI.selectChapterByChapterId(chapterId);
+//                stuTrainingDto.setTaskModule(sysCourseChapter.getThreeName());
+//                stuTrainingDto = stuScoreService.getScoreByChapterId(schoolId, systemOwner, stuTraining, stuTrainingDto, sysCourseChapter);
+//                list.add(stuTrainingDto);
+//            }
+//        } catch (IOException e) {
+//            return new ResultEntity<>(HttpStatus.BAD_REQUEST, "资源中心根据章节ID查询章节信息失败");
+//        }
+//        return new ResultEntity<>(list);
+//    }
+
+    @AnonymousAccess
+    @ApiOperation("老师端/练习模式得分详情展示")
+    @PostMapping("getScoreInfo")
+    public ResultEntity<List<StuTrainingDto>> getScoreInfo(@RequestParam String userId,
+                                                           @RequestParam String schoolId,
+                                                           @RequestParam String systemOwner) {
+        List<StuTrainingDto> list = new ArrayList<>();
+
+        StuTrainingExample stuTrainingExample = new StuTrainingExample();
+        stuTrainingExample.createCriteria().andUserIdEqualTo(userId);
+        List<StuTrainingWithBLOBs> stuTrainings = stuTrainingMapper.selectByExampleWithBLOBs(stuTrainingExample);
+
+        Map<String, SysThreeCatalog> chapterMap = new HashMap<>();
+
+        try {
+            for (StuTrainingWithBLOBs stuTraining : stuTrainings) {
+                String chapterId = stuTraining.getChapterId();
+                SysThreeCatalog sysCourseChapter = chapterMap.get(chapterId);
+                if (sysCourseChapter == null) {
+                    sysCourseChapter = CourseAPI.selectChapterByChapterId(chapterId);
+                    chapterMap.put(chapterId, sysCourseChapter);
+                }
+                StuTrainingDto stuTrainingDto = new StuTrainingDto();
+                stuTrainingDto.setTaskModule(sysCourseChapter.getThreeName());
+                list.add(stuScoreService.getScoreByChapterId(schoolId, systemOwner, stuTraining, stuTrainingDto, sysCourseChapter));
+            }
+        } catch (IOException e) {
+            return new ResultEntity<>(HttpStatus.BAD_REQUEST, "资源中心根据章节ID查询章节信息失败");
+        }
+        return new ResultEntity<>(list);
+    }
+
+
 
 }
 
diff --git a/src/main/java/com/sztzjy/financial_bigdata/entity/StuUser.java b/src/main/java/com/sztzjy/financial_bigdata/entity/StuUser.java
index 242a63a..fb8dec1 100644
--- a/src/main/java/com/sztzjy/financial_bigdata/entity/StuUser.java
+++ b/src/main/java/com/sztzjy/financial_bigdata/entity/StuUser.java
@@ -3,12 +3,15 @@ package com.sztzjy.financial_bigdata.entity;
 import java.util.Date;
 
 import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+
 /**
  * 学生用户信息表
  *
  * @author xcj
  * stu_userinfo
  */
+@EqualsAndHashCode
 public class StuUser {
     @ApiModelProperty("用户ID")
     private String userid;
diff --git a/src/main/java/com/sztzjy/financial_bigdata/entity/stu_dto/StuTrainingDto.java b/src/main/java/com/sztzjy/financial_bigdata/entity/stu_dto/StuTrainingDto.java
index c2f5e16..ac0316c 100644
--- a/src/main/java/com/sztzjy/financial_bigdata/entity/stu_dto/StuTrainingDto.java
+++ b/src/main/java/com/sztzjy/financial_bigdata/entity/stu_dto/StuTrainingDto.java
@@ -70,5 +70,6 @@ public class StuTrainingDto {
     @ApiModelProperty("实验报告完成情况")
     private String reportCompleteStatus;
 
-
+    @ApiModelProperty("模板名称")
+    private String taskModule;
 }
diff --git a/src/main/java/com/sztzjy/financial_bigdata/service/stu/StuScoreService.java b/src/main/java/com/sztzjy/financial_bigdata/service/stu/StuScoreService.java
new file mode 100644
index 0000000..9db2e3e
--- /dev/null
+++ b/src/main/java/com/sztzjy/financial_bigdata/service/stu/StuScoreService.java
@@ -0,0 +1,15 @@
+package com.sztzjy.financial_bigdata.service.stu;
+
+import com.sztzjy.financial_bigdata.entity.StuTrainingWithBLOBs;
+import com.sztzjy.financial_bigdata.entity.resource_entity.SysThreeCatalog;
+import com.sztzjy.financial_bigdata.entity.stu_dto.StuTrainingDto;
+
+import java.util.List;
+
+/**
+ * @Author xcj
+ * @Date 2024/11/22
+ */
+public interface StuScoreService {
+    StuTrainingDto getScoreByChapterId(String schoolId, String systemOwner,StuTrainingWithBLOBs stuTrainingWithBLOBs, StuTrainingDto stuTrainingDto, SysThreeCatalog sysCourseChapter);
+}
diff --git a/src/main/java/com/sztzjy/financial_bigdata/service/stu/impl/StuScoreServiceImpl.java b/src/main/java/com/sztzjy/financial_bigdata/service/stu/impl/StuScoreServiceImpl.java
new file mode 100644
index 0000000..c20dad9
--- /dev/null
+++ b/src/main/java/com/sztzjy/financial_bigdata/service/stu/impl/StuScoreServiceImpl.java
@@ -0,0 +1,212 @@
+package com.sztzjy.financial_bigdata.service.stu.impl;
+
+import com.sztzjy.financial_bigdata.entity.StuTrainingWithBLOBs;
+import com.sztzjy.financial_bigdata.entity.SysWeight;
+import com.sztzjy.financial_bigdata.entity.SysWeightExample;
+import com.sztzjy.financial_bigdata.entity.TrainingReport;
+import com.sztzjy.financial_bigdata.entity.resource_entity.SysThreeCatalog;
+import com.sztzjy.financial_bigdata.entity.stu_dto.StuTrainingDto;
+import com.sztzjy.financial_bigdata.mapper.SysWeightMapper;
+import com.sztzjy.financial_bigdata.mapper.TrainingReportMapper;
+import com.sztzjy.financial_bigdata.service.stu.StuScoreService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.List;
+
+/**
+ * @Author xcj
+ * @Date 2024/11/22
+ */
+@Service
+public class StuScoreServiceImpl implements StuScoreService {
+    @Autowired
+    private SysWeightMapper sysWeightMapper;
+    @Autowired
+    TrainingReportMapper trainingReportMapper;
+
+
+//    @Override
+//    public StuTrainingDto getScoreByChapterId(String schoolId, String systemOwner, StuTrainingWithBLOBs stuTrainingWithBLOBs, StuTrainingDto stuTrainingDto, SysThreeCatalog sysCourseChapter) {
+//        SysWeightExample sysWeightExample = new SysWeightExample();
+//        sysWeightExample.createCriteria().andCourseIdEqualTo(sysCourseChapter.getTwoId()).andSchoolIdEqualTo(schoolId).andSystemOwnerEqualTo(systemOwner);
+//        List<SysWeight> sysWeights = sysWeightMapper.selectByExample(sysWeightExample);
+//        if (!sysWeights.isEmpty()) {
+//            SysWeight sysWeight = sysWeights.get(0);
+//            BeanUtils.copyProperties(sysWeight, stuTrainingDto);  //五个权重
+//        } else {
+//            //设置默认权重
+//            stuTrainingDto.setKnowledgeSummaryDefaultRule(BigDecimal.valueOf(60)); //知识概要默认计分规则 阅读1分钟得60分,1分钟以下不得分,多1分钟加10分。
+//            stuTrainingDto.setResourceLearningDefaultRule(BigDecimal.valueOf(60)); //资源学习默认计分规则 观看资源1分钟得60分,1分钟以下不得分,多1分钟加10分。
+//            stuTrainingDto.setLearningEvalDefaultRule(BigDecimal.valueOf(10)); //学习测评默认计分规则 客观题10分每道
+//            stuTrainingDto.setExpTrainingDefautRule(BigDecimal.valueOf(2));//实训题,输错/选错次数扣2分,最低0分
+//            stuTrainingDto.setKnowledgeSummaryWeight(BigDecimal.valueOf(5));
+//            stuTrainingDto.setResourceLearningWeight(BigDecimal.valueOf(5));
+//            stuTrainingDto.setLearningEvalWeight(BigDecimal.valueOf(20));
+//            stuTrainingDto.setExpTrainingWeight(BigDecimal.valueOf(60));
+//            stuTrainingDto.setReportWeight(BigDecimal.valueOf(10));
+//        }
+//        BeanUtils.copyProperties(stuTrainingWithBLOBs, stuTrainingDto); //四个完成情况和四个得分
+//        //知识概要得分
+//        Integer knowledgeSummaryCompleteStatus = 0;
+//        BigDecimal knowledgeSummaryScore = BigDecimal.ZERO;
+//        if (stuTrainingWithBLOBs.getKnowledgeSummaryCompleteStatus() != null && stuTrainingWithBLOBs.getKnowledgeSummaryCompleteStatus() != 0) {
+//            knowledgeSummaryCompleteStatus = stuTrainingWithBLOBs.getKnowledgeSummaryCompleteStatus();
+//            knowledgeSummaryScore = stuTrainingDto.getKnowledgeSummaryDefaultRule().add(BigDecimal.valueOf((knowledgeSummaryCompleteStatus - 1) * 10));
+//            if (knowledgeSummaryScore.compareTo(BigDecimal.valueOf(100)) > 0) {
+//                knowledgeSummaryScore = BigDecimal.valueOf(100);
+//            }
+//            knowledgeSummaryScore = knowledgeSummaryScore.multiply(stuTrainingDto.getKnowledgeSummaryWeight().divide(BigDecimal.valueOf(100), 2, BigDecimal.ROUND_HALF_UP));
+//        }
+//        stuTrainingDto.setKnowledgeSummaryScore(knowledgeSummaryScore);
+//        //资源学习得分
+//        Integer resourceLearningCompleteStatus = 0;
+//        BigDecimal resourceLearningScore = BigDecimal.ZERO;
+//        if (stuTrainingWithBLOBs.getResourceLearningCompleteStatus() != null && stuTrainingWithBLOBs.getResourceLearningCompleteStatus() != 0) {
+//            resourceLearningCompleteStatus = stuTrainingWithBLOBs.getResourceLearningCompleteStatus();
+//            resourceLearningScore = stuTrainingDto.getResourceLearningDefaultRule().add(BigDecimal.valueOf((resourceLearningCompleteStatus - 1) * 10));
+//            if (resourceLearningScore.compareTo(BigDecimal.valueOf(100)) > 0) {
+//                resourceLearningScore = BigDecimal.valueOf(100);
+//            }
+//            resourceLearningScore = resourceLearningScore.multiply(stuTrainingDto.getResourceLearningWeight().divide(BigDecimal.valueOf(100), 2, BigDecimal.ROUND_HALF_UP));
+//        }
+//        stuTrainingDto.setResourceLearningScore(resourceLearningScore);
+//
+//        //学习评测得分
+//        Integer learningEvalCompleteStatus = 0;
+//        BigDecimal learningEvalScore = BigDecimal.ZERO;
+//        if (stuTrainingWithBLOBs.getLearningEvalCompleteStatus() != null) {
+//            learningEvalCompleteStatus = stuTrainingWithBLOBs.getLearningEvalCompleteStatus();
+//            learningEvalScore = BigDecimal.valueOf(100).subtract(stuTrainingDto.getLearningEvalDefaultRule().multiply(BigDecimal.valueOf(learningEvalCompleteStatus)));
+//            if (learningEvalScore.compareTo(BigDecimal.valueOf(0)) < 0) {
+//                learningEvalScore = BigDecimal.valueOf(0);
+//            }
+//            stuTrainingDto.setLearningEvalScore(learningEvalScore.multiply(stuTrainingDto.getLearningEvalWeight().divide(BigDecimal.valueOf(100), 2, BigDecimal.ROUND_HALF_UP)));
+//        } else {
+//            stuTrainingDto.setLearningEvalScore(learningEvalScore);
+//        }
+//
+//        //实验实训分数计算
+//        Integer expTrainingCompleteStatus = 0;
+//        BigDecimal expTrainingScore = BigDecimal.ZERO;
+//        if (stuTrainingWithBLOBs.getExpTrainingCompleteStatus() != null) {
+//            expTrainingCompleteStatus = stuTrainingWithBLOBs.getExpTrainingCompleteStatus();
+//            expTrainingScore = BigDecimal.valueOf(100).subtract(stuTrainingDto.getExpTrainingDefautRule().multiply(BigDecimal.valueOf(expTrainingCompleteStatus)));
+//            if (expTrainingScore.compareTo(BigDecimal.valueOf(0)) < 0) {
+//                expTrainingScore = BigDecimal.valueOf(0);
+//            }
+//            stuTrainingDto.setCaseStuScore(expTrainingScore.multiply(stuTrainingDto.getExpTrainingWeight().divide(BigDecimal.valueOf(100), 2, BigDecimal.ROUND_HALF_UP)));
+//        } else {
+//            stuTrainingDto.setCaseStuScore(expTrainingScore);
+//        }
+//
+//
+//        TrainingReport trainingReport = trainingReportMapper.selectByPrimaryKey(stuTrainingWithBLOBs.getReportId());
+//        //设置报告相关数据
+//        if (trainingReport == null || trainingReport.getTeacherScore() == null) {
+//            stuTrainingDto.setReportCompleteStatus("未提交");
+//            stuTrainingDto.setReportScore(null);
+//        } else {
+//            stuTrainingDto.setReportCompleteStatus("已提交");
+//            stuTrainingDto.setReportScore(trainingReport.getTeacherScore());
+//        }
+//        return stuTrainingDto;
+//    }
+
+
+    @Override
+    public StuTrainingDto getScoreByChapterId(String schoolId, String systemOwner, StuTrainingWithBLOBs stuTrainingWithBLOBs, StuTrainingDto stuTrainingDto, SysThreeCatalog sysCourseChapter) {
+        SysWeightExample sysWeightExample = new SysWeightExample();
+        sysWeightExample.createCriteria().andCourseIdEqualTo(sysCourseChapter.getTwoId())
+                .andSchoolIdEqualTo(schoolId)
+                .andSystemOwnerEqualTo(systemOwner);
+
+        List<SysWeight> sysWeights = sysWeightMapper.selectByExample(sysWeightExample);
+        if (!sysWeights.isEmpty()) {
+            SysWeight sysWeight = sysWeights.get(0);
+            BeanUtils.copyProperties(sysWeight, stuTrainingDto);  // 提取权重数据
+        } else {
+            setDefaultWeights(stuTrainingDto);
+        }
+
+        BeanUtils.copyProperties(stuTrainingWithBLOBs, stuTrainingDto); // 完成情况和得分
+
+        // 计算各模块得分
+        calculateModuleScores(stuTrainingWithBLOBs, stuTrainingDto);
+
+        // 设置报告相关数据
+        setReportData(stuTrainingDto, stuTrainingWithBLOBs.getReportId());
+
+        return stuTrainingDto;
+    }
+
+    private void setDefaultWeights(StuTrainingDto stuTrainingDto) {
+        stuTrainingDto.setKnowledgeSummaryDefaultRule(BigDecimal.valueOf(60));
+        stuTrainingDto.setResourceLearningDefaultRule(BigDecimal.valueOf(60));
+        stuTrainingDto.setLearningEvalDefaultRule(BigDecimal.valueOf(10));
+        stuTrainingDto.setExpTrainingDefautRule(BigDecimal.valueOf(2));
+        stuTrainingDto.setKnowledgeSummaryWeight(BigDecimal.valueOf(5));
+        stuTrainingDto.setResourceLearningWeight(BigDecimal.valueOf(5));
+        stuTrainingDto.setLearningEvalWeight(BigDecimal.valueOf(20));
+        stuTrainingDto.setExpTrainingWeight(BigDecimal.valueOf(60));
+        stuTrainingDto.setReportWeight(BigDecimal.valueOf(10));
+    }
+
+    private void calculateModuleScores(StuTrainingWithBLOBs stuTrainingWithBLOBs, StuTrainingDto stuTrainingDto) {
+        stuTrainingDto.setKnowledgeSummaryScore(calculateScore(
+                stuTrainingDto.getKnowledgeSummaryDefaultRule(),
+                stuTrainingDto.getKnowledgeSummaryWeight(),
+                stuTrainingWithBLOBs.getKnowledgeSummaryCompleteStatus()
+        ));
+
+        stuTrainingDto.setResourceLearningScore(calculateScore(
+                stuTrainingDto.getResourceLearningDefaultRule(),
+                stuTrainingDto.getResourceLearningWeight(),
+                stuTrainingWithBLOBs.getResourceLearningCompleteStatus()
+        ));
+
+        stuTrainingDto.setLearningEvalScore(calculateEvaluationScore(
+                stuTrainingDto.getLearningEvalDefaultRule(),
+                stuTrainingDto.getLearningEvalWeight(),
+                stuTrainingWithBLOBs.getLearningEvalCompleteStatus()
+        ));
+
+        stuTrainingDto.setCaseStuScore(calculateEvaluationScore(
+                stuTrainingDto.getExpTrainingDefautRule(),
+                stuTrainingDto.getExpTrainingWeight(),
+                stuTrainingWithBLOBs.getExpTrainingCompleteStatus()
+        ));
+    }
+
+    private BigDecimal calculateScore(BigDecimal defaultRule, BigDecimal weight, Integer completeStatus) {
+        if (completeStatus != null && completeStatus > 0) {
+            BigDecimal score = defaultRule.add(BigDecimal.valueOf((completeStatus - 1) * 10));
+            score = score.min(BigDecimal.valueOf(100));  // 确保分数不超过100
+            return score.multiply(weight.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP));
+        }
+        return BigDecimal.ZERO;
+    }
+
+    private BigDecimal calculateEvaluationScore(BigDecimal defaultRule, BigDecimal weight, Integer completeStatus) {
+        if (completeStatus != null) {
+            BigDecimal score = BigDecimal.valueOf(100).subtract(defaultRule.multiply(BigDecimal.valueOf(completeStatus)));
+            return score.max(BigDecimal.ZERO).multiply(weight.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP));
+        }
+        return BigDecimal.ZERO;
+    }
+
+    private void setReportData(StuTrainingDto stuTrainingDto, String reportId) {
+        TrainingReport trainingReport = trainingReportMapper.selectByPrimaryKey(reportId);
+        if (trainingReport == null || trainingReport.getTeacherScore() == null) {
+            stuTrainingDto.setReportCompleteStatus("未提交");
+            stuTrainingDto.setReportScore(null);
+        } else {
+            stuTrainingDto.setReportCompleteStatus("已提交");
+            stuTrainingDto.setReportScore(trainingReport.getTeacherScore());
+        }
+    }
+
+}