From c3252e2966b7a6150409ae6cf6a63eb388dffe08 Mon Sep 17 00:00:00 2001 From: wuchunlei Date: Mon, 9 Sep 2024 16:16:03 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=93=E7=8F=AD=E9=99=90=E5=88=B6=20?= =?UTF-8?q?=E4=B8=AA=E4=BA=BA=E6=88=90=E7=BB=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/ClassEntityServiceImpl.java | 178 ++++++++++-------- 1 file changed, 99 insertions(+), 79 deletions(-) diff --git a/src/main/java/com/peanut/modules/common/service/impl/ClassEntityServiceImpl.java b/src/main/java/com/peanut/modules/common/service/impl/ClassEntityServiceImpl.java index 5bca267e..6ec77d7b 100644 --- a/src/main/java/com/peanut/modules/common/service/impl/ClassEntityServiceImpl.java +++ b/src/main/java/com/peanut/modules/common/service/impl/ClassEntityServiceImpl.java @@ -318,6 +318,19 @@ public class ClassEntityServiceImpl extends ServiceImpl() + .eq(ClassExamUser::getClassId,classEntity.getId()) + .eq(ClassExamUser::getScoreSuccess,0)); + if (classExamUsers>0){ + return R.error("有学员正在考试,请稍后再试"); + } + int replys = classTaskAndQuesReplyDao.selectCount(new LambdaQueryWrapper() + .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> classExamUsers = classExamUserDao.selectMaps(new MPJLambdaWrapper() + .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 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 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 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 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 params) { ClassEntity classEntity = this.getBaseMapper().selectById(params.get("classId").toString()); - ClassModel classModel = classModelDao.selectById(classEntity.getModelId()); List classUsers = classUserDao.selectList(new LambdaQueryWrapper() .eq(ClassUser::getClassId,classEntity.getId()).eq(ClassUser::getRole,"0")); List> resultList = new ArrayList<>(); if (classUsers.size() > 0){ for (ClassUser classUser:classUsers){ params.put("userId",classUser.getUserId()); - Map map = getUserScore(params); + Map map = getUserScore(params); map.put("user",myUserDao.selectById(classUser.getUserId())); - if (classModel.getIsExam()==1){ - List> classExamUsers = classExamUserDao.selectMaps(new MPJLambdaWrapper() - .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 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 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 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 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>() {