update 调整接口和算法

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

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

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

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

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

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

@ -435,7 +435,7 @@ public class EvaluationServiceImpl implements EvaluationService {
}
@Override
public Map<String, Object> findVoteRecord(FindVoteRecordDto findVoteRecordDto, HttpServletRequest request) {
public List<AppraiseRecordVo> 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,48 +445,37 @@ public class EvaluationServiceImpl implements EvaluationService {
String teacherId = loginUser.getId();
String schoolId = loginUser.getSchoolId();
Map<String, Object> params = new HashMap<>();
List<School.Semester> 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<AppraiseRecordVo> 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<AppraiseRecordVo> 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<AppraiseRecordVo> content = appraiseRecordItemPage.getContent();
long total = appraiseRecordItemPage.getTotalElements(); // 获取总数
//提取学生ID 查询学生个人信息
/* List<AppraiseRecordVo> content = appraiseRecordItemPage.getContent();
long total = appraiseRecordItemPage.getTotalElements(); // 获取总数*/
// 3. 提取学生ID查询学生个人信息
Set<String> studentIds = content.stream().map(AppraiseRecordVo::getTargetId).collect(Collectors.toSet());
if (studentIds.isEmpty()) throw new ServiceException(ErrorCode.PARAM_ERROR.getCode(), "没有对应学生信息");
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());
List<ClassInfo> 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<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>>() {});
}
}*/
// 4. 补充学生和班级信息
for (AppraiseRecordVo appraiseRecordVo : content) {
students.stream().filter(student -> student.getId().equals(appraiseRecordVo.getTargetId()))
.findFirst()
@ -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

Loading…
Cancel
Save