| | |
| | | @Override |
| | | public List<MyLectureV> listLectureV(String learnerId, String chapterId, String keyword, Integer pageSize, |
| | | Integer pageNum, String type) { |
| | | StringBuffer hql1 = new StringBuffer("from MyLectureV where subjectId=? and id.userId=?"); |
| | | List<Object> args1 = CollectionUtils.newList(chapterId, learnerId); |
| | | List<MyLectureV> myLectureVList = findList(hql1.toString(), new Pager(pageSize, pageNum), args1, MyLectureV.class); |
| | | StringBuffer hql = new StringBuffer("from MyLectureV where subjectId=? and id.userId=?"); |
| | | List<Object> args = CollectionUtils.newList(chapterId, learnerId); |
| | | List<MyLectureV> myLectureVList = findList(hql.toString(), new Pager(pageSize, pageNum), args, MyLectureV.class); |
| | | |
| | | StringBuffer hql = new StringBuffer("from MyLectureV where chapterId=? and id.userId=? order by lectureCreateTime desc"); |
| | | List<Object> args = CollectionUtils.newList(myLectureVList.get(0).getChapterId(), learnerId); |
| | | if(myLectureVList.size() < 1){ |
| | | |
| | | }else { |
| | | hql = new StringBuffer("from MyLectureV where chapterId=? and id.userId=? order by lectureCreateTime desc"); |
| | | args = CollectionUtils.newList(myLectureVList.get(0).getChapterId(), learnerId); |
| | | } |
| | | |
| | | if (StringUtils.isNotEmpty(type)) { |
| | | hql.append(" and lectureType=?"); |
| | | args.add(type); |
| | | } |
| | | |
| | | List<MyLectureV> result = findList(hql.toString(), new Pager(pageSize, pageNum), args, MyLectureV.class); |
| | | |
| | | return result; |
| | | } |
| | | |
| | |
| | | |
| | | @Override |
| | | public Result doStudy(String clsLectureId, Double from, Double to) { |
| | | return progressService.addProgress(Progress.PROGRESS_TYPE_LECTURE, clsLectureId, from.intValue(), to.intValue(), |
| | | return progressService.addProgress(Progress.PROGRESS_TYPE_LECTURE, clsLectureId, from.doubleValue(), to.doubleValue(), |
| | | ClientUtils.getUserId()); |
| | | } |
| | | |
| | |
| | | |
| | | /** |
| | | * 根据targetId和learnerId获取进度 |
| | | * |
| | | * |
| | | * @param targetId |
| | | * targetId |
| | | * @param learnerId |
| | |
| | | * @return |
| | | */ |
| | | @Cacheable(value = "progress", key = "#targetId+#learnerId") |
| | | public int[][] getProgress(String targetId, String learnerId) { |
| | | public Double[][] getProgress(String targetId, String learnerId) { |
| | | List<SubjectLectureProgressDetail> 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[][] {}; |
| | | return new Double[][] {}; |
| | | }else { |
| | | int[][] progress = new int[lstDetail.size()][2]; |
| | | Double[][] progress = new Double[lstDetail.size()][2]; |
| | | int i = 0; |
| | | for(SubjectLectureProgressDetail objDetail : lstDetail) { |
| | | progress[i++] = new int[] {objDetail.getStart(), objDetail.getEnd()}; |
| | | progress[i++] = new Double[] {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) { |
| | | public Double[][] mergeProgress(String targetId, String learnerId, Double start, Double end, Double[][] origProgress) { |
| | | return StudyProgressUtils.merge(origProgress, start, end); |
| | | } |
| | | |
| | | /** |
| | | * 获取学生的各个节点的学习进度,进度值 |
| | | * |
| | | * |
| | | * @param parentId |
| | | * @param userId |
| | | * @return |
| | |
| | | |
| | | /** |
| | | * 获取当前节点下的父节点 |
| | | * |
| | | * |
| | | * @param nodeId |
| | | * @return |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 根据subjectId获取章节列表 |
| | | * |
| | | * |
| | | * @param parentId |
| | | * @param userId |
| | | * @return |
| | |
| | | |
| | | /** |
| | | * 学习进度明细 |
| | | * |
| | | * |
| | | * @author sven |
| | | * |
| | | */ |
| | |
| | | private static final long serialVersionUID = -1565188126862586738L; |
| | | private String detailId; |
| | | private String progressId; |
| | | private int start; |
| | | private int end; |
| | | private Double start; |
| | | private Double end; |
| | | private String learnerId; |
| | | private String targetId; |
| | | private Date createTime; |
| | |
| | | private String updator; |
| | | private String updateId; |
| | | private boolean deleteFlag; |
| | | |
| | | |
| | | |
| | | |
| | | public SubjectLectureProgressDetail() { |
| | | } |
| | | |
| | |
| | | this.progressId = progressId; |
| | | } |
| | | |
| | | public int getStart() { |
| | | public Double getStart() { |
| | | return start; |
| | | } |
| | | |
| | | |
| | | |
| | | public void setStart(int start) { |
| | | public void setStart(Double start) { |
| | | this.start = start; |
| | | } |
| | | |
| | | |
| | | |
| | | public int getEnd() { |
| | | public Double getEnd() { |
| | | return end; |
| | | } |
| | | |
| | | |
| | | |
| | | public void setEnd(int end) { |
| | | public void setEnd(Double end) { |
| | | this.end = end; |
| | | } |
| | | |
| | |
| | | import com.qxueyou.scc.base.model.Result; |
| | | |
| | | public interface IDetailProgressService { |
| | | |
| | | |
| | | /** |
| | | * 新增学习记录 |
| | | * @param type 进度类型 |
| | |
| | | * @param end 学习结束位置 |
| | | * @return |
| | | */ |
| | | Result addProgress(String targetId,String learnerId,int start,int end); |
| | | |
| | | Result addProgress(String targetId,String learnerId,Double start,Double end); |
| | | |
| | | /** |
| | | * 返回进度类型 |
| | | * @return |
| | |
| | | |
| | | /** |
| | | * 查询学习进度 |
| | | * |
| | | * |
| | | * @return |
| | | */ |
| | | List<Progress> query(String type, String learnerId, List<String> targetId); |
| | | |
| | | /** |
| | | * 查询学习进度 |
| | | * |
| | | * |
| | | * @return |
| | | */ |
| | | List<Progress> query(String type, List<String> learnerId, String targetId); |
| | | |
| | | /** |
| | | * 查询学习记录 |
| | | * |
| | | * |
| | | * @param type |
| | | * 进度类型 |
| | | * @param targetId |
| | |
| | | |
| | | /** |
| | | * 新增学习记录 |
| | | * |
| | | * |
| | | * @param type |
| | | * 进度类型 |
| | | * @param targetId |
| | |
| | | * 学习结束位置 |
| | | * @return |
| | | */ |
| | | Result addProgress(String type, String targetId, int start, int end, String userId); |
| | | |
| | | Result addProgress(String type, String targetId, Double start, Double end, String userId); |
| | | |
| | | List<SubjectProgressTreeV> getSubjectChapterTreeVList(String parentId,String userId); |
| | | |
| | | } |
| | |
| | | } |
| | | |
| | | @Override |
| | | public Result addProgress(String type, String targetId, int start, int end, String userId) { |
| | | public Result addProgress(String type, String targetId, Double start, Double end, String userId) { |
| | | String userId_ = StringUtils.isBlank(userId) ? ClientUtils.getUserId() : userId; |
| | | return resItemServiceMap.get(type).addProgress(targetId, userId_, start, end); |
| | | } |
| | |
| | | BigDecimal progressValue = new BigDecimal(itemProgress.get("progressValue").toString()); |
| | | if (progress == null) { |
| | | String nodeType = subjectProgressTreeV.getNodeType(); |
| | | this.addProgress(nodeType, nodeId, 0, 0, userId); |
| | | this.addProgress(nodeType, nodeId, 0.0, 0.0, userId); |
| | | cacheService.lstRightPush(SUBJECT_PROGRESS_STATISTIC, nodeIdOrUserId); |
| | | return; |
| | | } |
| | |
| | | |
| | | /** |
| | | * 学习进度工具计算类 |
| | | * |
| | | * |
| | | * @author xiadehu |
| | | * |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 合并学习进度 |
| | | * |
| | | * |
| | | * @param orig |
| | | * 已学习进度 |
| | | * @param start |
| | |
| | | * 结束位置 |
| | | * @return |
| | | */ |
| | | public static int[][] merge(int[][] orig, int start, int end) { |
| | | public static Double[][] merge(Double[][] orig, Double start, Double end) { |
| | | |
| | | // 中间合并结果 |
| | | int[][] result = new int[orig.length + 1][2]; |
| | | Double[][] result = new Double[orig.length + 1][2]; |
| | | |
| | | int j = 0; |
| | | int i = 0; |
| | |
| | | |
| | | switch (action) { |
| | | case ACTION_INSERT: { |
| | | result[j++] = new int[] { start, end }; |
| | | result[j++] = new Double[] { start, end }; |
| | | result[j++] = orig[i]; |
| | | breakFlag = true; |
| | | break; |
| | | } |
| | | case ACTION_MERGE_01: { |
| | | result[j++] = new int[] { start, orig[i][1] }; |
| | | result[j++] = new Double[] { start, orig[i][1] }; |
| | | breakFlag = true; |
| | | break; |
| | | } |
| | |
| | | } |
| | | |
| | | // 如果本次学习终止位置超出以往所有学习进度,则添加到最后 |
| | | if (orig.length == 0 || pos(end, orig[orig.length - 1]) == POS_AFTER) { |
| | | result[j++] = new int[] { start, end }; |
| | | if (orig.length == 0 ) { |
| | | result[j++] = new Double[] { start, end }; |
| | | }else if(pos(end, orig[orig.length - 1]) == POS_AFTER){ |
| | | result[j++] = new Double[] { start, end }; |
| | | } |
| | | |
| | | // 最终合并结果,去掉中间合并结果的多出为空的元素 |
| | | int[][] finalResult = new int[j][2]; |
| | | Double[][] finalResult = new Double[j][2]; |
| | | |
| | | for (int k = 0; k < result.length; k++) { |
| | | if (result[k][0] == 0 && result[k][1] == 0 && k>0) { |
| | |
| | | |
| | | /** |
| | | * 统计学习进度 |
| | | * |
| | | * |
| | | * @param orig |
| | | * 全部学习进度 |
| | | * @return |
| | | */ |
| | | public static int sum(int[][] orig) { |
| | | public static Double sum(Double[][] orig) { |
| | | |
| | | int sum = 0; |
| | | Double sum = 0.0; |
| | | |
| | | for (int[] item : orig) { |
| | | for (Double[] item : orig) { |
| | | sum += (item[1] - item[0] + 1); |
| | | } |
| | | return sum; |
| | | |
| | | } |
| | | |
| | | private static int action(int[] segment, int start, int end) { |
| | | private static int action(Double[] segment, Double start, Double end) { |
| | | int startPos = pos(start, segment); |
| | | int endPos = pos(end, segment); |
| | | |
| | |
| | | |
| | | } |
| | | |
| | | private static int pos(int index, int[] range) { |
| | | private static int pos(Double index, Double[] range) { |
| | | if (index < range[0]) { |
| | | return POS_BEFORE; |
| | | } |
| | |
| | | public class ChapterProgressService extends CommonAppService implements IDetailProgressService { |
| | | |
| | | @Override |
| | | public Result addProgress(String targetId, String learnerId, int start, int end) { |
| | | public Result addProgress(String targetId, String learnerId, Double start, Double end) { |
| | | Progress p = new Progress(); |
| | | TraceUtils.setCreateTrace(p); |
| | | p.setLearnerId(learnerId); |
| | |
| | | public class ClassProgressService extends CommonAppService implements IDetailProgressService { |
| | | |
| | | @Override |
| | | public Result addProgress(String targetId, String learnerId, int start, int end) { |
| | | public Result addProgress(String targetId, String learnerId, Double start, Double end) { |
| | | Progress p = new Progress(); |
| | | TraceUtils.setCreateTrace(p); |
| | | p.setLearnerId(learnerId); |
| | |
| | | |
| | | @Service("LectureProgressService") |
| | | public class LectureProgressService extends CommonAppService implements IDetailProgressService { |
| | | |
| | | |
| | | @Autowired |
| | | IClassLectureService lectureService; |
| | | |
| | | |
| | | /** |
| | | * 各类型课件进度服务实现 |
| | | */ |
| | | private Map<String, IDetailProgressService> resItemServiceMap = new HashMap<String, IDetailProgressService>(6); |
| | | |
| | | |
| | | @Autowired |
| | | private ApplicationContext appContext; |
| | | |
| | |
| | | addLectureProgressService(appContext.getBean("LectureAudioProgressService",IDetailProgressService.class)); |
| | | addLectureProgressService(appContext.getBean("LectureDocProgressService",IDetailProgressService.class)); |
| | | } |
| | | |
| | | |
| | | private void addLectureProgressService(IDetailProgressService service) { |
| | | resItemServiceMap.put(service.getType(), service); |
| | | } |
| | | |
| | | |
| | | |
| | | @Override |
| | | public Result addProgress(String targetId,String learnerId, int start, int end) { |
| | | public Result addProgress(String targetId,String learnerId, Double start, Double end) { |
| | | ClsSubjectLecture lecture = lectureService.readClsLecture(targetId); |
| | | |
| | | |
| | | String lectureType = null; |
| | | if(lecture == null) { |
| | | lectureType = this.read(SubjectLecture.class, targetId).getLectureType(); |
| | | }else { |
| | | lectureType = lecture.getLectureType(); |
| | | } |
| | | |
| | | |
| | | return resItemServiceMap.get(lectureType).addProgress(targetId, learnerId, start, end); |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public String getType() { |
| | | return Progress.PROGRESS_TYPE_LECTURE; |
| | |
| | | public class SubjectProgressService extends CommonAppService implements IDetailProgressService { |
| | | |
| | | @Override |
| | | public Result addProgress(String targetId, String learnerId, int start, int end) { |
| | | public Result addProgress(String targetId, String learnerId, Double start, Double end) { |
| | | Progress p = new Progress(); |
| | | TraceUtils.setCreateTrace(p); |
| | | p.setLearnerId(learnerId); |
| | |
| | | ProgressDAO dao; |
| | | |
| | | @Override |
| | | public Result addProgress(String targetId, String learnerId, int start, int end) { |
| | | public Result addProgress(String targetId, String learnerId, Double start, Double end) { |
| | | |
| | | if (start > end || start < 0 || end < 0) { |
| | | return new Result(false, "invalid arguments"); |
| | | } |
| | | |
| | | int[][] progress = dao.mergeProgress(targetId, learnerId, start, end , dao.getProgress(targetId, learnerId)); |
| | | Double[][] progress = dao.mergeProgress(targetId, learnerId, start, end , dao.getProgress(targetId, learnerId)); |
| | | |
| | | if (!checkLecture(targetId).isSuccess()) { |
| | | return checkLecture(targetId); |
| | | } |
| | | |
| | | int sum = StudyProgressUtils.sum(progress); |
| | | Double sum = StudyProgressUtils.sum(progress); |
| | | |
| | | Progress p = dao.getProgress(Progress.PROGRESS_TYPE_LECTURE, targetId, learnerId); |
| | | |
| | |
| | | } else { |
| | | updateProgress(targetId, p, sum); |
| | | } |
| | | |
| | | |
| | | //保存学习记录明细 |
| | | this.saveProgressDetail(start, end, targetId, p.getProgressId(), learnerId); |
| | | |
| | |
| | | protected Result checkLecture(String targetId) { |
| | | return new Result(true); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 保存学习记录明细 |
| | | * |
| | | * |
| | | * @param start |
| | | * @param end |
| | | * @param targetId |
| | | * @param progressId |
| | | * @param learnerId |
| | | */ |
| | | private void saveProgressDetail(int start, int end, String targetId, String progressId, String learnerId) { |
| | | private void saveProgressDetail(Double start, Double end, String targetId, String progressId, String learnerId) { |
| | | SubjectLectureProgressDetail detail = new SubjectLectureProgressDetail(); |
| | | detail.setDeleteFlag(false); |
| | | detail.setEnd(end); |
| | |
| | | detail.setTargetId(targetId); |
| | | detail.setProgressId(progressId); |
| | | detail.setLearnerId(learnerId); |
| | | |
| | | |
| | | TraceUtils.setCreateTrace(detail); |
| | | |
| | | |
| | | this.save(detail); |
| | | } |
| | | |
| | | /** |
| | | * 获取进度百分比 |
| | | * |
| | | * |
| | | * @param targetId |
| | | * @param sum |
| | | * @return |
| | | */ |
| | | protected double getProgressPercent(String targetId, int sum) { |
| | | protected double getProgressPercent(String targetId, Double sum) { |
| | | return 1.00d; |
| | | } |
| | | |
| | |
| | | return Progress.PROGRESS_TYPE_LECTURE; |
| | | } |
| | | |
| | | protected void updateProgress(String targetId, Progress p, int sum) { |
| | | protected void updateProgress(String targetId, Progress p, Double sum) { |
| | | |
| | | TraceUtils.setUpdateTrace(p); |
| | | p.setProgressValue(BigDecimal.valueOf(Long.valueOf(sum))); |
| | | p.setProgressValue(BigDecimal.valueOf(Double.valueOf(sum))); |
| | | p.setProgressPercent(1d); |
| | | |
| | | save(p); |
| | | |
| | | } |
| | | |
| | | protected Progress newProgress(String targetId, String learnerId, int sum) { |
| | | protected Progress newProgress(String targetId, String learnerId, Double sum) { |
| | | |
| | | Progress p = new Progress(); |
| | | TraceUtils.setCreateTrace(p); |
| | |
| | | p.setLearnerId(learnerId); |
| | | p.setLearnerName(ClientUtils.getUserName()); |
| | | p.setProgressUnit("s"); |
| | | p.setProgressValue(BigDecimal.valueOf(Long.valueOf(sum))); |
| | | p.setProgressValue(BigDecimal.valueOf(Double.valueOf(sum))); |
| | | p.setTargetId(targetId); |
| | | p.setType(Progress.PROGRESS_TYPE_LECTURE); |
| | | p.setProgressPercent(1d); |
| | | save(p); |
| | | |
| | | |
| | | return p; |
| | | } |
| | | |
| | |
| | | |
| | | /** |
| | | * 获取进度百分比 |
| | | * |
| | | * |
| | | * @param targetId |
| | | * @param sum |
| | | * @return |
| | | */ |
| | | @Override |
| | | public double getProgressPercent(String targetId, int sum) { |
| | | public double getProgressPercent(String targetId, Double sum) { |
| | | |
| | | LectureDocV LectureDoc = lectureService.readDocLecture(targetId); |
| | | |
| | |
| | | } |
| | | |
| | | @Override |
| | | public Progress newProgress(String targetId, String learnerId, int sum) { |
| | | public Progress newProgress(String targetId, String learnerId, Double sum) { |
| | | |
| | | Progress p = new Progress(); |
| | | TraceUtils.setCreateTrace(p); |
| | |
| | | p.setLearnerId(learnerId); |
| | | p.setLearnerName(ClientUtils.getUserName()); |
| | | p.setProgressUnit("s"); |
| | | p.setProgressValue(BigDecimal.valueOf(Long.valueOf(sum))); |
| | | p.setProgressValue(BigDecimal.valueOf(Double.valueOf(sum))); |
| | | p.setTargetId(targetId); |
| | | p.setType(Progress.PROGRESS_TYPE_LECTURE); |
| | | p.setProgressPercent(getProgressPercent(targetId, sum)); |
| | | |
| | | save(p); |
| | | |
| | | |
| | | return p; |
| | | } |
| | | |
| | | @Override |
| | | public void updateProgress(String targetId, Progress p, int sum) { |
| | | public void updateProgress(String targetId, Progress p, Double sum) { |
| | | |
| | | TraceUtils.setUpdateTrace(p); |
| | | p.setProgressValue(BigDecimal.valueOf(Long.valueOf(sum))); |
| | | p.setProgressValue(BigDecimal.valueOf(Double.valueOf(sum))); |
| | | if(p.getProgressPercent() == null || getProgressPercent(targetId, sum)>p.getProgressPercent()) { |
| | | p.setProgressPercent(getProgressPercent(targetId, sum)); |
| | | } |
| | |
| | | |
| | | /** |
| | | * 获取进度百分比 |
| | | * |
| | | * |
| | | * @param targetId |
| | | * @param sum |
| | | * @return |
| | |
| | | } |
| | | |
| | | @Override |
| | | public Progress newProgress(String targetId, String learnerId, int sum) { |
| | | public Progress newProgress(String targetId, String learnerId, Double sum) { |
| | | |
| | | Progress p = new Progress(); |
| | | TraceUtils.setCreateTrace(p); |
| | |
| | | p.setLearnerId(learnerId); |
| | | p.setLearnerName(ClientUtils.getUserName()); |
| | | p.setProgressUnit("s"); |
| | | p.setProgressValue(BigDecimal.valueOf(Long.valueOf(sum))); |
| | | p.setProgressValue(BigDecimal.valueOf(Double.valueOf(sum))); |
| | | p.setTargetId(targetId); |
| | | p.setType(Progress.PROGRESS_TYPE_LECTURE); |
| | | p.setProgressPercent(getProgressPercent(targetId, sum)); |
| | | |
| | | save(p); |
| | | |
| | | |
| | | return p; |
| | | } |
| | | |
| | | @Override |
| | | public void updateProgress(String targetId, Progress p, int sum) { |
| | | public void updateProgress(String targetId, Progress p, Double sum) { |
| | | |
| | | TraceUtils.setUpdateTrace(p); |
| | | p.setProgressValue(BigDecimal.valueOf(Long.valueOf(sum))); |
| | | p.setProgressValue(BigDecimal.valueOf(Double.valueOf(sum))); |
| | | if(p.getProgressPercent() == null || getProgressPercent(targetId, sum)>p.getProgressPercent()) { |
| | | p.setProgressPercent(getProgressPercent(targetId, sum)); |
| | | } |
| | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | import com.qxueyou.scc.base.dao.AbstractRedisTemplate; |
| | | import com.qxueyou.scc.base.dao.CommonRedisTemplate; |
| | | import com.qxueyou.scc.base.model.UserInfoWrapper; |
| | | import com.qxueyou.scc.base.service.impl.RedisCacheBean; |
| | | import com.qxueyou.scc.sys.utils.SpringContextHolder; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | |
| | | import com.qxueyou.scc.base.model.Constants; |
| | |
| | | import com.qxueyou.scc.sys.model.ResponseResult; |
| | | import com.qxueyou.scc.sys.model.SysMenu; |
| | | import com.qxueyou.scc.user.model.User; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.data.redis.cache.RedisCache; |
| | | import org.springframework.data.redis.cache.RedisCacheManager; |
| | | import org.springframework.data.redis.core.RedisAccessor; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.stereotype.Repository; |
| | | import org.springframework.web.context.request.RequestContextHolder; |
| | | import org.springframework.web.context.request.ServletRequestAttributes; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import javax.servlet.http.HttpSession; |
| | |
| | | private static ThreadLocal<UserInfoWrapper> threadLocalUserInfo = new ThreadLocal<UserInfoWrapper>(); |
| | | private static UserInfoWrapper wrapper = threadLocalUserInfo.get(); |
| | | |
| | | private static RedisTemplate redisTemplate = (RedisTemplate)SpringContextHolder.getBean("redisTemplate"); |
| | | |
| | | /** 得到用户信息*/ |
| | | public static UserInfoWrapper getUserInfo() { |
| | | UserInfoWrapper wrapper = threadLocalUserInfo.get(); |
| | | if(wrapper == null){ |
| | | wrapper = new UserInfoWrapper(); |
| | | User user = new User(); |
| | | //默认值,上传可以作为默认上传者 |
| | | user.setUserId(Constants.VISITOR_USER_ID); |
| | | user.setName(Constants.VISITOR_USER_ID); |
| | | wrapper.setUser(user); |
| | | setUserInfo(wrapper); |
| | | } |
| | | // UserInfoWrapper wrapper = threadLocalUserInfo.get(); |
| | | // if(wrapper == null) { |
| | | wrapper = (UserInfoWrapper)redisTemplate.opsForValue().get(UserInfoWrapper.SESSION_USER_INFO_KEY); |
| | | if (wrapper == null) { |
| | | wrapper = new UserInfoWrapper(); |
| | | User user = new User(); |
| | | //默认值,上传可以作为默认上传者 |
| | | user.setUserId(Constants.VISITOR_USER_ID); |
| | | user.setName(Constants.VISITOR_USER_ID); |
| | | wrapper.setUser(user); |
| | | setUserInfo(wrapper); |
| | | } |
| | | // } |
| | | // else{ |
| | | // redisTemplate.opsForValue().set(UserInfoWrapper.SESSION_USER_INFO_KEY,wrapper); |
| | | // } |
| | | |
| | | return wrapper; |
| | | } |
| | |
| | | String info = getUserInfo().getInfo(UserInfoWrapper.INF_USER_ID); |
| | | if(info.equals("visitor_001")){ |
| | | info= (String) session.getAttribute(UserInfoWrapper.INF_USER_ID); |
| | | }else { |
| | | session.setAttribute(UserInfoWrapper.INF_USER_ID,info); |
| | | } |
| | | return info; |
| | | } |
| | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | import com.qxueyou.scc.admin.classes.service.IClassLectureService; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | |
| | | |
| | | /** |
| | | * 课件控制器 |
| | | * |
| | | * |
| | | * @author chenjunliang |
| | | * |
| | | */ |
| | |
| | | ILectureService lectureService; |
| | | |
| | | @Autowired |
| | | IClassLectureService classLectureService; |
| | | |
| | | @Autowired |
| | | IResService resService; |
| | | |
| | | @Autowired |
| | |
| | | |
| | | /** |
| | | * 加载课件tree |
| | | * |
| | | * |
| | | * @param parentId |
| | | * 父节点id |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 获取课件列表 |
| | | * |
| | | * |
| | | * @param chapterId |
| | | * 章节id |
| | | * @param type |
| | |
| | | |
| | | /** |
| | | * 查看课件 |
| | | * |
| | | * |
| | | * @param id |
| | | * 课件id |
| | | * @param attribute |
| | |
| | | |
| | | /** |
| | | * 删除课件 |
| | | * |
| | | * |
| | | * @param id |
| | | * 课件ids |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 课件的复制 |
| | | * |
| | | * |
| | | * @param id |
| | | * 课件id |
| | | * @param type |
| | |
| | | |
| | | /** |
| | | * 课件的移动 |
| | | * |
| | | * |
| | | * @param id |
| | | * 课件id |
| | | * @param type |
| | |
| | | |
| | | /** |
| | | * 课件管理 新增下级,同级 |
| | | * |
| | | * |
| | | * @param type |
| | | * (add:新增,edit :编辑) |
| | | * @param chapterId |
| | |
| | | * 名称 |
| | | * @param childFlag |
| | | * 是否操作下级 |
| | | * |
| | | * |
| | | */ |
| | | @PostMapping(value = "addOrUpdateChapter") |
| | | public Result addOrUpdateChapter(String type, String name, String chapterId, String subjectId, boolean childFlag) { |
| | |
| | | |
| | | /** |
| | | * 课件管理 目录删除 |
| | | * |
| | | * |
| | | * @param chapterId |
| | | * Ŀ¼id |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 添加/更新(视频,讲义,音频) |
| | | * |
| | | * |
| | | * @param name |
| | | * 名称 |
| | | * @param coverUrl |
| | |
| | | |
| | | /** |
| | | * 编辑 获取内容 |
| | | * |
| | | * |
| | | * @param id |
| | | * 课件id |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 课件获取资源列表 |
| | | * |
| | | * |
| | | * @param dirId |
| | | * Ŀ¼Id |
| | | * @param limit |
| | |
| | | |
| | | /** |
| | | * 课件从资源选择后保存 |
| | | * |
| | | * |
| | | * @param resId |
| | | * 资源文件id |
| | | * @param sectionId |
| | | * 小节id |
| | | * |
| | | * |
| | | */ |
| | | @GetMapping(value = "saveCourseware4Res") |
| | | public Result saveCourseware4Res(String resId, String sectionId) { |
| | |
| | | |
| | | /** |
| | | * 获取练习成绩列表 |
| | | * |
| | | * |
| | | * @param subjectId |
| | | * 课程id |
| | | * @param exerciseId |
| | |
| | | * 每页显示几条 |
| | | * @param pageNum |
| | | * 页码 |
| | | * |
| | | * |
| | | */ |
| | | @GetMapping(value = "lstExerciseScore") |
| | | public Result lstExerciseScore(String subjectId, String exerciseId, Integer pageSize, Integer pageNum) { |
| | |
| | | |
| | | /** |
| | | * 练习成绩的导出 |
| | | * |
| | | * |
| | | * @param subjectId |
| | | * 课程id |
| | | * @param exerciseId练习id |
| | |
| | | |
| | | /** |
| | | * 学习端 课程前端控制器 |
| | | * |
| | | * |
| | | * @author chenjunliang |
| | | * |
| | | */ |
| | |
| | | |
| | | @Autowired |
| | | ProgressDAO progressDao; |
| | | |
| | | |
| | | @Autowired |
| | | ITopicService topicService; |
| | | |
| | | |
| | | @Autowired |
| | | IEvaluateService evaluateService; |
| | | |
| | | |
| | | //--------------------------------------------------------------app端接口--------------------------------------------------------------------------------------------------- |
| | | /** |
| | | * 学习端获取 所有课件 |
| | | * |
| | | * |
| | | * @param classId |
| | | * @return 状态说明(0,视频。1,音频。2,文档。3,练习。) |
| | | */ |
| | |
| | | System.out.println(classId); |
| | | return clsLectureService.listSubjectLecture(CommonUtils.getClassId(classId), sort, pager); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * |
| | | * |
| | | * 学习端获取课程列表 |
| | | * |
| | | * |
| | | */ |
| | | @ApiOperation(value = "学习端获取课程学年列表") |
| | | @ApiImplicitParams({ |
| | |
| | | List<Map<String, Object>> lstSubject = subjectService.clsSubjectlist(classId, null, null); |
| | | //组装的学期和课程 |
| | | List<Map<String, Object>> lstTerm = subjectService.termSubjectList(classId, lstSubject); |
| | | |
| | | |
| | | return new Result(true, "success",CollectionUtils.newObjectMap("termList", lstTerm, "allSubject", lstSubject)); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * |
| | | * |
| | | * 学习端获取课程列表 |
| | | * |
| | | * |
| | | */ |
| | | @ApiOperation(value = "我的课程按学期分类") |
| | | @ApiImplicitParams({ |
| | |
| | | } |
| | | return new Result(true, "success",subjectService.myTermSubjectList(classId)); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * |
| | | * |
| | | * 学习端获取课程列表 |
| | | * |
| | | * |
| | | */ |
| | | @ApiOperation(value = "我的课程按时间排序") |
| | | @ApiImplicitParams({ |
| | |
| | | return new Result(true, "success", |
| | | CollectionUtils.newObjectMap("count", count, "listData", subjectService.mySubjectList(classId, pager))); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 我的课程详情 |
| | | * |
| | | * |
| | | * @param subjectId |
| | | * @param classId |
| | | * @return |
| | |
| | | } |
| | | return new Result(true, "success", subjectService.mySubjectInfo(subjectId, classId)); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * |
| | | * |
| | | * 学习端获取课程列表 |
| | | * |
| | | * |
| | | */ |
| | | @ApiOperation(value = "我的班级信息") |
| | | @ApiImplicitParams({ |
| | |
| | | } |
| | | return new Result(true, "success",subjectService.myClassInfo(classId)); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * |
| | | * |
| | | * 学习端获取课程列表 |
| | | * |
| | | * |
| | | */ |
| | | @ApiOperation(value = "学习端获取课程列表") |
| | | @ApiImplicitParams({ |
| | |
| | | public Result subjectList(String classId, Integer schoolYear, Integer term) { |
| | | return new Result(true, "success",subjectService.clsSubjectlist(CommonUtils.getClassId(classId), schoolYear, term)); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * |
| | | * |
| | | * 学习端获取课程列表 |
| | | * |
| | | * |
| | | */ |
| | | @ApiOperation(value = "学习端获取课程下课件,按创建时间排序") |
| | | @ApiImplicitParams({ |
| | |
| | | public Result listLectureBySubject(String subjectId, String classId, @RequestParam(defaultValue="desc")String sort, Pager pager) { |
| | | return new Result(true, "success",clsLectureService.listLectureBySubjectOrderCreateTime(subjectId, CommonUtils.getClassId(classId), sort, pager)); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * |
| | | * |
| | | * 学习端获取其他课件统计 |
| | | * |
| | | * |
| | | */ |
| | | @ApiOperation(value = "学习端获取其他课件统计") |
| | | @GetMapping(value = "/app/otherLectureCount") |
| | |
| | | return new Result(true, "success", CollectionUtils.newObjectMap("topicCount", |
| | | topicService.getClassTopicCount(ClientUtils.getClassId()), "evaluate", this.evaluateService.queryStuEvaluateCount())); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * |
| | | * |
| | | * 学习端获取课程列表 |
| | | * |
| | | * |
| | | */ |
| | | @ApiOperation(value = "学习端获取课程下课件,按目录分类", notes = "") |
| | | @ApiImplicitParams({ |
| | |
| | | @GetMapping(value = "/app/coursewareList") |
| | | public Result coursewareList(String classId,String subjectId, String type) { |
| | | classId = CommonUtils.getClassId(classId); |
| | | |
| | | |
| | | if(StringUtils.isEmpty(subjectId)) { |
| | | return new Result(false, "课程id不能为空"); |
| | | } |
| | | |
| | | |
| | | return this.clsLectureService.coursewareChapterList(classId, subjectId, type); |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 我的公开课列表 |
| | | * |
| | | * |
| | | */ |
| | | @ApiOperation(value = "我的公开课列表", notes = "") |
| | | @GetMapping(value = "/app/myOpenSubjectList") |
| | | public Result myOpenSubjectList(Pager pager, @RequestParam(defaultValue = "")String keyword) { |
| | | return new Result(true, "success", this.subjectService.myOpenSubjectList(pager.getOffset(), pager.getPageSize(), keyword)); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 公开课列表 |
| | | * |
| | | * |
| | | */ |
| | | @ApiOperation(value = "公开课列表", notes = "") |
| | | @GetMapping(value = "/app/openSubjectList") |
| | | public Result openSubjectList(Pager pager, @RequestParam(defaultValue = "")String keyword) { |
| | | return new Result(true, "success", this.subjectService.openSubjectList(pager.getOffset(), pager.getPageSize(), keyword)); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 公开课详情 |
| | | * |
| | | * |
| | | */ |
| | | @ApiOperation(value = "公开课详情", notes = "") |
| | | @GetMapping(value = "/app/openSubjectInfo") |
| | | public Result openSubjectInfo(@RequestParam(defaultValue = "")String subjectId) { |
| | | return new Result(true, "success", this.subjectService.openSubjectInfo(subjectId)); |
| | | } |
| | | |
| | | |
| | | //--------------------------------------------------------后台端接口--------------------------------------------------------------------------------------------------- |
| | | |
| | | /** |
| | |
| | | for (SubjectProgressTreeV v : chapterLst) { |
| | | v.setNodeName(v.getNodeName() + "(" + String.format("%.2f", v.getPercent()*100) + "%)"); //保留两位小数 |
| | | } |
| | | |
| | | |
| | | return new Result(true, "success", QBeanUtils.listBean2ListMap(chapterLst, CollectionUtils |
| | | .newStringMap("nodeName", "name", "id.nodeId", "id", "parentId", "parentId", "percent", "percent"))); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 学习端获取 所有课件 |
| | | * |
| | | * |
| | | * @param classId |
| | | * @return 状态说明(0,视频。1,音频。2,文档。3,练习。) |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 获取课件列表 |
| | | * |
| | | * |
| | | * @param chapterId |
| | | * 章节id |
| | | * @param type |
| | |
| | | |
| | | /** |
| | | * 课件学习进度提交 stu/subject/study |
| | | * |
| | | * |
| | | * @param lectureId |
| | | * 课件id |
| | | * @param from |
| | |
| | | |
| | | /** |
| | | * 音频时长提交 stu/subject/submitAudioDuration |
| | | * |
| | | * |
| | | * @param lectureId |
| | | * 课件id |
| | | * @param seconds |
| | |
| | | |
| | | /** |
| | | * 课程列表 |
| | | * |
| | | * |
| | | * @param clssId |
| | | * 班级id |
| | | * @param startTime |
| | |
| | | @GetMapping(value = "getSubjectLst") |
| | | public Result getList(String userId,String classId, String startTime, Integer limit, @RequestParam(defaultValue="1")Integer pageNum, HttpServletRequest request) { |
| | | userId = StringUtils.isEmpty(userId)?ClientUtils.getUserId():userId; |
| | | if(userId == null || userId == ""){ |
| | | userId = ClientUtils.getUserId(); |
| | | } |
| | | classId = StringUtils.isEmpty(classId)?ClientUtils.getClassId():classId; |
| | | List<MySubjectV> result = subjectService.listMySubjectV(classId,userId); |
| | | return new Result(true, "success", |
| | |
| | | |
| | | /** |
| | | * 进入课程 |
| | | * |
| | | * |
| | | * @param subjectId |
| | | * 课程id |
| | | */ |
| | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.Cookie; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Qualifier; |
| | | import org.springframework.boot.context.properties.EnableConfigurationProperties; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | | import org.springframework.data.redis.core.StringRedisTemplate; |
| | | import org.springframework.stereotype.Controller; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | |
| | | |
| | | @Autowired |
| | | IStudentService studentService; |
| | | |
| | | @Resource |
| | | RedisTemplate redisTemplate; |
| | | |
| | | @Autowired |
| | | private IOrganizationService organizationService; |
| | |
| | | public void khdloginout(HttpServletRequest request, HttpServletResponse response) { |
| | | System.out.println("清除session"); |
| | | HttpSession session = request.getSession(); |
| | | redisTemplate.delete(UserInfoWrapper.SESSION_USER_INFO_KEY); |
| | | System.out.println(session.getAttribute("userId")); |
| | | System.out.println(session.getAttribute("classId")); |
| | | session.invalidate(); |
| | |
| | | param.setIp(RequestClientUtils.getRemoteIP(request)); |
| | | // 缓存到请求线程 |
| | | UserInfoWrapper wrapper = cacheUserInfo(param, null); |
| | | // 存到redis |
| | | redisTemplate.opsForValue().set(UserInfoWrapper.SESSION_USER_INFO_KEY, wrapper); |
| | | request.getSession().setAttribute(UserInfoWrapper.SESSION_USER_INFO_KEY, wrapper); |
| | | |
| | | return new Result(true, "success", |
| | | CollectionUtils.newObjectMap("userId", user.getUserId(), "userName", user.getName(), "imgPath", |
| | | user.getImgPath(), "orgName", ClientUtils.getOrgName(),"orgId", ClientUtils.getOrgId(), "orgLogo", |
| | |
| | | param.setIp(RequestClientUtils.getRemoteIP(request)); |
| | | // 缓存到请求线程 |
| | | UserInfoWrapper wrapper = cacheUserInfo(param, null); |
| | | // 存到redis |
| | | redisTemplate.opsForValue().set(UserInfoWrapper.SESSION_USER_INFO_KEY, wrapper); |
| | | request.getSession().setAttribute(UserInfoWrapper.SESSION_USER_INFO_KEY, wrapper); |
| | | if ("study".equals(logType)) { |
| | | /*if (StringUtils.isEmpty(ClientUtils.getClassId()) && user.getRoles() == null) { |
| | |
| | | private void doRelease(HttpServletRequest httpRequest, HttpServletResponse response) { |
| | | HttpSession se = httpRequest.getSession(); |
| | | se.removeAttribute(UserInfoWrapper.SESSION_USER_INFO_KEY); |
| | | redisTemplate.delete(UserInfoWrapper.SESSION_USER_INFO_KEY); |
| | | se.invalidate(); |
| | | } |
| | | |
New file |
| | |
| | | package com.qxueyou.scc.sys.utils; |
| | | |
| | | import org.springframework.beans.BeansException; |
| | | import org.springframework.context.ApplicationContext; |
| | | import org.springframework.context.ApplicationContextAware; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.Map; |
| | | |
| | | @Component |
| | | public class SpringContextHolder implements ApplicationContextAware { |
| | | |
| | | /** |
| | | * 以静态变量保存ApplicationContext,可在任意代码中取出ApplicaitonContext. |
| | | */ |
| | | private static ApplicationContext context; |
| | | |
| | | /** |
| | | * 实现ApplicationContextAware接口的context注入函数, 将其存入静态变量. |
| | | */ |
| | | |
| | | @Override |
| | | public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { |
| | | SpringContextHolder.context = applicationContext; |
| | | } |
| | | |
| | | /** |
| | | * 获取applicationContext |
| | | * @return |
| | | */ |
| | | public ApplicationContext getApplicationContext() { |
| | | return context; |
| | | } |
| | | |
| | | /** |
| | | * 通过name获取 Bean. |
| | | * @param name |
| | | * @return |
| | | */ |
| | | public static Object getBean(String name){ |
| | | return context.getBean(name); |
| | | } |
| | | |
| | | /** |
| | | * 通过class获取Bean. |
| | | * @param <T> |
| | | * @param clazz |
| | | * @return |
| | | */ |
| | | public static <T> Map<String, T> getBeans(Class<T> clazz){ |
| | | return context.getBeansOfType(clazz); |
| | | } |
| | | |
| | | /** |
| | | * 通过class获取Bean. |
| | | * @param clazz |
| | | * @param <T> |
| | | * @return |
| | | */ |
| | | public static <T> T getBean(Class<T> clazz){ |
| | | return context.getBean(clazz); |
| | | } |
| | | |
| | | /** |
| | | * 通过name,以及Clazz返回指定的Bean |
| | | * @param name |
| | | * @param clazz |
| | | * @param <T> |
| | | * @return |
| | | */ |
| | | public static <T> T getBean(String name, Class<T> clazz){ |
| | | return context.getBean(name, clazz); |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | import java.util.List; |
| | | |
| | | import com.qxueyou.scc.admin.classes.service.IClassLectureService; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.cache.annotation.Cacheable; |
| | |
| | | @Autowired |
| | | IProgressService progressService; |
| | | |
| | | @Autowired |
| | | IClassLectureService clsLectureService; |
| | | |
| | | @Override |
| | | public Result addChapter(String subjectId, String parentChapterId, String name) { |
| | | |
| | |
| | | |
| | | /** |
| | | * 删除单个章节 |
| | | * |
| | | * |
| | | * @param chapterId |
| | | * 章节id |
| | | * @return |
| | |
| | | |
| | | /** |
| | | * 初始化 |
| | | * |
| | | * |
| | | * @param subjectId |
| | | * @return |
| | | */ |
| | |
| | | lecture.setRemark(res.getRemark()); |
| | | lecture.setSubjectId(chapter.getSubjectId()); |
| | | lecture.setResItemId(res.getResId()); |
| | | |
| | | |
| | | save(lecture); |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * |
| | | * @param lectureId |
| | | * 课件id |
| | | * @return |
| | |
| | | @Override |
| | | public int listLectureCount(String chapterId, String keyword, String type) { |
| | | StringBuffer hql = new StringBuffer("from SubjectLecture where chapterId=? and name like ? and deleteFlag is false"); |
| | | |
| | | |
| | | List<Object> args = CollectionUtils.newList(chapterId,'%' + keyword.trim() + '%'); |
| | | |
| | | if (StringUtils.isNotEmpty(type)) { |
| | | hql.append(" and lectureType=?"); |
| | | args.add(type); |
| | | } |
| | | |
| | | |
| | | return findCount(hql.toString(),args); |
| | | |
| | | } |
| | |
| | | @Override |
| | | public Result doStudy(String lectureId, Double from, Double to) { |
| | | String userId = null; |
| | | return progressService.addProgress(Progress.PROGRESS_TYPE_LECTURE, lectureId, from.intValue(), to.intValue(), |
| | | return progressService.addProgress(Progress.PROGRESS_TYPE_LECTURE, lectureId, from.doubleValue(), to.doubleValue(), |
| | | userId); |
| | | } |
| | | |
| | |
| | | @Autowired |
| | | private IMediaLiveService mediaLiveService; |
| | | |
| | | |
| | | @Override |
| | | public Result add(String subjectName,String coverPageFileId, String contentFileId,int type) { |
| | | |
| | |
| | | @Override |
| | | public MySubjectV getMy1stSubjectVById(String subjectId) { |
| | | String hql = "from MySubjectV p where p.id.userId=? and p.id.subjectId=?"; |
| | | |
| | | MySubjectV result = findUnique(hql, CollectionUtils.newList(ClientUtils.getUserId(), subjectId), |
| | | String UserId = ClientUtils.getUserId(); |
| | | MySubjectV result = findUnique(hql, CollectionUtils.newList(UserId, subjectId), |
| | | MySubjectV.class); |
| | | |
| | | return result; |
| | |
| | | //清理并复制原课程 |
| | | clsLectureService.doClearLecturesToClass(classId,subjectId); |
| | | clsLectureService.doCopyLecturesToClass(origSubjectId, subjectId, classId); |
| | | }else { |
| | | clsLectureService.doClearLecturesToClass(classId,subjectId); |
| | | clsLectureService.doCopyLecturesToClass(origSubjectId, subjectId, classId); |
| | | } |
| | | |
| | | TraceUtils.setUpdateTrace(subject); |
| | | subject.setTeacherId(teacherId); |
| | | subject.setTeacherName(teacher.getName()); |
| | |
| | | com\qxueyou\scc\base\dao\BaseDAO$2.class |
| | | com\qxueyou\scc\teach\subject\dao\SubjectDAO.class |
| | | com\qxueyou\scc\exercise\action\ExerciseDeepAnaController.class |
| | | com\qxueyou\scc\exam\dao\ExamResultVDao.class |
| | | com\qxueyou\scc\exercise\service\impl\ExerciseGroupService$1.class |
| | | com\qxueyou\scc\admin\score\dao\HomeworkScoreVDAO.class |
| | | com\qxueyou\scc\operation\comment\mode\QSnsMyPraise.class |
| | |
| | | com\qxueyou\scc\user\service\IUserService.class |
| | | com\qxueyou\scc\sys\service\IPrivilegeService.class |
| | | com\qxueyou\scc\school\model\SchClassCard.class |
| | | com\qxueyou\scc\admin\schoolRoll\ISchoolRollService.class |
| | | com\qxueyou\scc\base\dao\ReidsSharedPoolWrapper.class |
| | | com\qxueyou\scc\user\model\User.class |
| | | com\qxueyou\scc\org\service\IOrganizationService.class |
| | |
| | | com\qxueyou\scc\media\dao\MediaVideoDAO.class |
| | | com\qxueyou\scc\school\model\StudentEvaCategory.class |
| | | com\qxueyou\scc\stucontroller\StuExamController.class |
| | | com\qxueyou\scc\admin\schoolRoll\impl\SchoolRollServiceImpl.class |
| | | com\qxueyou\scc\operation\topic\service\impl\TopicService.class |
| | | com\qxueyou\scc\sys\service\ITestService.class |
| | | com\qxueyou\scc\org\model\OrgCourseData.class |
| | |
| | | com\qxueyou\scc\school\service\impl\SchoolDayService.class |
| | | com\qxueyou\scc\user\model\QUserRole.class |
| | | com\qxueyou\scc\school\service\IScoreChangeService.class |
| | | com\qxueyou\scc\controller\SchoolRollController.class |
| | | com\qxueyou\scc\controller\EvaluateController.class |
| | | com\qxueyou\scc\base\util\Base64Utils.class |
| | | com\qxueyou\scc\base\util\TraceUtils.class |
| | |
| | | com\qxueyou\scc\exercise\model\ExerciseExtendRecordData.class |
| | | com\qxueyou\scc\school\service\impl\NoteService.class |
| | | com\qxueyou\scc\exercise\model\QExerciseFaultBook.class |
| | | com\qxueyou\scc\admin\score\action\ScoreController.class |
| | | com\qxueyou\scc\base\handler\QCacheRedis.class |
| | | com\qxueyou\scc\school\model\QSchRankHis.class |
| | | com\qxueyou\scc\school\dao\RankDAO.class |