派生自 projectDept/qhighschool

yn147
2023-05-10 96286178ee1c257c130cb2ad964a781f36c4eee5
Merge remote-tracking branch 'origin/master'
34个文件已修改
15个文件已添加
20521 ■■■■■ 已修改文件
pom.xml 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/Sensitive/List.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/Sensitive/SensitiveWordFilter.java 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/Sensitive/Word.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/classes/service/impl/ClsClassService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/schoolRoll/impl/SchoolRollServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/studentFiles/Impl/StudentFilesServiceImpl.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/studentFiles/StudentFilesService.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/dao/BaseDAO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/model/Result.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/ClientUtils.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/controller/CourseScheduleController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/controller/ResController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/controller/SchoolRollController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/controller/StudentFilesController.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/controller/VideoLiveController.java 85 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exam/action/ExamController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseInfoService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/operation/topic/action/StuTopicController.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/portal/homepage/controller/HomepageController.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/portal/homepage/serivce/IHomepageService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/portal/homepage/serivce/imp/HomepageService.java 237 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sdk/CommonResult.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sdk/MTCloud.java 4147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sdk/utils/MD5Util.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/stucontroller/HomePageController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/stucontroller/StuLiveController.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/stucontroller/StuSubjectController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sys/action/LoginController.java 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLive.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/live/service/IMediaLiveService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/live/service/impl/MediaLiveService.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/res/service/impl/HweiYunOBSServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/res/service/impl/ResService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemDocService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/student/model/StuStudent.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/student/service/impl/StudentService.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/user/model/User.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/user/service/impl/UserService.java 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/web/AuthorizeFilter.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/wx/service/IWechatService.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/wx/service/impl/WechatService.java 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/wx/utils/Code2Session.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/wx/utils/HttpClientUtil.java 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/SensitiveWordList.txt 14596 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.properties 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/log4j2.xml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/static/images/img/rzBadge.png 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -379,6 +379,69 @@
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.7.0</version>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.3</version>
        </dependency>
        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>net.sf.ezmorph</groupId>
            <artifactId>ezmorph</artifactId>
            <version>1.0.6</version>
        </dependency>
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.2.3</version>
            <classifier>jdk15</classifier><!-- 指定jdk版本 -->
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.2</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
src/main/java/com/qxueyou/scc/Sensitive/List.java
New file
@@ -0,0 +1,41 @@
package com.qxueyou.scc.Sensitive;
import java.util.ArrayList;
public class List extends ArrayList<Word> {
    public Word get(char c){
        for(Word w :this){
            if(w.c == c) return w;
        }
        return null;
    }
    /**
     * 二分查找,必须先升序排序
     * @param c 需要查找的字符
     * @return Word对象:如果找到   null:如果没找到
     */
    public Word binaryGet(char c){
        int left,right,key;
        Word word;
        left = 0;right = this.size()-1;
        while (left <= right){
            key = (left + right) / 2;
            word = get(key);
            if(word.c == c){
                return word;
            }else if(word.c > c){
                right = key - 1;
            }else {
                left = key + 1;
            }
        }
        return null;
    }
    public Word add(char c){
        Word word = new Word(c);
        super.add(word);
        return word;
    }
}
src/main/java/com/qxueyou/scc/Sensitive/SensitiveWordFilter.java
New file
@@ -0,0 +1,149 @@
package com.qxueyou.scc.Sensitive;
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
public final class SensitiveWordFilter {
    public static List wordList;
    private final static char replace = '*'; // 替代字符
    private final static char[] skip = new char[]{ // 遇到这些字符就会跳过,例如,如果"AB"是敏感词,那么"A B","A=B"也会被屏蔽
            '!','*','-','+','_','=',',','.','@'
    };
    /**
     * 敏感词替换
     * @param text 待替换文本
     * @return 替换后的文本
     */
    public static String Filter(String text){
        if(wordList == null || wordList.size() == 0) return text;
        char[] __char__ = text.toCharArray(); // 把String转化成char数组,便于遍历
        int i,j;
        Word word;
        boolean flag; // 是否需要替换
        for(i=0;i<__char__.length;i++){ // 遍历所有字符
            char c = __char__[i];
            word = wordList.binaryGet(c); // 使用二分查找来寻找字符,提高效率
            if(word != null){ // word != null说明找到了
                flag = false;
                j = i+1;
                while (j < __char__.length){ // 开始逐个比较后面的字符
                    if(skip(__char__[j])) { // 跳过空格之类的无关字符
                        j++;
                        continue;
                    }
                    if(word.next != null){ // 字符串尚未结束,不确定是否存在敏感词
                        /*
                        以下代码并没有使用二分查找,因为以同一个字符开头的敏感词较少
                        例如,wordList中记录了所有敏感词的开头第一个字,它的数量通常会有上千个
                        假如现在锁定了字符“T”开头的敏感词,而“T”开头的敏感词只有10个,这时使用二分查找的效率反而低于顺序查找
                         */
                        word = word.next.get(__char__[j]);
                        if(word == null){
                            break;
                        }
                        j++;
                    }else { // 字符串已结束,存在敏感词汇
                        flag = true;
                        break;
                    }
                }
                if(word != null && word.next == null){
                    flag = true;
                }
                if(flag){ // 如果flag==true,说明检测出敏感粗,需要替换
                    while (i<j){
                        if(skip(__char__[i])){ // 跳过空格之类的无关字符,如果要把空格也替换成'*',则删除这个if语句
                            i++;
                            continue;
                        }
                        __char__[i] = replace;
                        i++;
                    }
                    i--;
                }
            }
        }
        return new String(__char__);
    }
    /**
     * 加载敏感词列表
     * @param words 敏感词数组
     */
    public static void loadWord(ArrayList<String> words){
        if(words == null) return;
        char[] chars;
        List now;
        Word word;
        wordList = new List();
        for(String __word__:words){
            if(__word__ == null) continue;
            chars = __word__.toCharArray();
            now = wordList;
            word = null;
            for(char c:chars){
                if(word != null) {
                    if(word.next == null) word.next = new List();
                    now = word.next;
                }
                word = now.get(c);
                if(word == null) word = now.add(c);
            }
        }
        sort(wordList);
    }
    /**
     * 加载敏感词txt文件,每个敏感词独占一行,不可出现空格,空行,逗号等非文字内容,必须使用UTF-8编码
     * @param path txt文件的绝对地址
     */
    public static void loadWordFromFile(String path){
        String encoding = "UTF-8";
        File file = new File(path);
        try{
            if(file.isFile() && file.exists()){
                InputStreamReader inputStreamReader = new InputStreamReader(
                        new FileInputStream(file),encoding
                );
                BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                String line;
                ArrayList<String> list = new ArrayList<>();
                while ((line = bufferedReader.readLine()) != null){
                    list.add(line);
                }
                bufferedReader.close();
                inputStreamReader.close();
                loadWord(list);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 对敏感词多叉树递增排序
     * @param list 待排序List
     */
    private static void sort(List list){
        if(list == null) return;
        Collections.sort(list); // 递增排序
        for(Word word:list){
            sort(word.next);
        }
    }
    /**
     * 判断是否跳过当前字符
     * @param c 待检测字符
     * @return true:需要跳过   false:不需要跳过
     */
    private static boolean skip(char c){
        for(char c1:skip){
            if(c1 == c) return true;
        }
        return false;
    }
}
src/main/java/com/qxueyou/scc/Sensitive/Word.java
New file
@@ -0,0 +1,19 @@
package com.qxueyou.scc.Sensitive;
public class Word implements Comparable<Word>{
    public char c;
    public List next = null;
    public Word(char c){
        this.c = c;
    }
    @Override
    public int compareTo(Word word) {
        return c - word.c;
    }
    public String toString(){
        return c + "(" + (next == null ? null : next.size()) + ")";
    }
}
src/main/java/com/qxueyou/scc/admin/classes/service/impl/ClsClassService.java
@@ -150,7 +150,7 @@
            hql.append(" and c.endTime < sysdate() ");
        }
//        System.out.println("vvvvv"+ClientUtils.getOrgId()+"333333333"+ClientUtils.getUserId());
        List<Object> args = CollectionUtils.newList(ClientUtils.getOrgId(),keyword_ + "%","40288a1261d106ba0161d1072e260000");
        List<Object> args = CollectionUtils.newList(ClientUtils.getOrgId(),keyword_ + "%",ClientUtils.getUserId());
//        System.out.println(args);
        if (!StringUtils.isEmpty(teacherId)) {
            hql.append(" and exists( select 1 from ClsClassReSubject r,Subject t where r.subjectId=t.subjectId and c.classId= r.classId and t.teacherId=? and r.deleteFlag is false and t.deleteFlag is false)");
src/main/java/com/qxueyou/scc/admin/schoolRoll/impl/SchoolRollServiceImpl.java
@@ -65,14 +65,23 @@
            StuStudent stuStudent = findUnique(hql.toString(), args, StuStudent.class);
            if(stuStudent!=null && classId!=null){
                StringBuffer ClaHql=new StringBuffer("from ClsClass where classId=? and deleteFlag is false");
                List<Object> claArgs = CollectionUtils.newList(classId);
                ClsClass cLaClass = findUnique(ClaHql.toString(), claArgs, ClsClass.class);
                cLaClass.setStudentCount(cLaClass.getStudentCount()+1);
                stuStudent.setClassId(classId);
                save(stuStudent);
            }else {
                return new Result(false,"班级不存在或学生不存在");
            }
        }
        return new Result(true);
        return new Result(true,"分班成功");
    }
src/main/java/com/qxueyou/scc/admin/studentFiles/Impl/StudentFilesServiceImpl.java
New file
@@ -0,0 +1,78 @@
package com.qxueyou.scc.admin.studentFiles.Impl;
import com.qxueyou.scc.admin.studentFiles.StudentFilesService;
import com.qxueyou.scc.base.model.Pager;
import com.qxueyou.scc.base.model.Result;
import com.qxueyou.scc.base.service.impl.CommonAppService;
import com.qxueyou.scc.base.util.CollectionUtils;
import com.qxueyou.scc.teach.student.model.QStuStudent;
import com.qxueyou.scc.teach.student.model.StuStudent;
import com.qxueyou.scc.user.model.QUser;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
public class StudentFilesServiceImpl extends CommonAppService implements StudentFilesService {
    @Override
    public List<Map<String, Object>> getStudentLst(String classId, String keyword, Pager pager) {
        QUser qUser = QUser.user;
        QStuStudent qStuStudent = QStuStudent.stuStudent;
        return this.getQueryFactory()
                .select(qStuStudent.studentId, qStuStudent.name, qStuStudent.studentNo, qStuStudent.sex,
                        qStuStudent.mobilePhone, qStuStudent.status, qStuStudent.studyDuration, qStuStudent.tenantId, qStuStudent.score,qStuStudent.attendanceStatus, qStuStudent.graduationText,qStuStudent.comment,
                        qUser.imgPath)
                .from(qUser, qStuStudent)
                .where(qUser.deleteFlag.isFalse().and(qUser.userId.eq(qStuStudent.userId))
                        .and(qStuStudent.classId.eq(classId)).and(qStuStudent.name.like("%" + keyword + "%")).and(qStuStudent.deleteFlag.isFalse()))
                .limit(pager.getPageSize()).offset(pager.getOffset()).orderBy(qStuStudent.createTime.desc()).fetch().stream().map(tuple -> {
                    Map<String, Object> map = new HashMap<String, Object>();
                    map.put("studentId", tuple.get(qStuStudent.studentId));
                    map.put("name", tuple.get(qStuStudent.name));
                    map.put("studentNo", tuple.get(qStuStudent.studentNo));
                    map.put("studentNumber", tuple.get(qStuStudent.studentNo));
                    map.put("sex", tuple.get(qStuStudent.sex));
                    map.put("mobilePhone", tuple.get(qStuStudent.mobilePhone));
                    map.put("status", tuple.get(qStuStudent.status));
                    map.put("studyDuration", tuple.get(qStuStudent.studyDuration));
                    map.put("tenantId", tuple.get(qStuStudent.tenantId));
                    map.put("score", tuple.get(qStuStudent.score));
                    map.put("graduationText", tuple.get(qStuStudent.graduationText));
                    map.put("attendanceStatus", tuple.get(qStuStudent.attendanceStatus));
                    map.put("comment", tuple.get(qStuStudent.comment));
                    map.put("imgPath", tuple.get(qUser.imgPath));
                    return map;
                }).collect(Collectors.toList());
    }
    @Override
    public int getStudentsCount(String classId, String keyword) {
//        //TODO 判断是否为补考分组
//        ClsClass cls = clsService.read(classId);
//        String hql=null;
//        if(cls!=null && cls.getClassTypes()!=null && "1".equals(cls.getClassTypes())){
//            //TODO 补考分组需要另一种查询学员 stu.tenantId = class.classId
//             hql = "from StuStudent where tenantId=:classId and name like :keyword and deleteFlag is false";
//        }else {
        String    hql = "from StuStudent where classId=:classId and name like :keyword and deleteFlag is false";
//        }
        return findCountByComplexHql(hql, CollectionUtils.newObjectMap("classId", classId, "keyword", "%" + keyword + "%" ));
    }
    @Override
    public String studentCommentAddAndUp(String[] studentIds,String comment) {
        StringBuffer hql=new StringBuffer("from StuStudent where studentId=? and deleteFlag is false");
        List<Object> args = CollectionUtils.newList(studentIds);
        StuStudent stuStudent = findUnique(hql.toString(), args, StuStudent.class);
        stuStudent.setComment(comment);
        save(stuStudent);
        return "";
    }
}
src/main/java/com/qxueyou/scc/admin/studentFiles/StudentFilesService.java
New file
@@ -0,0 +1,37 @@
package com.qxueyou.scc.admin.studentFiles;
import com.qxueyou.scc.base.model.Pager;
import com.qxueyou.scc.base.model.Result;
import com.qxueyou.scc.teach.student.model.StuStudent;
import java.util.List;
import java.util.Map;
/**
 * 学生档案管理
 */
public interface StudentFilesService {
    /**
     * 学生档案查询
     * @param classId
     * @param keyword
     * @param pager
     * @return
     */
    List<Map<String, Object>> getStudentLst(String classId, String keyword, Pager pager);
    /**
     * 获取学员数量
     * @param classId 班级id
     * @param keyword 关键词
     * @return
     */
    int getStudentsCount(String classId,String keyword);
    /**
     * 评语
     * @param studentIds
     * @param comment
     * @return
     */
    String studentCommentAddAndUp(String[] studentIds,String comment);
}
src/main/java/com/qxueyou/scc/base/dao/BaseDAO.java
@@ -7,6 +7,7 @@
package com.qxueyou.scc.base.dao;
import java.beans.Transient;
import java.io.Serializable;
import java.math.BigInteger;
import java.util.ArrayList;
@@ -29,6 +30,7 @@
import com.qxueyou.scc.base.model.Pager;
import com.qxueyou.scc.base.model.Result;
import org.springframework.transaction.annotation.Transactional;
/**
 * 基础DAO类,自动注入sessionFactory
@@ -37,6 +39,7 @@
 * @since JDK1.6
 * @history 2010-07-28 夏德虎 新建
 */
@Transactional(readOnly=false)
public class BaseDAO extends HibernateDaoSupport {
    
