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 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 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); } + @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 stuUsers = userMapper.selectByExample(example); for (StuUser stuUser : stuUsers) { @@ -363,8 +371,7 @@ public class TeaGradeManageController { } // 构建班级ID列表 List 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> getScoreInfo(@RequestParam String userId, +// @RequestParam String schoolId, +// @RequestParam String systemOwner) { +// List list = new ArrayList<>(); +// +// StuTrainingExample stuTrainingExample = new StuTrainingExample(); +// stuTrainingExample.createCriteria().andUserIdEqualTo(userId); +// List 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> getScoreInfo(@RequestParam String userId, + @RequestParam String schoolId, + @RequestParam String systemOwner) { + List list = new ArrayList<>(); + + StuTrainingExample stuTrainingExample = new StuTrainingExample(); + stuTrainingExample.createCriteria().andUserIdEqualTo(userId); + List stuTrainings = stuTrainingMapper.selectByExampleWithBLOBs(stuTrainingExample); + + Map 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 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 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()); + } + } + +}