派生自 projectDept/qhighschool

Administrator
2022-11-21 8d0e57a64fe6c31559ffcf38859fb1f5084e1e23
课程管理学习端修改And用户信息缓存修改
21个文件已修改
1个文件已添加
499 ■■■■■ 已修改文件
src/main/java/com/qxueyou/scc/admin/classes/service/impl/ClassLectureService.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/progress/dao/ProgressDAO.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/progress/model/SubjectLectureProgressDetail.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/progress/service/IDetailProgressService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/progress/service/IProgressService.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/progress/service/impl/ProgressService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/progress/service/impl/StudyProgressUtils.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/ChapterProgressService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/ClassProgressService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/LectureProgressService.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/SubjectProgressService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureCommonProgressService.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureDocProgressService.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureVideoProgressService.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/ClientUtils.java 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/controller/CoursewareController.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/stucontroller/StuSubjectController.java 103 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sys/action/LoginController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sys/utils/SpringContextHolder.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectLectureService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/classes/service/impl/ClassLectureService.java
@@ -95,20 +95,22 @@
    @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;
    }
@@ -565,7 +567,7 @@
    @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());
    }
src/main/java/com/qxueyou/scc/admin/progress/dao/ProgressDAO.java
@@ -30,7 +30,7 @@
    /**
     * 根据targetId和learnerId获取进度
     *
     *
     * @param targetId
     *            targetId
     * @param learnerId
@@ -38,29 +38,29 @@
     * @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
@@ -76,7 +76,7 @@
    /**
     * 获取当前节点下的父节点
     *
     *
     * @param nodeId
     * @return
     */
@@ -89,7 +89,7 @@
    /**
     * 根据subjectId获取章节列表
     *
     *
     * @param parentId
     * @param userId
     * @return
src/main/java/com/qxueyou/scc/admin/progress/model/SubjectLectureProgressDetail.java
@@ -19,7 +19,7 @@
/**
 * 学习进度明细
 *
 *
 * @author sven
 *
 */
@@ -30,8 +30,8 @@
    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;
@@ -41,8 +41,8 @@
    private String updator;
    private String updateId;
    private boolean deleteFlag;
    public SubjectLectureProgressDetail() {
    }
@@ -55,25 +55,25 @@
        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;
    }