    /** 注释 rawtypes  */
@@ -84,6 +87,7 @@
    /**
     * 保存或更新对象
     */
    @Transactional(readOnly = false)
    public void saveOrUpdate(Object obj) {
        this.getHibernateTemplate().saveOrUpdate(obj);
    }
src/main/java/com/qxueyou/scc/base/model/Result.java
@@ -83,6 +83,10 @@
        this.success = success;
    }
    public Boolean getSuccess() {
        return success;
    }
    public String getMsg() {
        return msg;
    }
src/main/java/com/qxueyou/scc/base/util/ClientUtils.java
@@ -115,9 +115,10 @@
    /** 得到classId*/
    public static String getClassId(){
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        HttpSession session = request.getSession();
        String info = getUserInfo().getInfo(UserInfoWrapper.INF_CLASS_ID);
//        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
//        HttpSession session = request.getSession();
//        String info = getUserInfo().getInfo(UserInfoWrapper.INF_CLASS_ID);
//        if(info!=null){
//            info= (String) session.getAttribute(UserInfoWrapper.INF_CLASS_ID);
//        }
src/main/java/com/qxueyou/scc/controller/CourseScheduleController.java
@@ -7,10 +7,7 @@
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.*;
import com.qxueyou.scc.admin.classes.model.ClsClass;
import com.qxueyou.scc.admin.classroom.service.IClassRoomService;
@@ -33,6 +30,7 @@
 */
@Api(tags="课表接口")
@Controller
@CrossOrigin(origins="*",maxAge=3600)
@RequestMapping("/admin/schedule")
public class CourseScheduleController {
    
src/main/java/com/qxueyou/scc/controller/ResController.java
@@ -14,6 +14,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;
@@ -24,6 +25,7 @@
 * @author chenjunliang
 */
@Api(tags = "资源管理接口")
@CrossOrigin
@RestController
@RequestMapping(value = "/teach/res")
public class ResController {
@@ -207,14 +209,11 @@
     * @param id 资源id
     */
    @GetMapping(value = "getResDetail")
    public Result getResDetail(String id) {
    public Result getResDetail(String id,HttpServletResponse response) {
        Res res = resService.read(id);
        Result pathResult = resService.readAccessPath(id, null);
        return new Result(true, "success", CollectionUtils.newObjectMap("type", res.getType(), "name", res.getName(),
                "coverUrl", res.getCoverPageUrl(), "remark", res.getRemark(), "fullPath", pathResult.getDataT("path")));
    }
}
src/main/java/com/qxueyou/scc/controller/SchoolRollController.java
@@ -36,7 +36,7 @@
     * @param pageNum
     * @return
     */
    @ApiOperation(value = "获取正学籍列表", notes = "")
    @ApiOperation(value = "获取学籍列表", notes = "")
    @GetMapping(value = "/schoolList")
    public Result schoolList(@RequestParam(defaultValue = "10") Integer limit, @RequestParam(defaultValue = "1") Integer pageNum,String keyword,String status) {
src/main/java/com/qxueyou/scc/controller/StudentFilesController.java
New file
@@ -0,0 +1,41 @@
package com.qxueyou.scc.controller;
import com.qxueyou.scc.admin.studentFiles.StudentFilesService;
import com.qxueyou.scc.base.model.Pager;
import com.qxueyou.scc.base.model.Result;
import com.qxueyou.scc.base.util.CollectionUtils;
import com.qxueyou.scc.base.util.QBeanUtils;
import com.qxueyou.scc.teach.student.model.StuStudent;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
@Api(tags="学生档案管理接口")
@RestController
@RequestMapping("/admin/StudentFiles")
public class StudentFilesController {
    @Autowired
    private StudentFilesService studentFilesService;
    @ApiOperation(value = "学生档案", notes = "")
    @GetMapping(value = "/studentFilesList")
    public Result studentFilesList(String classId, @RequestParam(defaultValue = "10") Integer limit,
                                   @RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "") String keyword) {
        List<Map<String, Object>> students = studentFilesService.getStudentLst(classId, keyword, new Pager(limit, pageNum));
        int studentCount = studentFilesService.getStudentsCount(classId, keyword);
        return new Result(true, "success",
                CollectionUtils.newObjectMap("studentCount", studentCount, "studentLst", students));
    }
    @ApiOperation(value = "学生评语", notes = "")
    @PostMapping(value = "/studentCommentAddAndUp")
    public String studentCommentAddAndUp(String[] studentIds, String comment) {
        return studentFilesService.studentCommentAddAndUp(studentIds,comment);
    }
}
src/main/java/com/qxueyou/scc/controller/VideoLiveController.java
@@ -1,10 +1,14 @@
package com.qxueyou.scc.controller;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.text.SimpleDateFormat;
import java.util.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.hankcs.hanlp.corpus.tag.Nature;
import com.qxueyou.scc.sdk.MTCloud;
import io.swagger.models.auth.In;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -24,6 +28,10 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import springfox.documentation.spring.web.json.Json;
import static com.hankcs.hanlp.corpus.tag.Nature.r;
import static com.hankcs.hanlp.corpus.tag.Nature.s;
@Api(tags="直播管理接口")
@RestController
@@ -78,7 +86,8 @@
                        "status","status",
                        "pushUrl","rtmpPushUrl",
                        "hlsPullUrl","hlsPullUrl",
                        "previewImgUrl","previewImgUrl"
                        "previewImgUrl","previewImgUrl",
                        "courseId","courseId"
                        ))));
    }
