From dfadaf37bc05a4c88ef535edce2776fba9098d58 Mon Sep 17 00:00:00 2001 From: "hhb@hotmail.com" Date: Wed, 19 Mar 2025 11:04:35 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E8=B0=83=E6=95=B4=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=92=8C=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/LaborEducationServiceImpl.java | 20 ++++--- .../impl/MoralEducationServiceImpl.java | 11 ++-- .../frontend/AppraiseController.java | 4 +- .../repository/AppraiseRecordRepository.java | 5 +- .../teammodel/service/EvaluationService.java | 2 +- .../service/impl/EvaluationServiceImpl.java | 54 ++++++++----------- 6 files changed, 47 insertions(+), 49 deletions(-) diff --git a/src/main/java/cn/teammodel/controller/admin/service/impl/LaborEducationServiceImpl.java b/src/main/java/cn/teammodel/controller/admin/service/impl/LaborEducationServiceImpl.java index c20a8ef..e49a353 100644 --- a/src/main/java/cn/teammodel/controller/admin/service/impl/LaborEducationServiceImpl.java +++ b/src/main/java/cn/teammodel/controller/admin/service/impl/LaborEducationServiceImpl.java @@ -89,7 +89,7 @@ public class LaborEducationServiceImpl implements LaborEducationService { try { records = queryService.queryLessonsInParallel( - lessonRecordKey, startTime, endTime, subjectId, tmdId, grade, periodId + lessonRecordKey, startTime, endTime, subjectId, null, grade, periodId ); // 获取当前月份的起始时间和结束时间 Calendar calendar = Calendar.getInstance(); @@ -289,9 +289,15 @@ public class LaborEducationServiceImpl implements LaborEducationService { } subjectiveTotal += convertedScore; - // 获取对应知识块的客观成绩,并确保在60-100之间 + // 获取对应知识块的客观成绩,并转换为基于60分加分的分数 double objectiveScore = knowledgeBlockScores.get(knowledgeBlock); - objectiveScore = Math.max(60.0, Math.min(100.0, objectiveScore)); // 确保60-100分 + // 转换为正确率的小数形式(假设原始分是百分比) + double correctRate = objectiveScore / 100.0; + objectiveScore = 60.0 + correctRate * 40.0; + // 确保不超过100分 + objectiveScore = Math.min(100.0, objectiveScore); + // 保留两位小数 + objectiveScore = Double.parseDouble(String.format("%.2f", objectiveScore)); objectiveTotal += objectiveScore; // 计算综合得分(主观占60%,客观占40%) @@ -886,10 +892,12 @@ public class LaborEducationServiceImpl implements LaborEducationService { int examCount = knowledgeExamCount.get(knowledge); double finalAverage = totalAverage / examCount; - // 确保分数在60-100之间 - finalAverage = Math.max(60.0, Math.min(100.0, finalAverage)); // 60分打底,不超过100分 - finalAverage = Double.parseDouble(String.format("%.2f", finalAverage)); // 保留两位小数 + // 在基础分60分上累加实际考试得分(最多加40分) + double additionalScore = Math.min(finalAverage, 40.0); // 实际考试得分最多加40分 + finalAverage = 60.0 + additionalScore; // 基础分60 + 实际考试得分 + finalAverage = Math.min(finalAverage, 100.0); // 总分不超过100分 + finalAverage = Double.parseDouble(String.format("%.2f", finalAverage)); knowledgeTotalScore.put(knowledge, finalAverage); } diff --git a/src/main/java/cn/teammodel/controller/admin/service/impl/MoralEducationServiceImpl.java b/src/main/java/cn/teammodel/controller/admin/service/impl/MoralEducationServiceImpl.java index cda9de5..f2ba49d 100644 --- a/src/main/java/cn/teammodel/controller/admin/service/impl/MoralEducationServiceImpl.java +++ b/src/main/java/cn/teammodel/controller/admin/service/impl/MoralEducationServiceImpl.java @@ -89,7 +89,7 @@ public class MoralEducationServiceImpl implements MoralEducationService { try { records = queryService.queryLessonsInParallel( - lessonRecordKey, startTime, endTime, subjectId, tmdId, grade, periodId + lessonRecordKey, startTime, endTime, subjectId, null, grade, periodId ); // 获取当前月份的起始时间和结束时间 Calendar calendar = Calendar.getInstance(); @@ -408,7 +408,6 @@ public class MoralEducationServiceImpl implements MoralEducationService { studentScores.putIfAbsent(studentKey, new HashMap<>()); Map studentScoreMap = studentScores.get(studentKey); - // 计分 // 计分 int score = isPraise ? 1 : -1; int currentScore = studentScoreMap.getOrDefault(knowledgeBlock, 0) + score; @@ -887,10 +886,12 @@ public class MoralEducationServiceImpl implements MoralEducationService { int examCount = knowledgeExamCount.get(knowledge); double finalAverage = totalAverage / examCount; - // 确保分数在60-100之间 - finalAverage = Math.max(60.0, Math.min(100.0, finalAverage)); // 60分打底,不超过100分 - finalAverage = Double.parseDouble(String.format("%.2f", finalAverage)); // 保留两位小数 + // 在基础分60分上累加实际考试得分(最多加40分) + double additionalScore = Math.min(finalAverage, 40.0); // 实际考试得分最多加40分 + finalAverage = 60.0 + additionalScore; // 基础分60 + 实际考试得分 + finalAverage = Math.min(finalAverage, 100.0); // 总分不超过100分 + finalAverage = Double.parseDouble(String.format("%.2f", finalAverage)); knowledgeTotalScore.put(knowledge, finalAverage); } diff --git a/src/main/java/cn/teammodel/controller/frontend/AppraiseController.java b/src/main/java/cn/teammodel/controller/frontend/AppraiseController.java index e8d3369..342c3e5 100644 --- a/src/main/java/cn/teammodel/controller/frontend/AppraiseController.java +++ b/src/main/java/cn/teammodel/controller/frontend/AppraiseController.java @@ -76,8 +76,8 @@ public class AppraiseController { @PostMapping("findVoteRecord") @ApiOperation(value = "多条件查询当前登录老师的学生评价(投票)") - public R> findMyVoteRecord(@Valid @RequestBody FindVoteRecordDto findVoteRecordDto, HttpServletRequest request) { - Map res = evaluationService.findVoteRecord(findVoteRecordDto,request); + public R> findMyVoteRecord(@Valid @RequestBody FindVoteRecordDto findVoteRecordDto, HttpServletRequest request) { + List res = evaluationService.findVoteRecord(findVoteRecordDto,request); return R.success(res); } diff --git a/src/main/java/cn/teammodel/repository/AppraiseRecordRepository.java b/src/main/java/cn/teammodel/repository/AppraiseRecordRepository.java index 3e30bc3..7ff28bf 100644 --- a/src/main/java/cn/teammodel/repository/AppraiseRecordRepository.java +++ b/src/main/java/cn/teammodel/repository/AppraiseRecordRepository.java @@ -49,14 +49,13 @@ public interface AppraiseRecordRepository extends CosmosRepository searchNodesByCondition(String targetId, + List searchNodesByCondition(String targetId, String targetType, String classId, String creatorId, String academicYearId, Boolean isPraise, - String code, - Pageable pageable); + String code); /** * 查询学校的评价总数, praise = null 时查询总数,否则查询当前学段对应是否表扬的评价总数 diff --git a/src/main/java/cn/teammodel/service/EvaluationService.java b/src/main/java/cn/teammodel/service/EvaluationService.java index 49653d8..7948038 100644 --- a/src/main/java/cn/teammodel/service/EvaluationService.java +++ b/src/main/java/cn/teammodel/service/EvaluationService.java @@ -56,7 +56,7 @@ public interface EvaluationService { */ void vote(AppraiseVoteDto appraiseVoteDto); - Map findVoteRecord(FindVoteRecordDto findVoteRecordDto, HttpServletRequest request); + List findVoteRecord(FindVoteRecordDto findVoteRecordDto, HttpServletRequest request); void recallVote(RecallVoteDto recallVoteDto); diff --git a/src/main/java/cn/teammodel/service/impl/EvaluationServiceImpl.java b/src/main/java/cn/teammodel/service/impl/EvaluationServiceImpl.java index f0ae576..80d3eca 100644 --- a/src/main/java/cn/teammodel/service/impl/EvaluationServiceImpl.java +++ b/src/main/java/cn/teammodel/service/impl/EvaluationServiceImpl.java @@ -435,7 +435,7 @@ public class EvaluationServiceImpl implements EvaluationService { } @Override - public Map findVoteRecord(FindVoteRecordDto findVoteRecordDto, HttpServletRequest request) { + public List findVoteRecord(FindVoteRecordDto findVoteRecordDto, HttpServletRequest request) { String periodId = findVoteRecordDto.getPeriodId(); String targetId = StringUtils.isBlank(findVoteRecordDto.getTargetId()) ? null : findVoteRecordDto.getTargetId(); String targetType = StringUtils.isBlank(findVoteRecordDto.getTargetType()) ? null : findVoteRecordDto.getTargetType(); @@ -445,49 +445,38 @@ public class EvaluationServiceImpl implements EvaluationService { String teacherId = loginUser.getId(); String schoolId = loginUser.getSchoolId(); - Map params = new HashMap<>(); List semesters = schoolRepository.findSemestersById(schoolId, periodId); String academicYearId = SchoolDateUtil.calculateAcademicYearId(semesters, LocalDate.now()); - // 分页 - Sort sort = Sort.by("createTime").descending(); - final CosmosPageRequest pageRequest = new CosmosPageRequest(findVoteRecordDto.getCurrent(), findVoteRecordDto.getSize(), null, sort); - Page appraiseRecordItemPage = appraiseRecordRepository.searchNodesByCondition( + +/* // 2. 分页查询(确保 offset 计算正确) + int page = findVoteRecordDto.getCurrent(); + int size = findVoteRecordDto.getSize(); + //int offset = page * size; // 计算实际偏移量 + + CosmosPageRequest pageRequest =new CosmosPageRequest(page, size,null);*/ + + List content = appraiseRecordRepository.searchNodesByCondition( targetId, targetType, classId, teacherId, academicYearId, isPraise, - String.format(PK.PK_APPRAISE_RECORD, schoolId), - pageRequest + String.format(PK.PK_APPRAISE_RECORD, schoolId) ); - List content = appraiseRecordItemPage.getContent(); - long total = appraiseRecordItemPage.getTotalElements(); // 获取总数 - //提取学生ID 查询学生个人信息 +/* List content = appraiseRecordItemPage.getContent(); + long total = appraiseRecordItemPage.getTotalElements(); // 获取总数*/ + + // 3. 提取学生ID,查询学生个人信息 Set studentIds = content.stream().map(AppraiseRecordVo::getTargetId).collect(Collectors.toSet()); if (studentIds.isEmpty()) throw new ServiceException(ErrorCode.PARAM_ERROR.getCode(), "没有对应学生信息"); - List students = studentRepository.findAllByCodeAndIdIn(String.format(PK.STUDENT, schoolId), studentIds); + List students = studentRepository.findAllByCodeAndIdIn(String.format(PK.STUDENT, schoolId), studentIds); Set classIds = students.stream().map(Student::getClassId).filter(Objects::nonNull).collect(Collectors.toSet()); List classes = classRepository.findAllByCodeAndIdIn(String.format(PK.CLASS, schoolId), classIds); -//以防万一 其他成员名单 - /*GroupDto groupDto = new GroupDto(); - groupDto.setIds(new ArrayList<>(classIds)); - groupDto.setSchoolId(schoolId); - String url = env.getProperty("ies.server-url-group"); - Map groupId = GroupUtil.getGroupId(groupDto,new GroupUtil(env), request,url); - List rGroupList = new ArrayList<>(); - List rMembers = new ArrayList<>(); - for (Map.Entry entry : groupId.entrySet()) { - String key = entry.getKey(); - Object value = entry.getValue(); - if (key.equals("groups")) { - String jsonGroups = JSON.toJSONString(value); - rGroupList = JSON.parseObject(jsonGroups, new TypeReference>() {}); - } - }*/ - for(AppraiseRecordVo appraiseRecordVo : content) { + // 4. 补充学生和班级信息 + for (AppraiseRecordVo appraiseRecordVo : content) { students.stream().filter(student -> student.getId().equals(appraiseRecordVo.getTargetId())) .findFirst() .ifPresent(student -> { @@ -499,9 +488,10 @@ public class EvaluationServiceImpl implements EvaluationService { appraiseRecordVo.setClassName(classInfo.getName()); }); } - params.put("total", total); - params.put("content", content); - return params; + + // 5. 返回分页结果 + + return content; } @Override