src/main/java/com/qxueyou/scc/admin/progress/service/IDetailProgressService.java
@@ -3,7 +3,7 @@
import com.qxueyou.scc.base.model.Result;
public interface IDetailProgressService {
    /**
     * 新增学习记录
     * @param type 进度类型
@@ -13,8 +13,8 @@
     * @param end 学习结束位置
     * @return
     */
    Result addProgress(String targetId,String learnerId,int start,int end);
    Result addProgress(String targetId,String learnerId,Double start,Double end);
    /**
     * 返回进度类型
     * @return
src/main/java/com/qxueyou/scc/admin/progress/service/IProgressService.java
@@ -10,21 +10,21 @@
    /**
     * 查询学习进度
     *
     *
     * @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
@@ -37,7 +37,7 @@
    /**
     * 新增学习记录
     *
     *
     * @param type
     *            进度类型
     * @param targetId
@@ -48,8 +48,8 @@
     *            学习结束位置
     * @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);
}
src/main/java/com/qxueyou/scc/admin/progress/service/impl/ProgressService.java
@@ -84,7 +84,7 @@
    }
    @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);
    }
@@ -109,7 +109,7 @@
            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;
            }
src/main/java/com/qxueyou/scc/admin/progress/service/impl/StudyProgressUtils.java
@@ -3,7 +3,7 @@
/**
 * 学习进度工具计算类
 *
 *
 * @author xiadehu
 *
 */
@@ -32,7 +32,7 @@
    /**
     * 合并学习进度
     *
     *
     * @param orig
     *            已学习进度
     * @param start
@@ -41,10 +41,10 @@
     *            结束位置
     * @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;
@@ -57,13 +57,13 @@
            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;
            }
@@ -95,12 +95,14 @@
        }
        // 如果本次学习终止位置超出以往所有学习进度,则添加到最后
        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) {
@@ -115,23 +117,23 @@
    /**
     * 统计学习进度
     *
     *
     * @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);
@@ -163,7 +165,7 @@
    }
    private static int pos(int index, int[] range) {
    private static int pos(Double index, Double[] range) {
        if (index < range[0]) {
            return POS_BEFORE;
        }
src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/ChapterProgressService.java
@@ -15,7 +15,7 @@
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);
src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/ClassProgressService.java
@@ -15,7 +15,7 @@
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);
src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/LectureProgressService.java
@@ -19,15 +19,15 @@
@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;
@@ -37,27 +37,27 @@
        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;
src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/SubjectProgressService.java
@@ -15,7 +15,7 @@
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);
src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureCommonProgressService.java
@@ -29,19 +29,19 @@
    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);
@@ -50,7 +50,7 @@
        } else {
            updateProgress(targetId, p, sum);
        }
        //保存学习记录明细
        this.saveProgressDetail(start, end, targetId, p.getProgressId(), learnerId);
@@ -67,17 +67,17 @@
    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);
@@ -85,20 +85,20 @@
        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;
    }
@@ -107,17 +107,17 @@
        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);
@@ -125,12 +125,12 @@
        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;
    }
src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureDocProgressService.java
@@ -25,13 +25,13 @@
    /**
     * 获取进度百分比
     *
     *
     * @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);
@@ -39,7 +39,7 @@
    }
    @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);
@@ -47,21 +47,21 @@
        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));
        }
src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureVideoProgressService.java
@@ -25,7 +25,7 @@
    /**
     * 获取进度百分比
     *
     *
     * @param targetId
     * @param sum
     * @return
@@ -38,7 +38,7 @@
    }
    @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);
@@ -46,21 +46,21 @@
        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));
        }
src/main/java/com/qxueyou/scc/base/util/ClientUtils.java
@@ -3,7 +3,11 @@
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;
@@ -11,9 +15,17 @@
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;
@@ -32,18 +44,26 @@
    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;
    }
@@ -62,8 +82,6 @@
        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;
    }
src/main/java/com/qxueyou/scc/controller/CoursewareController.java
@@ -4,6 +4,7 @@
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;
@@ -31,7 +32,7 @@
/**
 * 课件控制器
 *
 *
 * @author chenjunliang
 *
 */
@@ -44,6 +45,9 @@
    ILectureService lectureService;
    @Autowired
    IClassLectureService classLectureService;
    @Autowired
    IResService resService;
    @Autowired
@@ -51,7 +55,7 @@
    /**
     * 加载课件tree
     *
     *
     * @param parentId
     *            父节点id
     */
@@ -66,7 +70,7 @@
    /**
     * 获取课件列表
     *
     *
     * @param chapterId
     *            章节id
     * @param type
@@ -97,7 +101,7 @@
    /**
     * 查看课件
     *
     *
     * @param id
     *            课件id
     * @param attribute
@@ -122,7 +126,7 @@
    /**
     * 删除课件
     *
     *
     * @param id
     *            课件ids
     */
@@ -135,7 +139,7 @@
    /**
     * 课件的复制
     *
     *
     * @param id
     *            课件id
     * @param type
@@ -156,7 +160,7 @@
    /**
     * 课件的移动
     *
     *
     * @param id
     *            课件id
     * @param type
@@ -175,7 +179,7 @@
    /**
     * 课件管理 新增下级,同级
     *
     *
     * @param type
     *            (add:新增,edit :编辑)
     * @param chapterId
@@ -186,7 +190,7 @@
     *            名称
     * @param childFlag
     *            是否操作下级
     *
     *
     */
    @PostMapping(value = "addOrUpdateChapter")
    public Result addOrUpdateChapter(String type, String name, String chapterId, String subjectId, boolean childFlag) {
@@ -204,7 +208,7 @@
    /**
     * 课件管理 目录删除
     *
     *
     * @param chapterId
     *            Ŀ¼id
     */
@@ -215,7 +219,7 @@
    /**
     * 添加/更新(视频,讲义,音频)
     *
     *
     * @param name
     *            名称
     * @param coverUrl
@@ -256,7 +260,7 @@
    /**
     * 编辑 获取内容
     *
     *
     * @param id
     *            课件id
     */
@@ -275,7 +279,7 @@
    /**
     * 课件获取资源列表
     *
     *
     * @param dirId
     *            Ŀ¼Id
     * @param limit
@@ -298,12 +302,12 @@
    /**
     * 课件从资源选择后保存
     *
     *
     * @param resId
     *            资源文件id
     * @param sectionId
     *            小节id
     *
     *
     */
    @GetMapping(value = "saveCourseware4Res")
    public Result saveCourseware4Res(String resId, String sectionId) {
@@ -321,7 +325,7 @@
    /**
     * 获取练习成绩列表
     *
     *
     * @param subjectId
     *            课程id
     * @param exerciseId
@@ -330,7 +334,7 @@
     *            每页显示几条
     * @param pageNum
     *            页码
     *
     *
     */
    @GetMapping(value = "lstExerciseScore")
    public Result lstExerciseScore(String subjectId, String exerciseId, Integer pageSize, Integer pageNum) {
@@ -349,7 +353,7 @@
    /**
     * 练习成绩的导出
     *
     *
     * @param subjectId
     *            课程id
     * @param exerciseId练习id
src/main/java/com/qxueyou/scc/stucontroller/StuSubjectController.java
@@ -39,7 +39,7 @@
/**
 * 学习端 课程前端控制器
 *
 *
 * @author chenjunliang
 *
 */
@@ -63,17 +63,17 @@
    @Autowired
    ProgressDAO progressDao;
    @Autowired
    ITopicService topicService;
    @Autowired
    IEvaluateService evaluateService;
    //--------------------------------------------------------------app端接口---------------------------------------------------------------------------------------------------
    /**
     * 学习端获取 所有课件
     *
     *
     * @param classId
     * @return 状态说明(0,视频。1,音频。2,文档。3,练习。)
     */
@@ -87,11 +87,11 @@
        System.out.println(classId);
        return clsLectureService.listSubjectLecture(CommonUtils.getClassId(classId), sort, pager);
    }
    /**
     *
     *
     * 学习端获取课程列表
     *
     *
     */
    @ApiOperation(value = "学习端获取课程学年列表")
    @ApiImplicitParams({
@@ -107,14 +107,14 @@
        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({
@@ -129,11 +129,11 @@
        }
        return new Result(true, "success",subjectService.myTermSubjectList(classId));
    }
    /**
     *
     *
     * 学习端获取课程列表
     *
     *
     */
    @ApiOperation(value = "我的课程按时间排序")
    @ApiImplicitParams({
@@ -147,10 +147,10 @@
        return new Result(true, "success",
                CollectionUtils.newObjectMap("count", count, "listData", subjectService.mySubjectList(classId, pager)));
    }
    /**
     * 我的课程详情
     *
     *
     * @param subjectId
     * @param classId
     * @return
@@ -171,11 +171,11 @@
        }
        return new Result(true, "success", subjectService.mySubjectInfo(subjectId, classId));
    }
    /**
     *
     *
     * 学习端获取课程列表
     *
     *
     */
    @ApiOperation(value = "我的班级信息")
    @ApiImplicitParams({
@@ -189,11 +189,11 @@
        }
        return new Result(true, "success",subjectService.myClassInfo(classId));
    }
    /**
     *
     *
     * 学习端获取课程列表
     *
     *
     */
    @ApiOperation(value = "学习端获取课程列表")
    @ApiImplicitParams({
@@ -205,11 +205,11 @@
    public Result subjectList(String classId, Integer schoolYear, Integer term) {
        return new Result(true, "success",subjectService.clsSubjectlist(CommonUtils.getClassId(classId), schoolYear, term));
    }
    /**
     *
     *
     * 学习端获取课程列表
     *
     *
     */
    @ApiOperation(value = "学习端获取课程下课件,按创建时间排序")
    @ApiImplicitParams({
@@ -220,11 +220,11 @@
    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")
@@ -232,11 +232,11 @@
        return new Result(true, "success", CollectionUtils.newObjectMap("topicCount",
                topicService.getClassTopicCount(ClientUtils.getClassId()), "evaluate", this.evaluateService.queryStuEvaluateCount()));
    }
    /**
     *
     *
     * 学习端获取课程列表
     *
     *
     */
    @ApiOperation(value = "学习端获取课程下课件,按目录分类", notes = "")
    @ApiImplicitParams({
@@ -247,45 +247,45 @@
    @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));
       }
    //--------------------------------------------------------后台端接口---------------------------------------------------------------------------------------------------
    /**
@@ -303,14 +303,14 @@
        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,练习。)
     */
@@ -331,7 +331,7 @@
    /**
     * 获取课件列表
     *
     *
     * @param chapterId
     *            章节id
     * @param type
@@ -365,7 +365,7 @@
    /**
     * 课件学习进度提交 stu/subject/study
     *
     *
     * @param lectureId
     *            课件id
     * @param from
@@ -394,7 +394,7 @@
    /**
     * 音频时长提交 stu/subject/submitAudioDuration
     *
     *
     * @param lectureId
     *            课件id
     * @param seconds
@@ -417,7 +417,7 @@
    /**
     * 课程列表
     *
     *
     * @param clssId
     *            班级id
     * @param startTime
@@ -431,6 +431,9 @@
    @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",
@@ -442,7 +445,7 @@
    /**
     * 进入课程
     *
     *
     * @param subjectId
     *            课程id
     */
src/main/java/com/qxueyou/scc/sys/action/LoginController.java
@@ -3,6 +3,7 @@
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;
@@ -13,6 +14,8 @@
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.*;
@@ -85,6 +88,9 @@
    @Autowired
    IStudentService studentService;
    @Resource
    RedisTemplate redisTemplate;
    @Autowired
    private IOrganizationService organizationService;
@@ -216,6 +222,7 @@
    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();
@@ -255,7 +262,10 @@
        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",
@@ -358,6 +368,8 @@
        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) {
@@ -505,6 +517,7 @@
    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();
    }
src/main/java/com/qxueyou/scc/sys/utils/SpringContextHolder.java
New file
@@ -0,0 +1,76 @@
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);
    }
}
src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectLectureService.java
@@ -2,6 +2,7 @@
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;
@@ -47,6 +48,9 @@
    @Autowired
    IProgressService progressService;
    @Autowired
    IClassLectureService clsLectureService;
    @Override
    public Result addChapter(String subjectId, String parentChapterId, String name) {
@@ -87,7 +91,7 @@
    /**
     * 删除单个章节
     *
     *
     * @param chapterId
     *            章节id
     * @return
@@ -138,7 +142,7 @@
    /**
     * 初始化
     *
     *
     * @param subjectId
     * @return
     */
@@ -173,6 +177,7 @@
        lecture.setRemark(res.getRemark());
        lecture.setSubjectId(chapter.getSubjectId());
        lecture.setResItemId(res.getResId());
        save(lecture);
@@ -209,7 +214,7 @@
    }
    /**
     *
     *
     * @param lectureId
     *            课件id
     * @return
@@ -277,14 +282,14 @@
    @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);
    }
@@ -365,7 +370,7 @@
    @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);
    }
src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java
@@ -108,6 +108,7 @@
    @Autowired
    private IMediaLiveService mediaLiveService;
    @Override
    public Result add(String subjectName,String coverPageFileId, String contentFileId,int type) {
@@ -445,8 +446,8 @@
    @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;
@@ -522,8 +523,10 @@
            //清理并复制原课程
            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());
target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -316,6 +316,7 @@
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
@@ -382,6 +383,7 @@
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
@@ -534,6 +536,7 @@
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
@@ -566,6 +569,7 @@
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
@@ -782,6 +786,7 @@
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