新增老师端练习模式算分接口

master
xiaoCJ 4 months ago
parent 8226bd9443
commit aaa06da62a

@ -9,6 +9,7 @@ import com.sztzjy.financial_bigdata.mapper.StuTrainingMapper;
import com.sztzjy.financial_bigdata.mapper.SysWeightMapper; import com.sztzjy.financial_bigdata.mapper.SysWeightMapper;
import com.sztzjy.financial_bigdata.mapper.TrainingReportMapper; import com.sztzjy.financial_bigdata.mapper.TrainingReportMapper;
import com.sztzjy.financial_bigdata.resourceCenterAPI.CourseAPI; 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.service.tea.ITeaGradeManageService;
import com.sztzjy.financial_bigdata.util.ResultEntity; import com.sztzjy.financial_bigdata.util.ResultEntity;
import com.sztzjy.financial_bigdata.util.file.IFileUtil; import com.sztzjy.financial_bigdata.util.file.IFileUtil;
@ -45,7 +46,10 @@ public class StuScoreController {
@Autowired @Autowired
private StuTrainingMapper stuTrainingMapper; private StuTrainingMapper stuTrainingMapper;
@Autowired @Autowired
ITeaGradeManageService gradeManageService; private ITeaGradeManageService gradeManageService;
@Autowired
private StuScoreService stuScoreService;
@AnonymousAccess @AnonymousAccess
@ApiOperation("***得分情况展示") @ApiOperation("***得分情况展示")
@ -54,107 +58,26 @@ public class StuScoreController {
@RequestParam String chapterId, @RequestParam String chapterId,
@RequestParam String schoolId, @RequestParam String schoolId,
@RequestParam String systemOwner) { @RequestParam String systemOwner) {
StuTrainingDto stuTrainingDto = new StuTrainingDto();
StuTrainingExample stuTrainingExample = new StuTrainingExample(); StuTrainingExample stuTrainingExample = new StuTrainingExample();
stuTrainingExample.createCriteria().andUserIdEqualTo(userId).andChapterIdEqualTo(chapterId); stuTrainingExample.createCriteria().andUserIdEqualTo(userId).andChapterIdEqualTo(chapterId);
List<StuTrainingWithBLOBs> stuTrainings = stuTrainingMapper.selectByExampleWithBLOBs(stuTrainingExample); List<StuTrainingWithBLOBs> stuTrainings = stuTrainingMapper.selectByExampleWithBLOBs(stuTrainingExample);
StuTrainingDto stuTrainingDto = new StuTrainingDto();
//根据章节ID拿到课程ID 再去拿权重 //根据章节ID拿到课程ID 再去拿权重
SysThreeCatalog sysCourseChapter = null; SysThreeCatalog sysCourseChapter = null;
try { try {
sysCourseChapter = CourseAPI.selectChapterByChapterId(chapterId); sysCourseChapter = CourseAPI.selectChapterByChapterId(chapterId);
} catch (IOException e) { } catch (IOException e) {
return new ResultEntity<>(HttpStatus.BAD_REQUEST, "资源中心根据章节ID查询章节信息失败"); 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()) { if (!stuTrainings.isEmpty()) {
StuTrainingWithBLOBs stuTrainingWithBLOBs = stuTrainings.get(0); StuTrainingWithBLOBs stuTrainingWithBLOBs = stuTrainings.get(0);
BeanUtils.copyProperties(stuTrainingWithBLOBs, stuTrainingDto); //四个完成情况和四个得分 stuTrainingDto = stuScoreService.getScoreByChapterId(schoolId, systemOwner, stuTrainingWithBLOBs, stuTrainingDto, sysCourseChapter);
//知识概要得分
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 new ResultEntity<StuTrainingDto>(stuTrainingDto); return new ResultEntity<StuTrainingDto>(stuTrainingDto);
} }
@AnonymousAccess @AnonymousAccess
@ApiOperation("实验报告展示") @ApiOperation("实验报告展示")
@PostMapping("getReportByUserId") @PostMapping("getReportByUserId")

@ -6,14 +6,17 @@ import com.github.pagehelper.PageInfo;
import com.sztzjy.financial_bigdata.annotation.AnonymousAccess; import com.sztzjy.financial_bigdata.annotation.AnonymousAccess;
import com.sztzjy.financial_bigdata.entity.*; import com.sztzjy.financial_bigdata.entity.*;
import com.sztzjy.financial_bigdata.entity.resource_entity.SysObjectiveQuestions; 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.SysTwoCatalog;
import com.sztzjy.financial_bigdata.entity.resource_entity.TestTestSysCaseQuestionStepWithBLOBs; 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.stu_dto.StuUserDto;
import com.sztzjy.financial_bigdata.entity.tea_dto.*; import com.sztzjy.financial_bigdata.entity.tea_dto.*;
import com.sztzjy.financial_bigdata.mapper.*; import com.sztzjy.financial_bigdata.mapper.*;
import com.sztzjy.financial_bigdata.resourceCenterAPI.CaseApi; import com.sztzjy.financial_bigdata.resourceCenterAPI.CaseApi;
import com.sztzjy.financial_bigdata.resourceCenterAPI.CourseAPI; import com.sztzjy.financial_bigdata.resourceCenterAPI.CourseAPI;
import com.sztzjy.financial_bigdata.resourceCenterAPI.ObjectiveApi; 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.ITeaGradeManageService;
import com.sztzjy.financial_bigdata.service.tea.impl.TeaGradeManageServiceImpl; import com.sztzjy.financial_bigdata.service.tea.impl.TeaGradeManageServiceImpl;
import com.sztzjy.financial_bigdata.util.PageUtil; import com.sztzjy.financial_bigdata.util.PageUtil;
@ -71,6 +74,11 @@ public class TeaGradeManageController {
private SysWeightMapper sysWeightMapper; private SysWeightMapper sysWeightMapper;
@Autowired @Autowired
private StuTheoryExamMapper stuTheoryExamMapper; private StuTheoryExamMapper stuTheoryExamMapper;
@Autowired
private StuTrainingMapper stuTrainingMapper;
@Autowired
StuScoreService stuScoreService;
@AnonymousAccess @AnonymousAccess
@PostMapping("/getExamInfo") @PostMapping("/getExamInfo")
@ -94,7 +102,7 @@ public class TeaGradeManageController {
} }
//存储用户信息 //存储用户信息
StuUserExample example =new StuUserExample(); StuUserExample example = new StuUserExample();
example.createCriteria().andSystemOnwerEqualTo(systemOwner).andZyUseridIn(userIds); example.createCriteria().andSystemOnwerEqualTo(systemOwner).andZyUseridIn(userIds);
List<StuUser> stuUsers = userMapper.selectByExample(example); List<StuUser> stuUsers = userMapper.selectByExample(example);
for (StuUser stuUser : stuUsers) { for (StuUser stuUser : stuUsers) {
@ -363,8 +371,7 @@ public class TeaGradeManageController {
} }
// 构建班级ID列表 // 构建班级ID列表
List<String> classIds = stuUsers.stream() List<String> classIds = stuUsers.stream()
.map(StuUser::getClassId) .map(StuUser::getClassId).distinct().collect(Collectors.toList());
.collect(Collectors.toList());
// 批量查询学生分数 // 批量查询学生分数
StuStudentExamExample studentExamExample = new StuStudentExamExample(); StuStudentExamExample studentExamExample = new StuStudentExamExample();
@ -397,7 +404,7 @@ public class TeaGradeManageController {
teaExamAndUserDto.setName(stuUser.getName()); teaExamAndUserDto.setName(stuUser.getName());
teaExamAndUserDto.setStudentId(stuUser.getStudentId()); teaExamAndUserDto.setStudentId(stuUser.getStudentId());
// 从映射关系中获取班级对象 // 从映射关系中获取班级对象
if (classMap.get(stuUser.getClassId())==null){ if (classMap.get(stuUser.getClassId()) == null) {
continue; continue;
} }
StuClass classdata = classMap.get(stuUser.getClassId()); StuClass classdata = classMap.get(stuUser.getClassId());
@ -614,7 +621,6 @@ public class TeaGradeManageController {
} }
@AnonymousAccess @AnonymousAccess
@PostMapping("/getTheoryInfo") @PostMapping("/getTheoryInfo")
@ApiOperation("理论考试--页面展示") @ApiOperation("理论考试--页面展示")
@ -653,6 +659,67 @@ public class TeaGradeManageController {
return new ResultEntity<>(pageInfo); 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);
}
} }

@ -3,12 +3,15 @@ package com.sztzjy.financial_bigdata.entity;
import java.util.Date; import java.util.Date;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
/** /**
* *
* *
* @author xcj * @author xcj
* stu_userinfo * stu_userinfo
*/ */
@EqualsAndHashCode
public class StuUser { public class StuUser {
@ApiModelProperty("用户ID") @ApiModelProperty("用户ID")
private String userid; private String userid;

@ -70,5 +70,6 @@ public class StuTrainingDto {
@ApiModelProperty("实验报告完成情况") @ApiModelProperty("实验报告完成情况")
private String reportCompleteStatus; private String reportCompleteStatus;
@ApiModelProperty("模板名称")
private String taskModule;
} }

@ -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);
}

@ -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());
}
}
}
Loading…
Cancel
Save