package com.qxueyou.scc.admin.progress.dao; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.cache.annotation.CachePut; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Repository; import com.qxueyou.scc.admin.progress.model.Progress; import com.qxueyou.scc.admin.progress.model.SubjectLectureProgressDetail; import com.qxueyou.scc.admin.progress.model.view.SubjectProgressTreeV; import com.qxueyou.scc.admin.progress.service.impl.StudyProgressUtils; import com.qxueyou.scc.base.dao.BaseDAO; import com.qxueyou.scc.base.util.CollectionUtils; import com.qxueyou.scc.teach.subject.model.Subject; @Repository public class ProgressDAO extends BaseDAO { public Progress getProgress(String progressTypeLecture, String targetId, String learnerId) { String hql = "from Progress where type=:type and learnerId=:learnerId and targetId=:targetId"; Progress progress = findUniqueByHql(hql, CollectionUtils.newObjectMap("type", Progress.PROGRESS_TYPE_LECTURE, "learnerId", learnerId, "targetId", targetId)); return progress; } /** * ¸ù¾ÝtargetIdºÍlearnerId»ñÈ¡½ø¶È * * @param targetId * targetId * @param learnerId * ѧϰÕßid * @return */ @Cacheable(value = "progress", key = "#targetId+#learnerId") public int[][] getProgress(String targetId, String learnerId) { List lstDetail = this.find("from SubjectLectureProgressDetail where targetId = ? and learnerId = ? and deleteFlag is false", CollectionUtils.newList(targetId, learnerId), SubjectLectureProgressDetail.class); if(lstDetail == null || lstDetail.isEmpty()) { return new int[][] {}; }else { int[][] progress = new int[lstDetail.size()][2]; int i = 0; for(SubjectLectureProgressDetail objDetail : lstDetail) { progress[i++] = new int[] {objDetail.getStart(), objDetail.getEnd()}; } return progress; } } @CachePut(value = "progress", key = "#targetId+#learnerId") public int[][] mergeProgress(String targetId, String learnerId, int start, int end, int[][] origProgress) { return StudyProgressUtils.merge(origProgress, start, end); } /** * »ñȡѧÉúµÄ¸÷¸ö½ÚµãµÄѧϰ½ø¶È,½ø¶ÈÖµ * * @param parentId * @param userId * @return */ public Map getItemProgress(String parentId, String userId) { String getProgressAvgByHql = "select avg(percent) as progressPercent , sum(progressValue) as progressValue" + " from SubjectProgressTreeV where parentId =:parentId and id.userId =:userId"; List> mapLst = findListWithMapByHql(getProgressAvgByHql, CollectionUtils.newObjectMap("parentId", parentId, "userId", userId)); Map map = mapLst.get(0); return map; } /** * »ñÈ¡µ±Ç°½Úµãϵĸ¸½Úµã * * @param nodeId * @return */ public SubjectProgressTreeV getSubjectProgressTreeV(String nodeId, String userId) { String hql = "from SubjectProgressTreeV where id.nodeId =:nodeId and id.userId =:userId"; SubjectProgressTreeV subjectProgressTreeV = findUniqueByHql(hql, CollectionUtils.newObjectMap("nodeId", nodeId, "userId", userId)); return subjectProgressTreeV; } /** * ¸ù¾ÝsubjectId»ñȡսÚÁбí * * @param parentId * @param userId * @return */ public List getSubjectChapterTreeVList(String parentId, String userId) { String hql = "from SubjectProgressTreeV where parentId =:parentId and id.userId =:userId and nodeType='chapter' order by createTime asc"; return findByComplexHql(hql, CollectionUtils.newObjectMap("parentId", parentId, "userId", userId), SubjectProgressTreeV.class); } /** * »ñÈ¡progress ¶ÔÏó */ public Progress getProgressObject(String targetId, String userId) { return findUniqueByHql( "from Progress where targetId =:targetId and learnerId =:userId and deleteFlag is false", CollectionUtils.newObjectMap("targetId", targetId, "userId", userId)); } /** * ¼Ç¼Óû§Ã¿¸ö¿Î³ÌѧϰµÄλÖà */ @CachePut(value = "lastStudied", key = "#userId + #subjectId + #classId") public Map putStudyById(String userId, String subjectId, String lectureId, String lectureParentId, String classId) { Map map = new HashMap(4); Subject subject = this.read(Subject.class, subjectId); map.put("subjectId", subjectId); map.put("lectureId", lectureId); map.put("lectureParentId", lectureParentId); map.put("classId", classId); map.put("subjectName", subject.getName()); return map; } @CachePut(value = "lastStudied", key = "#userId") public Map putStudyByUserId(String userId, String subjectId, String lectureId, String lectureParentId, String classId) { Map map = new HashMap(4); map.put("subjectId", subjectId); map.put("lectureId", lectureId); map.put("lectureParentId", lectureParentId); map.put("classId", classId); return map; } /** * »ñÈ¡Óû§Ã¿¸ö¿Î³ÌÉÏ´ÎѧϰµÄÊý¾Ý */ @Cacheable(value = "lastStudied", key = "#userId + #subjectId +#classId") public Map getStudyById(String userId, String subjectId, String classId) { return new HashMap(); } /** * »ñÈ¡Óû§ÉÏ´ÎѧϰµÄÊý¾Ý */ @Cacheable(value = "lastStudied", key = "#userId") public Map getStudyByUserId(String userId) { return new HashMap(); } }