结班限制

个人成绩
This commit is contained in:
wuchunlei
2024-09-09 16:16:03 +08:00
parent 0fd8f83b47
commit c3252e2966

View File

@@ -318,6 +318,19 @@ public class ClassEntityServiceImpl extends ServiceImpl<ClassEntityDao, ClassEnt
);
}
}else {
//结班限制
int classExamUsers = classExamUserDao.selectCount(new LambdaQueryWrapper<ClassExamUser>()
.eq(ClassExamUser::getClassId,classEntity.getId())
.eq(ClassExamUser::getScoreSuccess,0));
if (classExamUsers>0){
return R.error("有学员正在考试,请稍后再试");
}
int replys = classTaskAndQuesReplyDao.selectCount(new LambdaQueryWrapper<ClassTaskAndQuesReply>()
.eq(ClassTaskAndQuesReply::getClassId,classEntity.getId())
.eq(ClassTaskAndQuesReply::getScoreSuccess,0));
if (replys>0){
return R.error("学员打分未完成,请完成打分后结班");
}
classEntity.setState("2");
classEntity.setEndTime(new Date());
this.getBaseMapper().updateById(classEntity);
@@ -1077,98 +1090,105 @@ public class ClassEntityServiceImpl extends ServiceImpl<ClassEntityDao, ClassEnt
}
map.put("experienceScore",experienceScore);
}
//处理分数占比
if (classModel.getIsExam()==1){
List<Map<String,Object>> classExamUsers = classExamUserDao.selectMaps(new MPJLambdaWrapper<ClassExamUser>()
.eq(ClassExamUser::getUserId,params.get("userId").toString())
.eq(ClassExamUser::getClassId,classEntity.getId())
.eq(ClassExamUser::getScoreSuccess,1)
.selectAs(ClassExamUser::getId,"id")
.selectAs(ClassExamUser::getScore,"score")
.orderByAsc(ClassExamUser::getStartTime));
int examScore = 0;
if (classExamUsers.size() > 0){
for (Map<String,Object> classExamUser:classExamUsers){
if ((int)classExamUser.get("score")>examScore){
examScore = (int)classExamUser.get("score");
}
}
}
map.put("examScore",examScore);
map.put("classExamUsers",classExamUsers);
}
BigDecimal userScore = new BigDecimal(0);;
double staticScore = 2.5;
if(classModel.getIsExam()==1){
BigDecimal examScore = new BigDecimal(map.get("examScore").toString());
map.put("examScore",examScore);
userScore = userScore.add(examScore);
}
if(classModel.getIsQuestion()==1){
BigDecimal questionScore = new BigDecimal(map.get("questionScore").toString());
if (questionScore.compareTo(new BigDecimal(0))!=0){
MPJLambdaWrapper<CourseCatalogueChapterEntity> wrapper = new MPJLambdaWrapper();
wrapper.leftJoin(ClassCourse.class,ClassCourse::getCourseId,CourseCatalogueChapterEntity::getCourseId);
wrapper.leftJoin(ClassModel.class,ClassModel::getId,ClassCourse::getModelId);
wrapper.eq(ClassModel::getId,classModel.getId());
wrapper.ne(CourseCatalogueChapterEntity::getQuestions,"");
int count = courseCatalogueChapterDao.selectCount(wrapper);
BigDecimal totalScore = new BigDecimal(staticScore*count);
questionScore = questionScore.divide(totalScore);
questionScore = questionScore.multiply(new BigDecimal(classModel.getQuestionScore()));
questionScore = questionScore.setScale(2,RoundingMode.HALF_UP);
map.put("questionScore",questionScore);
userScore = userScore.add(questionScore);
}
}
if(classModel.getIsTask()==1){
BigDecimal task0Score = new BigDecimal(map.get("task0Score").toString());
if (task0Score.compareTo(new BigDecimal(0))!=0){
MPJLambdaWrapper<ClassTask> wrapper = new MPJLambdaWrapper();
wrapper.eq(ClassTask::getClassId,classEntity.getId());
wrapper.eq(ClassTask::getType,"0");
int count = classTaskDao.selectCount(wrapper);
BigDecimal totalScore = new BigDecimal(staticScore*count);
task0Score = task0Score.divide(totalScore);
task0Score = task0Score.multiply(new BigDecimal(classModel.getTaskScore()));
task0Score = task0Score.setScale(2,RoundingMode.HALF_UP);
map.put("task0Score",task0Score);
userScore = userScore.add(task0Score);
}
}
if(classModel.getIsMedicalcase()==1){
BigDecimal task1Score = new BigDecimal(map.get("task1Score").toString());
if (task1Score.compareTo(new BigDecimal(0))!=0){
MPJLambdaWrapper<ClassTask> wrapper = new MPJLambdaWrapper();
wrapper.eq(ClassTask::getClassId,classEntity.getId());
wrapper.eq(ClassTask::getType,"1");
int count = classTaskDao.selectCount(wrapper);
BigDecimal totalScore = new BigDecimal(staticScore*count);
task1Score = task1Score.divide(totalScore);
task1Score = task1Score.multiply(new BigDecimal(classModel.getMedicalcaseScore()));
task1Score = task1Score.setScale(2,RoundingMode.HALF_UP);
map.put("task1Score",task1Score);
userScore = userScore.add(task1Score);
}
}
if(classModel.getIsExperience()==1){
BigDecimal experienceScore = new BigDecimal(map.get("experienceScore").toString());
if (experienceScore.compareTo(new BigDecimal(classModel.getExperienceScore()))>-1){
experienceScore = new BigDecimal(classModel.getExperienceScore());
}
map.put("experienceScore",experienceScore);
userScore = userScore.add(experienceScore);
}
map.put("userScore",userScore);
return map;
}
@Override
public List userScoreList(Map<String, Object> params) {
ClassEntity classEntity = this.getBaseMapper().selectById(params.get("classId").toString());
ClassModel classModel = classModelDao.selectById(classEntity.getModelId());
List<ClassUser> classUsers = classUserDao.selectList(new LambdaQueryWrapper<ClassUser>()
.eq(ClassUser::getClassId,classEntity.getId()).eq(ClassUser::getRole,"0"));
List<Map<String,Object>> resultList = new ArrayList<>();
if (classUsers.size() > 0){
for (ClassUser classUser:classUsers){
params.put("userId",classUser.getUserId());
Map<String,Object> map = getUserScore(params);
Map<String, Object> map = getUserScore(params);
map.put("user",myUserDao.selectById(classUser.getUserId()));
if (classModel.getIsExam()==1){
List<Map<String,Object>> classExamUsers = classExamUserDao.selectMaps(new MPJLambdaWrapper<ClassExamUser>()
.eq(ClassExamUser::getUserId,classUser.getUserId())
.eq(ClassExamUser::getClassId,classEntity.getId())
.eq(ClassExamUser::getScoreSuccess,1)
.selectAs(ClassExamUser::getId,"id")
.selectAs(ClassExamUser::getScore,"score")
.orderByAsc(ClassExamUser::getStartTime));
int examScore = 0;
if (classExamUsers.size() > 0){
for (Map<String,Object> classExamUser:classExamUsers){
if ((int)classExamUser.get("score")>examScore){
examScore = (int)classExamUser.get("score");
}
}
}
map.put("examScore",examScore);
map.put("classExamUsers",classExamUsers);
}
//处理分数占比
BigDecimal userScore = new BigDecimal(0);;
double staticScore = 2.5;
if(classModel.getIsExam()==1){
BigDecimal examScore = new BigDecimal(map.get("examScore").toString());
map.put("examScore",examScore);
userScore = userScore.add(examScore);
}
if(classModel.getIsQuestion()==1){
BigDecimal questionScore = new BigDecimal(map.get("questionScore").toString());
MPJLambdaWrapper<CourseCatalogueChapterEntity> wrapper = new MPJLambdaWrapper();
wrapper.leftJoin(ClassCourse.class,ClassCourse::getCourseId,CourseCatalogueChapterEntity::getCourseId);
wrapper.leftJoin(ClassModel.class,ClassModel::getId,ClassCourse::getModelId);
wrapper.eq(ClassModel::getId,classModel.getId());
wrapper.ne(CourseCatalogueChapterEntity::getQuestions,"");
int count = courseCatalogueChapterDao.selectCount(wrapper);
BigDecimal totalScore = new BigDecimal(staticScore*count);
questionScore = questionScore.divide(totalScore);
questionScore = questionScore.multiply(new BigDecimal(classModel.getQuestionScore()));
questionScore = questionScore.setScale(2,RoundingMode.HALF_UP);
map.put("questionScore",questionScore);
userScore = userScore.add(questionScore);
}
if(classModel.getIsTask()==1){
BigDecimal task0Score = new BigDecimal(map.get("task0Score").toString());
MPJLambdaWrapper<ClassTask> wrapper = new MPJLambdaWrapper();
wrapper.eq(ClassTask::getClassId,classEntity.getId());
wrapper.eq(ClassTask::getType,"0");
int count = classTaskDao.selectCount(wrapper);
BigDecimal totalScore = new BigDecimal(staticScore*count);
task0Score = task0Score.divide(totalScore);
task0Score = task0Score.multiply(new BigDecimal(classModel.getTaskScore()));
task0Score = task0Score.setScale(2,RoundingMode.HALF_UP);
map.put("task0Score",task0Score);
userScore = userScore.add(task0Score);
}
if(classModel.getIsMedicalcase()==1){
BigDecimal task1Score = new BigDecimal(map.get("task1Score").toString());
MPJLambdaWrapper<ClassTask> wrapper = new MPJLambdaWrapper();
wrapper.eq(ClassTask::getClassId,classEntity.getId());
wrapper.eq(ClassTask::getType,"1");
int count = classTaskDao.selectCount(wrapper);
BigDecimal totalScore = new BigDecimal(staticScore*count);
task1Score = task1Score.divide(totalScore);
task1Score = task1Score.multiply(new BigDecimal(classModel.getMedicalcaseScore()));
task1Score = task1Score.setScale(2,RoundingMode.HALF_UP);
map.put("task1Score",task1Score);
userScore = userScore.add(task1Score);
}
if(classModel.getIsExperience()==1){
BigDecimal experienceScore = new BigDecimal(map.get("experienceScore").toString());
if (experienceScore.compareTo(new BigDecimal(classModel.getExperienceScore()))>-1){
experienceScore = new BigDecimal(classModel.getExperienceScore());
}
map.put("experienceScore",experienceScore);
userScore = userScore.add(experienceScore);
}
map.put("userScore",userScore);
resultList.add(map);
}
Collections.sort(resultList, new Comparator<Map<String,Object>>() {