update 调整接口和算法

develop
hhb@hotmail.com 1 month ago
parent 731c8d827e
commit dfadaf37bc

@ -89,7 +89,7 @@ public class LaborEducationServiceImpl implements LaborEducationService {
try { try {
records = queryService.queryLessonsInParallel( records = queryService.queryLessonsInParallel(
lessonRecordKey, startTime, endTime, subjectId, tmdId, grade, periodId lessonRecordKey, startTime, endTime, subjectId, null, grade, periodId
); );
// 获取当前月份的起始时间和结束时间 // 获取当前月份的起始时间和结束时间
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
@ -289,9 +289,15 @@ public class LaborEducationServiceImpl implements LaborEducationService {
} }
subjectiveTotal += convertedScore; subjectiveTotal += convertedScore;
// 获取对应知识块的客观成绩,并确保在60-100之间 // 获取对应知识块的客观成绩,并转换为基于60分加分的分数
double objectiveScore = knowledgeBlockScores.get(knowledgeBlock); 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; objectiveTotal += objectiveScore;
// 计算综合得分主观占60%客观占40% // 计算综合得分主观占60%客观占40%
@ -886,10 +892,12 @@ public class LaborEducationServiceImpl implements LaborEducationService {
int examCount = knowledgeExamCount.get(knowledge); int examCount = knowledgeExamCount.get(knowledge);
double finalAverage = totalAverage / examCount; double finalAverage = totalAverage / examCount;
// 确保分数在60-100之间 // 在基础分60分上累加实际考试得分最多加40分
finalAverage = Math.max(60.0, Math.min(100.0, finalAverage)); // 60分打底不超过100分 double additionalScore = Math.min(finalAverage, 40.0); // 实际考试得分最多加40分
finalAverage = Double.parseDouble(String.format("%.2f", finalAverage)); // 保留两位小数 finalAverage = 60.0 + additionalScore; // 基础分60 + 实际考试得分
finalAverage = Math.min(finalAverage, 100.0); // 总分不超过100分
finalAverage = Double.parseDouble(String.format("%.2f", finalAverage));
knowledgeTotalScore.put(knowledge, finalAverage); knowledgeTotalScore.put(knowledge, finalAverage);
} }

@ -89,7 +89,7 @@ public class MoralEducationServiceImpl implements MoralEducationService {
try { try {
records = queryService.queryLessonsInParallel( records = queryService.queryLessonsInParallel(
lessonRecordKey, startTime, endTime, subjectId, tmdId, grade, periodId lessonRecordKey, startTime, endTime, subjectId, null, grade, periodId
); );
// 获取当前月份的起始时间和结束时间 // 获取当前月份的起始时间和结束时间
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
@ -408,7 +408,6 @@ public class MoralEducationServiceImpl implements MoralEducationService {
studentScores.putIfAbsent(studentKey, new HashMap<>()); studentScores.putIfAbsent(studentKey, new HashMap<>());
Map<String, Integer> studentScoreMap = studentScores.get(studentKey); Map<String, Integer> studentScoreMap = studentScores.get(studentKey);
// 计分
// 计分 // 计分
int score = isPraise ? 1 : -1; int score = isPraise ? 1 : -1;
int currentScore = studentScoreMap.getOrDefault(knowledgeBlock, 0) + score; int currentScore = studentScoreMap.getOrDefault(knowledgeBlock, 0) + score;
@ -887,10 +886,12 @@ public class MoralEducationServiceImpl implements MoralEducationService {
int examCount = knowledgeExamCount.get(knowledge); int examCount = knowledgeExamCount.get(knowledge);
double finalAverage = totalAverage / examCount; double finalAverage = totalAverage / examCount;
// 确保分数在60-100之间 // 在基础分60分上累加实际考试得分最多加40分
finalAverage = Math.max(60.0, Math.min(100.0, finalAverage)); // 60分打底不超过100分 double additionalScore = Math.min(finalAverage, 40.0); // 实际考试得分最多加40分
finalAverage = Double.parseDouble(String.format("%.2f", finalAverage)); // 保留两位小数 finalAverage = 60.0 + additionalScore; // 基础分60 + 实际考试得分
finalAverage = Math.min(finalAverage, 100.0); // 总分不超过100分
finalAverage = Double.parseDouble(String.format("%.2f", finalAverage));
knowledgeTotalScore.put(knowledge, finalAverage); knowledgeTotalScore.put(knowledge, finalAverage);
} }

@ -76,8 +76,8 @@ public class AppraiseController {
@PostMapping("findVoteRecord") @PostMapping("findVoteRecord")
@ApiOperation(value = "多条件查询当前登录老师的学生评价(投票)") @ApiOperation(value = "多条件查询当前登录老师的学生评价(投票)")
public R<Map<String, Object>> findMyVoteRecord(@Valid @RequestBody FindVoteRecordDto findVoteRecordDto, HttpServletRequest request) { public R<List<AppraiseRecordVo>> findMyVoteRecord(@Valid @RequestBody FindVoteRecordDto findVoteRecordDto, HttpServletRequest request) {
Map<String, Object> res = evaluationService.findVoteRecord(findVoteRecordDto,request); List<AppraiseRecordVo> res = evaluationService.findVoteRecord(findVoteRecordDto,request);
return R.success(res); return R.success(res);
} }

@ -49,14 +49,13 @@ public interface AppraiseRecordRepository extends CosmosRepository<AppraiseRecor
"(IS_NULL(@academicYearId) or Student.academicYearId = @academicYearId) and " + "(IS_NULL(@academicYearId) or Student.academicYearId = @academicYearId) and " +
"(IS_NULL(@isPraise) or n.appraiseNode.isPraise = @isPraise) and " + "(IS_NULL(@isPraise) or n.appraiseNode.isPraise = @isPraise) and " +
"Student.code = @code") "Student.code = @code")
Page<AppraiseRecordVo> searchNodesByCondition(String targetId, List<AppraiseRecordVo> searchNodesByCondition(String targetId,
String targetType, String targetType,
String classId, String classId,
String creatorId, String creatorId,
String academicYearId, String academicYearId,
Boolean isPraise, Boolean isPraise,
String code, String code);
Pageable pageable);
/** /**
* , praise = null , * , praise = null ,

@ -56,7 +56,7 @@ public interface EvaluationService {
*/ */
void vote(AppraiseVoteDto appraiseVoteDto); void vote(AppraiseVoteDto appraiseVoteDto);
Map<String, Object> findVoteRecord(FindVoteRecordDto findVoteRecordDto, HttpServletRequest request); List<AppraiseRecordVo> findVoteRecord(FindVoteRecordDto findVoteRecordDto, HttpServletRequest request);
void recallVote(RecallVoteDto recallVoteDto); void recallVote(RecallVoteDto recallVoteDto);

@ -435,7 +435,7 @@ public class EvaluationServiceImpl implements EvaluationService {
} }
@Override @Override
public Map<String, Object> findVoteRecord(FindVoteRecordDto findVoteRecordDto, HttpServletRequest request) { public List<AppraiseRecordVo> findVoteRecord(FindVoteRecordDto findVoteRecordDto, HttpServletRequest request) {
String periodId = findVoteRecordDto.getPeriodId(); String periodId = findVoteRecordDto.getPeriodId();
String targetId = StringUtils.isBlank(findVoteRecordDto.getTargetId()) ? null : findVoteRecordDto.getTargetId(); String targetId = StringUtils.isBlank(findVoteRecordDto.getTargetId()) ? null : findVoteRecordDto.getTargetId();
String targetType = StringUtils.isBlank(findVoteRecordDto.getTargetType()) ? null : findVoteRecordDto.getTargetType(); String targetType = StringUtils.isBlank(findVoteRecordDto.getTargetType()) ? null : findVoteRecordDto.getTargetType();
@ -445,48 +445,37 @@ public class EvaluationServiceImpl implements EvaluationService {
String teacherId = loginUser.getId(); String teacherId = loginUser.getId();
String schoolId = loginUser.getSchoolId(); String schoolId = loginUser.getSchoolId();
Map<String, Object> params = new HashMap<>();
List<School.Semester> semesters = schoolRepository.findSemestersById(schoolId, periodId); List<School.Semester> semesters = schoolRepository.findSemestersById(schoolId, periodId);
String academicYearId = SchoolDateUtil.calculateAcademicYearId(semesters, LocalDate.now()); String academicYearId = SchoolDateUtil.calculateAcademicYearId(semesters, LocalDate.now());
// 分页
Sort sort = Sort.by("createTime").descending(); /* // 2. 分页查询(确保 offset 计算正确)
final CosmosPageRequest pageRequest = new CosmosPageRequest(findVoteRecordDto.getCurrent(), findVoteRecordDto.getSize(), null, sort); int page = findVoteRecordDto.getCurrent();
Page<AppraiseRecordVo> appraiseRecordItemPage = appraiseRecordRepository.searchNodesByCondition( int size = findVoteRecordDto.getSize();
//int offset = page * size; // 计算实际偏移量
CosmosPageRequest pageRequest =new CosmosPageRequest(page, size,null);*/
List<AppraiseRecordVo> content = appraiseRecordRepository.searchNodesByCondition(
targetId, targetId,
targetType, targetType,
classId, classId,
teacherId, teacherId,
academicYearId, academicYearId,
isPraise, isPraise,
String.format(PK.PK_APPRAISE_RECORD, schoolId), String.format(PK.PK_APPRAISE_RECORD, schoolId)
pageRequest
); );
List<AppraiseRecordVo> content = appraiseRecordItemPage.getContent(); /* List<AppraiseRecordVo> content = appraiseRecordItemPage.getContent();
long total = appraiseRecordItemPage.getTotalElements(); // 获取总数 long total = appraiseRecordItemPage.getTotalElements(); // 获取总数*/
//提取学生ID 查询学生个人信息
// 3. 提取学生ID查询学生个人信息
Set<String> studentIds = content.stream().map(AppraiseRecordVo::getTargetId).collect(Collectors.toSet()); Set<String> studentIds = content.stream().map(AppraiseRecordVo::getTargetId).collect(Collectors.toSet());
if (studentIds.isEmpty()) throw new ServiceException(ErrorCode.PARAM_ERROR.getCode(), "没有对应学生信息"); if (studentIds.isEmpty()) throw new ServiceException(ErrorCode.PARAM_ERROR.getCode(), "没有对应学生信息");
List<Student> students = studentRepository.findAllByCodeAndIdIn(String.format(PK.STUDENT, schoolId), studentIds); List<Student> students = studentRepository.findAllByCodeAndIdIn(String.format(PK.STUDENT, schoolId), studentIds);
Set<String> classIds = students.stream().map(Student::getClassId).filter(Objects::nonNull).collect(Collectors.toSet()); Set<String> classIds = students.stream().map(Student::getClassId).filter(Objects::nonNull).collect(Collectors.toSet());
List<ClassInfo> classes = classRepository.findAllByCodeAndIdIn(String.format(PK.CLASS, schoolId), classIds); List<ClassInfo> classes = classRepository.findAllByCodeAndIdIn(String.format(PK.CLASS, schoolId), classIds);
//以防万一 其他成员名单 // 4. 补充学生和班级信息
/*GroupDto groupDto = new GroupDto();
groupDto.setIds(new ArrayList<>(classIds));
groupDto.setSchoolId(schoolId);
String url = env.getProperty("ies.server-url-group");
Map<String, Object> groupId = GroupUtil.getGroupId(groupDto,new GroupUtil(env), request,url);
List<RGroupList> rGroupList = new ArrayList<>();
List<RMember> rMembers = new ArrayList<>();
for (Map.Entry<String, Object> 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<List<RGroupList>>() {});
}
}*/
for (AppraiseRecordVo appraiseRecordVo : content) { for (AppraiseRecordVo appraiseRecordVo : content) {
students.stream().filter(student -> student.getId().equals(appraiseRecordVo.getTargetId())) students.stream().filter(student -> student.getId().equals(appraiseRecordVo.getTargetId()))
.findFirst() .findFirst()
@ -499,9 +488,10 @@ public class EvaluationServiceImpl implements EvaluationService {
appraiseRecordVo.setClassName(classInfo.getName()); appraiseRecordVo.setClassName(classInfo.getName());
}); });
} }
params.put("total", total);
params.put("content", content); // 5. 返回分页结果
return params;
return content;
} }
@Override @Override

Loading…
Cancel
Save