From 7e0776dbd8470e21c777de74db1f32c7303eae19 Mon Sep 17 00:00:00 2001 From: Administrator <2863138610@qq.com> Date: 星期五, 02 十二月 2022 11:27:52 +0800 Subject: [PATCH] 成绩管理 --- src/main/java/com/qxueyou/scc/admin/score/action/ScoreController.java | 161 ++++++++++++++++++++++++++++++- src/main/java/com/qxueyou/scc/admin/score/service/IScoreService.java | 11 + src/main/java/com/qxueyou/scc/exercise/dao/ExerciseResultDAO.java | 18 +++ target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMyLectureV.java | 3 src/main/java/com/qxueyou/scc/exam/dao/ExamResultVDao.java | 6 src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java | 27 +++++ src/main/java/com/qxueyou/scc/stucontroller/StuSubjectController.java | 2 src/main/java/com/qxueyou/scc/admin/score/service/impl/ScoreService.java | 13 ++ 8 files changed, 219 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/qxueyou/scc/admin/score/action/ScoreController.java b/src/main/java/com/qxueyou/scc/admin/score/action/ScoreController.java index a587de3..c7821fd 100644 --- a/src/main/java/com/qxueyou/scc/admin/score/action/ScoreController.java +++ b/src/main/java/com/qxueyou/scc/admin/score/action/ScoreController.java @@ -1,5 +1,6 @@ package com.qxueyou.scc.admin.score.action; +import com.qxueyou.scc.admin.classes.model.ClsClassReSubject; import com.qxueyou.scc.admin.score.model.Score; import com.qxueyou.scc.admin.score.service.impl.ScoreService; import com.qxueyou.scc.base.model.Pager; @@ -11,14 +12,20 @@ import com.qxueyou.scc.exam.model.ExamReExamPaper; import com.qxueyou.scc.exam.model.ExamResultV; import com.qxueyou.scc.exercise.model.ExerciseRecord; +import com.qxueyou.scc.exercise.model.ExerciseResultV; +import com.qxueyou.scc.teach.subject.model.Subject; +import com.qxueyou.scc.teach.subject.model.SubjectUtils; +import com.qxueyou.scc.teach.subject.model.view.MyLectureV; +import com.qxueyou.scc.teach.subject.model.view.MySubjectV; +import com.qxueyou.scc.teach.subject.service.ILectureService; +import com.qxueyou.scc.teach.subject.service.impl.SubjectService; import io.swagger.annotations.Api; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.*; +import java.math.BigDecimal; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -31,10 +38,16 @@ // 分页查询中,默认记录条数和页数 private static final int DEFAULT_PAGE_SIZE = 10; - private static final int DEFAULT_PAGE_NUM = 2; + private static final int DEFAULT_PAGE_NUM = 1; @Autowired ScoreService scoreService; + + @Autowired + ILectureService lectureService; + + @Autowired + SubjectService subjectService; @RequestMapping(value = "lstScore", method = RequestMethod.GET) public @ResponseBody @@ -47,10 +60,142 @@ }else { classId += "%"; } + List<Map<String,Object>> mapList = new ArrayList<>(); + List<ExamResultV> examResultVS = scoreService.allExamResultV(classId); + List<ExerciseResultV> exerciseResultVS = scoreService.allExerciseResultV(classId); //总成绩数量 - int totalCount = scoreService.findCount("from ExamResultV where class_Id Like ?",CollectionUtils.newList(classId)); + int totalCount = scoreService.findCount("from ExamResultV where class_Id Like ? and score != null and score != 0",CollectionUtils.newList(classId)); + if (examResultVS.size() < exerciseResultVS.size()){ + totalCount = exerciseResultVS.size(); + } + int totalPage = totalCount % pageSize > 0 ? totalCount/pageSize + 1 : totalCount/pageSize; + int currentPage = pageNum < totalPage? pageNum : totalPage; + int pageStart = (currentPage-1) * pageSize; + int pageEnd = pageSize * currentPage > totalCount ? totalCount : pageSize * currentPage; pager.setTotalCount(totalCount); - List<ExamResultV> list = scoreService.allExamResultV(classId,pager); - return new Result(true,"success",CollectionUtils.newObjectMap("data", list, "scoreCount", totalCount)); + + if(examResultVS.size() > exerciseResultVS.size()) { + for (ExamResultV e : examResultVS) { + + Map<String, Object> map = new HashMap<>(); + boolean esisNull = true; + BigDecimal examScore; + if (e.getScore() == null) { + examScore = BigDecimal.ZERO; + System.out.println(examScore); + } else { + examScore = e.getScore(); + } + for (ExerciseResultV es : exerciseResultVS) { + if (e.getId().getStudentNo().equals(es.getStudentNo())) { + esisNull = false; + Double exerciseInfoScore = es.getScore() == null ? 0.0 : es.getScore().doubleValue(); + map.put("studentName", es.getStudentName()); + map.put("studentNumber", es.getStudentNo()); + map.put("sex", es.getSex()); + map.put("status", e.getStatus()); + map.put("studyTime", 0); + map.put("subjectScore", 0); + map.put("exerciseInfoScore", exerciseInfoScore); + map.put("examScore", examScore); + map.put("totalScore", exerciseInfoScore + examScore.doubleValue()); + } + } + if (esisNull) { + map.put("studentName", e.getStudentName()); + map.put("studentNumber", e.getId().getStudentNo()); + map.put("sex", e.getSex()); + map.put("status", e.getStatus()); + map.put("studyTime", 0); + map.put("subjectScore", 0); + map.put("exerciseInfoScore", 0); + map.put("examScore", examScore); + map.put("totalScore", examScore); + } + mapList.add(map); + } + }else { + for (ExerciseResultV es : exerciseResultVS) { + Map<String, Object> map = new HashMap<>(); + boolean esisNull = true; + BigDecimal exerciseInfoScore; + if (es.getScore() == null) { + exerciseInfoScore = BigDecimal.ZERO; + } else { + exerciseInfoScore = es.getScore(); + } + for (ExamResultV e : examResultVS) { + if (e.getId().getStudentNo().equals(es.getStudentNo())) { + esisNull = false; + Double examScore = e.getScore() == null ? 0.0 : e.getScore().doubleValue(); + map.put("studentName", es.getStudentName()); + map.put("studentNumber", es.getStudentNo()); + map.put("sex", es.getSex()); + map.put("status", e.getStatus()); + map.put("studyTime", 0); + map.put("subjectScore", 0); + map.put("exerciseInfoScore", exerciseInfoScore); + map.put("examScore", examScore); + map.put("totalScore", examScore + exerciseInfoScore.doubleValue()); + } + } + if (esisNull) { + map.put("studentName", es.getStudentName()); + map.put("studentNumber", es.getStudentNo()); + map.put("sex", es.getSex()); + map.put("status", 0); + map.put("studyTime", 0); + map.put("subjectScore", 0); + map.put("exerciseInfoScore", exerciseInfoScore); + map.put("examScore", 0); + map.put("totalScore", exerciseInfoScore); + } + mapList.add(map); + } + } + return new Result(true,"success",CollectionUtils.newObjectMap("data", mapList.subList(pageStart,pageEnd), "scoreCount", totalCount)); + } + + @RequestMapping(value = "getScoreDetail", method = RequestMethod.GET) + @ResponseBody + public Result getScoreDetail(String studentNo){ + List<ExamResultV> examLst = scoreService.find("from ExamResultV where id.studentNo = ?",CollectionUtils.newList(studentNo),ExamResultV.class); + List<ExerciseResultV> exerciseInfoLst = scoreService.find("from ExerciseResultV where studentNo = ?",CollectionUtils.newList(studentNo),ExerciseResultV.class); +// List<MyLectureV> myLectureVList = scoreService .find("from MyLectureV where id.userId = ?",CollectionUtils.newList(examLst.get(0).getUserId()),MyLectureV.class); + List<Map<String,Object>> mapList = new ArrayList<>(); + List<ClsClassReSubject> clsClassReSubjects = scoreService.find("from ClsClassReSubject where classId = ? and deleteFlag is false",CollectionUtils.newList(examLst.get(0).getId().getClassId()),ClsClassReSubject.class); + for(ClsClassReSubject c : clsClassReSubjects) { + Double percent = 0.0; + Double progressValue = 0.0; + Double percentAvg = 0.0; + List<MyLectureV> myLectureVList = lectureService.listLectureVBySubjectId(examLst.get(0).getUserId(), c.getSubjectId(), "", 1000, 1, null); + if (!myLectureVList.isEmpty()) { + for (MyLectureV myLectureV : myLectureVList) { + if (myLectureV.getPercent() != null && myLectureV.getProgressValue() != null) { + percent += myLectureV.getPercent(); + progressValue += myLectureV.getProgressValue().intValue(); + } + } + if (percentAvg.isNaN()) { + percentAvg = 0.0; + } + percentAvg = percent / myLectureVList.size() * 100;; + Map<String, Object> map = new HashMap<>(); + map.put("subjectName", myLectureVList.get(0).getSubjectName()); + map.put("percent", percentAvg.intValue()); + map.put("durationTime", progressValue); + map.put("endStudyTime", myLectureVList.get(0).getLectureUpdateTime()); + mapList.add(map); + }else { + MySubjectV mySubjectV = scoreService.findUnique("from MySubjectV where subjectId = ?",CollectionUtils.newList(c.getSubjectId()),MySubjectV.class); + Map<String, Object> map = new HashMap<>(); + map.put("subjectName", mySubjectV.getSubjectName()); + map.put("percent", 0); + map.put("durationTime", 0); + map.put("endStudyTime", null); + mapList.add(map); + } + } + return new Result(true,"success",CollectionUtils.newObjectMap("subjectLst",mapList,"examLst",examLst,"exerciseInfoLst",exerciseInfoLst)); } } diff --git a/src/main/java/com/qxueyou/scc/admin/score/service/IScoreService.java b/src/main/java/com/qxueyou/scc/admin/score/service/IScoreService.java index cab37de..f05f8b7 100644 --- a/src/main/java/com/qxueyou/scc/admin/score/service/IScoreService.java +++ b/src/main/java/com/qxueyou/scc/admin/score/service/IScoreService.java @@ -2,6 +2,7 @@ import com.qxueyou.scc.base.model.Pager; import com.qxueyou.scc.exam.model.ExamResultV; +import com.qxueyou.scc.exercise.model.ExerciseResultV; import java.util.List; import java.util.Map; @@ -23,9 +24,15 @@ Map<String,Object> queryClassHomeworkScoreInfo(String classId); /** - * 获取成绩信息 + * 获取考试成绩信息 * @return */ - List<ExamResultV> allExamResultV(String classId, Pager page); + List<ExamResultV> allExamResultV(String classId); + + /** + *获取作业成绩信息 + */ + List<ExerciseResultV> allExerciseResultV(String classId); + } diff --git a/src/main/java/com/qxueyou/scc/admin/score/service/impl/ScoreService.java b/src/main/java/com/qxueyou/scc/admin/score/service/impl/ScoreService.java index 51a83bb..b2fefea 100644 --- a/src/main/java/com/qxueyou/scc/admin/score/service/impl/ScoreService.java +++ b/src/main/java/com/qxueyou/scc/admin/score/service/impl/ScoreService.java @@ -6,6 +6,8 @@ import com.qxueyou.scc.base.model.Pager; import com.qxueyou.scc.exam.dao.ExamResultVDao; import com.qxueyou.scc.exam.model.ExamResultV; +import com.qxueyou.scc.exercise.dao.ExerciseResultDAO; +import com.qxueyou.scc.exercise.model.ExerciseResultV; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -26,6 +28,9 @@ @Autowired ExamResultVDao examResultVDao; + + @Autowired + ExerciseResultDAO exerciseResultDAO; @Override public Map<String,Object> queryClassExamScoreInfo(String classId) { @@ -51,8 +56,12 @@ } @Override - public List<ExamResultV> allExamResultV(String classId, Pager page) { - return examResultVDao.getResultList(classId,page); + public List<ExamResultV> allExamResultV(String classId) { + return examResultVDao.getResultList(classId); + } + @Override + public List<ExerciseResultV> allExerciseResultV(String classId){ + return exerciseResultDAO.getResultList(classId); } diff --git a/src/main/java/com/qxueyou/scc/exam/dao/ExamResultVDao.java b/src/main/java/com/qxueyou/scc/exam/dao/ExamResultVDao.java index 35b8e91..cfc4134 100644 --- a/src/main/java/com/qxueyou/scc/exam/dao/ExamResultVDao.java +++ b/src/main/java/com/qxueyou/scc/exam/dao/ExamResultVDao.java @@ -11,9 +11,9 @@ @Repository public class ExamResultVDao extends BaseDAO { - public List<ExamResultV> getResultList(String classId, Pager pager) { - String hql = "from ExamResultV where class_Id LIKE ?"; - return this.findList(hql,pager,CollectionUtils.newList(classId),ExamResultV.class); + public List<ExamResultV> getResultList(String classId) { + String hql = "from ExamResultV where class_Id LIKE ? and score != null and score != 0"; + return this.find(hql,CollectionUtils.newList(classId),ExamResultV.class); } diff --git a/src/main/java/com/qxueyou/scc/exercise/dao/ExerciseResultDAO.java b/src/main/java/com/qxueyou/scc/exercise/dao/ExerciseResultDAO.java new file mode 100644 index 0000000..5c34baa --- /dev/null +++ b/src/main/java/com/qxueyou/scc/exercise/dao/ExerciseResultDAO.java @@ -0,0 +1,18 @@ +package com.qxueyou.scc.exercise.dao; + +import com.qxueyou.scc.base.dao.BaseDAO; +import com.qxueyou.scc.base.model.Pager; +import com.qxueyou.scc.base.util.CollectionUtils; +import com.qxueyou.scc.exercise.model.ExerciseResultV; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public class ExerciseResultDAO extends BaseDAO { + + public List<ExerciseResultV> getResultList(String classId) { + String hql = "from ExerciseResultV where class_Id LIKE ? and score != null and score != 0"; + return this.find(hql, CollectionUtils.newList(classId),ExerciseResultV.class); + } +} diff --git a/src/main/java/com/qxueyou/scc/stucontroller/StuSubjectController.java b/src/main/java/com/qxueyou/scc/stucontroller/StuSubjectController.java index 9610399..d14893a 100644 --- a/src/main/java/com/qxueyou/scc/stucontroller/StuSubjectController.java +++ b/src/main/java/com/qxueyou/scc/stucontroller/StuSubjectController.java @@ -487,8 +487,6 @@ progressLst.get(0).put("percent", subject.getPercent()); progressLst.get(0).put("studyTime", subject.getProgressValue()); coursewareName = myLectureVList.get(0).getLectureName(); - }else { - } return new Result(true, "success", CollectionUtils.newObjectMap("subject", QBeanUtils.bean2Map(subject, diff --git a/src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java b/src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java index 0b95484..ade7300 100644 --- a/src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java +++ b/src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java @@ -645,12 +645,35 @@ where(qSubjectProgressTreeV.id.userId.eq(qUser.userId).and(qSubjectProgressTreeV.nodeType.eq(nodeType)) .and(qSubjectProgressTreeV.id.nodeId.eq(nodeId))).orderBy(order).fetch().stream().map(tuple -> { + List<ClsClassReSubject> clsClassReSubjects = find("from ClsClassReSubject where classId = ?",CollectionUtils.newList(nodeId),ClsClassReSubject.class); + Double percent = 0.0; + Double progressValue = 0.0; + Double percentAvg = 0.0; + int size = 0; + for(ClsClassReSubject c : clsClassReSubjects) { + List<MyLectureV> myLectureVList = lectureService.listLectureVBySubjectId(tuple.get(qUser.userId), c.getSubjectId(), "", 1000, 1, null); + if (!myLectureVList.isEmpty()) { + for (MyLectureV myLectureV : myLectureVList) { + if (myLectureV.getPercent() != null && myLectureV.getProgressValue() != null) { + percent += myLectureV.getPercent(); + progressValue += myLectureV.getProgressValue().intValue(); + } + } + size += myLectureVList.size(); + if (percentAvg.isNaN()) { + percentAvg += 0.0; + } + } + } + percentAvg += percent / size; Map<String, Object> map = new HashMap<>(); map.put("userName", tuple.get(qUser.name)); map.put("userId", tuple.get(qUser.userId)); map.put("classId", tuple.get(qSubjectProgressTreeV.id.nodeId)); - map.put("percent", tuple.get(qSubjectProgressTreeV.percent)); - map.put("progressValue", tuple.get(qSubjectProgressTreeV.progressValue)); + map.put("percent", percentAvg); + map.put("progressValue", progressValue); +// map.put("percent", tuple.get(qSubjectProgressTreeV.percent)); +// map.put("progressValue", tuple.get(qSubjectProgressTreeV.progressValue)); return map; }).collect(Collectors.toList()); return lstMap; diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMyLectureV.java b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMyLectureV.java index 77ad532..f52e8a2 100644 --- a/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMyLectureV.java +++ b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMyLectureV.java @@ -46,9 +46,6 @@ public final StringPath userName = createString("userName"); - public final StringPath deleteFlag = createString("deleteFlag"); - - public QMyLectureV(String variable) { this(MyLectureV.class, forVariable(variable), INITS); } -- Gitblit v1.8.0