diff --git a/src/main/java/com/sztzjy/financial_bigdata/controller/stu/ExamController.java b/src/main/java/com/sztzjy/financial_bigdata/controller/stu/ExamController.java index b1cd864..c5abb5d 100644 --- a/src/main/java/com/sztzjy/financial_bigdata/controller/stu/ExamController.java +++ b/src/main/java/com/sztzjy/financial_bigdata/controller/stu/ExamController.java @@ -86,7 +86,10 @@ public class ExamController { @GetMapping("startCase") @ApiOperation("**案例考核开始考试") @AnonymousAccess - public ResultEntity> startCase(@RequestParam String examManageId,@RequestParam String userId,@RequestParam String classId,@ApiParam("默认差第一条 传递first")@RequestParam String caseId){ + public ResultEntity> startCase(@RequestParam String examManageId, + @RequestParam String userId, + @RequestParam String classId, + @ApiParam("默认差第一条 传递first")@RequestParam String caseId){ List list= null; try { list = examService.startCase(examManageId,userId,classId,caseId); diff --git a/src/main/java/com/sztzjy/financial_bigdata/controller/stu/StuKnowledgeNote.java b/src/main/java/com/sztzjy/financial_bigdata/controller/stu/StuKnowledgeNote.java index 36adcb0..c125bac 100644 --- a/src/main/java/com/sztzjy/financial_bigdata/controller/stu/StuKnowledgeNote.java +++ b/src/main/java/com/sztzjy/financial_bigdata/controller/stu/StuKnowledgeNote.java @@ -5,13 +5,14 @@ import com.sztzjy.financial_bigdata.annotation.AnonymousAccess; import com.sztzjy.financial_bigdata.entity.StuTrainingExample; import com.sztzjy.financial_bigdata.entity.StuTrainingWithBLOBs; import com.sztzjy.financial_bigdata.entity.SysKnowledgeSummary; -import com.sztzjy.financial_bigdata.entity.SysObjectiveQuestionExample; +import com.sztzjy.financial_bigdata.entity.SysWeight; import com.sztzjy.financial_bigdata.entity.resource_entity.TestSysKnowledgeSummary; import com.sztzjy.financial_bigdata.entity.stu_dto.ReceivingObject; import com.sztzjy.financial_bigdata.mapper.StuTrainingMapper; import com.sztzjy.financial_bigdata.mapper.SysKnowledgeSummaryMapper; -import com.sztzjy.financial_bigdata.mapper.SysObjectiveQuestionMapper; +import com.sztzjy.financial_bigdata.mapper.SysWeightMapper; import com.sztzjy.financial_bigdata.resourceCenterAPI.KnowledgeSummaryApi; +import com.sztzjy.financial_bigdata.service.tea.ITeaGradeManageService; import com.sztzjy.financial_bigdata.util.PdfUtil; import com.sztzjy.financial_bigdata.util.ResultEntity; import com.sztzjy.financial_bigdata.util.file.IFileUtil; @@ -32,6 +33,7 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; +import java.math.BigDecimal; import java.util.List; /** @@ -50,6 +52,10 @@ public class StuKnowledgeNote { private String filePath; @Autowired private SysKnowledgeSummaryMapper sysKnowledgeSummaryMapper; + @Autowired + private SysWeightMapper sysWeightMapper; + @Autowired + private ITeaGradeManageService iTeaGradeManageService; @AnonymousAccess @ApiOperation("知识笔记-保存") @@ -112,10 +118,13 @@ public class StuKnowledgeNote { @AnonymousAccess @ApiOperation("***知识概要-获取页面") @PostMapping("getSysKnowledgeSummaryByChapterId") - public ResultEntity getSysKnowledgeSummaryByChapterId(@RequestParam String chapterId,@RequestParam String courseId, @RequestParam String schoolId, @RequestParam String systemOwner) { + public ResultEntity getSysKnowledgeSummaryByChapterId(@RequestParam String chapterId, @RequestParam String courseId, @RequestParam String schoolId, @RequestParam String systemOwner) { TestSysKnowledgeSummary sysKnowledgeSummary = null; try { - sysKnowledgeSummary = KnowledgeSummaryApi.getSysKnowledgeSummary(courseId,chapterId, schoolId, systemOwner); + sysKnowledgeSummary = KnowledgeSummaryApi.getSysKnowledgeSummary(courseId, chapterId, schoolId, systemOwner); + if(sysKnowledgeSummary==null){ + return new ResultEntity<>(HttpStatus.OK, "无知识概要"); + } } catch (IOException e) { return new ResultEntity<>(HttpStatus.BAD_REQUEST, "资源中心接口异常"); } @@ -161,7 +170,39 @@ public class StuKnowledgeNote { } else { return new ResultEntity<>(list.get(0).getTrainingId()); } + } + + + @AnonymousAccess + @ApiOperation("知识概要-算分") + @PostMapping("getScore") //阅读1分钟得60分,1分钟以下不得分,多1分钟加10分。 60分为默认值老师可修改 + public ResultEntity getScore(@ApiParam("数字 单位分钟") @RequestParam Integer minutes, + @RequestParam String courseId, + @RequestParam String schoolId, + @RequestParam String systemOwner, + @RequestParam String trainingId) { + StuTrainingWithBLOBs stuTrainingWithBLOBs = stuTrainingMapper.selectByPrimaryKey(trainingId); + if (stuTrainingWithBLOBs.getKnowledgeSummaryCompleteStatus() != null) { + //不为空直接返回 + return new ResultEntity<>(stuTrainingWithBLOBs.getKnowledgeSummaryScore()); + } + //为空设置 + SysWeight sysWeight = iTeaGradeManageService.getSysWeightResultEntity(courseId, schoolId, systemOwner); + BigDecimal knowledgeSummaryDefaultRule = sysWeight.getKnowledgeSummaryDefaultRule(); + if (minutes < 1) { + stuTrainingWithBLOBs.setKnowledgeSummaryScore(BigDecimal.ZERO); + } else if (minutes == 1) { + stuTrainingWithBLOBs.setKnowledgeSummaryScore(knowledgeSummaryDefaultRule); //老师只能修改这个分值 + } else { + int extraMinutes = minutes - 1; + int totalScore = 60 + extraMinutes * 10; + knowledgeSummaryDefaultRule = BigDecimal.valueOf(totalScore); + stuTrainingWithBLOBs.setKnowledgeSummaryScore(knowledgeSummaryDefaultRule); + } + stuTrainingWithBLOBs.setResourceLearningCompleteStatus(minutes); + stuTrainingMapper.updateByPrimaryKey(stuTrainingWithBLOBs); + return new ResultEntity<>(knowledgeSummaryDefaultRule); } 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 3c86ada..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,8 @@ 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; import io.swagger.annotations.Api; @@ -43,19 +45,24 @@ public class StuScoreController { private SysWeightMapper sysWeightMapper; @Autowired private StuTrainingMapper stuTrainingMapper; + @Autowired + private ITeaGradeManageService gradeManageService; + @Autowired + private StuScoreService stuScoreService; + @AnonymousAccess @ApiOperation("***得分情况展示") @PostMapping("getScoreInfo") public ResultEntity getScoreInfo(@RequestParam String userId, @RequestParam String chapterId, - @RequestParam String schoolId) { + @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; try { @@ -63,30 +70,14 @@ public class StuScoreController { } catch (IOException e) { return new ResultEntity<>(HttpStatus.BAD_REQUEST, "资源中心根据章节ID查询章节信息失败"); } - SysWeightExample sysWeightExample = new SysWeightExample(); - sysWeightExample.createCriteria().andCourseIdEqualTo(sysCourseChapter.getTwoId()).andSchoolIdEqualTo(schoolId); - List sysWeights = sysWeightMapper.selectByExample(sysWeightExample); - if (!sysWeights.isEmpty()) { - SysWeight sysWeight = sysWeights.get(0); - BeanUtils.copyProperties(sysWeight, stuTrainingDto); //五个权重 - } if (!stuTrainings.isEmpty()) { StuTrainingWithBLOBs stuTrainingWithBLOBs = stuTrainings.get(0); - - BeanUtils.copyProperties(stuTrainingWithBLOBs, stuTrainingDto); //四个完成情况和四个得分 - 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 6e5ca78..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") @@ -85,20 +93,20 @@ public class TeaGradeManageController { return null; } List teaExamManageCountDtos = new ArrayList<>(); - Map userMap = new HashMap<>(); + Map userMap = new HashMap<>(); - List userIds = new ArrayList<>(); + List userIds = new ArrayList<>(); for (TeaExamManage teaExamManage : teaExamManages) { - String userId = teaExamManage.getUserId(); - userIds.add(userId); + Integer zyUserId = Integer.parseInt(teaExamManage.getUserId()); //这里是智云 zyUserId + userIds.add(zyUserId); } //存储用户信息 - StuUserExample example =new StuUserExample(); - example.createCriteria().andSystemOnwerEqualTo(systemOwner).andUseridIn(userIds); + StuUserExample example = new StuUserExample(); + example.createCriteria().andSystemOnwerEqualTo(systemOwner).andZyUseridIn(userIds); List stuUsers = userMapper.selectByExample(example); for (StuUser stuUser : stuUsers) { - userMap.put(stuUser.getUserid(), stuUser); + userMap.put(stuUser.getZyUserid(), stuUser); } for (TeaExamManage teaExamManage : teaExamManages) { @@ -132,7 +140,7 @@ public class TeaGradeManageController { copyexamManageWithBLOBs.setExamTime(concatenatedTimeString); //考试时间 String userId = teaExamManage.getUserId(); - StuUser stuUser = userMap.get(userId); + StuUser stuUser = userMap.get(Integer.parseInt(userId)); copyexamManageWithBLOBs.setName(stuUser.getName()); //发布人 teaExamManageCountDtos.add(copyexamManageWithBLOBs); } @@ -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()); @@ -574,7 +581,7 @@ public class TeaGradeManageController { @ApiOperation("练习模式--成绩详情页面设置权重") public void updateWeightByModule(@ApiParam("所有框必须传") @RequestBody SysWeight sysWeight) { SysWeightExample sysWeightExample = new SysWeightExample(); - sysWeightExample.createCriteria().andCourseIdEqualTo(sysWeight.getCourseId()).andSystemOwnerEqualTo(sysWeight.getSystemOwner()); + sysWeightExample.createCriteria().andCourseIdEqualTo(sysWeight.getCourseId()).andSystemOwnerEqualTo(sysWeight.getSystemOwner()).andSchoolIdEqualTo(sysWeight.getSchoolId()); List sysWeights = sysWeightMapper.selectByExample(sysWeightExample); if (!sysWeights.isEmpty()) {//有 update sysWeightMapper.updateByPrimaryKey(sysWeight); @@ -610,14 +617,7 @@ public class TeaGradeManageController { public ResultEntity getModuleByCourseId(@RequestParam String courseId, @RequestParam String schoolId, @RequestParam String systemOwner) { - SysWeightExample sysWeightExample = new SysWeightExample(); - sysWeightExample.createCriteria().andSchoolIdEqualTo(schoolId).andCourseIdEqualTo(courseId).andSystemOwnerEqualTo(systemOwner); - List sysWeights = sysWeightMapper.selectByExample(sysWeightExample); - if (sysWeights.isEmpty()) { - //todo 是否需要设置默认权重 - return new ResultEntity<>(new SysWeight()); - } - return new ResultEntity<>(sysWeights.get(0)); + return new ResultEntity(iTeaGradeManageService.getSysWeightResultEntity(courseId, schoolId, systemOwner)); } @@ -659,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/controller/tea/TeaResourceCenterController.java b/src/main/java/com/sztzjy/financial_bigdata/controller/tea/TeaResourceCenterController.java index decda79..3ce9c8e 100644 --- a/src/main/java/com/sztzjy/financial_bigdata/controller/tea/TeaResourceCenterController.java +++ b/src/main/java/com/sztzjy/financial_bigdata/controller/tea/TeaResourceCenterController.java @@ -1,9 +1,13 @@ package com.sztzjy.financial_bigdata.controller.tea; import com.sztzjy.financial_bigdata.annotation.AnonymousAccess; +import com.sztzjy.financial_bigdata.entity.StuTrainingWithBLOBs; +import com.sztzjy.financial_bigdata.entity.SysWeight; import com.sztzjy.financial_bigdata.entity.TeaResourceCenter; import com.sztzjy.financial_bigdata.entity.resource_entity.SysResource; +import com.sztzjy.financial_bigdata.mapper.StuTrainingMapper; import com.sztzjy.financial_bigdata.resourceCenterAPI.ResourceCenterApi; +import com.sztzjy.financial_bigdata.service.tea.ITeaGradeManageService; import com.sztzjy.financial_bigdata.service.tea.ITeaResourceCenterService; import com.sztzjy.financial_bigdata.util.ResultEntity; import com.sztzjy.financial_bigdata.util.file.IFileUtil; @@ -14,12 +18,10 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.io.IOException; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @@ -34,6 +36,10 @@ public class TeaResourceCenterController { ITeaResourceCenterService resourceCenterService; @Value("${file.path}") private String filePath; + @Autowired + private StuTrainingMapper stuTrainingMapper; + @Autowired + ITeaGradeManageService iTeaGradeManageService; //根据课程id查看资源文件列表 @@ -70,4 +76,35 @@ public class TeaResourceCenterController { } } + @AnonymousAccess + @ApiOperation("学习资源-算分") + @PostMapping("getResourceScore") //观看资源1分钟得60分,1分钟以下不得分,多1分钟加10分。 + public ResultEntity getScore(@ApiParam("数字 单位分钟") @RequestParam Integer minutes, + @RequestParam String courseId, + @RequestParam String schoolId, + @RequestParam String systemOwner, + @RequestParam String trainingId) { + StuTrainingWithBLOBs stuTrainingWithBLOBs = stuTrainingMapper.selectByPrimaryKey(trainingId); + if (stuTrainingWithBLOBs.getKnowledgeSummaryCompleteStatus() != null) { + //不为空直接返回 + return new ResultEntity<>(stuTrainingWithBLOBs.getResourceLearningScore()); + } + + //为空设置 + SysWeight sysWeight = iTeaGradeManageService.getSysWeightResultEntity(courseId, schoolId, systemOwner); + BigDecimal resourceLearningDefaultRule = sysWeight.getResourceLearningDefaultRule(); + if (minutes < 1) { + stuTrainingWithBLOBs.setResourceLearningScore(BigDecimal.ZERO); + } else if (minutes == 1) { + stuTrainingWithBLOBs.setResourceLearningScore(resourceLearningDefaultRule); //老师只能修改这个分值 + } else { + int extraMinutes = minutes - 1; + int totalScore = 60 + extraMinutes * 10; + resourceLearningDefaultRule = BigDecimal.valueOf(totalScore); + stuTrainingWithBLOBs.setResourceLearningScore(resourceLearningDefaultRule); + } + stuTrainingWithBLOBs.setResourceLearningCompleteStatus(minutes); + stuTrainingMapper.updateByPrimaryKey(stuTrainingWithBLOBs); + return new ResultEntity<>(resourceLearningDefaultRule); + } } 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/resourceCenterAPI/KnowledgeSummaryApi.java b/src/main/java/com/sztzjy/financial_bigdata/resourceCenterAPI/KnowledgeSummaryApi.java index d68fae8..de868e5 100644 --- a/src/main/java/com/sztzjy/financial_bigdata/resourceCenterAPI/KnowledgeSummaryApi.java +++ b/src/main/java/com/sztzjy/financial_bigdata/resourceCenterAPI/KnowledgeSummaryApi.java @@ -30,8 +30,12 @@ public class KnowledgeSummaryApi { .registerTypeAdapter(Date.class, new DateTypeAdapter()) .create(); Type listType = new TypeToken() {}.getType(); - TestSysKnowledgeSummary knowledgeSummarie = gson.fromJson(object.get("respString").toString(), listType); - return knowledgeSummarie; + try { + TestSysKnowledgeSummary knowledgeSummarie = gson.fromJson(object.get("respString").toString(), listType); + return knowledgeSummarie; + }catch (Exception e){ + return null; + } } } 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/ExerciseServiceImpl.java b/src/main/java/com/sztzjy/financial_bigdata/service/stu/impl/ExerciseServiceImpl.java index c7c916b..2492979 100644 --- a/src/main/java/com/sztzjy/financial_bigdata/service/stu/impl/ExerciseServiceImpl.java +++ b/src/main/java/com/sztzjy/financial_bigdata/service/stu/impl/ExerciseServiceImpl.java @@ -56,7 +56,7 @@ public class ExerciseServiceImpl implements IExerciseService { return dtos; }else { StuTrainingWithBLOBs bloBs = stuTrainingWithBLOBs.get(0); - if (bloBs==null) { + if (bloBs==null) { //todo 这里为什么要调查询全部的接口 List objectiveQuestionList = ObjectiveApi.selectObjectQuestionListByChapterId(chapterId); for (int i = 0; i < objectiveQuestionList.size(); i++) { SysObjectiveQuestions objectiveQuestion = objectiveQuestionList.get(i); @@ -72,7 +72,7 @@ public class ExerciseServiceImpl implements IExerciseService { }else { if(StringUtils.isBlank(bloBs.getLearningEvalAnswer())){ //判断是否提交过 未提交 if(bloBs.getLearningEvalIdlist()==null){ - List objectiveQuestionList = ObjectiveApi.selectObjectQuestionListByChapterId(chapterId); + List objectiveQuestionList = ObjectiveApi.selectRandomObjectiveByChapterId(chapterId); for (int i = 0; i < objectiveQuestionList.size(); i++) { SysObjectiveQuestions objectiveQuestion = objectiveQuestionList.get(i); String objectiveId = objectiveQuestion.getObjectiveId(); @@ -122,6 +122,8 @@ public class ExerciseServiceImpl implements IExerciseService { // } List stuAnswerList = new ArrayList<>(); BigDecimal learning_eval_score= BigDecimal.valueOf(0); + //记录错题数 + Integer errorCount= 0; List objectiveIds=new ArrayList<>(); for (int i = 0; i < objectiveQuestionDtoList.size(); i++) { SysObjectiveQuestionDto sysObjectiveQuestionDto = objectiveQuestionDtoList.get(i); @@ -132,13 +134,15 @@ public class ExerciseServiceImpl implements IExerciseService { stuAnswerList.add(stuAnswer); if(answer.equals(stuAnswer)){ learning_eval_score= learning_eval_score.add(objectiveQuestion.getScore()); + }else { + errorCount++; } objectiveIds.add(objectiveId); } StuTrainingWithBLOBs bloBs = stuTrainingWithBLOBs.get(0); bloBs.setLearningEvalAnswer(String.valueOf(stuAnswerList)); bloBs.setLearningEvalScore(learning_eval_score); - bloBs.setLearningEvalCompleteStatus(1); + bloBs.setLearningEvalCompleteStatus(errorCount); BigDecimal progress = bloBs.getProgress(); bloBs.setLearningEvalIdlist(String.valueOf(objectiveIds)); if(progress==null){ 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()); + } + } + +} diff --git a/src/main/java/com/sztzjy/financial_bigdata/service/tea/ITeaGradeManageService.java b/src/main/java/com/sztzjy/financial_bigdata/service/tea/ITeaGradeManageService.java index 3750499..73f3e5b 100644 --- a/src/main/java/com/sztzjy/financial_bigdata/service/tea/ITeaGradeManageService.java +++ b/src/main/java/com/sztzjy/financial_bigdata/service/tea/ITeaGradeManageService.java @@ -2,10 +2,12 @@ package com.sztzjy.financial_bigdata.service.tea; import com.github.pagehelper.PageInfo; import com.sztzjy.financial_bigdata.entity.StuTheoryRecord; +import com.sztzjy.financial_bigdata.entity.SysWeight; import com.sztzjy.financial_bigdata.entity.stu_dto.StuUserDto; import com.sztzjy.financial_bigdata.entity.tea_dto.TeaExaminationDetailsDto; import com.sztzjy.financial_bigdata.entity.tea_dto.TeaTrainingDto; import com.sztzjy.financial_bigdata.entity.tea_dto.TeaTrainingInfoDTO; +import com.sztzjy.financial_bigdata.util.ResultEntity; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @@ -31,4 +33,6 @@ public interface ITeaGradeManageService { PageInfo getTheoryInfo(Integer index, Integer size, String schoolId, String classId, String keyWord,String systemOwner); void exportTheoryExamInfo(HttpServletResponse response,String classId, String schoolId); + + SysWeight getSysWeightResultEntity(String courseId, String schoolId, String systemOwner); } diff --git a/src/main/java/com/sztzjy/financial_bigdata/service/tea/impl/TeaGradeManageServiceImpl.java b/src/main/java/com/sztzjy/financial_bigdata/service/tea/impl/TeaGradeManageServiceImpl.java index 9f6abcb..eb068e1 100644 --- a/src/main/java/com/sztzjy/financial_bigdata/service/tea/impl/TeaGradeManageServiceImpl.java +++ b/src/main/java/com/sztzjy/financial_bigdata/service/tea/impl/TeaGradeManageServiceImpl.java @@ -287,9 +287,36 @@ public class TeaGradeManageServiceImpl implements ITeaGradeManageService { } } + @Override + public SysWeight getSysWeightResultEntity(String courseId, String schoolId, String systemOwner) { + SysWeightExample sysWeightExample = new SysWeightExample(); + sysWeightExample.createCriteria().andSchoolIdEqualTo(schoolId).andCourseIdEqualTo(courseId).andSystemOwnerEqualTo(systemOwner); + List sysWeights = sysWeightMapper.selectByExample(sysWeightExample); + if (sysWeights.isEmpty()) { + //设置默认权重 + SysWeight sysWeight = new SysWeight(); + sysWeight.setCourseId(courseId); + sysWeight.setWeightId(IdUtil.randomUUID()); + sysWeight.setSchoolId(schoolId); + sysWeight.setSystemOwner(systemOwner); + sysWeight.setKnowledgeSummaryDefaultRule(BigDecimal.valueOf(60)); //知识概要默认计分规则 阅读1分钟得60分,1分钟以下不得分,多1分钟加10分。 + sysWeight.setResourceLearningDefaultRule(BigDecimal.valueOf(60)); //资源学习默认计分规则 观看资源1分钟得60分,1分钟以下不得分,多1分钟加10分。 + sysWeight.setLearningEvalDefaultRule(BigDecimal.valueOf(10)); //学习测评默认计分规则 客观题10分每道 + sysWeight.setExpTrainingDefautRule(BigDecimal.valueOf(2));//实训题,输错/选错次数扣2分,最低0分 + sysWeight.setKnowledgeSummaryWeight(BigDecimal.valueOf(5)); + sysWeight.setResourceLearningWeight(BigDecimal.valueOf(5)); + sysWeight.setLearningEvalWeight(BigDecimal.valueOf(20)); + sysWeight.setExpTrainingWeight(BigDecimal.valueOf(60)); + sysWeight.setReportWeight(BigDecimal.valueOf(10)); + sysWeightMapper.insert(sysWeight); + return sysWeight; + } + return sysWeights.get(0); + } + private List getTeaTrainingInfoDTOS(String schoolId, String keyWord, String classId, String systemOwner) { - List stuUsers =userMapper.getByNameAndStudentID(schoolId,keyWord,classId,systemOwner); + List stuUsers = userMapper.getByNameAndStudentID(schoolId, keyWord, classId, systemOwner); // 查询学生用户列表 if (stuUsers.isEmpty()) { @@ -299,7 +326,7 @@ public class TeaGradeManageServiceImpl implements ITeaGradeManageService { // 批量获取班级信息 Set classIds = stuUsers.stream().map(StuUser::getClassId).collect(Collectors.toSet()); - StuClassExample example =new StuClassExample(); + StuClassExample example = new StuClassExample(); List IDlist = new ArrayList<>(classIds); example.createCriteria().andClassIdIn(IDlist).andSystemOwnerEqualTo(systemOwner); diff --git a/src/main/resources/mapper/StuUserMapper.xml b/src/main/resources/mapper/StuUserMapper.xml index bad8766..aa558c3 100644 --- a/src/main/resources/mapper/StuUserMapper.xml +++ b/src/main/resources/mapper/StuUserMapper.xml @@ -485,7 +485,7 @@ system_onwer =#{systemOwner} and role_id = 4 - class_id = #{classId} + AND class_id = #{classId} AND school_id = #{schoolId}