@@ -106,14 +115,59 @@
    @ApiOperation(value = "创建编辑直播")
    @PostMapping(value = "addOrUpdate")
    public Result addOrUpdate(String videoLiveId, String name, String content,String teacherId,String teacherName,String subjectId,
            String subjectName,String definition,String imgPath, long startTime,long endTime, boolean isPlayBack, String classIds) {
        if(StringUtils.isEmpty(videoLiveId)) {
            return liveService.add(name, content,teacherId,teacherName,subjectId,subjectName,definition,imgPath, new Date(startTime), new Date(endTime), isPlayBack, StringUtils.isEmpty(classIds)?null:CollectionUtils.newList(String.class,classIds.split(",")));
        }else {
            return liveService.update(videoLiveId,name, content,teacherId,teacherName,subjectId,subjectName,definition,imgPath, new Date(startTime), new Date(endTime), isPlayBack,  StringUtils.isEmpty(classIds)?null:CollectionUtils.newList(String.class,classIds.split(",")));
            String subjectName,String definition,String imgPath, long startTime,long endTime, boolean isPlayBack, String classIds) throws Exception {
        MTCloud client = new MTCloud();
        HashMap<Object,Object> options = new HashMap<Object,Object>();
        options.put("barrage", 1);
        options.put("isPublic", 1);
        options.put("robotNumber", 1);
        options.put("robotType", 1);
        options.put("pptDisplay", 1);
        options.put("modetype", 6);
        //将long类型转换为String类型
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT+00:00"));
        String startTime1 = simpleDateFormat.format(new Date(startTime));
        String endTime1 = simpleDateFormat.format(new Date(endTime));
        //调用第三方直播接口
        String s = client.courseAdd(name, ClientUtils.getUserId(), startTime1, endTime1, ClientUtils.getUserName(), "222", options);
        //json转换拿到courseId
        JSONObject jsonObject = JSON.parseObject(s);
        JSONObject data = jsonObject.getJSONObject("data");
        String course_id = (String) data.get("course_id");
//        System.out.println(Integer.parseInt(course_id));
        if(Nature.s !=null) {
            liveService.add(name, content,teacherId,teacherName,subjectId,subjectName,definition,imgPath, new Date(startTime), new Date(endTime),Integer.parseInt(course_id), isPlayBack, StringUtils.isEmpty(classIds)?null:CollectionUtils.newList(String.class,classIds.split(",")));
            return new Result(true, "成功", s);
        }
        return new Result(false);
    }
    @ApiOperation(value = "开启直播")
    @GetMapping(value = "OpenLive")
    public Result OpenLive(int courseId) throws Exception {
        MTCloud client = new MTCloud();
        HashMap<Object,Object> options = new HashMap<Object, Object>();
        options.put("ssl", false);
        String res = client.courseLogin(ClientUtils.getUserId(),MTCloud.ACCOUNT_TYPE_THIRD, options);
        System.out.println(res);
        JSONObject jsonObject = JSON.parseObject(res);
        JSONObject data = jsonObject.getJSONObject("data");
        String protocol = (String) data.get("url");
        return new Result(true,"开启成功",protocol);
    }
    @ApiOperation(value = "在线时长")
    @GetMapping(value = "onlineCommunication")
    public Result onlineCommunication(String courseId,Integer page, Integer size) throws Exception {
        MTCloud client = new MTCloud();
        HashMap<Object,Object> options = new HashMap<Object, Object>();
        options.put("ssl", false);
        String res = client.courseVisitorList("3360573",10,1,options);
        return new Result(true,"开启成功",res);
    }
    /**
     * 查询直播详情
     * 
@@ -200,13 +254,13 @@
    /**
     * 删除/多个以逗号隔开
     * 
     * @param videoLiveId
     * @param videoLiveIds
     * @return
     */
    @ApiOperation(value = "删除创建的直播")
    @PostMapping(value = "delete")
    public Result delete(String videoLiveIds) {
        return liveService.delete(videoLiveIds.split(","));
    public Result delete(String videoLiveIds,String    courseIds) throws Exception {
        return liveService.delete(videoLiveIds.split(","),courseIds.split(","));
    }
    
    
@@ -246,7 +300,7 @@
    /**
     * 直播结束
     * 
     * @param videoLiveId
     * @param videoLiveIds
     *            直播id
     */
    @ApiOperation(value = "直播结束")
@@ -300,7 +354,8 @@
                        "status","status",
                        "pushUrl","rtmpPushUrl",
                        "hlsPullUrl","hlsPullUrl",
                        "previewImgUrl","previewImgUrl"
                        "previewImgUrl","previewImgUrl",
                        "courseId","courseId"
                ))));
    }
    
src/main/java/com/qxueyou/scc/exam/action/ExamController.java
@@ -372,7 +372,9 @@
    public @ResponseBody Result queryStudentExamList(String keyword, String classId, String subjectId, Integer status, Integer pageSize, Integer pageNum) {
        pageSize = pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE;
        pageNum = pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM;
        if(classId==null){
        classId=ClientUtils.getClassId();
        }
        System.out.println("avcd"+ClientUtils.getUserId());
//        System.out.println(ClientUtils.getUserId()+"--cla"+classId+"--sub"+subjectId+"--sta"+status+"--key"+keyword+"--pag"+pageNum+"---siz"+pageSize);
        String [] classIds= null;
src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseInfoService.java
@@ -794,7 +794,7 @@
            ResFile resFile = this.read(ResFile.class, fileId);
            exerciseCompleteInfo.setFileId(fileId);
            exerciseCompleteInfo.setFilePath(filePath);
            exerciseCompleteInfo.setOrgiFileName(resFile.getFileName());
            exerciseCompleteInfo.setOrgiFileName(ClientUtils.getUserName()+"的作业");
        }
        exerciseCompleteInfo.setUploadDesc(content);
src/main/java/com/qxueyou/scc/operation/topic/action/StuTopicController.java
@@ -1,6 +1,7 @@
package com.qxueyou.scc.operation.topic.action;
import com.qxueyou.scc.Sensitive.SensitiveWordFilter;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -354,7 +355,9 @@
    @GetMapping(value = "addComment")
    public Result addComment(String content, String commentObjectId, String commentParentId, String commentedId,
            String commentedName) {
        return topicService.addComment(content, commentObjectId, commentParentId, commentedId, commentedName);
        SensitiveWordFilter.loadWordFromFile("D:\\工作\\SensitiveWord\\SensitiveWordList.txt");
        String filter = SensitiveWordFilter.Filter(content);
        return topicService.addComment(filter, commentObjectId, commentParentId, commentedId, commentedName);
    }
    /**
src/main/java/com/qxueyou/scc/portal/homepage/controller/HomepageController.java
@@ -7,6 +7,7 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -15,6 +16,7 @@
 * @author ZERO 2021-03-03 09:06
 */
@RestController
@CrossOrigin
@RequestMapping("/homepage")
@Api(tags = "首页相关接口")
public class HomepageController {
@@ -29,12 +31,19 @@
        return new Result(true, "tab",homepageService.getTabs());
    }
//    @GetMapping
//    @ApiOperation("获取列表")
//    public Result getIndexDetail() {
////        System.err.println("=====>获取列表");
//        return new Result(true,"", homepageService.getIndexDetail());
//    }
    @GetMapping(value = "/home")
    @ApiOperation("获取列表")
    public Result getIndexDetail() {
//        System.err.println("=====>获取列表");
        return new Result(true,"", homepageService.getIndexDetail());
    }
    @GetMapping(value = "/getExcellentTeaching")
    @ApiOperation("获取精品教学")
    public Result getExcellentTeaching() {
//        System.err.println("=====>获取列表");
        return new Result(true,"", homepageService.getExcellentTeaching());
    }
    @GetMapping("/article")
    @ApiOperation("获取文章列表")
src/main/java/com/qxueyou/scc/portal/homepage/serivce/IHomepageService.java
@@ -13,7 +13,7 @@
    /**
     * 获取首页数据
//     */
//    Map<String, Object> getIndexDetail();
    Map<String, Object> getIndexDetail();
    /**
     * 获取首页标签
@@ -31,4 +31,5 @@
    Map<String,Object> getVideo(String type,String subColumn,int page, int size);
    Map<String,Object> getExcellentTeaching();
}
src/main/java/com/qxueyou/scc/portal/homepage/serivce/imp/HomepageService.java
@@ -8,49 +8,255 @@
//import com.qxueyou.appraisal.web.homepage.serivce.IHomepageService;
//import com.qxueyou.entity.article.ArticleDO;
//import com.qxueyou.util.CollectionUtils;
import com.querydsl.jpa.impl.JPAQuery;
import com.qxueyou.scc.admin.classes.service.IClassLectureService;
import com.qxueyou.scc.admin.progress.dao.ProgressDAO;
import com.qxueyou.scc.base.service.impl.CommonAppService;
import com.qxueyou.scc.base.util.CollectionUtils;
import com.qxueyou.scc.evaluate.service.IEvaluateService;
import com.qxueyou.scc.operation.topic.service.ITopicService;
import com.qxueyou.scc.portal.homepage.dao.ArticleDao;
import com.qxueyou.scc.portal.homepage.serivce.IHomepageService;
import com.qxueyou.scc.portal.information.model.Information;
import com.qxueyou.scc.teach.res.model.Res;
import com.qxueyou.scc.teach.res.model.ResLib;
import com.qxueyou.scc.teach.res.service.IResAudioService;
import com.qxueyou.scc.teach.subject.model.QSubjectLecture;
import com.qxueyou.scc.teach.subject.model.SubjectLecture;
import com.qxueyou.scc.teach.subject.model.view.OpenSubjectV;
import com.qxueyou.scc.teach.subject.service.ILectureService;
import com.qxueyou.scc.teach.subject.service.ISubjectService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import static java.util.stream.Collectors.toList;
/**
 * @author ZERO 2021-03-03 09:16
 */
@Service
public class HomepageService implements IHomepageService {
public class HomepageService extends CommonAppService implements IHomepageService {
    @Autowired
    private ArticleDao articleDao;
//    @Autowired
//    private AppraisalBatchDao batchDao;
    @Autowired
    ISubjectService subjectService;
//    @Autowired
//    private ContestsBatchDao batchDao;
    @Autowired
    ILectureService lectureService;
//    @Autowired
//    private OccupationDao occupationDao;
    @Autowired
    IClassLectureService clsLectureService;
    @Autowired
    IResAudioService audioService;
    @Autowired
    ProgressDAO progressDao;
    @Autowired
    ITopicService topicService;
    @Autowired
    IEvaluateService evaluateService;
    /**
     * 获取首页数据
     */
//    @Override
//    public Map<String, Object> getIndexDetail() {
//
//        List<OpenSubjectV> openSubjectVS = subjectService.listOpenSubjectV();
//        //华文课堂
////        List<String> chineseLanguageClassId= openSubjectVS.stream().filter(openSubjectV -> openSubjectV.getSubjectName().equals("华文课堂")).map(OpenSubjectV::getSubjectId).collect(toList());
//        //文化中国
//        List<String> culturalChinaId = openSubjectVS.stream().filter(openSubjectV -> openSubjectV.getSubjectName().equals("文化中国")).map(OpenSubjectV::getSubjectId).collect(toList());
//        //文化课堂
//        List<String> culturalClassroomId = openSubjectVS.stream().filter(openSubjectV -> openSubjectV.getSubjectName().equals("文化课堂")).map(OpenSubjectV::getSubjectId).collect(toList());
//        //实景课堂
//        List<String> realClassId = openSubjectVS.stream().filter(openSubjectV -> openSubjectV.getSubjectName().equals("实景课堂")).map(OpenSubjectV::getSubjectId).collect(toList());
//        //中文+职业教育课程
//        List<String> chineseCourseId = openSubjectVS.stream().filter(openSubjectV -> openSubjectV.getSubjectName().equals("中文职业教育课程")).map(OpenSubjectV::getSubjectId).collect(toList());
//
//        StringBuffer hql = new StringBuffer("from SubjectLecture p where deleteFlag is false and status=?");
//        List<Object> args = CollectionUtils.newList(SubjectLecture.STATUS_DRAFT);
//        List<SubjectLecture> subjectLectureList = find(hql.toString(), args, SubjectLecture.class);
//
//        //华文课堂
////        List<String> shineseLanguageClassResId= subjectLectureList.stream().filter(subjectLecture -> subjectLecture.getSubjectId().equals(chineseLanguageClassId.get(0))).map(SubjectLecture::getResItemId).collect(toList());
//        //文化中国
//        List<String> culturalChinaResId = subjectLectureList.stream().filter(subjectLecture -> subjectLecture.getName().equals(culturalChinaId.get(0))).map(SubjectLecture::getResItemId).collect(toList());
//        //文化课堂
//        List<String> culturalClassroomResId = subjectLectureList.stream().filter(subjectLecture -> subjectLecture.getName().equals(culturalClassroomId.get(0))).map(SubjectLecture::getResItemId).collect(toList());
//        //实景课堂
//        List<String> realClassResId = subjectLectureList.stream().filter(subjectLecture -> subjectLecture.getName().equals(realClassId.get(0))).map(SubjectLecture::getResItemId).collect(toList());
//        //中文+职业教育课程
//        List<String> chineseCourseResId = subjectLectureList.stream().filter(subjectLecture -> subjectLecture.getName().equals(chineseCourseId.get(0))).map(SubjectLecture::getResItemId).collect(toList());
//        StringBuffer hqlRes = new StringBuffer("from Res p where deleteFlag is false and status=?");
//        List<Res> resList = find(hqlRes.toString(), args, Res.class);
//        ArrayList<Res> shineseLanguageClassRes = new ArrayList<>();
//        ArrayList<Res> culturalChinaRes = new ArrayList<>();
//        ArrayList<Res> culturalClassroomRes = new ArrayList<>();
//        ArrayList<Res> realClassRes = new ArrayList<>();
//        for (Res res : resList) {
////            for (String resItemId : shineseLanguageClassResId) {
////                if (res.getResId().equals(resItemId)) {
////                    shineseLanguageClassRes.add(res);
////                }
////            }
//            for (String resItemId : culturalChinaResId) {
//                if (res.getResId().equals(resItemId)) {
//                    culturalChinaRes.add(res);
//                }
//            }
//            for (String resItemId : culturalClassroomResId) {
//                if (res.getResId().equals(resItemId)) {
//                    culturalClassroomRes.add(res);
//                }
//            }
//            for (String resItemId : realClassResId) {
//                if (res.getResId().equals(resItemId)) {
//                    realClassRes.add(res);
//                }
//            }
//        }
//
////        System.err.println("================>获取首页数据");
//        return CollectionUtils.newObjectMap(
//                "appraisalBatchInfo", batchDao.findBatches(1, 24, null).get("data"), // createTime  browseCount dateTime
//                "occupationInfo", articleDao.findPage(CollectionUtils.newObjectMap("type", "qualifiedSet", "status", ArticleDO.UP_STATUS), 1, 8, "dateTime", Sort.Direction.DESC).get("data"),
//                "news", articleDao.findPage(CollectionUtils.newObjectMap("type", "policiesRegulations", "status", ArticleDO.UP_STATUS), 1, 8, "dateTime", Sort.Direction.DESC).get("data"));
//                "华文课堂", shineseLanguageClassRes,
//                "文化中国", culturalChinaRes,
//                "实景课堂", culturalClassroomRes,
//                "中文+职业教育课程", realClassRes);
//    }
    @Override
    public Map<String, Object> getIndexDetail() {
        List<OpenSubjectV> openSubjectVS = subjectService.listOpenSubjectV();
        //文化中国
        List<String> culturalChinaId = openSubjectVS.stream().filter(openSubjectV -> openSubjectV.getSubjectName().equals("文化中国")).map(OpenSubjectV::getSubjectId).collect(toList());
        //文化课堂
//        List<String> culturalClassroomId = openSubjectVS.stream().filter(openSubjectV -> openSubjectV.getSubjectName().equals("文化课堂")).map(OpenSubjectV::getSubjectId).collect(toList());
        //华文课堂
        List<String> chineseLanguageClassId= openSubjectVS.stream().filter(openSubjectV -> openSubjectV.getSubjectName().equals("华文课堂")).map(OpenSubjectV::getSubjectId).collect(toList());
        StringBuffer hql = new StringBuffer("from SubjectLecture p where deleteFlag is false and status=?");
        List<Object> args = CollectionUtils.newList(SubjectLecture.STATUS_DRAFT);
        List<SubjectLecture> subjectLectureList = find(hql.toString(), args, SubjectLecture.class);
        //文化中国
        List<String> culturalChinaResId = culturalChinaId.size() == 0 ? null : subjectLectureList.stream().filter(subjectLecture -> subjectLecture.getSubjectId().equals(culturalChinaId.get(0))).map(SubjectLecture::getResItemId).collect(toList());
        //文化课堂
        List<String> chineseLanguageClassResId = chineseLanguageClassId.size() == 0 ? null : subjectLectureList.stream().filter(subjectLecture -> subjectLecture.getSubjectId().equals(chineseLanguageClassId.get(0))).map(SubjectLecture::getResItemId).collect(toList());
        StringBuffer hqlRes = new StringBuffer("from Res p where deleteFlag is false and status=?");
        List<Res> resList = find(hqlRes.toString(), args, Res.class);
        List<Res> culturalChinaRes = new ArrayList<>();
        List<Res> chineseLanguageClassRes = new ArrayList<>();
        if (culturalChinaResId != null) {
            for (Res res : resList) {
                for (String resItemId : culturalChinaResId) {
                    if (res.getResId().equals(resItemId)) {
                        culturalChinaRes.add(res);
                    }
                }
            }
        }
        if (chineseLanguageClassResId != null) {
            for (Res res : resList) {
                for (String resItemId : chineseLanguageClassResId) {
                    if (res.getResId().equals(resItemId)) {
                        chineseLanguageClassRes.add(res);
                    }
                }
            }
        }
//        return CollectionUtils.newObjectMap(
//                "culturalClassroomRes", chineseLanguageClassRes,
//                "culturalChinaRes", culturalChinaRes);
        return CollectionUtils.newObjectMap(
                "culturalClassroomRes",CollectionUtils.newObjectMap("data",chineseLanguageClassRes),
                "culturalChinaRes",CollectionUtils.newObjectMap("data", culturalChinaRes)
        );
    }
    @Override
    public Map<String, Object> getExcellentTeaching() {
        List<OpenSubjectV> openSubjectVS = subjectService.listOpenSubjectV();
        //文化课堂
        List<String> culturalClassroomId = openSubjectVS.stream()
                .filter(openSubjectV -> openSubjectV.getSubjectName().equals("华文课堂"))
                .map(OpenSubjectV::getSubjectId).collect(toList());
        //实景课堂
        List<String> realClassId = openSubjectVS.stream()
                .filter(openSubjectV -> openSubjectV.getSubjectName().equals("实景课堂"))
                .map(OpenSubjectV::getSubjectId).collect(toList());
        //中文+职业教育课程
        List<String> chineseCourseId = openSubjectVS.stream()
                .filter(openSubjectV -> openSubjectV.getSubjectName().equals("中文+职业教育课程"))
                .map(OpenSubjectV::getSubjectId).collect(toList());
        StringBuffer hql = new StringBuffer("from SubjectLecture p where deleteFlag is false and status=?");
        List<Object> args = CollectionUtils.newList(SubjectLecture.STATUS_DRAFT);
        List<SubjectLecture> subjectLectureList = find(hql.toString(), args, SubjectLecture.class);
        //华文课堂
        List<String> culturalClassroomResId = culturalClassroomId.size() == 0 ? null : subjectLectureList.stream().filter(subjectLecture -> subjectLecture.getSubjectId().equals(culturalClassroomId.get(0)))
                .sorted(Comparator.comparing(SubjectLecture::getCreateTime)
                        .reversed()).map(SubjectLecture::getResItemId).limit(8).collect(toList());
        //实景课堂
        List<String> realClassResId = realClassId.size() == 0 ? null : subjectLectureList.stream().filter(subjectLecture -> subjectLecture.getSubjectId().equals(realClassId.get(0)))
                .sorted(Comparator.comparing(SubjectLecture::getCreateTime)
                        .reversed()).map(SubjectLecture::getResItemId).limit(8).collect(toList());
        //中文+职业教育课程
        List<String> chineseCourseResId = chineseCourseId.size() == 0 ? null : subjectLectureList.stream().filter(subjectLecture -> subjectLecture.getSubjectId().equals(chineseCourseId.get(0)))
                .sorted(Comparator.comparing(SubjectLecture::getCreateTime)
                        .reversed()).map(SubjectLecture::getResItemId).limit(8).collect(toList());
        StringBuffer hqlRes = new StringBuffer("from Res p where deleteFlag is false and status=?");
        List<Res> resList = find(hqlRes.toString(), args, Res.class);
        ArrayList<Res> chineseCourseRes = new ArrayList<>();
        ArrayList<Res> culturalClassroomRes = new ArrayList<>();//文化课堂
        ArrayList<Res> realClassRes = new ArrayList<>();
        if (culturalClassroomResId != null) {
            for (String resItemId : culturalClassroomResId) {
                for (Res res : resList) {
                    if (res.getResId().equals(resItemId)) {
                        culturalClassroomRes.add(res);
                    }
                }
            }
        }
        if (realClassResId != null) {
            for (String resItemId : realClassResId) {
                for (Res res : resList) {
                    if (res.getResId().equals(resItemId)) {
                        realClassRes.add(res);
                    }
                }
            }
        }
        if (chineseCourseResId != null) {
            for (String resItemId : chineseCourseResId) {
                for (Res res : resList) {
                    if (res.getResId().equals(resItemId)) {
                        chineseCourseRes.add(res);
                    }
                }
            }
        }
        return CollectionUtils.newObjectMap(
                "chineseCourseRes",CollectionUtils.newObjectMap("subjectId",culturalClassroomId.size() == 0 ? null : culturalClassroomId.get(0),"data",chineseCourseRes),
                "culturalClassroomRes",CollectionUtils.newObjectMap("subjectId",realClassId.size() == 0 ? null : realClassId.get(0),"data",culturalClassroomRes),
                "realClassRes", CollectionUtils.newObjectMap("subjectId",chineseCourseId.size() == 0 ? null :chineseCourseId.get(0),"data",realClassRes));
    }
    /**
     * 获取首页标签
@@ -95,7 +301,8 @@
     * 获取文章列表
     */
    @Override
    public Map<String, Object> getArticle(String type,String subColumn,String numbers,int page, int size, String keyword) {
    public Map<String, Object> getArticle(String type, String subColumn, String numbers, int page, int size, String
            keyword) {
        return articleDao.moreOccupation(type,subColumn,numbers,page, size, keyword);
    }
src/main/java/com/qxueyou/scc/sdk/CommonResult.java
New file
@@ -0,0 +1,76 @@
package com.qxueyou.scc.sdk;
import java.io.Serializable;
public class CommonResult<T> implements Serializable {
    private static final long serialVersionUID = 7917345507074842804L;
    private String code;
    private String msg;
    private T data;
    private String format = "json";
    public static class Builder {
        public static com.qxueyou.scc.sdk.CommonResult SUCC() {
            com.qxueyou.scc.sdk.CommonResult vo = new com.qxueyou.scc.sdk.CommonResult();
            vo.setCode("0");
            vo.setmsg("suc");
            return vo;
        }
        public static com.qxueyou.scc.sdk.CommonResult FAIL() {
            com.qxueyou.scc.sdk.CommonResult vo = new com.qxueyou.scc.sdk.CommonResult();
            return vo;
        }
    }
    public com.qxueyou.scc.sdk.CommonResult initErrCodeAndMsg(String code, String msg) {
        this.code = code;
        this.msg = msg;
        return this;
    }
    public com.qxueyou.scc.sdk.CommonResult initErrCodeAndMsg(int code, String msg) {
        this.code = Integer.toString(code);
        this.msg = msg;
        return this;
    }
    public com.qxueyou.scc.sdk.CommonResult initSuccCodeAndMsg(String code, String msg) {
        this.code = code;
        this.msg = msg;
        return this;
    }
    public com.qxueyou.scc.sdk.CommonResult initSuccData(T data) {
        this.data = data;
        return this;
    }
    public static long getSerialVersionUID() {
        return serialVersionUID;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getmsg() {
        return msg;
    }
    public void setmsg(String msg) {
        this.msg = msg;
    }
    public T getData() {
        return data;
    }
    public void setData(T data) {
        this.data = data;
    }
}
src/main/java/com/qxueyou/scc/sdk/MTCloud.java
New file
Diff too large
src/main/java/com/qxueyou/scc/sdk/utils/MD5Util.java
New file
@@ -0,0 +1,67 @@
package com.qxueyou.scc.sdk.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Util {
    protected static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9','a', 'b', 'c', 'd', 'e', 'f' };
    protected static MessageDigest messagedigest = null;
    static{
       try{
        messagedigest = MessageDigest.getInstance("MD5");
       }catch(NoSuchAlgorithmException nsaex){
        System.err.println(MD5Util.class.getName()+"初始化失败,MessageDigest不支持MD5Util。");
        nsaex.printStackTrace();
       }
    }
    public static String getFileMD5String(File file) throws IOException {
       FileInputStream in = new FileInputStream(file);
       FileChannel ch = in.getChannel();
       MappedByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY, 0, file.length());
       messagedigest.update(byteBuffer);
       return bufferToHex(messagedigest.digest());
    }
    public static String getMD5String(String s) {
       return getMD5String(s.getBytes());
    }
    public static String getMD5String(byte[] bytes) {
       messagedigest.update(bytes);
       return bufferToHex(messagedigest.digest());
    }
    private static String bufferToHex(byte bytes[]) {
       return bufferToHex(bytes, 0, bytes.length);
    }
    private static String bufferToHex(byte bytes[], int m, int n) {
       StringBuffer stringbuffer = new StringBuffer(2 * n);
       int k = m + n;
       for (int l = m; l < k; l++) {
        appendHexPair(bytes[l], stringbuffer);
       }
       return stringbuffer.toString();
    }
    private static void appendHexPair(byte bt, StringBuffer stringbuffer) {
       char c0 = hexDigits[(bt & 0xf0) >> 4];
       char c1 = hexDigits[bt & 0xf];
       stringbuffer.append(c0);
       stringbuffer.append(c1);
    }
    public static boolean checkPassword(String password, String md5PwdStr) {
       String s = getMD5String(password);
       return s.equals(md5PwdStr);
    }
}
src/main/java/com/qxueyou/scc/stucontroller/HomePageController.java
@@ -5,6 +5,7 @@
import com.qxueyou.scc.base.util.ClientUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -31,6 +32,7 @@
 *
 */
@RestController
@CrossOrigin
@RequestMapping(value = "/stu/homepage")
public class HomePageController {
src/main/java/com/qxueyou/scc/stucontroller/StuLiveController.java
@@ -1,11 +1,10 @@
package com.qxueyou.scc.stucontroller;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.qxueyou.scc.sdk.MTCloud;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@@ -115,22 +114,27 @@
    
    /**
     * 查看直播明细
     * @param liveId 直播id
     * @param couresId 直播id
     * @return
     */
    @GetMapping(value = "view")
    public Result view(String liveId) {
    public Result view(String couresId) throws Exception {
            
        MediaVideoLive live = liveService.read(liveId);
        
        return new Result(true, "success", CollectionUtils.newObjectMap(
                "startTime",live.getStartTime(),
                "endTime",live.getEndTime(),
                "name",live.getName(),
                "hlsPullUrl",live.getHlsPullUrl(),
                "imgPath",live.getPreviewImgUrl(),
                "chatroomId",dao.getChatRoomId(liveId),
                "remark",live.getRemark()
                ));
        MTCloud client = new MTCloud();
        HashMap<Object,Object> options = new HashMap<Object, Object>();
        String res = client.courseAccess(couresId, ClientUtils.getUserId(), ClientUtils.getUserName(), MTCloud.ROLE_USER, 10000, options);
        JSONObject jsonObject = JSON.parseObject(res);
        JSONObject data = jsonObject.getJSONObject("data");
        String liveUrl = (String) data.get("liveUrl");
        System.out.println(liveUrl);
        return new Result(true, "success",liveUrl);
    }
}
src/main/java/com/qxueyou/scc/stucontroller/StuSubjectController.java
@@ -528,9 +528,14 @@
                subjectUtils.setStudyTime(new BigDecimal(progressValue));
            }
            mySubjectV.setSubjectName(openSubjectV.getSubjectName());
            mySubjectV.setCoverPageUrl(openSubjectV.getCoverPageUrl());
            mySubjectV.getId().setSubjectId(openSubjectV.getSubjectId());
            result.add(mySubjectV);
            lecurelist.add(subjectUtils);
        }
        for (MySubjectV mySubjectV:
        result) {
            System.out.println(mySubjectV);
        }
        return new Result(true, "success",
                CollectionUtils.newObjectMap("subjectList",
@@ -571,6 +576,7 @@
            if (percentAvg.isNaN()) {
                percentAvg = 0.0;
            }
            subject.setCoverPageUrl(subject1.getCoverPageUrl());
            subject.setPercent(percentAvg);
            subject.setProgressValue(new BigDecimal(progressValue));
            progressLst.get(0).put("percent", subject.getPercent());
@@ -593,6 +599,7 @@
            if (percentAvg.isNaN()) {
                percentAvg = 0.0;
            }
            subject.setCoverPageUrl(subject1.getCoverPageUrl());
            subject.setPercent(percentAvg);
            subject.setProgressValue(new BigDecimal(progressValue));
            subject.setSubjectName(subject1.getName());
src/main/java/com/qxueyou/scc/sys/action/LoginController.java
@@ -1,5 +1,6 @@
package com.qxueyou.scc.sys.action;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -9,14 +10,21 @@
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.alibaba.fastjson.JSONObject;
import com.qxueyou.scc.base.util.*;
import com.qxueyou.scc.wx.service.IWechatService;
import freemarker.template.utility.StringUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.kafka.common.network.LoginType;
import org.apache.tomcat.util.net.openssl.ciphers.Authentication;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
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.util.DigestUtils;
import org.springframework.web.bind.annotation.*;
import com.qxueyou.scc.admin.teacher.service.ITeacherService;
@@ -95,7 +103,104 @@
    @Autowired
    private IOrganizationService organizationService;
    /**
     * 小程序appID
     */
    @Value("${wx.appId}")
    private String appId;
    /**
     * 小程序secret
     */
    @Value("${wx.secret}")
    private String secret;
    /**
     * 公众号appID
     */
    @Value("${wx.app.appId}")
    private String wxappId;
    /**
     * 公众号secret
     */
    @Value("${wx.app.secret}")
    private String wxsecret;
    public static String UUNUMBER="QXYUUNUMBER";
    @Autowired
    IWechatService wechatService;
    /**
     * 微信登录
     *
     * @param uid
     * @throws IOException
     */
    @PostMapping("/wxAccountsLogin")
    @ApiOperation("微信公众号登录")
    @ResponseBody
    public Result wxAccountsLogin(String code) {
        JSONObject gettoken = wechatService.gettoken(wxappId, wxsecret);
        JSONObject OpenId = wechatService.getSessionKeyOrOpenId(code);
        JSONObject user = wechatService.getUser(gettoken.get("access_token").toString(), OpenId.get("openid").toString());
        return new Result(true,"成功",user);
    }
    @PostMapping("/wxlogin")
    @ApiOperation("微信小程序登录")
    @ResponseBody
    public Result wechatLogin(String code,String number) {
        JSONObject sessionKeyOrOpenId = wechatService.getSessionKeyOrOpenId(code);
        JSONObject gettoken = wechatService.gettoken(appId, secret);
        Result phone = wechatService.getNumber(gettoken.get("access_token").toString(), number);
        if(phone.getSuccess()){
            String hql = "from User where deleteFlag is false and mobilePhone = ? ";
            System.out.println(phone.getData());
            List<Object> params =  CollectionUtils.newList(phone.getData());
            User user = commonDAO.findUnique(hql,params, User.class);
            if(user==null){
                //新增用户
                User user1=new User();
                user1.setMobilePhone(phone.getData().toString());
                user1.setOpenId(sessionKeyOrOpenId.get("openid").toString());
                commonDAO.save(user1);
                //新增关联学员
                String addUserSql = "from User where deleteFlag is false and mobilePhone = ? ";
                List<Object> newParams =  CollectionUtils.newList(phone.getData());
                User newUser = commonDAO.findUnique(addUserSql,newParams, User.class);
                StuStudent stuStudent=new StuStudent();
                stuStudent.setStatus(StuStudent.STATUS_REGISTER);
                stuStudent.setUserId(newUser.getUserId());
                stuStudent.setMobilePhone(newUser.getMobilePhone());
                commonDAO.save(stuStudent);
            }
            if(StringUtils.isEmpty(user.getOpenId())){
                user.setOpenId(sessionKeyOrOpenId.get("openid").toString());
                commonDAO.saveOrUpdate(user);
            }
            String studentSql = "from StuStudent where deleteFlag is false and userId = ? ";
            List<Object> stuParams =  CollectionUtils.newList(user.getUserId());
            StuStudent stuStudent = commonDAO.findUnique(studentSql, stuParams, StuStudent.class);
            CacheParamters param = new CacheParamters();
            param.setUserId(user.getUserId());
            param.setCustomRoleValue(user.getEmail());
            param.setCustomOrgId(user.getImei());
            param.setCacheIpFlag(true);
            //         缓存到请求线程
            UserInfoWrapper wrapper = cacheUserInfo(param, null);
            // 存到redis
            redisTemplate.opsForValue().set(UserInfoWrapper.SESSION_USER_INFO_KEY, wrapper);
            return new Result(true,"授权成功",CollectionUtils.newObjectMap("user",user,"ClassId",stuStudent.getClassId()));
        }
        return phone;
    }
    @ApiOperation(value = "登入接口", notes = "")
    @ApiImplicitParams({
@@ -112,8 +217,8 @@
        // 查询用户信息
        String uuNumber=null;
        String uuReNumber=null;
        String hql = "from User where deleteFlag is false and account = ? and password = ? ";
        List<Object> params =  CollectionUtils.newList(account,password);
        String hql = "from User where deleteFlag is false and account = ?";
        List<Object> params =  CollectionUtils.newList(account);
        User user = commonDAO.findUnique(hql,params, User.class);
        if (user == null ) {
            return new Result(false, "用户账户、密码错误");
@@ -142,6 +247,12 @@
        }
        // 插入日志
        insertLoginLog(request, user, account, "SYS-LOGIN");
        String salt = user.getSalt();
        String newPassword= DigestUtils.md5DigestAsHex((salt+password).getBytes());
        //比较用户输入的密码加密后的字符串是否跟注册时填写的加密密码相同
        if (!newPassword.equals(user.getPassword())) {
            return new Result(false, "用户账户、密码错误或缺少凭证");
        }
        // 返回
        return new Result(true, "验证成功",CollectionUtils.newObjectMap("uuNumber",uuNumber,"uuReNumber",uuReNumber));
    }
@@ -303,14 +414,17 @@
        List<Object> params = null;
//        boolean flag=true;
        if("study".equals(logType)){
            hql = "from User where deleteFlag is false and account = ? and password = ? ";
            params =  CollectionUtils.newList(account,password);
            hql = "from User where deleteFlag is false and account = ?";
            params = CollectionUtils.newList(account);
        }else if("portal".equals(logType)){
            hql = "from User where deleteFlag is false and mobilePhone = ?";
            params = CollectionUtils.newList(account);
        }else{
            if(StringUtils.isEmpty(password)) {
                return new Result(false, "用户密码不能为空");
            }
            hql = "from User where deleteFlag is false and account = ? and password = ? ";
            params =  CollectionUtils.newList(account,password);
            hql = "from User where deleteFlag is false and account = ?";
            params =  CollectionUtils.newList(account);
        }
        if(StringUtils.isNotEmpty(organizationId)){
@@ -332,12 +446,18 @@
//            request.getSession().removeAttribute("uuReNumber");
//        }
        if (user == null) {
            return new Result(false, "用户账户不存在");
        }
        // 插入日志
        insertLoginLog(request, user, account, "SYS-LOGIN");
        //考试登录会控制flag变量 其他登录不会 默认true
        if (user == null) {
        String salt = user.getSalt();
        String newPassword= DigestUtils.md5DigestAsHex((salt+password).getBytes());
        //比较用户输入的密码加密后的字符串是否跟注册时填写的加密密码相同
        if("study".equals(logType) || "portal".equals(logType) || "adminis".equals(logType)){
            if (!newPassword.equals(user.getPassword())) {
            return new Result(false, "用户账户、密码错误或缺少凭证");
            }
        }
        // 返回用户基本信息
@@ -371,7 +491,7 @@
        // 存到redis
        redisTemplate.opsForValue().set(UserInfoWrapper.SESSION_USER_INFO_KEY, wrapper);
        request.getSession().setAttribute(UserInfoWrapper.SESSION_USER_INFO_KEY, wrapper);
        if ("study".equals(logType)) {
        if ("study".equals(logType) || "portal".equals(logType)) {
            /*if (StringUtils.isEmpty(ClientUtils.getClassId()) && user.getRoles() == null) {
                return new Result(false, "该用户未加入任何班级或未激活,请联系班主任");
            }*/
src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLive.java
@@ -285,6 +285,10 @@
    @Column(name="TQ_MEETING_PWD", length=32)
    private String meetingPwd;
    
    /**  第三方直播入口 */
    @Column(name="COURSE_ID", length=32)
    private int courseId;
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "videoLive")
    @JsonIgnore
    private List<SchLiveReVideo> liveReVideos;
@@ -720,8 +724,17 @@
        return subject;
    }
    public int getCourseId() {
        return courseId;
    }
    public void setCourseId(int courseId) {
        this.courseId = courseId;
    }
    public void setSubject(Subject subject) {
        this.subject = subject;
    }
    
}
src/main/java/com/qxueyou/scc/teach/live/service/IMediaLiveService.java
@@ -19,7 +19,7 @@
     * @param classId 班级ids
     * @return
     */
    Result add(String name,String content,String teacherId,String teacherName,String subjectId,String subjectName,String definition,String imgPath,Date startTime,Date endTime,boolean record,List<String> classIds);
    Result add(String name,String content,String teacherId,String teacherName,String subjectId,String subjectName,String definition,String imgPath,Date startTime,Date endTime,Integer courseId,boolean record,List<String> classIds);
    
    /**
     * 查询直播
@@ -27,6 +27,8 @@
     * @return
     */
    MediaVideoLive read(String liveId);
    MediaVideoLive revamp(int courseId);
    
    /**
     * 查询直播
@@ -98,7 +100,7 @@
     * @param liveId 直播ID数组
     * @return
     */
    Result delete(String[] liveIds);
    Result delete(String[] liveIds,String [] courseIds) throws Exception;
    
    /**
     * 发布直播
src/main/java/com/qxueyou/scc/teach/live/service/impl/MediaLiveService.java
@@ -7,6 +7,8 @@
import java.util.List;
import java.util.Map;
import com.qxueyou.scc.sdk.MTCloud;
import io.swagger.models.auth.In;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
@@ -52,13 +54,14 @@
    
    @Override
    public Result add(String name, String content, String teacherId,String teacherName ,String subjectId,String subjectName,
            String definition,String imgPath, Date startTime, Date endTime, boolean record,List<String> classIds) {
                      String definition, String imgPath, Date startTime, Date endTime, Integer courseId, boolean record, List<String> classIds) {
        
        UserTeacher teacher = teacherService.getTeacherByUserId(ClientUtils.getUserId());
        
        MediaVideoLive live = new MediaVideoLive();
        TraceUtils.setCreateTrace(live);
        
        live.setCourseId(courseId);
        live.setName(name);
        live.setRemark(content);
        live.setPreviewImgUrl(imgPath);
@@ -157,12 +160,17 @@
    }
    
    @Override
    public Result delete(String[] liveIds) {
    public Result delete(String[] liveIds,String [] courseIds) throws Exception {
        for(String liveId:liveIds) {
            delete(liveId);
            for(String courseId:courseIds) {
                MTCloud client = new MTCloud();
                String s = client.courseDelete(courseId);
            }
        }
        return Result.SUCCESS;
    }
    @Override
    public Result doIssue(String liveId) {
@@ -267,9 +275,9 @@
        params.put("name",keyword + "%");
        
        if(classIds!=null && classIds.length>0){
            hql.append(" and (c.classId in(:classIds) or s.type=:subjectType)");
            hql.append(" and (c.classId in(:classIds) or s.type=:Type)");
            params.put("classIds", classIds);
            params.put("subjectType", Subject.TYPE_PUBLIC_SUBJECT);
            params.put("Type", Subject.TYPE_PUBLIC_SUBJECT);
        }else{
            hql.append(" and  s.type=:subjectType");
            params.put("subjectType", Subject.TYPE_PUBLIC_SUBJECT);
@@ -346,6 +354,13 @@
        return read(MediaVideoLive.class,liveId);
    }
    
    @Override
    public MediaVideoLive revamp(int courseId) {
        String hql = "from MediaVideoLive where deleteFlag is false and courseId=?";
        MediaVideoLive unique = findUnique(hql, CollectionUtils.newList(courseId), MediaVideoLive.class);
        return unique ;
    }
    @SuppressWarnings("unchecked")
    @Override
    public List<MediaVideoLive> readByStatus(List<String> liveIdLst,short[] status) {
src/main/java/com/qxueyou/scc/teach/res/service/impl/HweiYunOBSServiceImpl.java
@@ -23,6 +23,7 @@
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
@@ -105,6 +106,7 @@
        return false;
    }
    @Override
    public List<FileMeta> fileUpload(MultipartFile uploadFile, String objectKey) {
        ObsClient obsClient = null;
@@ -125,17 +127,19 @@
            }
            InputStream inputStream = uploadFile.getInputStream();
            long available = inputStream.available();
//            PutObjectRequest request = new PutObjectRequest(bucketName,objectKey,inputStream);
            PutObjectRequest request = new PutObjectRequest(bucketName,destPath,inputStream);
            ObjectMetadata objectMetadata = new ObjectMetadata();
            objectMetadata.setContentLength(available);
            request.setMetadata(objectMetadata);
//            request.
            // 设置对象访问权限为公共读
            request.setAcl(AccessControlList.REST_CANNED_PUBLIC_READ);
            PutObjectResult result = obsClient.putObject(request);
            fileMeta = new FileMeta();
            ResFile file = fileService.insertFileToDBTwo(objectKey, uploadFile.getSize(), result.getObjectUrl(), uploadFile.getContentType());
//            SetObjectMetadataRequest ObjectMetadataRequest = new SetObjectMetadataRequest(bucketName, destPath);
//            ObjectMetadataRequest.setContentDisposition("inline");
//            obsClient.setObjectMetadata(ObjectMetadataRequest);
            fileMeta.setFileId(file.getFileId());
            fileMeta.setPath(result.getObjectUrl());
            fileMeta.setFileSize(uploadFile.getSize() / 1024 + "kb");
src/main/java/com/qxueyou/scc/teach/res/service/impl/ResService.java
@@ -129,7 +129,7 @@
        Res res = read(Res.class, resId);
        resItemServiceMap.get(res.getType()).update(res.getItemDestId(), name);
//        resItemServiceMap.get(res.getType()).update(res.getItemDestId(), name);
        TraceUtils.setUpdateTrace(res);
        res.setName(name);
@@ -306,9 +306,9 @@
    public Result readAccessPath(String resId, String attribute) {
        Res res = read(Res.class, resId);
        String type="0";
//        Object path = Res.FILE_TYPE_VIDEO.equals(res.getType())? JSONObject.parse(resItemServiceMap.get(res.getType()).readAccessPath(res.getItemDestId(), attribute)):CollectionUtils.newObjectMap("path", resItemServiceMap.get(res.getType()).readAccessPath(res.getItemDestId(), attribute));
        Object path = Res.FILE_TYPE_VIDEO.equals(res.getType())? resItemServiceMap.get(res.getType()).readAccessPath(res.getItemDestId(), attribute):resItemServiceMap.get(res.getType()).readAccessPath(res.getItemDestId(), attribute);
        Object path = Res.FILE_TYPE_VIDEO.equals(type)? resItemServiceMap.get(type).readAccessPath(res.getItemDestId(), attribute):resItemServiceMap.get(type).readAccessPath(res.getItemDestId(), attribute);
        if(Res.FILE_TYPE_DOC.equals(res.getType())) {
             return new Result(true, "success",
                     CollectionUtils.newObjectMap("path", path, "name", res.getName(), "coverPageUrl", res.getCoverPageUrl(), "size",
src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemDocService.java
@@ -95,7 +95,7 @@
        ResItemDoc doc = read(ResItemDoc.class, id);
        TraceUtils.setUpdateTrace(doc);
//        TraceUtils.setUpdateTrace(doc);
        doc.setName(name);
src/main/java/com/qxueyou/scc/teach/student/model/StuStudent.java
@@ -28,7 +28,7 @@
    private static final long serialVersionUID = 7504161189427721559L;
    
    /*
     * 状态: 已报名
     * 状态: 已报名,未激活,已毕业
     */
    public static final String STATUS_REGISTER = "register";
    public static final String STATUS_ACTIVE = "active";
@@ -64,6 +64,7 @@
    private String studentNumber;
    private String attendanceStatus;
    private String graduationText;
    private String comment;
    public StuStudent() {
    }
@@ -81,7 +82,7 @@
    public StuStudent(String studentId, Date createTime, Date updateTime, String creator, String createId,
            String updator, String updateId, boolean deleteFlag, String userId, String name, String classId,
            String tenantId, String status, String attendanceStatus, String graduationText,String studentNumber) {
            String tenantId, String status, String attendanceStatus, String graduationText,String comment,String studentNumber) {
        this.studentId = studentId;
        this.createTime = createTime;
        this.updateTime = updateTime;
@@ -97,6 +98,7 @@
        this.status = status;
        this.attendanceStatus = attendanceStatus;
        this.graduationText = graduationText;
        this.comment = comment;
        this.studentNumber=studentNumber;
    }
@@ -243,6 +245,14 @@
        this.graduationText = graduationText;
    }
    @Column(name = "COMMENT", length = 200)
    public String getComment() {
        return this.comment;
    }
    public void setComment(String comment) {
        this.comment = comment;
    }
    @Column(name = "STUDENT_NO", length = 32)
    public String getStudentNo() {
        return studentNo;
src/main/java/com/qxueyou/scc/teach/student/service/impl/StudentService.java
@@ -10,7 +10,9 @@
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.RandomUtil;
import com.qxueyou.scc.admin.classes.model.ClsClass;
import com.qxueyou.scc.base.dao.CommonDAO;
import com.qxueyou.scc.exam.model.ExamResultV;
import com.qxueyou.scc.exercise.model.ExerciseCompleteInfo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -47,6 +49,9 @@
    @Autowired
    StudentDAO dao;
    @Autowired
    CommonDAO commonDAO;
    @Override
    public Result insertStudent(String classId, String name, String studentNo, boolean sex, String phoneNo, String orgId) {
@@ -224,6 +229,7 @@
    public Result doActivateStudent(String[] studentIds) {
        for (String studentId : studentIds) {
            activateStudent(studentId, StuStudent.STATUS_ACTIVE);
            ModeUpdate(studentId,StuStudent.STATUS_ACTIVE);
        }
        return new Result(true);
    }
@@ -232,6 +238,24 @@
    public Result doDeActivateStudent(String[] studentIds) {
        for (String studentId : studentIds) {
            activateStudent(studentId, StuStudent.STATUS_DEACTIVE);
            ModeUpdate(studentId,StuStudent.STATUS_DEACTIVE);
        }
        return new Result(true);
    }
    private Result ModeUpdate(String studentId,String status){
        if(status.equals(StuStudent.STATUS_ACTIVE)){
            String    hql = "from ExerciseCompleteInfo where studentId=? and deleteFlag is false";
            List<Object> Params =  CollectionUtils.newList(studentId);
            ExerciseCompleteInfo unique = findUnique(hql, Params, ExerciseCompleteInfo.class);
            unique.setDeleteFlag(false);
            commonDAO.update(unique);
        }else {
            String    hql = "from ExerciseCompleteInfo where studentId=? and deleteFlag is false";
            List<Object> Params =  CollectionUtils.newList(studentId);
            ExerciseCompleteInfo unique = findUnique(hql, Params, ExerciseCompleteInfo.class);
            unique.setDeleteFlag(true);
            commonDAO.update(unique);
        }
        return new Result(true);
    }
@@ -244,13 +268,13 @@
        }
        TraceUtils.setUpdateTrace(student);
        String currentTime = LocalDateTimeUtil.format(LocalDateTime.now(), "yyMMddHHmmssSSS");
        String examCardNo = currentTime.concat(RandomUtil.randomNumbers(1));
        student.setStudentNumber(examCardNo);
//        String currentTime = LocalDateTimeUtil.format(LocalDateTime.now(), "yyMMddHHmmssSSS");
//
//        String examCardNo = currentTime.concat(RandomUtil.randomNumbers(1));
//
//        student.setStudentNumber(examCardNo);
        student.setStatus(status);
        save(student);
        commonDAO.update(student);
        clsService.addStudent(student.getClassId(), StuStudent.STATUS_DEACTIVE.equals(status) ? -1 : 1);
src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java
@@ -607,7 +607,6 @@
            }
            subject.put("percent", new BigDecimal(percentAvg));
            subject.put("progressValue", new BigDecimal(progressValue));
            subject.put("lectureParentId", map.get("lectureParentId"));
            subject.put("lectureId", map.get("lectureId"));
            subject.put("unCommitExerciseCount", exerciseInfoService.getUnCommitExerciseCount(classId, userId));
@@ -645,7 +644,7 @@
            String className = "公开课";
            subjectMap.put("subjectName",subject.getSubjectName());
            subjectMap.put("subjectId",subject.getSubjectId());
            subjectMap.put("coverPageUrl",subject.getCoverPageUrl());
            subjectMap.put("percent", new BigDecimal(percentAvg));
            subjectMap.put("progressValue", new BigDecimal(progressValue));
            subjectMap.put("className",className);
src/main/java/com/qxueyou/scc/user/model/User.java
@@ -38,6 +38,19 @@
    @JsonIgnore
    private String createId;
    @Column(name = "SALT", nullable = false, length = 200)
    @JsonIgnore
    private String salt;
    public String getSalt() {
        return salt;
    }
    public void setSalt(String salt) {
        this.salt = salt;
    }
    /**
     * 创建时间
     */
@@ -144,6 +157,20 @@
    @Column(name = "IMEI", length = 255)
    private String imei;
    /**
     * 绑定账号ID
     */
    @Column(name = "OPENID", length = 255)
    private String openId;
    public String getOpenId() {
        return openId;
    }
    public void setOpenId(String openId) {
        this.openId = openId;
    }
    @ManyToMany(fetch = FetchType.LAZY, mappedBy = "users")
    @JsonIgnore
    private List<UserRole> roles;
src/main/java/com/qxueyou/scc/user/service/impl/UserService.java
@@ -1,6 +1,7 @@
package com.qxueyou.scc.user.service.impl;
import java.util.List;
import java.util.UUID;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -20,6 +21,7 @@
import com.qxueyou.scc.user.model.User;
import com.qxueyou.scc.user.model.UserReRoleUser;
import com.qxueyou.scc.user.service.IUserService;
import org.springframework.util.DigestUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@@ -60,6 +62,9 @@
//        System.out.println(user.getUserId());
//        System.out.println(user.getOrganizationId());
//        System.out.println(StuStudent.STATUS_ACTIVE);
        System.out.println(user.getOrganizationId());
        System.out.println(user.getUserId());
        ClsClass objClsClass = this.findUnique("select c from StuStudent t,"
                + " ClsClass c where c.classId = t.classId "
                + " and c.orgId = ? and t.userId = ? and t.status = ? order by t.createTime desc", CollectionUtils.newList(user.getOrganizationId(), user.getUserId(), StuStudent.STATUS_ACTIVE), ClsClass.class);
@@ -67,7 +72,6 @@
        wrapper.setOrg(org);
        wrapper.setClass(objClsClass);
        wrapper.setLoginInfo(param.getCacheIpFlag(), param.getIp(), param.getPlatForm());
        System.out.println("aaa"+user.getUserId());
        session.setAttribute(UserInfoWrapper.INF_USER_ID,user.getUserId());
        session.setAttribute(UserInfoWrapper.INF_USER_NAME,user.getName());
        if(objClsClass!=null){
@@ -83,13 +87,18 @@
    }
    private User newUser(String name, String account, String mobilePhone, String password, Boolean sex, String orgId) {
        //随机字符串
        String salt= UUID.randomUUID().toString();
        User user = new User();
        TraceUtils.setCreateTrace(user);
        user.setAccount(account);
        user.setName(name);
        //盐值
        user.setSalt(salt);
        //对密码进行加密处理
        String newPassword= DigestUtils.md5DigestAsHex((salt+password).getBytes());
        user.setPassword(newPassword);
        user.setMobilePhone(mobilePhone);
        user.setPassword(password);
        user.setSex(sex);
        user.setOrganizationId(orgId);
        save(user);
@@ -123,11 +132,18 @@
    @Override
    public Result updatePassword(String userId, String usedPass, String pass) {
        User user = read(User.class, userId);
        //随机字符串
        String salt= UUID.randomUUID().toString();
        //盐值
        user.setSalt(salt);
        //对密码进行加密处理
        String newPassword= DigestUtils.md5DigestAsHex((salt+pass).getBytes());
        String newPasswords= DigestUtils.md5DigestAsHex((salt+usedPass).getBytes());
        if (StringUtils.isNotBlank(usedPass) && StringUtils.isNotBlank(pass)) {
            if (!user.getPassword().equals(usedPass)) {
            if (!user.getPassword().equals(newPasswords)) {
                return new Result(false, "输入的旧密码错误");
            }
            user.setPassword(pass);
            user.setPassword(newPassword);
        }
        TraceUtils.setUpdateTrace(user);
        save(user);
@@ -175,8 +191,14 @@
    public Result updatePassword(String userId, String password) {
        User user = read(User.class, userId);
        //随机字符串
        String salt= UUID.randomUUID().toString();
        //盐值
        user.setSalt(salt);
        //对密码进行加密处理
        String newPassword= DigestUtils.md5DigestAsHex((salt+password).getBytes());
        TraceUtils.setUpdateTrace(user);
        user.setPassword(password);
        user.setPassword(newPassword);
        save(user);
@@ -217,11 +239,12 @@
                             Boolean sex) {
        User dbUser = read(User.class, userId);
        String salt = dbUser.getSalt();
        String newPassword= DigestUtils.md5DigestAsHex((salt+password).getBytes());
        if (dbUser.getAccount().equals(account)) {
            dbUser.setName(name);
            dbUser.setMobilePhone(mobilePhone);
            dbUser.setPassword(password);
            dbUser.setPassword(newPassword);
            TraceUtils.setCreateTrace(dbUser);
            save(dbUser);
            return new Result(true, "success");
@@ -234,7 +257,7 @@
        dbUser.setAccount(account);
        dbUser.setName(name);
        dbUser.setMobilePhone(mobilePhone);
        dbUser.setPassword(password);
        dbUser.setPassword(newPassword);
        TraceUtils.setCreateTrace(dbUser);
        save(dbUser);
        return new Result(true, "success");
src/main/java/com/qxueyou/scc/web/AuthorizeFilter.java
@@ -95,9 +95,9 @@
        //是否合法
//        if(!licenseService.isValid()) {
//            log.debug("license invalid");
//            forbiddenAsLicense(httpResponse);
//            return;
//        }
////            forbiddenAsLicense(httpResponse);
////            return;
////        }
        if (!addClientInfo(httpRequest)) {
            log.debug("非法请求:" + httpRequest.getRequestURI());
src/main/java/com/qxueyou/scc/wx/service/IWechatService.java
New file
@@ -0,0 +1,32 @@
package com.qxueyou.scc.wx.service;
import com.alibaba.fastjson.JSONObject;
import com.qxueyou.scc.base.model.Result;
import com.qxueyou.scc.teach.student.model.StuStudent;
import java.util.Map;
public interface IWechatService {
    /**
     * 查询用户
     * @param code
     * @param type
     * @return
     *
     * @author 李岩龙
     * @date 2021年4月2日 下午3:31:05
     */
    JSONObject getSessionKeyOrOpenId(String code);
    Result getNumber(String tonken, String number);
    JSONObject gettoken(String appid,String secret);
    JSONObject getUser(String token,String openId);
//    Result isBindWx(String userId);
//    Result getSignature(String url);
}
src/main/java/com/qxueyou/scc/wx/service/impl/WechatService.java
New file
@@ -0,0 +1,187 @@
package com.qxueyou.scc.wx.service.impl;
import com.alibaba.druid.util.HttpClientUtils;
import com.alibaba.druid.util.StringUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.qxueyou.scc.base.model.Result;
import com.qxueyou.scc.base.service.ICacheService;
import com.qxueyou.scc.teach.student.model.StuStudent;
import com.qxueyou.scc.wx.service.IWechatService;
import com.qxueyou.scc.wx.utils.HttpClientUtil;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.io.IOException;
import java.net.URI;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
@Service
public class WechatService implements IWechatService {
//    @Autowired
//    IUserService userService;
    /**
     * 小程序appID
     */
    @Value("${wx.appId}")
    private String appId;
    /**
     * 小程序secret
     */
    @Value("${wx.secret}")
    private String secret;
    @Autowired
    private ICacheService cacheService;
    private final Logger logger = LogManager.getLogger();
    @Override
    public JSONObject getSessionKeyOrOpenId(String code) {
        String requestUrl = "https://api.weixin.qq.com/sns/jscode2session";
        Map<String, String> requestUrlParam = new HashMap<>();
        // https://mp.weixin.qq.com/wxopen/devprofile?action=get_profile&token=164113089&lang=zh_CN
        //小程序appId
        requestUrlParam.put("appid", appId);
        //小程序secret
        requestUrlParam.put("secret", secret);
        //小程序端返回的code
        requestUrlParam.put("js_code", code);
        //默认参数
        requestUrlParam.put("grant_type", "authorization_code");
        //发送post请求读取调用微信接口获取openid用户唯一标识
        JSONObject jsonObject = JSON.parseObject(HttpClientUtil.doPost(requestUrl, requestUrlParam));
        return jsonObject;
    }
    @Override
    public Result getNumber(String tonken, String number) {
        JSONObject jsonCode = new JSONObject();
        jsonCode.put("code",number);
        String resPhone = HttpClientUtil.doPostUrl("https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" + tonken, jsonCode);
        if(StringUtils.isEmpty(resPhone) || !resPhone.contains("phone_info") ||  !resPhone.contains("phoneNumber")){
            return new Result(false,"微信官方修改了小程序获取用户手机号码相关接口!");
        }
        JSONObject resPhoneInfo = JSON.parseObject(resPhone);
        JSONObject phoneInfo=resPhoneInfo.getJSONObject("phone_info");
        System.out.println(resPhoneInfo);
        System.out.println(phoneInfo);
        String phoneNumber = phoneInfo.get("phoneNumber").toString();
        return new Result(true,"获取手机号成功",phoneNumber);
//        String requestUrl = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token="+tonken+jsonObject.toJSONString();
//        Map<String, String> requestUrlParam = new HashMap<>();
//        requestUrlParam.put("code", number);
//        JSONObject s =JSON.parseObject(HttpClientUtil.doPost(requestUrl));
//        return s;
    }
    @Override
    public JSONObject gettoken(String appid, String secret) {
        String requestUrl = "https://api.weixin.qq.com/cgi-bin/token";
        Map<String, String> requestUrlParam = new HashMap<>();
        requestUrlParam.put("grant_type", "client_credential");
        requestUrlParam.put("appid", appid);
        requestUrlParam.put("secret", secret);
        JSONObject s = JSON.parseObject(HttpClientUtil.doGet(requestUrl, requestUrlParam));
        return s;
    }
    @Override
    public JSONObject getUser(String token, String openId) {
        String requestUrl = "https://api.weixin.qq.com/sns/userinfo";
        Map<String, String> requestUrlParam = new HashMap<>();
        requestUrlParam.put("access_token", token);
        requestUrlParam.put("openid", openId);
        requestUrlParam.put("lang", "zh_CN");
        JSONObject s = JSON.parseObject(HttpClientUtil.doGet(requestUrl, requestUrlParam));
        return s;
    }
//    private String getWechatHeadImgUrl(String unionId) {
//        WechatUserDO wxUser = this.template.findOne(Query.query(condition().and("unionId").is(unionId)), WechatUserDO.class);
//        return wxUser.getHeadImgUrl();
//    }
//    @Override
//    public Result isBindWx(String userId) {
//        UserStudentDO studentDO = read(UserStudentDO.class, userId);
//        boolean status = false;
//        if (StringUtils.isNotBlank(studentDO.getUnionId())) {
//            status = true;
//        }
//        String url = "";
//        if (status) {
//            url = getWechatHeadImgUrl(studentDO.getUnionId());
//        }
//        return new Result(true, "status", status, "url", url);
//    }
//
//    public Result getSignature(String url) {
//        try {
//            long timestamp = System.currentTimeMillis() / 1000;
//            String randomStr = RandomUtils.getRandomStr();
//            //远程调用获取ticket
////            String jsapiTicket ="";//getJsapiTicket(false);
//            RestTemplate restTemplate = new RestTemplate();
//
//            String jsapiTicket = restTemplate.getForObject("http://192.168.1.111/job/ticket", String.class);
//
//            String signature = SHA1.genWithAmple("jsapi_ticket=" + jsapiTicket,
//                    "noncestr=" + randomStr, "timestamp=" + timestamp, "url=" + url);
//            WxJsapiSignature jsapiSignature = new WxJsapiSignature();
//            jsapiSignature.setAppId(wxProperties.getAppId());
//            jsapiSignature.setTimestamp(timestamp);
//            jsapiSignature.setNonceStr(randomStr);
//            jsapiSignature.setUrl(url);
//            jsapiSignature.setSignature(signature);
//            return new Result(true, jsapiSignature);
//        } catch (Exception e) {
//            log.error(e, e);
//            return new Result(false, "获取签名失败");
//        }
//    }
//    @Override
//    public String getOpenId(String userId) {
//        UserStudentDO user = read(UserStudentDO.class, userId);
//
//        return user.getOpenId();
//    }
}
src/main/java/com/qxueyou/scc/wx/utils/Code2Session.java
New file
@@ -0,0 +1,32 @@
package com.qxueyou.scc.wx.utils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
 * <p>
 *     调用微信接口 返回授权信息~
 * </p>
 * @author echo lovely
 * @date 2020/12/4 21:56
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Code2Session {
    //用户唯一标识
    private String openid;
    // 会话密钥
    private String session_key;
    // 用户在开放平台的唯一标识符
    private String unionid;
    // 错误码
    private Integer errcode;
    // 错误信息
    private String errmsg;
}
src/main/java/com/qxueyou/scc/wx/utils/HttpClientUtil.java
New file
@@ -0,0 +1,167 @@
package com.qxueyou.scc.wx.utils;
import com.alibaba.fastjson.JSONObject;
import net.sf.json.JSONString;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class HttpClientUtil {
    public static String doGet(String url, Map<String, String> param) {
        // 创建Httpclient对象
        CloseableHttpClient httpclient = HttpClients.createDefault();
        String resultString = "";
        CloseableHttpResponse response = null;
        try {
            // 创建uri
            URIBuilder builder = new URIBuilder(url);
            if (param != null) {
                for (String key : param.keySet()) {
                    builder.addParameter(key, param.get(key));
                }
            }
            URI uri = builder.build();
            // 创建http GET请求
            HttpGet httpGet = new HttpGet(uri);
            // 执行请求
            response = httpclient.execute(httpGet);
            // 判断返回状态是否为200
            if (response.getStatusLine().getStatusCode() == 200) {
                resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (response != null) {
                    response.close();
                }
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return resultString;
    }
    public static String doGet(String url) {
        return doGet(url, null);
    }
    public static String doPost(String url, Map<String, String> param) {
        // 创建Httpclient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        CloseableHttpResponse response = null;
        String resultString = "";
        try {
            // 创建Http Post请求
            HttpPost httpPost = new HttpPost(url);
            // 创建参数列表
            if (param != null) {
                List<NameValuePair> paramList = new ArrayList<>();
                for (String key : param.keySet()) {
                    System.out.println(key);
                    System.out.println(param.get(key));
                    paramList.add(new BasicNameValuePair(key, param.get(key)));
                }
                // 模拟表单
                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList);
                httpPost.setEntity(entity);
            }
            // 执行http请求
            response = httpClient.execute(httpPost);
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return resultString;
    }
    public static String doPostUrl(String url, JSONObject jsonCode) {
        // 创建Httpclient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        CloseableHttpResponse response = null;
        String resultString = "";
        try {
            // 创建Http Post请求
            HttpPost httpPost = new HttpPost(url);
            String s = jsonCode.toJSONString(jsonCode);
            StringEntity entity=new StringEntity(s);
            httpPost.setEntity(entity);
            // 执行http请求
            response = httpClient.execute(httpPost);
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return resultString;
    }
    public static String doPost(String url) {
        return doPost(url, null);
    }
    public static String doPostJson(String url, String json) {
        // 创建Httpclient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        CloseableHttpResponse response = null;
        String resultString = "";
        try {
            // 创建Http Post请求
            HttpPost httpPost = new HttpPost(url);
            // 创建请求内容
            StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
            httpPost.setEntity(entity);
            // 执行http请求
            response = httpClient.execute(httpPost);
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return resultString;
    }
}
src/main/resources/SensitiveWordList.txt
New file
Diff too large
src/main/resources/application.properties
@@ -19,7 +19,7 @@
spring.http.multipart.maxRequestSize=3000Mb
#mysqldb.datasource.url=jdbc:mysql://rds88t2of1fi184y4s5wo.mysql.rds.aliyuncs.com:3306/scc?useUnicode=true&characterEncoding=GBK&characterSetResults=GBK&zeroDateTimeBehavior=convertToNull
#mysqldb.datasource.url=jdbc:mysql://10.1.80.52:3306/rsdb?useUnicode=true&characterEncoding=GBK&characterSetResults=GBK&zeroDateTimeBehavior=convertToNull
mysqldb.datasource.url=jdbc:mysql://localhost:3306/scc?useUnicode=true&characterEncoding=GBK&characterSetResults=GBK&zeroDateTimeBehavior=convertToNull
mysqldb.datasource.url=jdbc:mysql://110.41.147.200:3306/scc?useUnicode=true&characterEncoding=GBK&characterSetResults=GBK&zeroDateTimeBehavior=convertToNull
mysqldb.datasource.username=root
#mysqldb.datasource.username=rs
#######\uFFFD\uFFFD\uFFFD\uFFFD\u03AA\uFFFD\uFFFD\u05F0\uFFFD\uFFFD\u03F5\u0373\uFFFD\uFFFD\u012C\uFFFD\uFFFD\uFFFD\u00FB\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u02FF\uFFFD#############
@@ -27,7 +27,7 @@
#mysqldb.datasource.password=fwefwefWEFefewf$   #
# port:3370                                     #
#################################################
mysqldb.datasource.password=12345678
mysqldb.datasource.password=123456
#mysqldb.datasource.password=QQTec@2019
#mysqldb.datasource.url=jdbc:mysql://rds88t2of1fi184y4s5wo.mysql.rds.aliyuncs.com:3306/scc_sr?useUnicode=true&characterEncoding=GBK&characterSetResults=GBK&zeroDateTimeBehavior=convertToNull
#mysqldb.datasource.username=ssc_sr
@@ -93,6 +93,11 @@
# default DefaultExpiration time : 30 minutes(600 seconds)
spring.redis.default.ttl=600
wx.appId=wx953bf2ed18e7836b
wx.secret=1d8b00beaddf5c8f36d1fedc14ef7973
wx.app.appId=wx5a7c0d4798fbfdc2
wx.app.secret=95c5470a52a2c4e037741f82246f4d86
logging.config=classpath:log4j2.xml
src/main/resources/log4j2.xml
@@ -6,8 +6,8 @@
        </Console>
        <RollingRandomAccessFile name="File"
            fileName="D:/log/qxueyou.log" append="true"
            filePattern="D:/log/qxueyou-%d{yyyyMMdd}-%i.log">
            fileName="C:/log/qxueyou.log" append="true"
            filePattern="C:/log/qxueyou-%d{yyyyMMdd}-%i.log">
            <PatternLayout>
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</Pattern>
            </PatternLayout>
@@ -19,8 +19,8 @@
        </RollingRandomAccessFile>
        
        <RollingRandomAccessFile name="error_file"
            fileName="D:/log/qxueyou_err.log" append="true"
            filePattern="D:/log/qxueyou_err-%d{yyyyMMdd}-%i.log">
            fileName="C:/log/qxueyou_err.log" append="true"
            filePattern="C:/log/qxueyou_err-%d{yyyyMMdd}-%i.log">
            <PatternLayout>
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</Pattern>
            </PatternLayout>
@@ -32,8 +32,8 @@
        </RollingRandomAccessFile>
        
        <RollingRandomAccessFile name="OnsFile"
            fileName="D:/logOns/qxueyouOns.log" append="true"
            filePattern="D:/logOns/qxueyouOns-%d{yyyyMMdd}-%i.log">
            fileName="C:/logOns/qxueyouOns.log" append="true"
            filePattern="C:/logOns/qxueyouOns-%d{yyyyMMdd}-%i.log">
            <PatternLayout>
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</Pattern>
            </PatternLayout>
src/main/resources/static/images/img/rzBadge.png